annotate core/modules/layout_builder/src/InlineBlockUsage.php @ 5:12f9dff5fda9 tip

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