You are here

path_breadcrumbs.install in Path Breadcrumbs 7.2

Same filename and directory in other branches
  1. 7.3 path_breadcrumbs.install
  2. 7 path_breadcrumbs.install

Provides database structure for PATH BREADCRUMBS module.

File

path_breadcrumbs.install
View source
<?php

/**
 * @file
 * Provides database structure for PATH BREADCRUMBS module.
 */

/**
 * Implements hook_uninstall().
 */
function path_breadcrumbs_uninstall() {
  variable_del('path_breadcrumbs_home_link_enabled');
  variable_del('path_breadcrumbs_home_link_title');
  variable_del('path_breadcrumbs_delimiter');
  variable_del('path_breadcrumbs_rich_snippets');
  variable_del('path_breadcrumbs_hide_single_breadcrumb');
  variable_del('path_breadcrumbs_internal_render');
}

/**
 * Implements hook_schema().
 */
function path_breadcrumbs_schema() {
  $schema['path_breadcrumbs'] = array(
    'description' => 'Stores path breadcrumbs.',
    'export' => array(
      'key' => 'machine_name',
      'primary key' => 'path_id',
      'identifier' => 'path_breadcrumb',
      'default hook' => 'path_breadcrumbs_settings_info',
      'can disable' => FALSE,
      'load callback' => 'path_breadcrumbs_load_by_name',
      'load multiple callback' => 'path_breadcrumbs_load_by_name_multiple',
      'load all callback' => 'path_breadcrumbs_load_all',
      'export callback' => 'path_breadcrumbs_export',
      'list callback' => 'path_breadcrumbs_export_list',
      'api' => array(
        'owner' => 'path_breadcrumbs',
        'api' => 'path_breadcrumbs',
        'minimum_version' => 1,
        'current_version' => 1,
      ),
    ),
    'fields' => array(
      'path_id' => array(
        'description' => t("Breadcrumb's variant unique identifier"),
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'no export' => TRUE,
      ),
      'machine_name' => array(
        'description' => t("Breadcrumb's variant machine name"),
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
      ),
      'name' => array(
        'description' => t("Breadcrumb's variant human-readable name"),
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
      ),
      'path' => array(
        'description' => t('URL where breadcrumb should be shown'),
        'type' => 'varchar',
        'length' => 256,
        'not null' => TRUE,
      ),
      'data' => array(
        'description' => t('Serialized data of breadcrumb'),
        'type' => 'blob',
        'not null' => TRUE,
        'size' => 'big',
        'serialize' => TRUE,
        'object default' => array(),
      ),
      'weight' => array(
        'description' => t('Breadcrumb weight related to other breadcrumbs'),
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'path_id',
    ),
    'unique keys' => array(
      'machine_name' => array(
        'machine_name',
      ),
    ),
  );
  return $schema;
}

/**
 * Migrate data from 7.x-1.x to 7.x-2.x.
 */
function path_breadcrumbs_update_7200(&$sandbox) {

  // Select all data from old table.
  $variants = db_select('path_breadcrumbs', 'p')
    ->fields('p')
    ->execute();
  $new_variants = array();
  foreach ($variants as $variant) {

    // Replace '*' in path on a new argument placeholder.
    $path_arguments = explode('/', $variant->path);
    $new_path = array();
    $arguments = array();
    $arg_counter = 0;
    foreach ($path_arguments as $index => $arg) {
      if ($arg == '*') {
        $keyword = 'argument_' . ++$arg_counter;
        $new_path[] = '%' . $keyword;
        $arguments[$keyword] = array(
          'position' => $index,
        );
      }
      else {
        $new_path[] = $arg;
      }
    }
    $variant->path = implode('/', $new_path);

    // Create machine name from variant name.
    $variant->machine_name = 'path_breadcrumbs_' . $variant->path_id;

    // Build data array.
    $variant->data = serialize(array(
      'titles' => unserialize($variant->titles),
      'paths' => unserialize($variant->paths),
      'home' => $variant->home,
      'translatable' => 1,
      'arguments' => $arguments,
      'access' => array(),
    ));
    $new_variants[] = $variant;
  }

  // Drop old table.
  db_drop_table('path_breadcrumbs');

  // Create new table.
  db_create_table('path_breadcrumbs', drupal_get_schema_unprocessed('path_breadcrumbs', 'path_breadcrumbs'));

  // Insert old data into updated table.
  foreach ($new_variants as $variant) {
    db_insert('path_breadcrumbs')
      ->fields(array(
      'path_id' => $variant->path_id,
      'name' => $variant->name,
      'machine_name' => $variant->machine_name,
      'path' => $variant->path,
      'data' => $variant->data,
      'weight' => $variant->path_id,
      'disabled' => 0,
    ))
      ->execute();
  }

  // Enable module that is new for 7.x-2.x but was included in 7.x-1.x core.
  module_enable(array(
    'path_breadcrumbs_ui',
  ));
  return t('Path breadcrumbs successfully converted data from old table to a new one.');
}

/**
 * Migrate variables for delimiter and for rich snippert to a new variables name storage.
 */
function path_breadcrumbs_update_7208() {

  // Move delimiter value from old variable to a new one.
  $delimiter = variable_get('path_breadcrumbs_delimited', '»');
  variable_set('path_breadcrumbs_delimiter', $delimiter);
  variable_del('path_breadcrumbs_delimited');

  // Move RDFa support from old variable to a new one.
  $rdfa_enabled = variable_get('path_breadcrumbs_rdfa_enabled', 0);
  if ($rdfa_enabled) {
    variable_set('path_breadcrumbs_rich_snippets', PATH_BREADCRUMBS_RICH_SNIPPETS_RDFA);
  }
  else {
    variable_set('path_breadcrumbs_rich_snippets', PATH_BREADCRUMBS_RICH_SNIPPETS_DISABLED);
  }
  variable_del('path_breadcrumbs_rdfa_enabled');
}

/**
 * Change storage behavior for path breadcrumbs data to prevent failures during export/import.
 */
function path_breadcrumbs_update_7213() {
  $result = db_select('path_breadcrumbs', 'p')
    ->fields('p')
    ->execute();
  foreach ($result as $path_breadcrumbs) {
    $path_breadcrumbs->data = unserialize($path_breadcrumbs->data);
    $path_breadcrumbs->data['titles'] = explode("\n", $path_breadcrumbs->data['titles']);
    $path_breadcrumbs->data['paths'] = explode("\n", $path_breadcrumbs->data['paths']);

    // Update every path breadcrumb to new data storage mechanism.
    db_update('path_breadcrumbs')
      ->fields(array(
      'data' => serialize($path_breadcrumbs->data),
    ))
      ->condition('path_id', $path_breadcrumbs->path_id)
      ->execute();

    // Clear UI caches.
    ctools_include('object-cache');
    ctools_object_cache_clear_all('path_breadcrumbs', $path_breadcrumbs->machine_name);
  }
}

/**
 * Add unique index to field 'machine_name'.
 * Remove field 'disabled' from schema.
 */
function path_breadcrumbs_update_7214() {
  db_add_unique_key('path_breadcrumbs', 'machine_name', array(
    'machine_name',
  ));
  db_drop_field('path_breadcrumbs', 'disabled');
}

Functions

Namesort descending Description
path_breadcrumbs_schema Implements hook_schema().
path_breadcrumbs_uninstall Implements hook_uninstall().
path_breadcrumbs_update_7200 Migrate data from 7.x-1.x to 7.x-2.x.
path_breadcrumbs_update_7208 Migrate variables for delimiter and for rich snippert to a new variables name storage.
path_breadcrumbs_update_7213 Change storage behavior for path breadcrumbs data to prevent failures during export/import.
path_breadcrumbs_update_7214 Add unique index to field 'machine_name'. Remove field 'disabled' from schema.