#1136 project tree

This commit is contained in:
karel.picman@lbcfree.net 2020-08-10 15:09:48 +02:00
parent a1a9a0b8ba
commit bbf76406c9
5 changed files with 28 additions and 66 deletions

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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