app/Plugin/NewsPageSelfReliance/Controller/NpsrController.php line 50

Open in your IDE?
  1. <?php
  2. namespace Plugin\NewsPageSelfReliance\Controller;
  3. use Eccube\Controller\AbstractController;
  4. use Plugin\NewsPageSelfReliance\Repository\NpsrNewsRepository;
  5. use Eccube\Entity\News;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Symfony\Component\Validator\Constraints as Assert;
  14. use Knp\Component\Pager\PaginatorInterface;
  15. use Doctrine\Common\Persistence\ObjectManager;
  16. class NpsrController extends AbstractController
  17. {
  18.   /**
  19.    * @var NpsrNewsRepository
  20.    */
  21.   protected $newsRepository;
  22.       protected $ObjectManager ;
  23.   /**
  24.    * NewsController constructor.
  25.    */
  26.   public function __construct(
  27.     NpsrNewsRepository $newsRepository,
  28.     ObjectManager $ObjectManager
  29.   )
  30.   {
  31.     $this->newsRepository $newsRepository;
  32.     $this->ObjectManager =  $ObjectManager;
  33.   }
  34.   /**
  35.    * ニュース一覧画面.
  36.    *
  37.    * @Route( "/news" , name="news_index" )
  38.    * @Template("News/index.twig")
  39.    */
  40.   public function indexRequest $requestPaginatorInterface $paginator )
  41.   {
  42.     // handleRequestは空のqueryの場合は無視するため
  43.     if ($request->getMethod() === 'GET') {
  44.         $request->query->set('pageno'$request->query->get('pageno''1'));
  45.     }
  46.     $order $request->query->get("order");
  47.     $count_active "";
  48.     $new_active "";
  49.     $newsCategory = array(
  50.         '0' => '',
  51.         '1' => 'お知らせ',
  52.         '2' => '重要なお知らせ',
  53.         '3' => '農園便り',
  54.     );
  55.     if ( $order == "count" ) {
  56.       $qb $this->newsRepository->getQueryBuilderOrderPublished();
  57.       $query $qb->getQuery()->useResultCache(true$this->eccubeConfig['eccube_result_cache_lifetime_short']);
  58.       $count_active "is-active";
  59.     } else {
  60.       $qb $this->newsRepository->getQueryBuilderPublished();
  61.       $query $qb->getQuery()->useResultCache(true$this->eccubeConfig['eccube_result_cache_lifetime_short']);
  62.       $new_active "is-active";
  63.     }
  64.     /** @var SlidingPagination $pagination */
  65.     $pagination $paginator->paginate(
  66.         $query,
  67.         $request->query->get('pageno''1')
  68.     );
  69.     return [
  70.       'pagination' => $pagination,
  71.       'count_active' => $count_active,
  72.       'new_active' => $new_active,
  73.       'newsCategory' => $newsCategory,
  74.     ];
  75.   }
  76.   /**
  77.    * ニュース詳細画面.
  78.    *
  79.    * @Route("/news/{id}" , name="news_detail" )
  80.    * @Template("News/detail.twig")
  81.    * @ParamConverter("News", options={"id" = "id"})
  82.    */
  83.   public function detailRequest $requestNews $News )
  84.   {
  85.     
  86.     if ( !$this->checkVisibility($News) ) {
  87.       throw new NotFoundHttpException();
  88.     }
  89.     $id $News["id"];
  90.     $category $News["category"];
  91.     $Connection $this->ObjectManager->getConnection();
  92.     $sql "UPDATE dtb_news SET counts = (counts + 1)  where id = :id ";
  93.     $stmt $Connection->prepare($sql);
  94.     $stmt->bindValue('id'$id);
  95.     $stmt->execute();
  96.     $sql "SELECT * FROM dtb_news  where category = :category and id != :id order by rand() limit 0 ,3 ";
  97.     $stmt =  $Connection->prepare($sql);
  98.     $stmt->bindValue('category'$category);
  99.     $stmt->bindValue('id'$id);
  100.     $stmt->execute();
  101.     $newsData $stmt->fetchAll();
  102.     //dump($Options);
  103.     $categoryNews = array();
  104.     foreach ($newsData as $key => $value) {
  105.         $categoryNews[$value["id"]] = $value;
  106.     }
  107.     $newsCategory = array(
  108.         '0' => '',
  109.         '1' => 'お知らせ',
  110.         '2' => '重要なお知らせ',
  111.         '3' => '農園便り',
  112.     );
  113.     $NewsUrl $News->getUrl();
  114.     if ( $NewsUrl !== null ){
  115.       return new RedirectResponse$NewsUrl );
  116.     }
  117.     return [
  118.       'news' => $News,
  119.       'categoryNews' => $categoryNews,
  120.       'newsCategory' => $newsCategory,
  121.     ];
  122.   }
  123.   /**
  124.    * 閲覧可能なニュースかどうかを判定
  125.    *
  126.    * @param News $News
  127.    *
  128.    * @return boolean 閲覧可能な場合はtrue
  129.    */
  130.   protected function checkVisibility(News $News)
  131.   {
  132.       $is_admin $this->session->has('_security_admin');
  133.       $date time();
  134.       
  135.       // 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
  136.       if (!$is_admin) {
  137.           // 公開ステータスでない商品は表示しない.
  138.           if ( $News->isVisible() === false ) {
  139.             return false;
  140.           }elseif( $News->getPublishDate()->getTimestamp() >= $date ) {
  141.             return false;
  142.           }else{
  143.             return true;
  144.           }
  145.       }
  146.       return true;
  147.   }
  148. }