From 1ab1271e70d22f66525a12d26aa3b6bb75b815b4 Mon Sep 17 00:00:00 2001
From: root
Date: Mon, 9 Jul 2012 09:14:52 +0100
Subject: [PATCH 1/2] Starting devel 1.4.5 branch (again)
---
CHANGELOG.md | 4 ++++
init.rb | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bb23ac0d..f6418e26 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
Changelog for Redmine DMSF
==========================
+1.4.5: *Not yet released*
+-----------------------
+* New: Settings introduced to enable read-only or read-write stance to be taken with webdav
+
1.4.4p2: *2012-07-08*
-------------------
* Fix: Issue #22 - Webdav upload with passenger/nginx fails with server error (passenger class for request.body does not contain length method.
diff --git a/init.rb b/init.rb
index e9296442..be365815 100644
--- a/init.rb
+++ b/init.rb
@@ -24,7 +24,7 @@ Redmine::Plugin.register :redmine_dmsf do
name "DMSF"
author "Vit Jonas / Daniel Munn"
description "Document Management System Features"
- version "1.4.4p2 stable"
+ version "1.4.5 devel"
url "https://github.com/danmunn/redmine_dmsf"
author_url "https://code.google.com/p/redmine-dmsf/"
From 04064a9c9830031af36676f66a981f0fd2d99fba Mon Sep 17 00:00:00 2001
From: Daniel Munn
Date: Wed, 11 Jul 2012 15:23:32 +0100
Subject: [PATCH 2/2] Webdav R/RW functionality introduced
---
app/views/settings/_dmsf_settings.erb | 15 ++++++++++++++-
config/locales/en.yml | 5 ++++-
lib/redmine_dmsf/webdav/dmsf_resource.rb | 19 ++++++++++++++++---
3 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/app/views/settings/_dmsf_settings.erb b/app/views/settings/_dmsf_settings.erb
index 1094f4b9..822508b1 100644
--- a/app/views/settings/_dmsf_settings.erb
+++ b/app/views/settings/_dmsf_settings.erb
@@ -91,9 +91,22 @@
(<%=l(:label_default)%>: <%=l(:select_option_activated)%>)
<%= l(:note_webdav).html_safe %>
-
+<% if @settings["dmsf_webdav"].nil? || !@settings["dmsf_webdav"].empty? %>
+
+ <%=content_tag(:label, l(:label_webdav_strategy) + ":") %>
+ <%=select_tag("settings[dmsf_webdav_strategy]",
+ options_for_select([
+ [l(:select_option_webdav_readonly), "WEBDAV_READ_ONLY"],
+ [l(:select_option_webdav_readwrite), "WEBDAV_READ_WRITE"]],
+ :selected => @settings["dmsf_webdav_strategy"])) %>
+ (<%=l(:label_default)%>: <%=l(:select_option_webdav_readonly)%>)
+
+ <%= l(:note_webdav_strategy).html_safe %>
+
+<% end %>
+
<% begin
diff --git a/config/locales/en.yml b/config/locales/en.yml
index b1b5f52d..e15f1a0c 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -203,4 +203,7 @@ en:
:title_unlock_folder: "Unlock to allow changes for other members"
:title_lock_folder: "Lock to prevent changes for other members"
-
+ :select_option_webdav_readonly: "Read-only"
+ :select_option_webdav_readwrite: "Read/Write"
+ :label_webdav_strategy: "Webdav strategy"
+ :note_webdav_strategy: "Enables the administrator to decide if webdav is a read-only or read-write platform for end users."
diff --git a/lib/redmine_dmsf/webdav/dmsf_resource.rb b/lib/redmine_dmsf/webdav/dmsf_resource.rb
index 08efc576..e9d48794 100644
--- a/lib/redmine_dmsf/webdav/dmsf_resource.rb
+++ b/lib/redmine_dmsf/webdav/dmsf_resource.rb
@@ -27,6 +27,21 @@ module RedmineDmsf
@folder = false
end
+ #Here we make sure our folder and file methods are not aliased - it should shave a few cycles off of processing
+ def setup
+ @skip_alias |= [ :folder, :file, :folder?, :file? ]
+ end
+
+ # Here we hook into the fact that resources can have a pre-execution routine run for them
+ # Our sole job here is to ensure that any write functionality is restricted to relevent configuration
+ before do |resource, method_name|
+ #If our method is not one of the following, there is no point continuing.
+ if [ :put, :make_collection, :move, :copy, :delete, :lock, :unlock, :set_property ].include?(method_name)
+ webdav_setting = Setting.plugin_redmine_dmsf["dmsf_webdav_strategy"]
+ webdav_setting = "WEBDAV_READ_ONLY" if webdav_setting.nil?
+ raise BadGateway if webdav_setting == "WEBDAV_READ_ONLY"
+ end
+ end
# Gather collection of objects that denote current entities child entities
# Used for listing directories etc, implemented basic caching because otherwise
@@ -189,7 +204,7 @@ module RedmineDmsf
end
OK
end
-
+
# Process incoming MKCOL request
#
# Create a DmsfFolder at location requested, only if parent is a folder (or root)
@@ -548,8 +563,6 @@ module RedmineDmsf
%w(creationdate displayname getlastmodified getetag resourcetype getcontenttype getcontentlength supportedlock lockdiscovery)
end
-
-
private
# Prepare file for download using Rack functionality:
# Download (see RedmineDmsf::Webdav::Download) extends Rack::File to allow single-file