#1548 Issue attachments

This commit is contained in:
Karel Pičman 2024-09-18 11:00:48 +02:00
parent 62bfc18357
commit e0532a81b2
26 changed files with 217 additions and 112 deletions

View File

@ -47,7 +47,29 @@ class DmsfUpload
end end
end end
def initialize(project, folder, uploaded) def initialize(project, folder = nil, uploaded = nil)
unless uploaded
@name = ''
@disk_filename = ''
@mime_type = ''
@size = 0
@tempfile_path = ''
@token = ''
@digest = ''
if Setting.plugin_redmine_dmsf['empty_minor_version_by_default']
@major_version = 1
@minor_version = nil
else
@major_version = 0
@minor_version = 0
end
@patch_version = nil
@workflow = nil
revision = DmsfFileRevision.new
@custom_values = revision.custom_field_values
return
end
@name = uploaded[:original_filename] @name = uploaded[:original_filename]
file = DmsfFile.find_file_by_name(project, folder, @name) file = DmsfFile.find_file_by_name(project, folder, @name)

View File

@ -81,8 +81,10 @@
upload_path: dmsf_uploads_path(format: 'js'), upload_path: dmsf_uploads_path(format: 'js'),
description_placeholder: l(:label_optional_description), description_placeholder: l(:label_optional_description),
project: @project ? "#{@project.identifier}" : '', project: @project ? "#{@project.identifier}" : '',
description: description, awf: awf,
awf: awf dmsf_file_details_form: container ? controller.send( :render_to_string,
{ partial: 'dmsf_upload/upload_file',
locals: { upload: DmsfUpload.new(container.project, nil, nil), i: 0 } }) : nil
} %> } %>
</span> </span>
<% if defined?(container) && container %> <% if defined?(container) && container %>

View File

@ -21,21 +21,18 @@
<div class="box tabular dmfs-box-tabular"> <div class="box tabular dmfs-box-tabular">
<%= hidden_field_tag "committed_files[#{i}][disk_filename]", upload.disk_filename %> <%= hidden_field_tag "committed_files[#{i}][disk_filename]", upload.disk_filename %>
<%= hidden_field_tag "committed_files[#{i}][token]", upload.token %> <%= hidden_field_tag "committed_files[#{i}][token]", upload.token %>
<%= hidden_field_tag "committed_files[#{i}][size]", upload.size %>
<%= hidden_field_tag "committed_files[#{i}][mime_type]", upload.mime_type %>
<%= hidden_field_tag "committed_files[#{i}][digest]", upload.digest %> <%= hidden_field_tag "committed_files[#{i}][digest]", upload.digest %>
<div class="splitcontent"> <div class="splitcontent">
<div class="splitcontentleft"> <div class="splitcontentleft">
<p> <p>
<%= label_tag "committed_files[#{i}][title]", l(:label_title) %> <%= label_tag "committed_files[#{i}][title]", l(:label_title) %>
<%= text_field_tag "committed_files[#{i}][title]", upload.title, required:true %> <%= text_field_tag "committed_files[#{i}][title]", upload.title, required: true %>
</p> </p>
</div> </div>
<div class="splitcontentright"> <div class="splitcontentright">
<p> <p>
<%= label_tag '', l(:label_filename) %> <%= label_tag "committed_files[#{i}][name]", l(:label_filename) %>
<%= text_field_tag :name, h(upload.name), readonly: true %> <%= text_field_tag "committed_files[#{i}][name]", upload.name, readonly: true %>
<%= hidden_field_tag "committed_files[#{i}][name]", upload.name %>
</p> </p>
</div> </div>
</div> </div>
@ -55,12 +52,12 @@
revision_or_upload: upload } %> revision_or_upload: upload } %>
</p> </p>
<p> <p>
<%= label_tag '', l(:label_mime) %> <%= label_tag "committed_files[#{i}][mime_type]", l(:label_mime) %>
<%= text_field_tag :name, h(upload.mime_type), readonly: true %> <%= text_field_tag "committed_files[#{i}][mime_type]", h(upload.mime_type), readonly: true %>
</p> </p>
<p> <p>
<%= label_tag '', l(:label_size) %> <%= label_tag "committed_files[#{i}][size]", l(:label_size) %>
<%= text_field_tag :name, number_to_human_size(upload.size), readonly: true %> <%= text_field_tag "committed_files[#{i}][size]", number_to_human_size(upload.size), readonly: true %>
</p> </p>
</div> </div>
<div class="splitcontentright"> <div class="splitcontentright">

