diff --git a/Controller/UploadController.php b/Controller/UploadController.php index ac403c84992e0575016cc979595bc733ec63c028..f7ace7187b946a81b913853376555008515fa7ce 100644 --- a/Controller/UploadController.php +++ b/Controller/UploadController.php @@ -23,8 +23,9 @@ use Symfony\Component\HttpFoundation\ResponseHeaderBag; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; -use Symfony\Component\Routing\RouterInterface; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; +use Symfony\Component\Templating\EngineInterface; /** * @Route("/api/files", service="irstea_file_upload.upload_controller") @@ -41,9 +42,9 @@ class UploadController extends Controller /** * - * @var RouterInterface + * @var UrlGeneratorInterface */ - protected $router; + protected $urlGenerator; /** * @var CsrfProviderInterface @@ -55,15 +56,26 @@ class UploadController extends Controller */ protected $tokenStorage; + /** + * @var EngineInterface + */ + protected $templating; + /** * */ - public function __construct(FileManagerInterface $fileManager, RouterInterface $router, CsrfProviderInterface $csrfProvider, TokenStorageInterface $tokenStorage) - { + public function __construct( + FileManagerInterface $fileManager, + UrlGeneratorInterface $urlGenerator, + CsrfProviderInterface $csrfProvider, + TokenStorageInterface $tokenStorage, + EngineInterface $templating + ) { $this->fileManager = $fileManager; - $this->router = $router; + $this->urlGenerator = $urlGenerator; $this->csrfProvider = $csrfProvider; $this->tokenStorage = $tokenStorage; + $this->templating = $templating; } /** @@ -89,7 +101,7 @@ class UploadController extends Controller $parameters = ['id' => $file->getId()]; - $deleteUrl = $this->router->generate('file_upload_delete', $parameters); + $deleteUrl = $this->urlGenerator->generate('file_upload_delete', $parameters); return $this->createResponse( Response::HTTP_CREATED, @@ -97,7 +109,7 @@ class UploadController extends Controller array_merge( $file->toArray(), [ - 'put_url' => $this->router->generate('file_upload_put_content', $parameters), + 'put_url' => $this->urlGenerator->generate('file_upload_put_content', $parameters), 'delete_type' => 'DELETE', 'delete_url' => $deleteUrl ] @@ -174,33 +186,27 @@ class UploadController extends Controller */ protected function completeUpload(UploadedFileInterface $file) { - $status = Response::HTTP_OK; - $message = 'File uploaded'; try { $this->fileManager->completed($file); } catch(RejectedFileException $ex) { - $status = Response::HTTP_FORBIDDEN; - $message = 'File rejected: '.$ex->getMessage(); + return $this->createResponse(Response::HTTP_FORBIDDEN, 'File rejected: '.$ex->getMessage()); } $parameters = ['id' => $file->getId()]; - - return $this->createResponse( - $status, - $message, + $fileData = array_merge( + $file->toArray(), [ - 'files' => [ - array_merge( - $file->toArray(), - [ - 'url' => $this->router->generate('file_upload_get_content', $parameters), - 'delete_type' => 'DELETE', - 'delete_url' => $this->router->generate('file_upload_delete', $parameters), - ] - ) - ] + 'url' => $this->urlGenerator->generate('file_upload_get_content', $parameters), + 'delete_type' => 'DELETE', + 'delete_url' => $this->urlGenerator->generate('file_upload_delete', $parameters), + 'repr' => $this->templating->render( + 'IrsteaFileUploadBundle:Extension:uploaded_file.html.twig', + ['file' => $file->toArray()] + ) ] ); + + return $this->createResponse(Response::HTTP_OK, 'File uploaded.', ['files' => [$fileData]]); } /** diff --git a/Resources/config/services.yml b/Resources/config/services.yml index 770f4a8d4939e211a2991dd97c6ab9ea589a363a..869289a32f80228a125ba9e0551a9c5a37a5a957 100644 --- a/Resources/config/services.yml +++ b/Resources/config/services.yml @@ -32,6 +32,7 @@ services: - @router - @form.csrf_provider - @security.token_storage + - @templating # Type de champ irstea_file_upload.field_type: diff --git a/Resources/js/widget/file_upload.js b/Resources/js/widget/file_upload.js index 7a75a1614dfc8ae9493e027dc0b5c6071296c36d..b5b916478bd6a5799341551f760ac9ec23f6ea7b 100644 --- a/Resources/js/widget/file_upload.js +++ b/Resources/js/widget/file_upload.js @@ -140,20 +140,12 @@ showError(row, file.error); return; } - row.find('.size').text(formatFileSize(file.size)); - row.find('.name a') - .text(file.name) - .prop('href', file.url + csrfQuery); + row.find('.repr').innerHtml(file.repr); row.find('.delete') .attr('data-type', file.delete_type) .attr('data-url', file.delete_url + csrfQuery); row.find('input.id') .val(file.id); - if (file.icon && file.icon !== 'file') { - row.find('.icon') - .removeClass('fa-file-o') - .addClass('fa-file-' + file.icon + '-o'); - } }); return rows; }, diff --git a/Resources/views/Form/file_upload.html.twig b/Resources/views/Form/file_upload.html.twig index e59624b304a3b9018b340eb8c211dbdec6de3344..1cfa93017f12bf4555301b47aeb6628e848aa3f4 100644 --- a/Resources/views/Form/file_upload.html.twig +++ b/Resources/views/Form/file_upload.html.twig @@ -18,7 +18,7 @@ {%- set file = file|default([]) %} <div class="template-download fileinput-entry"> <input class="id" type="hidden" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[id]" value="{{ file.id|default }}"/> - {{ irstea_uploaded_file(file) }} + <span class="repr">{{ irstea_uploaded_file(file) }}</span> <input class="form-control description" type="text" placeholder="{% trans from 'file_upload' %}form.description.placeholder{% endtrans %}" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[description]" value="{{ file.description|default }}"/> <span class="error"></span> <a href="#" class="danger delete {%- if disabled or read_only %} disabled{% endif -%}" title="{% trans %}button.delete{% endtrans %}">