Index: webfm.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/webfm/webfm.module,v
retrieving revision 1.2.2.40
diff -u -p -r1.2.2.40 webfm.module
--- webfm.module 21 Apr 2008 14:08:12 -0000 1.2.2.40
+++ webfm.module 5 Jun 2008 15:36:13 -0000
@@ -198,32 +198,49 @@ function webfm_admin_settings_validate($
$usersize = $form_values['webfm_usersize_'. $rid];
$role_root_dir_name = $form_values['root_dir_'.$rid];
- if(!empty($role_root_dir_name)) {
- if($valid_webfm_root) {
- if(!preg_match('/^[0-9a-zA-Z]/', $role_root_dir_name)) {
+ if (!empty($role_root_dir_name)) {
+ if ($valid_webfm_root) {
+ if (!preg_match('/^[0-9a-zA-Z]/', $role_root_dir_name)) {
form_set_error('root_dir_'. $rid, t('The leading character of the %role root directory must be alphanumeric.', array('%role' => $role)));
- } else if(preg_match('[\.]', $role_root_dir_name)) {
+ } else if (preg_match('[\.]', $role_root_dir_name)) {
form_set_error('root_dir_'. $rid, t('The %role root directory name is not valid.', array('%role' => $role)));
} else {
- $role_root_dir = $webfm_root_dir."/".$role_root_dir_name;
+ $role_root_dir = $webfm_root_dir ."/". $role_root_dir_name;
file_check_directory($role_root_dir, FILE_CREATE_DIRECTORY, 'root_dir_'.$rid);
}
} else {
form_set_error('root_dir_'. $rid, t('The WebFM root directory must be valid for the %role root directory name to be valid.', array('%role' => $role)));
}
+ }
+
+ foreach ($form_values['groups'] as $gid => $group) {
+ $group_root_dir_name = $form_values['root_dir_group_'. $gid];
+ if (!empty($group_root_dir_name)) {
+ if ($valid_webfm_root) {
+ if (!preg_match('/^[0-9a-zA-Z]/', $group_root_dir_name)) {
+ form_set_error('root_dir_group_'. $gid, t('The leading character of the %group root directory must be alphanumeric.', array('%group' => $group)));
+ } else if (preg_match('[\.]', $group_root_dir_name)) {
+ form_set_error('root_dir_group_'. $gid, t('The %group root directory name is not valid.', array('%group' => $group)));
+ } else {
+ $group_root_dir = $webfm_root_dir ."/". $group_root_dir_name;
+ file_check_directory($group_root_dir, FILE_CREATE_DIRECTORY, 'root_dir_group_'.$gid);
+ }
+ } else {
+ form_set_error('root_dir_group_'. $gid, t('The WebFM root directory must be valid for the %group root directory name to be valid.', array('%group' => $group)));
+ }
+ }
}
-
- if(!is_numeric($uploadsize) || ($uploadsize <= 0)) {
+ if (!is_numeric($uploadsize) || ($uploadsize <= 0)) {
form_set_error('webfm_uploadsize_'. $rid, t('The %role file size limit must be a number and greater than zero.', array('%role' => $role)));
}
- if(!is_numeric($usersize) || ($usersize <= 0)) {
+ if (!is_numeric($usersize) || ($usersize <= 0)) {
form_set_error('webfm_usersize_'. $rid, t('The %role file size limit must be a number and greater than zero.', array('%role' => $role)));
}
- if($uploadsize > $max_upload_size) {
+ if ($uploadsize > $max_upload_size) {
form_set_error('webfm_uploadsize_'. $rid, $exceed_max_msg . $more_info);
$more_info = '';
}
- if($uploadsize > $usersize) {
+ if ($uploadsize > $usersize) {
form_set_error('webfm_uploadsize_'. $rid, t('The %role maximum file size per upload is greater than the total file size allowed per user', array('%role' => $role)));
}
}
@@ -378,6 +395,40 @@ function webfm_admin_settings() {
);
}
+
+
+//per group directories
+ if (module_exists('og')) {
+ $groups = og_all_groups_options();
+ $form['groups'] = array('#type' => 'value', '#value' => $groups);
+ $form['webfm_og_auto'] = array(
+ '#type' => 'checkbox',
+ '#default_value' => variable_get('webfm_og_auto', 0),
+ '#title' => t('Create new group folders'),
+ '#description' => t('Automatically create a new group folder when a group is created.'),
+ );
+ foreach ($groups as $gid => $group) {
+ $form["settings_group_". $gid] =
+ array('#type' => 'fieldset',
+ '#title' => t('Settings for @group group', array('@group' => $group)),
+ '#collapsible' => TRUE,
+ '#collapsed' => TRUE
+ );
+
+ $form["settings_group_". $gid]["root_dir_group_". $gid] =
+ array('#type' => 'textfield',
+ '#title' => t('Group Root directory'),
+ '#default_value' => variable_get("root_dir_group_". $gid, ''),
+ '#maxlength' => '100',
+ '#size' => '70',
+ '#description' => t('Root directory for this group.
+
This path is relative to "WebFM Root directory" set above.
+
If this directory path is compound then the path must already exist for this
+
setting to validate.'),
+ );
+ }
+ }
+
$form['attach'] =
array('#type' => 'fieldset',
'#title' => t('WebFM attachments'),
@@ -585,6 +636,21 @@ function webfm_nodeapi(&$node, $op, $tea
webfm_dbinsert_attach($node->nid, $fid, $i++);
}
}
+ //automatically create new group folder when group is added
+ if (module_exists('og') && variable_get('webfm_og_auto', 0) == 1) {
+ $groups = og_all_groups_options();
+ if ($groups[$node->nid]) {
+ // make the node title into a suitable directory name
+ $group_directory = trim($node->title);
+ $group_directory = drupal_strtolower($group_directory);
+ $group_directory = str_replace(array(' ', '-'), '_', $group_directory);
+ $group_directory = preg_replace('/[^a-z0-9_]/', '', $group_directory);
+ $group_root_dir = file_directory_path() .'/'. variable_get('webfm_root_dir', '') ."/". $group_directory;
+ file_check_directory($group_root_dir, FILE_CREATE_DIRECTORY, 'root_dir_group_'.$node->nid);
+ variable_set('root_dir_group_'. $node->nid, $group_directory);
+ }
+ }
+
break;
case 'update':
@@ -1010,7 +1076,8 @@ function webfm_ajax () {
//Build webfm directory tree
unset($_SESSION['tree_'.$webfm_root_path]);
$trees[0] = webfm_tree($root_dir, $webfm_root_path);
- } else {
+ }
+ else {
//clear static array of roles with webfm access ($webfm_roots cached only for 'read' op)
$webfm_roots = webfm_get_root_dirs(TRUE);
if(count($webfm_roots)) {
@@ -1029,14 +1096,30 @@ function webfm_ajax () {
$err .= t(' Root directory not set for @role role ', array('@role' => $webfm_access_roles[$key]));
}
}
- } else {
- $err = t('No root directory set in WebFM settings for this role');
- }
- }
-
- if(count($trees)) {
- webfm_json(array('status' => TRUE, 'tree' => $trees, 'current' => $webfm_root_path, 'admin' => $webfm_perm == WEBFM_ADMIN, 'err' => $err));
- } else {
+ }
+ $group_trees = array();
+ if (module_exists('og')) {
+ //clear static array of groups with directories ($webfm_roots cached only for 'read' op)
+ $webfm_group_roots = webfm_get_group_root_dirs(TRUE);
+ if(count($webfm_group_roots)) {
+ foreach($webfm_group_roots as $key => $sub_root) {
+ //Build webfm directory tree(s) for WEBFM_USER
+ if(!empty($sub_root)) {
+ $sub_root_path = $root_dir.$sub_root;
+ if(is_dir($sub_root_path)) {
+ $current = $sub_root;
+ unset($_SESSION['tree_'.$current]);
+ $trees[$key] = webfm_tree($root_dir, $current);
+ }
+ }
+ }
+ }
+ }
+ }
+ if (count($trees)) {
+ webfm_json(array('status' => TRUE, 'tree' => $trees, 'current' => $webfm_root_path, 'admin' => $webfm_perm == WEBFM_ADMIN, 'err' => $err));
+ }
+ else {
$err .= t(' No trees found.');
webfm_json(array('status' => FALSE, 'err' => $err));
}
@@ -1054,10 +1137,18 @@ function webfm_ajax () {
//role root must exist and this user must be a member of that role
$webfm_roots = webfm_get_root_dirs();
$root_role = trim(rawurldecode($_POST["param0"]));
- if(($root = variable_get("root_dir_".$root_role, '')) &&
+ if(($root = variable_get("root_dir_". $root_role, '')) &&
(array_key_exists($root_role, $webfm_roots))) {
- $current = "/".$root;
+ $current = "/". $root;
}
+ if (module_exists('og')) {
+ $webfm_group_roots = webfm_get_group_root_dirs();
+ $root_group = trim(rawurldecode($_POST["param0"]));
+ if(($root = variable_get("root_dir_group_". $root_group, '')) &&
+ (array_key_exists($root_group, $webfm_group_roots))) {
+ $current = "/". $root;
+ }
+ }
}
if(!isset($current)) {
webfm_json(array('status' => FALSE, 'data' => t('unknown tree')));
@@ -1102,6 +1193,17 @@ function webfm_ajax () {
break;
}
}
+ if (module_exists('og')) {
+ $webfm_group_roots = webfm_get_group_root_dirs();
+ foreach($webfm_group_roots as $key => $sub_root) {
+ // The read path must be contained within a legitimate group root dir for this user
+ if($sub_root && webfm_check_path($param0, $sub_root)) {
+ $perm_flag = TRUE;
+ break;
+ }
+ }
+ }
+
}
if($perm_flag) {
@@ -1905,7 +2007,35 @@ function webfm_get_root_dirs($flush = FA
return $webfm_roots;
}
-
+/**
+ * Helper function to get array of group root directories for a user
+ */
+function webfm_get_group_root_dirs($flush = FALSE) {
+ global $user;
+ static $webfm_roots = array();
+ static $webfm_access_groups = array();
+ //add per group directories
+ if($flush)
+ $webfm_access_groups = array();
+
+ // Roles with 'access webfm' perm
+ if (!count($webfm_access_groups)) {
+ $webfm_roots = array();
+ foreach ($user->og_groups as $key => $group) {
+ if ($group['is_active']) {
+ // Groups with directories that user is active in
+ $path = variable_get("root_dir_group_". $key, '');
+ if (!empty($path)) {
+ // Prevent redundant trees for roles with common root dir
+ if (!in_array($path, $webfm_roots)) {
+ $webfm_roots[$key] = "/". $path;
+ }
+ }
+ }
+ }
+ }
+ return $webfm_roots;
+}
/**
* Helper function to determine if a webfm_file record is modifiable by a
* user with 'access webfm'
@@ -1948,6 +2078,16 @@ function webfm_path_access($path) {
return TRUE;
}
}
+ //alternatively the read path may be in a legitimate group root dir for this user
+ if (module_exists('og')) {
+ $webfm_group_roots = webfm_get_group_root_dirs();
+ foreach($webfm_group_roots as $key => $sub_root) {
+ // The read path must be contained within a legitimate role root dir for this user
+ if(webfm_check_path($path, $root_dir.$sub_root)) {
+ return TRUE;
+ }
+ }
+ }
return FALSE;
}