Mercurial > hg > isophonics-drupal-site
comparison core/modules/layout_builder/src/Controller/MoveBlockController.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children | af1871eacc83 |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\layout_builder\Controller; | |
4 | |
5 use Drupal\Core\DependencyInjection\ClassResolverInterface; | |
6 use Drupal\Core\DependencyInjection\ContainerInjectionInterface; | |
7 use Drupal\layout_builder\LayoutTempstoreRepositoryInterface; | |
8 use Drupal\layout_builder\SectionStorageInterface; | |
9 use Symfony\Component\DependencyInjection\ContainerInterface; | |
10 | |
11 /** | |
12 * Defines a controller to move a block. | |
13 * | |
14 * @internal | |
15 */ | |
16 class MoveBlockController implements ContainerInjectionInterface { | |
17 | |
18 use LayoutRebuildTrait; | |
19 | |
20 /** | |
21 * The layout tempstore repository. | |
22 * | |
23 * @var \Drupal\layout_builder\LayoutTempstoreRepositoryInterface | |
24 */ | |
25 protected $layoutTempstoreRepository; | |
26 | |
27 /** | |
28 * LayoutController constructor. | |
29 * | |
30 * @param \Drupal\layout_builder\LayoutTempstoreRepositoryInterface $layout_tempstore_repository | |
31 * The layout tempstore repository. | |
32 * @param \Drupal\Core\DependencyInjection\ClassResolverInterface $class_resolver | |
33 * The class resolver. | |
34 */ | |
35 public function __construct(LayoutTempstoreRepositoryInterface $layout_tempstore_repository, ClassResolverInterface $class_resolver) { | |
36 $this->layoutTempstoreRepository = $layout_tempstore_repository; | |
37 $this->classResolver = $class_resolver; | |
38 } | |
39 | |
40 /** | |
41 * {@inheritdoc} | |
42 */ | |
43 public static function create(ContainerInterface $container) { | |
44 return new static( | |
45 $container->get('layout_builder.tempstore_repository'), | |
46 $container->get('class_resolver') | |
47 ); | |
48 } | |
49 | |
50 /** | |
51 * Moves a block to another region. | |
52 * | |
53 * @param \Drupal\layout_builder\SectionStorageInterface $section_storage | |
54 * The section storage. | |
55 * @param int $delta_from | |
56 * The delta of the original section. | |
57 * @param int $delta_to | |
58 * The delta of the destination section. | |
59 * @param string $region_to | |
60 * The new region for this block. | |
61 * @param string $block_uuid | |
62 * The UUID for this block. | |
63 * @param string|null $preceding_block_uuid | |
64 * (optional) If provided, the UUID of the block to insert this block after. | |
65 * | |
66 * @return \Drupal\Core\Ajax\AjaxResponse | |
67 * An AJAX response. | |
68 */ | |
69 public function build(SectionStorageInterface $section_storage, $delta_from, $delta_to, $region_to, $block_uuid, $preceding_block_uuid = NULL) { | |
70 $section = $section_storage->getSection($delta_from); | |
71 | |
72 $component = $section->getComponent($block_uuid); | |
73 $section->removeComponent($block_uuid); | |
74 | |
75 // If the block is moving from one section to another, update the original | |
76 // section and load the new one. | |
77 if ($delta_from !== $delta_to) { | |
78 $section = $section_storage->getSection($delta_to); | |
79 } | |
80 | |
81 // If a preceding block was specified, insert after that. Otherwise add the | |
82 // block to the front. | |
83 $component->setRegion($region_to); | |
84 if (isset($preceding_block_uuid)) { | |
85 $section->insertAfterComponent($preceding_block_uuid, $component); | |
86 } | |
87 else { | |
88 $section->insertComponent(0, $component); | |
89 } | |
90 | |
91 $this->layoutTempstoreRepository->set($section_storage); | |
92 return $this->rebuildLayout($section_storage); | |
93 } | |
94 | |
95 } |