2015-08-17 17:00:26 -07:00
< ? php
namespace Drupal\taxonomy ;
2015-10-08 11:40:12 -07:00
use Drupal\Core\Entity\BundleEntityFormBase ;
2015-08-17 17:00:26 -07:00
use Drupal\Core\Entity\EntityTypeInterface ;
use Drupal\Core\Form\FormStateInterface ;
use Drupal\Core\Language\LanguageInterface ;
use Drupal\language\Entity\ContentLanguageSettings ;
use Symfony\Component\DependencyInjection\ContainerInterface ;
/**
* Base form for vocabulary edit forms .
*/
2015-10-08 11:40:12 -07:00
class VocabularyForm extends BundleEntityFormBase {
2015-08-17 17:00:26 -07:00
/**
* The vocabulary storage .
*
* @ var \Drupal\taxonomy\VocabularyStorageInterface .
*/
protected $vocabularyStorage ;
/**
* Constructs a new vocabulary form .
*
* @ param \Drupal\taxonomy\VocabularyStorageInterface $vocabulary_storage
* The vocabulary storage .
*/
public function __construct ( VocabularyStorageInterface $vocabulary_storage ) {
$this -> 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' ,
);
2015-10-08 11:40:12 -07:00
$form = parent :: form ( $form , $form_state );
return $this -> protectBundleIdElement ( $form );
2015-08-17 17:00:26 -07:00
}
/**
* { @ 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 .
*
2015-10-08 11:40:12 -07:00
* @ param string $vid
* The vocabulary ID .
2015-08-17 17:00:26 -07:00
*
* @ return bool
* TRUE if the vocabulary exists , FALSE otherwise .
*/
2015-10-08 11:40:12 -07:00
public function exists ( $vid ) {
$action = $this -> vocabularyStorage -> load ( $vid );
2015-08-17 17:00:26 -07:00
return ! empty ( $action );
}
}