You are here

quotes.install in Quotes 6

Same filename and directory in other branches
  1. 5 quotes.install
  2. 7 quotes.install

Handles installation and updates for the quotes module.

@copyright Copyright (c) 2003-2007 Jim Riggs. All rights reserved. @author Jim Riggs <drupal at jim and lissa dot com>

File

quotes.install
View source
<?php

/**
 * @file
 *   Handles installation and updates for the quotes module.
 *
 * @copyright Copyright (c) 2003-2007 Jim Riggs.  All rights reserved.
 * @author Jim Riggs <drupal at jim and lissa dot com>
 */

//********************************************************************

//* Drupal Hooks

//********************************************************************

/**
 * Implementation of hook_schema().
 */
function quotes_schema() {
  $schema = array();
  $schema['quotes'] = array(
    'module' => 'Quotes',
    'description' => t('Extra node data.'),
    'fields' => array(
      'nid' => array(
        'description' => t('Node identifier.'),
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10',
      ),
      'vid' => array(
        'description' => t('Version identifier.'),
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10',
      ),
      'aid' => array(
        'description' => t('Author identifier.'),
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10',
      ),
      'citation' => array(
        'description' => t('Source of the quote.'),
        'type' => 'text',
        'not null' => FALSE,
      ),
      'promote' => array(
        'description' => t('Status.'),
        'type' => 'int',
        'size' => 'tiny',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'vid',
    ),
    'indexes' => array(
      'quotes_nid' => array(
        'nid',
      ),
      'quotes_promote' => array(
        'promote',
      ),
      'quotes_aid' => array(
        'aid',
      ),
    ),
  );
  $schema['quotes_blocks'] = array(
    'module' => 'Quotes',
    'description' => t('Quotes blocks data.'),
    'fields' => array(
      'bid' => array(
        'description' => t('Block number'),
        'type' => 'serial',
        'not null' => TRUE,
      ),
      'block_type' => array(
        'description' => t('Type of block'),
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
      ),
      'vid' => array(
        'description' => t('Version id'),
        'type' => 'int',
        'not null' => TRUE,
      ),
      'count' => array(
        'description' => t('Number of quotes in the block.'),
        'type' => 'int',
        'not null' => FALSE,
        'default' => 1,
      ),
      'cron_interval' => array(
        'description' => t('Cron frequency'),
        'type' => 'int',
        'not null' => TRUE,
      ),
      'cron_step' => array(
        'description' => t('Cron step'),
        'type' => 'int',
        'not null' => TRUE,
      ),
      'cron_last' => array(
        'description' => t('Last Cron run time'),
        'type' => 'int',
        'not null' => TRUE,
      ),
      'show_titles' => array(
        'description' => t('Show titles.'),
        'type' => 'int',
        'size' => 'small',
        'not null' => FALSE,
        'default' => 0,
        'disp-width' => '6',
      ),
      'show_citation' => array(
        'description' => t('Show citation.'),
        'type' => 'int',
        'size' => 'small',
        'not null' => FALSE,
        'default' => 0,
      ),
      'max_length' => array(
        'description' => t('Maximum length of quote in block.'),
        'type' => 'int',
        'not null' => FALSE,
        'default' => 0,
        'disp-width' => '11',
      ),
      'rand_freq' => array(
        'description' => t('Display frequency for random blocks.'),
        'type' => 'int',
        'not null' => TRUE,
        'default' => 100,
      ),
      /* Removed by http://drupal.org/node/601434.
         'view_weight' => array(
           'description' => t('Weight for the view link.'),
           'type' => 'int',
           'size' => 'small',
           'not null' => FALSE,
           'default' => 1,
           ), /* */
      'name' => array(
        'description' => t('Name of this block'),
        'type' => 'varchar',
        'length' => '255',
        'not null' => TRUE,
      ),
      'nid_filter' => array(
        'description' => t('Node filter'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'aid_filter' => array(
        'description' => t('Author filter'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'rid_filter' => array(
        'description' => t('Role filter'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'uid_filter' => array(
        'description' => t('User filter'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'tid_filter' => array(
        'description' => t('Term filter'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'view_text' => array(
        'description' => t('Text for the "view" link.'),
        'type' => 'varchar',
        'length' => 64,
        'not null' => FALSE,
      ),
      'more_text' => array(
        'description' => t('Text for the "more" link.'),
        'type' => 'varchar',
        'length' => 64,
        'not null' => FALSE,
      ),
    ),
    'primary key' => array(
      'bid',
    ),
    'unique keys' => array(
      'name' => array(
        'name',
      ),
    ),
  );
  $schema['quotes_authors'] = array(
    'module' => 'Quotes',
    'description' => t('Quotes authors data.'),
    'fields' => array(
      'aid' => array(
        'description' => t('Author identifier.'),
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10',
      ),
      'name' => array(
        'description' => t('Author of the quote.'),
        'type' => 'text',
        'not null' => TRUE,
      ),
      'bio' => array(
        'description' => t("Author's biography."),
        'type' => 'text',
        'not null' => FALSE,
      ),
    ),
    'primary key' => array(
      'aid',
    ),
    'unique keys' => array(
      'name' => array(
        array(
          'name',
          255,
        ),
      ),
    ),
  );
  return $schema;
}

/**
 * Implementation of hook_install().
 */
function quotes_install() {
  drupal_install_schema('quotes');
}

/**
 * Implementation of hook_update_N().
 */
function quotes_update_6100() {

  // This update is provided for users upgrading from a release prior to 5.x-1.2.
  $ret = array();

  // 5.x-1.2 added 'citation'.
  if (!db_column_exists('quotes', 'citation')) {
    $spec = array(
      'description' => t('Source of the quote.'),
      'type' => 'varchar',
      'length' => '255',
      'not null' => FALSE,
    );
    db_add_field($ret, 'quotes', 'citation', $spec);
  }
  return $ret;
}

/**
 * Implementation of hook_update_N().
 */
function quotes_update_6101() {

  // This update adds a block count column.
  $ret = array();

  // Skip this if upgrading from 5.x later than this addition.
  if (!db_column_exists('quotes_blocks', 'count')) {
    $spec1 = array(
      'description' => t('Number of quotes in the block.'),
      'type' => 'int',
      'not null' => FALSE,
      'default' => 1,
    );
    $spec2 = array(
      'description' => t('Show titles.'),
      'type' => 'int',
      'not null' => FALSE,
      'default' => 0,
    );
    db_add_field($ret, 'quotes_blocks', 'count', $spec1);
    db_add_field($ret, 'quotes_blocks', 'show_titles', $spec2);
  }
  return $ret;
}

/**
 * Implementation of hook_update_N().
 */
function quotes_update_6102() {
  global $db_type;
  $items = $create = array();

  // Skip this if upgrading from 5.x later than this addition.
  if (db_table_exists('quotes_authors')) {
    return $items;
  }
  $schema['quotes_authors'] = array(
    'module' => 'Quotes',
    'description' => t('Quotes authors data.'),
    'fields' => array(
      'aid' => array(
        'description' => t('Author identifier.'),
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'disp-width' => '10',
      ),
      'name' => array(
        'description' => t('Author of the quote.'),
        'type' => 'varchar',
        'length' => '255',
        'not null' => TRUE,
      ),
      'bio' => array(
        'description' => t("Author's biography."),
        'type' => 'text',
        'not null' => FALSE,
      ),
    ),
    'primary key' => array(
      'aid',
    ),
    'unique keys' => array(
      'name' => array(
        'name',
      ),
    ),
  );
  db_create_table($items, 'quotes_authors', $schema['quotes_authors']);

  // Add the aid column after the vid column.
  db_add_column($items, 'quotes', 'aid', 'INT UNSIGNED NOT NULL AFTER vid');
  $add = $items[count($items) - 1]['success'];
  if (!$add) {
    drupal_set_message(t('Add column "aid" failed.'), 'error');
    return;
  }

  // Add an index for the aid.
  db_add_index($items, 'quotes', 'quotes_aid', array(
    'aid',
  ));
  $add = $items[count($items) - 1]['success'];
  if (!$add) {
    drupal_set_message(t('Add index for "aid" failed.'), 'error');
    return;
  }

  // Get all the authors.
  $result = db_query("SELECT DISTINCT(author) FROM {quotes} ORDER BY author");
  while ($q = db_fetch_array($result)) {
    $author = $q['author'];

    // If the current author field has a mini-bio, split it off.
    $paren = strpos($author, '(');
    $comma = strpos($author, ',');
    $sub = min($paren === FALSE ? drupal_strlen($author) : $paren, $comma === FALSE ? drupal_strlen($author) : $comma);
    if ($sub === FALSE) {
      $bio = NULL;
    }
    else {
      $bio = trim(drupal_substr($author, $sub));
      $author = trim(drupal_substr($author, 0, $sub));
    }

    // Add the row to the new table.
    $items[] = update_sql("INSERT INTO {quotes_authors} (name, bio) VALUES ('" . db_escape_string($author) . "', '" . db_escape_string($bio) . "')");
    $add = $items[count($items) - 1]['success'];
    if ($add === FALSE) {
      $aid = 'failed';
      $upd = 'bypassed';
    }
    else {
      $aid = db_result(db_query("SELECT LAST_INSERT_ID()"));
      if ($aid < 1) {
        drupal_set_message(t('Invalid aid returned:') . ' ' . $aid, 'error');
      }
      $query = 'UPDATE {quotes} SET aid=' . $aid . " WHERE author='" . db_escape_string($q['author']) . "'";
      $items[] = update_sql($query);
    }
  }
  db_drop_field($items, 'quotes', 'author');
  $del = $items[count($items) - 1]['success'];
  if (!$del) {
    drupal_set_message(t('Drop column "author" failed.'), 'error');
  }
  drupal_set_message(t('Update 6102 for Quotes complete.'), 'status');
  return $items;
}

/**
 * Implementation of hook_update_N().
 * Change citation, author name to TEXT.
 */
function quotes_update_6103() {
  $ret = array();
  db_change_field($ret, 'quotes', 'citation', 'citation', array(
    'type' => 'text',
    'not null' => FALSE,
  ));
  db_drop_index($ret, 'quotes_authors', 'name');
  db_change_field($ret, 'quotes_authors', 'name', 'name', array(
    'type' => 'text',
    'not null' => FALSE,
  ));
  db_add_index($ret, 'quotes_authors', 'name', array(
    array(
      'name',
      255,
    ),
  ));
  return $ret;
}

/**
 * Implementation of hook_update_N().
 * Moving block variables to quotes_blocks table.
 */
function quotes_update_6104() {
  $ret = array();
  db_change_field($ret, 'quotes_blocks', 'show_titles', 'show_titles', array(
    'type' => 'int',
    'size' => 'small',
  ));

  // 5.x-1.2 added 'citation'.
  if (!db_column_exists('quotes_blocks', 'show_citation')) {
    db_add_field($ret, 'quotes_blocks', 'show_citation', array(
      'description' => t('Show citation.'),
      'type' => 'int',
      'size' => 'small',
      'not null' => FALSE,
      'default' => 0,
    ));
    db_add_field($ret, 'quotes_blocks', 'max_length', array(
      'description' => t('Maximum length of quote in block.'),
      'type' => 'int',
      'not null' => TRUE,
      'default' => 0,
    ));
    db_add_field($ret, 'quotes_blocks', 'view_weight', array(
      'description' => t('Weight for the view link.'),
      'type' => 'int',
      'size' => 'small',
      'not null' => FALSE,
      'default' => 1,
    ));
    db_add_field($ret, 'quotes_blocks', 'more_text', array(
      'description' => t('Text for the "more" link.'),
      'type' => 'varchar',
      'length' => 64,
      'not null' => FALSE,
    ));
    db_add_field($ret, 'quotes_blocks', 'view_text', array(
      'description' => t('Text for the "view" link.'),
      'type' => 'varchar',
      'length' => 64,
      'not null' => FALSE,
    ));
  }

  // Incorrectly set per block.
  $max_len = variable_get('quotes_block_max_length', 0);

  // Set globally in admin page.
  $view_text = variable_get('quotes_block_view_text', t('View'));
  $view_weight = variable_get('quotes_block_view_weight', 1);
  $show_citation = variable_get('quotes_block_citation', TRUE);
  $ret[] = update_sql("UPDATE {quotes_blocks} SET view_text='" . $view_text . "', view_weight=" . $view_weight . ", show_citation=" . $show_citation . ", max_length=" . $max_len . " WHERE 1=1");

  // "more" text is per block already, but in a variable.
  $result = db_query('SELECT bid FROM {quotes_blocks}');
  while ($block = db_fetch_array($result)) {
    $more_text = variable_get('quotes_more_' . $block['bid'], NULL);
    $ret[] = update_sql("UPDATE {quotes_blocks} SET more_text='" . $more_text . "' WHERE bid=" . $block['bid']);
  }

  // Don't delete variables in case the update fails.
  return $ret;
}

/**
 * Implementation of hook_update_N().
 * Adding author filter to quotes_blocks table.
 */
function quotes_update_6105() {
  $ret = array();
  if (db_column_exists('quotes_blocks', 'aid_filter')) {
    $ret[] = array(
      'success' => TRUE,
      'query' => t('The aid_filter column already exists.'),
    );
    db_change_field($ret, 'quotes_blocks', 'aid_filter', 'aid_filter', array(
      'type' => 'text',
      'not null' => TRUE,
    ));
  }
  else {
    db_add_field($ret, 'quotes_blocks', 'aid_filter', array(
      'description' => t('Author filter.'),
      'type' => 'text',
      'not null' => TRUE,
      'initial' => 'none',
    ));
  }
  return $ret;
}

/**
 * Implementation of hook_update_N().
 * Adding random frequency to quotes_blocks table.
 */
function quotes_update_6106() {
  $ret = array();
  if (db_column_exists('quotes_blocks', 'rand_freq')) {
    $ret[] = array(
      'success' => TRUE,
      'query' => t('The rand_freq column already exists.'),
    );
  }
  else {
    db_add_field($ret, 'quotes_blocks', 'rand_freq', array(
      'description' => t('Display frequency for random blocks.'),
      'type' => 'int',
      'not null' => TRUE,
      'default' => 100,
    ));
  }
  return $ret;
}

/**
 * Implementation of hook_update_N().
 * See http://drupal.org/node/601434.
 */
function quotes_update_6107() {
  $ret = array();
  if (db_column_exists('quotes_blocks', 'view_weight')) {
    db_drop_field($ret, 'quotes_blocks', 'view_weight');
  }

  // Let's see if any blocks use "plain" title.
  $result = db_query('SELECT bid, name, show_titles FROM {quotes_blocks} WHERE show_titles = 2');
  while ($row = db_fetch_object($result)) {
    if ($row->show_titles == 2) {
      drupal_set_message(t("The @block_name block will be changed to show titles linked to the node.", array(
        '@block_name' => $row->name,
      )));
    }
  }
  $ret[] = update_sql("UPDATE {quotes_blocks} SET show_titles = 1 WHERE show_titles = 2");
  return $ret;
}

/**
 * Implementation of hook_uninstall().
 */
function quotes_uninstall() {
  variable_del('quotes_author_bio');
  variable_del('quotes_author_link');
  variable_del('quotes_block_citation');
  variable_del('quotes_block_view_text');
  variable_del('quotes_block_view_weight');
  variable_del('quotes_leader');
  variable_del('quotes_node_view_link');
  variable_del('quotes_node_view_weight');
  variable_del('quotes_per_page');
  variable_del('quotes_show_myquotes');
  variable_del('quotes_showlink');
  variable_del('quotes_user_recent');
  variable_del('quotes_block_max_length');
  variable_del('quotes_edit_link');
  variable_del('quotes_show_myquotes_original');
  db_query("DELETE FROM {variable} WHERE name LIKE ('quotes_more_%')");

  // Remove all Quotes nodes.
  $result = db_query("SELECT nid FROM {node} WHERE type = 'quotes'");
  while ($obj = db_fetch_object($result)) {
    node_delete($obj->nid);
  }
  drupal_uninstall_schema('quotes');

  // Delete all our blocks.
  db_query("DELETE FROM {blocks} WHERE module='quotes'");

  // Clear the cache.
  cache_clear_all;
}

Functions

Namesort descending Description
quotes_install Implementation of hook_install().
quotes_schema Implementation of hook_schema().
quotes_uninstall Implementation of hook_uninstall().
quotes_update_6100 Implementation of hook_update_N().
quotes_update_6101 Implementation of hook_update_N().
quotes_update_6102 Implementation of hook_update_N().
quotes_update_6103 Implementation of hook_update_N(). Change citation, author name to TEXT.
quotes_update_6104 Implementation of hook_update_N(). Moving block variables to quotes_blocks table.
quotes_update_6105 Implementation of hook_update_N(). Adding author filter to quotes_blocks table.
quotes_update_6106 Implementation of hook_update_N(). Adding random frequency to quotes_blocks table.
quotes_update_6107 Implementation of hook_update_N(). See http://drupal.org/node/601434.