public function OfficeHoursItemList::isOpen in Office Hours 8
Determines if the Entity is Open or Closed.
Parameters
int $time:
Return value
bool Indicator whether the entity is Open or Closed at the given time.
Overrides OfficeHoursItemListInterface::isOpen
File
- src/
Plugin/ Field/ FieldType/ OfficeHoursItemList.php, line 28  
Class
- OfficeHoursItemList
 - Represents an Office hours field.
 
Namespace
Drupal\office_hours\Plugin\Field\FieldTypeCode
public function isOpen($time = NULL) {
  // Loop through all lines.
  // Detect the current line and the open/closed status.
  // Convert the day_number to (int) to get '0' for Sundays, not 'false'.
  $time = $time === NULL ? \Drupal::time()
    ->getRequestTime() : $time;
  $today = (int) idate('w', $time);
  // Get day_number (0=Sun, 6=Sat).
  $now = date('Hi', $time);
  // 'Hi' format, with leading zero (0900).
  $is_open = FALSE;
  foreach ($this
    ->getValue() as $key => $item) {
    // Calculate start and end times.
    $day = (int) $item['day'];
    // 'Hi' format, with leading zero (0900).
    $start = OfficeHoursDatetime::get($item['starthours'], 'Hi');
    $end = OfficeHoursDatetime::get($item['endhours'], 'Hi');
    if ($day - $today == -1 || $day - $today == 6 || $day == strtotime('yesterday midnight')) {
      // We were open yesterday evening, check if we are still open.
      if ($start >= $end && $end > $now) {
        $is_open = TRUE;
      }
    }
    elseif ($day == $today || $day == strtotime('today midnight')) {
      if ($start <= $now) {
        // We were open today, check if we are still open.
        if ($start > $end || $start == $end && !is_null($start) || $start < $end && $end > $now) {
          $is_open = TRUE;
        }
      }
    }
  }
  return $is_open;
}