@@ 10-118 (lines=109) @@ | ||
7 | use Drupal\Core\Extension\ModuleHandlerInterface; |
|
8 | use Drupal\Core\Plugin\DefaultPluginManager; |
|
9 | ||
10 | class FieldPluginManager extends DefaultPluginManager { |
|
11 | ||
12 | /** |
|
13 | * Static cache of plugin instances. |
|
14 | * |
|
15 | * @var \Drupal\graphql\Plugin\FieldPluginInterface[] |
|
16 | */ |
|
17 | protected $instances; |
|
18 | ||
19 | /** |
|
20 | * FieldPluginManager constructor. |
|
21 | * |
|
22 | * @param bool|string $pluginSubdirectory |
|
23 | * The plugin's subdirectory. |
|
24 | * @param \Traversable $namespaces |
|
25 | * An object that implements \Traversable which contains the root paths |
|
26 | * keyed by the corresponding namespace to look for plugin implementations. |
|
27 | * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler |
|
28 | * The module handler. |
|
29 | * @param \Drupal\Core\Cache\CacheBackendInterface $cacheBackend |
|
30 | * The cache backend. |
|
31 | * @param string|null $pluginInterface |
|
32 | * The interface each plugin should implement. |
|
33 | * @param string $pluginAnnotationName |
|
34 | * The name of the annotation that contains the plugin definition. |
|
35 | */ |
|
36 | public function __construct( |
|
37 | $pluginSubdirectory, |
|
38 | \Traversable $namespaces, |
|
39 | ModuleHandlerInterface $moduleHandler, |
|
40 | CacheBackendInterface $cacheBackend, |
|
41 | $pluginInterface, |
|
42 | $pluginAnnotationName, |
|
43 | array $config |
|
44 | ) { |
|
45 | parent::__construct( |
|
46 | $pluginSubdirectory, |
|
47 | $namespaces, |
|
48 | $moduleHandler, |
|
49 | $pluginInterface, |
|
50 | $pluginAnnotationName |
|
51 | ); |
|
52 | ||
53 | $this->alterInfo('graphql_fields'); |
|
54 | $this->useCaches(empty($config['development'])); |
|
55 | $this->setCacheBackend($cacheBackend, 'fields', ['graphql', 'graphql:fields']); |
|
56 | } |
|
57 | ||
58 | /** |
|
59 | * {@inheritdoc} |
|
60 | */ |
|
61 | public function getInstance(array $options) { |
|
62 | if (!isset($this->instances[$options['id']])) { |
|
63 | $this->instances[$options['id']] = $this->createInstance($options['id']); |
|
64 | } |
|
65 | ||
66 | return $this->instances[$options['id']]; |
|
67 | } |
|
68 | ||
69 | /** |
|
70 | * {@inheritdoc} |
|
71 | */ |
|
72 | public function clearCachedDefinitions() { |
|
73 | parent::clearCachedDefinitions(); |
|
74 | $this->instances = []; |
|
75 | } |
|
76 | ||
77 | /** |
|
78 | * {@inheritdoc} |
|
79 | */ |
|
80 | protected function setCachedDefinitions($definitions) { |
|
81 | $this->definitions = $definitions; |
|
82 | $this->cacheSet($this->cacheKey, $definitions, $this->getCacheMaxAge(), $this->getCacheTags()); |
|
83 | } |
|
84 | ||
85 | /** |
|
86 | * {@inheritdoc} |
|
87 | */ |
|
88 | public function getCacheTags() { |
|
89 | $definitions = $this->getDefinitions(); |
|
90 | return array_reduce($definitions, function ($carry, $current) { |
|
91 | if (!empty($current['schema_cache_tags'])) { |
|
92 | return Cache::mergeTags($carry, $current['schema_cache_tags']); |
|
93 | } |
|
94 | ||
95 | return $carry; |
|
96 | }, $this->cacheTags); |
|
97 | } |
|
98 | ||
99 | /** |
|
100 | * {@inheritdoc} |
|
101 | */ |
|
102 | public function getCacheMaxAge() { |
|
103 | $definitions = $this->getDefinitions(); |
|
104 | $age = Cache::PERMANENT; |
|
105 | foreach ($definitions as $definition) { |
|
106 | if (!isset($definition['schema_cache_max_age'])) { |
|
107 | continue; |
|
108 | } |
|
109 | ||
110 | // Bail out early if the cache max age is 0. |
|
111 | if (($age = Cache::mergeMaxAges($age, $definition['schema_cache_max_age'])) === 0) { |
|
112 | return $age; |
|
113 | } |
|
114 | } |
|
115 | ||
116 | return $age; |
|
117 | } |
|
118 | } |
|
119 |
@@ 11-119 (lines=109) @@ | ||
8 | use Drupal\Core\Extension\ModuleHandlerInterface; |
|
9 | use Drupal\Core\Plugin\DefaultPluginManager; |
|
10 | ||
11 | class MutationPluginManager extends DefaultPluginManager { |
|
12 | ||
13 | /** |
|
14 | * Static cache of plugin instances. |
|
15 | * |
|
16 | * @var \Drupal\graphql\Plugin\MutationPluginInterface[] |
|
17 | */ |
|
18 | protected $instances; |
|
19 | ||
20 | /** |
|
21 | * FieldPluginManager constructor. |
|
22 | * |
|
23 | * @param bool|string $pluginSubdirectory |
|
24 | * The plugin's subdirectory. |
|
25 | * @param \Traversable $namespaces |
|
26 | * An object that implements \Traversable which contains the root paths |
|
27 | * keyed by the corresponding namespace to look for plugin implementations. |
|
28 | * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler |
|
29 | * The module handler. |
|
30 | * @param \Drupal\Core\Cache\CacheBackendInterface $cacheBackend |
|
31 | * The cache backend. |
|
32 | * @param string|null $pluginInterface |
|
33 | * The interface each plugin should implement. |
|
34 | * @param string $pluginAnnotationName |
|
35 | * The name of the annotation that contains the plugin definition. |
|
36 | */ |
|
37 | public function __construct( |
|
38 | $pluginSubdirectory, |
|
39 | \Traversable $namespaces, |
|
40 | ModuleHandlerInterface $moduleHandler, |
|
41 | CacheBackendInterface $cacheBackend, |
|
42 | $pluginInterface, |
|
43 | $pluginAnnotationName, |
|
44 | array $config |
|
45 | ) { |
|
46 | parent::__construct( |
|
47 | $pluginSubdirectory, |
|
48 | $namespaces, |
|
49 | $moduleHandler, |
|
50 | $pluginInterface, |
|
51 | $pluginAnnotationName |
|
52 | ); |
|
53 | ||
54 | $this->alterInfo('graphql_mutations'); |
|
55 | $this->useCaches(empty($config['development'])); |
|
56 | $this->setCacheBackend($cacheBackend, 'mutations', ['graphql', 'graphql:mutations']); |
|
57 | } |
|
58 | ||
59 | /** |
|
60 | * {@inheritdoc} |
|
61 | */ |
|
62 | public function getInstance(array $options) { |
|
63 | if (!isset($this->instances[$options['id']])) { |
|
64 | $this->instances[$options['id']] = $this->createInstance($options['id']); |
|
65 | } |
|
66 | ||
67 | return $this->instances[$options['id']]; |
|
68 | } |
|
69 | ||
70 | /** |
|
71 | * {@inheritdoc} |
|
72 | */ |
|
73 | public function clearCachedDefinitions() { |
|
74 | parent::clearCachedDefinitions(); |
|
75 | $this->instances = []; |
|
76 | } |
|
77 | ||
78 | /** |
|
79 | * {@inheritdoc} |
|
80 | */ |
|
81 | protected function setCachedDefinitions($definitions) { |
|
82 | $this->definitions = $definitions; |
|
83 | $this->cacheSet($this->cacheKey, $definitions, $this->getCacheMaxAge(), $this->getCacheTags()); |
|
84 | } |
|
85 | ||
86 | /** |
|
87 | * {@inheritdoc} |
|
88 | */ |
|
89 | public function getCacheTags() { |
|
90 | $definitions = $this->getDefinitions(); |
|
91 | return array_reduce($definitions, function ($carry, $current) { |
|
92 | if (!empty($current['schema_cache_tags'])) { |
|
93 | return Cache::mergeTags($carry, $current['schema_cache_tags']); |
|
94 | } |
|
95 | ||
96 | return $carry; |
|
97 | }, $this->cacheTags); |
|
98 | } |
|
99 | ||
100 | /** |
|
101 | * {@inheritdoc} |
|
102 | */ |
|
103 | public function getCacheMaxAge() { |
|
104 | $definitions = $this->getDefinitions(); |
|
105 | $age = Cache::PERMANENT; |
|
106 | foreach ($definitions as $definition) { |
|
107 | if (!isset($definition['schema_cache_max_age'])) { |
|
108 | continue; |
|
109 | } |
|
110 | ||
111 | // Bail out early if the cache max age is 0. |
|
112 | if (($age = Cache::mergeMaxAges($age, $definition['schema_cache_max_age'])) === 0) { |
|
113 | return $age; |
|
114 | } |
|
115 | } |
|
116 | ||
117 | return $age; |
|
118 | } |
|
119 | } |
|
120 |