dev-master
9999999-dev http://framework.zend.com/Handle Producer & Customer Reviews in ZF2
BSD-3-Clause
The Requires
framework zf2
Handle Producer & Customer Reviews in ZF2
Update doctrine, (*1)
Example Usage, (*2)
1) Bid was accepted and project+payments are complete. A cron to create review might look like:, (*3)
$datetime = new \DateTime(); $datetime->modify('+' . self::ReviewCreateDelay . ' hours');, (*4)
// Get all accepted offers in the past with no review // Using sql as dql does not support 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";, (*5)
$offerRepo = $this->entityManager->getRepository('Trip\Entity\Offer');, (*6)
$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'])); }, (*7)
$this->entityManager->flush();, (*8)
2) When page loads check for outstanding reviews:, (*9)
$review_ids = $this->reviewService->getOutstanding(true);, (*10)
3) Using a review id get review details/questions for UI:, (*11)
$info = array( 'review' => $this->reviewService->getReviewDetails((int)$id, $this->userService->get_user()), 'details' => $this->userService->getDetailsOfReview($id, $this->userService->get_user()), ), (*12)
4) Save review info entered by user, (*13)
$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);, (*14)
$this->entityManager->flush();, (*15)
5) List all producer/customer reviews for a user, (*16)
$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);, (*17)
6) Example jsx for building review stars. Amend for plain javascript, (*18)
var star = { get_stars: function(num){ var stars = [];, (*19)
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); }
}, (*20)
// Get average review for customer console.log(star.get_average_stars(r.customerReviews)); // Get stars for an individual review console.log(star.get_stars(r.review.overall));, (*21)
Handle Producer & Customer Reviews in ZF2
BSD-3-Clause
framework zf2