class FileFieldItemList
Same name and namespace in other branches
- 10 core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php \Drupal\file\Plugin\Field\FieldType\FileFieldItemList
- 11.x core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php \Drupal\file\Plugin\Field\FieldType\FileFieldItemList
- 9 core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php \Drupal\file\Plugin\Field\FieldType\FileFieldItemList
- 8.9.x core/modules/file/src/Plugin/Field/FieldType/FileFieldItemList.php \Drupal\file\Plugin\Field\FieldType\FileFieldItemList
Represents a configurable entity file field.
Hierarchy
- class \Drupal\Core\TypedData\TypedData implements \Drupal\Core\TypedData\TypedDataInterface, \Drupal\Component\Plugin\PluginInspectionInterface uses \Drupal\Core\DependencyInjection\DependencySerializationTrait, \Drupal\Core\StringTranslation\StringTranslationTrait, \Drupal\Core\TypedData\TypedDataTrait
- class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, \Drupal\Core\TypedData\ListInterface extends \Drupal\Core\TypedData\TypedData
- class \Drupal\Core\Field\FieldItemList implements \Drupal\Core\Field\FieldItemListInterface extends \Drupal\Core\TypedData\Plugin\DataType\ItemList
- class \Drupal\Core\Field\EntityReferenceFieldItemList implements \Drupal\Core\Field\EntityReferenceFieldItemListInterface extends \Drupal\Core\Field\FieldItemList
- class \Drupal\file\Plugin\Field\FieldType\FileFieldItemList extends \Drupal\Core\Field\EntityReferenceFieldItemList
- class \Drupal\Core\Field\EntityReferenceFieldItemList implements \Drupal\Core\Field\EntityReferenceFieldItemListInterface extends \Drupal\Core\Field\FieldItemList
- class \Drupal\Core\Field\FieldItemList implements \Drupal\Core\Field\FieldItemListInterface extends \Drupal\Core\TypedData\Plugin\DataType\ItemList
- class \Drupal\Core\TypedData\Plugin\DataType\ItemList implements \Drupal\Core\TypedData\Plugin\DataType\IteratorAggregate, \Drupal\Core\TypedData\ListInterface extends \Drupal\Core\TypedData\TypedData
Expanded class hierarchy of FileFieldItemList
3 files declare their use of FileFieldItemList
- FileUploadForm.php in core/
modules/ media_library/ src/ Form/ FileUploadForm.php - FileUploadLocationTrait.php in core/
modules/ file/ src/ Upload/ FileUploadLocationTrait.php - ImageItem.php in core/
modules/ image/ src/ Plugin/ Field/ FieldType/ ImageItem.php
File
-
core/
modules/ file/ src/ Plugin/ Field/ FieldType/ FileFieldItemList.php, line 11
Namespace
Drupal\file\Plugin\Field\FieldTypeView source
class FileFieldItemList extends EntityReferenceFieldItemList {
/**
* {@inheritdoc}
*/
public function defaultValuesForm(array &$form, FormStateInterface $form_state) {
}
/**
* {@inheritdoc}
*/
public function postSave($update) {
$entity = $this->getEntity();
if (!$update) {
// Add a new usage for newly uploaded files.
foreach ($this->referencedEntities() as $file) {
\Drupal::service('file.usage')->add($file, 'file', $entity->getEntityTypeId(), $entity->id());
}
}
else {
// Get current target file entities and file IDs.
$files = $this->referencedEntities();
$ids = [];
/** @var \Drupal\file\FileInterface $file */
foreach ($files as $file) {
$ids[] = $file->id();
}
// On new revisions, all files are considered to be a new usage and no
// deletion of previous file usages are necessary.
if ($entity->getRevisionId() != $entity->getOriginal()?->getRevisionId()) {
foreach ($files as $file) {
\Drupal::service('file.usage')->add($file, 'file', $entity->getEntityTypeId(), $entity->id());
}
return;
}
// Get the file IDs attached to the field before this update.
$field_name = $this->getFieldDefinition()
->getName();
$original_ids = [];
$langcode = $this->getLangcode();
$original = $entity->getOriginal();
if ($original->hasTranslation($langcode)) {
foreach ($original->getTranslation($langcode)->{$field_name} as $item) {
$original_ids[] = $item->target_id;
}
}
// Decrement file usage by 1 for files that were removed from the field.
$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());
}
// Add new usage entries for newly added files.
foreach ($files as $file) {
if (!in_array($file->id(), $original_ids)) {
\Drupal::service('file.usage')->add($file, 'file', $entity->getEntityTypeId(), $entity->id());
}
}
}
}
/**
* {@inheritdoc}
*/
public function delete() {
parent::delete();
$entity = $this->getEntity();
// If a translation is deleted only decrement the file usage by one. If the
// default translation is deleted remove all file usages within this entity.
$count = $entity->isDefaultTranslation() ? 0 : 1;
foreach ($this->referencedEntities() as $file) {
\Drupal::service('file.usage')->delete($file, 'file', $entity->getEntityTypeId(), $entity->id(), $count);
}
}
/**
* {@inheritdoc}
*/
public function deleteRevision() {
parent::deleteRevision();
$entity = $this->getEntity();
// Decrement the file usage by 1.
foreach ($this->referencedEntities() as $file) {
\Drupal::service('file.usage')->delete($file, 'file', $entity->getEntityTypeId(), $entity->id());
}
}
}
Members
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.