#1199 Breakdown structure of folders

This commit is contained in:
karel.picman@lbcfree.net 2021-01-06 17:55:36 +01:00
parent f07e58abdb
commit 07857b5ecb
2 changed files with 52 additions and 16 deletions

View File

@ -50,20 +50,20 @@ module DmsfQueriesHelper
when :id when :id
case item.type case item.type
when 'file', 'file-link' when 'file', 'file-link'
if item.deleted && (item.deleted > 0) if item&.deleted > 0
super column, item, value super column, item, value
else else
link_to h(value), dmsf_file_path(id: item.id) link_to h(value), dmsf_file_path(id: item.id)
end end
when 'folder', 'folder-link' when 'folder', 'folder-link'
if item.id if item.id
if item.deleted && (item.deleted > 0) if item&.deleted > 0
super column, item, value super column, item, value
else else
link_to h(value), edit_dmsf_path(id: item.project_id, folder_id: item.id) link_to h(value), edit_dmsf_path(id: item.project_id, folder_id: item.id)
end end
else else
if item.deleted && (item.deleted > 0) if item&.deleted > 0
super column, item, item.project_id super column, item, item.project_id
else else
link_to h(item.project_id), edit_root_dmsf_path(id: item.project_id) link_to h(item.project_id), edit_root_dmsf_path(id: item.project_id)
@ -90,42 +90,50 @@ module DmsfQueriesHelper
end end
case item.type case item.type
when 'folder' when 'folder'
if item.deleted && (item.deleted > 0) if item&.deleted > 0
tag = content_tag('span', value, class: 'icon icon-folder') tag = content_tag('span', value, class: 'icon icon-folder')
else else
tag = "<span class=\"dmsf_expander\" onclick=\"dmsfToggle(this, '#{item.id}','#{escape_javascript(expand_folder_dmsf_path)}')\"></span>".html_safe + tag = link_to(h(value), dmsf_folder_path(id: item.project, folder_id: item.id), class: 'icon icon-folder')
link_to(h(value), dmsf_folder_path(id: item.project, folder_id: item.id), class: 'icon icon-folder') unless filter_any?
tag = "<span class=\"dmsf_expander\" onclick=\"dmsfToggle(this, '#{item.id}','#{escape_javascript(expand_folder_dmsf_path)}')\"></span>".html_safe + tag
end
end end
tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:title_filename_for_download)) tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:title_filename_for_download))
when 'folder-link' when 'folder-link'
if item.deleted && (item.deleted > 0) if item&.deleted > 0
tag = content_tag('span', value, class: 'icon icon-folder') tag = content_tag('span', value, class: 'icon icon-folder')
else else
tag = "<span class=\"dmsf_expander\"></span>".html_safe +
# For links we use revision_id containing dmsf_folder.id in fact # For links we use revision_id containing dmsf_folder.id in fact
link_to(h(value), dmsf_folder_path(id: item.project, folder_id: item.revision_id), class: 'icon icon-folder') tag = link_to(h(value), dmsf_folder_path(id: item.project, folder_id: item.revision_id), class: 'icon icon-folder')
unless filter_any?
tag = "<span class=\"dmsf_expander\"></span>".html_safe + tag
end
end end
tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:label_target_folder)) tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:label_target_folder))
when 'file', 'file-link' when 'file', 'file-link'
if item.deleted && (item.deleted > 0) if item&.deleted > 0
tag = content_tag('span', value, class: "icon icon-file #{DmsfHelper.filetype_css(item.filename)}") tag = content_tag('span', value, class: "icon icon-file #{DmsfHelper.filetype_css(item.filename)}")
else else
# For links we use revision_id containing dmsf_file.id in fact # For links we use revision_id containing dmsf_file.id in fact
file_view_url = url_for({ controller: :dmsf_files, action: 'view', id: (item.type == 'file') ? item.id : item.revision_id }) file_view_url = url_for({ controller: :dmsf_files, action: 'view', id: (item.type == 'file') ? item.id : item.revision_id })
content_type = Redmine::MimeType.of(value) content_type = Redmine::MimeType.of(value)
content_type = 'application/octet-stream' if content_type.blank? content_type = 'application/octet-stream' if content_type.blank?
tag = "<span class=\"dmsf_expander\"></span>".html_safe + tag = link_to(h(value), file_view_url, target: '_blank',
link_to(h(value), file_view_url, target: '_blank',
class: "icon icon-file #{DmsfHelper.filetype_css(item.filename)}", class: "icon icon-file #{DmsfHelper.filetype_css(item.filename)}",
'data-downloadurl': "#{content_type}:#{h(value)}:#{file_view_url}") 'data-downloadurl': "#{content_type}:#{h(value)}:#{file_view_url}")
unless filter_any?
tag = "<span class=\"dmsf_expander\"></span>".html_safe + tag
end
end end
tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:title_filename_for_download)) tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:title_filename_for_download))
when 'url-link' when 'url-link'
if item.deleted && (item.deleted > 0) if item&.deleted > 0
tag = content_tag('span', value, class: 'icon icon-link') tag = content_tag('span', value, class: 'icon icon-link')
else else
tag = "<span class=\"dmsf_expander\"></span>".html_safe + tag = link_to(h(value), item.filename, target: '_blank', class: 'icon icon-link')
link_to(h(value), item.filename, target: '_blank', class: 'icon icon-link') unless filter_any?
tag = "<span class=\"dmsf_expander\"></span>".html_safe + tag
end
end end
tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:field_url)) tag + content_tag('div', item.filename, class: 'dmsf-filename', title: l(:field_url))
else else
@ -135,7 +143,7 @@ module DmsfQueriesHelper
number_to_human_size value number_to_human_size value
when :workflow when :workflow
if value if value
if item.workflow_id && (!(item.deleted && (item.deleted > 0))) if item.workflow_id && (!(item&.deleted > 0))
if item.type == 'file' if item.type == 'file'
url = log_dmsf_workflow_path(project_id: item.project_id, id: item.workflow_id, dmsf_file_id: item.id) url = log_dmsf_workflow_path(project_id: item.project_id, id: item.workflow_id, dmsf_file_id: item.id)
else else
@ -173,4 +181,13 @@ module DmsfQueriesHelper
end end
end end
def filter_any?
if params[:v]
params[:v].each do |filter|
return true if (filter.size > 1) && filter[1].all?{ |v| v.present? }
end
end
false
end
end end

View File

@ -180,6 +180,25 @@ class DmsfControllerTest < RedmineDmsf::Test::TestCase
assert_select 'table.dmsf' assert_select 'table.dmsf'
# CSV export # CSV export
assert_select 'a.csv' assert_select 'a.csv'
# 'Zero Size File' document and an expander is present
assert_select 'a', text: @file10.title
assert_select 'span.dmsf_expander'
end
def test_show_filters_found
get :show, params: { id: @project1.id, f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['Zero'] } }
assert_response :success
# 'Zero Size File' document
assert_select 'a', text: @file10.title
# No expander if a filter is set
assert_select 'span.dmsf_expander', count: 0
end
def test_show_filters_not_found
get :show, params: { id: @project1.id, f: ['title'], op: { 'title' => '~' }, v: { 'title' => ['xxx'] } }
assert_response :success
# 'Zero Size File' document
assert_select 'a', text: @file10.title, count: 0
end end
def test_show_without_file_manipulation def test_show_without_file_manipulation