diff -r fcf75e232c5b -r 0ff3ba646492 web/drupal/modules/imce/inc/subdir.inc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/drupal/modules/imce/inc/subdir.inc Fri Aug 21 16:26:26 2009 +0000 @@ -0,0 +1,92 @@ + 'markup', + '#value' => t('
Here you can create subdirectories for your users. Multiple directory creation is possible at a time with the * character. For example, specifying user*/foo will create foo named directories under each directory starting with user. */foo*/bar will create bar named directories under directories starting with foo in each directory of file system path.
'), + ); + $form['path'] = array( + '#title' => t('Directory path'), + '#type' => 'textfield', + '#default_value' => isset($form_state['values']['path']) ? $form_state['values']['path'] : '', + '#maxlength' => 255, + '#field_prefix' => file_directory_path() .'/', + ); + $form['submit'] = array('#type' => 'submit', '#value' => t('Create')); + return $form; +} + +/** + * Subdirectory form submit. + */ +function imce_form_subdirectory_submit($form, &$form_state) { + imce_create_subdirectories($form_state['values']['path'], file_directory_path()); + $form_state['redirect'] = FALSE; +} + +/** + * Create directories under root according to path. + */ +function imce_create_subdirectories($path, $root) { + $directories = explode('/', str_replace('\\', '/', $path)); + $paths = array($root); + + foreach ($directories as $directory) { + + //no asterisks. create the directory(s) + if (strpos($directory, '*') === FALSE) { + //check and create directories under each path. + foreach ($paths as $i => $path) { + $paths[$i] = $path = $path .'/'. $directory; + if (!file_check_location($path, $root) || !file_check_directory($path, FILE_CREATE_DIRECTORY)) { + drupal_set_message(t('Specified path must be under file sytem path.'), 'error'); + return FALSE; + } + } + } + + //asterisks. get matching subdirectories and update paths. + else { + $newpaths = array(); + $regexp = str_replace('*', '.*', $directory); + + //add matching paths. + foreach ($paths as $path) { + $newpaths = array_merge($newpaths, imce_get_subdirectories($path, $regexp)); + } + + //no matching paths + if (empty($newpaths)) { + drupal_set_message(t('No matching subdirectories found.'), 'error'); + return FALSE; + } + + $paths = $newpaths; + } + + } + + return TRUE; +} + +/** + * Scan directory and return directories matching the expression. + */ +function imce_get_subdirectories($dir, $expr = '') { + $directories = array(); + + if ($handle = @opendir($dir)) { + while (($file = readdir($handle)) !== FALSE) { + if ($file != '.' && $file != '..' && is_dir($dir .'/'. $file) && preg_match('/^'. $expr .'$/', $file)) { + $directories[] = $dir .'/'. $file; + } + } + closedir($handle); + } + + return $directories; +} \ No newline at end of file