features-8.x-3.11/src/Entity/FeaturesBundle.php
src/Entity/FeaturesBundle.php
<?php namespace Drupal\features\Entity; use Drupal\Core\Config\Entity\ConfigEntityBase; use Drupal\features\FeaturesBundleInterface; use Drupal\Core\Site\Settings; /** * Defines a features bundle. * * @todo Better description * * @ConfigEntityType( * id = "features_bundle", * label = @Translation("Features bundle"), * handlers = { * }, * admin_permission = "administer site configuration", * config_prefix = "bundle", * entity_keys = { * "id" = "machine_name", * "label" = "name" * }, * links = { * }, * config_export = { * "name", * "machine_name", * "description", * "assignments", * "profile_name", * "is_profile", * } * ) */ class FeaturesBundle extends ConfigEntityBase implements FeaturesBundleInterface { /** * The variable. * * @var string */ protected $name; /** * The variable. * * @var */ protected $machine_name; /** * The variable. * * @var string */ protected $description; /** * The variable. * * @var string[] */ protected $assignments = []; /** * The variable. * * @var string */ protected $profile_name; /** * The variable. * * @var bool */ protected $is_profile = FALSE; /** * {@inheritDoc} */ public function id() { // @todo Convert it to $this->id in the long run. return $this->getMachineName(); } /** * {@inheritdoc} */ public function isDefault() { return $this->machine_name == static::DEFAULT_BUNDLE; } /** * {@inheritdoc} */ public function getMachineName() { return $this->machine_name; } /** * {@inheritdoc} */ public function setMachineName($machine_name) { $this->machine_name = $machine_name; } /** * {@inheritdoc} */ public function getName() { return $this->name; } /** * {@inheritdoc} */ public function setName($name) { $this->name = $name; } /** * {@inheritdoc} */ public function getFullName($short_name) { if ($this->isDefault() || // If it's already prefixed, don't repeat the prefix. $this->inBundle($short_name) || // If we are a profile, don't duplicate the bundle if same as profile. $this->isProfilePackage($short_name)) { return $short_name; } else { return $this->machine_name . '_' . $short_name; } } /** * {@inheritdoc} */ public function getShortName($machine_name) { if (!$this->isProfilePackage($machine_name) && $this->inBundle($machine_name)) { return substr($machine_name, strlen($this->getMachineName()) + 1, strlen($machine_name) - strlen($this->getMachineName()) - 1); } return $machine_name; } /** * {@inheritdoc} */ public function inBundle($machine_name) { return ($this->isProfilePackage($machine_name) || strpos($machine_name, $this->machine_name . '_') === 0); } /** * {@inheritdoc} */ public function isProfilePackage($machine_name) { return ($this->isProfile() && $machine_name == $this->getProfileName()); } /** * {@inheritdoc} */ public function getDescription() { return $this->description; } /** * {@inheritdoc} */ public function setDescription($description) { $this->description = $description; } /** * {@inheritdoc} */ public function isProfile() { return $this->is_profile; } /** * {@inheritdoc} */ public function setIsProfile($value) { $this->is_profile = $value; } /** * {@inheritdoc} */ public function getProfileName() { $name = $this->isProfile() ? $this->profile_name : ''; // Use Settings::get to fetch current profile name so we can easily test. return !empty($name) ? $name : Settings::get('install_profile'); } /** * {@inheritdoc} */ public function setProfileName($machine_name) { $this->profile_name = $machine_name; } /** * {@inheritdoc} */ public function getEnabledAssignments() { $list = []; foreach ($this->assignments as $method_id => $method) { if ($method['enabled']) { $list[$method_id] = $method_id; } } return $list; } /** * {@inheritdoc} */ public function setEnabledAssignments(array $assignments) { // Add any new assignments that we don't yet know about. $new_assignments = array_diff($assignments, array_keys($this->assignments)); foreach ($new_assignments as $method_id) { $this->assignments[$method_id] = $this->getAssignmentSettings($method_id); } foreach ($this->assignments as $method_id => &$method) { $method['enabled'] = in_array($method_id, $assignments); } } /** * {@inheritdoc} */ public function getAssignmentWeights() { $list = []; foreach ($this->assignments as $method_id => $method) { $list[$method_id] = $method['weight']; } return $list; } /** * {@inheritdoc} */ public function setAssignmentWeights(array $assignments) { foreach ($this->assignments as $method_id => &$method) { if (isset($assignments[$method_id])) { $method['weight'] = $assignments[$method_id]; } } } /** * Return array of default settings for the given plugin method. * * @param $method_id * * @return array */ protected function getDefaultSettings($method_id) { $settings = ['enabled' => FALSE, 'weight' => 0]; $manager = \Drupal::service('plugin.manager.features_assignment_method'); $definition = $manager->getDefinition($method_id); if (isset($definition['weight'])) { $settings['weight'] = $definition['weight']; } if (isset($definition['default_settings'])) { $settings += $definition['default_settings']; } return $settings; } /** * {@inheritdoc} */ public function getAssignmentSettings($method_id = NULL) { if (isset($method_id)) { if (isset($this->assignments[$method_id])) { return $this->assignments[$method_id]; } else { // Use defaults. return $this->getDefaultSettings($method_id); } } else { $list = []; foreach (array_keys($this->assignments) as $method_id) { $list[$method_id] = $this->getAssignmentSettings($method_id); } return $list; } } /** * {@inheritdoc} */ public function setAssignmentSettings($method_id, array $settings) { if (isset($method_id)) { $this->assignments[$method_id] = $settings; } else { foreach ($settings as $method_id => $method_settings) { if (!empty($method_settings)) { $this->setAssignmentSettings($method_id, $method_settings); } } } return $this; } /** * {@inheritdoc} */ public function remove() { $this->delete(); } }