diff --git a/core/modules/editor/editor.install b/core/modules/editor/editor.install index a07bd80..8596d6c 100644 --- a/core/modules/editor/editor.install +++ b/core/modules/editor/editor.install @@ -20,3 +20,26 @@ function editor_update_8001() { } } } + +/** + * Recalculates file usages. + */ +function editor_update_8002() { + /** @var \Drupal\file\FileUsage\FileUsageInterface $file_usage */ + $file_usage = \Drupal::service('file.usage'); + $file_usage->clear('editor'); + + foreach (\Drupal::entityTypeManager()->getDefinitions() as $entity_type) { + if ($entity_type->isSubclassOf('\Drupal\Core\Entity\FieldableEntityInterface')) { + $entity_type_id = $entity_type->id(); + // Load 10 entities at once to avoid memory usage issues. + $result = \Drupal::entityQuery($entity_type_id)->execute(); + while ($ids = array_splice($result, 0, 10)) { + $entities = \Drupal::entityTypeManager()->getStorage($entity_type_id)->loadMultiple($ids); + foreach ($entities as $entity) { + editor_entity_insert($entity); + } + } + } + } +} diff --git a/core/modules/file/src/FileUsage/DatabaseFileUsageBackend.php b/core/modules/file/src/FileUsage/DatabaseFileUsageBackend.php index 12647b1..adfe6a5 100644 --- a/core/modules/file/src/FileUsage/DatabaseFileUsageBackend.php +++ b/core/modules/file/src/FileUsage/DatabaseFileUsageBackend.php @@ -108,4 +108,13 @@ public function listUsage(FileInterface $file) { return $references; } + /** + * {@inheritdoc} + */ + public function clear($module) { + $this->connection->delete($this->tableName) + ->condition('module', $module) + ->execute(); + } + } diff --git a/core/modules/file/src/FileUsage/FileUsageBase.php b/core/modules/file/src/FileUsage/FileUsageBase.php index c90359b..8a8931f 100644 --- a/core/modules/file/src/FileUsage/FileUsageBase.php +++ b/core/modules/file/src/FileUsage/FileUsageBase.php @@ -33,4 +33,11 @@ public function delete(FileInterface $file, $module, $type = NULL, $id = NULL, $ } } + /** + * {@inheritdoc} + */ + public function clear($module) { + // Base implementation exists only for backward compatibility purposes. + } + } diff --git a/core/modules/file/src/FileUsage/FileUsageInterface.php b/core/modules/file/src/FileUsage/FileUsageInterface.php index 6acda42..6a2a76e 100644 --- a/core/modules/file/src/FileUsage/FileUsageInterface.php +++ b/core/modules/file/src/FileUsage/FileUsageInterface.php @@ -67,4 +67,15 @@ public function delete(FileInterface $file, $module, $type = NULL, $id = NULL, $ */ public function listUsage(FileInterface $file); + /** + * Clear usages by module. + * + * @param string $module + * The name of the module. + * + * @internal This method should be used only in special cases. For example, + * if a module needs to completely recalculate its file usages. + */ + public function clear($module); + }