From 522e25972dea7a1f1e32afa5d38336373ecf7b68 Mon Sep 17 00:00:00 2001 From: Mathis Chambon Date: Mon, 26 Feb 2024 14:38:05 +0100 Subject: [PATCH 1/2] feat(next-reviews): updated front controller + template --- Controller/FrontController.php | 119 ++++++++++-------- Loop/GuaranteedProductLoop.php | 13 +- Loop/GuaranteedSiteLoop.php | 13 +- .../default/includes/next-reviews.html | 8 ++ 4 files changed, 85 insertions(+), 68 deletions(-) create mode 100644 templates/frontOffice/default/includes/next-reviews.html diff --git a/Controller/FrontController.php b/Controller/FrontController.php index d48e225..bac04fc 100644 --- a/Controller/FrontController.php +++ b/Controller/FrontController.php @@ -10,70 +10,81 @@ use Symfony\Component\Routing\Annotation\Route; use Thelia\Controller\Front\BaseFrontController; use Thelia\Core\HttpFoundation\JsonResponse; +use Thelia\Core\HttpFoundation\Request; +use Thelia\Core\HttpFoundation\Response; #[Route(path: "/guaranteed_opinion", name: "guaranteed_opinion")] class FrontController extends BaseFrontController { - /** - * @throws PropelException - */ - #[Route(path: "/site_reviews/offset/{offset}/limit/{limit}", name: "site_reviews", methods: "GET")] - public function siteReviews(int $offset, int $limit): JsonResponse - { - $reviews = []; + /** + * @throws PropelException + */ + #[Route(path: "/site_reviews/offset/{offset}/limit/{limit}", name: "site_reviews", methods: "GET")] + public function siteReviews(int $offset, int $limit, Request $request): JsonResponse + { + $reviews = []; - $siteReviews = GuaranteedOpinionSiteReviewQuery::create() - ->setLimit($limit) - ->setOffset($offset) - ->find() - ; + $siteReviews = GuaranteedOpinionSiteReviewQuery::create() + ->setLimit($limit) + ->setOffset($offset) + ->find(); - foreach ($siteReviews as $review) { - $reviews[] = [ - 'rate' => $review->getRate(), - 'name' => $review->getName(), - 'date' => $review->getReviewDate()?->format('Y-m-d'), - 'message' => $review->getReview() - ]; - } - - return new JsonResponse([ - 'total' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_TOTAL_CONFIG_KEY), - 'average' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_AVERAGE_CONFIG_KEY), - 'reviews' => $reviews - ]); + foreach ($siteReviews as $review) { + $reviews[] = [ + 'rate' => $review->getRate(), + 'name' => $review->getName(), + 'date' => $review->getReviewDate()?->format('Y-m-d'), + 'message' => $review->getReview() + ]; } - /** - * @throws PropelException - */ - #[Route(path: "/product_reviews/{id}/offset/{offset}/limit/{limit}", name: "product_reviews", methods: "GET")] - public function productReviews(int $id, int $offset, int $limit): JsonResponse - { - $reviews = []; + return new JsonResponse([ + 'total' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_TOTAL_CONFIG_KEY), + 'average' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_AVERAGE_CONFIG_KEY), + 'reviews' => $reviews + ]); + } - $productRating = GuaranteedOpinionProductRatingQuery::create() - ->findOneByProductId($id); + /** + * @throws PropelException + */ + #[Route(path: "/product_reviews/{id}/offset/{offset}/limit/{limit}", name: "product_reviews", methods: "GET")] + public function productReviews(int $id, int $offset, int $limit, Request $request): JsonResponse|Response + { + $reviews = []; - $productReviews = GuaranteedOpinionProductReviewQuery::create() - ->filterByProductId($id) - ->setLimit($limit) - ->setOffset($offset) - ->find(); + $productRating = GuaranteedOpinionProductRatingQuery::create() + ->findOneByProductId($id); - foreach ($productReviews as $review) { - $reviews[] = [ - 'rate' => $review->getRate(), - 'name' => $review->getName(), - 'date' => $review->getReviewDate()?->format('Y-m-d'), - 'message' => $review->getReview() - ]; - } + $productReviews = GuaranteedOpinionProductReviewQuery::create() + ->filterByProductId($id) + ->setLimit($limit) + ->setOffset($offset) + ->find(); - return new JsonResponse([ - 'total' => $productRating?->getTotal(), - 'average' => $productRating?->getAverage(), - 'reviews' => $reviews - ]); + foreach ($productReviews as $review) { + $reviews[] = [ + 'rate' => $review->getRate(), + 'name' => $review->getName(), + 'date' => $review->getReviewDate()?->format('Y-m-d'), + 'message' => $review->getReview() + ]; } -} \ No newline at end of file + + $responseData = [ + 'total' => $productRating?->getTotal(), + 'average' => $productRating?->getAverage(), + 'reviews' => $reviews + ]; + + if ($request->headers->get('Accept') === 'text/html') { + $response = $this->render('includes/next-reviews', $responseData, count($reviews) > 0 ? Response::HTTP_OK : Response::HTTP_NO_CONTENT); + + $response->headers->set('X-Remaining-Reviews', $responseData["total"] - $offset - $limit); + + return $response; + } + + return new JsonResponse($responseData); + } +} diff --git a/Loop/GuaranteedProductLoop.php b/Loop/GuaranteedProductLoop.php index 902d0d0..00479ca 100644 --- a/Loop/GuaranteedProductLoop.php +++ b/Loop/GuaranteedProductLoop.php @@ -34,8 +34,7 @@ public function parseResults(LoopResult $loopResult): LoopResult ->set('ORDER_ID', $review->getOrderId()) ->set('ORDER_DATE', $review->getOrderDate()?->format('Y-m-d')) ->set('REPLY', $review->getReply()) - ->set('REPLY_DATE', $review->getReplyDate()?->format('Y-m-d')) - ; + ->set('REPLY_DATE', $review->getReplyDate()?->format('Y-m-d')); $this->addOutputFields($loopResultRow, $review); $loopResult->addRow($loopResultRow); @@ -56,8 +55,8 @@ public function buildModelCriteria(): GuaranteedOpinionProductReviewQuery|ModelC $search->filterByRate($minRate, Criteria::GREATER_EQUAL); } - if ((null !== $page = $this->getPage()) && (null !== $limit = $this->getLimit())) { - $search->paginate($page, $limit); + if ((null !== $offset = $this->getOffset()) && (null !== $limit = $this->getLimit())) { + $search->setOffset($offset)->setLimit($limit); } return $search; @@ -68,8 +67,8 @@ protected function getArgDefinitions(): ArgumentCollection return new ArgumentCollection( Argument::createIntTypeArgument('product'), Argument::createIntTypeArgument('min_rate'), - Argument::createIntTypeArgument('limit', 5), - Argument::createIntTypeArgument('page', 0) + Argument::createIntTypeArgument('limit', null), + Argument::createIntTypeArgument('offset', 0) ); } -} \ No newline at end of file +} diff --git a/Loop/GuaranteedSiteLoop.php b/Loop/GuaranteedSiteLoop.php index 77dc9e4..02623f7 100644 --- a/Loop/GuaranteedSiteLoop.php +++ b/Loop/GuaranteedSiteLoop.php @@ -35,8 +35,7 @@ public function parseResults(LoopResult $loopResult): LoopResult ->set('ORDER_ID', $review->getOrderId()) ->set('ORDER_DATE', $review->getOrderDate()?->format('Y-m-d')) ->set('REPLY', $review->getReply()) - ->set('REPLY_DATE', $review->getReplyDate()?->format('Y-m-d')) - ; + ->set('REPLY_DATE', $review->getReplyDate()?->format('Y-m-d')); $this->addOutputFields($loopResultRow, $review); $loopResult->addRow($loopResultRow); @@ -53,8 +52,8 @@ public function buildModelCriteria(): GuaranteedOpinionProductReviewQuery|ModelC $search->filterByRate($minRate, Criteria::GREATER_EQUAL); } - if ((null !== $page = $this->getPage()) && (null !== $limit = $this->getLimit())) { - $search->paginate($page, $limit); + if ((null !== $offset = $this->getOffset()) && (null !== $limit = $this->getLimit())) { + $search->setOffset($offset)->setLimit($limit); } return $search; @@ -64,8 +63,8 @@ protected function getArgDefinitions(): ArgumentCollection { return new ArgumentCollection( Argument::createIntTypeArgument('min_rate'), - Argument::createIntTypeArgument('limit', 5), - Argument::createIntTypeArgument('page', 0) + Argument::createIntTypeArgument('limit', null), + Argument::createIntTypeArgument('offset', 0) ); } -} \ No newline at end of file +} diff --git a/templates/frontOffice/default/includes/next-reviews.html b/templates/frontOffice/default/includes/next-reviews.html new file mode 100644 index 0000000..ebe75e8 --- /dev/null +++ b/templates/frontOffice/default/includes/next-reviews.html @@ -0,0 +1,8 @@ +{foreach $reviews as $review} +
+
{$review->name}
+
{$review->date}
+
{$review->rating}
+

