src/Notaris/AdminBundle/Entity/NewsRepository.php line 384

Open in your IDE?
  1. <?php
  2. namespace Notaris\AdminBundle\Entity;
  3. use Doctrine\ORM\EntityRepository;
  4. /**
  5.  * NewsRepository
  6.  *
  7.  * This class was generated by the Doctrine ORM. Add your own custom
  8.  * repository methods below.
  9.  */
  10. class NewsRepository extends EntityRepository
  11. {
  12.     public function deactivateOtherSpotlight($locale){
  13.         $update = $this->createQueryBuilder('n')
  14.             ->update()
  15.             ->set('n.spotlight', '0')
  16.             ->where('n.locale = :locale AND n.spotlight = true')
  17.             ->setParameter('locale', $locale)
  18.             ->getQuery()
  19.             ->execute();
  20.     }
  21.     /**
  22.      * @param $locale
  23.      * @param int $offset
  24.      * @param array $sort_arr
  25.      * @param int $limit
  26.      * @return array|bool
  27.      * @throws \Doctrine\DBAL\DBALException
  28.      */
  29.     public function getAllNewsItems($locale, $offset = 0, $sort_arr = array(), $limit = 50){
  30.         //start orders
  31.         $orders_arr = array();
  32.         $order_type = $sort_arr['type'];
  33.         $order_columns = array(
  34.             0 => 'n.pub_date',
  35.             'n.title',
  36.             'n.is_izimi',
  37.             'n.count_clicked',
  38.             'newsletter',
  39.             'is_active',
  40.             'origin',
  41.         );
  42.         if (isset($order_columns[$sort_arr['column']]) && $order_columns[$sort_arr['column']]) {
  43.             $orders_arr[] = $order_columns[$sort_arr['column']] . ' ' . $order_type;
  44.         }
  45.         //end orders
  46.         $em = $this->getEntityManager();
  47.         $con = $em->getConnection();
  48.         $sql = "SELECT n.id, n.pub_date, n.title, n.count_clicked, n.is_izimi,
  49.                   IF (n.is_active = 1,(IF(DATE(n.pub_date) <= DATE(NOW()), n.is_active, 2)),n.is_active) AS is_active,
  50.                   n.spotlight, n.in_newsletter, n.newsletter_sended,
  51.                   IF((n.in_newsletter and n.is_active), n.in_newsletter, IF(n.newsletter_sended, n.newsletter_sended,  '')) as newsletter, n.slug as news_slug,
  52.                   f.id as faq,
  53.                   b.id as brochure,
  54.                   v.id as video,
  55.                   IF(f.id, 'FAQ', IF(b.id, 'BROCH', IF(v.id, 'VIDEO', ''))) as `origin`
  56.                   FROM news n
  57.                   LEFT JOIN faq f ON f.news_id = n.id
  58.                   LEFT JOIN brochure b ON b.news_id = n.id
  59.                   LEFT JOIN video v ON v.news_id = n.id
  60.                   WHERE n.locale = :locale
  61.                   ORDER BY " . implode(', ', $orders_arr) . '
  62.                   LIMIT ' . $offset . ', ' . $limit;
  63.         $stmt = $con->prepare($sql);
  64.         $stmt->bindValue('locale', $locale);
  65.         $stmt = $stmt->execute();
  66.         $result = $stmt->fetchAll();
  67.         //all count
  68.         $sql = "SELECT count(*) as count FROM news n WHERE n.locale = :locale";
  69.         $stmt = $con->prepare($sql);
  70.         $stmt->bindValue('locale', $locale);
  71.         $stmt = $stmt->execute();
  72.         $count = $stmt->fetchOne();
  73.         $online = $offline = $scheduled = 0;
  74.         if ($count) {
  75.             $time = new \DateTime('now');
  76.             $now = $time->format('Y-m-d 00:00:00');
  77.             //online
  78.             $sql = "SELECT count(*) as count FROM news n WHERE n.is_active = 1 AND DATE(n.pub_date) <= :now AND n.locale = :locale";
  79.             $stmt = $con->prepare($sql);
  80.             $stmt->bindValue('now', $now);
  81.             $stmt->bindValue('locale', $locale);
  82.             $stmt = $stmt->execute();
  83.             $online = $stmt->fetchOne();
  84.             //scheduled
  85.             $sql = "SELECT count(*) as count FROM news n WHERE n.is_active = 1 AND DATE(n.pub_date) > :now AND n.locale = :locale";
  86.             $stmt = $con->prepare($sql);
  87.             $stmt->bindValue('now', $now);
  88.             $stmt->bindValue('locale', $locale);
  89.             $stmt = $stmt->execute();
  90.             $scheduled = $stmt->fetchOne();
  91.             //offline
  92.             $sql = "SELECT count(*) as count FROM news n WHERE n.is_active = 0 AND n.locale = :locale";
  93.             $stmt = $con->prepare($sql);
  94.             $stmt->bindValue('locale', $locale);
  95.             $stmt = $stmt->execute();
  96.             $offline = $stmt->fetchOne();
  97.         }
  98.         if ($result) {
  99.             return array(
  100.                 'result' => $result,
  101.                 'count' => $count,
  102.                 'online' => $online,
  103.                 'offline' => $offline,
  104.                 'scheduled' => $scheduled
  105.             );
  106.         }
  107.         return false;
  108.     }
  109.     /**
  110.      * @param $locale
  111.      * @param $publishDate
  112.      * @return bool
  113.      */
  114.     public function getAllNewsItemsForMailing($locale, $publishDate){
  115.         $entityManager = $this->getEntityManager();
  116.         $connection = $entityManager->getConnection();
  117.         $sql = "SELECT id, pub_date, title, in_newsletter, newsletter_sended, slug, in_kabinetsmail FROM news n WHERE n.locale = :locale AND DATE(n.pub_date) > :publishdate  AND n.newsletter_sended IS NULL AND n.is_active = 1  ORDER BY n.pub_date DESC ";
  118.         $stmt = $connection->prepare($sql);
  119.         $stmt->bindValue('locale', $locale);
  120.         $stmt->bindValue('publishdate', $publishDate);
  121.         $stmt = $stmt->execute();
  122.         $result = $stmt->fetchAll();
  123.         if($result){
  124.             return $result;
  125.         }
  126.         return false;
  127.     }
  128.     /**
  129.      * @param $locale
  130.      * @param $publishDate
  131.      * @return bool
  132.      */
  133.     public function getAllNewsItemsForKabinetsMailing($locale, $publishDate){
  134.         $entityManager = $this->getEntityManager();
  135.         $connection = $entityManager->getConnection();
  136.         $sql = "SELECT id, pub_date, title, in_newsletter, newsletter_sended, slug, in_kabinetsmail FROM news n WHERE n.locale = :locale AND DATE(n.pub_date) > :publishdate AND n.is_active = 1  ORDER BY n.pub_date DESC ";
  137.         $stmt = $connection->prepare($sql);
  138.         $stmt->bindValue('locale', $locale);
  139.         $stmt->bindValue('publishdate', $publishDate);
  140.         $stmt = $stmt->execute();
  141.         $result = $stmt->fetchAll();
  142.         if($result){
  143.             return $result;
  144.         }
  145.         return false;
  146.     }
  147.     /**
  148.      * @param $locale
  149.      * @param $publishDate
  150.      * @return bool
  151.      */
  152.     public function getAllNewsItemsForNewsLetter($locale, $publishDate){
  153.         $entityManager = $this->getEntityManager();
  154.         $connection = $entityManager->getConnection();
  155.         $time = new \DateTime('now');
  156.         $now = $time->format('Y-m-d 00:00:00');
  157.         $sql = "SELECT id, pub_date, title, text, introduction, pub_date as publicationDate, in_newsletter, slug FROM news n WHERE n.locale = :locale AND DATE(n.pub_date) > :publishdate AND n.in_newsletter = TRUE  AND n.newsletter_sended IS NULL AND n.is_active AND DATE(n.pub_date) <= :now ORDER BY id DESC";
  158.         $stmt = $connection->prepare($sql);
  159.         $stmt->bindValue('locale', $locale);
  160.         $stmt->bindValue('publishdate', $publishDate);
  161.         $stmt->bindValue('now', $now);
  162.         $stmt = $stmt->execute();
  163.         $result = $stmt->fetchAll();
  164.         if($result) {
  165.             return $result;
  166.         }
  167.         return false;
  168.     }
  169.     /**
  170.      * @param $locale
  171.      * @param $publishDate
  172.      * @return bool
  173.      */
  174.     public function getAllNewsItemsForKabinet($locale){
  175.         $news = $this->createQueryBuilder('n')
  176.             ->select('n')
  177.             ->where('n.locale = :locale')
  178.             ->andWhere('n.isActive = true')
  179.             ->andWhere('n.inKabinetsMail = true')
  180.             ->andWhere('n.publicationDate <= :now')
  181.             ->setParameter('locale', $locale)
  182.             ->setParameter('now', new \DateTime())
  183.             ->orderBy('n.id','DESC')
  184.             ->getQuery()
  185.             ->getResult();
  186.         if($news) {
  187.             return $news;
  188.         }
  189.         return false;
  190.     }
  191.     public function updateNewsSentWithNewsLetter($locale){
  192.             $update = $this->createQueryBuilder('n')
  193.                 ->update()
  194.                 ->set('n.newsletterSended', ':now')
  195.                 ->set('n.inNewsletter', 0)
  196.                 ->where('n.locale = :locale AND n.inNewsletter = 1 AND n.isActive = 1 AND n.publicationDate <= :now')
  197.                 ->setParameter('locale', $locale)
  198.                 ->setParameter('now', new \DateTime())
  199.                 ->getQuery()
  200.                 ->execute();
  201.     }
  202.     public function getAllHomepageNews($locale)
  203.     {
  204.         $now = new \DateTime('now');
  205.         $now->setTime(0,0,0);
  206.         $now = $now->format('Y-m-d 00:00:00');
  207.         $query = $this->getEntityManager()
  208.             ->createQuery(
  209.                 'SELECT n FROM
  210.                     NotarisAdminBundle:News n
  211.                     WHERE n.locale = :locale
  212.                     AND n.home = true
  213.                     AND n.isActive = true
  214.                     AND n.publicationDate <= :now
  215.                     ORDER BY n.spotlight DESC, n.publicationDate DESC, n.id DESC
  216.                     '
  217.             )
  218.             ->setParameter('locale', $locale)
  219.             ->setParameter('now', $now)
  220.             ->setMaxResults(3);
  221.         $news = $query->getResult();
  222.         if ($news) {
  223.             return $news;
  224.         }
  225.     }
  226.     public function getAllNews($locale, $maxResults = 20)
  227.     {
  228.         $now = new \DateTime('now');
  229.         $now->setTime(0,0,0);
  230.         $now = $now->format('Y-m-d 00:00:00');
  231.         $query = $this->getEntityManager()
  232.             ->createQuery(
  233.                 'SELECT n FROM
  234.                     NotarisAdminBundle:News n
  235.                     WHERE n.locale = :locale
  236.                     AND n.isActive = true
  237.                     AND n.publicationDate <= :now
  238.                     ORDER BY n.spotlight DESC, n.publicationDate DESC, n.id DESC
  239.                     '
  240.             )
  241.             ->setParameter('locale', $locale)
  242.             ->setParameter('now', $now);
  243.         if($maxResults){
  244.             $query->setMaxResults(20);
  245.         }
  246.         $news = $query->getResult();
  247.         if ($news) {
  248.             return $news;
  249.         }
  250.     }
  251.     public function getNewsGeneralPublic($locale, $start, $length, $order)
  252.     {
  253.         if($order == 'asc'){
  254.             $order = 'asc';
  255.         }else{
  256.             $order = 'desc';
  257.         }
  258.         $now = new \DateTime('now');
  259.         $now->setTime(0,0,0);
  260.         $now = $now->format('Y-m-d 00:00:00');
  261.         $fiveYearsAgo = new \DateTime('-5 years');
  262.         $fiveYearsAgo->setTime(0,0,0);
  263.         $fiveYearsAgo = $fiveYearsAgo->format('Y-m-d 00:00:00');
  264.         $news = $this->createQueryBuilder('n')
  265.             ->select('n')
  266.             ->where('n.locale = :locale')
  267.             ->andWhere('n.isActive = true')
  268.             ->andWhere('n.publicationDate <= :now')
  269.             ->andWhere('n.created >= :fiveYearsAgo')
  270.             ->orderBy('n.publicationDate', $order)
  271.             ->addOrderBy('n.id', $order)
  272.             ->setParameter('locale', $locale)
  273.             ->setParameter('now', $now)
  274.             ->setParameter('fiveYearsAgo', $fiveYearsAgo)
  275.             ->setFirstResult($start)
  276.             ->setMaxResults($length)
  277.             ->getQuery()
  278.             ->getResult();
  279.         //$news = $query->getResult();
  280.         if ($news) {
  281.             return $news;
  282.         }
  283.     }
  284.     public function getNewsGeneralPublicCount($locale)
  285.     {
  286.         $now = new \DateTime('now');
  287.         $now->setTime(0,0,0);
  288.         $now = $now->format('Y-m-d 00:00:00');
  289.         $fiveYearsAgo = new \DateTime('-5 years');
  290.         $fiveYearsAgo->setTime(0,0,0);
  291.         $fiveYearsAgo = $fiveYearsAgo->format('Y-m-d 00:00:00');
  292.         $query = $this->getEntityManager()
  293.             ->createQuery(
  294.                 'SELECT n FROM
  295.                     NotarisAdminBundle:News n
  296.                     WHERE n.locale = :locale
  297.                     AND n.isActive = true
  298.                     AND n.publicationDate <= :now
  299.                     AND n.created >= :fiveYearsAgo
  300.                     ORDER BY n.publicationDate DESC
  301.                     '
  302.             )
  303.             ->setParameter('locale', $locale)
  304.             ->setParameter('now', $now)
  305.             ->setParameter('fiveYearsAgo', $fiveYearsAgo);
  306.         $news = $query->getResult();
  307.         if ($news) {
  308.             return count($news);
  309.         }
  310.     }
  311.     public function getNewsItem($locale, $slug)
  312.     {
  313.         $now = new \DateTime('now');
  314.         $now->setTime(0,0,0);
  315.         $now = $now->format('Y-m-d 00:00:00');
  316.         $query = $this->getEntityManager()
  317.             ->createQuery(
  318.                 'SELECT n FROM
  319.                     NotarisAdminBundle:News n
  320.                     WHERE n.locale = :locale
  321.                     AND n.slug = :slug
  322.                     AND n.isActive = true
  323.                     AND n.publicationDate <= :now
  324.                     ORDER BY n.publicationDate DESC
  325.                     '
  326.             )
  327.             ->setParameter('locale', $locale)
  328.             ->setParameter('slug', $slug)
  329.             ->setParameter('now', $now);
  330.         $news = $query->getResult();
  331.         if ($news) {
  332.             return array_shift($news);
  333.         }
  334.     }
  335.     public function getNewsSubsitePublic($locale, $start, $length, $order, $subsite)
  336.     {
  337.         if($order == 'asc'){
  338.             $order = 'asc';
  339.         }else{
  340.             $order = 'desc';
  341.         }
  342.         $now = new \DateTime('now');
  343.         $now->setTime(0,0,0);
  344.         $now = $now->format('Y-m-d 00:00:00');
  345.         $news = $this->createQueryBuilder('n')
  346.             ->select('n')
  347.             ->innerJoin('n.subsites','ns', 'WITH', 'ns.id = :subsite')
  348.             ->where('n.locale = :locale')
  349.             ->andWhere('n.isActive = true')
  350.             ->andWhere('n.publicationDate <= :now')
  351.             ->orderBy('n.publicationDate', $order)
  352.             ->addOrderBy('n.id', $order)
  353.             ->setParameter('locale', $locale)
  354.             ->setParameter('now', $now)
  355.             ->setParameter('subsite', $subsite->getId()  )
  356.             ->setFirstResult($start)
  357.             ->setMaxResults($length)
  358.             ->getQuery()
  359.             ->getResult();
  360.         //$news = $query->getResult();
  361.         if ($news) {
  362.             return $news;
  363.         }
  364.     }
  365.     public function getNewsSubsitePublicCount($locale, $subsite)
  366.     {
  367.         $now = new \DateTime('now');
  368.         $now->setTime(0,0,0);
  369.         $now = $now->format('Y-m-d 00:00:00');
  370.         $news = $this->createQueryBuilder('n')
  371.             ->select('n')
  372.             ->innerJoin('n.subsites','ns', 'WITH', 'ns.id = :subsite')
  373.             ->where('n.locale = :locale')
  374.             ->andWhere('n.isActive = true')
  375.             ->andWhere('n.publicationDate <= :now')
  376.             ->setParameter('locale', $locale)
  377.             ->setParameter('now', $now)
  378.             ->setParameter('subsite', $subsite->getId()  )
  379.             ->getQuery()
  380.             ->getResult();
  381.         //$news = $query->getResult();
  382.         if ($news) {
  383.             return count($news);
  384.         }
  385.     }
  386.     public function getNewsFromSubsite($subsite)
  387.     {
  388.         $news = $this->createQueryBuilder('n')
  389.             ->select('n')
  390.             ->innerJoin('n.subsites','ns', 'WITH', 'ns.id = :subsite')
  391.             ->setParameter('subsite', $subsite->getId()  )
  392.             ->getQuery()
  393.             ->getResult();
  394.         //$news = $query->getResult();
  395.         if ($news) {
  396.             return $news;
  397.         }
  398.     }
  399.     public function search($keyword, $locale='nl') {
  400.         $searchResults = $this->createQueryBuilder('n')
  401.             ->addSelect("MATCH_AGAINST (n.title, n.subtitle, n.introduction, n.source, n.text, :address 'IN BOOLEAN MODE') as score")
  402.             ->where('n.locale = :locale AND n.publicationDate <= :now AND n.isActive = 1')
  403.             ->andWhere("MATCH_AGAINST(n.title, n.subtitle, n.introduction, n.source, n.text, :address 'IN BOOLEAN MODE') > 0.2")
  404.             ->setParameter('address', $keyword)
  405.             ->setParameter('locale', $locale)
  406.             ->setParameter('now', new \DateTime('now'))
  407.             ->orderBy('score', 'desc')
  408.             ->getQuery()
  409.             ->getResult();
  410.         if($searchResults){
  411.             return $searchResults;
  412.         }
  413.         return false;
  414.     }
  415.     public function getAllIzimiNews($page, $perPage, $locale = null, $minUpdateDate = null, $maxUpdateDate = null, $sortBy = null, $sortDirection = null, $category = null)
  416.     {
  417.         $news = $this->createQueryBuilder('n');
  418.         if (!empty($category)) {
  419.             $news = $news->leftJoin('n.categories', 'c');
  420.         }
  421.         $news = $news->where('n.isIzimi = 1 AND n.isActive = 1');
  422.         if (!empty($locale)) {
  423.             $news = $news->andWhere('n.locale = :locale');
  424.             $news = $news->setParameter('locale', $locale);
  425.         }
  426.         if (!empty($minUpdateDate)) {
  427.             $news = $news->andWhere('n.updated >= :minUpdateDate');
  428.             $news = $news->setParameter('minUpdateDate', $minUpdateDate);
  429.         }
  430.         if (!empty($maxUpdateDate)) {
  431.             $news = $news->andWhere('n.updated <= :maxUpdateDate');
  432.             $news = $news->setParameter('maxUpdateDate', $maxUpdateDate);
  433.         }
  434.         if (!empty($category)) {
  435.             $news = $news->andWhere('c.id = :category');
  436.             $news = $news->setParameter('category', $category);
  437.         }
  438.         if (!empty($sortBy)) {
  439.             $order = $sortDirection === 'desc' ? 'desc' : 'asc';
  440.             if ($sortBy === 'created_datetime') {
  441.                 $news = $news->orderBy('n.created', $order);
  442.             }
  443.             if ($sortBy === 'updated_datetime') {
  444.                 $news = $news->orderBy('n.updated', $order);
  445.             }
  446.             if ($sortBy === 'publication_date') {
  447.                 $news = $news->orderBy('n.publicationDate', $order);
  448.             }
  449.         }
  450.         $newsTotalResults = $news->getQuery()
  451.             ->getResult();
  452.         $newsTotalCount = empty($newsTotalResults) ? 0 : count($newsTotalResults);
  453.         if (empty($perPage)) {
  454.             $news = $newsTotalResults;
  455.         } else {
  456.             $news = $news->setFirstResult($perPage * ($page - 1))
  457.                 ->setMaxResults($perPage)
  458.                 ->getQuery()
  459.                 ->getResult();
  460.         }
  461.         if(!empty($news)){
  462.             return [
  463.                 'items' => $news,
  464.                 'totalCount' => $newsTotalCount,
  465.             ];
  466.         }
  467.         return [
  468.             'items' => [],
  469.             'totalCount' => $newsTotalCount,
  470.         ];
  471.     }
  472. }