Upgraded drupal core with security updates
[yaffs-website] / web / core / lib / Drupal / Component / Annotation / Plugin.php
1 <?php
2
3 namespace Drupal\Component\Annotation;
4
5 use Drupal\Component\Utility\NestedArray;
6
7 /**
8  * Defines a Plugin annotation object.
9  *
10  * Annotations in plugin classes can use this class in order to pass various
11  * metadata about the plugin through the parser to
12  * DiscoveryInterface::getDefinitions() calls. This allows the metadata
13  * of a class to be located with the class itself, rather than in module-based
14  * info hooks.
15  *
16  * @ingroup plugin_api
17  *
18  * @Annotation
19  */
20 class Plugin implements AnnotationInterface {
21
22   /**
23    * The plugin definition read from the class annotation.
24    *
25    * @var array
26    */
27   protected $definition;
28
29   /**
30    * Constructs a Plugin object.
31    *
32    * Builds up the plugin definition and invokes the get() method for any
33    * classed annotations that were used.
34    */
35   public function __construct($values) {
36     $reflection = new \ReflectionClass($this);
37     // Only keep actual default values by ignoring NULL values.
38     $defaults = array_filter($reflection->getDefaultProperties(), function ($value) {
39       return $value !== NULL;
40     });
41     $parsed_values = $this->parse($values);
42     $this->definition = NestedArray::mergeDeep($defaults, $parsed_values);
43   }
44
45   /**
46    * Parses an annotation into its definition.
47    *
48    * @param array $values
49    *   The annotation array.
50    *
51    * @return array
52    *   The parsed annotation as a definition.
53    */
54   protected function parse(array $values) {
55     $definitions = [];
56     foreach ($values as $key => $value) {
57       if ($value instanceof AnnotationInterface) {
58         $definitions[$key] = $value->get();
59       }
60       elseif (is_array($value)) {
61         $definitions[$key] = $this->parse($value);
62       }
63       else {
64         $definitions[$key] = $value;
65       }
66     }
67     return $definitions;
68   }
69
70   /**
71    * {@inheritdoc}
72    */
73   public function get() {
74     return $this->definition;
75   }
76
77   /**
78    * {@inheritdoc}
79    */
80   public function getProvider() {
81     return isset($this->definition['provider']) ? $this->definition['provider'] : FALSE;
82   }
83
84   /**
85    * {@inheritdoc}
86    */
87   public function setProvider($provider) {
88     $this->definition['provider'] = $provider;
89   }
90
91   /**
92    * {@inheritdoc}
93    */
94   public function getId() {
95     return $this->definition['id'];
96   }
97
98   /**
99    * {@inheritdoc}
100    */
101   public function getClass() {
102     return $this->definition['class'];
103   }
104
105   /**
106    * {@inheritdoc}
107    */
108   public function setClass($class) {
109     $this->definition['class'] = $class;
110   }
111
112 }