stewmegaw / glidereviews
Requires
- php: >=5.5
- doctrine/doctrine-orm-module: ~0.9.2
- zendframework/zendframework: ~2.5
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));