You are here

public function CalendarYearWeekDate::query in Calendar 8.2

Build the query based upon the formula.

Extend query logic only if field is of type daterange.

Overrides Formula::query

File

src/Plugin/views/argument/CalendarYearWeekDate.php, line 105

Class

CalendarYearWeekDate
Argument handler for a day.

Namespace

Drupal\calendar\Plugin\views\argument

Code

public function query($group_by = FALSE) {
  $this
    ->ensureMyTable();
  if ($this
    ->getFieldDefinition()
    ->getType() === 'daterange') {
    if (!isset($this->argument)) {
      return;
    }
    else {
      $validated_argument = $this->calendarHelper
        ->getCalendarArguments($this->view);
    }
    $this->argument = $validated_argument[0]['argument'];
    $calendar_arguments = $this->calendarHelper
      ->getCalendarArguments($this->view);
    foreach ($calendar_arguments as $date_argument) {
      $week_start = $this->calendarHelper
        ->weekInfo($date_argument['argument']);
      $date_week_start = $week_start['startweekdate'];
      $date_week_end = $week_start['endweekdate'];
      $start_field_name = "{$this->tableAlias}.{$this->realField}";
      $end_field_name = substr($start_field_name, 0, -6) . '_end_value';
      $date_start = $this->query
        ->getDateFormat($this->query
        ->getDateField($start_field_name, TRUE), 'Y-m-d H:i:s', FALSE);
      $date_end = $this->query
        ->getDateFormat($this->query
        ->getDateField($end_field_name, TRUE), 'Y-m-d H:i:s', FALSE);
      $this->query
        ->setWhereGroup('OR', 'StartDate');
      $this->query
        ->setWhereGroup('OR', 'EndDate');
      $expression1 = "{$date_start} <= '{$date_week_end}'";
      $expression2 = "{$date_end} >= '{$date_week_start}'";
      $this->query
        ->addWhereExpression('StartDate', $expression1);
      $this->query
        ->addWhereExpression('EndDate', $expression2);
    }
  }
}