{$review->message}

+
+{/foreach} \ No newline at end of file From f92619114617bfb0788d1ba2576f3a62524febc2 Mon Sep 17 00:00:00 2001 From: Mathis Chambon Date: Mon, 26 Feb 2024 14:48:17 +0100 Subject: [PATCH 2/2] feat(next-reviews): site review smarty renders --- Controller/FrontController.php | 20 ++++++++++++++----- ...reviews.html => next-product-reviews.html} | 0 .../default/includes/next-site-reviews.html | 8 ++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) rename templates/frontOffice/default/includes/{next-reviews.html => next-product-reviews.html} (100%) create mode 100644 templates/frontOffice/default/includes/next-site-reviews.html diff --git a/Controller/FrontController.php b/Controller/FrontController.php index bac04fc..59e9ea1 100644 --- a/Controller/FrontController.php +++ b/Controller/FrontController.php @@ -38,11 +38,21 @@ public function siteReviews(int $offset, int $limit, Request $request): JsonResp ]; } - return new JsonResponse([ - 'total' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_TOTAL_CONFIG_KEY), - 'average' => GuaranteedOpinion::getConfigValue(GuaranteedOpinion::SITE_RATING_AVERAGE_CONFIG_KEY), + $responseData = [ + 'total' => $productRating?->getTotal(), + 'average' => $productRating?->getAverage(), 'reviews' => $reviews - ]); + ]; + + if ($request->headers->get('Accept') === 'text/html') { + $response = $this->render('includes/next-site-reviews', $responseData, count($reviews) > 0 ? Response::HTTP_OK : Response::HTTP_NO_CONTENT); + + $response->headers->set('X-Remaining-Reviews', $responseData["total"] - $offset - $limit); + + return $response; + } + + return new JsonResponse($responseData); } /** @@ -78,7 +88,7 @@ public function productReviews(int $id, int $offset, int $limit, Request $reques ]; if ($request->headers->get('Accept') === 'text/html') { - $response = $this->render('includes/next-reviews', $responseData, count($reviews) > 0 ? Response::HTTP_OK : Response::HTTP_NO_CONTENT); + $response = $this->render('includes/next-product-reviews', $responseData, count($reviews) > 0 ? Response::HTTP_OK : Response::HTTP_NO_CONTENT); $response->headers->set('X-Remaining-Reviews', $responseData["total"] - $offset - $limit); diff --git a/templates/frontOffice/default/includes/next-reviews.html b/templates/frontOffice/default/includes/next-product-reviews.html similarity index 100% rename from templates/frontOffice/default/includes/next-reviews.html rename to templates/frontOffice/default/includes/next-product-reviews.html diff --git a/templates/frontOffice/default/includes/next-site-reviews.html b/templates/frontOffice/default/includes/next-site-reviews.html new file mode 100644 index 0000000..ebe75e8 --- /dev/null +++ b/templates/frontOffice/default/includes/next-site-reviews.html @@ -0,0 +1,8 @@ +{foreach $reviews as $review} +
+
{$review->name}
+
{$review->date}
+
{$review->rating}
+

{$review->message}

+
+{/foreach} \ No newline at end of file