Chris@17: database = $database; Chris@17: } Chris@17: Chris@17: /** Chris@17: * Adds a usage record. Chris@17: * Chris@17: * @param int $block_content_id Chris@17: * The block content id. Chris@17: * @param \Drupal\Core\Entity\EntityInterface $entity Chris@17: * The layout entity. Chris@17: */ Chris@17: public function addUsage($block_content_id, EntityInterface $entity) { Chris@17: $this->database->merge('inline_block_usage') Chris@17: ->keys([ Chris@17: 'block_content_id' => $block_content_id, Chris@17: 'layout_entity_id' => $entity->id(), Chris@17: 'layout_entity_type' => $entity->getEntityTypeId(), Chris@17: ])->execute(); Chris@17: } Chris@17: Chris@17: /** Chris@17: * Gets unused inline block IDs. Chris@17: * Chris@17: * @param int $limit Chris@17: * The maximum number of block content entity IDs to return. Chris@17: * Chris@17: * @return int[] Chris@17: * The entity IDs. Chris@17: */ Chris@17: public function getUnused($limit = 100) { Chris@17: $query = $this->database->select('inline_block_usage', 't'); Chris@17: $query->fields('t', ['block_content_id']); Chris@17: $query->isNull('layout_entity_id'); Chris@17: $query->isNull('layout_entity_type'); Chris@17: return $query->range(0, $limit)->execute()->fetchCol(); Chris@17: } Chris@17: Chris@17: /** Chris@17: * Remove usage record by layout entity. Chris@17: * Chris@17: * @param \Drupal\Core\Entity\EntityInterface $entity Chris@17: * The layout entity. Chris@17: */ Chris@17: public function removeByLayoutEntity(EntityInterface $entity) { Chris@17: $query = $this->database->update('inline_block_usage') Chris@17: ->fields([ Chris@17: 'layout_entity_type' => NULL, Chris@17: 'layout_entity_id' => NULL, Chris@17: ]); Chris@17: $query->condition('layout_entity_type', $entity->getEntityTypeId()); Chris@17: $query->condition('layout_entity_id', $entity->id()); Chris@17: $query->execute(); Chris@17: } Chris@17: Chris@17: /** Chris@17: * Delete the inline blocks' the usage records. Chris@17: * Chris@17: * @param int[] $block_content_ids Chris@17: * The block content entity IDs. Chris@17: */ Chris@17: public function deleteUsage(array $block_content_ids) { Chris@17: if (!empty($block_content_ids)) { Chris@17: $query = $this->database->delete('inline_block_usage')->condition('block_content_id', $block_content_ids, 'IN'); Chris@17: $query->execute(); Chris@17: } Chris@17: } Chris@17: Chris@17: /** Chris@17: * Gets usage record for inline block by ID. Chris@17: * Chris@17: * @param int $block_content_id Chris@17: * The block content entity ID. Chris@17: * Chris@17: * @return object Chris@17: * The usage record with properties layout_entity_id and layout_entity_type. Chris@17: */ Chris@17: public function getUsage($block_content_id) { Chris@17: $query = $this->database->select('inline_block_usage'); Chris@17: $query->condition('block_content_id', $block_content_id); Chris@17: $query->fields('inline_block_usage', ['layout_entity_id', 'layout_entity_type']); Chris@17: $query->range(0, 1); Chris@17: return $query->execute()->fetchObject(); Chris@17: } Chris@17: Chris@17: }