Mercurial > hg > cmmr2012-drupal-site
comparison core/modules/views/src/DisplayPluginCollection.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children | a9cd425dd02b |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:c75dbcec494b |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\views; | |
4 | |
5 use Drupal\Component\Plugin\Exception\PluginException; | |
6 use Drupal\Component\Plugin\PluginManagerInterface; | |
7 use Drupal\Core\Plugin\DefaultLazyPluginCollection; | |
8 | |
9 /** | |
10 * A class which wraps the displays of a view so you can lazy-initialize them. | |
11 */ | |
12 class DisplayPluginCollection extends DefaultLazyPluginCollection { | |
13 | |
14 /** | |
15 * Stores a reference to the view which has this displays attached. | |
16 * | |
17 * @var \Drupal\views\ViewExecutable | |
18 */ | |
19 protected $view; | |
20 | |
21 /** | |
22 * {@inheritdoc} | |
23 */ | |
24 protected $pluginKey = 'display_plugin'; | |
25 | |
26 /** | |
27 * Constructs a DisplayPluginCollection object. | |
28 * | |
29 * @param \Drupal\views\ViewExecutable $view | |
30 * The view which has this displays attached. | |
31 * @param \Drupal\Component\Plugin\PluginManagerInterface $manager | |
32 * The manager to be used for instantiating plugins. | |
33 */ | |
34 public function __construct(ViewExecutable $view, PluginManagerInterface $manager) { | |
35 parent::__construct($manager, $view->storage->get('display')); | |
36 | |
37 $this->view = $view; | |
38 $this->initializePlugin('default'); | |
39 } | |
40 | |
41 /** | |
42 * Destructs a DisplayPluginCollection object. | |
43 */ | |
44 public function __destruct() { | |
45 $this->clear(); | |
46 } | |
47 | |
48 /** | |
49 * {@inheritdoc} | |
50 * | |
51 * @return \Drupal\views\Plugin\views\display\DisplayPluginBase | |
52 */ | |
53 public function &get($instance_id) { | |
54 return parent::get($instance_id); | |
55 } | |
56 | |
57 /** | |
58 * {@inheritdoc} | |
59 */ | |
60 public function clear() { | |
61 foreach (array_filter($this->pluginInstances) as $display) { | |
62 $display->destroy(); | |
63 } | |
64 | |
65 parent::clear(); | |
66 } | |
67 | |
68 /** | |
69 * {@inheritdoc} | |
70 */ | |
71 protected function initializePlugin($display_id) { | |
72 // Retrieve and initialize the new display handler with data. | |
73 $display = &$this->view->storage->getDisplay($display_id); | |
74 | |
75 try { | |
76 $this->configurations[$display_id] = $display; | |
77 parent::initializePlugin($display_id); | |
78 } | |
79 // Catch any plugin exceptions that are thrown. So we can fail nicely if a | |
80 // display plugin isn't found. | |
81 catch (PluginException $e) { | |
82 $message = $e->getMessage(); | |
83 drupal_set_message(t('@message', ['@message' => $message]), 'warning'); | |
84 } | |
85 | |
86 // If no plugin instance has been created, return NULL. | |
87 if (empty($this->pluginInstances[$display_id])) { | |
88 return NULL; | |
89 } | |
90 | |
91 $this->pluginInstances[$display_id]->initDisplay($this->view, $display); | |
92 // If this is not the default display handler, let it know which is since | |
93 // it may well use some data from the default. | |
94 if ($display_id != 'default') { | |
95 $this->pluginInstances[$display_id]->default_display = $this->pluginInstances['default']; | |
96 } | |
97 } | |
98 | |
99 /** | |
100 * {@inheritdoc} | |
101 */ | |
102 public function remove($instance_id) { | |
103 $this->get($instance_id)->remove(); | |
104 | |
105 parent::remove($instance_id); | |
106 } | |
107 | |
108 } |