danielebarchiesi@0: 'File browser', danielebarchiesi@0: 'page callback' => 'imce', danielebarchiesi@0: 'access callback' => 'imce_access', danielebarchiesi@0: 'access arguments' => array(FALSE, 1), danielebarchiesi@0: 'file' => 'inc/imce.page.inc', danielebarchiesi@0: 'type' => MENU_CALLBACK, danielebarchiesi@0: ); danielebarchiesi@0: $items['user/%user/imce'] = array( danielebarchiesi@0: 'title' => 'File browser', danielebarchiesi@0: 'page callback' => 'imce_user_page', danielebarchiesi@0: 'page arguments' => array(1), danielebarchiesi@0: 'access callback' => 'imce_user_page_access', danielebarchiesi@0: 'access arguments' => array(1), danielebarchiesi@0: 'file' => 'inc/imce.page.inc', danielebarchiesi@0: 'type' => MENU_LOCAL_TASK, danielebarchiesi@0: 'weight' => 10, danielebarchiesi@0: ); danielebarchiesi@0: $items['admin/config/media/imce'] = array( danielebarchiesi@0: 'title' => 'IMCE', danielebarchiesi@0: 'description' => 'Control how your image/file browser works.', danielebarchiesi@0: 'page callback' => 'imce_admin', danielebarchiesi@0: 'access arguments' => $access, danielebarchiesi@0: 'file' => 'inc/imce.admin.inc', danielebarchiesi@0: ); danielebarchiesi@0: $items['admin/config/media/imce/profile'] = array( danielebarchiesi@0: 'title' => 'Add new profile', danielebarchiesi@0: 'page callback' => 'imce_profile_operations', danielebarchiesi@0: 'access arguments' => $access, danielebarchiesi@0: 'type' => MENU_VISIBLE_IN_BREADCRUMB, danielebarchiesi@0: 'file' => 'inc/imce.admin.inc', danielebarchiesi@0: ); danielebarchiesi@0: return $items; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_permission(). danielebarchiesi@0: */ danielebarchiesi@0: function imce_permission() { danielebarchiesi@0: return array( danielebarchiesi@0: 'administer imce' => array( danielebarchiesi@0: 'title' => t('Administer IMCE'), danielebarchiesi@0: 'restrict access' => TRUE, danielebarchiesi@0: ), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_theme(). danielebarchiesi@0: */ danielebarchiesi@0: function imce_theme() { danielebarchiesi@0: $path = drupal_get_path('module', 'imce') . '/tpl'; danielebarchiesi@0: $theme['imce_admin'] = array('function' => 'imce_admin_theme', 'render element' => 'form'); danielebarchiesi@0: $theme['imce_directories'] = array('function' => 'imce_directories_theme', 'render element' => 'form'); danielebarchiesi@0: $theme['imce_thumbnails'] = array('function' => 'imce_thumbnails_theme', 'render element' => 'form'); danielebarchiesi@0: $theme['imce_root_text'] = array( danielebarchiesi@0: 'variables' => array('imce_ref' => NULL), danielebarchiesi@0: ); danielebarchiesi@0: $theme['imce_user_page'] = array( danielebarchiesi@0: 'variables' => array('account' => NULL), danielebarchiesi@0: ); danielebarchiesi@0: $theme['imce_file_list'] = array( danielebarchiesi@0: 'template' => 'imce-file-list', danielebarchiesi@0: 'variables' => array('imce_ref' => NULL), danielebarchiesi@0: 'path' => $path, danielebarchiesi@0: ); danielebarchiesi@0: $theme['imce_content'] = array( danielebarchiesi@0: 'template' => 'imce-content', danielebarchiesi@0: 'variables' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL), danielebarchiesi@0: 'path' => $path, danielebarchiesi@0: ); danielebarchiesi@0: $theme['imce_page'] = array( danielebarchiesi@0: 'template' => 'imce-page', danielebarchiesi@0: 'variables' => array('content' => NULL), danielebarchiesi@0: 'path' => $path, danielebarchiesi@0: ); danielebarchiesi@0: return $theme; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_file_download(). danielebarchiesi@0: * Support private downloads if not disabled. danielebarchiesi@0: */ danielebarchiesi@0: function imce_file_download($uri) { danielebarchiesi@0: $serve = file_uri_scheme($uri) == 'private' && !variable_get('imce_settings_disable_private', 1) && file_exists($uri) && strpos(basename($uri), '.'); danielebarchiesi@0: if ($serve) { danielebarchiesi@0: return array( danielebarchiesi@0: 'Content-type' => file_get_mimetype($uri), danielebarchiesi@0: 'Content-Length' => filesize($uri), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Implements hook_element_info(). danielebarchiesi@0: */ danielebarchiesi@0: function imce_element_info() { danielebarchiesi@0: return array('textarea' => array('#process' => array('imce_textarea'))); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Inline image/link insertion to textareas. danielebarchiesi@0: */ danielebarchiesi@0: function imce_textarea($element) { danielebarchiesi@0: static $regexp; danielebarchiesi@0: if (!isset($regexp)) { danielebarchiesi@0: $regexp = FALSE; danielebarchiesi@0: if (imce_access() && $regexp = str_replace(' ', '', variable_get('imce_settings_textarea', ''))) { danielebarchiesi@0: $regexp = '@^(' . str_replace(',', '|', implode('.*', array_map('preg_quote', explode('*', $regexp)))) . ')$@'; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: if ($regexp && preg_match($regexp, $element['#id'])) { danielebarchiesi@0: drupal_add_js(drupal_get_path('module', 'imce') . '/js/imce_set_inline.js'); danielebarchiesi@0: $element['#description'] = (isset($element['#description']) ? $element['#description'] : '') . ''; danielebarchiesi@0: } danielebarchiesi@0: return $element; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Returns the configuration profile assigned to a user for a specific file scheme. danielebarchiesi@0: */ danielebarchiesi@0: function imce_user_profile($user, $scheme = NULL) { danielebarchiesi@0: static $ups = array(); danielebarchiesi@0: danielebarchiesi@0: // Set scheme danielebarchiesi@0: if (empty($scheme)) { danielebarchiesi@0: $scheme = variable_get('file_default_scheme', 'public'); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Return from cache. danielebarchiesi@0: if (isset($ups[$scheme][$user->uid])) { danielebarchiesi@0: return $ups[$scheme][$user->uid]; danielebarchiesi@0: } danielebarchiesi@0: $ups[$scheme][$user->uid] = FALSE; danielebarchiesi@0: danielebarchiesi@0: // Check scheme danielebarchiesi@0: $swrappers = file_get_stream_wrappers(); danielebarchiesi@0: if (!isset($swrappers[$scheme])) { danielebarchiesi@0: return FALSE; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $profiles = variable_get('imce_profiles', array()); danielebarchiesi@0: $scinfo = array('scheme' => $scheme); danielebarchiesi@0: danielebarchiesi@0: // Handle user#1 separately danielebarchiesi@0: if ($user->uid == 1) { danielebarchiesi@0: return $ups[$scheme][$user->uid] = isset($profiles[1]) ? $profiles[1] + $scinfo : FALSE; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // Handle regular users. danielebarchiesi@0: $roles_profiles = variable_get('imce_roles_profiles', array()); danielebarchiesi@0: $sckey = $scheme . '_pid'; danielebarchiesi@0: foreach ($roles_profiles as $rid => $conf) { danielebarchiesi@0: if (isset($user->roles[$rid]) && isset($conf[$sckey]) && isset($profiles[$conf[$sckey]])) { danielebarchiesi@0: return $ups[$scheme][$user->uid] = $profiles[$conf[$sckey]] + $scinfo; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return FALSE; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Checks if the user is assigned an imce profile. danielebarchiesi@0: * A more detailed assignment check is performed before imce loads. danielebarchiesi@0: */ danielebarchiesi@0: function imce_access($user = FALSE, $scheme = NULL) { danielebarchiesi@0: if ($user === FALSE) { danielebarchiesi@0: global $user; danielebarchiesi@0: } danielebarchiesi@0: return imce_user_profile($user, $scheme) ? TRUE : FALSE; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Checks access to user/{$account->uid}/imce for the $user. danielebarchiesi@0: */ danielebarchiesi@0: function imce_user_page_access($account, $user = FALSE) { danielebarchiesi@0: if ($user === FALSE) { danielebarchiesi@0: global $user; danielebarchiesi@0: } danielebarchiesi@0: return ($user->uid == 1 || $account->uid == $user->uid) && ($profile = imce_user_profile($account)) && $profile['usertab']; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Check if the directory name is regular. danielebarchiesi@0: */ danielebarchiesi@0: function imce_reg_dir($dirname) { danielebarchiesi@0: return $dirname == '.' || is_int($dirname) || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname)); danielebarchiesi@0: }