annotate core/modules/layout_builder/src/InlineBlockUsage.php @ 17:129ea1e6d783

Update, including to Drupal core 8.6.10
author Chris Cannam
date Thu, 28 Feb 2019 13:21:36 +0000
parents
children af1871eacc83
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@17 11 * @internal
Chris@17 12 */
Chris@17 13 class InlineBlockUsage {
Chris@17 14
Chris@17 15 /**
Chris@17 16 * The database connection.
Chris@17 17 *
Chris@17 18 * @var \Drupal\Core\Database\Connection
Chris@17 19 */
Chris@17 20 protected $database;
Chris@17 21
Chris@17 22 /**
Chris@17 23 * Creates an InlineBlockUsage object.
Chris@17 24 *
Chris@17 25 * @param \Drupal\Core\Database\Connection $database
Chris@17 26 * The database connection.
Chris@17 27 */
Chris@17 28 public function __construct(Connection $database) {
Chris@17 29 $this->database = $database;
Chris@17 30 }
Chris@17 31
Chris@17 32 /**
Chris@17 33 * Adds a usage record.
Chris@17 34 *
Chris@17 35 * @param int $block_content_id
Chris@17 36 * The block content id.
Chris@17 37 * @param \Drupal\Core\Entity\EntityInterface $entity
Chris@17 38 * The layout entity.
Chris@17 39 */
Chris@17 40 public function addUsage($block_content_id, EntityInterface $entity) {
Chris@17 41 $this->database->merge('inline_block_usage')
Chris@17 42 ->keys([
Chris@17 43 'block_content_id' => $block_content_id,
Chris@17 44 'layout_entity_id' => $entity->id(),
Chris@17 45 'layout_entity_type' => $entity->getEntityTypeId(),
Chris@17 46 ])->execute();
Chris@17 47 }
Chris@17 48
Chris@17 49 /**
Chris@17 50 * Gets unused inline block IDs.
Chris@17 51 *
Chris@17 52 * @param int $limit
Chris@17 53 * The maximum number of block content entity IDs to return.
Chris@17 54 *
Chris@17 55 * @return int[]
Chris@17 56 * The entity IDs.
Chris@17 57 */
Chris@17 58 public function getUnused($limit = 100) {
Chris@17 59 $query = $this->database->select('inline_block_usage', 't');
Chris@17 60 $query->fields('t', ['block_content_id']);
Chris@17 61 $query->isNull('layout_entity_id');
Chris@17 62 $query->isNull('layout_entity_type');
Chris@17 63 return $query->range(0, $limit)->execute()->fetchCol();
Chris@17 64 }
Chris@17 65
Chris@17 66 /**
Chris@17 67 * Remove usage record by layout entity.
Chris@17 68 *
Chris@17 69 * @param \Drupal\Core\Entity\EntityInterface $entity
Chris@17 70 * The layout entity.
Chris@17 71 */
Chris@17 72 public function removeByLayoutEntity(EntityInterface $entity) {
Chris@17 73 $query = $this->database->update('inline_block_usage')
Chris@17 74 ->fields([
Chris@17 75 'layout_entity_type' => NULL,
Chris@17 76 'layout_entity_id' => NULL,
Chris@17 77 ]);
Chris@17 78 $query->condition('layout_entity_type', $entity->getEntityTypeId());
Chris@17 79 $query->condition('layout_entity_id', $entity->id());
Chris@17 80 $query->execute();
Chris@17 81 }
Chris@17 82
Chris@17 83 /**
Chris@17 84 * Delete the inline blocks' the usage records.
Chris@17 85 *
Chris@17 86 * @param int[] $block_content_ids
Chris@17 87 * The block content entity IDs.
Chris@17 88 */
Chris@17 89 public function deleteUsage(array $block_content_ids) {
Chris@17 90 if (!empty($block_content_ids)) {
Chris@17 91 $query = $this->database->delete('inline_block_usage')->condition('block_content_id', $block_content_ids, 'IN');
Chris@17 92 $query->execute();
Chris@17 93 }
Chris@17 94 }
Chris@17 95
Chris@17 96 /**
Chris@17 97 * Gets usage record for inline block by ID.
Chris@17 98 *
Chris@17 99 * @param int $block_content_id
Chris@17 100 * The block content entity ID.
Chris@17 101 *
Chris@17 102 * @return object
Chris@17 103 * The usage record with properties layout_entity_id and layout_entity_type.
Chris@17 104 */
Chris@17 105 public function getUsage($block_content_id) {
Chris@17 106 $query = $this->database->select('inline_block_usage');
Chris@17 107 $query->condition('block_content_id', $block_content_id);
Chris@17 108 $query->fields('inline_block_usage', ['layout_entity_id', 'layout_entity_type']);
Chris@17 109 $query->range(0, 1);
Chris@17 110 return $query->execute()->fetchObject();
Chris@17 111 }
Chris@17 112
Chris@17 113 }