You are here

menu_block.install in Menu Block 6.2

Provides install, upgrade and un-install functions for menu_block.

File

menu_block.install
View source
<?php

/**
 * @file
 * Provides install, upgrade and un-install functions for menu_block.
 */

/**
 * Implements hook_uninstall().
 */
function menu_block_uninstall() {

  // Delete menu block variables.
  foreach (variable_get('menu_block_ids', array()) as $delta) {
    variable_del("menu_block_{$delta}_title_link");
    variable_del("menu_block_{$delta}_admin_title");
    variable_del("menu_block_{$delta}_parent");
    variable_del("menu_block_{$delta}_level");
    variable_del("menu_block_{$delta}_follow");
    variable_del("menu_block_{$delta}_depth");
    variable_del("menu_block_{$delta}_expanded");
    variable_del("menu_block_{$delta}_sort");
  }
  variable_del('menu_block_ids');
  variable_del('menu_block_menu_order');

  // Remove block configurations.
  db_query("DELETE FROM {blocks} WHERE module = 'menu_block'");
  db_query("DELETE FROM {blocks_roles} WHERE module = 'menu_block'");
  cache_clear_all();
}

/**
 * Implements hook_enable().
 */
function menu_block_enable() {
  drupal_set_message(t('To use menu blocks, find the "Add menu block" tab (or button) on the <a href="@url">administer blocks page</a>.', array(
    '@url' => url('admin/build/block'),
  )));
}

/**
 * Implements hook_install().
 */
function menu_block_install() {

  // No-op.
}

/**
 * Convert pre-1.0 configurations to the new block naming convention.
 */
function menu_block_update_5100() {
  $delta = 0;
  $enabled_blocks = array();

  // Find the old enabled blocks.
  foreach (variable_get('menu_block_enabled_blocks', array()) as $old_delta => $enabled) {
    list($mid, $level) = explode('-', $old_delta);
    if ($enabled) {
      $enabled_blocks[++$delta] = TRUE;
      variable_set("menu_block_{$delta}_mid", $mid);
      variable_set("menu_block_{$delta}_level", $level);
      variable_set("menu_block_{$delta}_depth", variable_get("menu_block_depth_{$mid}_{$level}", 0));
      variable_set("menu_block_{$delta}_expanded", variable_get("menu_block_expanded_{$mid}_{$level}", 0));
    }

    // Remove any of the old-style variables.
    variable_del("menu_block_depth_{$mid}_{$level}");
    variable_del("menu_block_expanded_{$mid}_{$level}");
  }
  variable_set('menu_block_enabled_blocks', $enabled_blocks);
  return array(
    0 => array(
      'success' => TRUE,
      'query' => t('A pre-release version of Menu block has been detected. All menu blocks from the pre-release version have been given a new delta and are no longer placed in any block regions; their block placement should be re-configured immediately.'),
    ),
  );
}

/**
 * Converts enabled blocks list to ID list and deletes un-enabled blocks.
 */
function menu_block_update_5200() {
  $block_ids = array();
  foreach (variable_get('menu_block_enabled_blocks', array()) as $delta => $enabled) {
    if ($enabled) {
      $block_ids[] = $delta;

      // Build new $menu_block_ids.
      // Convert $menu_block_DELTA_mid to $menu_block_DELTA_menu_name.
      $mid = variable_get("menu_block_{$delta}_mid", 1);
      variable_set("menu_block_{$delta}_menu_name", $mid);

      // If we weren't upgraded to 5.x-2.x before the Drupal 6 upgrade, the
      // mid-to-menu_name conversion is not possible.
      variable_set("menu_block_{$delta}_title", $mid == 2 ? 'primary-links' : 'navigation');
      variable_del("menu_block_{$delta}_mid");
    }
    else {

      // Delete un-enabled menu block.
      variable_del("menu_block_{$delta}_mid");
      variable_del("menu_block_{$delta}_level");
      variable_del("menu_block_{$delta}_depth");
      variable_del("menu_block_{$delta}_expanded");
      db_query("DELETE FROM {blocks} WHERE module = 'menu_block' AND delta = %d", $delta);
    }
  }

  // Finish conversion of $menu_block_enabled_blocks to $menu_block_ids.
  sort($block_ids);
  variable_set('menu_block_ids', $block_ids);
  variable_del('menu_block_enabled_blocks');
  cache_clear_all();
  return array(
    0 => array(
      'success' => TRUE,
      'query' => t('A 5.x-1.x version of Menu block has been detected and an attempt was made to upgrade it. Unfortunately, you should have upgraded to Menu block 5.x-2.x before your upgrade to Drupal 6. You may need to re-configure all your menu blocks. To use menu blocks in Drupal 6, find the "Add menu block" tab (or button) on the <a href="@url">administer blocks page</a>.', array(
        '@url' => url('admin/build/block'),
      )),
    ),
  );
}

/**
 * Converts the mids to menu names using the D5-stored menu_title variable.
 */
function menu_block_update_6200() {
  $menus = menu_get_menus();
  foreach (variable_get('menu_block_ids', array()) as $delta) {

    // Drupal 6 uses the menu title to create the new menu_name.
    $menu_name = preg_replace('/[^a-zA-Z0-9]/', '-', strtolower(variable_get("menu_block_{$delta}_title", '')));

    // If we can't find the new menu_name, default to the navigation menu.
    if (empty($menus[$menu_name])) {
      $menu_name = 'navigation';
    }
    variable_set("menu_block_{$delta}_menu_name", $menu_name);
    variable_del("menu_block_{$delta}_title");
  }
  return array(
    0 => array(
      'success' => TRUE,
      'query' => t('The 5.x-2.x version of Menu block has been upgraded. To use menu blocks in Drupal 6, find the "Add menu block" tab (or button) on the <a href="@url">administer blocks page</a>.', array(
        '@url' => url('admin/build/block'),
      )),
    ),
  );
}

/**
 * Converts the menu names to parent items.
 */
function menu_block_update_6201() {
  $menus = menu_get_menus();
  foreach (variable_get('menu_block_ids', array()) as $delta) {
    variable_set("menu_block_{$delta}_parent", variable_get("menu_block_{$delta}_menu_name", 'navigation') . ':0');
    variable_del("menu_block_{$delta}_menu_name");
  }
  return array(
    0 => array(
      'success' => TRUE,
      'query' => t('The 6.x-2.0 version of Menu block has been upgraded. To use menu blocks in Drupal 6, find the "Add menu block" tab (or button) on the <a href="@url">administer blocks page</a>.', array(
        '@url' => url('admin/build/block'),
      )),
    ),
  );
}

Functions

Namesort descending Description
menu_block_enable Implements hook_enable().
menu_block_install Implements hook_install().
menu_block_uninstall Implements hook_uninstall().
menu_block_update_5100 Convert pre-1.0 configurations to the new block naming convention.
menu_block_update_5200 Converts enabled blocks list to ID list and deletes un-enabled blocks.
menu_block_update_6200 Converts the mids to menu names using the D5-stored menu_title variable.
menu_block_update_6201 Converts the menu names to parent items.