2015-08-17 17:00:26 -07:00
< ? php
namespace Drupal\file\Entity ;
use Drupal\Core\Entity\ContentEntityBase ;
use Drupal\Core\Entity\EntityChangedTrait ;
use Drupal\Core\Entity\EntityStorageInterface ;
use Drupal\Core\Entity\EntityTypeInterface ;
use Drupal\Core\Field\BaseFieldDefinition ;
use Drupal\file\FileInterface ;
use Drupal\user\UserInterface ;
/**
* Defines the file entity class .
*
2016-06-02 15:56:09 -07:00
* @ ingroup file
*
2015-08-17 17:00:26 -07:00
* @ ContentEntityType (
* id = " file " ,
* label = @ Translation ( " File " ),
* handlers = {
* " storage " = " Drupal \ file \ FileStorage " ,
* " storage_schema " = " Drupal \ file \ FileStorageSchema " ,
* " access " = " Drupal \ file \ FileAccessControlHandler " ,
* " views_data " = " Drupal \ file \ FileViewsData " ,
* },
* base_table = " file_managed " ,
* entity_keys = {
* " id " = " fid " ,
* " label " = " filename " ,
* " langcode " = " langcode " ,
* " uuid " = " uuid "
* }
* )
*/
class File extends ContentEntityBase implements FileInterface {
use EntityChangedTrait ;
/**
* { @ inheritdoc }
*/
public function getFilename () {
return $this -> get ( 'filename' ) -> value ;
}
/**
* { @ inheritdoc }
*/
public function setFilename ( $filename ) {
$this -> get ( 'filename' ) -> value = $filename ;
}
/**
* { @ inheritdoc }
*/
public function getFileUri () {
return $this -> get ( 'uri' ) -> value ;
}
/**
* { @ inheritdoc }
*/
public function setFileUri ( $uri ) {
$this -> get ( 'uri' ) -> value = $uri ;
}
/**
* { @ inheritdoc }
2016-02-03 14:56:31 -08:00
*
* @ see file_url_transform_relative ()
2015-08-17 17:00:26 -07:00
*/
public function url ( $rel = 'canonical' , $options = array ()) {
return file_create_url ( $this -> getFileUri ());
}
/**
* { @ inheritdoc }
*/
public function getMimeType () {
return $this -> get ( 'filemime' ) -> value ;
}
/**
* { @ inheritdoc }
*/
public function setMimeType ( $mime ) {
$this -> get ( 'filemime' ) -> value = $mime ;
}
/**
* { @ inheritdoc }
*/
public function getSize () {
return $this -> get ( 'filesize' ) -> value ;
}
/**
* { @ inheritdoc }
*/
public function setSize ( $size ) {
$this -> get ( 'filesize' ) -> value = $size ;
}
/**
* { @ inheritdoc }
*/
public function getCreatedTime () {
return $this -> get ( 'created' ) -> value ;
}
/**
* { @ inheritdoc }
*/
public function getOwner () {
return $this -> get ( 'uid' ) -> entity ;
}
/**
* { @ inheritdoc }
*/
public function getOwnerId () {
return $this -> get ( 'uid' ) -> target_id ;
}
/**
* { @ inheritdoc }
*/
public function setOwnerId ( $uid ) {
$this -> set ( 'uid' , $uid );
return $this ;
}
/**
* { @ inheritdoc }
*/
public function setOwner ( UserInterface $account ) {
$this -> set ( 'uid' , $account -> id ());
return $this ;
}
/**
* { @ inheritdoc }
*/
public function isPermanent () {
return $this -> get ( 'status' ) -> value == FILE_STATUS_PERMANENT ;
}
/**
* { @ inheritdoc }
*/
public function isTemporary () {
return $this -> get ( 'status' ) -> value == 0 ;
}
/**
* { @ inheritdoc }
*/
public function setPermanent () {
$this -> get ( 'status' ) -> value = FILE_STATUS_PERMANENT ;
}
/**
* { @ inheritdoc }
*/
public function setTemporary () {
$this -> get ( 'status' ) -> value = 0 ;
}
/**
* { @ inheritdoc }
*/
public static function preCreate ( EntityStorageInterface $storage , array & $values ) {
// Automatically detect filename if not set.
if ( ! isset ( $values [ 'filename' ]) && isset ( $values [ 'uri' ])) {
$values [ 'filename' ] = drupal_basename ( $values [ 'uri' ]);
}
// Automatically detect filemime if not set.
if ( ! isset ( $values [ 'filemime' ]) && isset ( $values [ 'uri' ])) {
$values [ 'filemime' ] = \Drupal :: service ( 'file.mime_type.guesser' ) -> guess ( $values [ 'uri' ]);
}
}
/**
* { @ inheritdoc }
*/
public function preSave ( EntityStorageInterface $storage ) {
parent :: preSave ( $storage );
2016-06-02 15:56:09 -07:00
// The file itself might not exist or be available right now.
$uri = $this -> getFileUri ();
if ( $size = @ filesize ( $uri )) {
$this -> setSize ( $size );
}
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public static function preDelete ( EntityStorageInterface $storage , array $entities ) {
parent :: preDelete ( $storage , $entities );
foreach ( $entities as $entity ) {
// Delete all remaining references to this file.
$file_usage = \Drupal :: service ( 'file.usage' ) -> listUsage ( $entity );
if ( ! empty ( $file_usage )) {
foreach ( $file_usage as $module => $usage ) {
\Drupal :: service ( 'file.usage' ) -> delete ( $entity , $module );
}
}
// Delete the actual file. Failures due to invalid files and files that
// were already deleted are logged to watchdog but ignored, the
// corresponding file entity will be deleted.
file_unmanaged_delete ( $entity -> getFileUri ());
}
}
/**
* { @ inheritdoc }
*/
public static function baseFieldDefinitions ( EntityTypeInterface $entity_type ) {
$fields [ 'fid' ] = BaseFieldDefinition :: create ( 'integer' )
-> setLabel ( t ( 'File ID' ))
-> setDescription ( t ( 'The file ID.' ))
-> setReadOnly ( TRUE )
-> setSetting ( 'unsigned' , TRUE );
$fields [ 'uuid' ] = BaseFieldDefinition :: create ( 'uuid' )
-> setLabel ( t ( 'UUID' ))
-> setDescription ( t ( 'The file UUID.' ))
-> setReadOnly ( TRUE );
$fields [ 'langcode' ] = BaseFieldDefinition :: create ( 'language' )
-> setLabel ( t ( 'Language code' ))
-> setDescription ( t ( 'The file language code.' ));
$fields [ 'uid' ] = BaseFieldDefinition :: create ( 'entity_reference' )
-> setLabel ( t ( 'User ID' ))
-> setDescription ( t ( 'The user ID of the file.' ))
-> setSetting ( 'target_type' , 'user' );
$fields [ 'filename' ] = BaseFieldDefinition :: create ( 'string' )
-> setLabel ( t ( 'Filename' ))
-> setDescription ( t ( 'Name of the file with no path components.' ));
$fields [ 'uri' ] = BaseFieldDefinition :: create ( 'uri' )
-> setLabel ( t ( 'URI' ))
-> setDescription ( t ( 'The URI to access the file (either local or remote).' ))
-> setSetting ( 'max_length' , 255 )
-> setSetting ( 'case_sensitive' , TRUE )
-> addConstraint ( 'FileUriUnique' );
$fields [ 'filemime' ] = BaseFieldDefinition :: create ( 'string' )
-> setLabel ( t ( 'File MIME type' ))
-> setSetting ( 'is_ascii' , TRUE )
-> setDescription ( t ( " The file's MIME type. " ));
$fields [ 'filesize' ] = BaseFieldDefinition :: create ( 'integer' )
-> setLabel ( t ( 'File size' ))
-> setDescription ( t ( 'The size of the file in bytes.' ))
-> setSetting ( 'unsigned' , TRUE )
-> setSetting ( 'size' , 'big' );
$fields [ 'status' ] = BaseFieldDefinition :: create ( 'boolean' )
-> setLabel ( t ( 'Status' ))
-> setDescription ( t ( 'The status of the file, temporary (FALSE) and permanent (TRUE).' ))
-> setDefaultValue ( FALSE );
$fields [ 'created' ] = BaseFieldDefinition :: create ( 'created' )
-> setLabel ( t ( 'Created' ))
-> setDescription ( t ( 'The timestamp that the file was created.' ));
$fields [ 'changed' ] = BaseFieldDefinition :: create ( 'changed' )
-> setLabel ( t ( 'Changed' ))
-> setDescription ( t ( 'The timestamp that the file was last changed.' ));
return $fields ;
}
}