87ebd21f44a0e015254522fa230b0543d3942ef1
[yaffs-website] / web / core / modules / language / src / Entity / ContentLanguageSettings.php
1 <?php
2
3 namespace Drupal\language\Entity;
4
5 use Drupal\Core\Config\Entity\ConfigEntityBase;
6 use Drupal\Core\Entity\EntityStorageInterface;
7 use Drupal\Core\Language\LanguageInterface;
8 use Drupal\language\ContentLanguageSettingsException;
9 use Drupal\language\ContentLanguageSettingsInterface;
10
11 /**
12  * Defines the ContentLanguageSettings entity.
13  *
14  * @ConfigEntityType(
15  *   id = "language_content_settings",
16  *   label = @Translation("Content Language Settings"),
17  *   admin_permission = "administer languages",
18  *   config_prefix = "content_settings",
19  *   entity_keys = {
20  *     "id" = "id"
21  *   },
22  *   list_cache_tags = { "rendered" }
23  * )
24  */
25 class ContentLanguageSettings extends ConfigEntityBase implements ContentLanguageSettingsInterface {
26
27   /**
28    * The id. Combination of $target_entity_type_id.$target_bundle.
29    *
30    * @var string
31    */
32   protected $id;
33
34   /**
35    * The entity type ID (machine name).
36    *
37    * @var string
38    */
39   protected $target_entity_type_id;
40
41   /**
42    * The bundle (machine name).
43    *
44    * @var string
45    */
46   protected $target_bundle;
47
48   /**
49    * The default language code.
50    *
51    * @var string
52    */
53   protected $default_langcode = LanguageInterface::LANGCODE_SITE_DEFAULT;
54
55   /**
56    * Indicates if the language is alterable or not.
57    *
58    * @var bool
59    */
60   protected $language_alterable = FALSE;
61
62   /**
63    * Constructs a ContentLanguageSettings object.
64    *
65    * In most cases, Field entities are created via
66    * FieldConfig::create($values), where $values is the same
67    * parameter as in this constructor.
68    *
69    * @param array $values
70    *   An array of the referring entity bundle with:
71    *   - target_entity_type_id: The entity type.
72    *   - target_bundle: The bundle.
73    *   Other array elements will be used to set the corresponding properties on
74    *   the class; see the class property documentation for details.
75    *
76    * @see entity_create()
77    */
78   public function __construct(array $values, $entity_type = 'language_content_settings') {
79     if (empty($values['target_entity_type_id'])) {
80       throw new ContentLanguageSettingsException('Attempt to create content language settings without a target_entity_type_id.');
81     }
82     if (empty($values['target_bundle'])) {
83       throw new ContentLanguageSettingsException('Attempt to create content language settings without a target_bundle.');
84     }
85     parent::__construct($values, $entity_type);
86   }
87
88   /**
89    * {@inheritdoc}
90    */
91   public function id() {
92     return $this->target_entity_type_id . '.' . $this->target_bundle;
93   }
94
95   /**
96    * {@inheritdoc}
97    */
98   public function getTargetEntityTypeId() {
99     return $this->target_entity_type_id;
100   }
101
102   /**
103    * {@inheritdoc}
104    */
105   public function getTargetBundle() {
106     return $this->target_bundle;
107   }
108
109   /**
110    * {@inheritdoc}
111    */
112   public function setTargetBundle($target_bundle) {
113     $this->target_bundle = $target_bundle;
114
115     return $this;
116   }
117
118   /**
119    * {@inheritdoc}
120    */
121   public function setDefaultLangcode($default_langcode) {
122     $this->default_langcode = $default_langcode;
123
124     return $this;
125   }
126
127   /**
128    * {@inheritdoc}
129    */
130   public function getDefaultLangcode() {
131     return $this->default_langcode;
132   }
133
134   /**
135    * {@inheritdoc}
136    */
137   public function setLanguageAlterable($language_alterable) {
138     $this->language_alterable = $language_alterable;
139
140     return $this;
141   }
142
143   /**
144    * {@inheritdoc}
145    */
146   public function isLanguageAlterable() {
147     return $this->language_alterable;
148   }
149
150   /**
151    * {@inheritdoc}
152    */
153   public function preSave(EntityStorageInterface $storage) {
154     $this->id = $this->id();
155     parent::preSave($storage);
156   }
157
158   /**
159    * {@inheritdoc}
160    */
161   public function isDefaultConfiguration() {
162     return (!$this->language_alterable && $this->default_langcode == LanguageInterface::LANGCODE_SITE_DEFAULT);
163   }
164
165   /**
166    * Loads a content language config entity based on the entity type and bundle.
167    *
168    * @param string $entity_type_id
169    *   ID of the entity type.
170    * @param string $bundle
171    *   Bundle name.
172    *
173    * @return $this
174    *   The content language config entity if one exists. Otherwise, returns
175    *   default values.
176    */
177   public static function loadByEntityTypeBundle($entity_type_id, $bundle) {
178     if ($entity_type_id == NULL || $bundle == NULL) {
179       return NULL;
180     }
181     $config = \Drupal::entityManager()->getStorage('language_content_settings')->load($entity_type_id . '.' . $bundle);
182     if ($config == NULL) {
183       $config = ContentLanguageSettings::create(['target_entity_type_id' => $entity_type_id, 'target_bundle' => $bundle]);
184     }
185     return $config;
186   }
187
188   /**
189    * {@inheritdoc}
190    */
191   public function calculateDependencies() {
192     parent::calculateDependencies();
193
194     // Create dependency on the bundle.
195     $entity_type = \Drupal::entityManager()->getDefinition($this->target_entity_type_id);
196     $bundle_config_dependency = $entity_type->getBundleConfigDependency($this->target_bundle);
197     $this->addDependency($bundle_config_dependency['type'], $bundle_config_dependency['name']);
198
199     return $this;
200   }
201
202 }