[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/xmlsitemap/xmlsitemap_menu/ -> xmlsitemap_menu.module (source)

   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  }


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7