Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 23 |
ContextAwarePluginAssignmentTrait | |
0.00% |
0 / 1 |
|
33.33% |
1 / 3 |
110 | |
0.00% |
0 / 23 |
t | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
contextHandler | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
addContextAssignmentElement | |
0.00% |
0 / 1 |
72 | |
0.00% |
0 / 22 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Plugin\ContextAwarePluginAssignmentTrait. | |
*/ | |
namespace Drupal\Core\Plugin; | |
/** | |
* Handles context assignments for context-aware plugins. | |
*/ | |
trait ContextAwarePluginAssignmentTrait { | |
/** | |
* Ensures the t() method is available. | |
* | |
* @see \Drupal\Core\StringTranslation\StringTranslationTrait | |
*/ | |
abstract protected function t($string, array $args = array(), array $options = array()); | |
/** | |
* Wraps the context handler. | |
* | |
* @return \Drupal\Core\Plugin\Context\ContextHandlerInterface | |
*/ | |
protected function contextHandler() { | |
return \Drupal::service('context.handler'); | |
} | |
/** | |
* Builds a form element for assigning a context to a given slot. | |
* | |
* @param \Drupal\Core\Plugin\ContextAwarePluginInterface $plugin | |
* The context-aware plugin. | |
* @param \Drupal\Component\Plugin\Context\ContextInterface[] $contexts | |
* An array of contexts. | |
* | |
* @return array | |
* A form element for assigning context. | |
*/ | |
protected function addContextAssignmentElement(ContextAwarePluginInterface $plugin, array $contexts) { | |
$element = []; | |
foreach ($plugin->getContextDefinitions() as $context_slot => $definition) { | |
$valid_contexts = $this->contextHandler()->getMatchingContexts($contexts, $definition); | |
$options = []; | |
foreach ($valid_contexts as $context_id => $context) { | |
$element['#tree'] = TRUE; | |
$options[$context_id] = $context->getContextDefinition()->getLabel(); | |
$element[$context_slot] = [ | |
'#type' => 'value', | |
'#value' => $context_id, | |
]; | |
} | |
if (count($options) > 1 || !$definition->isRequired()) { | |
$assignments = $plugin->getContextMapping(); | |
$element[$context_slot] = [ | |
'#title' => $definition->getLabel() ?: $this->t('Select a @context value:', ['@context' => $context_slot]), | |
'#type' => 'select', | |
'#options' => $options, | |
'#required' => $definition->isRequired(), | |
'#default_value' => !empty($assignments[$context_slot]) ? $assignments[$context_slot] : '', | |
'#description' => $definition->getDescription(), | |
]; | |
if (!$definition->isRequired()) { | |
$element[$context_slot]['#empty_value'] = ''; | |
} | |
} | |
} | |
return $element; | |
} | |
} |