View File

@ -41,7 +41,7 @@
<% end %> <% end %>
<% end %> <% end %>
<div class="form-actions"> <div class="form-actions">
<%= submit_tag l(:label_upload), <%= submit_tag l(:label_dmsf_commit),
data: { cy: 'button__submit__upload-file--project' }, data: { cy: 'button__submit__upload-file--project' },
class: 'button-positive', class: 'button-positive',
onclick: "$('#ajax-indicator').show();" %> onclick: "$('#ajax-indicator').show();" %>

View File

@ -45,6 +45,21 @@ function dmsfAddLink(linksSpan, linkId, linkName, title, project, awf) {
dmsfAddLink.nextLinkId = 1000; dmsfAddLink.nextLinkId = 1000;
/* Remove the extension and replace underscores with spaces, 'after_init.rb' -> 'after init' */
function filenameToTitle(filename) {
return filename.replace(/\.[^/.]+$/, "").replace(/_+/g, " ");
}
/* File size to human readable file size, 1024 -> 1.00 KB */
function humanFileSize(bytes) {
var u = 0, s= 1024;
while (bytes >= s || -bytes >= s) {
bytes /= s;
u++;
}
return (u ? bytes.toFixed(2) + ' ' : bytes) + ' KMGTPEZY'[u] + 'B';
}
function dmsfAddFile(inputEl, file, eagerUpload) { function dmsfAddFile(inputEl, file, eagerUpload) {
let attachments = $('#dmsf_attachments_fields'); let attachments = $('#dmsf_attachments_fields');
@ -62,16 +77,6 @@ function dmsfAddFile(inputEl, file, eagerUpload) {
if($(inputEl).attr('multiple') == 'multiple') { if($(inputEl).attr('multiple') == 'multiple') {
if($(inputEl).data('description')) {
let description = $('<input>', {type: 'text', 'class': 'description',
name: 'dmsf_attachments[' + attachmentId + '][description]', maxlength: 255,
placeholder: $(inputEl).data('description-placeholder')
}).toggle(!eagerUpload);
fileSpan.append(description);
}
fileSpan.append(iconDel.click(dmsfRemoveFileLbl)); fileSpan.append(iconDel.click(dmsfRemoveFileLbl));
if($(inputEl).data('awf')) { if($(inputEl).data('awf')) {
@ -83,13 +88,45 @@ function dmsfAddFile(inputEl, file, eagerUpload) {
fileSpan.append(iconWf); fileSpan.append(iconWf);
} }
attachments.append(fileSpan); // Details
let detailsForm = $(inputEl).data('dmsf-file-details-form');
if(detailsForm) {
let detailsDiv = $('<div>').attr({id: 'dmsf_attachments_details_' + attachmentId});
let detailsArrow = $('<a>');
detailsArrow.attr({href: '#', 'class': 'icon-only icon-sorted-asc', title: 'Details'});
detailsArrow.attr(
{
onclick: "$('#dmsf_attachments_details_" + attachmentId + "').toggle();" +
"$(this).toggleClass('icon-sorted-asc');$(this).toggleClass('icon-sorted-desc');" +
"return false;"
});
detailsForm = detailsForm.replace(/\[0\]/g, '[' + attachmentId + ']');
detailsForm = detailsForm.replace(/_0/g, '_' + attachmentId);
detailsForm = detailsForm.replace('id="committed_files_' + attachmentId + '_name" value=""',
'id="committed_files_' + attachmentId + '_name" value="' + file.name + '"');
detailsForm = detailsForm.replace('id="committed_files_' + attachmentId + '_title"',
'id="committed_files_' + attachmentId + '_title" value = "' + filenameToTitle(file.name) + '"');
detailsForm = detailsForm.replace('id="committed_files_' + attachmentId + '_size"',
'id="committed_files_' + attachmentId + '_size" value = "' + humanFileSize(file.size) + '"');
detailsForm = detailsForm.replace('id="committed_files_' + attachmentId + '_mime_type"',
'id="committed_files_' + attachmentId + '_mime_type" value = "' + file.type + '"');
detailsDiv.append(detailsForm);
detailsDiv.hide();
fileSpan.append(detailsArrow)
attachments.append(fileSpan);
attachments.append(detailsDiv);
}
else {
attachments.append(fileSpan);
}
} }
else{ else{
fileSpan.append(iconDel.click(dmsfRemoveFileLbl)); fileSpan.append(iconDel.click(dmsfRemoveFileLbl));
attachments.append(fileSpan); attachments.append(fileSpan);
$('#dmsf_file_revision_name').val(file.name); $('#dmsf_file_revision_name').val(file.name);
} }
attachments.append('<br>');
if(eagerUpload) { if(eagerUpload) {
dmsfAjaxUpload(file, attachmentId, fileSpan, inputEl); dmsfAjaxUpload(file, attachmentId, fileSpan, inputEl);

View File

@ -77,7 +77,7 @@ div[id^="step-index-"] {
} }
.dmsf-revision-box { .dmsf-revision-box {
background-color:#f6f6f6; background-color: #f6f6f6;
} }
.dmsf-revision-inner-box { .dmsf-revision-inner-box {
@ -108,7 +108,7 @@ div.dmsf-id-box {
} }
.dmsf-log-header-box{ .dmsf-log-header-box{
padding:6px; padding: 6px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.dmsf-log-header-left { .dmsf-log-header-left {
@ -150,8 +150,8 @@ div[id*="revision_access_"] {
} }
/* Command icons */ /* Command icons */
.dmsf-icon-link { background-image: url(../../../images/link.png); } .dmsf-icon-link { background-image: url("../../../images/link.png"); }
.icon-approvalworkflows { background-image: url(../../../images/ticket_go.png); } .icon-approvalworkflows { background-image: url("../../../images/ticket_go.png"); }
/* File types */ /* File types */
.dmsf-icon-file{ .dmsf-icon-file{
@ -159,55 +159,57 @@ div[id*="revision_access_"] {
height: 16px; height: 16px;
} }
.dmsf-gray .icon-folder { background-image: url(../images/folder_gray.png); } .dmsf-gray .icon-folder { background-image: url("../images/folder_gray.png"); }
.dmsf-system .icon-folder { background-image: url(../images/folder_system.png); } .dmsf-system .icon-folder { background-image: url("../images/folder_system.png"); }
.icon-file.filetype-doc, .icon-file.filetype-docx { background-image: url(../images/filetypes/doc.png); } .icon-file.filetype-doc, .icon-file.filetype-docx { background-image: url("../images/filetypes/doc.png"); }
.icon-file.filetype-xls, .icon-file.filetype-xlsx, .icon-file.filetype-xlsm { background-image: url(../images/filetypes/xls.png); } .icon-file.filetype-xls,
.icon-file.filetype-ppt, .icon-file.filetype-pptx { background-image: url(../images/filetypes/ppt.png); } .icon-file.filetype-xlsx,
.icon-file.filetype-vsd, .icon-file.filetype-vsdx { background-image: url(../images/filetypes/vsd.png); } .icon-file.filetype-xlsm { background-image: url("../images/filetypes/xls.png"); }
.icon-file.filetype-mpp { background-image: url(../images/filetypes/mpp.png); } .icon-file.filetype-ppt, .icon-file.filetype-pptx { background-image: url("../images/filetypes/ppt.png"); }
.icon-file.filetype-odt { background-image: url(../images/filetypes/odt.png); } .icon-file.filetype-vsd, .icon-file.filetype-vsdx { background-image: url("../images/filetypes/vsd.png"); }
.icon-file.filetype-ods { background-image: url(../images/filetypes/ods.png); } .icon-file.filetype-mpp { background-image: url("../images/filetypes/mpp.png"); }
.icon-file.filetype-ott { background-image: url(../images/filetypes/ott.png); } .icon-file.filetype-odt { background-image: url("../images/filetypes/odt.png"); }
.icon-file.filetype-odp { background-image: url(../images/filetypes/odp.png); } .icon-file.filetype-ods { background-image: url("../images/filetypes/ods.png"); }
.icon-file.filetype-odg { background-image: url(../images/filetypes/odg.png); } .icon-file.filetype-ott { background-image: url("../images/filetypes/ott.png"); }
.icon-file.filetype-odp { background-image: url("../images/filetypes/odp.png"); }
.icon-file.filetype-odg { background-image: url("../images/filetypes/odg.png"); }
.dmsf-gray .icon-file.filetype-doc { background-image: url(../images/filetypes/doc_gray.png); } .dmsf-gray .icon-file.filetype-doc { background-image: url("../images/filetypes/doc_gray.png"); }
.dmsf-gray .icon-file.filetype-docx { background-image: url(../images/filetypes/doc_gray.png); } .dmsf-gray .icon-file.filetype-docx { background-image: url("../images/filetypes/doc_gray.png"); }
.dmsf-gray .icon-file.filetype-xls { background-image: url(../images/filetypes/xls_gray.png); } .dmsf-gray .icon-file.filetype-xls { background-image: url("../images/filetypes/xls_gray.png"); }
.dmsf-gray .icon-file.filetype-xlsx { background-image: url(../images/filetypes/xls_gray.png); } .dmsf-gray .icon-file.filetype-xlsx { background-image: url("../images/filetypes/xls_gray.png"); }
.dmsf-gray .icon-file.filetype-xlsm { background-image: url(../images/filetypes/xls_gray.png); } .dmsf-gray .icon-file.filetype-xlsm { background-image: url("../images/filetypes/xls_gray.png"); }
.dmsf-gray .icon-file.filetype-ppt { background-image: url(../images/filetypes/ppt_gray.png); } .dmsf-gray .icon-file.filetype-ppt { background-image: url("../images/filetypes/ppt_gray.png"); }
.dmsf-gray .icon-file.filetype-pptx { background-image: url(../images/filetypes/ppt_gray.png); } .dmsf-gray .icon-file.filetype-pptx { background-image: url("../images/filetypes/ppt_gray.png"); }
.dmsf-gray .icon-file.filetype-vsd { background-image: url(../images/filetypes/vsd_gray.png); } .dmsf-gray .icon-file.filetype-vsd { background-image: url("../images/filetypes/vsd_gray.png"); }
.dmsf-gray .icon-file.filetype-vsdx { background-image: url(../images/filetypes/vsd_gray.png); } .dmsf-gray .icon-file.filetype-vsdx { background-image: url("../images/filetypes/vsd_gray.png"); }
.dmsf-gray .icon-file.filetype-mpp { background-image: url(../images/filetypes/mpp_gray.png); } .dmsf-gray .icon-file.filetype-mpp { background-image: url("../images/filetypes/mpp_gray.png"); }
.dmsf-gray .icon-file.filetype-odt { background-image: url(../images/filetypes/odt_gray.png); } .dmsf-gray .icon-file.filetype-odt { background-image: url("../images/filetypes/odt_gray.png"); }
.dmsf-gray .icon-file.filetype-ott { background-image: url(../images/filetypes/ott_gray.png); } .dmsf-gray .icon-file.filetype-ott { background-image: url("../images/filetypes/ott_gray.png"); }
.dmsf-gray .icon-file.filetype-ods { background-image: url(../images/filetypes/ods_gray.png); } .dmsf-gray .icon-file.filetype-ods { background-image: url("../images/filetypes/ods_gray.png"); }
.dmsf-gray .icon-file.filetype-odp { background-image: url(../images/filetypes/odp_gray.png); } .dmsf-gray .icon-file.filetype-odp { background-image: url("../images/filetypes/odp_gray.png"); }
.dmsf-gray .icon-file.filetype-odg { background-image: url(../images/filetypes/odg_gray.png); } .dmsf-gray .icon-file.filetype-odg { background-image: url("../images/filetypes/odg_gray.png"); }
.dmsf-gray .icon-file.text-x-c { background-image: url(../images/filetypes/c_gray.png); } .dmsf-gray .icon-file.text-x-c { background-image: url("../images/filetypes/c_gray.png"); }
.dmsf-gray .icon-file.text-x-csharp { background-image: url(../images/filetypes/csharp_gray.png); } .dmsf-gray .icon-file.text-x-csharp { background-image: url("../images/filetypes/csharp_gray.png"); }
.dmsf-gray .icon-file.text-x-java { background-image: url(../images/filetypes/java_gray.png); } .dmsf-gray .icon-file.text-x-java { background-image: url("../images/filetypes/java_gray.png"); }
.dmsf-gray .icon-file.text-x-javascript { background-image: url(../images/filetypes/js_gray.png); } .dmsf-gray .icon-file.text-x-javascript { background-image: url("../images/filetypes/js_gray.png"); }
.dmsf-gray .icon-file.text-x-php { background-image: url(../images/filetypes/php_gray.png); } .dmsf-gray .icon-file.text-x-php { background-image: url("../images/filetypes/php_gray.png"); }
.dmsf-gray .icon-file.text-x-ruby { background-image: url(../images/filetypes/ruby_gray.png); } .dmsf-gray .icon-file.text-x-ruby { background-image: url("../images/filetypes/ruby_gray.png"); }
.dmsf-gray .icon-file.text-xml { background-image: url(../images/filetypes/xml_gray.png); } .dmsf-gray .icon-file.text-xml { background-image: url("../images/filetypes/xml_gray.png"); }
.dmsf-gray .icon-file.text-css { background-image: url(../images/filetypes/css_gray.png); } .dmsf-gray .icon-file.text-css { background-image: url("../images/filetypes/css_gray.png"); }
.dmsf-gray .icon-file.text-html { background-image: url(../images/filetypes/html_gray.png); } .dmsf-gray .icon-file.text-html { background-image: url("../images/filetypes/html_gray.png"); }
.dmsf-gray .icon-file.image-gif { background-image: url(../images/filetypes/image_gray.png); } .dmsf-gray .icon-file.image-gif { background-image: url("../images/filetypes/image_gray.png"); }
.dmsf-gray .icon-file.image-jpeg { background-image: url(../images/filetypes/image_gray.png); } .dmsf-gray .icon-file.image-jpeg { background-image: url("../images/filetypes/image_gray.png"); }
.dmsf-gray .icon-file.image-png { background-image: url(../images/filetypes/image_gray.png); } .dmsf-gray .icon-file.image-png { background-image: url("../images/filetypes/image_gray.png"); }
.dmsf-gray .icon-file.image-tiff { background-image: url(../images/filetypes/image_gray.png); } .dmsf-gray .icon-file.image-tiff { background-image: url("../images/filetypes/image_gray.png"); }
.dmsf-gray .icon-file.application-pdf { background-image: url(../images/filetypes/pdf_gray.png); } .dmsf-gray .icon-file.application-pdf { background-image: url("../images/filetypes/pdf_gray.png"); }
.dmsf-gray .icon-file.application-zip { background-image: url(../images/filetypes/zip_gray.png); } .dmsf-gray .icon-file.application-zip { background-image: url("../images/filetypes/zip_gray.png"); }
.dmsf-gray .icon-file.application-x-gzip { background-image: url(../images/filetypes/zip_gray.png); } .dmsf-gray .icon-file.application-x-gzip { background-image: url("../images/filetypes/zip_gray.png"); }
/* Activities */ /* Activities */
.icon-dmsf-file-revision { background-image: url(../../../images/document.png); } .icon-dmsf-file-revision { background-image: url("../../../images/document.png"); }
/* Links */ /* Links */
.dmsf-gray { color: #AAA } .dmsf-gray { color: #AAA }
@ -222,18 +224,18 @@ div[id*="revision_access_"] {
} }
/* Search results */ /* Search results */
.icon-dmsf-file { background-image: url(../../../images/document.png); } .icon-dmsf-file { background-image: url("../../../images/document.png"); }
/* DMSF tree view */ /* DMSF tree view */
.dmsf-hidden { display:none; } .dmsf-hidden { display: none; }
.dmsf-tree:not(.dmsf-child) span.dmsf-expander { cursor: pointer; } .dmsf-tree:not(.dmsf-child) span.dmsf-expander { cursor: pointer; }
.dmsf-tree.dmsf-expanded span.dmsf-expander { .dmsf-tree.dmsf-expanded span.dmsf-expander {
background: url(../../../images/arrow_down.png) no-repeat 0 50%; background: url("../../../images/arrow_down.png") no-repeat 0 50%;
padding-left: 16px; padding-left: 16px;
} }
.dmsf-tree.dmsf-child span.dmsf-expander { padding-left: 16px; } .dmsf-tree.dmsf-child span.dmsf-expander { padding-left: 16px; }
.dmsf-tree.dmsf-collapsed span.dmsf-expander { .dmsf-tree.dmsf-collapsed span.dmsf-expander {
background: url(../../../images/arrow_right.png) no-repeat 0 50%; background: url("../../../images/arrow_right.png") no-repeat 0 50%;
padding-left: 16px; padding-left: 16px;
} }
.dmsf-tree.idnt-1 td.dmsf-title { padding-left: 1.5em; } .dmsf-tree.idnt-1 td.dmsf-title { padding-left: 1.5em; }
@ -270,11 +272,11 @@ span.fileover {
} }
.dmsf-uploader { .dmsf-uploader {
padding:10px; padding: 10px;
margin-bottom: 20px; margin-bottom: 20px;
background-color:#f6f6f6; background-color: #f6f6f6;
color:#505050; color: #505050;
line-height:1.5em; line-height: 1.5em;
border: 1px solid #e4e4e4; border: 1px solid #e4e4e4;
word-wrap: break-word; word-wrap: break-word;
border-radius: 3px; border-radius: 3px;
@ -291,52 +293,51 @@ span.fileover {
} }
#dmsf_attachments_fields input.description { #dmsf_attachments_fields input.description {
margin-left:4px; margin-left: 4px;
width:340px; width: 340px;
} }
#dmsf_attachments_fields span { #dmsf_attachments_fields span {
display:block; white-space: nowrap;
white-space:nowrap;
} }
#dmsf_attachments_fields input.filename { #dmsf_attachments_fields input.filename {
border:0; border: 0;
height:1.8em; height: 1.8em;
width:250px; width: 250px;
color:#555; color: #555;
background-color:inherit; background-color: inherit;
background:url(../../../images/attachment.png) no-repeat 1px 50%; background: url("../../../images/attachment.png") no-repeat 1px 50%;
padding-left: 18px; padding-left: 18px;
} }
#dmsf_attachments_fields .ajax-waiting input.filename { #dmsf_attachments_fields .ajax-waiting input.filename {
background:url(../../../images/hourglass.png) no-repeat 0 50%; background: url("../../../images/hourglass.png") no-repeat 0 50%;
} }
#dmsf_attachments_fields .ajax-loading input.filename { #dmsf_attachments_fields .ajax-loading input.filename {
background:url(../../../images/loading.gif) no-repeat 0 50%; background: url("../../../images/loading.gif") no-repeat 0 50%;
} }
#dmsf_attachments_fields div.ui-progressbar { #dmsf_attachments_fields div.ui-progressbar {
width: 100px; width: 100px;
height:14px; height: 14px;
margin: 2px 0 -5px 8px; margin: 2px 0 -5px 8px;
display: inline-block; display: inline-block;
} }
#dmsf_links_attachments_fields span { #dmsf_links_attachments_fields span {
display:block; display: block;
white-space:nowrap; white-space: nowrap;
} }
#dmsf_links_attachments_fields input.filename { #dmsf_links_attachments_fields input.filename {
border:0; border: 0;
height:1.8em; height: 1.8em;
width:250px; width: 250px;
color:#555; color: #555;
background-color:inherit; background-color: inherit;
background:url(../../../images/link.png) no-repeat 1px 50%; background: url("../../../images/link.png") no-repeat 1px 50%;
padding-left: 18px; padding-left: 18px;
} }
@ -345,7 +346,7 @@ span.fileover {
} }
a.dmsf-scroll-down { a.dmsf-scroll-down {
background: url(../../../images/arrow_down.png) no-repeat 5px 50%; background: url("../../../images/arrow_down.png") no-repeat 5px 50%;
background-color: #759FCF; background-color: #759FCF;
text-decoration: none; text-decoration: none;
color: #FFFFFF; color: #FFFFFF;
@ -370,15 +371,15 @@ div.dmsf-scroll {
} }
/* New link form */ /* New link form */
#dmsf_link_target_file_id, #dmsf_link_target_folder_id, #dmsf_link_target_project_id, #dmsf_link_name{ #dmsf_link_target_file_id, #dmsf_link_target_folder_id, #dmsf_link_target_project_id, #dmsf_link_name {
min-width: 40%; min-width: 40%;
} }
#dmsf_link_external{ #dmsf_link_external {
display: none; display: none;
} }
.dmsf_attachments_label{ .dmsf_attachments_label {
vertical-align: middle; vertical-align: middle;
} }
@ -394,5 +395,5 @@ div.dmsf-scroll {
/* Wiki toolbar */ /* Wiki toolbar */
.jstb_dmsf { .jstb_dmsf {
background-image: url('../images/jstoolbar/bt_dmsf.png'); background-image: url("../images/jstoolbar/bt_dmsf.png");
} }

View File

@ -489,6 +489,8 @@ cs:
text_dmsf_webdav_digest_reset: Je vyžadováno vaše heslo pro vygenerování nového DMSF WebDAV digestu. text_dmsf_webdav_digest_reset: Je vyžadováno vaše heslo pro vygenerování nového DMSF WebDAV digestu.
notice_webdav_digest_reset: Váš DMSF WebDAV digest byl resetován. notice_webdav_digest_reset: Váš DMSF WebDAV digest byl resetován.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -484,6 +484,8 @@ de:
text_dmsf_webdav_digest_reset: Bitte geben Sie Ihr Passwort ein, um einen neuen DMS WebDAV Digest zu generieren. text_dmsf_webdav_digest_reset: Bitte geben Sie Ihr Passwort ein, um einen neuen DMS WebDAV Digest zu generieren.
notice_webdav_digest_reset: Ihr DMS WebDAV Digest wurde zurückgesetzt. notice_webdav_digest_reset: Ihr DMS WebDAV Digest wurde zurückgesetzt.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: Von mir gesperrte Dokumente dmsf_locked_documents: Von mir gesperrte Dokumente

View File

@ -488,6 +488,8 @@ en:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -488,6 +488,8 @@ es:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -467,6 +467,8 @@ fa:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: اسناد قفل شده‌ی من dmsf_locked_documents: اسناد قفل شده‌ی من

View File

@ -489,6 +489,8 @@ fr:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -489,6 +489,8 @@ hu:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -488,6 +488,8 @@ it: # Italian strings thx 2 Matteo Arceci!
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -490,6 +490,8 @@ ja:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: 自分がロック中の文書 dmsf_locked_documents: 自分がロック中の文書

View File

@ -488,6 +488,8 @@ ko:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: 내 잠긴 파일 dmsf_locked_documents: 내 잠긴 파일

View File

@ -488,6 +488,8 @@ nl:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -487,6 +487,8 @@ pl:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -488,6 +488,8 @@ pt-BR:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -489,6 +489,8 @@ sl:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -490,6 +490,8 @@ uk:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: Мої заблоковані документи dmsf_locked_documents: Мої заблоковані документи

View File

@ -487,6 +487,8 @@ zh-TW:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -489,6 +489,8 @@ zh:
text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest. text_dmsf_webdav_digest_reset: You are supposed to enter your password to generate a new DMSF WebDAV digest.
notice_webdav_digest_reset: Your DMSF WebDAV digest was reset. notice_webdav_digest_reset: Your DMSF WebDAV digest was reset.
label_dmsf_commit: Commit
easy_pages: easy_pages:
modules: modules:
dmsf_locked_documents: My locked documents dmsf_locked_documents: My locked documents

View File

@ -157,7 +157,8 @@ module RedmineDmsf
end end
# Attach DMS documents # Attach DMS documents
uploaded_files = params[:dmsf_attachments] uploaded_files = params[:dmsf_attachments]
if uploaded_files details = params[:committed_files]
if uploaded_files && details
system_folder = issue.system_folder(create: true) system_folder = issue.system_folder(create: true)
uploaded_files.each do |key, uploaded_file| uploaded_files.each do |key, uploaded_file|
upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file) upload = DmsfUpload.create_from_uploaded_attachment(issue.project, system_folder, uploaded_file)
@ -166,7 +167,11 @@ module RedmineDmsf
uploaded_file[:disk_filename] = upload.disk_filename uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:name] = upload.name uploaded_file[:name] = upload.name
uploaded_file[:title] = upload.title uploaded_file[:title] = upload.title
uploaded_file[:version] = 1 uploaded_file[:description] = details[key][:description]
uploaded_file[:comment] = details[key][:comment]
uploaded_file[:version_major] = details[key][:version_major]
uploaded_file[:version_minor] = details[key][:version_minor]
uploaded_file[:version_patch] = details[key][:version_patch]
uploaded_file[:size] = upload.size uploaded_file[:size] = upload.size
uploaded_file[:mime_type] = upload.mime_type uploaded_file[:mime_type] = upload.mime_type
uploaded_file[:tempfile_path] = upload.tempfile_path uploaded_file[:tempfile_path] = upload.tempfile_path
@ -174,6 +179,7 @@ module RedmineDmsf
if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present? if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present?
uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i
end end
uploaded_file[:custom_field_values] = details[key][:custom_field_values]
end end
DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder, context[:controller], DmsfUploadHelper.commit_files_internal uploaded_files, issue.project, system_folder, context[:controller],
issue, new_object: @new_object issue, new_object: @new_object

