<?php
namespace Plugin\NewsPageSelfReliance\Controller;
use Eccube\Controller\AbstractController;
use Plugin\NewsPageSelfReliance\Repository\NpsrNewsRepository;
use Eccube\Entity\News;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Validator\Constraints as Assert;
use Knp\Component\Pager\PaginatorInterface;
use Doctrine\Common\Persistence\ObjectManager;
class NpsrController extends AbstractController
{
/**
* @var NpsrNewsRepository
*/
protected $newsRepository;
protected $ObjectManager ;
/**
* NewsController constructor.
*/
public function __construct(
NpsrNewsRepository $newsRepository,
ObjectManager $ObjectManager
)
{
$this->newsRepository = $newsRepository;
$this->ObjectManager = $ObjectManager;
}
/**
* ニュース一覧画面.
*
* @Route( "/news" , name="news_index" )
* @Template("News/index.twig")
*/
public function index( Request $request, PaginatorInterface $paginator )
{
// handleRequestは空のqueryの場合は無視するため
if ($request->getMethod() === 'GET') {
$request->query->set('pageno', $request->query->get('pageno', '1'));
}
$order = $request->query->get("order");
$count_active = "";
$new_active = "";
$newsCategory = array(
'0' => '',
'1' => 'お知らせ',
'2' => '重要なお知らせ',
'3' => '農園便り',
);
if ( $order == "count" ) {
$qb = $this->newsRepository->getQueryBuilderOrderPublished();
$query = $qb->getQuery()->useResultCache(true, $this->eccubeConfig['eccube_result_cache_lifetime_short']);
$count_active = "is-active";
} else {
$qb = $this->newsRepository->getQueryBuilderPublished();
$query = $qb->getQuery()->useResultCache(true, $this->eccubeConfig['eccube_result_cache_lifetime_short']);
$new_active = "is-active";
}
/** @var SlidingPagination $pagination */
$pagination = $paginator->paginate(
$query,
$request->query->get('pageno', '1')
);
return [
'pagination' => $pagination,
'count_active' => $count_active,
'new_active' => $new_active,
'newsCategory' => $newsCategory,
];
}
/**
* ニュース詳細画面.
*
* @Route("/news/{id}" , name="news_detail" )
* @Template("News/detail.twig")
* @ParamConverter("News", options={"id" = "id"})
*/
public function detail( Request $request, News $News )
{
if ( !$this->checkVisibility($News) ) {
throw new NotFoundHttpException();
}
$id = $News["id"];
$category = $News["category"];
$Connection = $this->ObjectManager->getConnection();
$sql = "UPDATE dtb_news SET counts = (counts + 1) where id = :id ";
$stmt = $Connection->prepare($sql);
$stmt->bindValue('id', $id);
$stmt->execute();
$sql = "SELECT * FROM dtb_news where category = :category and id != :id order by rand() limit 0 ,3 ";
$stmt = $Connection->prepare($sql);
$stmt->bindValue('category', $category);
$stmt->bindValue('id', $id);
$stmt->execute();
$newsData = $stmt->fetchAll();
//dump($Options);
$categoryNews = array();
foreach ($newsData as $key => $value) {
$categoryNews[$value["id"]] = $value;
}
$newsCategory = array(
'0' => '',
'1' => 'お知らせ',
'2' => '重要なお知らせ',
'3' => '農園便り',
);
$NewsUrl = $News->getUrl();
if ( $NewsUrl !== null ){
return new RedirectResponse( $NewsUrl );
}
return [
'news' => $News,
'categoryNews' => $categoryNews,
'newsCategory' => $newsCategory,
];
}
/**
* 閲覧可能なニュースかどうかを判定
*
* @param News $News
*
* @return boolean 閲覧可能な場合はtrue
*/
protected function checkVisibility(News $News)
{
$is_admin = $this->session->has('_security_admin');
$date = time();
// 管理ユーザの場合はステータスやオプションにかかわらず閲覧可能.
if (!$is_admin) {
// 公開ステータスでない商品は表示しない.
if ( $News->isVisible() === false ) {
return false;
}elseif( $News->getPublishDate()->getTimestamp() >= $date ) {
return false;
}else{
return true;
}
}
return true;
}
}