3 namespace Drupal\file\Entity;
5 use Drupal\Core\Entity\ContentEntityBase;
6 use Drupal\Core\Entity\EntityChangedTrait;
7 use Drupal\Core\Entity\EntityStorageInterface;
8 use Drupal\Core\Entity\EntityTypeInterface;
9 use Drupal\Core\Field\BaseFieldDefinition;
10 use Drupal\file\FileInterface;
11 use Drupal\user\UserInterface;
14 * Defines the file entity class.
20 * label = @Translation("File"),
22 * "storage" = "Drupal\file\FileStorage",
23 * "storage_schema" = "Drupal\file\FileStorageSchema",
24 * "access" = "Drupal\file\FileAccessControlHandler",
25 * "views_data" = "Drupal\file\FileViewsData",
27 * base_table = "file_managed",
30 * "label" = "filename",
31 * "langcode" = "langcode",
36 class File extends ContentEntityBase implements FileInterface {
38 use EntityChangedTrait;
43 public function getFilename() {
44 return $this->get('filename')->value;
50 public function setFilename($filename) {
51 $this->get('filename')->value = $filename;
57 public function getFileUri() {
58 return $this->get('uri')->value;
64 public function setFileUri($uri) {
65 $this->get('uri')->value = $uri;
71 * @see file_url_transform_relative()
73 public function url($rel = 'canonical', $options = []) {
74 return file_create_url($this->getFileUri());
80 public function getMimeType() {
81 return $this->get('filemime')->value;
87 public function setMimeType($mime) {
88 $this->get('filemime')->value = $mime;
94 public function getSize() {
95 return $this->get('filesize')->value;
101 public function setSize($size) {
102 $this->get('filesize')->value = $size;
108 public function getCreatedTime() {
109 return $this->get('created')->value;
115 public function getOwner() {
116 return $this->get('uid')->entity;
122 public function getOwnerId() {
123 return $this->get('uid')->target_id;
129 public function setOwnerId($uid) {
130 $this->set('uid', $uid);
137 public function setOwner(UserInterface $account) {
138 $this->set('uid', $account->id());
145 public function isPermanent() {
146 return $this->get('status')->value == FILE_STATUS_PERMANENT;
152 public function isTemporary() {
153 return $this->get('status')->value == 0;
159 public function setPermanent() {
160 $this->get('status')->value = FILE_STATUS_PERMANENT;
166 public function setTemporary() {
167 $this->get('status')->value = 0;
173 public static function preCreate(EntityStorageInterface $storage, array &$values) {
174 // Automatically detect filename if not set.
175 if (!isset($values['filename']) && isset($values['uri'])) {
176 $values['filename'] = drupal_basename($values['uri']);
179 // Automatically detect filemime if not set.
180 if (!isset($values['filemime']) && isset($values['uri'])) {
181 $values['filemime'] = \Drupal::service('file.mime_type.guesser')->guess($values['uri']);
188 public function preSave(EntityStorageInterface $storage) {
189 parent::preSave($storage);
191 // The file itself might not exist or be available right now.
192 $uri = $this->getFileUri();
193 if ($size = @filesize($uri)) {
194 $this->setSize($size);
201 public static function preDelete(EntityStorageInterface $storage, array $entities) {
202 parent::preDelete($storage, $entities);
204 foreach ($entities as $entity) {
205 // Delete all remaining references to this file.
206 $file_usage = \Drupal::service('file.usage')->listUsage($entity);
207 if (!empty($file_usage)) {
208 foreach ($file_usage as $module => $usage) {
209 \Drupal::service('file.usage')->delete($entity, $module);
212 // Delete the actual file. Failures due to invalid files and files that
213 // were already deleted are logged to watchdog but ignored, the
214 // corresponding file entity will be deleted.
215 file_unmanaged_delete($entity->getFileUri());
222 public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
223 /** @var \Drupal\Core\Field\BaseFieldDefinition[] $fields */
224 $fields = parent::baseFieldDefinitions($entity_type);
226 $fields['fid']->setLabel(t('File ID'))
227 ->setDescription(t('The file ID.'));
229 $fields['uuid']->setDescription(t('The file UUID.'));
231 $fields['langcode']->setLabel(t('Language code'))
232 ->setDescription(t('The file language code.'));
234 $fields['uid'] = BaseFieldDefinition::create('entity_reference')
235 ->setLabel(t('User ID'))
236 ->setDescription(t('The user ID of the file.'))
237 ->setSetting('target_type', 'user');
239 $fields['filename'] = BaseFieldDefinition::create('string')
240 ->setLabel(t('Filename'))
241 ->setDescription(t('Name of the file with no path components.'));
243 $fields['uri'] = BaseFieldDefinition::create('uri')
245 ->setDescription(t('The URI to access the file (either local or remote).'))
246 ->setSetting('max_length', 255)
247 ->setSetting('case_sensitive', TRUE)
248 ->addConstraint('FileUriUnique');
250 $fields['filemime'] = BaseFieldDefinition::create('string')
251 ->setLabel(t('File MIME type'))
252 ->setSetting('is_ascii', TRUE)
253 ->setDescription(t("The file's MIME type."));
255 $fields['filesize'] = BaseFieldDefinition::create('integer')
256 ->setLabel(t('File size'))
257 ->setDescription(t('The size of the file in bytes.'))
258 ->setSetting('unsigned', TRUE)
259 ->setSetting('size', 'big');
261 $fields['status'] = BaseFieldDefinition::create('boolean')
262 ->setLabel(t('Status'))
263 ->setDescription(t('The status of the file, temporary (FALSE) and permanent (TRUE).'))
264 ->setDefaultValue(FALSE);
266 $fields['created'] = BaseFieldDefinition::create('created')
267 ->setLabel(t('Created'))
268 ->setDescription(t('The timestamp that the file was created.'));
270 $fields['changed'] = BaseFieldDefinition::create('changed')
271 ->setLabel(t('Changed'))
272 ->setDescription(t('The timestamp that the file was last changed.'));