Mercurial > hg > isophonics-drupal-site
comparison core/lib/Drupal/Core/Plugin/ContextAwarePluginAssignmentTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Core\Plugin; | |
4 | |
5 /** | |
6 * Handles context assignments for context-aware plugins. | |
7 */ | |
8 trait ContextAwarePluginAssignmentTrait { | |
9 | |
10 /** | |
11 * Ensures the t() method is available. | |
12 * | |
13 * @see \Drupal\Core\StringTranslation\StringTranslationTrait | |
14 */ | |
15 abstract protected function t($string, array $args = [], array $options = []); | |
16 | |
17 /** | |
18 * Wraps the context handler. | |
19 * | |
20 * @return \Drupal\Core\Plugin\Context\ContextHandlerInterface | |
21 */ | |
22 protected function contextHandler() { | |
23 return \Drupal::service('context.handler'); | |
24 } | |
25 | |
26 /** | |
27 * Builds a form element for assigning a context to a given slot. | |
28 * | |
29 * @param \Drupal\Core\Plugin\ContextAwarePluginInterface $plugin | |
30 * The context-aware plugin. | |
31 * @param \Drupal\Component\Plugin\Context\ContextInterface[] $contexts | |
32 * An array of contexts. | |
33 * | |
34 * @return array | |
35 * A form element for assigning context. | |
36 */ | |
37 protected function addContextAssignmentElement(ContextAwarePluginInterface $plugin, array $contexts) { | |
38 $element = []; | |
39 foreach ($plugin->getContextDefinitions() as $context_slot => $definition) { | |
40 $valid_contexts = $this->contextHandler()->getMatchingContexts($contexts, $definition); | |
41 $options = []; | |
42 foreach ($valid_contexts as $context_id => $context) { | |
43 $element['#tree'] = TRUE; | |
44 $options[$context_id] = $context->getContextDefinition()->getLabel(); | |
45 $element[$context_slot] = [ | |
46 '#type' => 'value', | |
47 '#value' => $context_id, | |
48 ]; | |
49 } | |
50 | |
51 if (count($options) > 1 || !$definition->isRequired()) { | |
52 $assignments = $plugin->getContextMapping(); | |
53 $element[$context_slot] = [ | |
54 '#title' => $definition->getLabel() ?: $this->t('Select a @context value:', ['@context' => $context_slot]), | |
55 '#type' => 'select', | |
56 '#options' => $options, | |
57 '#required' => $definition->isRequired(), | |
58 '#default_value' => !empty($assignments[$context_slot]) ? $assignments[$context_slot] : '', | |
59 '#description' => $definition->getDescription(), | |
60 ]; | |
61 if (!$definition->isRequired()) { | |
62 $element[$context_slot]['#empty_value'] = ''; | |
63 } | |
64 } | |
65 } | |
66 return $element; | |
67 } | |
68 | |
69 } |