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 } |