<?php
namespace Customize\Controller;
use Customize\Controller\LM\LmAbstractController;
use Customize\Converter\DynamicConverter;
use Lm\Service\Db\DbManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Customize\Service\LmHelper;
use Customize\Service\CommonService;
use Customize\Service\ReviewService;
use Customize\Service\GoodsService;
class ReviewController extends LmAbstractController
{
const ITEMS_PER_PAGE = 200;
const MAX_PAGING_LINKS = 10;
const ITEM_PAGE_REVIEW_LIMIT = 50;
public static $CAMPAIGN_CATEGORY_LIST = [
'kucho-fuku',
];
public $ReviewService;
/**
* @var DynamicConverter
*/
private $DynamicConverter;
public function __construct(
CommonService $commonService
,LmHelper $LmHelper
,ReviewService $ReviewService
,GoodsService $GoodsService
,DynamicConverter $dynamicConverter
){
parent::__construct(
$commonService
,$LmHelper);
$this->GoodsService = $GoodsService;
$this->ReviewService = $ReviewService;
$this->DynamicConverter = $dynamicConverter;
}
/**
* お客様の声一覧画面
*
* @Route("/review/", name="review/index", methods={"GET"})
* @Template("Review/index.twig")
*/
public function index(Request $request)
{
$goods_id = $request->query->get('goods_id');
$page = $request->query->get('page', 1);
$itemsPerPage = self::ITEMS_PER_PAGE; // TODO: 1ページあたりの表示件数はユーザーに選択させると尚可(cookieの活用も検討)
$dataList=[];
$pages='';
$pager='';
if ($goods_id) {
$goods = $this->GoodsService->getGoodsById($goods_id);
if (empty($goods)) {
throw new NotFoundHttpException();
}
$dataList = $this->ReviewService->getReview($goods_id, $count, $itemsPerPage,$itemsPerPage * ($page - 1));
$cr_points = array_map(function ($v) {
return $v["cr_points"];
}, $dataList);
$arg = 0;
$numberOfCustumerReviews = count($cr_points);
if ($numberOfCustumerReviews) {
$arg = array_sum($cr_points) / $numberOfCustumerReviews;
}
if (!empty($dataList)) {
$pager = LmHelper::paging($page, $count, $itemsPerPage, self::MAX_PAGING_LINKS, $request->query->all());
// $page_offset = $pager['page_offset'];
// $dataList = array_slice($dataList, $page_offset, $itemsPerPage);
// 型番を検索
$rskata = $this->GoodsService->getGoodsKataban($goods_id);
foreach ($rskata as $_rowkata) {
$katabanList[] = $_rowkata['gp_kataban'];
}
$kataban = array('kataban' => implode(',', $katabanList), 'name' => $goods['goods_name'], 'goods_id' => $goods['goods_id']);
$breadCrumbCategoryName2 = $goods['goods_breadcrumb_category_name2'];
// パンくずセット
// TODO: 相関エンティティに移植
$breadCrumb = $this->DynamicConverter->getBreadCrumbsByGoodsId($goods_id);
$breadCrumb[] = array(
'href' => null,
'label' => "{$goods['goods_name']}のレビュー(評価)",
);
$mainUrl = $this->lmHelper->getGoodsImageUrl($dataList[0]['cr_goods_id'], "main.jpg");
}
}
// TODO:
return [
'goods_id' => $goods_id,
'average' => isset($arg) ? (floor($arg * 10)) / 10 : 0,
'star' => isset($arg) ? ((int)($arg * 2) / 2) * 10 : 0,
//'displayCategoryMain' => $displayCategory['canonicalPankuzuMainCategory'],
'BreadCrumbs' => $breadCrumb ?? [],
'displayCategory' => isset($viewStrReview[0]) ? $viewStrReview[0] : null,
'review_h1' => isset($goods) ? "レビュー(評価) | " . $goods['goods_name'] : '',
'back_path' => $this->lmHelper->getConfig('BACK_URL'), // TODO: Don't do that.
'review' => $dataList,
'total_count' => isset($count) ? $count : 0,
'goods' => isset($goods) ? $goods : [],
'kataban' => isset($kataban) ? $kataban : [],
'mainUrl' => isset($mainUrl) ? $mainUrl : '',
'page' => $page,
'pager' => isset($pages) ? $pager : [],
'MetaTags' =>['review' => $goods['goods_name'] ?? null], #20220804 kawai
'breadCrumbCategoryName2' => $breadCrumbCategoryName2 ?? null,
];
}
}