vendor/contao/news-bundle/src/Resources/contao/models/NewsModel.php line 259

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Contao.
  4.  *
  5.  * (c) Leo Feyer
  6.  *
  7.  * @license LGPL-3.0-or-later
  8.  */
  9. namespace Contao;
  10. use Contao\CoreBundle\File\ModelMetadataTrait;
  11. use Contao\Model\Collection;
  12. /**
  13.  * Reads and writes news
  14.  *
  15.  * @property string|integer $id
  16.  * @property string|integer $pid
  17.  * @property string|integer $tstamp
  18.  * @property string         $headline
  19.  * @property string         $alias
  20.  * @property string|integer $author
  21.  * @property string|integer $date
  22.  * @property string|integer $time
  23.  * @property string         $pageTitle
  24.  * @property string         $robots
  25.  * @property string|null    $description
  26.  * @property string         $subheadline
  27.  * @property string|null    $teaser
  28.  * @property string|boolean $addImage
  29.  * @property string|boolean $overwriteMeta
  30.  * @property string|null    $singleSRC
  31.  * @property string         $alt
  32.  * @property string         $imageTitle
  33.  * @property string|integer $size
  34.  * @property string|array   $imagemargin
  35.  * @property string         $imageUrl
  36.  * @property string|boolean $fullsize
  37.  * @property string         $caption
  38.  * @property string         $floating
  39.  * @property string|boolean $addEnclosure
  40.  * @property string|null    $enclosure
  41.  * @property string         $source
  42.  * @property string|integer $jumpTo
  43.  * @property string|integer $articleId
  44.  * @property string         $url
  45.  * @property string|boolean $target
  46.  * @property string         $cssClass
  47.  * @property string|boolean $noComments
  48.  * @property string|boolean $featured
  49.  * @property string|boolean $published
  50.  * @property string|integer $start
  51.  * @property string|integer $stop
  52.  *
  53.  * @method static NewsModel|null findById($id, array $opt=array())
  54.  * @method static NewsModel|null findByPk($id, array $opt=array())
  55.  * @method static NewsModel|null findByIdOrAlias($val, array $opt=array())
  56.  * @method static NewsModel|null findOneBy($col, $val, array $opt=array())
  57.  * @method static NewsModel|null findOneByPid($val, array $opt=array())
  58.  * @method static NewsModel|null findOneByTstamp($val, array $opt=array())
  59.  * @method static NewsModel|null findOneByHeadline($val, array $opt=array())
  60.  * @method static NewsModel|null findOneByAlias($val, array $opt=array())
  61.  * @method static NewsModel|null findOneByAuthor($val, array $opt=array())
  62.  * @method static NewsModel|null findOneByDate($val, array $opt=array())
  63.  * @method static NewsModel|null findOneByTime($val, array $opt=array())
  64.  * @method static NewsModel|null findOneByPageTitle($val, array $opt=array())
  65.  * @method static NewsModel|null findOneByDescription($val, array $opt=array())
  66.  * @method static NewsModel|null findOneByRobots($val, array $opt=array())
  67.  * @method static NewsModel|null findOneBySubheadline($val, array $opt=array())
  68.  * @method static NewsModel|null findOneByTeaser($val, array $opt=array())
  69.  * @method static NewsModel|null findOneByAddImage($val, array $opt=array())
  70.  * @method static NewsModel|null findOneByOverwriteMeta($val, array $opt=array())
  71.  * @method static NewsModel|null findOneBySingleSRC($val, array $opt=array())
  72.  * @method static NewsModel|null findOneByAlt($val, array $opt=array())
  73.  * @method static NewsModel|null findOneByImageTitle($val, array $opt=array())
  74.  * @method static NewsModel|null findOneBySize($val, array $opt=array())
  75.  * @method static NewsModel|null findOneByImagemargin($val, array $opt=array())
  76.  * @method static NewsModel|null findOneByImageUrl($val, array $opt=array())
  77.  * @method static NewsModel|null findOneByFullsize($val, array $opt=array())
  78.  * @method static NewsModel|null findOneByCaption($val, array $opt=array())
  79.  * @method static NewsModel|null findOneByFloating($val, array $opt=array())
  80.  * @method static NewsModel|null findOneByAddEnclosure($val, array $opt=array())
  81.  * @method static NewsModel|null findOneByEnclosure($val, array $opt=array())
  82.  * @method static NewsModel|null findOneBySource($val, array $opt=array())
  83.  * @method static NewsModel|null findOneByJumpTo($val, array $opt=array())
  84.  * @method static NewsModel|null findOneByArticleId($val, array $opt=array())
  85.  * @method static NewsModel|null findOneByUrl($val, array $opt=array())
  86.  * @method static NewsModel|null findOneByTarget($val, array $opt=array())
  87.  * @method static NewsModel|null findOneByCssClass($val, array $opt=array())
  88.  * @method static NewsModel|null findOneByNoComments($val, array $opt=array())
  89.  * @method static NewsModel|null findOneByFeatured($val, array $opt=array())
  90.  * @method static NewsModel|null findOneByPublished($val, array $opt=array())
  91.  * @method static NewsModel|null findOneByStart($val, array $opt=array())
  92.  * @method static NewsModel|null findOneByStop($val, array $opt=array())
  93.  *
  94.  * @method static Collection|NewsModel[]|NewsModel|null findByPid($val, array $opt=array())
  95.  * @method static Collection|NewsModel[]|NewsModel|null findByTstamp($val, array $opt=array())
  96.  * @method static Collection|NewsModel[]|NewsModel|null findByHeadline($val, array $opt=array())
  97.  * @method static Collection|NewsModel[]|NewsModel|null findByAlias($val, array $opt=array())
  98.  * @method static Collection|NewsModel[]|NewsModel|null findByAuthor($val, array $opt=array())
  99.  * @method static Collection|NewsModel[]|NewsModel|null findByDate($val, array $opt=array())
  100.  * @method static Collection|NewsModel[]|NewsModel|null findByTime($val, array $opt=array())
  101.  * @method static Collection|NewsModel[]|NewsModel|null findByPageTitle($val, array $opt=array())
  102.  * @method static Collection|NewsModel[]|NewsModel|null findByDescription($val, array $opt=array())
  103.  * @method static Collection|NewsModel[]|NewsModel|null findByRobots($val, array $opt=array())
  104.  * @method static Collection|NewsModel[]|NewsModel|null findBySubheadline($val, array $opt=array())
  105.  * @method static Collection|NewsModel[]|NewsModel|null findByTeaser($val, array $opt=array())
  106.  * @method static Collection|NewsModel[]|NewsModel|null findByAddImage($val, array $opt=array())
  107.  * @method static Collection|NewsModel[]|NewsModel|null findByOverwriteMeta($val, array $opt=array())
  108.  * @method static Collection|NewsModel[]|NewsModel|null findBySingleSRC($val, array $opt=array())
  109.  * @method static Collection|NewsModel[]|NewsModel|null findByAlt($val, array $opt=array())
  110.  * @method static Collection|NewsModel[]|NewsModel|null findByImageTitle($val, array $opt=array())
  111.  * @method static Collection|NewsModel[]|NewsModel|null findBySize($val, array $opt=array())
  112.  * @method static Collection|NewsModel[]|NewsModel|null findByImagemargin($val, array $opt=array())
  113.  * @method static Collection|NewsModel[]|NewsModel|null findByImageUrl($val, array $opt=array())
  114.  * @method static Collection|NewsModel[]|NewsModel|null findByFullsize($val, array $opt=array())
  115.  * @method static Collection|NewsModel[]|NewsModel|null findByCaption($val, array $opt=array())
  116.  * @method static Collection|NewsModel[]|NewsModel|null findByFloating($val, array $opt=array())
  117.  * @method static Collection|NewsModel[]|NewsModel|null findByAddEnclosure($val, array $opt=array())
  118.  * @method static Collection|NewsModel[]|NewsModel|null findByEnclosure($val, array $opt=array())
  119.  * @method static Collection|NewsModel[]|NewsModel|null findBySource($val, array $opt=array())
  120.  * @method static Collection|NewsModel[]|NewsModel|null findByJumpTo($val, array $opt=array())
  121.  * @method static Collection|NewsModel[]|NewsModel|null findByArticleId($val, array $opt=array())
  122.  * @method static Collection|NewsModel[]|NewsModel|null findByUrl($val, array $opt=array())
  123.  * @method static Collection|NewsModel[]|NewsModel|null findByTarget($val, array $opt=array())
  124.  * @method static Collection|NewsModel[]|NewsModel|null findByCssClass($val, array $opt=array())
  125.  * @method static Collection|NewsModel[]|NewsModel|null findByNoComments($val, array $opt=array())
  126.  * @method static Collection|NewsModel[]|NewsModel|null findByFeatured($val, array $opt=array())
  127.  * @method static Collection|NewsModel[]|NewsModel|null findByPublished($val, array $opt=array())
  128.  * @method static Collection|NewsModel[]|NewsModel|null findByStart($val, array $opt=array())
  129.  * @method static Collection|NewsModel[]|NewsModel|null findByStop($val, array $opt=array())
  130.  * @method static Collection|NewsModel[]|NewsModel|null findMultipleByIds($val, array $opt=array())
  131.  * @method static Collection|NewsModel[]|NewsModel|null findBy($col, $val, array $opt=array())
  132.  * @method static Collection|NewsModel[]|NewsModel|null findAll(array $opt=array())
  133.  *
  134.  * @method static integer countById($id, array $opt=array())
  135.  * @method static integer countByPid($val, array $opt=array())
  136.  * @method static integer countByTstamp($val, array $opt=array())
  137.  * @method static integer countByHeadline($val, array $opt=array())
  138.  * @method static integer countByAlias($val, array $opt=array())
  139.  * @method static integer countByAuthor($val, array $opt=array())
  140.  * @method static integer countByDate($val, array $opt=array())
  141.  * @method static integer countByTime($val, array $opt=array())
  142.  * @method static integer countByPageTitle($val, array $opt=array())
  143.  * @method static integer countByDescription($val, array $opt=array())
  144.  * @method static integer countByRobots($val, array $opt=array())
  145.  * @method static integer countBySubheadline($val, array $opt=array())
  146.  * @method static integer countByTeaser($val, array $opt=array())
  147.  * @method static integer countByAddImage($val, array $opt=array())
  148.  * @method static integer countByOverwriteMeta($val, array $opt=array())
  149.  * @method static integer countBySingleSRC($val, array $opt=array())
  150.  * @method static integer countByAlt($val, array $opt=array())
  151.  * @method static integer countByImageTitle($val, array $opt=array())
  152.  * @method static integer countBySize($val, array $opt=array())
  153.  * @method static integer countByImagemargin($val, array $opt=array())
  154.  * @method static integer countByImageUrl($val, array $opt=array())
  155.  * @method static integer countByFullsize($val, array $opt=array())
  156.  * @method static integer countByCaption($val, array $opt=array())
  157.  * @method static integer countByFloating($val, array $opt=array())
  158.  * @method static integer countByAddEnclosure($val, array $opt=array())
  159.  * @method static integer countByEnclosure($val, array $opt=array())
  160.  * @method static integer countBySource($val, array $opt=array())
  161.  * @method static integer countByJumpTo($val, array $opt=array())
  162.  * @method static integer countByArticleId($val, array $opt=array())
  163.  * @method static integer countByUrl($val, array $opt=array())
  164.  * @method static integer countByTarget($val, array $opt=array())
  165.  * @method static integer countByCssClass($val, array $opt=array())
  166.  * @method static integer countByNoComments($val, array $opt=array())
  167.  * @method static integer countByFeatured($val, array $opt=array())
  168.  * @method static integer countByPublished($val, array $opt=array())
  169.  * @method static integer countByStart($val, array $opt=array())
  170.  * @method static integer countByStop($val, array $opt=array())
  171.  */
  172. class NewsModel extends Model
  173. {
  174.     use ModelMetadataTrait;
  175.     /**
  176.      * Table name
  177.      * @var string
  178.      */
  179.     protected static $strTable 'tl_news';
  180.     /**
  181.      * Find a published news item from one or more news archives by its ID or alias
  182.      *
  183.      * @param mixed $varId      The numeric ID or alias name
  184.      * @param array $arrPids    An array of parent IDs
  185.      * @param array $arrOptions An optional options array
  186.      *
  187.      * @return NewsModel|null The model or null if there are no news
  188.      */
  189.     public static function findPublishedByParentAndIdOrAlias($varId$arrPids, array $arrOptions=array())
  190.     {
  191.         if (empty($arrPids) || !\is_array($arrPids))
  192.         {
  193.             return null;
  194.         }
  195.         $t = static::$strTable;
  196.         $arrColumns = !preg_match('/^[1-9]\d*$/'$varId) ? array("BINARY $t.alias=?") : array("$t.id=?");
  197.         $arrColumns[] = "$t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")";
  198.         if (!static::isPreviewMode($arrOptions))
  199.         {
  200.             $time Date::floorToMinute();
  201.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  202.         }
  203.         return static::findOneBy($arrColumns$varId$arrOptions);
  204.     }
  205.     /**
  206.      * Find published news items by their parent ID
  207.      *
  208.      * @param array   $arrPids     An array of news archive IDs
  209.      * @param boolean $blnFeatured If true, return only featured news, if false, return only unfeatured news
  210.      * @param integer $intLimit    An optional limit
  211.      * @param integer $intOffset   An optional offset
  212.      * @param array   $arrOptions  An optional options array
  213.      *
  214.      * @return Collection|NewsModel[]|NewsModel|null A collection of models or null if there are no news
  215.      */
  216.     public static function findPublishedByPids($arrPids$blnFeatured=null$intLimit=0$intOffset=0, array $arrOptions=array())
  217.     {
  218.         if (empty($arrPids) || !\is_array($arrPids))
  219.         {
  220.             return null;
  221.         }
  222.         $t = static::$strTable;
  223.         $arrColumns = array("$t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")");
  224.         if ($blnFeatured === true)
  225.         {
  226.             $arrColumns[] = "$t.featured='1'";
  227.         }
  228.         elseif ($blnFeatured === false)
  229.         {
  230.             $arrColumns[] = "$t.featured=''";
  231.         }
  232.         if (!static::isPreviewMode($arrOptions))
  233.         {
  234.             $time Date::floorToMinute();
  235.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  236.         }
  237.         if (!isset($arrOptions['order']))
  238.         {
  239.             $arrOptions['order']  = "$t.date DESC";
  240.         }
  241.         $arrOptions['limit']  = $intLimit;
  242.         $arrOptions['offset'] = $intOffset;
  243.         return static::findBy($arrColumnsnull$arrOptions);
  244.     }
  245.     /**
  246.      * Count published news items by their parent ID
  247.      *
  248.      * @param array   $arrPids     An array of news archive IDs
  249.      * @param boolean $blnFeatured If true, return only featured news, if false, return only unfeatured news
  250.      * @param array   $arrOptions  An optional options array
  251.      *
  252.      * @return integer The number of news items
  253.      */
  254.     public static function countPublishedByPids($arrPids$blnFeatured=null, array $arrOptions=array())
  255.     {
  256.         if (empty($arrPids) || !\is_array($arrPids))
  257.         {
  258.             return 0;
  259.         }
  260.         $t = static::$strTable;
  261.         $arrColumns = array("$t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")");
  262.         if ($blnFeatured === true)
  263.         {
  264.             $arrColumns[] = "$t.featured='1'";
  265.         }
  266.         elseif ($blnFeatured === false)
  267.         {
  268.             $arrColumns[] = "$t.featured=''";
  269.         }
  270.         if (!static::isPreviewMode($arrOptions))
  271.         {
  272.             $time Date::floorToMinute();
  273.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  274.         }
  275.         return static::countBy($arrColumnsnull$arrOptions);
  276.     }
  277.     /**
  278.      * Find published news items with the default redirect target by their parent ID
  279.      *
  280.      * @param integer $intPid     The news archive ID
  281.      * @param array   $arrOptions An optional options array
  282.      *
  283.      * @return Collection|NewsModel[]|NewsModel|null A collection of models or null if there are no news
  284.      */
  285.     public static function findPublishedDefaultByPid($intPid, array $arrOptions=array())
  286.     {
  287.         $t = static::$strTable;
  288.         $arrColumns = array("$t.pid=? AND $t.source='default'");
  289.         if (!static::isPreviewMode($arrOptions))
  290.         {
  291.             $time Date::floorToMinute();
  292.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  293.         }
  294.         if (!isset($arrOptions['order']))
  295.         {
  296.             $arrOptions['order'] = "$t.date DESC";
  297.         }
  298.         return static::findBy($arrColumns$intPid$arrOptions);
  299.     }
  300.     /**
  301.      * Find published news items by their parent ID
  302.      *
  303.      * @param integer $intId      The news archive ID
  304.      * @param integer $intLimit   An optional limit
  305.      * @param array   $arrOptions An optional options array
  306.      *
  307.      * @return Collection|NewsModel[]|NewsModel|null A collection of models or null if there are no news
  308.      */
  309.     public static function findPublishedByPid($intId$intLimit=0, array $arrOptions=array())
  310.     {
  311.         $t = static::$strTable;
  312.         $arrColumns = array("$t.pid=?");
  313.         if (!static::isPreviewMode($arrOptions))
  314.         {
  315.             $time Date::floorToMinute();
  316.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  317.         }
  318.         if (!isset($arrOptions['order']))
  319.         {
  320.             $arrOptions['order'] = "$t.date DESC";
  321.         }
  322.         if ($intLimit 0)
  323.         {
  324.             $arrOptions['limit'] = $intLimit;
  325.         }
  326.         return static::findBy($arrColumns$intId$arrOptions);
  327.     }
  328.     /**
  329.      * Find all published news items of a certain period of time by their parent ID
  330.      *
  331.      * @param integer $intFrom    The start date as Unix timestamp
  332.      * @param integer $intTo      The end date as Unix timestamp
  333.      * @param array   $arrPids    An array of news archive IDs
  334.      * @param integer $intLimit   An optional limit
  335.      * @param integer $intOffset  An optional offset
  336.      * @param array   $arrOptions An optional options array
  337.      *
  338.      * @return Collection|NewsModel[]|NewsModel|null A collection of models or null if there are no news
  339.      */
  340.     public static function findPublishedFromToByPids($intFrom$intTo$arrPids$intLimit=0$intOffset=0, array $arrOptions=array())
  341.     {
  342.         if (empty($arrPids) || !\is_array($arrPids))
  343.         {
  344.             return null;
  345.         }
  346.         $t = static::$strTable;
  347.         $arrColumns = array("$t.date>=? AND $t.date<=? AND $t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")");
  348.         if (!static::isPreviewMode($arrOptions))
  349.         {
  350.             $time Date::floorToMinute();
  351.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  352.         }
  353.         if (!isset($arrOptions['order']))
  354.         {
  355.             $arrOptions['order']  = "$t.date DESC";
  356.         }
  357.         $arrOptions['limit']  = $intLimit;
  358.         $arrOptions['offset'] = $intOffset;
  359.         return static::findBy($arrColumns, array($intFrom$intTo), $arrOptions);
  360.     }
  361.     /**
  362.      * Count all published news items of a certain period of time by their parent ID
  363.      *
  364.      * @param integer $intFrom    The start date as Unix timestamp
  365.      * @param integer $intTo      The end date as Unix timestamp
  366.      * @param array   $arrPids    An array of news archive IDs
  367.      * @param array   $arrOptions An optional options array
  368.      *
  369.      * @return integer The number of news items
  370.      */
  371.     public static function countPublishedFromToByPids($intFrom$intTo$arrPids, array $arrOptions=array())
  372.     {
  373.         if (empty($arrPids) || !\is_array($arrPids))
  374.         {
  375.             return null;
  376.         }
  377.         $t = static::$strTable;
  378.         $arrColumns = array("$t.date>=? AND $t.date<=? AND $t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")");
  379.         if (!static::isPreviewMode($arrOptions))
  380.         {
  381.             $time Date::floorToMinute();
  382.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<=$time) AND ($t.stop='' OR $t.stop>$time)";
  383.         }
  384.         return static::countBy($arrColumns, array($intFrom$intTo), $arrOptions);
  385.     }
  386. }
  387. class_alias(NewsModel::class, 'NewsModel');