webmaster@1
|
1 <?php |
webmaster@1
|
2 // $Id: path.admin.inc,v 1.7 2008/01/08 10:35:42 goba Exp $ |
webmaster@1
|
3 |
webmaster@1
|
4 /** |
webmaster@1
|
5 * @file |
webmaster@1
|
6 * Administrative page callbacks for the path module. |
webmaster@1
|
7 */ |
webmaster@1
|
8 |
webmaster@1
|
9 /** |
webmaster@1
|
10 * Return a listing of all defined URL aliases. |
webmaster@1
|
11 * When filter key passed, perform a standard search on the given key, |
webmaster@1
|
12 * and return the list of matching URL aliases. |
webmaster@1
|
13 */ |
webmaster@1
|
14 function path_admin_overview($keys = NULL) { |
webmaster@1
|
15 // Add the filter form above the overview table. |
webmaster@1
|
16 $output = drupal_get_form('path_admin_filter_form', $keys); |
webmaster@1
|
17 // Enable language column if locale is enabled or if we have any alias with language |
webmaster@1
|
18 $count = db_result(db_query("SELECT COUNT(*) FROM {url_alias} WHERE language != ''")); |
webmaster@1
|
19 $multilanguage = (module_exists('locale') || $count); |
webmaster@1
|
20 |
webmaster@1
|
21 if ($keys) { |
webmaster@1
|
22 // Replace wildcards with MySQL/PostgreSQL wildcards. |
webmaster@1
|
23 $keys = preg_replace('!\*+!', '%', $keys); |
webmaster@1
|
24 $sql = "SELECT * FROM {url_alias} WHERE dst LIKE '%%%s%%'"; |
webmaster@1
|
25 } |
webmaster@1
|
26 else { |
webmaster@1
|
27 $sql = 'SELECT * FROM {url_alias}'; |
webmaster@1
|
28 } |
webmaster@1
|
29 $header = array( |
webmaster@1
|
30 array('data' => t('Alias'), 'field' => 'dst', 'sort' => 'asc'), |
webmaster@1
|
31 array('data' => t('System'), 'field' => 'src'), |
webmaster@1
|
32 array('data' => t('Operations'), 'colspan' => '2') |
webmaster@1
|
33 ); |
webmaster@1
|
34 if ($multilanguage) { |
webmaster@1
|
35 $header[3] = $header[2]; |
webmaster@1
|
36 $header[2] = array('data' => t('Language'), 'field' => 'language'); |
webmaster@1
|
37 } |
webmaster@1
|
38 $sql .= tablesort_sql($header); |
webmaster@1
|
39 $result = pager_query($sql, 50, 0 , NULL, $keys); |
webmaster@1
|
40 |
webmaster@1
|
41 $rows = array(); |
webmaster@1
|
42 $destination = drupal_get_destination(); |
webmaster@1
|
43 while ($data = db_fetch_object($result)) { |
webmaster@1
|
44 $row = array(check_plain($data->dst), check_plain($data->src), l(t('edit'), "admin/build/path/edit/$data->pid", array('query' => $destination)), l(t('delete'), "admin/build/path/delete/$data->pid", array('query' => $destination))); |
webmaster@1
|
45 if ($multilanguage) { |
webmaster@1
|
46 $row[4] = $row[3]; |
webmaster@1
|
47 $row[3] = $row[2]; |
webmaster@1
|
48 $row[2] = module_invoke('locale', 'language_name', $data->language); |
webmaster@1
|
49 } |
webmaster@1
|
50 $rows[] = $row; |
webmaster@1
|
51 } |
webmaster@1
|
52 |
webmaster@1
|
53 if (empty($rows)) { |
webmaster@1
|
54 $empty_message = $keys ? t('No URL aliases found.') : t('No URL aliases available.') ; |
webmaster@1
|
55 $rows[] = array(array('data' => $empty_message, 'colspan' => ($multilanguage ? 5 : 4))); |
webmaster@1
|
56 } |
webmaster@1
|
57 |
webmaster@1
|
58 $output .= theme('table', $header, $rows); |
webmaster@1
|
59 $output .= theme('pager', NULL, 50, 0); |
webmaster@1
|
60 |
webmaster@1
|
61 return $output; |
webmaster@1
|
62 } |
webmaster@1
|
63 |
webmaster@1
|
64 /** |
webmaster@1
|
65 * Menu callback; handles pages for creating and editing URL aliases. |
webmaster@1
|
66 */ |
webmaster@1
|
67 function path_admin_edit($pid = 0) { |
webmaster@1
|
68 if ($pid) { |
webmaster@1
|
69 $alias = path_load($pid); |
webmaster@1
|
70 drupal_set_title(check_plain($alias['dst'])); |
webmaster@1
|
71 $output = drupal_get_form('path_admin_form', $alias); |
webmaster@1
|
72 } |
webmaster@1
|
73 else { |
webmaster@1
|
74 $output = drupal_get_form('path_admin_form'); |
webmaster@1
|
75 } |
webmaster@1
|
76 |
webmaster@1
|
77 return $output; |
webmaster@1
|
78 } |
webmaster@1
|
79 |
webmaster@1
|
80 /** |
webmaster@1
|
81 * Return a form for editing or creating an individual URL alias. |
webmaster@1
|
82 * |
webmaster@1
|
83 * @ingroup forms |
webmaster@1
|
84 * @see path_admin_form_validate() |
webmaster@1
|
85 * @see path_admin_form_submit() |
webmaster@1
|
86 */ |
webmaster@1
|
87 function path_admin_form(&$form_state, $edit = array('src' => '', 'dst' => '', 'language' => '', 'pid' => NULL)) { |
webmaster@1
|
88 |
webmaster@1
|
89 $form['#alias'] = $edit; |
webmaster@1
|
90 |
webmaster@1
|
91 $form['src'] = array( |
webmaster@1
|
92 '#type' => 'textfield', |
webmaster@1
|
93 '#title' => t('Existing system path'), |
webmaster@1
|
94 '#default_value' => $edit['src'], |
webmaster@1
|
95 '#maxlength' => 64, |
webmaster@1
|
96 '#size' => 45, |
webmaster@1
|
97 '#description' => t('Specify the existing path you wish to alias. For example: node/28, forum/1, taxonomy/term/1+2.'), |
webmaster@1
|
98 '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='), |
webmaster@1
|
99 '#required' => TRUE, |
webmaster@1
|
100 ); |
webmaster@1
|
101 $form['dst'] = array( |
webmaster@1
|
102 '#type' => 'textfield', |
webmaster@1
|
103 '#title' => t('Path alias'), |
webmaster@1
|
104 '#default_value' => $edit['dst'], |
webmaster@1
|
105 '#maxlength' => 64, |
webmaster@1
|
106 '#size' => 45, |
webmaster@1
|
107 '#description' => t('Specify an alternative path by which this data can be accessed. For example, type "about" when writing an about page. Use a relative path and don\'t add a trailing slash or the URL alias won\'t work.'), |
webmaster@1
|
108 '#field_prefix' => url(NULL, array('absolute' => TRUE)) . (variable_get('clean_url', 0) ? '' : '?q='), |
webmaster@1
|
109 '#required' => TRUE, |
webmaster@1
|
110 ); |
webmaster@1
|
111 // This will be a hidden value unless locale module is enabled |
webmaster@1
|
112 $form['language'] = array( |
webmaster@1
|
113 '#type' => 'value', |
webmaster@1
|
114 '#value' => $edit['language'] |
webmaster@1
|
115 ); |
webmaster@1
|
116 if ($edit['pid']) { |
webmaster@1
|
117 $form['pid'] = array('#type' => 'hidden', '#value' => $edit['pid']); |
webmaster@1
|
118 $form['submit'] = array('#type' => 'submit', '#value' => t('Update alias')); |
webmaster@1
|
119 } |
webmaster@1
|
120 else { |
webmaster@1
|
121 $form['submit'] = array('#type' => 'submit', '#value' => t('Create new alias')); |
webmaster@1
|
122 } |
webmaster@1
|
123 |
webmaster@1
|
124 return $form; |
webmaster@1
|
125 } |
webmaster@1
|
126 |
webmaster@1
|
127 |
webmaster@1
|
128 /** |
webmaster@1
|
129 * Verify that a new URL alias is valid |
webmaster@1
|
130 */ |
webmaster@1
|
131 function path_admin_form_validate($form, &$form_state) { |
webmaster@1
|
132 $src = $form_state['values']['src']; |
webmaster@1
|
133 $dst = $form_state['values']['dst']; |
webmaster@1
|
134 $pid = isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0; |
webmaster@1
|
135 // Language is only set if locale module is enabled, otherwise save for all languages. |
webmaster@1
|
136 $language = isset($form_state['values']['language']) ? $form_state['values']['language'] : ''; |
webmaster@1
|
137 |
webmaster@1
|
138 if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE pid != %d AND dst = '%s' AND language = '%s'", $pid, $dst, $language))) { |
webmaster@1
|
139 form_set_error('dst', t('The alias %alias is already in use in this language.', array('%alias' => $dst))); |
webmaster@1
|
140 } |
webmaster@1
|
141 $item = menu_get_item($src); |
webmaster@1
|
142 if (!$item || !$item['access']) { |
webmaster@1
|
143 form_set_error('src', t("The path '@link_path' is either invalid or you do not have access to it.", array('@link_path' => $src))); |
webmaster@1
|
144 } |
webmaster@1
|
145 } |
webmaster@1
|
146 |
webmaster@1
|
147 /** |
webmaster@1
|
148 * Save a new URL alias to the database. |
webmaster@1
|
149 */ |
webmaster@1
|
150 function path_admin_form_submit($form, &$form_state) { |
webmaster@1
|
151 // Language is only set if locale module is enabled |
webmaster@1
|
152 path_set_alias($form_state['values']['src'], $form_state['values']['dst'], isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0, isset($form_state['values']['language']) ? $form_state['values']['language'] : ''); |
webmaster@1
|
153 |
webmaster@1
|
154 drupal_set_message(t('The alias has been saved.')); |
webmaster@1
|
155 $form_state['redirect'] = 'admin/build/path'; |
webmaster@1
|
156 return; |
webmaster@1
|
157 } |
webmaster@1
|
158 |
webmaster@1
|
159 /** |
webmaster@1
|
160 * Menu callback; confirms deleting an URL alias |
webmaster@1
|
161 */ |
webmaster@1
|
162 function path_admin_delete_confirm($form_state, $pid) { |
webmaster@1
|
163 $path = path_load($pid); |
webmaster@1
|
164 if (user_access('administer url aliases')) { |
webmaster@1
|
165 $form['pid'] = array('#type' => 'value', '#value' => $pid); |
webmaster@1
|
166 $output = confirm_form($form, |
webmaster@1
|
167 t('Are you sure you want to delete path alias %title?', array('%title' => $path['dst'])), |
webmaster@1
|
168 isset($_GET['destination']) ? $_GET['destination'] : 'admin/build/path'); |
webmaster@1
|
169 } |
webmaster@1
|
170 return $output; |
webmaster@1
|
171 } |
webmaster@1
|
172 |
webmaster@1
|
173 /** |
webmaster@1
|
174 * Execute URL alias deletion |
webmaster@1
|
175 */ |
webmaster@1
|
176 function path_admin_delete_confirm_submit($form, &$form_state) { |
webmaster@1
|
177 if ($form_state['values']['confirm']) { |
webmaster@1
|
178 path_admin_delete($form_state['values']['pid']); |
webmaster@1
|
179 $form_state['redirect'] = 'admin/build/path'; |
webmaster@1
|
180 return; |
webmaster@1
|
181 } |
webmaster@1
|
182 } |
webmaster@1
|
183 |
webmaster@1
|
184 |
webmaster@1
|
185 /** |
webmaster@1
|
186 * Return a form to filter URL aliases. |
webmaster@1
|
187 * |
webmaster@1
|
188 * @ingroup forms |
webmaster@1
|
189 * @see path_admin_filter_form_submit() |
webmaster@1
|
190 */ |
webmaster@1
|
191 function path_admin_filter_form(&$form_state, $keys = '') { |
webmaster@1
|
192 $form['#attributes'] = array('class' => 'search-form'); |
webmaster@1
|
193 $form['basic'] = array('#type' => 'fieldset', |
webmaster@1
|
194 '#title' => t('Filter aliases') |
webmaster@1
|
195 ); |
webmaster@1
|
196 $form['basic']['inline'] = array('#prefix' => '<div class="container-inline">', '#suffix' => '</div>'); |
webmaster@1
|
197 $form['basic']['inline']['filter'] = array( |
webmaster@1
|
198 '#type' => 'textfield', |
webmaster@1
|
199 '#title' => '', |
webmaster@1
|
200 '#default_value' => $keys, |
webmaster@1
|
201 '#maxlength' => 64, |
webmaster@1
|
202 '#size' => 25, |
webmaster@1
|
203 ); |
webmaster@1
|
204 $form['basic']['inline']['submit'] = array( |
webmaster@1
|
205 '#type' => 'submit', |
webmaster@1
|
206 '#value' => t('Filter'), |
webmaster@1
|
207 '#submit' => array('path_admin_filter_form_submit_filter'), |
webmaster@1
|
208 ); |
webmaster@1
|
209 if ($keys) { |
webmaster@1
|
210 $form['basic']['inline']['reset'] = array( |
webmaster@1
|
211 '#type' => 'submit', |
webmaster@1
|
212 '#value' => t('Reset'), |
webmaster@1
|
213 '#submit' => array('path_admin_filter_form_submit_reset'), |
webmaster@1
|
214 ); |
webmaster@1
|
215 } |
webmaster@1
|
216 return $form; |
webmaster@1
|
217 } |
webmaster@1
|
218 |
webmaster@1
|
219 /** |
webmaster@1
|
220 * Process filter form submission when the Filter button is pressed. |
webmaster@1
|
221 */ |
webmaster@1
|
222 function path_admin_filter_form_submit_filter($form, &$form_state) { |
webmaster@1
|
223 $form_state['redirect'] = 'admin/build/path/list/'. trim($form_state['values']['filter']); |
webmaster@1
|
224 } |
webmaster@1
|
225 |
webmaster@1
|
226 /** |
webmaster@1
|
227 * Process filter form submission when the Reset button is pressed. |
webmaster@1
|
228 */ |
webmaster@1
|
229 function path_admin_filter_form_submit_reset($form, &$form_state) { |
webmaster@1
|
230 $form_state['redirect'] = 'admin/build/path/list'; |
webmaster@1
|
231 } |
webmaster@1
|
232 |
webmaster@1
|
233 |
webmaster@1
|
234 /** |
webmaster@1
|
235 * Helper function for grabbing filter keys. |
webmaster@1
|
236 */ |
webmaster@1
|
237 function path_admin_filter_get_keys() { |
webmaster@1
|
238 // Extract keys as remainder of path |
webmaster@1
|
239 $path = explode('/', $_GET['q'], 5); |
webmaster@1
|
240 return count($path) == 5 ? $path[4] : ''; |
webmaster@1
|
241 } |