| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: xmlsitemap_menu.module,v 1.1.4.13.2.60 2010/04/30 03:31:28 davereid Exp $ 3 4 /** 5 * Implements hook_xmlsitemap_link_info(). 6 */ 7 function xmlsitemap_menu_xmlsitemap_link_info() { 8 $types['menu'] = array( 9 'label' => t('Menu'), 10 'bundle label' => t('Menu'), 11 'base table' => 'menu_links', 12 'entity keys' => array( 13 'id' => 'mlid', 14 'bundle' => 'menu_name', 15 ), 16 'path callback' => 'xmlsitemap_menu_path', 17 'xmlsitemap' => array( 18 'process callback' => 'xmlsitemap_menu_xmlsitemap_process_menu_links', 19 ), 20 ); 21 foreach (menu_get_menus() as $menu => $name) { 22 $types['menu']['bundles'][$menu] = array( 23 'label' => $name, 24 'admin' => array( 25 'real path' => 'admin/build/menu-customize/' . $menu . '/edit', 26 'access arguments' => array('administer menu'), 27 ), 28 ); 29 } 30 return $types; 31 } 32 33 function xmlsitemap_menu_path($menu_item) { 34 return $menu_item['link_path']; 35 } 36 37 /** 38 * Implements hook_cron(). 39 * 40 * Process old menu links not found in the {xmlsitemap} table. 41 */ 42 function xmlsitemap_menu_cron() { 43 xmlsitemap_menu_xmlsitemap_index_links(xmlsitemap_var('batch_limit')); 44 } 45 46 /** 47 * Implements hook_xmlsitemap_index_links(). 48 */ 49 function xmlsitemap_menu_xmlsitemap_index_links($limit) { 50 if ($menus = xmlsitemap_get_link_type_enabled_bundles('menu')) { 51 $sql = "SELECT ml.mlid FROM {menu_links} ml LEFT JOIN {xmlsitemap} x ON x.type = 'menu' AND ml.mlid = x.id WHERE x.id IS NULL AND ml.menu_name IN (" . db_placeholders($menus, 'varchar') . ") ORDER BY ml.mlid DESC"; 52 $query = db_query_range($sql, $menus, 0, $limit); 53 $mlids = array(); 54 while ($mlid = db_result($query)) { 55 $mlids[] = $mlid; 56 } 57 xmlsitemap_menu_xmlsitemap_process_menu_links($mlids); 58 } 59 } 60 61 /** 62 * Process menu sitemap links. 63 * 64 * @param $tids 65 * An array of menu link IDs. 66 */ 67 function xmlsitemap_menu_xmlsitemap_process_menu_links(array $mlids) { 68 // Set the global user variable to the anonymous user. 69 xmlsitemap_switch_user(0); 70 71 foreach ($mlids as $mlid) { 72 $menu_item = menu_link_load($mlid); 73 $link = xmlsitemap_menu_create_link($menu_item); 74 xmlsitemap_link_save($link); 75 } 76 77 // Set the global user variable back to the original user. 78 xmlsitemap_restore_user(); 79 } 80 81 /** 82 * Implements hook_form_FORM_ID_alter(). 83 * 84 * @see menu_edit_menu() 85 * @see xmlsitemap_menu_menu_edit_menu_submit() 86 * @see xmlsitemap_add_link_bundle_settings() 87 */ 88 function xmlsitemap_menu_form_menu_edit_menu_alter(&$form, $form_state) { 89 $menu = isset($form['menu_name']['#value']) ? $form['menu_name']['#value'] : ''; 90 91 module_load_include('inc', 'xmlsitemap', 'xmlsitemap.admin'); 92 xmlsitemap_add_link_bundle_settings($form, $form_state, 'menu', $menu); 93 $form['#submit'][] = 'xmlsitemap_menu_menu_edit_menu_submit'; 94 95 $form['submit'] += array('#weight' => 50); 96 if (isset($form['delete'])) { 97 $form['delete'] += array('#weight' => 51); 98 } 99 } 100 101 /** 102 * Form submit handler; update settings when a menu is saved. 103 */ 104 function xmlsitemap_menu_menu_edit_menu_submit($form, $form_state) { 105 xmlsitemap_link_bundle_settings_save('menu', $form_state['values']['menu_name'], $form_state['values']['xmlsitemap']); 106 } 107 108 /** 109 * Implements hook_form_FORM_ID_alter(). 110 * 111 * @see menu_delete_menu_confirm() 112 * @see xmlsitemap_menu_form_menu_delete_menu_confirm_submit() 113 */ 114 function xmlsitemap_menu_form_menu_delete_menu_confirm_alter(&$form, $form_state) { 115 $form['#submit'][] = 'xmlsitemap_menu_form_menu_delete_menu_confirm_submit'; 116 } 117 118 /** 119 * Form submit handler; delete sitemap links when a menu is deleted. 120 */ 121 function xmlsitemap_menu_form_menu_delete_menu_confirm_submit($form, $form_state) { 122 xmlsitemap_link_bundle_delete('menu', $form['#menu']['menu_name']); 123 } 124 125 //function xmlsitemap_menu_form_menu_overview_form_alter(&$form, $form_state) { 126 // $form['#submit'][] = 'xmlsitemap_menu_menu_overview_form_submit'; 127 //} 128 // 129 //function xmlsitemap_menu_menu_overview_form_submit($form, $form_state) { 130 // $mlids = array(); 131 // foreach (element_children($form) as $mlid) { 132 // if (isset($form[$mlid]['#item'])) { 133 // $mlids[] = $form[$mlid]['#item']['mlid']; 134 // } 135 // } 136 // xmlsitemap_menu_xmlsitemap_process_menu_links($mlids); 137 //} 138 139 /** 140 * Implements hook_form_FORM_ID_alter(). 141 * 142 * @see menu_edit_item() 143 */ 144 function xmlsitemap_menu_form_menu_edit_item_alter(&$form, $form_state) { 145 $menu_name = $form['menu']['parent']['#default_value']; 146 $menu_name = substr($menu_name, 0, strpos($menu_name, ':')); 147 148 // Add the link options. 149 module_load_include('inc', 'xmlsitemap', 'xmlsitemap.admin'); 150 xmlsitemap_add_form_link_options($form, 'menu', $menu_name, $form['menu']['mlid']['#value']); 151 152 $form['submit'] += array('#weight' => 10); 153 $form['#submit'][] = 'xmlsitemap_menu_menu_edit_item_submit'; 154 } 155 156 /** 157 * Form submit callback; update the sitemap link when a menu item is updated. 158 */ 159 function xmlsitemap_menu_menu_edit_item_submit($form, $form_state) { 160 $mlids = array($form_state['values']['menu']['mlid']); 161 xmlsitemap_menu_xmlsitemap_process_menu_links($mlids); 162 } 163 164 /** 165 * Implements hook_form_FORM_ID_alter(). 166 * 167 * @see menu_item_delete_form() 168 */ 169 function xmlsitemap_menu_form_menu_item_delete_form_alter(&$form, $form_state) { 170 $form['#submit'][] = 'xmlsitemap_menu_menu_item_delete_form_submit'; 171 } 172 173 /** 174 * Form submit callback; delete the sitemap link when a menu item is deleted. 175 */ 176 function xmlsitemap_menu_menu_item_delete_form_submit($form, $form_state) { 177 xmlsitemap_link_delete('menu', $link['mlid']); 178 } 179 180 /** 181 * Create a sitemap link from a menu item. 182 * 183 * @param $menu_item 184 * A loaded menu item. 185 */ 186 function xmlsitemap_menu_create_link(array $menu_item) { 187 if (!isset($menu_item['xmlsitemap'])) { 188 $menu_item['xmlsitemap'] = array(); 189 if ($menu_item['mlid'] && $link = xmlsitemap_link_load('menu', $menu_item['mlid'])) { 190 $menu_item['xmlsitemap'] = $link; 191 } 192 } 193 194 $settings = xmlsitemap_link_bundle_load('menu', $menu_item['menu_name']); 195 196 $menu_item['xmlsitemap'] += array( 197 'type' => 'menu', 198 'id' => $menu_item['mlid'], 199 'loc' => $menu_item['link_path'], 200 'status' => $settings['status'], 201 'status_default' => $settings['status'], 202 'status_override' => 0, 203 'priority' => $settings['priority'], 204 'priority_default' => $settings['priority'], 205 'priority_override' => 0, 206 ); 207 208 // The following values must always be checked because they are volatile. 209 $menu_item['xmlsitemap']['subtype'] = $menu_item['menu_name']; 210 $menu_item['xmlsitemap']['access'] = $menu_item['access'] && !$menu_item['external'] && !$menu_item['hidden']; 211 $menu_item['xmlsitemap']['language'] = isset($menu_item['options']['langcode']) ? $menu_item['options']['langcode'] : ''; 212 213 return $menu_item['xmlsitemap']; 214 } 215 216 /** 217 * Calculate the priority of a menu link based on depth and weight. 218 */ 219 function xmlsitemap_menu_calculate_priority(array $menu_item) { 220 $priority = (MENU_MAX_DEPTH - $menu_item['depth'] + 1) / MENU_MAX_DEPTH; 221 $priority -= (50 + $menu_item['weight']) / (100 * (MENU_MAX_DEPTH + 1)); 222 return $priority; 223 } 224 225 /** 226 * Internal default variables for template_var(). 227 */ 228 function xmlsitemap_menu_variables() { 229 $defaults = array(); 230 $menus = array_keys(menu_get_menus()); 231 foreach ($menus as $menu) { 232 $defaults['xmlsitemap_settings_menu_' . $menu] = array( 233 'status' => XMLSITEMAP_STATUS_DEFAULT, 234 'priority' => XMLSITEMAP_PRIORITY_DEFAULT, 235 ); 236 } 237 return $defaults; 238 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |