? 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);