class DateRecurPartGrid in Recurring Dates Field 3.0.x
Same name and namespace in other branches
- 8.2 src/DateRecurPartGrid.php \Drupal\date_recur\DateRecurPartGrid
 - 3.x src/DateRecurPartGrid.php \Drupal\date_recur\DateRecurPartGrid
 - 3.1.x src/DateRecurPartGrid.php \Drupal\date_recur\DateRecurPartGrid
 
Frequency/part support grid.
Hierarchy
- class \Drupal\date_recur\DateRecurPartGrid
 
Expanded class hierarchy of DateRecurPartGrid
2 files declare their use of DateRecurPartGrid
- DateRecurFieldItemList.php in src/
Plugin/ Field/ FieldType/ DateRecurFieldItemList.php  - DateRecurPartGridUnitTest.php in tests/
src/ Unit/ DateRecurPartGridUnitTest.php  
File
- src/
DateRecurPartGrid.php, line 13  
Namespace
Drupal\date_recurView source
class DateRecurPartGrid {
  /**
   * Supported parts for this part grid.
   *
   * @var array
   *   Parts keyed by frequency.
   */
  protected $allowedParts = [];
  /**
   * Adds parts for a frequency to the allow list.
   *
   * @param string $frequency
   *   A frequency.
   * @param string[] $parts
   *   An array of parts.
   */
  public function allowParts(string $frequency, array $parts) : void {
    $existingFrequencyParts = $this->allowedParts[$frequency] ?? [];
    $this->allowedParts[$frequency] = array_merge($parts, $existingFrequencyParts);
  }
  /**
   * Determines whether all parts and frequencies are supported.
   */
  public function isAllowEverything() : bool {
    return count($this->allowedParts) === 0;
  }
  /**
   * Determines whether a frequency and at least one part is supported.
   *
   * @param string $frequency
   *   A frequency.
   *
   * @return bool
   *   Whether a frequency is supported.
   */
  public function isFrequencyAllowed(string $frequency) : bool {
    assert(in_array($frequency, DateRecurRruleMap::FREQUENCIES, TRUE));
    if ($this
      ->isAllowEverything()) {
      return TRUE;
    }
    return isset($this->allowedParts[$frequency]) && count($this->allowedParts[$frequency]) > 0;
  }
  /**
   * Determines whether a part is allowed.
   *
   * @param string $frequency
   *   A frequency.
   * @param string $part
   *   A part.
   *
   * @return bool
   *   Whether a part is supported.
   *
   * @throws \Drupal\date_recur\Exception\DateRecurRulePartIncompatible
   *   Part is incompatible with frequency.
   */
  public function isPartAllowed(string $frequency, string $part) : bool {
    assert(in_array($frequency, DateRecurRruleMap::FREQUENCIES, TRUE) && in_array($part, DateRecurRruleMap::PARTS, TRUE));
    if (in_array($part, DateRecurRruleMap::INCOMPATIBLE_PARTS[$frequency], TRUE)) {
      throw new DateRecurRulePartIncompatible();
    }
    if ($this
      ->isAllowEverything()) {
      return TRUE;
    }
    $partsInFrequency = $this->allowedParts[$frequency] ?? [];
    // Supports the part, or everything in this frequency.
    return in_array($part, $partsInFrequency, TRUE) || in_array(DateRecurItem::PART_SUPPORTS_ALL, $partsInFrequency, TRUE);
  }
  /**
   * Converts settings from date recur field configuration to a part grid.
   *
   * @param array $parts
   *   Part configuration.
   *
   * @return \Drupal\date_recur\DateRecurPartGrid
   *   A new parts grid.
   */
  public static function configSettingsToGrid(array $parts) {
    $grid = new static();
    if (!empty($parts['all'])) {
      return $grid;
    }
    $frequencies = $parts['frequencies'] ?? [];
    foreach ($frequencies as $frequency => $frequencyParts) {
      $grid
        ->allowParts($frequency, $frequencyParts);
    }
    return $grid;
  }
}Members
| 
            Name | 
                  Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| 
            DateRecurPartGrid:: | 
                  protected | property | Supported parts for this part grid. | |
| 
            DateRecurPartGrid:: | 
                  public | function | Adds parts for a frequency to the allow list. | |
| 
            DateRecurPartGrid:: | 
                  public static | function | Converts settings from date recur field configuration to a part grid. | |
| 
            DateRecurPartGrid:: | 
                  public | function | Determines whether all parts and frequencies are supported. | |
| 
            DateRecurPartGrid:: | 
                  public | function | Determines whether a frequency and at least one part is supported. | |
| 
            DateRecurPartGrid:: | 
                  public | function | Determines whether a part is allowed. |