eeb953fc97c261b3b7902585bd5279104e433122
[yaffs-website] / web / modules / contrib / bootstrap_layouts / src / Plugin / BootstrapLayouts / Ds.php
1 <?php
2
3 namespace Drupal\bootstrap_layouts\Plugin\BootstrapLayouts;
4
5 use Drupal\bootstrap_layouts\BootstrapLayout;
6 use Drupal\Core\Entity\Entity\EntityViewDisplay;
7
8 /**
9  * Handles Display Suite specific layout implementations.
10  *
11  * @BootstrapLayoutsHandler("ds")
12  */
13 class Ds extends BootstrapLayoutsHandlerBase {
14
15   /**
16    * {@inheritdoc}
17    */
18   public function loadInstances(array $entity_ids = NULL) {
19     $layouts = [];
20     /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $display */
21     foreach (EntityViewDisplay::loadMultiple($entity_ids) as $entity_id => $display) {
22       if (($info = $display->getThirdPartySettings('ds')) && isset($info['layout']['id'])) {
23         $id = $info['layout']['id'];
24         $regions = $info['regions'];
25         $settings = $info['layout']['settings'];
26         $path = isset($info['layout']['path']) ? $info['layout']['path'] : '';
27         $layouts[$entity_id] = new BootstrapLayout($id, $regions, $settings, $path);
28       }
29     }
30     return $layouts;
31   }
32
33   /**
34    * {@inheritdoc}
35    */
36   public function saveInstances(array $layouts = []) {
37     $displays = EntityViewDisplay::loadMultiple(array_keys($layouts));
38     /** @var \Drupal\bootstrap_layouts\BootstrapLayout[] $layouts */
39     foreach ($layouts as $entity_id => $layout) {
40       /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $display */
41       $display = $displays[$entity_id];
42       $info = $display->getThirdPartySettings('ds');
43       $info['layout']['id'] = $layout->getId();
44       $info['regions'] = $layout->getRegions();
45       $info['layout']['settings'] = $layout->getSettings();
46       $info['layout']['path'] = $layout->getPath();
47
48       // Unfortunately, there is no "setThirdPartySettings" method, so each
49       // property must be iterated over manually, set and then saved.
50       foreach ($info as $key => $value) {
51         $display->setThirdPartySetting('ds', $key, $value);
52       }
53       $display->save();
54     }
55   }
56
57 }