diff --git a/Entity/UploadedFile.php b/Entity/UploadedFile.php index c6cc87160bdeb25e1b9c892d250204398115feba..e4926bcc46e37fd6a0983661a6fca24d3d4d6aa8 100644 --- a/Entity/UploadedFile.php +++ b/Entity/UploadedFile.php @@ -80,6 +80,11 @@ class UploadedFile implements UploadedFileInterface * @var array */ private $metadata; + /** + * @ORM\Column(type="string", length=256, nullable=true) + * @var string + */ + private $description = null; /** * @var Filesystem @@ -541,6 +546,25 @@ class UploadedFile implements UploadedFileInterface return true; } + /** + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * + * @param string $description + * @return UploadedFileInterface + */ + public function setDescription($description = null) + { + $this->description = $description; + return $this; + } + /** * @return array */ @@ -552,6 +576,7 @@ class UploadedFile implements UploadedFileInterface 'size' => $this->getSize(), 'type' => $this->getMimeType(), 'etat' => $this->getEtat(), + 'description' => $this->getDescription(), 'checksum' => $this->getChecksum(), 'icon' => MimeTypeIcon::getMimeTypeIcon($this->getMimeType()) ]; diff --git a/Model/UploadedFileInterface.php b/Model/UploadedFileInterface.php index 89604ec8381eb8ef255ee60fe91472a97cc72d9b..567eb6dbf6eebf0252e402409888ca5f1f621b64 100644 --- a/Model/UploadedFileInterface.php +++ b/Model/UploadedFileInterface.php @@ -44,6 +44,17 @@ interface UploadedFileInterface */ public function getDisplayName(); + /** + * @param string $description + * @return UploadedFileInterface + */ + public function setDescription($description = null); + + /** + * @return string + */ + public function getDescription(); + /** * Get path * diff --git a/Resources/js/widget/file_upload.js b/Resources/js/widget/file_upload.js index 2fcefee14e20ba7cbdf9efb0f1282f195bd4d287..41dfb0acd81b67c852f9294c652ff611aa50a764 100644 --- a/Resources/js/widget/file_upload.js +++ b/Resources/js/widget/file_upload.js @@ -33,6 +33,7 @@ var $this = $(this), $button = $this.find('.fileinput-button'), $entries = $this.find('.fileinput-entries'), + nextIndex = $entries.find('.fileinput-entry').length, createUrl = options.createUrl, uploadPrototype = options.uploadPrototype, downloadPrototype = options.downloadPrototype, @@ -104,7 +105,7 @@ downloadTemplate: function(data) { var rows = $(); $.each(data.files, function (index, file) { - var row = $(downloadPrototype); + var row = $(downloadPrototype.replace(/__index__/g, nextIndex++)); row.find('.size').text(formatFileSize(file.size)); if (file.error) { row.find('.name').text(file.name); @@ -116,7 +117,7 @@ row.find('.delete') .attr('data-type', file.delete_type) .attr('data-url', file.delete_url + csrfQuery); - row.find('input:hidden') + row.find('input.id') .val(file.id); if(file.icon && file.icon !== 'file') { row.find('.icon') diff --git a/Resources/less/file_upload.less b/Resources/less/file_upload.less index b7820928bcfc58affcedf896ea4abb63c95579c1..f6c643181ccc0e048d29b318325607c7dbe67b92 100644 --- a/Resources/less/file_upload.less +++ b/Resources/less/file_upload.less @@ -10,6 +10,13 @@ All rights reserved. .cancel, .delete { margin-left: 0.5em; } + .description { + display: inline; + width: auto; + height: auto; + padding: @padding-xs-vertical @padding-xs-horizontal; + margin: 0; + } .progress { height: (@line-height-computed / 2); margin: (@line-height-computed / 4) 0; diff --git a/Resources/views/Form/file_upload.html.twig b/Resources/views/Form/file_upload.html.twig index dd575032815296874ed6a62802ea1f084a6cfa21..5340baa7e1839e4da660fa42d31a588e9664908d 100644 --- a/Resources/views/Form/file_upload.html.twig +++ b/Resources/views/Form/file_upload.html.twig @@ -16,13 +16,14 @@ {%- block file_upload_entry_prototype %} {%- set file = file|default([]) %} <div class="template-download fileinput-entry"> - <input type="hidden" name="{{ full_name }}{% if multiple %}[]{% endif %}" value="{{ file.id|default }}"/> + <input class="id" type="hidden" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[id]" value="{{ file.id|default }}"/> <i class="fa fa-file{% if file.icon|default(false) %}-{{ file.icon }}{% endif %}-o icon"></i> <span class="name"> <a{% if file %} href="{{ path('file_upload_get_content', {id: file.id, token: csrf_token}) }}"{% endif %}>{{ file.name|default }}</a> </span> (<span class="size"> {{- file.size|default -}} </span>) + <input class="form-control description" type="text" placeholder="{% trans %}form.file_upload.description.placeholder{% endtrans %}" name="{{ full_name }}{% if multiple %}[{{index|default('__index__')}}]{% endif %}[description]" value="{{ file.description|default }}"/> <span class="error danger" style="display: none">ERROR</span> <a href="#" class="danger delete {%- if disabled or read_only %} disabled{% endif -%}" title="{% trans %}button.delete{% endtrans %}"> {{- irstea_icon('remove') -}} @@ -41,7 +42,7 @@ <div class="fileinput-entries"> {%- if value is not empty %} {%- if multiple %} - {% for file in value %} + {% for index, file in value %} {{ block('file_upload_entry_prototype') }} {% endfor %} {%- else %}