You are here

public static function CheckboxTree::processCheckboxTree in Taxonomy Term Reference Tree Widget 8

Processes a checkboxes form element.

File

src/Element/CheckboxTree.php, line 46

Class

CheckboxTree
Provides a form element for term reference tree.

Namespace

Drupal\term_reference_tree\Element

Code

public static function processCheckboxTree(&$element, FormStateInterface $form_state, &$complete_form) {
  $value = is_array($element['#value']) ? $element['#value'] : [];
  $allowed = [];
  $filter = FALSE;
  if (!empty($element['#max_choices']) && $element['#max_choices'] != '-1') {
    $element['#attached']['drupalSettings'] = [
      'term_reference_tree' => [
        'trees' => [
          $element['#id'] => [
            'max_choices' => $element['#max_choices'],
          ],
        ],
      ],
    ];
  }
  if (!empty($element['#allowed'])) {
    $allowed = $element['#allowed'];
    $filter = TRUE;
  }
  if (empty($element['#options'])) {
    $options_tree = [];
    foreach ($element['#vocabularies'] as $vocabulary) {
      $options = _term_reference_tree_get_term_hierarchy(0, $vocabulary
        ->id(), $allowed, $filter, '', $value);
      $options_tree = array_merge($options_tree, $options);
    }
    $element['#options_tree'] = $options_tree;
    $element['#options'] = _term_reference_tree_get_options($element['#options_tree'], $allowed, $filter);
  }
  $terms = !empty($element['#options_tree']) ? $element['#options_tree'] : [];
  $tree = new \stdClass();
  $tree->children = $terms;
  unset($element['#needs_validation']);
  $element[] = _term_reference_tree_build_level($element, $tree, $form_state, $value, $element['#max_choices'], [], 1);
  return $element;
}