You are here

votingapi.install in Voting API 6.2

Installation file for VotingAPI module.

File

votingapi.install
View source
<?php

/**
 * @file
 * Installation file for VotingAPI module.
 */
function votingapi_schema() {
  $schema['votingapi_vote'] = array(
    'fields' => array(
      'vote_id' => array(
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'content_type' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'node',
      ),
      'content_id' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'value' => array(
        'type' => 'float',
        'not null' => TRUE,
        'default' => 0,
      ),
      'value_type' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'percent',
      ),
      'tag' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'vote',
      ),
      'uid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'timestamp' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'vote_source' => array(
        'type' => 'varchar',
        'length' => 255,
      ),
    ),
    'primary key' => array(
      'vote_id',
    ),
    'indexes' => array(
      'content_uid' => array(
        'content_type',
        'content_id',
        'uid',
      ),
      'content_uid_2' => array(
        'content_type',
        'uid',
      ),
      'content_source' => array(
        'content_type',
        'content_id',
        'vote_source',
      ),
      'content_value_tag' => array(
        'content_type',
        'content_id',
        'value_type',
        'tag',
      ),
    ),
  );
  $schema['votingapi_cache'] = array(
    'fields' => array(
      'vote_cache_id' => array(
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'content_type' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'node',
      ),
      'content_id' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
      'value' => array(
        'type' => 'float',
        'not null' => TRUE,
        'default' => 0,
      ),
      'value_type' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'percent',
      ),
      'tag' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => 'vote',
      ),
      'function' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
        'default' => '',
      ),
      'timestamp' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'vote_cache_id',
    ),
    'indexes' => array(
      'content' => array(
        'content_type',
        'content_id',
      ),
      'content_function' => array(
        'content_type',
        'content_id',
        'function',
      ),
      'content_tag_func' => array(
        'content_type',
        'content_id',
        'tag',
        'function',
      ),
      'content_vtype_tag' => array(
        'content_type',
        'content_id',
        'value_type',
        'tag',
      ),
      'content_vtype_tag_func' => array(
        'content_type',
        'content_id',
        'value_type',
        'tag',
        'function',
      ),
    ),
  );
  return $schema;
}
function votingapi_install() {
  drupal_install_schema('votingapi');
}
function votingapi_uninstall() {
  drupal_uninstall_schema('votingapi');
}

/**
 * UTF8 update
 */
function votingapi_update_1() {
  return _system_update_utf8(array(
    'votingapi_vote',
    'votingapi_cache',
  ));
}

/**
 * Value fields changed to signed floats.
 */
function votingapi_update_2() {
  $ret = array();
  db_drop_primary_key($ret, 'votingapi_cache');
  db_drop_primary_key($ret, 'votingapi_vote');
  db_change_field($ret, votingapi_cache, value, value, array(
    'type' => 'float',
    'default' => NULL,
  ), array(
    'primary_key' => array(
      'vote_cache_id',
    ),
  ));
  db_change_field($ret, votingapi_vote, value, value, array(
    'type' => 'float',
    'default' => NULL,
  ), array(
    'primary_key' => array(
      'vote_id',
    ),
  ));
  return $ret;
}

/**
 * Value fields changed to signed floats.
 */
function votingapi_update_3() {
  $ret = array();
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'percent' WHERE value_type = '1'");
      $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'points' WHERE value_type = '2'");
      $ret[] = update_sql("UPDATE {votingapi_cache} SET value_type = 'option' WHERE value_type = '3'");
      $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'percent' WHERE value_type = '1'");
      $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'points' WHERE value_type = '2'");
      $ret[] = update_sql("UPDATE {votingapi_vote} SET value_type = 'option' WHERE value_type = '3'");
      break;
  }
  return $ret;
}

/**
 * Initial work to roll Voting Actions functionality into Voting API.
 */
