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