From bbf76406c95c0e25005500d21026d6f1ff658cda Mon Sep 17 00:00:00 2001 From: "karel.picman@lbcfree.net" Date: Mon, 10 Aug 2020 15:09:48 +0200 Subject: [PATCH] #1136 project tree --- lib/redmine_dmsf/webdav/base_resource.rb | 33 ++------------------- lib/redmine_dmsf/webdav/dmsf_resource.rb | 30 ++++++++++--------- lib/redmine_dmsf/webdav/index_resource.rb | 7 +---- lib/redmine_dmsf/webdav/project_resource.rb | 18 +++++------ lib/redmine_dmsf/webdav/resource_proxy.rb | 6 ++-- 5 files changed, 28 insertions(+), 66 deletions(-) diff --git a/lib/redmine_dmsf/webdav/base_resource.rb b/lib/redmine_dmsf/webdav/base_resource.rb index a8f2b125..958239be 100644 --- a/lib/redmine_dmsf/webdav/base_resource.rb +++ b/lib/redmine_dmsf/webdav/base_resource.rb @@ -24,6 +24,7 @@ require 'dav4rack' module RedmineDmsf module Webdav + class BaseResource < DAV4Rack::Resource include Redmine::I18n include ActionView::Helpers::NumberHelper @@ -101,9 +102,6 @@ module RedmineDmsf end def options(request, response) - if ((@path.length > 1) && ((!project) || (!project.module_enabled?('dmsf')))) - return NotFound - end if @__proxy.read_only response['Allow'] ||= 'OPTIONS,HEAD,GET,PROPFIND' end @@ -165,38 +163,11 @@ module RedmineDmsf end def load_projects(project_scope) - project_scope - .where.not(status: Project::STATUS_ARCHIVED) - .find_each do |p| - if dmsf_visible?(p) || dmsf_enabled?(p) + project_scope.visible.find_each do |p| @children << child_project(p) - end end end - private - - def dmsf_enabled?(prj) - prj.module_enabled?(:dmsf) && Project.allowed_to_condition(User.current, :view_dmsf_folders) - end - - def dmsf_visible?(prj) - Rails.cache.fetch("#{prj.cache_key_with_version}/dmsf-visible", expires_in: 12.hours) do - dmsf_visible_recursive? prj - end - end - - def dmsf_visible_recursive?(prj) - prj.children.each do |p| - if dmsf_enabled?(p) - return true - else - return dmsf_visible?(p) - end - end - false - end - end end end diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb index 281ff29a..0149ce92 100644 --- a/lib/redmine_dmsf/webdav/dmsf_resource.rb +++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb @@ -59,13 +59,19 @@ module RedmineDmsf elsif subproject # Projects load_projects subproject.children - # Folders - subproject.dmsf_folders.visible.pluck(:title).each do |title| - @children.push child(title) - end - # Files - subproject.dmsf_files.visible.pluck(:name).each do |name| - @children.push child(name) + if project && project.module_enabled?('dmsf') + # Folders + if User.current.allowed_to?(:view_dmsf_folders, project) + subproject.dmsf_folders.visible.pluck(:title).each do |title| + @children.push child(title) + end + end + # Files + if User.current.allowed_to?(:view_dmsf_files, project) + subproject.dmsf_files.visible.pluck(:name).each do |name| + @children.push child(name) + end + end end end end @@ -73,14 +79,10 @@ module RedmineDmsf end # Does the object exist? - # If it is either a folder or a file, then it exists + # If it is either a subproject or a folder or a file, then it exists def exist? - project && project.module_enabled?('dmsf') && (folder || file || subproject) && - (User.current.admin? || User.current.allowed_to?(:view_dmsf_folders, project)) - end - - def really_exist? - project && project.module_enabled?('dmsf') && (folder || file || subproject) + subproject || (project && project.module_enabled?('dmsf') && (folder || file) && + (User.current.admin? || User.current.allowed_to?(:view_dmsf_folders, project))) end # Is this entity a folder? diff --git a/lib/redmine_dmsf/webdav/index_resource.rb b/lib/redmine_dmsf/webdav/index_resource.rb index 238f3874..45e2c709 100644 --- a/lib/redmine_dmsf/webdav/index_resource.rb +++ b/lib/redmine_dmsf/webdav/index_resource.rb @@ -52,14 +52,9 @@ module RedmineDmsf def exist? true end - - # Index resource ALWAYS really exists - def really_exist? - true - end def etag - sprintf('%x-%x-%x', children.count, 4096, Time.current.to_i) + sprintf '%x-%x-%x', children.count, 4096, Time.current.to_i end def content_type diff --git a/lib/redmine_dmsf/webdav/project_resource.rb b/lib/redmine_dmsf/webdav/project_resource.rb index 674b029b..a3daf0ac 100644 --- a/lib/redmine_dmsf/webdav/project_resource.rb +++ b/lib/redmine_dmsf/webdav/project_resource.rb @@ -49,35 +49,31 @@ module RedmineDmsf end def exist? - really_exist? && User.current.allowed_to?(:view_dmsf_folders, project) - end - - def really_exist? - project && project.module_enabled?('dmsf') + project&.visible? end def collection? - exist? + true end def creation_date - project.created_on if project + project&.created_on end def last_modified - project.updated_on if project + project&.updated_on end def etag - sprintf('%x-%x-%x', 0, 4096, last_modified.to_i) + sprintf '%x-%x-%x', 0, 4096, last_modified.to_i end def name - ProjectResource.create_project_name(project) + ProjectResource.create_project_name project end def long_name - project.name if project + project&.name end def content_type diff --git a/lib/redmine_dmsf/webdav/resource_proxy.rb b/lib/redmine_dmsf/webdav/resource_proxy.rb index 9f131e4f..66920ad8 100644 --- a/lib/redmine_dmsf/webdav/resource_proxy.rb +++ b/lib/redmine_dmsf/webdav/resource_proxy.rb @@ -85,10 +85,6 @@ module RedmineDmsf @resource_c.exist? end - def really_exist? - @resource_c.really_exist? - end - def creation_date @resource_c.creation_date end @@ -179,6 +175,8 @@ module RedmineDmsf def propstats(response, stats) @resource_c.propstats response, stats end + end + end end