function votingapi_update_4() {
  $ret = array();
  $name = 'votingapi_action_set';
  $table_action_step = array(
    'fields' => array(
      'vasid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'parent' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'required' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
      ),
      'mask' => array(
        'type' => 'varchar',
        'default' => 'AND',
      ),
      'content_type' => array(
        'type' => 'varchar',
        'length' => 20,
        'default' => NULL,
      ),
      'name' => array(
        'type' => 'varchar',
        'length' => 128,
        'default' => NULL,
      ),
      'enabled' => array(
        'type' => 'int',
        'default' => 1,
      ),
      'source' => array(
        'type' => 'varchar',
        'length' => 65,
        'default' => NULL,
      ),
      'weight' => array(
        'type' => 'int',
        'length' => 10,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary key' => array(
      'vasid',
    ),
  );
  db_create_table($ret, $name, $table_action_set);
  $name = 'votingapi_action_condition';
  $table_action_condition = array(
    'fields' => array(
      'vacid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'vasid' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'weight' => array(
        'type' => 'int',
        'length' => 10,
        'not null' => TRUE,
        'default' => 0,
      ),
      'value' => array(
        'type' => 'varchar',
        'length' => 255,
      ),
      'handler' => array(
        'type' => 'varchar',
        'length' => 255,
      ),
    ),
    'primary key' => array(
      'vacid',
    ),
  );
  db_create_table($ret, $name, $table_action_condition);
  $name = 'votingapi_action';
  $table_votingapi_action = array(
    'fields' => array(
      'vasid' => array(
        'type' => 'int',
        'length' => 10,
        'unsigned' => TRUE,
        'not null' => TRUE,
      ),
      'aid' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
  );
  db_create_table($ret, $name, $table_votingapi_action);
  return $ret;
}

/**
 * Fixed index definition, corrected table prefixes.
 */
