Same filename and directory in other branches
- 8.9.x core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
- 9 core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
Namespace
Drupal\file\Plugin\Field\FieldType
File
core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php
View source
<?php
namespace Drupal\file\Plugin\Field\FieldType;
use Drupal\Core\Field\EntityReferenceFieldItemList;
use Drupal\Core\Form\FormStateInterface;
class FileFieldItemList extends EntityReferenceFieldItemList {
public function defaultValuesForm(array &$form, FormStateInterface $form_state) {
}
public function postSave($update) {
$entity = $this
->getEntity();
if (!$update) {
foreach ($this
->referencedEntities() as $file) {
\Drupal::service('file.usage')
->add($file, 'file', $entity
->getEntityTypeId(), $entity
->id());
}
}
else {
$files = $this
->referencedEntities();
$ids = [];
foreach ($files as $file) {
$ids[] = $file
->id();
}
if (!empty($entity->original) && $entity
->getRevisionId() != $entity->original
->getRevisionId()) {
foreach ($files as $file) {
\Drupal::service('file.usage')
->add($file, 'file', $entity
->getEntityTypeId(), $entity
->id());
}
return;
}
$field_name = $this
->getFieldDefinition()
->getName();
$original_ids = [];
$langcode = $this
->getLangcode();
$original = $entity->original;
if ($original
->hasTranslation($langcode)) {
$original_items = $original
->getTranslation($langcode)->{$field_name};
foreach ($original_items as $item) {
$original_ids[] = $item->target_id;
}
}
$removed_ids = array_filter(array_diff($original_ids, $ids));
$removed_files = \Drupal::entityTypeManager()
->getStorage('file')
->loadMultiple($removed_ids);
foreach ($removed_files as $file) {
\Drupal::service('file.usage')
->delete($file, 'file', $entity
->getEntityTypeId(), $entity
->id());
}
foreach ($files as $file) {
if (!in_array($file
->id(), $original_ids)) {
\Drupal::service('file.usage')
->add($file, 'file', $entity
->getEntityTypeId(), $entity
->id());
}
}
}
}
public function delete() {
parent::delete();
$entity = $this
->getEntity();
$count = $entity
->isDefaultTranslation() ? 0 : 1;
foreach ($this
->referencedEntities() as $file) {
\Drupal::service('file.usage')
->delete($file, 'file', $entity
->getEntityTypeId(), $entity
->id(), $count);
}
}
public function deleteRevision() {
parent::deleteRevision();
$entity = $this
->getEntity();
foreach ($this
->referencedEntities() as $file) {
\Drupal::service('file.usage')
->delete($file, 'file', $entity
->getEntityTypeId(), $entity
->id());
}
}
}
Classes