Chris@17
|
1 <?php
|
Chris@17
|
2
|
Chris@17
|
3 namespace Drupal\layout_builder;
|
Chris@17
|
4
|
Chris@17
|
5 use Drupal\Core\Database\Connection;
|
Chris@17
|
6 use Drupal\Core\Entity\EntityInterface;
|
Chris@17
|
7
|
Chris@17
|
8 /**
|
Chris@17
|
9 * Service class to track inline block usage.
|
Chris@17
|
10 */
|
Chris@18
|
11 class InlineBlockUsage implements InlineBlockUsageInterface {
|
Chris@17
|
12
|
Chris@17
|
13 /**
|
Chris@17
|
14 * The database connection.
|
Chris@17
|
15 *
|
Chris@17
|
16 * @var \Drupal\Core\Database\Connection
|
Chris@17
|
17 */
|
Chris@17
|
18 protected $database;
|
Chris@17
|
19
|
Chris@17
|
20 /**
|
Chris@17
|
21 * Creates an InlineBlockUsage object.
|
Chris@17
|
22 *
|
Chris@17
|
23 * @param \Drupal\Core\Database\Connection $database
|
Chris@17
|
24 * The database connection.
|
Chris@17
|
25 */
|
Chris@17
|
26 public function __construct(Connection $database) {
|
Chris@17
|
27 $this->database = $database;
|
Chris@17
|
28 }
|
Chris@17
|
29
|
Chris@17
|
30 /**
|
Chris@18
|
31 * {@inheritdoc}
|
Chris@17
|
32 */
|
Chris@17
|
33 public function addUsage($block_content_id, EntityInterface $entity) {
|
Chris@17
|
34 $this->database->merge('inline_block_usage')
|
Chris@17
|
35 ->keys([
|
Chris@17
|
36 'block_content_id' => $block_content_id,
|
Chris@17
|
37 'layout_entity_id' => $entity->id(),
|
Chris@17
|
38 'layout_entity_type' => $entity->getEntityTypeId(),
|
Chris@17
|
39 ])->execute();
|
Chris@17
|
40 }
|
Chris@17
|
41
|
Chris@17
|
42 /**
|
Chris@18
|
43 * {@inheritdoc}
|
Chris@17
|
44 */
|
Chris@17
|
45 public function getUnused($limit = 100) {
|
Chris@17
|
46 $query = $this->database->select('inline_block_usage', 't');
|
Chris@17
|
47 $query->fields('t', ['block_content_id']);
|
Chris@17
|
48 $query->isNull('layout_entity_id');
|
Chris@17
|
49 $query->isNull('layout_entity_type');
|
Chris@17
|
50 return $query->range(0, $limit)->execute()->fetchCol();
|
Chris@17
|
51 }
|
Chris@17
|
52
|
Chris@17
|
53 /**
|
Chris@18
|
54 * {@inheritdoc}
|
Chris@17
|
55 */
|
Chris@17
|
56 public function removeByLayoutEntity(EntityInterface $entity) {
|
Chris@17
|
57 $query = $this->database->update('inline_block_usage')
|
Chris@17
|
58 ->fields([
|
Chris@17
|
59 'layout_entity_type' => NULL,
|
Chris@17
|
60 'layout_entity_id' => NULL,
|
Chris@17
|
61 ]);
|
Chris@17
|
62 $query->condition('layout_entity_type', $entity->getEntityTypeId());
|
Chris@17
|
63 $query->condition('layout_entity_id', $entity->id());
|
Chris@17
|
64 $query->execute();
|
Chris@17
|
65 }
|
Chris@17
|
66
|
Chris@17
|
67 /**
|
Chris@18
|
68 * {@inheritdoc}
|
Chris@17
|
69 */
|
Chris@17
|
70 public function deleteUsage(array $block_content_ids) {
|
Chris@17
|
71 if (!empty($block_content_ids)) {
|
Chris@17
|
72 $query = $this->database->delete('inline_block_usage')->condition('block_content_id', $block_content_ids, 'IN');
|
Chris@17
|
73 $query->execute();
|
Chris@17
|
74 }
|
Chris@17
|
75 }
|
Chris@17
|
76
|
Chris@17
|
77 /**
|
Chris@18
|
78 * {@inheritdoc}
|
Chris@17
|
79 */
|
Chris@17
|
80 public function getUsage($block_content_id) {
|
Chris@17
|
81 $query = $this->database->select('inline_block_usage');
|
Chris@17
|
82 $query->condition('block_content_id', $block_content_id);
|
Chris@17
|
83 $query->fields('inline_block_usage', ['layout_entity_id', 'layout_entity_type']);
|
Chris@17
|
84 $query->range(0, 1);
|
Chris@17
|
85 return $query->execute()->fetchObject();
|
Chris@17
|
86 }
|
Chris@17
|
87
|
Chris@17
|
88 }
|