Commit e0e4dd20 authored by Guillaume Perréal's avatar Guillaume Perréal
Browse files

Sépare la gestion des informations de création du manager.

Showing with 129 additions and 12 deletions
+129 -12
...@@ -58,9 +58,9 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte ...@@ -58,9 +58,9 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
} }
public function create($filename, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null) public function create($filename, $size, $mimeType, $lastModified = null)
{ {
$file = new UploadedFile($createdBy, $createdFrom); $file = new UploadedFile();
$file $file
->setFilesystem($this->filesystem) ->setFilesystem($this->filesystem)
......
...@@ -19,7 +19,10 @@ use Rhumsaa\Uuid\Uuid; ...@@ -19,7 +19,10 @@ use Rhumsaa\Uuid\Uuid;
/** /**
* @ORM\Entity(repositoryClass="Irstea\FileUploadBundle\Entity\Repository\UploadedFileRepository") * @ORM\Entity(repositoryClass="Irstea\FileUploadBundle\Entity\Repository\UploadedFileRepository")
* @ORM\EntityListeners({"Irstea\FileUploadBundle\Listener\UploadedFileListener"}) * @ORM\EntityListeners({
* "Irstea\FileUploadBundle\Listener\UploadedFileListener",
* "Irstea\FileUploadBundle\Listener\CreationDataListener"
* })
*/ */
class UploadedFile implements UploadedFileInterface class UploadedFile implements UploadedFileInterface
{ {
...@@ -114,19 +117,13 @@ class UploadedFile implements UploadedFileInterface ...@@ -114,19 +117,13 @@ class UploadedFile implements UploadedFileInterface
private $localTempPath = null; private $localTempPath = null;
/** Crée un UploadedFile. /** Crée un UploadedFile.
*
* @param string $createdBy Nom du créateur.
* @param string $createdFrom Adresse UP du créateur.
* *
* @internal * @internal
*/ */
public function __construct($createdBy = null, $createdFrom = null) public function __construct()
{ {
$this->id = Uuid::uuid4()->toString(); $this->id = Uuid::uuid4()->toString();
$this->path = self::ORPHAN_PREFIX.$this->id; $this->path = self::ORPHAN_PREFIX.$this->id;
$this->createdAt = new DateTime('now');
$this->createdBy = $createdBy;
$this->createdFrom = $createdFrom;
} }
/** /**
...@@ -604,6 +601,33 @@ class UploadedFile implements UploadedFileInterface ...@@ -604,6 +601,33 @@ class UploadedFile implements UploadedFileInterface
return $this->createdFrom; return $this->createdFrom;
} }
/**
* {@inheritdoc}
*/
public function setCreatedAt(DateTime $createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
/**
* {@inheritdoc}
*/
public function setCreatedBy($createdBy)
{
$this->createdBy = $createdBy;
return $this;
}
/**
* {@inheritdoc}
*/
public function setCreatedFrom($createdFrom)
{
$this->createdFrom = $createdFrom;
return $this;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
......
<?php
/*
* Copyright (C) 2015 IRSTEA
* All rights reserved.
*/
namespace Irstea\FileUploadBundle\Listener;
use DateTime;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Gaufrette\Exception\FileNotFound;
use Gaufrette\Filesystem;
use Irstea\FileUploadBundle\Model\UploadedFileInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Ajoute les informations sur la date, l'utilisateur connecté et l'adresse IP du client dans le fichier.
*
* @author Guillaume Perréal <guillaume.perreal@irstea.fr>
*/
class CreationDataListener
{
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
/**
* @var RequestStack
*/
private $requestStack;
public function __construct(TokenStorageInterface $tokenStorage, RequestStack $requestStack)
{
$this->tokenStorage = $tokenStorage;
$this->requestStack = $requestStack;
}
/**
* @param LifecycleEventArgs $event
*/
public function prePersist(UploadedFileInterface $file, LifecycleEventArgs $event)
{
$file->setCreatedAt(new DateTime("now"));
if ($request = $this->requestStack->getCurrentRequest()) {
$file->setCreatedFrom($request->getClientIp());
}
if ($token = $this->tokenStorage->getToken()) {
$file->setCreatedBy($token->getUsername());
}
}
}
...@@ -39,7 +39,7 @@ interface FileManagerInterface ...@@ -39,7 +39,7 @@ interface FileManagerInterface
* *
* @api * @api
*/ */
public function create($name, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null); public function create($name, $size, $mimeType, $lastModified = null);
/** Supprime un fichier uploadé. /** Supprime un fichier uploadé.
* *
......
...@@ -208,6 +208,33 @@ interface UploadedFileInterface ...@@ -208,6 +208,33 @@ interface UploadedFileInterface
*/ */
public function getEtat(); public function getEtat();
/** Définit la date de création du fichier.
*
* @param DateTime $time
* @return self
*
* @api
*/
public function setCreatedAt(\DateTime $time);
/** Définit le nom de l'utilisateur ayant uploadé le fichier.
*
* @param string $username
* @return self
*
* @api
*/
public function setCreatedBy($username);
/** Retourne l'adresse IP du client ayant uploadé le fichier.
*
* @param string $ipAddress
* @return self
*
* @api
*/
public function setCreatedFrom($ipAddress);
/** Retourne la date de création du fichier. /** Retourne la date de création du fichier.
* *
* @return DateTime * @return DateTime
......
...@@ -3,6 +3,7 @@ parameters: ...@@ -3,6 +3,7 @@ parameters:
irstea_file_upload.upload_controller.class: Irstea\FileUploadBundle\Controller\UploadController irstea_file_upload.upload_controller.class: Irstea\FileUploadBundle\Controller\UploadController
irstea_file_upload.entity_listener.class: Irstea\FileUploadBundle\Listener\UploadedFileListener irstea_file_upload.entity_listener.class: Irstea\FileUploadBundle\Listener\UploadedFileListener
irstea_file_upload.creation_data_listener.class: Irstea\FileUploadBundle\Listener\CreationDataListener
irstea_file_upload.field_type.class: Irstea\FileUploadBundle\Form\Type\FileUploadType irstea_file_upload.field_type.class: Irstea\FileUploadBundle\Form\Type\FileUploadType
irstea_file_upload.filesystem.name: irstea_file_upload irstea_file_upload.filesystem.name: irstea_file_upload
...@@ -44,7 +45,7 @@ services: ...@@ -44,7 +45,7 @@ services:
tags: tags:
- { name: form.type, alias: file_upload } - { name: form.type, alias: file_upload }
# Le listener # Le listener de mise à jour du filesystem
irstea_file_upload.entity_listener: irstea_file_upload.entity_listener:
class: %irstea_file_upload.entity_listener.class% class: %irstea_file_upload.entity_listener.class%
arguments: arguments:
...@@ -52,6 +53,15 @@ services: ...@@ -52,6 +53,15 @@ services:
tags: tags:
- { name: doctrine.orm.entity_listener } - { name: doctrine.orm.entity_listener }
# Le listener pour les informations de création
irstea_file_upload.creation_data_listener:
class: %irstea_file_upload.creation_data_listener.class%
arguments:
- @security.token_storage
- @request_stack
tags:
- { name: doctrine.orm.entity_listener }
# Le backend de stockage des fichiers # Le backend de stockage des fichiers
irstea_file_upload.filesystem: irstea_file_upload.filesystem:
class: Gaufrette\Filesystem class: Gaufrette\Filesystem
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment