annotate core/modules/layout_builder/src/InlineBlockUsage.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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 }