function votingapi_update_5() {
  $ret = array();
  db_add_index($ret, '{votingapi_vote}', 'content', array(
    'content_type',
    'content_id',
  ));
  db_add_index($ret, '{votingapi_cache}', 'content', array(
    'content_type',
    'content_id',
  ));
  db_drop_index($ret, '{votingapi_vote}', 'content_type');
  db_drop_index($ret, '{votingapi_vote}', 'content_id');
  db_drop_index($ret, '{votingapi_cache}', 'content_type');
  db_drop_index($ret, '{votingapi_cache}', 'content_id');
  db_rename_table($ret, 'votingapi_action_condition', '{votingapi_action_condition}');
  db_rename_table($ret, 'votingapi_action', '{votingapi_action}');
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':
      $ret[] = update_sql("UPDATE {sequences} SET name = '{votingapi_cache}' WHERE name = 'votingapi_cache';");
      $ret[] = update_sql("UPDATE {sequences} SET name = '{votingapi_vote}' WHERE name = 'votingapi_vote';");
      break;
  }
  return $ret;
}
function votingapi_update_6() {
  $ret = array();
  db_add_column($ret, 'votingapi_action_condition', 'name', 'varchar', array(
    'length' => 128,
  ));
  db_add_column($ret, 'votingapi_action_set', 'name', 'description', array(
    'length' => 255,
    'not null' => TRUE,
  ));
  db_change_column($ret, 'votingapi_action_condition', 'value', 'data', 'varchar', array(
    'length' => 255,
  ));
  return $ret;
}
function votingapi_update_7() {

  // There are quite a few changes. Let's just take the easy way and nuke this puppy.
  // Nothing has been using the tables up to this point, anyhow.
  db_drop_table($ret, 'votingapi_action_set');
  db_drop_table($ret, 'votingapi_action_condition');
  db_drop_table($ret, 'votingapi_action');
  $name = 'votingapi_action_set';
  $table_votingapi_action_set = array(
    'fields' => array(
      'name' => array(
        'type' => 'varchar',
        'length' => 64,
        'not null' => TRUE,
      ),
      'parent_name' => array(
        'type' => 'varchar',
        'default' => NULL,
      ),
      'content_type' => array(
        'type' => 'varchar',
        'length' => 20,
        'default' => NULL,
      ),
      'source' => array(
        'type' => 'varchar',
        'length' => 64,
        'default' => NULL,
      ),
      'description' => array(
        'type' => 'varchar',
        'length' => 255,
        'default' => NULL,
      ),
      'required' => array(
        'type' => 'int',
        'length' => 8,
        'not null' => TRUE,
        'default' => 0,
      ),
      'criteria_mask' => array(
        'type' => 'varchar',
        'length' => 8,
        'default' => 'AND',
      ),
      'weight' => array(
        'type' => 'int',
        'length' => 10,
        'not null' => TRUE,
        'default' => 0,
      ),
    ),
    'primary_key' => array(
      'name',
    ),
  );
  db_create_table($ret, $name, $table_votingapi_action_set);
  $name = 'votingapi_action_condition';
  $table_votingapi_action_condition = array(
    'fields' => array(
      'name' => array(
        'type' => 'varchar',
        'length' => 64,
        'length' => 64,
      ),
      'parent_name' => array(
        'type' => 'varchar',
        'default' => NULL,
      ),
      'description' => array(
        'type' => 'varchar',
        'length' => 255,
        'default' => NULL,
      ),
      'data' => array(
        'type' => 'varchar',
        'length' => 255,
      ),
      'handler' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
      ),
    ),
    'primary key' => array(
      'name',
    ),
  );
  db_create_table($ret, $name, $table_votingapi_action_condition);
  $name = 'votingapi_action';
  $table_votingapi_action = array(
    'fields' => array(
      'parent_name' => array(
        'type' => 'varchar',
        'length' => 64,
        'length' => 64,
      ),
      'aid' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => 255,
      ),
    ),
  );
  db_create_table($ret, $name, $table_votingapi_action);
  return $ret;
}
function votingapi_update_8() {

  // whoops. mis-named column.
  $ret = array();
  db_change_column($ret, 'votingapi_action_set', 'criteria_mask', 'condition_mask', 'varchar', array(
    'length' => 8,
    'default' => 'AND',
  ));
  return $ret;
}
function votingapi_update_9() {
  $ret = array();
  db_add_column($ret, 'votingapi_cache', 'timestamp', 'int', array(
    'length' => 11,
    'default' => NULL,
  ));
  $ret[] = update_sql("UPDATE {votingapi_cache} SET timestamp = " . time() . " WHERE timestamp IS NULL;");
  return $ret;
}
function votingapi_update_6100() {
  $ret = array();

  // Convert vote_id and vote_cache_id columns to auto increment.
  db_drop_primary_key($ret, 'votingapi_cache');
  db_change_field($ret, 'votingapi_cache', 'vote_cache_id', 'vote_cache_id', array(
    'type' => 'serial',
    'not null' => TRUE,
  ), array(
    'primary key' => array(
      'vote_cache_id',
    ),
  ));
  db_drop_primary_key($ret, 'votingapi_vote');
  db_change_field($ret, 'votingapi_vote', 'vote_id', 'vote_id', array(
    'type' => 'serial',
    'not null' => TRUE,
  ), array(
    'primary key' => array(
      'vote_id',
    ),
  ));

  // Rename the 'hostname' field to 'vote_source' for more flexibility.
  db_change_field($ret, 'votingapi_vote', 'hostname', 'vote_source', array(
    'type' => 'varchar',
    'length' => 255,
  ));
  $indexes = array(
    'content_uid' => array(
      'content_type',
      'content_id',
      'uid',
    ),
    'content_source' => array(
      'content_type',
      'content_id',
      'vote_source',
    ),
    'content_vtype' => array(
      'content_type',
      'content_id',
      'value_type',
    ),
    'content_value_tag' => array(
      'content_type',
      'content_id',
      'value_type',
      'tag',
    ),
  );
  foreach ($indexes as $name => $fields) {
    db_add_index($ret, 'votingapi_vote', $name, $fields);
  }
  $indexes = array(
    'content_function' => array(
      'content_type',
      'content_id',
      'function',
    ),
    'content_tag_func' => array(
      'content_type',
      'content_id',
      'tag',
      'function',
    ),
    'content_vtype_tag' => array(
      'content_type',
      'content_id',
      'value_type',
      'tag',
    ),
    'content_vtype_tag_func' => array(
      'content_type',
      'content_id',
      'value_type',
      'tag',
      'function',
    ),
  );
  foreach ($indexes as $name => $fields) {
    db_add_index($ret, 'votingapi_cache', $name, $fields);
  }

  // Yes, we loves us the SchemaAPI.
  return $ret;
}

// More index tweaking for votingapi_vote table.
// It's not really kosher, but this update was *altered* after the release of version 2.0
// to correct a typo. Better to fix it in-place than leave an actual bug.
function votingapi_update_6101() {
  $ret = array();
  db_drop_index($ret, 'votingapi_vote', 'content');
  db_drop_index($ret, 'votingapi_vote', 'content_vtype');
  db_add_index($ret, 'votingapi_vote', 'content_uid_2', array(
    'content_type',
    'uid',
  ));
  return $ret;
}

Functions

Namesort descending Description
votingapi_install
votingapi_schema @file Installation file for VotingAPI module.
votingapi_uninstall
votingapi_update_1 UTF8 update
votingapi_update_2 Value fields changed to signed floats.
votingapi_update_3 Value fields changed to signed floats.
votingapi_update_4 Initial work to roll Voting Actions functionality into Voting API.
votingapi_update_5 Fixed index definition, corrected table prefixes.
votingapi_update_6
votingapi_update_6100
votingapi_update_6101
votingapi_update_7
votingapi_update_8
votingapi_update_9