diff --git a/Controller/UploadController.php b/Controller/UploadController.php index 8f5908354cad2edbd1110759d6677790259334fa..de23d7b9e3d16ef52dbe3efa8da9a3dd4f22bdeb 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -24,7 +24,7 @@ use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\Routing\RouterInterface; -use Exception; +use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; /** * @Route("/files", service="irstea_file_upload.upload_controller") @@ -50,14 +50,20 @@ class UploadController extends Controller */ protected $csrfProvider; + /** + * @var TokenStorageInterface + */ + protected $tokenStorage; + /** * */ - public function __construct(FileManagerInterface $fileManager, RouterInterface $router, CsrfProviderInterface $csrfProvider) + public function __construct(FileManagerInterface $fileManager, RouterInterface $router, CsrfProviderInterface $csrfProvider, TokenStorageInterface $tokenStorage) { $this->fileManager = $fileManager; $this->router = $router; $this->csrfProvider = $csrfProvider; + $this->tokenStorage = $tokenStorage; } /** @@ -70,11 +76,15 @@ class UploadController extends Controller try { $data = $request->request->get('file'); + $token = $this->tokenStorage->getToken(); + $file = $this->fileManager->create( $data['name'], $data['size'], $data['type'], - isset($data['lastModified']) ? $data['lastModified'] : null + isset($data['lastModified']) ? $data['lastModified'] : null, + null !== $token ? $token->getUsername() : null, + $request->getClientIp() ); $parameters = ['id' => $file->getId()]; diff --git a/Entity/Repository/UploadedFileRepository.php b/Entity/Repository/UploadedFileRepository.php index fd55f6d599d297b5bc237e795e509bb7f3418b9b..b49e2891c078ccedb0bc426cf6b6d2eb166fd4d3 100644 --- a/Entity/Repository/UploadedFileRepository.php +++ b/Entity/Repository/UploadedFileRepository.php @@ -56,16 +56,16 @@ class UploadedFileRepository extends EntityRepository implements FileManagerInte $this->eventDispatcher = $eventDispatcher; } - public function create($filename, $size, $mimeType, $lastModified) + public function create($filename, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null) { - $file = new UploadedFile(); + $file = new UploadedFile($createdBy, $createdFrom); $file ->setFilesystem($this->filesystem) ->setDisplayName($filename) ->setMetadata( [ - 'original' => [ + 'client' => [ 'filename' => $filename, 'size' => $size, 'mimeType' => $mimeType, diff --git a/Entity/UploadedFile.php b/Entity/UploadedFile.php index 27dfa2d8400660f9d117812dab2c36125ad7b49b..53b083d524191b071604f0079fbb58c958401563 100644 --- a/Entity/UploadedFile.php +++ b/Entity/UploadedFile.php @@ -75,6 +75,18 @@ class UploadedFile implements UploadedFileInterface */ private $createdAt; + /** + * @ORM\Column(type="string", nullable=true) + * @var string + */ + private $createdBy; + + /** + * @ORM\Column(type="string", nullable=true) + * @var string + */ + private $createdFrom; + /** * @ORM\Column(type="json_array", nullable=true) * @var array @@ -100,12 +112,16 @@ class UploadedFile implements UploadedFileInterface /** * + * @param string $createdBy + * @param string $createdFrom */ - public function __construct() + public function __construct($createdBy = null, $createdFrom = null) { $this->id = Uuid::uuid4()->toString(); $this->path = "orphan/".$this->id; $this->createdAt = new DateTime('now'); + $this->createdBy = $createdBy; + $this->createdFrom = $createdFrom; } /** @@ -589,6 +605,26 @@ class UploadedFile implements UploadedFileInterface ]; } + /** + * Get createdBy + * + * @return string + */ + public function getCreatedBy() + { + return $this->createdBy; + } + + /** + * Get createdFrom + * + * @return string + */ + public function getCreatedFrom() + { + return $this->createdFrom; + } + public function getLocalPath() { if(null !== $this->localTempPath) { diff --git a/Model/FileManagerInterface.php b/Model/FileManagerInterface.php index bba54a897d64aeec280f15d80c08a4921d2bfa6c..84a4b524fc5e91f05e43537a2885211a7b5d2f39 100644 --- a/Model/FileManagerInterface.php +++ b/Model/FileManagerInterface.php @@ -26,7 +26,7 @@ interface FileManagerInterface * @param int $lastModified * @return UploadedFileInterface */ - public function create($name, $size, $mimeType, $lastModified); + public function create($name, $size, $mimeType, $lastModified = null, $createdBy = null, $createdFrom = null); /** * @param UploadedFileInterface $file diff --git a/Model/UploadedFileInterface.php b/Model/UploadedFileInterface.php index 7b46d603995fdab527b4b01f073685b53a2412ca..6bc261890dd6f334e308053168b7b6812aee4dd8 100644 --- a/Model/UploadedFileInterface.php +++ b/Model/UploadedFileInterface.php @@ -144,6 +144,20 @@ interface UploadedFileInterface */ public function getCreatedAt(); + /** + * Get createdBy + * + * @return string + */ + public function getCreatedBy(); + + /** + * Get createdFrom + * + * @return string + */ + public function getCreatedFrom(); + /** * Set metadata * diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 38b58f0b0ee33cf1aaa716584b9637a61d2c862a..fcd95e88ec1b564bacc40cfe09392fabcecb39dd 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -31,6 +31,7 @@ services: - @irstea_file_upload.file_manager - @router - @form.csrf_provider + - @security.token_storage # Type de champ irstea_file_upload.field_type: