vendor/contao/calendar-bundle/src/Resources/contao/models/CalendarEventsModel.php line 299

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 events
  14.  *
  15.  * @property string|integer      $id
  16.  * @property string|integer      $pid
  17.  * @property string|integer      $tstamp
  18.  * @property string              $title
  19.  * @property string              $alias
  20.  * @property string|integer      $author
  21.  * @property string|boolean      $addTime
  22.  * @property string|integer|null $startTime
  23.  * @property string|integer|null $endTime
  24.  * @property string|integer|null $startDate
  25.  * @property string|integer|null $endDate
  26.  * @property string              $pageTitle
  27.  * @property string              $robots
  28.  * @property string|null         $description
  29.  * @property string              $location
  30.  * @property string              $address
  31.  * @property string|null         $teaser
  32.  * @property string|boolean      $addImage
  33.  * @property string|boolean      $overwriteMeta
  34.  * @property string|null         $singleSRC
  35.  * @property string              $alt
  36.  * @property string              $imageTitle
  37.  * @property string|integer      $size
  38.  * @property string|array        $imagemargin
  39.  * @property string              $imageUrl
  40.  * @property string|boolean      $fullsize
  41.  * @property string              $caption
  42.  * @property string              $floating
  43.  * @property string|boolean      $recurring
  44.  * @property string              $repeatEach
  45.  * @property string|integer      $repeatEnd
  46.  * @property string|integer      $recurrences
  47.  * @property string|boolean      $addEnclosure
  48.  * @property string|array|null   $enclosure
  49.  * @property string              $source
  50.  * @property string|integer      $jumpTo
  51.  * @property string|integer      $articleId
  52.  * @property string              $url
  53.  * @property string|boolean      $target
  54.  * @property string              $cssClass
  55.  * @property string|boolean      $noComments
  56.  * @property string|boolean      $featured
  57.  * @property string|boolean      $published
  58.  * @property string|integer      $start
  59.  * @property string|integer      $stop
  60.  *
  61.  * @method static CalendarEventsModel|null findById($id, array $opt=array())
  62.  * @method static CalendarEventsModel|null findByPk($id, array $opt=array())
  63.  * @method static CalendarEventsModel|null findByIdOrAlias($val, array $opt=array())
  64.  * @method static CalendarEventsModel|null findOneBy($col, $val, array $opt=array())
  65.  * @method static CalendarEventsModel|null findOneByPid($val, array $opt=array())
  66.  * @method static CalendarEventsModel|null findOneByTstamp($val, array $opt=array())
  67.  * @method static CalendarEventsModel|null findOneByTitle($val, array $opt=array())
  68.  * @method static CalendarEventsModel|null findOneByAlias($val, array $opt=array())
  69.  * @method static CalendarEventsModel|null findOneByAuthor($val, array $opt=array())
  70.  * @method static CalendarEventsModel|null findOneByAddTime($val, array $opt=array())
  71.  * @method static CalendarEventsModel|null findOneByStartTime($val, array $opt=array())
  72.  * @method static CalendarEventsModel|null findOneByEndTime($val, array $opt=array())
  73.  * @method static CalendarEventsModel|null findOneByStartDate($val, array $opt=array())
  74.  * @method static CalendarEventsModel|null findOneByEndDate($val, array $opt=array())
  75.  * @method static CalendarEventsModel|null findOneByPageTitle($val, array $opt=array())
  76.  * @method static CalendarEventsModel|null findOneByRobots($val, array $opt=array())
  77.  * @method static CalendarEventsModel|null findOneByDescription($val, array $opt=array())
  78.  * @method static CalendarEventsModel|null findOneByLocation($val, array $opt=array())
  79.  * @method static CalendarEventsModel|null findOneByAddress($val, array $opt=array())
  80.  * @method static CalendarEventsModel|null findOneByTeaser($val, array $opt=array())
  81.  * @method static CalendarEventsModel|null findOneByAddImage($val, array $opt=array())
  82.  * @method static CalendarEventsModel|null findOneByOverwriteMeta($val, array $opt=array())
  83.  * @method static CalendarEventsModel|null findOneBySingleSRC($val, array $opt=array())
  84.  * @method static CalendarEventsModel|null findOneByAlt($val, array $opt=array())
  85.  * @method static CalendarEventsModel|null findOneByImageTitle($val, array $opt=array())
  86.  * @method static CalendarEventsModel|null findOneBySize($val, array $opt=array())
  87.  * @method static CalendarEventsModel|null findOneByImagemargin($val, array $opt=array())
  88.  * @method static CalendarEventsModel|null findOneByImageUrl($val, array $opt=array())
  89.  * @method static CalendarEventsModel|null findOneByFullsize($val, array $opt=array())
  90.  * @method static CalendarEventsModel|null findOneByCaption($val, array $opt=array())
  91.  * @method static CalendarEventsModel|null findOneByFloating($val, array $opt=array())
  92.  * @method static CalendarEventsModel|null findOneByRecurring($val, array $opt=array())
  93.  * @method static CalendarEventsModel|null findOneByRepeatEach($val, array $opt=array())
  94.  * @method static CalendarEventsModel|null findOneByRepeatEnd($val, array $opt=array())
  95.  * @method static CalendarEventsModel|null findOneByRecurrences($val, array $opt=array())
  96.  * @method static CalendarEventsModel|null findOneByAddEnclosure($val, array $opt=array())
  97.  * @method static CalendarEventsModel|null findOneByEnclosure($val, array $opt=array())
  98.  * @method static CalendarEventsModel|null findOneBySource($val, array $opt=array())
  99.  * @method static CalendarEventsModel|null findOneByJumpTo($val, array $opt=array())
  100.  * @method static CalendarEventsModel|null findOneByArticleId($val, array $opt=array())
  101.  * @method static CalendarEventsModel|null findOneByUrl($val, array $opt=array())
  102.  * @method static CalendarEventsModel|null findOneByTarget($val, array $opt=array())
  103.  * @method static CalendarEventsModel|null findOneByCssClass($val, array $opt=array())
  104.  * @method static CalendarEventsModel|null findOneByNoComments($val, array $opt=array())
  105.  * @method static CalendarEventsModel|null findOneByFeatured($val, array $opt=array())
  106.  * @method static CalendarEventsModel|null findOneByPublished($val, array $opt=array())
  107.  * @method static CalendarEventsModel|null findOneByStart($val, array $opt=array())
  108.  * @method static CalendarEventsModel|null findOneByStop($val, array $opt=array())
  109.  *
  110.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByPid($val, array $opt=array())
  111.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByTstamp($val, array $opt=array())
  112.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByTitle($val, array $opt=array())
  113.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAlias($val, array $opt=array())
  114.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAuthor($val, array $opt=array())
  115.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAddTime($val, array $opt=array())
  116.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByStartTime($val, array $opt=array())
  117.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByEndTime($val, array $opt=array())
  118.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByStartDate($val, array $opt=array())
  119.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByEndDate($val, array $opt=array())
  120.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByPageTitle($val, array $opt=array())
  121.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByRobots($val, array $opt=array())
  122.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByDescription($val, array $opt=array())
  123.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByLocation($val, array $opt=array())
  124.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAddress($val, array $opt=array())
  125.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByTeaser($val, array $opt=array())
  126.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAddImage($val, array $opt=array())
  127.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByOverwriteMeta($val, array $opt=array())
  128.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findBySingleSRC($val, array $opt=array())
  129.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAlt($val, array $opt=array())
  130.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByImageTitle($val, array $opt=array())
  131.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findBySize($val, array $opt=array())
  132.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByImagemargin($val, array $opt=array())
  133.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByImageUrl($val, array $opt=array())
  134.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByFullsize($val, array $opt=array())
  135.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByCaption($val, array $opt=array())
  136.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByFloating($val, array $opt=array())
  137.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByRecurring($val, array $opt=array())
  138.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByRepeatEach($val, array $opt=array())
  139.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByRepeatEnd($val, array $opt=array())
  140.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByRecurrences($val, array $opt=array())
  141.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByAddEnclosure($val, array $opt=array())
  142.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByEnclosure($val, array $opt=array())
  143.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findBySource($val, array $opt=array())
  144.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByJumpTo($val, array $opt=array())
  145.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByArticleId($val, array $opt=array())
  146.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByUrl($val, array $opt=array())
  147.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByTarget($val, array $opt=array())
  148.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByCssClass($val, array $opt=array())
  149.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByNoComments($val, array $opt=array())
  150.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByFeatured($val, array $opt=array())
  151.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByPublished($val, array $opt=array())
  152.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByStart($val, array $opt=array())
  153.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findByStop($val, array $opt=array())
  154.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findMultipleByIds($val, array $opt=array())
  155.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findBy($col, $val, array $opt=array())
  156.  * @method static Collection|CalendarEventsModel[]|CalendarEventsModel|null findAll(array $opt=array())
  157.  *
  158.  * @method static integer countById($id, array $opt=array())
  159.  * @method static integer countByPid($val, array $opt=array())
  160.  * @method static integer countByTstamp($val, array $opt=array())
  161.  * @method static integer countByTitle($val, array $opt=array())
  162.  * @method static integer countByAlias($val, array $opt=array())
  163.  * @method static integer countByAuthor($val, array $opt=array())
  164.  * @method static integer countByAddTime($val, array $opt=array())
  165.  * @method static integer countByStartTime($val, array $opt=array())
  166.  * @method static integer countByEndTime($val, array $opt=array())
  167.  * @method static integer countByStartDate($val, array $opt=array())
  168.  * @method static integer countByEndDate($val, array $opt=array())
  169.  * @method static integer countByPageTitle($val, array $opt=array())
  170.  * @method static integer countByRobots($val, array $opt=array())
  171.  * @method static integer countByDescription($val, array $opt=array())
  172.  * @method static integer countByLocation($val, array $opt=array())
  173.  * @method static integer countByAddress($val, array $opt=array())
  174.  * @method static integer countByTeaser($val, array $opt=array())
  175.  * @method static integer countByAddImage($val, array $opt=array())
  176.  * @method static integer countByOverwriteMeta($val, array $opt=array())
  177.  * @method static integer countBySingleSRC($val, array $opt=array())
  178.  * @method static integer countByAlt($val, array $opt=array())
  179.  * @method static integer countByImageTitle($val, array $opt=array())
  180.  * @method static integer countBySize($val, array $opt=array())
  181.  * @method static integer countByImagemargin($val, array $opt=array())
  182.  * @method static integer countByImageUrl($val, array $opt=array())
  183.  * @method static integer countByFullsize($val, array $opt=array())
  184.  * @method static integer countByCaption($val, array $opt=array())
  185.  * @method static integer countByFloating($val, array $opt=array())
  186.  * @method static integer countByRecurring($val, array $opt=array())
  187.  * @method static integer countByRepeatEach($val, array $opt=array())
  188.  * @method static integer countByRepeatEnd($val, array $opt=array())
  189.  * @method static integer countByRecurrences($val, array $opt=array())
  190.  * @method static integer countByAddEnclosure($val, array $opt=array())
  191.  * @method static integer countByEnclosure($val, array $opt=array())
  192.  * @method static integer countBySource($val, array $opt=array())
  193.  * @method static integer countByJumpTo($val, array $opt=array())
  194.  * @method static integer countByArticleId($val, array $opt=array())
  195.  * @method static integer countByUrl($val, array $opt=array())
  196.  * @method static integer countByTarget($val, array $opt=array())
  197.  * @method static integer countByCssClass($val, array $opt=array())
  198.  * @method static integer countByNoComments($val, array $opt=array())
  199.  * @method static integer countByFeatured($val, array $opt=array())
  200.  * @method static integer countByPublished($val, array $opt=array())
  201.  * @method static integer countByStart($val, array $opt=array())
  202.  * @method static integer countByStop($val, array $opt=array())
  203.  */
  204. class CalendarEventsModel extends Model
  205. {
  206.     use ModelMetadataTrait;
  207.     /**
  208.      * Table name
  209.      * @var string
  210.      */
  211.     protected static $strTable 'tl_calendar_events';
  212.     /**
  213.      * Find a published event from one or more calendars by its ID or alias
  214.      *
  215.      * @param mixed $varId      The numeric ID or alias name
  216.      * @param array $arrPids    An array of calendar IDs
  217.      * @param array $arrOptions An optional options array
  218.      *
  219.      * @return CalendarEventsModel|null The model or null if there is no event
  220.      */
  221.     public static function findPublishedByParentAndIdOrAlias($varId$arrPids, array $arrOptions=array())
  222.     {
  223.         if (empty($arrPids) || !\is_array($arrPids))
  224.         {
  225.             return null;
  226.         }
  227.         $t = static::$strTable;
  228.         $arrColumns = !preg_match('/^[1-9]\d*$/'$varId) ? array("BINARY $t.alias=?") : array("$t.id=?");
  229.         $arrColumns[] = "$t.pid IN(" implode(','array_map('\intval'$arrPids)) . ")";
  230.         if (!static::isPreviewMode($arrOptions))
  231.         {
  232.             $time Date::floorToMinute();
  233.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'$time')";
  234.         }
  235.         return static::findOneBy($arrColumns$varId$arrOptions);
  236.     }
  237.     /**
  238.      * Find events of the current period by their parent ID
  239.      *
  240.      * @param integer $intPid     The calendar ID
  241.      * @param integer $intStart   The start date as Unix timestamp
  242.      * @param integer $intEnd     The end date as Unix timestamp
  243.      * @param array   $arrOptions An optional options array
  244.      *
  245.      * @return Collection|CalendarEventsModel[]|CalendarEventsModel|null A collection of models or null if there are no events
  246.      */
  247.     public static function findCurrentByPid($intPid$intStart$intEnd, array $arrOptions=array())
  248.     {
  249.         $t = static::$strTable;
  250.         $intStart = (int) $intStart;
  251.         $intEnd = (int) $intEnd;
  252.         $arrColumns = array("$t.pid=? AND (($t.startTime>=$intStart AND $t.startTime<=$intEnd) OR ($t.endTime>=$intStart AND $t.endTime<=$intEnd) OR ($t.startTime<=$intStart AND $t.endTime>=$intEnd) OR ($t.recurring='1' AND ($t.recurrences=0 OR $t.repeatEnd>=$intStart) AND $t.startTime<=$intEnd))");
  253.         if (isset($arrOptions['showFeatured']))
  254.         {
  255.             if ($arrOptions['showFeatured'] === true)
  256.             {
  257.                 $arrColumns[] = "$t.featured='1'";
  258.             }
  259.             elseif ($arrOptions['showFeatured'] === false)
  260.             {
  261.                 $arrColumns[] = "$t.featured=''";
  262.             }
  263.         }
  264.         if (!static::isPreviewMode($arrOptions))
  265.         {
  266.             $time Date::floorToMinute();
  267.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'$time')";
  268.         }
  269.         if (!isset($arrOptions['order']))
  270.         {
  271.             $arrOptions['order']  = "$t.startTime";
  272.         }
  273.         return static::findBy($arrColumns$intPid$arrOptions);
  274.     }
  275.     /**
  276.      * Find published events with the default redirect target by their parent ID
  277.      *
  278.      * @param integer $intPid     The calendar ID
  279.      * @param array   $arrOptions An optional options array
  280.      *
  281.      * @return Collection|CalendarEventsModel[]|CalendarEventsModel|null A collection of models or null if there are no events
  282.      */
  283.     public static function findPublishedDefaultByPid($intPid, array $arrOptions=array())
  284.     {
  285.         $t = static::$strTable;
  286.         $arrColumns = array("$t.pid=? AND $t.source='default'");
  287.         if (!static::isPreviewMode($arrOptions))
  288.         {
  289.             $time Date::floorToMinute();
  290.             $arrColumns[] = "$t.published='1' AND ($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'$time')";
  291.         }
  292.         if (!isset($arrOptions['order']))
  293.         {
  294.             $arrOptions['order']  = "$t.startTime DESC";
  295.         }
  296.         return static::findBy($arrColumns$intPid$arrOptions);
  297.     }
  298.     /**
  299.      * Find upcoming events by their parent IDs
  300.      *
  301.      * @param array   $arrIds     An array of calendar IDs
  302.      * @param integer $intLimit   An optional limit
  303.      * @param array   $arrOptions An optional options array
  304.      *
  305.      * @return Collection|CalendarEventsModel[]|CalendarEventsModel|null A collection of models or null if there are no events
  306.      */
  307.     public static function findUpcomingByPids($arrIds$intLimit=0, array $arrOptions=array())
  308.     {
  309.         if (empty($arrIds) || !\is_array($arrIds))
  310.         {
  311.             return null;
  312.         }
  313.         $t = static::$strTable;
  314.         $time Date::floorToMinute();
  315.         // Get upcoming events using endTime instead of startTime (see #3917)
  316.         $arrColumns = array("$t.pid IN(" implode(','array_map('\intval'$arrIds)) . ") AND $t.published='1' AND ($t.start='' OR $t.start<='$time') AND ($t.stop='' OR $t.stop>'$time') AND ($t.endTime>=$time OR ($t.recurring='1' AND ($t.recurrences=0 OR $t.repeatEnd>=$time)))");
  317.         if ($intLimit 0)
  318.         {
  319.             $arrOptions['limit'] = $intLimit;
  320.         }
  321.         if (!isset($arrOptions['order']))
  322.         {
  323.             $arrOptions['order'] = "$t.startTime";
  324.         }
  325.         return static::findBy($arrColumnsnull$arrOptions);
  326.     }
  327. }
  328. class_alias(CalendarEventsModel::class, 'CalendarEventsModel');