diff -r fcf75e232c5b -r 0ff3ba646492 web/drupal/modules/imce/imce.module --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/drupal/modules/imce/imce.module Fri Aug 21 16:26:26 2009 +0000 @@ -0,0 +1,192 @@ + 'File browser', + 'page callback' => 'imce_page', + 'access callback' => 'imce_access', + 'file' => 'inc/page.inc', + 'type' => MENU_CALLBACK, + ); + $items['admin/settings/imce'] = array( + 'title' => 'IMCE', + 'description' => 'Control how your image/file browser works.', + 'page callback' => 'imce_admin', + 'access arguments' => $access, + 'file' => 'inc/admin.inc', + ); + $items['admin/settings/imce/profiles'] = array( + 'title' => 'Settings', + 'type' => MENU_DEFAULT_LOCAL_TASK, + ); + $items['admin/settings/imce/subdirectory'] = array( + 'title' => 'Directory creation tool', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('imce_form_subdirectory'), + 'access arguments' => $access, + 'type' => MENU_LOCAL_TASK, + 'weight' => 1, + 'file' => 'inc/subdir.inc', + ); + $items['admin/settings/imce/profile'] = array( + 'title' => 'Add new profile', + 'page callback' => 'imce_profile_operations', + 'access arguments' => $access, + 'type' => MENU_CALLBACK, + 'file' => 'inc/admin.inc', + ); + $items['user/%user/imce'] = array( + 'title' => 'File browser', + 'page callback' => 'imce_user_page', + 'page arguments' => array(1), + 'access callback' => 'imce_user_page_access', + 'access arguments' => array(1), + 'file' => 'inc/page.inc', + 'type' => MENU_LOCAL_TASK, + 'weight' => 10, + ); + return $items; +} + +/** + * Implementation of hook_theme(). + */ +function imce_theme() { + $path = drupal_get_path('module', 'imce') .'/tpl'; + $theme['imce_admin']['function'] = 'imce_admin_theme'; + $theme['imce_directories']['function'] = 'imce_directories_theme'; + $theme['imce_thumbnails']['function'] = 'imce_thumbnails_theme'; + $theme['imce_file_list'] = array( + 'template' => 'imce-file-list', + 'arguments' => array('imce_ref' => NULL), + 'path' => $path, + ); + $theme['imce_content'] = array( + 'template' => 'imce-content', + 'arguments' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL), + 'path' => $path, + ); + $theme['imce_page'] = array( + 'template' => 'imce-page', + 'arguments' => array('content' => NULL), + 'path' => $path, + ); + return $theme; +} + +/** + * Implementation of hook_file_download(). + */ +function imce_file_download($file) { + if ($path = file_create_path($file)) { + if ($info = @getimagesize($path)) { + $type = $info['mime']; + } + else if (function_exists('finfo_file') && $finfo = @finfo_open(FILEINFO_MIME)) { + $type = finfo_file($finfo, $path); + finfo_close($finfo); + } + else if ($result = db_result(db_query("SELECT filemime FROM {files} WHERE filepath = '%s'", $path))) { + $type = $result; + } + else if (function_exists('mime_content_type')) { + $type = mime_content_type($path); + } + else { + $type = 'application/x-download'; + } + return array('Content-type: '. $type, 'Content-Length: '. filesize($path)); + } +} + +/** + * Implementation of hook_elements(). + */ +function imce_elements() { + return array('textarea' => array('#process' => array('imce_textarea'))); +} + +/** + * Inline image/link insertion to textareas. + */ +function imce_textarea($element) { + static $ids; + if (!isset($ids)) { + $ids = FALSE; + if (imce_access() && $setting = str_replace(' ', '', variable_get('imce_settings_textarea', ''))) { + $ids = array(); + foreach (explode(',', $setting) as $id) { + $ids[$id] = 1; + } + } + } + if ($ids && isset($ids[$element['#id']])) { + drupal_add_js(drupal_get_path('module', 'imce') .'/js/imce_set_inline.js'); + $element['#description'] .= '
'; + } + return $element; +} + +/** + * Get the profile for the user. + */ +function imce_user_profile($user) { + $profiles = variable_get('imce_profiles', array()); + if ($user->uid == 1 && isset($profiles[1])) { + return $profiles[1]; + } + else { + foreach (variable_get('imce_roles_profiles', array()) as $rid => $role) { + if (isset($user->roles[$rid]) && isset($profiles[$role['pid']])) { + return $profiles[$role['pid']]; + } + } + } + return FALSE; +} + +/** + * Check if the user has access to imce. + */ +function imce_access($user = FALSE) { + if ($user === FALSE) { + global $user; + } + + if ($user->uid == 1) { + return TRUE; + } + + $roles_profiles = variable_get('imce_roles_profiles', array()); + foreach ($user->roles as $rid => $name) { + if (isset($roles_profiles[$rid]['pid']) && $roles_profiles[$rid]['pid']) { + return TRUE; + } + } + + return FALSE; +} + +/** + * Defines access to user/{$account->uid}/imce for the $user. + */ +function imce_user_page_access($account, $user = FALSE) { + if ($user === FALSE) { + global $user; + } + + return $user->uid == 1 || ($account->uid == $user->uid && imce_access($user)); +} + +/** + * Check if the directory name is regular. + */ +function imce_reg_dir($dirname) { + return $dirname == '.' || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname)); +} \ No newline at end of file