#1136 project tree
This commit is contained in:
parent
a1a9a0b8ba
commit
bbf76406c9
@ -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
|
||||
|
||||
@ -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?
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user