2015-08-17 17:00:26 -07:00
< ? php
namespace Drupal\taxonomy\Entity ;
use Drupal\Core\Config\Entity\ConfigEntityBundleBase ;
use Drupal\Core\Entity\EntityStorageInterface ;
use Drupal\taxonomy\VocabularyInterface ;
/**
* Defines the taxonomy vocabulary entity .
*
* @ ConfigEntityType (
* id = " taxonomy_vocabulary " ,
* label = @ Translation ( " Taxonomy vocabulary " ),
* handlers = {
* " storage " = " Drupal \t axonomy \ VocabularyStorage " ,
* " list_builder " = " Drupal \t axonomy \ VocabularyListBuilder " ,
* " form " = {
* " default " = " Drupal \t axonomy \ VocabularyForm " ,
* " reset " = " Drupal \t axonomy \ Form \ VocabularyResetForm " ,
* " delete " = " Drupal \t axonomy \ Form \ VocabularyDeleteForm "
* }
* },
* admin_permission = " administer taxonomy " ,
* config_prefix = " vocabulary " ,
* bundle_of = " taxonomy_term " ,
* entity_keys = {
* " id " = " vid " ,
* " label " = " name " ,
* " weight " = " weight "
* },
* links = {
* " add-form " = " /admin/structure/taxonomy/manage/ { taxonomy_vocabulary}/add " ,
* " delete-form " = " /admin/structure/taxonomy/manage/ { taxonomy_vocabulary}/delete " ,
* " reset-form " = " /admin/structure/taxonomy/manage/ { taxonomy_vocabulary}/reset " ,
* " overview-form " = " /admin/structure/taxonomy/manage/ { taxonomy_vocabulary}/overview " ,
* " edit-form " = " /admin/structure/taxonomy/manage/ { taxonomy_vocabulary} " ,
* " collection " = " /admin/structure/taxonomy " ,
* },
* config_export = {
* " name " ,
* " vid " ,
* " description " ,
* " hierarchy " ,
* " weight " ,
* }
* )
*/
class Vocabulary extends ConfigEntityBundleBase implements VocabularyInterface {
/**
* The taxonomy vocabulary ID .
*
* @ var string
*/
protected $vid ;
/**
* Name of the vocabulary .
*
* @ var string
*/
protected $name ;
/**
* Description of the vocabulary .
*
* @ var string
*/
protected $description ;
/**
* The type of hierarchy allowed within the vocabulary .
*
* Possible values :
* - TAXONOMY_HIERARCHY_DISABLED : No parents .
* - TAXONOMY_HIERARCHY_SINGLE : Single parent .
* - TAXONOMY_HIERARCHY_MULTIPLE : Multiple parents .
*
2016-01-06 16:31:26 -08:00
* @ var int
2015-08-17 17:00:26 -07:00
*/
protected $hierarchy = TAXONOMY_HIERARCHY_DISABLED ;
/**
* The weight of this vocabulary in relation to other vocabularies .
*
2016-01-06 16:31:26 -08:00
* @ var int
2015-08-17 17:00:26 -07:00
*/
protected $weight = 0 ;
/**
* { @ inheritdoc }
*/
public function getHierarchy () {
return $this -> hierarchy ;
}
/**
* { @ inheritdoc }
*/
public function setHierarchy ( $hierarchy ) {
$this -> hierarchy = $hierarchy ;
return $this ;
}
/**
* { @ inheritdoc }
*/
public function id () {
return $this -> vid ;
}
/**
* { @ inheritdoc }
*/
public function getDescription () {
return $this -> description ;
}
/**
* { @ inheritdoc }
*/
public static function preDelete ( EntityStorageInterface $storage , array $entities ) {
parent :: preDelete ( $storage , $entities );
// Only load terms without a parent, child terms will get deleted too.
entity_delete_multiple ( 'taxonomy_term' , $storage -> getToplevelTids ( array_keys ( $entities )));
}
/**
* { @ inheritdoc }
*/
public static function postDelete ( EntityStorageInterface $storage , array $entities ) {
parent :: postDelete ( $storage , $entities );
// Reset caches.
$storage -> resetCache ( array_keys ( $entities ));
if ( reset ( $entities ) -> isSyncing ()) {
return ;
}
$vocabularies = array ();
foreach ( $entities as $vocabulary ) {
$vocabularies [ $vocabulary -> id ()] = $vocabulary -> id ();
}
// Load all Taxonomy module fields and delete those which use only this
// vocabulary.
$field_storages = entity_load_multiple_by_properties ( 'field_storage_config' , array ( 'module' => 'taxonomy' ));
foreach ( $field_storages as $field_storage ) {
$modified_storage = FALSE ;
// Term reference fields may reference terms from more than one
// vocabulary.
foreach ( $field_storage -> getSetting ( 'allowed_values' ) as $key => $allowed_value ) {
if ( isset ( $vocabularies [ $allowed_value [ 'vocabulary' ]])) {
$allowed_values = $field_storage -> getSetting ( 'allowed_values' );
unset ( $allowed_values [ $key ]);
$field_storage -> setSetting ( 'allowed_values' , $allowed_values );
$modified_storage = TRUE ;
}
}
if ( $modified_storage ) {
$allowed_values = $field_storage -> getSetting ( 'allowed_values' );
if ( empty ( $allowed_values )) {
$field_storage -> delete ();
}
else {
// Update the field definition with the new allowed values.
$field_storage -> save ();
}
}
}
}
}