You are here

term_reference_tree.inc in Clientside Validation 7.2

File

clientside_validation_term_reference_tree/plugins/validator/term_reference_tree.inc
View source
<?php

$plugin = array(
  'label' => t('Hierarchical Select'),
  'validator' => array(
    'class' => 'CvTermReferenceTreeValidator',
  ),
);
class CvTermReferenceTreeValidator extends ClientsideValidationValidator {
  public function supports(array $element, array &$form_state) {
    return parent::supports($element, $form_state) && isset($element['#type']) && $element['#type'] == 'checkbox_tree' && isset($element['#required']) && $element['#required'];
  }
  public function getJavascriptSettings(array &$element, array &$form_state) {
    $class = drupal_clean_css_identifier($this
      ->getName($element) . '_group');
    $element['#attributes']['class'][] = $class;
    return $this
      ->getJavascriptSettingsRecur($element, $element, $form_state);
  }
  public function getJavascriptSettingsRecur(array &$element, array &$root_element, array &$form_state, &$settings = array()) {
    if ($element['#type'] == 'checkbox') {
      $class = drupal_clean_css_identifier($this
        ->getName($root_element) . '_group');
      $settings['rules'][$this
        ->getName($element)]['require_from_group'] = array(
        1,
        '.' . $class . ' input[type="checkbox"]',
      );
      $settings['messages'][$this
        ->getName($element)]['require_from_group'] = $this
        ->getMessage($root_element);
      $settings['groups'][$class][] = $this
        ->getName($element);
    }
    foreach (element_children($element) as $child) {
      $this
        ->getJavascriptSettingsRecur($element[$child], $root_element, $form_state, $settings);
    }
    return $settings;
  }
  public function getMessage(array $element) {
    return isset($element['#required_error']) ? $element['#required_error'] : t('!title field is required.', array(
      '!title' => $element['#title'],
    ));
  }
  public function setDataAttributes(array &$element, array &$form_state) {
    $js_settings = $this
      ->getJavascriptSettings($element, $form_state);
    $this
      ->setDataAttributesRecur($element, $form_state, $js_settings);
  }
  public function setDataAttributesRecur(&$element, $form_state, $js_settings) {
    if ($element['#type'] == 'checkbox') {
      $name = $this
        ->getName($element);
      foreach ($js_settings['rules'][$name] as $rulename => $rulearg) {
        $element['#attributes']['data-rule' . drupal_ucfirst(drupal_strtolower($rulename))] = drupal_json_encode($rulearg);
        $element['#attributes']['data-msg' . drupal_ucfirst(drupal_strtolower($rulename))] = $js_settings['messages'][$name][$rulename];
      }
    }
    foreach (element_children($element) as $child) {
      $this
        ->setDataAttributesRecur($element[$child], $form_state, $js_settings);
    }
  }

}

Classes