public static function CalendarHelper::month in Calendar 8.2
Returns an array for month.
Parameters
ViewExecutable $view: The view.
Return value
array Empty array for month.
Throws
\Exception
File
- src/
CalendarHelper.php, line 110
Class
- CalendarHelper
- Class CalendarHelper.
Namespace
Drupal\calendarCode
public static function month(ViewExecutable $view) {
$week_header = self::buildWeekHeader($view->styleInfo
->getDayNameSize());
$calendar_arguments = self::getCalendarArguments($view);
foreach ($calendar_arguments as $date_argument) {
// Get first and last day from month in argument.
$start_date = new DrupalDateTime($date_argument['argument'] . '01');
$first_week_info = self::weekInfo($start_date
->format('Y') . $start_date
->format('W'));
$end_date = clone $start_date;
$end_date
->modify("last day of this month");
$year = $end_date
->format('Y');
if ($end_date
->format('W') < $start_date
->format('W')) {
$year++;
}
$last_week_info = self::weekInfo($year . $end_date
->format('W'));
// Build array with days per week with prefixes and suffixes.
$caldays = [];
$week_counter = $first_week_info['weekno'];
$week_counter_max = $last_week_info['weekno'];
// Correct for new year by calculating number of weeks in diff.
if ($end_date
->format('W') < $start_date
->format('W')) {
$week_counter_max = $week_counter + (int) floor($first_week_info['startweekdate']
->diff($last_week_info['startweekdate'])->days / 7);
}
do {
$week_date = $first_week_info['startweekdate'];
$week_end_date = clone $week_date;
$week_end_date
->add(new DateInterval('P6D'));
$calweek = [];
// $week_header is already ordered so use first key.
foreach ($week_header as $key => $value) {
$week_header_day = $key;
break;
}
// Inner loop to construct days for each week, some of which may be prefix or suffix.
do {
$calweek[$week_date
->format('Ymd')] = [
'header' => $week_header[$week_header_day],
'date' => $first_week_info['startweekdate']
->format('d'),
'multiday' => [],
'allday' => [],
'other' => [],
];
if ($week_date < $start_date) {
$calweek[$week_date
->format('Ymd')]['class'] = 'prefix';
}
elseif ($week_date > $end_date) {
$calweek[$week_date
->format('Ymd')]['class'] = 'suffix';
}
$week_date
->add(new DateInterval('P1D'));
if ($week_header_day < 6) {
$week_header_day++;
}
else {
$week_header_day = 0;
}
} while ($week_date <= $week_end_date);
// Add start- and enddate since we need this for offset calculations.
$calweek_keys = array_keys($calweek);
$startweekdate = new DateTime(array_shift($calweek_keys));
$endweekdate = new DateTime(array_pop($calweek_keys));
$caldays[$week_counter] = [
'startweekdate' => $startweekdate,
'endweekdate' => $endweekdate,
'weekdays' => $calweek,
];
$week_counter++;
} while ($week_counter <= $week_counter_max);
}
return $caldays;
}