rules-8.x-3.x-dev/src/Context/EntityContextDefinition.php
src/Context/EntityContextDefinition.php
<?php
namespace Drupal\rules\Context;
use Drupal\Component\Plugin\Exception\ContextException;
use Drupal\Core\Plugin\Context\EntityContextDefinition as CoreEntityContextDefinition;
/**
* Extends the core entity context definition class with useful methods.
*
* Warning: Do not instantiate this directly in your code. This class is only
* meant to be used from \Drupal\rules\Context\ContextDefinition. Please read
* the API documentation for that class and see the links below for details.
*
* @see \Drupal\rules\Context\ContextDefinition
* @see https://www.drupal.org/project/rules/issues/3161582
* @see https://www.drupal.org/project/drupal/issues/3126747
*
* @internal
*/
class EntityContextDefinition extends CoreEntityContextDefinition implements ContextDefinitionInterface {
use RulesContextDefinitionTrait;
/**
* {@inheritdoc}
*/
public function toArray(): array {
$values = [];
$defaults = get_class_vars(__CLASS__);
// This is \Drupal\rules\Context\ContextDefinition.
foreach (static::$nameMap as $key => $property_name) {
// Only export values for non-default properties.
if ($this->$property_name !== $defaults[$property_name]) {
$values[$key] = $this->$property_name;
}
}
return $values;
}
/**
* Creates a definition object from an exported array of values.
*
* @param array $values
* The array of values, as returned by toArray().
*
* @return static
* The created definition.
*
* @throws \Drupal\Component\Plugin\Exception\ContextException
* If the required classes are not implemented.
*/
public static function createFromArray(array $values) {
if (isset($values['class']) && !in_array(ContextDefinitionInterface::class, class_implements($values['class']))) {
throw new ContextException('EntityContextDefinition class must implement ' . ContextDefinitionInterface::class . '.');
}
// Default to Rules context definition class.
$values['class'] = $values['class'] ?? EntityContextDefinition::class;
if (!isset($values['value'])) {
$values['value'] = 'any';
}
$definition = $values['class']::create($values['value']);
// This is \Drupal\rules\Context\ContextDefinition.
foreach (array_intersect_key(static::$nameMap, $values) as $key => $name) {
$definition->$name = $values[$key];
}
return $definition;
}
}
