* @copyright 2016 Kaleb Heitzman * @license https://opensource.org/licenses/MIT MIT * @version 1.1.0 * @link https://github.com/kalebheitzman/grav-plugin-events * @since 1.0.0 Initial Release */ class CalendarProcessor { /** * Twig Calendar Vars * * Adds a url to the event header and stores each event in an associative * array that can be accessed from `calendar.html.twig` via **year, * month, and day** params. Here is an example of accessing a particular * day on the calendar. * * ```twig * {% for events in calendar.events[calendar.year][calendar.month][day] %} * {% for event in events %} * {% if event.title %} *
{{ event.title }}
* {% endif %} * {% endfor %} * {% endfor %} * ``` * * @since 1.0.0 Initial Release * @param object $collection Grav Collection * @return array Calendar variables for Twig */ public function calendarVars( \Grav\Common\Page\Collection $collection ) { // build a calendar array to use in twig $calendar = array(); $collection->order('date', 'asc'); foreach($collection as $event) { $header = $event->header(); $start = $header->event['start']; // build dates to create an associate array $carbonStart = Carbon::parse($start); $year = $carbonStart->year; $month = $carbonStart->month; $day = $carbonStart->day; // add the event to the calendar $calendar[$year][$month][$day][] = $event; //$eventItem; } return $calendar; } /** * Twig Display Vars * * Returns vars used to navigate and display content in the calendar twig * template. **Past, present, and future** vars are provided to twig for * creating custom navigation ui's. Below is a listing of some of the * variables that are available. * * ```twig * {% calendar.prevYear %} * {% calendar.nextYear %} * {% calendar.daysInMonth %} * {% calendar.currentDay %} * {% calendar.date %} * {% calendar.year %} * {% calendar.month %} * {% calendar.day %} * {% calendar.next %} * {% calendar.prev %} * ``` * * @param object $yearParam Grav URI `year:` param * @param object $monthParam Grav URI `month:` param * @since 1.0.0. Initial Release * @return array Twig Array */ public function twigVars($yearParam, $monthParam) { if ( $yearParam === false ) { $yearParam = date('Y'); } if ( $monthParam === false ) { $monthParam = date('m'); } $monthYearString = "${yearParam}-${monthParam}-01"; $carbonMonthYear = Carbon::parse($monthYearString); // add vars for use in the calendar twig var $twigVars['calendar']['daysInMonth'] = $carbonMonthYear->daysInMonth; $twigVars['calendar']['currentDay'] = date('d'); // current dates $twigVars['calendar']['date'] = $carbonMonthYear->timestamp; $twigVars['calendar']['year'] = $carbonMonthYear->year; $twigVars['calendar']['month'] = $carbonMonthYear->month; $twigVars['calendar']['day'] = $carbonMonthYear->day; // next dates $nextMonth = $carbonMonthYear->copy()->addMonth(); $twigVars['calendar']['next']['date'] = $nextMonth->timestamp; // prev dates $prevMonth = $carbonMonthYear->copy()->subMonth(); $twigVars['calendar']['prev']['date'] = $prevMonth->timestamp; // years $nextYear = $carbonMonthYear->copy()->addYear(); $prevYear = $carbonMonthYear->copy()->subYear(); $twigVars['calendar']['prevYear'] = $prevYear; $twigVars['calendar']['nextYear'] = $nextYear; return $twigVars; } }