app/Plugin/CMBlogPro42/Controller/Blog/BlogController.php line 109

Open in your IDE?
  1. <?php
  2. namespace Plugin\CMBlogPro42\Controller\Blog;
  3. use Eccube\Controller\AbstractController;
  4. use Knp\Component\Pager\PaginatorInterface;
  5. use Plugin\CMBlogPro42\Entity\Blog;
  6. use Plugin\CMBlogPro42\Entity\BlogStatus;
  7. use Plugin\CMBlogPro42\Form\Type\Admin\BlogType;
  8. use Plugin\CMBlogPro42\Repository\BlogRepository;
  9. use Plugin\CMBlogPro42\Repository\CategoryRepository;
  10. use Plugin\CMBlogPro42\Repository\ShareRepository;
  11. use Plugin\CMBlogPro42\Repository\ConfigRepository;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Eccube\Repository\PageRepository;
  16. use Eccube\Repository\ProductRepository;
  17. use Symfony\Component\HttpFoundation\Response;
  18. class BlogController extends AbstractController
  19. {
  20.     /**
  21.      * @var BlogRepository
  22.      */
  23.     protected $blogRepository;
  24.     /**
  25.      * @var CategoryRepository
  26.      */
  27.     protected $categoryRepository;
  28.     /**
  29.      * @var ShareRepository
  30.      */
  31.     protected $shareRepository;
  32.     /**
  33.      * @var ProductRepository
  34.      */
  35.     protected $productRepository;
  36.     /**
  37.      * @var ConfigRepository
  38.      */
  39.     protected $configRepository;
  40.     /**
  41.      * @var PageRepository
  42.      */
  43.     protected $pageRepository;
  44.     /**
  45.      * BlogController constructor.
  46.      *
  47.      * @param BlogRepository $blogRepository
  48.      * @param ProductRepository $productRepository
  49.      * @param ConfigRepository $blogRepository
  50.      */
  51.     public function __construct(
  52.         BlogRepository $blogRepository,
  53.         CategoryRepository $categoryRepository,
  54.         ShareRepository $shareRepository,
  55.         PageRepository $pageRepository,
  56.         ProductRepository $productRepository,
  57.         ConfigRepository $configRepository)
  58.     {
  59.         $this->blogRepository $blogRepository;
  60.         $this->categoryRepository $categoryRepository;
  61.         $this->shareRepository $shareRepository;
  62.         $this->productRepository $productRepository;
  63.         $this->configRepository $configRepository;
  64.         $this->pageRepository $pageRepository;
  65.     }
  66.     /**
  67.      * @Route("/news/", name="cm_blog_page_list")
  68.      * @Template("web/list.twig")
  69.      */
  70.     public function index(Request $requestPaginatorInterface $paginator)
  71.     {
  72.         $form $this->createForm(BlogType::class);
  73.         $search $request->query->all();
  74.         $search["status"] = 1;
  75.         $qb $this->blogRepository->getQueryBuilderBySearchData($search);
  76.         $config $this->configRepository->get();
  77.         $pagination $paginator->paginate(
  78.             $qb,
  79.             !empty($search['pageno']) ? $search['pageno'] : 1,
  80.             !empty($search['disp_number']) ? $search['disp_number'] : $config->getDisplayPage()
  81.         );
  82.         return [
  83.             'form' => $form->createView(),
  84.             'categories' => $this->categoryRepository->getFrontCategoryList(),
  85.             'shares' => $this->shareRepository->getFrontCategoryList(),
  86.             'pagination' => $pagination,
  87.             'monthArr' => $this->setMonthArchive($search)
  88.         ];
  89.     }
  90.     /**
  91.      * @Route("/news/{id}/", name="cm_blog_page_detail")
  92.      * @Template("web/detail.twig")
  93.      */
  94.     public function detail(Request $request$id)
  95.     {
  96.         //postgresql→int の最大値:2147483647だから、最大値を超えるとSlug として判断
  97.         if(is_numeric($id) && $id <= 2147483647) {
  98.             $blog $this->blogRepository->get($id);
  99.             //IDで検索できない場合、Slugで検索する
  100.             if(!$blog) {
  101.                 $blog $this->blogRepository->findBy(['slug' => $id]);
  102.                 $blog $blog[0];
  103.             }
  104.         } else {
  105.             $blog $this->blogRepository->findBy(['slug' => $id]);
  106.             $blog $blog[0];
  107.         }
  108.         if (!$blog || !$this->checkVisibility($blog)) {
  109.             $this->addError('ブログを見つかりませんでした。');
  110.             return $this->redirectToRoute('cm_blog_pro_page_list');
  111.         }
  112.         $config $this->configRepository->get();
  113.         $form $this->createForm(BlogType::class, $blog);
  114.         $cmPage $this->pageRepository->findOneBy(['url'  => 'cm_blog_pro_page_detail']);
  115.         if($blog->getAuthor() != Null){
  116.             $Page["author"] = $blog->getAuthor();
  117.         } else {
  118.             $Page["author"] = $cmPage->getAuthor();
  119.         }
  120.             
  121.         if($blog->getDescription() != Null){
  122.             $Page["description"] = $blog->getDescription();
  123.         } else {
  124.             $Page["description"] = $cmPage->getDescription();
  125.         };
  126.         
  127.         if($blog->getKeyword() != Null){
  128.             $Page["keyword"] = $blog->getKeyword();
  129.         } else {
  130.             $Page["keyword"] = $cmPage->getKeyword();
  131.         };
  132.         
  133.         if($blog->getRobot() != Null){
  134.             $Page["meta_robots"] = $blog->getRobot();
  135.         } else {
  136.             $Page["meta_robots"] = $cmPage->getMetaRobots();
  137.         }
  138.         
  139.         if($blog->getMetatag() != Null){
  140.             $Page["meta_tags"] = $blog->getMetatag();
  141.         } else {
  142.             $Page["meta_tags"] = $cmPage->getMetaTags();
  143.         }
  144.         $tagArr = [];
  145.         if($blog->getTag() != Null){
  146.             $tagArr preg_split('/[;, 、]+/u'$blog->getTag());
  147.         }
  148.         $Page["edit_type"] = 0;
  149.         return [
  150.             'form' => $form->createView(),
  151.             'blog' => $blog,
  152.             'Page' => $Page,
  153.             'subtitle' => $blog->getTitle(),
  154.             'tags' => $tagArr,
  155.             'monthArr' => $this->setMonthArchive()
  156.         ];
  157.     }
  158.     /**
  159.      * 閲覧可能なブログかどうかを判定
  160.      *
  161.      * @param Blog $blog
  162.      *
  163.      * @return boolean 閲覧可能な場合はtrue
  164.      */
  165.     protected function checkVisibility(Blog $blog)
  166.     {
  167.         $is_admin $this->session->has('_security_admin');
  168.         // 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
  169.         if (!$is_admin) {
  170.             if ($blog->getStatus()->getId() !== BlogStatus::DISPLAY_SHOW) {
  171.                 return false;
  172.             }
  173.         }
  174.         return true;
  175.     }
  176.     /**
  177.      * 月別アーカイブ表示のため取得
  178.      *
  179.      * @param 
  180.      *
  181.      * @return array 月別配列
  182.      */
  183.     private function setMonthArchive($search = []) {
  184.         
  185.         $releaseDate $this->blogRepository->getReleaseDate($search);
  186.         $monthArr = [];
  187.         foreach($releaseDate as $val) {
  188.             if(is_null($val['release_date'])) {
  189.                 continue;
  190.             }
  191.             $key $val['release_date']->format('Y-m');
  192.             if(isset($monthArr[$key])) {
  193.                 continue;
  194.             }
  195.             $monthArr[$key] = $val['release_date']->format('Y年m月');
  196.             
  197.         }
  198.         return $monthArr;
  199.     }
  200. }