blazy-8.x-2.x-dev/src/Config/Entity/BlazyConfigEntityBase.php
src/Config/Entity/BlazyConfigEntityBase.php
<?php
namespace Drupal\blazy\Config\Entity;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Config\Entity\ConfigEntityBase;
use Drupal\blazy\Utility\Arrays;
/**
* Defines the common configuration entity.
*
* @internal
* This is an internal part of the Blazy system and should only be used by
* blazy-related code in Blazy module, or its sub-modules.
*/
abstract class BlazyConfigEntityBase extends ConfigEntityBase implements BlazyConfigEntityBaseInterface {
/**
* The legacy CTools ID for the configurable optionset.
*
* @var string
*/
protected $name;
/**
* The human-readable name for the optionset.
*
* @var string
*/
protected $label;
/**
* The weight to re-arrange the order of slick optionsets.
*
* @var int
*/
protected $weight = 0;
/**
* The plugin instance options.
*
* @var array
*/
protected $options = [];
/**
* Overrides Drupal\Core\Entity\Entity::id().
*/
public function id() {
return $this->name;
}
/**
* {@inheritdoc}
*/
public function getOptions($group = NULL, $property = NULL) {
$default = self::load('default');
$default_options = $default ? $default->options : [];
$options = Arrays::merge($this->options, $default_options);
if ($group) {
if (is_array($group)) {
return NestedArray::getValue($options, (array) $group);
}
elseif ($property && isset($options[$group])) {
return $options[$group][$property] ?? NULL;
}
return $options[$group] ?? NULL;
}
return $options;
}
/**
* {@inheritdoc}
*/
public function setOptions(array $options, $merged = TRUE): self {
$this->options = $merged ? Arrays::merge($options, $this->options) : $options;
return $this;
}
/**
* {@inheritdoc}
*/
public function getOption($group, $default = NULL) {
// Makes sure to not call ::getOptions($group), else everything is dumped.
return $this->getOptions()[$group] ?? $default;
}
/**
* {@inheritdoc}
*/
public function setOption($group, $value): self {
if ($group == 'settings') {
$value = array_merge(($this->options[$group] ?? []), $value);
}
$this->options[$group] = $value;
return $this;
}
/**
* {@inheritdoc}
*/
public function getSettings($ansich = FALSE): array {
$settings = $this->options['settings'] ?? [];
if ($ansich && $settings) {
return $settings;
}
// With the Optimized options, all defaults are cleaned out, merge em.
return $settings + self::defaultSettings();
}
/**
* {@inheritdoc}
*/
public function setSettings(array $values, $merged = TRUE): self {
$settings = $this->options['settings'] ?? [];
$this->options['settings'] = $merged
? array_merge($settings, $values)
: $values;
return $this;
}
/**
* {@inheritdoc}
*/
public function getSetting($name, $default = NULL) {
return $this->getSettings()[$name] ?? $default;
}
/**
* {@inheritdoc}
*/
public function setSetting($name, $value): self {
$this->options['settings'][$name] = $value;
return $this;
}
/**
* Returns available default options under group 'settings'.
*
* @param string $group
* The name of group: settings, responsives.
*
* @return array
* The default settings under options.
*/
public static function defaultSettings($group = 'settings'): array {
return self::load('default')->options[$group] ?? [];
}
/**
* Load the optionset with a fallback.
*
* @param string $name
* The optionset name.
*
* @return object
* The optionset object.
*/
public static function loadSafely($name) {
$optionset = self::load($name);
// Ensures deleted optionset while being used doesn't screw up.
return $optionset ?: self::load('default');
}
/**
* If optionset does not exist, load one.
*
* @param array $build
* The array containing normally settings, optionset, items, etc.
* @param string $name
* The optionset name.
*
* @return object
* The optionset object.
*/
public static function verifyOptionset(array &$build, $name) {
// The element is normally present at template_preprocess, not builders.
$key = isset($build['element']) ? 'optionset' : '#optionset';
if (empty($build[$key])) {
$build[$key] = self::loadSafely($name);
}
// Also returns it for convenient.
return $build[$key];
}
/**
* Load the optionset with a fallback.
*
* @param string $id
* The optionset name.
*
* @return object
* The optionset object.
*
* @todo deprecated in blazy:8.x-2.17 and is removed from blazy:3.0.0. Use
* self::loadSafely() instead.
* @see https://www.drupal.org/node/3103018
*/
public static function loadWithFallback($id) {
return self::loadSafely($id);
}
}
