? webfm-UsersCanManageFolders.patch
Index: webfm.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm.admin.inc,v
retrieving revision 1.4
diff -u -p -r1.4 webfm.admin.inc
--- webfm.admin.inc	19 Aug 2009 15:33:48 -0000	1.4
+++ webfm.admin.inc	2 Sep 2009 07:03:21 -0000
@@ -107,6 +107,14 @@ function webfm_admin_settings() {
           '#default_value' => variable_get('webfm_file_public', ''),
           '#description' => t('File is downloadable anonymously via webfm_send.')
           );
+          
+  // CeMe: added config value to permit user to create directories in folders structure
+  $form['file_perm']['webfm_users_allowed_create_folders'] =
+    array('#type' => 'checkbox',
+          '#title' => t('Folders can be created/renamed/deleted by users'),
+          '#default_value' => variable_get('webfm_users_allowed_create_folders', 0),
+          '#description' => t('Users are allowed to create, rename or delete folders in their directory struture and in the public folder.')
+          );
 
   $roles = user_roles(0,'access webfm');
   $form['roles'] = array('#type' => 'value', '#value' => $roles);
Index: webfm.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm.module,v
retrieving revision 1.37
diff -u -p -r1.37 webfm.module
--- webfm.module	19 Aug 2009 15:44:13 -0000	1.37
+++ webfm.module	2 Sep 2009 07:10:48 -0000
@@ -1022,7 +1022,8 @@ function webfm_ajax () {
 
             if(is_dir($source)) {
               //Only admins can delete directories (and contained files)
-              if($webfm_perm == WEBFM_ADMIN) {
+              // CeMe/LeDe: added second condition: OR users if it's allowed in webfm config:
+             if($webfm_perm == WEBFM_ADMIN || ($webfm_perm == WEBFM_USER && variable_get('webfm_users_allowed_create_folders', 0) == 1)) {
                 $err_arr[] = array();
                 $ret = webfm_delete_dir_recur($source, TRUE, $err_arr);
                 webfm_json(array('status' => $ret, 'data' => $err_arr));
@@ -1071,7 +1072,8 @@ function webfm_ajax () {
       //Create new directory
       case "mkdir":
         //Only admins can create directories
-        if($webfm_perm == WEBFM_ADMIN) {
+        // CeMe/LeDe: added second condition: OR users if it's allowed in webfm config:
+        if($webfm_perm == WEBFM_ADMIN || ($webfm_perm == WEBFM_USER && variable_get('webfm_users_allowed_create_folders', 0) == 1)) {
           if(isset($_POST["param0"])) {
             $source = $root_dir.trim(rawurldecode($_POST["param0"]));
             $dest = t("New_Folder");
@@ -1645,6 +1647,8 @@ function webfm_main () {
 
   $modulepath = drupal_get_path('module', 'webfm');
   drupal_add_js($modulepath.'/js/webfm.js');
+  // CeMe: added the line: The setting is passed to the JS:
+  drupal_add_js(array('webfm_users_allowed_create_folders' => variable_get('webfm_users_allowed_create_folders', 0)), 'setting');
   drupal_add_js('misc/collapse.js');
   drupal_add_css($modulepath.'/css/webfm.css');
 
Index: webfm_file.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm_file.inc,v
retrieving revision 1.12
diff -u -p -r1.12 webfm_file.inc
--- webfm_file.inc	19 Aug 2009 15:37:09 -0000	1.12
+++ webfm_file.inc	2 Sep 2009 07:11:08 -0000
@@ -91,7 +91,8 @@ function webfm_rename($source, $dest, $u
 
   //Directory
   //if target is a directory, new name is a unique path and we are an admin...
-  else if(is_dir($source) && !is_dir($dest) && ($uid == 1)) {
+  // CeMe/LeDe: added if we're admin OR its allowed for users (webfm config):
+  else if(is_dir($source) && !is_dir($dest) && ($uid == 1 || variable_get('webfm_users_allowed_create_folders', 0) == 1)) {
     //if the target isn't read-only
     if(@rename($source, $dest_temp)) {
       //directory rename is OK, back out, rename db files and rename dir again
Index: js/webfm.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/js/webfm.js,v
retrieving revision 1.31
diff -u -p -r1.31 webfm.js
--- js/webfm.js	19 Aug 2009 15:30:45 -0000	1.31
+++ js/webfm.js	2 Sep 2009 07:10:25 -0000
@@ -386,9 +386,10 @@ Webfm.commonInterface = function(parent)
     Webfm.menuHT.put('root', new Webfm.menuElement(Webfm.menu_msg["mkdir"], Webfm.menuMkdir, Webfm.menuAdmin));
     Webfm.menuHT.put('root', new Webfm.menuElement(Webfm.menu_msg["search"], Webfm.menuSearch, ''));
 
-    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["mkdir"], Webfm.menuMkdir, Webfm.menuAdmin));
-    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["rmdir"], Webfm.menuRemove, Webfm.menuAdmin));
-    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["rendir"], Webfm.menuRename, Webfm.menuAdmin));
+    // CeMe: changed last argument from "Webfm.menuAdmin" to "Webfm.menuAllowedToCreateDirs"
+    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["mkdir"], Webfm.menuMkdir, Webfm.menuAllowedToCreateDirs));
+    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["rmdir"], Webfm.menuRemove, Webfm.menuAllowedToCreateDirs));
+    Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["rendir"], Webfm.menuRename, Webfm.menuAllowedToCreateDirs));
     Webfm.menuHT.put('dir', new Webfm.menuElement(Webfm.menu_msg["search"], Webfm.menuSearch, ''));
 
     Webfm.menuHT.put('file', new Webfm.menuElement(Webfm.menu_msg["rm"], Webfm.menuRemove, Webfm.menuFileUid));
@@ -868,7 +869,8 @@ Webfm.list.prototype.callback = function
 //maintain 4 column table
 Webfm.list.prototype.adminCtl = function(admin) {
   col_span = getWebfmOwnerColumn() ? 4 : 3
-  if(admin) {
+  // CeMe/LeDe: added condition with drupal.settings:
+  if(admin || Drupal.settings.webfm_users_allowed_create_folders == 1) {
     if(Webfm.$('webfm-bcrumb-td').colSpan == col_span) {
       var wl = this;
       Webfm.$('webfm-bcrumb-td').colSpan = col_span - 1;
@@ -2082,6 +2084,11 @@ Webfm.menuAdmin = function() {
   return(Webfm.admin);
 }
 
+// CeMe: added this function to test if a user is allowed to create dirs
+Webfm.menuAllowedToCreateDirs = function() {
+  return(Webfm.admin || Drupal.settings.webfm_users_allowed_create_folders == 1);
+}
+
 Webfm.menuFileUid = function(obj) {
   //determine if we are the owner of this file
   return((Webfm.admin || obj.uid == getWebfmUid()) ? true : false);
