Skip to content
Snippets Groups Projects
Availability.php 1.73 KiB
Newer Older
<?php

class CRM_Availability_BAO_Availability {

  /**
   *
   */
  static function loadResources() {
    Civi::resources()
      ->addStyleFile('availability', 'availability.css')
      ->addScriptFile('availability', 'availability.js', 10, 'page-header');

    $fields = Civi::settings()->get('availability_fields');

    if (!is_array($fields)) {
      $fields = explode(CRM_Core_DAO::VALUE_SEPARATOR, $fields);
    }

    $settings = [
      'fields' => [],
    ];

    foreach ($fields as $field_id) {
      if (!empty($field_id)) {
        list($days, $periods) = self::getDaysAndPeriods($field_id);

        $settings['fields'][$field_id]['days'] = $days;
        $settings['fields'][$field_id]['periods'] = $periods;
      }
    }

    Civi::resources()->addSetting(['availability' => $settings]);
  }

  /**
   *
   */
  static function getDaysAndPeriods($field_id) {
    $days = [];
    $periods = [];

    $option_group_id = civicrm_api3('CustomField', 'getsingle', [
      'id' => $field_id,
    ])['option_group_id'];

    if (empty($option_group_id)) {
      return $days;
    }

    $options = civicrm_api3('OptionValue', 'get', [
      'option_group_id' => $option_group_id,
    ])['values'];

    foreach ($options as $key => $val) {
      $parts = explode(' ', $val['label']);

      if (!in_array($parts[0], $days)) {
        $days[] = $parts[0];
      }
bgm's avatar
bgm committed

      // NB: a label might just have "Monday" (not "Monday AM"), in which case
      // we will display a "All" row label (see empty periods below).
      if (isset($parts[1]) && !in_array($parts[1], $periods)) {
    if (empty($periods[0])) {
      $periods = [ts('All')];
    }