stewmegaw/glidereviews

处理 ZF2 中的生产者与客户评价

dev-master 2016-07-11 15:17 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:06 UTC


README

  • composer require stewmegaw/glidereviews dev-master
  • 将 /config/glidereviews.global.php.dist 复制到 /config/autoload 并删除 .dist 扩展名
  • 自定义配置
  • 将 'GlideReviews' 添加到 application.config.php 模块列表中
  • 评价项实体必须实现 PaymentItemInterface
  • 用户项实体必须实现 UserInterface
  • 更新 doctrine
  • 示例用法

1) 招标已接受且项目+支付已完成。创建评价的 cron 可能如下所示

$datetime = new \DateTime(); $datetime->modify('+' . self::ReviewCreateDelay . ' hours');

// 获取所有过去接受但没有评价的招标 // 使用 sql 因为 dql 不支持 Right Join $sql = " SELECT o.id,o.user_from_id,t.user_id FROM review AS r RIGHT JOIN offer AS o ON o.id = r.reviewItem_id JOIN trip AS t ON o.trip_id = t.id WHERE o.status = " . Offer::OFFER_STATUS_ACCEPTED . " AND o.until_date <= '" . $datetime->format('Y-m-d h:i:s') . "' AND r.id IS NULL";

$offerRepo = $this->entityManager->getRepository('Trip\Entity\Offer');

$direct_db_connection = $this->entityManager->getConnection(); $iterator = $direct_db_connection->query($sql); while (is_object($iterator) AND ( $r = $iterator->fetch()) !== FALSE) {

$this->reviewService->createReview($offerRepo->find($r['id']), $this->userService->get_user($r['user_id']), $this->userService->get_user($r['user_from_id']));

}

$this->entityManager->flush();

2) 页面加载时检查待处理的评价

$review_ids = $this->reviewService->getOutstanding(true);

3) 使用评价 ID 获取评价详情/问题以用于 UI

$info = array(

'review' => $this->reviewService->getReviewDetails((int)$id, $this->userService->get_user()),
'details' => $this->userService->getDetailsOfReview($id, $this->userService->get_user()),

)

4) 保存用户输入的评价信息

$review = $this->reviewService->get_review($id); if ($review->getProducer() == $this->userService->get_user())

$this->reviewService->setProducerFields($review->getReviewItem(), $data);

else

$this->reviewService->setCustomerFields($review->getReviewItem(), $data);

$this->entityManager->flush();

5) 列出用户的全部生产者/客户评价

$user = $this->userService->get_user($id); $reviews = array('customer' => array(), 'producer' => array()); $customerReviews = $this->reviewService->getCustomerReviewsReceived($user); foreach ($customerReviews as $idx => $review)

$reviews['customer'][$idx] = array_merge($this->userService->getDetailsOfReview($review->getId(), $user), $this->reviewService->getReviewDetails($review, $user, null));

$producerReviews = $this->reviewService->getProducerReviewsReceived($user); foreach ($producerReviews as $idx => $review)

$reviews['producer'][$idx] = array_merge($this->userService->getDetailsOfReview($review->getId(), $user), $this->reviewService->getReviewDetails($review, $user, null));

return array('reviews' => $reviews);

6) 用于构建评价星星的 jsx 示例。根据需要修改为纯 JavaScript

var star = {

get_stars: function(num){
	var stars = [];

	for(var i = 1; i <= num; i++)
		stars.push(<StarIconFull/>);
	if((num/0.5)%2!=0)
		stars.push(<StarIconHalf/>);
	for(var i = Math.ceil(num)+1; i <= 5; i++)

stars.push(<StarIconEmpty/>);

	return stars;
},
get_average_stars: function(d){
	if(!d.length)
	{
		var stars = [];
		for(var i = 1; i <= 5; i++)
		{
			stars.push(
				<StarIconEmpty/>

);

		}
		return stars;
	}

	var total = 0;
	for(var i = 0; i< d.length; i++)
	{
		total += d[i].overall;
	}
	
	return star.get_stars(Math.round((total/d.length)*2)/2);
}

}

// 获取客户的平均评价 console.log(star.get_average_stars(r.customerReviews)); // 获取单个评价的星星 console.log(star.get_stars(r.review.overall));