View File

@ -163,8 +163,9 @@ module RedmineDmsf
html = description ? +'<p' : +'<div' html = description ? +'<p' : +'<div'
if User.current.pref.dmsf_attachments_upload_choice == 'Attachments' && if User.current.pref.dmsf_attachments_upload_choice == 'Attachments' &&
allowed_to_attach_attachments(container) allowed_to_attach_attachments(container)
html << ' style="display: none;">' html << ' style="display: none;"'
end end
html << '>'
if label if label
html << "<label>#{l(:label_document_plural)}</label>" html << "<label>#{l(:label_document_plural)}</label>"
html << '<span class="attachments-container dmsf-uploader">' html << '<span class="attachments-container dmsf-uploader">'
@ -176,7 +177,7 @@ module RedmineDmsf
locals: { container: container, locals: { container: container,
multiple: true, multiple: true,
description: description, description: description,
awf: true } }) awf: false } })
html << '</span>' html << '</span>'
html << (description ? '</p>' : '</div>') html << (description ? '</p>' : '</div>')
html html

View File

@ -41,7 +41,11 @@ module RedmineDmsf
uploaded_file[:disk_filename] = upload.disk_filename uploaded_file[:disk_filename] = upload.disk_filename
uploaded_file[:name] = upload.name uploaded_file[:name] = upload.name
uploaded_file[:title] = upload.title uploaded_file[:title] = upload.title
uploaded_file[:version] = 1 uploaded_file[:description] = details[key][:description]
uploaded_file[:comment] = details[key][:comment]
uploaded_file[:version_major] = details[key][:version_major]
uploaded_file[:version_minor] = details[key][:version_minor]
uploaded_file[:version_patch] = details[key][:version_patch]
uploaded_file[:size] = upload.size uploaded_file[:size] = upload.size
uploaded_file[:mime_type] = upload.mime_type uploaded_file[:mime_type] = upload.mime_type
uploaded_file[:tempfile_path] = upload.tempfile_path uploaded_file[:tempfile_path] = upload.tempfile_path
@ -49,6 +53,7 @@ module RedmineDmsf
if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present? if params[:dmsf_attachments_wfs].present? && params[:dmsf_attachments_wfs][key].present?
uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i uploaded_file[:workflow_id] = params[:dmsf_attachments_wfs][key].to_i
end end
uploaded_file[:custom_field_values] = details[key][:custom_field_values]
end end
DmsfUploadHelper.commit_files_internal uploaded_files, easy_crm_case.project, system_folder, self, DmsfUploadHelper.commit_files_internal uploaded_files, easy_crm_case.project, system_folder, self,
easy_crm_case, new_object: false easy_crm_case, new_object: false