vocabularyStorage = $vocabulary_storage; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('entity.manager')->getStorage('taxonomy_vocabulary') ); } /** * {@inheritdoc} */ public function form(array $form, FormStateInterface $form_state) { $vocabulary = $this->entity; if ($vocabulary->isNew()) { $form['#title'] = $this->t('Add vocabulary'); } else { $form['#title'] = $this->t('Edit vocabulary'); } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#default_value' => $vocabulary->label(), '#maxlength' => 255, '#required' => TRUE, ); $form['vid'] = array( '#type' => 'machine_name', '#default_value' => $vocabulary->id(), '#maxlength' => EntityTypeInterface::BUNDLE_MAX_LENGTH, '#machine_name' => array( 'exists' => array($this, 'exists'), 'source' => array('name'), ), ); $form['description'] = array( '#type' => 'textfield', '#title' => $this->t('Description'), '#default_value' => $vocabulary->getDescription(), ); // $form['langcode'] is not wrapped in an // if ($this->moduleHandler->moduleExists('language')) check because the // language_select form element works also without the language module being // installed. https://www.drupal.org/node/1749954 documents the new element. $form['langcode'] = array( '#type' => 'language_select', '#title' => $this->t('Vocabulary language'), '#languages' => LanguageInterface::STATE_ALL, '#default_value' => $vocabulary->language()->getId(), ); if ($this->moduleHandler->moduleExists('language')) { $form['default_terms_language'] = array( '#type' => 'details', '#title' => $this->t('Terms language'), '#open' => TRUE, ); $form['default_terms_language']['default_language'] = array( '#type' => 'language_configuration', '#entity_information' => array( 'entity_type' => 'taxonomy_term', 'bundle' => $vocabulary->id(), ), '#default_value' => ContentLanguageSettings::loadByEntityTypeBundle('taxonomy_term', $vocabulary->id()), ); } // Set the hierarchy to "multiple parents" by default. This simplifies the // vocabulary form and standardizes the term form. $form['hierarchy'] = array( '#type' => 'value', '#value' => '0', ); $form = parent::form($form, $form_state); return $this->protectBundleIdElement($form); } /** * {@inheritdoc} */ public function save(array $form, FormStateInterface $form_state) { $vocabulary = $this->entity; // Prevent leading and trailing spaces in vocabulary names. $vocabulary->set('name', trim($vocabulary->label())); $status = $vocabulary->save(); $edit_link = $this->entity->link($this->t('Edit')); switch ($status) { case SAVED_NEW: drupal_set_message($this->t('Created new vocabulary %name.', array('%name' => $vocabulary->label()))); $this->logger('taxonomy')->notice('Created new vocabulary %name.', array('%name' => $vocabulary->label(), 'link' => $edit_link)); $form_state->setRedirectUrl($vocabulary->urlInfo('overview-form')); break; case SAVED_UPDATED: drupal_set_message($this->t('Updated vocabulary %name.', array('%name' => $vocabulary->label()))); $this->logger('taxonomy')->notice('Updated vocabulary %name.', array('%name' => $vocabulary->label(), 'link' => $edit_link)); $form_state->setRedirectUrl($vocabulary->urlInfo('collection')); break; } $form_state->setValue('vid', $vocabulary->id()); $form_state->set('vid', $vocabulary->id()); } /** * Determines if the vocabulary already exists. * * @param string $vid * The vocabulary ID. * * @return bool * TRUE if the vocabulary exists, FALSE otherwise. */ public function exists($vid) { $action = $this->vocabularyStorage->load($vid); return !empty($action); } }