--------------------
CRUDlex\\FileHandler
--------------------

.. php:namespace: CRUDlex

.. php:class:: FileHandler

    Handles the files.

    .. php:attr:: filesystem

        protected FilesystemInterface

        Brings the abstract access to the filesystem.

    .. php:attr:: entityDefinition

        protected EntityDefinition

        Holds the entity definition.

    .. php:method:: getPath($entityName, Entity $entity, $field)

        Constructs a file system path for the given parameters for storing the
        file of the file field.

        :type $entityName: string
        :param $entityName: the entity name
        :type $entity: Entity
        :param $entity: the entity
        :type $field: string
        :param $field: the file field in the entity
        :returns: string the constructed path for storing the file of the file field

    .. php:method:: performOnFiles(Entity $entity, $entityName, $function)

        Executes a function for each file field of this entity.

        :type $entity: Entity
        :param $entity: the just created entity
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :type $function: \Closure
        :param $function: the function to perform, takes $entity, $entityName and $field as parameter

    .. php:method:: shouldWriteFile(AbstractData $data, Request $request, Entity $entity, $entityName, $action)

        Writes the uploaded files.

        :type $data: AbstractData
        :param $data: the AbstractData instance who should receive the events
        :type $request: Request
        :param $request: the HTTP request containing the file data
        :type $entity: Entity
        :param $entity: the just manipulated entity
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :type $action: string
        :param $action: the name of the performed action
        :returns: boolean true if all before events passed

    .. php:method:: __construct(FilesystemInterface $filesystem, EntityDefinition $entityDefinition)

        FileHandler constructor.

        :type $filesystem: FilesystemInterface
        :param $filesystem: the filesystem to use
        :type $entityDefinition: EntityDefinition
        :param $entityDefinition: the entity definition to use

    .. php:method:: renderFile(Entity $entity, $entityName, $field)

        Renders (outputs) a file of an entity. This includes setting headers
        like the file size, mimetype and name, too.

        :type $entity: Entity
        :param $entity: the entity to render the file from
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :type $field: string
        :param $field: the field of the entity containing the file to be rendered
        :returns: StreamedResponse the HTTP streamed response

    .. php:method:: deleteFiles(AbstractData $data, Entity $entity, $entityName)

        Deletes all files of an existing entity.

        :type $data: AbstractData
        :param $data: the AbstractData instance who should receive the events
        :type $entity: Entity
        :param $entity: the entity to delete the files from
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :returns: boolean true on successful deletion

    .. php:method:: deleteFile(AbstractData $data, Entity $entity, $entityName, $field)

        Deletes a specific file from an existing entity.

        :type $data: AbstractData
        :param $data: the AbstractData instance who should receive the events
        :type $entity: Entity
        :param $entity: the entity to delete the file from
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :type $field: string
        :param $field: the field of the entity containing the file to be deleted
        :returns: bool true on successful deletion true on successful deletion

    .. php:method:: createFiles(AbstractData $data, Request $request, Entity $entity, $entityName)

        Creates the uploaded files of a newly created entity.

        :type $data: AbstractData
        :param $data: the AbstractData instance who should receive the events
        :type $request: Request
        :param $request: the HTTP request containing the file data
        :type $entity: Entity
        :param $entity: the just created entity
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :returns: boolean true if all before events passed

    .. php:method:: updateFiles(AbstractData $data, Request $request, Entity $entity, $entityName)

        Updates the uploaded files of an updated entity.

        :type $data: AbstractData
        :param $data: the AbstractData instance who should receive the events
        :type $request: Request
        :param $request: the HTTP request containing the file data
        :type $entity: Entity
        :param $entity: the updated entity
        :type $entityName: string
        :param $entityName: the name of the entity as this class here is not aware of it
        :returns: boolean true on successful update
