Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 21 |
ContextDefinition | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 21 |
__construct | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 19 |
|||
get | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Annotation\ContextDefinition. | |
*/ | |
namespace Drupal\Core\Annotation; | |
use Drupal\Component\Annotation\Plugin; | |
use Drupal\Core\StringTranslation\TranslatableMarkup; | |
/** | |
* @defgroup plugin_context Annotation for context definition | |
* @{ | |
* Describes how to use ContextDefinition annotation. | |
* | |
* When providing plugin annotations, contexts can be defined to support UI | |
* interactions through providing limits, and mapping contexts to appropriate | |
* plugins. Context definitions can be provided as such: | |
* @code | |
* context = { | |
* "node" = @ContextDefinition("entity:node") | |
* } | |
* @endcode | |
* Remove spaces after @ in your actual plugin - these are put into this sample | |
* code so that it is not recognized as an annotation. | |
* | |
* To add a label to a context definition use the "label" key: | |
* @code | |
* context = { | |
* "node" = @ContextDefinition("entity:node", label = @Translation("Node")) | |
* } | |
* @endcode | |
* | |
* Contexts are required unless otherwise specified. To make an optional | |
* context use the "required" key: | |
* @code | |
* context = { | |
* "node" = @ContextDefinition("entity:node", required = FALSE, label = @Translation("Node")) | |
* } | |
* @endcode | |
* | |
* To define multiple contexts, simply provide different key names in the | |
* context array: | |
* @code | |
* context = { | |
* "artist" = @ContextDefinition("entity:node", label = @Translation("Artist")), | |
* "album" = @ContextDefinition("entity:node", label = @Translation("Album")) | |
* } | |
* @endcode | |
* | |
* Specifying a default value for the context definition: | |
* @code | |
* context = { | |
* "message" = @ContextDefinition("string", | |
* label = @Translation("Message"), | |
* default_value = @Translation("Checkout complete! Thank you for your purchase.") | |
* ) | |
* } | |
* @endcode | |
* | |
* @see annotation | |
* | |
* @} | |
*/ | |
/** | |
* Defines a context definition annotation object. | |
* | |
* Some plugins require various data contexts in order to function. This class | |
* supports that need by allowing the contexts to be easily defined within an | |
* annotation and return a ContextDefinitionInterface implementing class. | |
* | |
* @Annotation | |
* | |
* @ingroup plugin_context | |
*/ | |
class ContextDefinition extends Plugin { | |
/** | |
* The ContextDefinitionInterface object. | |
* | |
* @var \Drupal\Core\Plugin\Context\ContextDefinitionInterface | |
*/ | |
protected $definition; | |
/** | |
* Constructs a new context definition object. | |
* | |
* @param array $values | |
* An associative array with the following keys: | |
* - value: The required data type. | |
* - label: (optional) The UI label of this context definition. | |
* - required: (optional) Whether the context definition is required. | |
* - multiple: (optional) Whether the context definition is multivalue. | |
* - description: (optional) The UI description of this context definition. | |
* - default_value: (optional) The default value in case the underlying | |
* value is not set. | |
* - class: (optional) A custom ContextDefinitionInterface class. | |
* | |
* @throws \Exception | |
* Thrown when the class key is specified with a non | |
* ContextDefinitionInterface implementing class. | |
*/ | |
public function __construct(array $values) { | |
$values += array( | |
'required' => TRUE, | |
'multiple' => FALSE, | |
'default_value' => NULL, | |
); | |
// Annotation classes extract data from passed annotation classes directly | |
// used in the classes they pass to. | |
foreach (['label', 'description'] as $key) { | |
// @todo Remove this workaround in https://www.drupal.org/node/2362727. | |
if (isset($values[$key]) && $values[$key] instanceof TranslatableMarkup) { | |
$values[$key] = (string) $values[$key]->get(); | |
} | |
else { | |
$values[$key] = NULL; | |
} | |
} | |
if (isset($values['class']) && !in_array('Drupal\Core\Plugin\Context\ContextDefinitionInterface', class_implements($values['class']))) { | |
throw new \Exception('ContextDefinition class must implement \Drupal\Core\Plugin\Context\ContextDefinitionInterface.'); | |
} | |
$class = isset($values['class']) ? $values['class'] : 'Drupal\Core\Plugin\Context\ContextDefinition'; | |
$this->definition = new $class($values['value'], $values['label'], $values['required'], $values['multiple'], $values['description'], $values['default_value']); | |
} | |
/** | |
* Returns the value of an annotation. | |
* | |
* @return \Drupal\Core\Plugin\Context\ContextDefinitionInterface | |
*/ | |
public function get() { | |
return $this->definition; | |
} | |
} |