annotate sites/all/modules/imce/imce.module @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Implements the necessary hooks for the file browser to work properly.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements hook_menu().
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function imce_menu() {
danielebarchiesi@0 12 $items = array();
danielebarchiesi@0 13 $access = array('administer imce');
danielebarchiesi@0 14 $items['imce'] = array(
danielebarchiesi@0 15 'title' => 'File browser',
danielebarchiesi@0 16 'page callback' => 'imce',
danielebarchiesi@0 17 'access callback' => 'imce_access',
danielebarchiesi@0 18 'access arguments' => array(FALSE, 1),
danielebarchiesi@0 19 'file' => 'inc/imce.page.inc',
danielebarchiesi@0 20 'type' => MENU_CALLBACK,
danielebarchiesi@0 21 );
danielebarchiesi@0 22 $items['user/%user/imce'] = array(
danielebarchiesi@0 23 'title' => 'File browser',
danielebarchiesi@0 24 'page callback' => 'imce_user_page',
danielebarchiesi@0 25 'page arguments' => array(1),
danielebarchiesi@0 26 'access callback' => 'imce_user_page_access',
danielebarchiesi@0 27 'access arguments' => array(1),
danielebarchiesi@0 28 'file' => 'inc/imce.page.inc',
danielebarchiesi@0 29 'type' => MENU_LOCAL_TASK,
danielebarchiesi@0 30 'weight' => 10,
danielebarchiesi@0 31 );
danielebarchiesi@0 32 $items['admin/config/media/imce'] = array(
danielebarchiesi@0 33 'title' => 'IMCE',
danielebarchiesi@0 34 'description' => 'Control how your image/file browser works.',
danielebarchiesi@0 35 'page callback' => 'imce_admin',
danielebarchiesi@0 36 'access arguments' => $access,
danielebarchiesi@0 37 'file' => 'inc/imce.admin.inc',
danielebarchiesi@0 38 );
danielebarchiesi@0 39 $items['admin/config/media/imce/profile'] = array(
danielebarchiesi@0 40 'title' => 'Add new profile',
danielebarchiesi@0 41 'page callback' => 'imce_profile_operations',
danielebarchiesi@0 42 'access arguments' => $access,
danielebarchiesi@0 43 'type' => MENU_VISIBLE_IN_BREADCRUMB,
danielebarchiesi@0 44 'file' => 'inc/imce.admin.inc',
danielebarchiesi@0 45 );
danielebarchiesi@0 46 return $items;
danielebarchiesi@0 47 }
danielebarchiesi@0 48
danielebarchiesi@0 49 /**
danielebarchiesi@0 50 * Implements hook_permission().
danielebarchiesi@0 51 */
danielebarchiesi@0 52 function imce_permission() {
danielebarchiesi@0 53 return array(
danielebarchiesi@0 54 'administer imce' => array(
danielebarchiesi@0 55 'title' => t('Administer IMCE'),
danielebarchiesi@0 56 'restrict access' => TRUE,
danielebarchiesi@0 57 ),
danielebarchiesi@0 58 );
danielebarchiesi@0 59 }
danielebarchiesi@0 60
danielebarchiesi@0 61 /**
danielebarchiesi@0 62 * Implements hook_theme().
danielebarchiesi@0 63 */
danielebarchiesi@0 64 function imce_theme() {
danielebarchiesi@0 65 $path = drupal_get_path('module', 'imce') . '/tpl';
danielebarchiesi@0 66 $theme['imce_admin'] = array('function' => 'imce_admin_theme', 'render element' => 'form');
danielebarchiesi@0 67 $theme['imce_directories'] = array('function' => 'imce_directories_theme', 'render element' => 'form');
danielebarchiesi@0 68 $theme['imce_thumbnails'] = array('function' => 'imce_thumbnails_theme', 'render element' => 'form');
danielebarchiesi@0 69 $theme['imce_root_text'] = array(
danielebarchiesi@0 70 'variables' => array('imce_ref' => NULL),
danielebarchiesi@0 71 );
danielebarchiesi@0 72 $theme['imce_user_page'] = array(
danielebarchiesi@0 73 'variables' => array('account' => NULL),
danielebarchiesi@0 74 );
danielebarchiesi@0 75 $theme['imce_file_list'] = array(
danielebarchiesi@0 76 'template' => 'imce-file-list',
danielebarchiesi@0 77 'variables' => array('imce_ref' => NULL),
danielebarchiesi@0 78 'path' => $path,
danielebarchiesi@0 79 );
danielebarchiesi@0 80 $theme['imce_content'] = array(
danielebarchiesi@0 81 'template' => 'imce-content',
danielebarchiesi@0 82 'variables' => array('tree' => NULL, 'forms' => NULL, 'imce_ref' => NULL),
danielebarchiesi@0 83 'path' => $path,
danielebarchiesi@0 84 );
danielebarchiesi@0 85 $theme['imce_page'] = array(
danielebarchiesi@0 86 'template' => 'imce-page',
danielebarchiesi@0 87 'variables' => array('content' => NULL),
danielebarchiesi@0 88 'path' => $path,
danielebarchiesi@0 89 );
danielebarchiesi@0 90 return $theme;
danielebarchiesi@0 91 }
danielebarchiesi@0 92
danielebarchiesi@0 93 /**
danielebarchiesi@0 94 * Implements hook_file_download().
danielebarchiesi@0 95 * Support private downloads if not disabled.
danielebarchiesi@0 96 */
danielebarchiesi@0 97 function imce_file_download($uri) {
danielebarchiesi@0 98 $serve = file_uri_scheme($uri) == 'private' && !variable_get('imce_settings_disable_private', 1) && file_exists($uri) && strpos(basename($uri), '.');
danielebarchiesi@0 99 if ($serve) {
danielebarchiesi@0 100 return array(
danielebarchiesi@0 101 'Content-type' => file_get_mimetype($uri),
danielebarchiesi@0 102 'Content-Length' => filesize($uri),
danielebarchiesi@0 103 );
danielebarchiesi@0 104 }
danielebarchiesi@0 105 }
danielebarchiesi@0 106
danielebarchiesi@0 107 /**
danielebarchiesi@0 108 * Implements hook_element_info().
danielebarchiesi@0 109 */
danielebarchiesi@0 110 function imce_element_info() {
danielebarchiesi@0 111 return array('textarea' => array('#process' => array('imce_textarea')));
danielebarchiesi@0 112 }
danielebarchiesi@0 113
danielebarchiesi@0 114 /**
danielebarchiesi@0 115 * Inline image/link insertion to textareas.
danielebarchiesi@0 116 */
danielebarchiesi@0 117 function imce_textarea($element) {
danielebarchiesi@0 118 static $regexp;
danielebarchiesi@0 119 if (!isset($regexp)) {
danielebarchiesi@0 120 $regexp = FALSE;
danielebarchiesi@0 121 if (imce_access() && $regexp = str_replace(' ', '', variable_get('imce_settings_textarea', ''))) {
danielebarchiesi@0 122 $regexp = '@^(' . str_replace(',', '|', implode('.*', array_map('preg_quote', explode('*', $regexp)))) . ')$@';
danielebarchiesi@0 123 }
danielebarchiesi@0 124 }
danielebarchiesi@0 125 if ($regexp && preg_match($regexp, $element['#id'])) {
danielebarchiesi@0 126 drupal_add_js(drupal_get_path('module', 'imce') . '/js/imce_set_inline.js');
danielebarchiesi@0 127 $element['#description'] = (isset($element['#description']) ? $element['#description'] : '') . '<div class="imce-inline-wrapper" style="display:none">' . t('Insert !image or !link.', array('!image' => l(t('image'), 'imce', array('attributes' => array('name' => $element['#id'] . '-IMCE-image', 'class' => array('imce-inline-image')))), '!link' => l(t('link'), 'imce', array('attributes' => array('name' => $element['#id'] . '-IMCE-link', 'class' => array('imce-inline-link')))))) . '</div>';
danielebarchiesi@0 128 }
danielebarchiesi@0 129 return $element;
danielebarchiesi@0 130 }
danielebarchiesi@0 131
danielebarchiesi@0 132 /**
danielebarchiesi@0 133 * Returns the configuration profile assigned to a user for a specific file scheme.
danielebarchiesi@0 134 */
danielebarchiesi@0 135 function imce_user_profile($user, $scheme = NULL) {
danielebarchiesi@0 136 static $ups = array();
danielebarchiesi@0 137
danielebarchiesi@0 138 // Set scheme
danielebarchiesi@0 139 if (empty($scheme)) {
danielebarchiesi@0 140 $scheme = variable_get('file_default_scheme', 'public');
danielebarchiesi@0 141 }
danielebarchiesi@0 142
danielebarchiesi@0 143 // Return from cache.
danielebarchiesi@0 144 if (isset($ups[$scheme][$user->uid])) {
danielebarchiesi@0 145 return $ups[$scheme][$user->uid];
danielebarchiesi@0 146 }
danielebarchiesi@0 147 $ups[$scheme][$user->uid] = FALSE;
danielebarchiesi@0 148
danielebarchiesi@0 149 // Check scheme
danielebarchiesi@0 150 $swrappers = file_get_stream_wrappers();
danielebarchiesi@0 151 if (!isset($swrappers[$scheme])) {
danielebarchiesi@0 152 return FALSE;
danielebarchiesi@0 153 }
danielebarchiesi@0 154
danielebarchiesi@0 155 $profiles = variable_get('imce_profiles', array());
danielebarchiesi@0 156 $scinfo = array('scheme' => $scheme);
danielebarchiesi@0 157
danielebarchiesi@0 158 // Handle user#1 separately
danielebarchiesi@0 159 if ($user->uid == 1) {
danielebarchiesi@0 160 return $ups[$scheme][$user->uid] = isset($profiles[1]) ? $profiles[1] + $scinfo : FALSE;
danielebarchiesi@0 161 }
danielebarchiesi@0 162
danielebarchiesi@0 163 // Handle regular users.
danielebarchiesi@0 164 $roles_profiles = variable_get('imce_roles_profiles', array());
danielebarchiesi@0 165 $sckey = $scheme . '_pid';
danielebarchiesi@0 166 foreach ($roles_profiles as $rid => $conf) {
danielebarchiesi@0 167 if (isset($user->roles[$rid]) && isset($conf[$sckey]) && isset($profiles[$conf[$sckey]])) {
danielebarchiesi@0 168 return $ups[$scheme][$user->uid] = $profiles[$conf[$sckey]] + $scinfo;
danielebarchiesi@0 169 }
danielebarchiesi@0 170 }
danielebarchiesi@0 171
danielebarchiesi@0 172 return FALSE;
danielebarchiesi@0 173 }
danielebarchiesi@0 174
danielebarchiesi@0 175 /**
danielebarchiesi@0 176 * Checks if the user is assigned an imce profile.
danielebarchiesi@0 177 * A more detailed assignment check is performed before imce loads.
danielebarchiesi@0 178 */
danielebarchiesi@0 179 function imce_access($user = FALSE, $scheme = NULL) {
danielebarchiesi@0 180 if ($user === FALSE) {
danielebarchiesi@0 181 global $user;
danielebarchiesi@0 182 }
danielebarchiesi@0 183 return imce_user_profile($user, $scheme) ? TRUE : FALSE;
danielebarchiesi@0 184 }
danielebarchiesi@0 185
danielebarchiesi@0 186 /**
danielebarchiesi@0 187 * Checks access to user/{$account->uid}/imce for the $user.
danielebarchiesi@0 188 */
danielebarchiesi@0 189 function imce_user_page_access($account, $user = FALSE) {
danielebarchiesi@0 190 if ($user === FALSE) {
danielebarchiesi@0 191 global $user;
danielebarchiesi@0 192 }
danielebarchiesi@0 193 return ($user->uid == 1 || $account->uid == $user->uid) && ($profile = imce_user_profile($account)) && $profile['usertab'];
danielebarchiesi@0 194 }
danielebarchiesi@0 195
danielebarchiesi@0 196 /**
danielebarchiesi@0 197 * Check if the directory name is regular.
danielebarchiesi@0 198 */
danielebarchiesi@0 199 function imce_reg_dir($dirname) {
danielebarchiesi@0 200 return $dirname == '.' || is_int($dirname) || (is_string($dirname) && $dirname != '' && !preg_match('@(^\s)|(^/)|(^\./)|(\s$)|(/$)|(/\.$)|(\.\.)|(//)|(\\\\)|(/\./)@', $dirname));
danielebarchiesi@0 201 }