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