Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 96 |
| TermForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
420 | |
0.00% |
0 / 96 |
| form | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 56 |
|||
| validateForm | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
| buildEntity | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| save | |
0.00% |
0 / 1 |
110 | |
0.00% |
0 / 30 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\taxonomy\TermForm. | |
| */ | |
| namespace Drupal\taxonomy; | |
| use Drupal\Core\Entity\ContentEntityForm; | |
| use Drupal\Core\Form\FormStateInterface; | |
| /** | |
| * Base for controller for taxonomy term edit forms. | |
| */ | |
| class TermForm extends ContentEntityForm { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function form(array $form, FormStateInterface $form_state) { | |
| $term = $this->entity; | |
| $vocab_storage = $this->entityManager->getStorage('taxonomy_vocabulary'); | |
| $taxonomy_storage = $this->entityManager->getStorage('taxonomy_term'); | |
| $vocabulary = $vocab_storage->load($term->bundle()); | |
| $parent = array_keys($taxonomy_storage->loadParents($term->id())); | |
| $form_state->set(['taxonomy', 'parent'], $parent); | |
| $form_state->set(['taxonomy', 'vocabulary'], $vocabulary); | |
| $form['relations'] = array( | |
| '#type' => 'details', | |
| '#title' => $this->t('Relations'), | |
| '#open' => $vocabulary->getHierarchy() == TAXONOMY_HIERARCHY_MULTIPLE, | |
| '#weight' => 10, | |
| ); | |
| // \Drupal\taxonomy\TermStorageInterface::loadTree() and | |
| // \Drupal\taxonomy\TermStorageInterface::loadParents() may contain large | |
| // numbers of items so we check for taxonomy.settings:override_selector | |
| // before loading the full vocabulary. Contrib modules can then intercept | |
| // before hook_form_alter to provide scalable alternatives. | |
| if (!$this->config('taxonomy.settings')->get('override_selector')) { | |
| $parent = array_keys($taxonomy_storage->loadParents($term->id())); | |
| $children = $taxonomy_storage->loadTree($vocabulary->id(), $term->id()); | |
| // A term can't be the child of itself, nor of its children. | |
| foreach ($children as $child) { | |
| $exclude[] = $child->tid; | |
| } | |
| $exclude[] = $term->id(); | |
| $tree = $taxonomy_storage->loadTree($vocabulary->id()); | |
| $options = array('<' . $this->t('root') . '>'); | |
| if (empty($parent)) { | |
| $parent = array(0); | |
| } | |
| foreach ($tree as $item) { | |
| if (!in_array($item->tid, $exclude)) { | |
| $options[$item->tid] = str_repeat('-', $item->depth) . $item->name; | |
| } | |
| } | |
| $form['relations']['parent'] = array( | |
| '#type' => 'select', | |
| '#title' => $this->t('Parent terms'), | |
| '#options' => $options, | |
| '#default_value' => $parent, | |
| '#multiple' => TRUE, | |
| ); | |
| } | |
| $form['relations']['weight'] = array( | |
| '#type' => 'textfield', | |
| '#title' => $this->t('Weight'), | |
| '#size' => 6, | |
| '#default_value' => $term->getWeight(), | |
| '#description' => $this->t('Terms are displayed in ascending order by weight.'), | |
| '#required' => TRUE, | |
| ); | |
| $form['vid'] = array( | |
| '#type' => 'value', | |
| '#value' => $vocabulary->id(), | |
| ); | |
| $form['tid'] = array( | |
| '#type' => 'value', | |
| '#value' => $term->id(), | |
| ); | |
| return parent::form($form, $form_state, $term); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state) { | |
| parent::validateForm($form, $form_state); | |
| // Ensure numeric values. | |
| if ($form_state->hasValue('weight') && !is_numeric($form_state->getValue('weight'))) { | |
| $form_state->setErrorByName('weight', $this->t('Weight value must be numeric.')); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildEntity(array $form, FormStateInterface $form_state) { | |
| $term = parent::buildEntity($form, $form_state); | |
| // Prevent leading and trailing spaces in term names. | |
| $term->setName(trim($term->getName())); | |
| // Assign parents with proper delta values starting from 0. | |
| $term->parent = array_keys($form_state->getValue('parent')); | |
| return $term; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function save(array $form, FormStateInterface $form_state) { | |
| $term = $this->entity; | |
| $result = $term->save(); | |
| $link = $term->link($this->t('Edit'), 'edit-form'); | |
| switch ($result) { | |
| case SAVED_NEW: | |
| drupal_set_message($this->t('Created new term %term.', array('%term' => $term->getName()))); | |
| $this->logger('taxonomy')->notice('Created new term %term.', array('%term' => $term->getName(), 'link' => $link)); | |
| break; | |
| case SAVED_UPDATED: | |
| drupal_set_message($this->t('Updated term %term.', array('%term' => $term->getName()))); | |
| $this->logger('taxonomy')->notice('Updated term %term.', array('%term' => $term->getName(), 'link' => $link)); | |
| break; | |
| } | |
| $current_parent_count = count($form_state->getValue('parent')); | |
| $previous_parent_count = count($form_state->get(['taxonomy', 'parent'])); | |
| // Root doesn't count if it's the only parent. | |
| if ($current_parent_count == 1 && $form_state->hasValue(array('parent', 0))) { | |
| $current_parent_count = 0; | |
| $form_state->setValue('parent', array()); | |
| } | |
| // If the number of parents has been reduced to one or none, do a check on the | |
| // parents of every term in the vocabulary value. | |
| $vocabulary = $form_state->get(['taxonomy', 'vocabulary']); | |
| if ($current_parent_count < $previous_parent_count && $current_parent_count < 2) { | |
| taxonomy_check_vocabulary_hierarchy($vocabulary, $form_state->getValues()); | |
| } | |
| // If we've increased the number of parents and this is a single or flat | |
| // hierarchy, update the vocabulary immediately. | |
| elseif ($current_parent_count > $previous_parent_count && $vocabulary->getHierarchy() != TAXONOMY_HIERARCHY_MULTIPLE) { | |
| $vocabulary->setHierarchy($current_parent_count == 1 ? TAXONOMY_HIERARCHY_SINGLE : TAXONOMY_HIERARCHY_MULTIPLE); | |
| $vocabulary->save(); | |
| } | |
| $form_state->setValue('tid', $term->id()); | |
| $form_state->set('tid', $term->id()); | |
| } | |
| } |