app/Customize/Controller/MessageController.php line 247

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller;
  3. use Customize\Controller\LM\LmAbstractController;
  4. use Lm\Service\Db\DbManager;
  5. use Customize\Service\LmHelper;
  6. use Customize\Service\CommonService;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  10. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  11. use Customize\Service\MessageService;
  12. use Customize\Service\GoodsService;
  13. class MessageController extends LmAbstractController
  14. {
  15.     const ITEMS_PER_PAGE 10;
  16.     const MAX_PAGING_LINKS 10;
  17.     protected $MessageService;
  18.     protected $GoodsService;
  19.     protected $MetaTags=[];
  20.     protected $PageName;
  21.     public function __construct(
  22.         CommonService $commonService
  23.         ,LmHelper $LmHelper
  24.         ,MessageService $MessageService
  25.         ,GoodsService $GoodsService
  26.     ){
  27.         parent::__construct(
  28.             $commonService
  29.             ,$LmHelper);
  30.         $this->MessageService $MessageService;
  31.         $this->GoodsService $GoodsService;
  32.     }
  33.     /**
  34.      * お客様の声一覧画面
  35.      *
  36.      * @Route("/message/", name="message/index", methods={"GET"})
  37.      * @Template("Message/index.twig")
  38.      */
  39.     public function index(Request $request)
  40.     {
  41.         // 不正なパラメータの場合、404
  42.         $availableParameterKeys = [
  43.             'category',
  44.             'goods_id',
  45.             'page',
  46.         ];
  47.         $parameterKeys array_keys($request->query->all());
  48.         $diff array_diff($parameterKeys$availableParameterKeys);
  49.         if (!empty($diff)) {
  50.             throw new NotFoundHttpException();
  51.         }
  52.         $category_id =  $request->query->get('category');
  53.         $goods_id =  $request->query->get('goods_id');
  54.     #    $basic_id =  $request->query->get('id', ''); テンプレートで未使用 20220817 KAWAI
  55.         $page $request->query->get('page'1);
  56.         $itemsPerPage self::ITEMS_PER_PAGE// TODO: 1ページあたりの表示件数はユーザーに選択させると尚可(cookieの活用も検討)
  57.         $kataban = [];
  58.         $goods = [];
  59.         $breadCrumbList =[];
  60.         // 不正パラメータの場合、404
  61.         if (( $goods_id && !ctype_digit($goods_id)) || ( $category_id && !ctype_digit($category_id))) {
  62.             // "Page Not Found"という文言は、エラーコントローラーで使用していないので任意の文字列
  63.             throw new NotFoundHttpException();
  64.         }
  65.         //$ dbManager = new DbManager();
  66.         //$ db = $dbManager->get();
  67.         if (!$msgList $this->MessageService->GetMessage($goods_id,$category_id)){
  68.             throw new NotFoundHttpException();
  69.         }
  70.         $pager LmHelper::paging($page$msgList$itemsPerPageself::MAX_PAGING_LINKS$request->query->all());
  71.         $count $pager['total_count'];
  72.         $pages $pager['pages'];
  73.         $page_offset $pager['page_offset'];
  74.         $msgList array_slice($msgList$page_offset$itemsPerPage);
  75.         foreach((array)$msgList as $row_idx => $row){
  76.             /**
  77.              * 古い画像のパス置換対応
  78.              * 古い画像は「http://www.l-m.co.jp/koe/m-482131.jpg」のような画像パスになっている。
  79.              *
  80.              * ややこしいが、ここで画像のパスが/koe/で開始されるように置換し、viewで/images/koe_old/に置換され
  81.              * default/views/filters/ImgPath.php でドメインを含むパスに置換される。
  82.              */
  83.             $msgList[$row_idx]['comment'] = preg_replace('!src=(["\'])https?://www\.l-m\.co\.jp/!''src=$1/'$row['comment']);
  84.             $goodlist $this->MessageService->GetGoodsList($row['cm_id']);
  85.             foreach((array)$goodlist as $goods){
  86.                 // 型番を検索
  87.                 $katabanList = array();
  88.                 /*$strSql = "SELECT DISTINCT gp_kataban FROM goods_price_table WHERE gp_goods = {$goods['goods_id']} AND NOT(gp_display <=> 99) LIMIT 0,3";
  89.                 $sth = $ db->prepare($strSql);
  90.                 $sth->execute();
  91.                 $rskata = $sth->fetchAll(\PDO::FETCH_ASSOC);*/
  92.                 $rskata $this->GoodsService->getGoodsKataban($goods['goods_id']);
  93.                 foreach ($rskata as $_rowkata) {
  94.                     $katabanList[] = $_rowkata['gp_kataban'];
  95.                 }
  96.                 $kataban[$row['cm_id']][] = array( 'kataban' => implode(','array_unique($katabanList)), 'name' => $goods['goods_name'], 'goods_id' => $goods['goods_id']);
  97.             }
  98.         }
  99.         // カテゴリ取得(お客様の声数でソート)
  100.        /* $strSql = "SELECT * FROM customer_message_category_table WHERE `delete` = '0'";
  101.         $sth = $ db->prepare($strSql);
  102.         $sth->execute();
  103.         $tmp_list = $sth->fetchAll(\PDO::FETCH_ASSOC);
  104.         */
  105.         $tmp_list $this->MessageService->GetCategoryList();
  106.         $categoryList $sort = [];
  107.         foreach((array)$tmp_list as $row){
  108.             $categoryList['cmc_id_'.$row['cmc_id']] = $row;
  109.             $sort[] = $row['cmc_count'];
  110.         }
  111.         array_multisort($sortSORT_DESC$categoryList);
  112.         if($goods_id){
  113.               // 商品情報を取得
  114.             $goods $this->GoodsService->getGoodsById($goods_id);
  115.             $breadCrumbList[] = [
  116.                 'label' => LmHelper::display_text($goods['goods_name']),
  117.             ];
  118.             $breadCrumbList[]=['label'=>'一覧'];
  119.             // カテゴリをランダムで1つ表示
  120.             /*$viewStrReview = array();
  121.             foreach((array)$displayCategory['viewStrReviewList'] as $data){
  122.                 if(strpos($data, $displayCategory['canonicalPankuzuMainCategory']['main_name']) === false){
  123.                     $viewStrReview[] = $data;
  124.                 }
  125.             }
  126.             $this->view->displayCategory = $viewStrReview[0];*/
  127.         }
  128.         //elseif (!is_null($category_id)) {
  129.             //goods_idが取得できない場合
  130.         //}
  131.         // 用途取得
  132. /*        $strSql = "SELECT * FROM customer_message_use_table WHERE `delete` = '0'";
  133.         $sth = $ db->prepare($strSql);
  134.         $sth->execute();
  135.         $tmp_list = $sth->fetchAll(\PDO::FETCH_ASSOC);
  136.         $useList = array();
  137.         foreach((array)$tmp_list as $row){
  138.             $useList[$row['cmu_id']] = $row['use_name'];
  139.         }*/
  140.         // 不正パラメータの場合、404
  141.         if (!$msgList) {
  142.             // "Page Not Found"という文言は、エラーコントローラーで使用していないので任意の文字列
  143.             throw new NotFoundHttpException();
  144.             exit;
  145.         }
  146.         $category null;
  147.         if( $category_id && preg_match('/^[0-9]+$/'$category_id) ){
  148.             $anotation_querystring '?category='.$category_id;
  149.             $canonical_querystring '?category='.$category_id;
  150.         }
  151.         else if( $page && preg_match('/^[0-9]+$/'$page) ){
  152.             $anotation_querystring '?page='.$page;
  153.             $canonical_querystring '?page='.$page;
  154.         }
  155.         else{
  156.             $anotation_querystring '/';
  157.             $canonical_querystring '/';
  158.         }
  159.         if(!is_null($category_id)) {
  160.             $category $categoryList'cmc_id_'.$category_id] ;
  161.             $breadCrumbList[] = [
  162.                 'label' => "「{$category['category_name']}」のお客様の声",
  163.             ];
  164.         }
  165.         foreach ($msgList as $key => $message) {
  166.             $msgList[$key]['img_paths'] = $this->get_image_path($message['file'], $message['cm_id'], $this->lmHelper->getConfig('BACK_URL'), $message['customer_name']);
  167.             $msgList[$key]['comment'] = preg_replace('@/koe/@''/images/koe_old/'strip_tags($message['comment'], '<img><br><a><p><center><b><em><s>'));
  168.             if (!empty($message['customer_name']) && $message['customer_name'] != "#VALUE!") {
  169.                 $msgList[$key]['customer_name'] = $message['customer_name'] . (!preg_match("/お客$/"$message['customer_name']) ? " " "") ;
  170.             }
  171.         }
  172.         foreach ($kataban as $key1 => $rows) {
  173.             $rows array_unique((array)$rowsSORT_REGULAR);
  174.             $kataban[$key1] = $rows;
  175.             foreach ($rows as $key2 => $row) {
  176.                 $kataban[$key1][$key2]['kataban'] = LmHelper::display_text($row['kataban']);
  177.                 $kataban[$key1][$key2]['name'] = LmHelper::display_text($row['name']);
  178.             }
  179.         }
  180.         return [
  181. #            'g_basic_id' => $basic_id, テンプレートで未使用 20220817 KAWAI
  182.             'g_goods_id' => $goods_id,
  183.             'g_category_id' => $category_id,
  184.             'g_category' => $category,
  185.             'g_goods' => $goods,
  186.             'BreadCrumbs' => $breadCrumbList,
  187.             'g_page' => $page,
  188.             'g_pages' => $pages,
  189.             'g_pager' => $pager,
  190.             'g_msg_list' => $msgList,
  191.             'g_total_count' => $count,
  192.             'g_kataban' => $kataban,
  193.             'g_category_list' => $categoryList,
  194. #            'g_use_list' => $useList, テンプレートで未使用 20220817 KAWAI
  195.             'g_anotation_querystring' => $anotation_querystring,
  196.             'g_canonical_querystring' => $canonical_querystring,
  197.             'MetaTags' => [
  198.                 'message' => $goods_id ? ($goods['goods_name'] ?? null) : ($category['category_name'] ?? null)
  199.             ], #20220730kawai
  200.         ];
  201.     }
  202.    protected function get_image_path($data$id$path$customer_name) {
  203.         $disp_data unserialize($data);
  204.         $return_data = array();
  205.         $alt $customer_name;
  206.         if (!preg_match("/お客$/"$customer_name)){
  207.             $alt .= " 様からの声の写真";
  208.         }
  209.         if(is_array($disp_data)){
  210.             $idx 0;
  211.             foreach($disp_data as $disp){
  212.                 $idx++;
  213.                 $tmp_alt '';
  214.                 $return_data[$disp]['path'] = $this->lmHelper->getConfig('CFIMG_BACK_URL'). '/images/koe_admin/'.$id'/'$disp;
  215.                 $n "";
  216.                 if($idx 1){
  217.                     $n .= "{$idx}枚目";
  218.                 }
  219.                 $tmp_alt .= $n;
  220.                 $return_data[$disp]['alt'] = $alt.$tmp_alt;
  221.             }
  222.             $return_data array_values($return_data);
  223.         } elseif($disp_data){
  224.             $return_data[]['path'] = $this->lmHelper->getConfig('CFIMG_BACK_URL'). '/images/koe_admin/'.$id'/'$disp_data;
  225.             $return_data[]['alt'] = $alt;
  226.         }
  227.         return $return_data;
  228.     }
  229. }