diff --git a/app/views/dmsf_files/_link.html.erb b/app/views/dmsf_files/_link.html.erb
new file mode 100644
index 00000000..dd6e7d6f
--- /dev/null
+++ b/app/views/dmsf_files/_link.html.erb
@@ -0,0 +1,101 @@
+<%
+ # encoding: utf-8
+ #
+ # Redmine plugin for Document Management System "Features"
+ #
+ # Copyright (C) 2011-17 Karel Pičman
+ #
+ # This program is free software; you can redistribute it and/or
+ # modify it under the terms of the GNU General Public License
+ # as published by the Free Software Foundation; either version 2
+ # of the License, or (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+%>
+<% if link %>
+
+<% else %>
+
+<% end %>
+ <% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
+ <%= link_to(h(dmsf_file.title),
+ file_view_url,
+ :target => '_blank',
+ :class => "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
+ :title => h(dmsf_file.last_revision.try(:tooltip)),
+ 'data-downloadurl' => "#{dmsf_file.last_revision.detect_content_type}:#{h(dmsf_file.name)}:#{file_view_url}") %>
+ <% if dmsf_file.text? || dmsf_file.image? %>
+ <%= link_to l(:button_view),
+ file_view_url,
+ :class => 'icon-only icon-magnifier',
+ :title => l(:button_view) %>
+ <% end %>
+ <%= " - #{dmsf_file.description}" unless dmsf_file.description.blank? %>
+ (<%= number_to_human_size dmsf_file.last_revision.size %>)
+ <%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %>
+ <% # Command icons %>
+
+ <% # Details %>
+ <% if User.current.allowed_to? :file_manipulation, dmsf_file.project %>
+ <%= link_to('', dmsf_file_path(:id => dmsf_file),
+ :title => l(:link_details, :title => h(dmsf_file.last_revision.title)),
+ :class => 'icon icon-edit') %>
+ <% else %>
+
+ <% end %>
+ <% # Email %>
+ <%= link_to('', entries_operations_dmsf_path(:id => dmsf_file.project, :email_entries => 'email', :files => [dmsf_file.id]), :method => :post,
+ :title => l(:heading_send_documents_by_email),
+ :class => 'icon icon-email-disabled') %>
+ <% # Lock %>
+ <% if !dmsf_file.locked? %>
+ <%= link_to('', lock_dmsf_files_path(:id => dmsf_file),
+ :title => l(:title_lock_file),
+ :class => 'icon icon-lock') %>
+ <% elsif dmsf_file.unlockable? && (!dmsf_file.locked_for_user? || User.current.allowed_to?(:force_file_unlock, dmsf_file.project)) %>
+ <%= link_to('', unlock_dmsf_files_path(:id => dmsf_file),
+ :title => dmsf_file.get_locked_title,
+ :class => 'icon icon-unlock') %>
+ <% else %>
+
+ <% end %>
+ <% unless dmsf_file.locked? %>
+ <% # Notifications %>
+ <% if dmsf_file.notification %>
+ <%= link_to('', notify_deactivate_dmsf_files_path(:id => dmsf_file),
+ :title => l(:title_notifications_active_deactivate),
+ :class => 'icon icon-email') %>
+ <% else %>
+ <%= link_to('', notify_activate_dmsf_files_path(:id => dmsf_file),
+ :title => l(:title_notifications_not_active_activate),
+ :class => 'icon icon-email-add') %>
+ <% end %>
+ <% # Delete %>
+ <% if @issue.attributes_editable? && User.current.allowed_to?(:file_delete, dmsf_file.project) %>
+ <%= link_to('',
+ link ? dmsf_link_path(link, :commit => 'yes') : dmsf_file_path(:id => dmsf_file, :commit => 'yes'),
+ :data => {:confirm => l(:text_are_you_sure)},
+ :method => :delete,
+ :title => l(:title_delete),
+ :class => 'icon icon-del') %>
+ <% end %>
+ <% else %>
+
+
+ <% end %>
+ <% # Approval workflow %>
+ <% wf = DmsfWorkflow.find_by_id(dmsf_file.last_revision.dmsf_workflow_id) if dmsf_file.last_revision.dmsf_workflow_id %>
+ <%= render(:partial => 'dmsf_files/approval_workflow_button',
+ :locals => {:file => dmsf_file,
+ :file_approval_allowed => User.current.allowed_to?(:file_approval, dmsf_file.project),
+ :workflows_available => DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', dmsf_file.project.id]).exists?,
+ :project => dmsf_file.project, :wf => wf }) %>
+
+
diff --git a/app/views/dmsf_files/_links.html.erb b/app/views/dmsf_files/_links.html.erb
index d32d3fd1..b9d0ccea 100644
--- a/app/views/dmsf_files/_links.html.erb
+++ b/app/views/dmsf_files/_links.html.erb
@@ -20,114 +20,28 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
%>
-<% if dmsf_files.present? || dmsf_links.present? %>
+<% if links.present? %>
+ <%= l(:menu_dmsf) %>
- <% for dmsf_file in dmsf_files %>
- <% if dmsf_file.last_revision %>
-
- <% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
- <%= link_to(h(dmsf_file.title),
- file_view_url,
- :target => '_blank',
- :class => "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
- :title => h(dmsf_file.last_revision.try(:tooltip)),
- 'data-downloadurl' => "#{dmsf_file.last_revision.detect_content_type}:#{h(dmsf_file.name)}:#{file_view_url}") %>
- <% if dmsf_file.text? || dmsf_file.image? %>
- <%= link_to l(:button_view),
- file_view_url,
- :class => 'icon-only icon-magnifier',
- :title => l(:button_view) %>
- <% end %>
- <%= " - #{dmsf_file.description}" unless dmsf_file.description.blank? %>
- (<%= number_to_human_size dmsf_file.last_revision.size %>)
- <% if @issue.attributes_editable? && User.current.allowed_to?(:file_delete, dmsf_file.project) %>
- <%= link_to('',
- dmsf_file_path(:id => dmsf_file, :commit => 'yes'),
- :data => {:confirm => l(:text_are_you_sure)},
- :method => :delete,
- :title => l(:title_delete),
- :class => 'icon icon-del') %>
- <% end %>
- <%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %>
-
- <% wf = DmsfWorkflow.find_by_id(dmsf_file.last_revision.dmsf_workflow_id) if dmsf_file.last_revision.dmsf_workflow_id %>
- <%= render(:partial => 'dmsf_files/approval_workflow_button',
- :locals => {:file => dmsf_file,
- :file_approval_allowed => User.current.allowed_to?(:file_approval, dmsf_file.project),
- :workflows_available => DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', dmsf_file.project.id]).exists?,
- :project => dmsf_file.project, :wf => wf }) %>
-
-
- <% end %>
+ <% # DMS documents & links %>
+ <% links.each do |dmsf_file, link, create_at| %>
+ <%= render :partial => 'dmsf_files/link', :locals => { :dmsf_file => dmsf_file, :link => link } %>
<% end %>
+ <% # Thumbnails %>
<% if defined?(thumbnails) && thumbnails %>
- <% images = dmsf_files.select(&:image?) %>
- <% if images.any? %>
-
- <% images.each do |file| %>
-
- <%= link_to image_tag(dmsf_thumbnail_path(file)),
- url_for({:controller => :dmsf_files, :action => 'view', :id => file}),
- :alt => dmsf_file.title %>
-
- <% end %>
-
- <% end %>
- <% end %>
-
- <% for dmsf_link in dmsf_links %>
- <% dmsf_file = dmsf_link.target_file %>
- <% if dmsf_file.last_revision %>
-
- <% file_view_url = url_for({:controller => :dmsf_files, :action => 'view', :id => dmsf_file}) %>
- <%= link_to(h(dmsf_link.title),
- file_view_url,
- :target => '_blank',
- :class => "icon icon-file #{DmsfHelper.filetype_css(dmsf_file.name)}",
- :title => h(dmsf_file.last_revision.try(:tooltip)),
- 'data-downloadurl' => "#{dmsf_file.last_revision.detect_content_type}:#{h(dmsf_file.name)}:#{file_view_url}") %>
- <% if dmsf_file.text? || dmsf_file.image? %>
- <%= link_to l(:button_view),
- file_view_url,
- :class => 'icon-only icon-magnifier',
- :title => l(:button_view) %>
- <% end %>
- <%= " - #{dmsf_file.description}" unless dmsf_file.description.blank? %>
- (<%= number_to_human_size dmsf_file.last_revision.size %>)
- <% if @issue.attributes_editable? && User.current.allowed_to?(:file_delete, dmsf_file.project) %>
- <%= link_to('',
- dmsf_link_path(dmsf_link, :commit => 'yes'),
- :data => {:confirm => l(:text_are_you_sure)},
- :method => :delete,
- :title => l(:title_delete),
- :class => 'icon icon-del') %>
- <% end %>
- <%= dmsf_file.last_revision.user %>, <%= format_time(dmsf_file.last_revision.updated_at) %>
-
- <% wf = DmsfWorkflow.find_by_id(dmsf_file.last_revision.dmsf_workflow_id) if dmsf_file.last_revision.dmsf_workflow_id %>
- <%= render(:partial => 'dmsf_files/approval_workflow_button',
- :locals => {:file => dmsf_file,
- :file_approval_allowed => User.current.allowed_to?(:file_approval, dmsf_file.project),
- :workflows_available => DmsfWorkflow.where(['project_id = ? OR project_id IS NULL', dmsf_file.project.id]).exists?,
- :project => dmsf_file.project, :wf => wf }) %>
-
-
- <% end %>
- <% end %>
- <% if defined?(thumbnails) && thumbnails %>
- <% images = dmsf_links.map{ |link| link.target_file }.select(&:image?) %>
+ <% images = links.map{ |x| x[0] }.select(&:image?) %>
<% if images.any? %>
<% images.each do |file| %>
<%= link_to image_tag(dmsf_thumbnail_path(file)),
url_for({:controller => :dmsf_files, :action => 'view', :id => file}),
- :alt => dmsf_file.title %>
+ :alt => file.title %>
<% end %>
<% end %>
<% end %>
-