You are here

user_relationships.install in User Relationships 5.2

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

File

user_relationships.install
View source
<?php

function _user_relationships_installation_query($mysql = array(), $pgsql = array(), $update = NULL) {
  global $db_type;
  $success = TRUE;
  $queries = array();
  if (strpos($db_type, 'mysql') !== FALSE && $mysql) {
    $queries = $mysql;
  }
  else {
    if ($db_type == 'pgsql' && $pgsql) {
      $queries = $pgsql;
    }
    else {
      $success = FALSE;
      drupal_set_message(t('Unsupported database.'));
    }
  }
  if ($update) {
    $ret = array();
    foreach ($queries as $query) {
      $ret[] = update_sql($query);
    }
    return $ret;
  }
  else {
    foreach ($queries as $query) {
      if (!db_query($query)) {
        $success = FALSE;
        break;
      }
    }
    return (bool) $success;
  }
}
function user_relationships_install() {
  $mysql_queries = array(
    "CREATE TABLE {user_relationship_types} (\n      `rtid` int(11) unsigned NOT NULL default 0,\n      `name` varchar(255) NOT NULL default '',\n      `plural_name` varchar(255) NOT NULL default '',\n      `is_oneway` tinyint(1) NOT NULL default 0,\n      `requires_approval` tinyint(1) NOT NULL default 0,\n      `expires_val` int(11) unsigned NOT NULL default 0,\n      PRIMARY KEY (`rtid`),\n      UNIQUE KEY `name` (`name`)\n    ) /*!40100 DEFAULT CHARACTER SET utf8*/;",
    "CREATE TABLE {user_relationships} (\n      `rid` int(11) unsigned NOT NULL default 0,\n      `requester_id` int(11) NOT NULL default 0,\n      `requestee_id` int(11) NOT NULL default 0,\n      `rtid` int(11) NOT NULL default 0,\n      `approved` tinyint(1) NOT NULL default 0,\n      `created_at` int(11) NOT NULL,\n      `updated_at` int(11) NOT NULL,\n      `flags` int(11) default 0,\n      UNIQUE KEY `relationship` (`requester_id`,`requestee_id`,`rtid`),\n      KEY `rid` (`rid`),\n      KEY `requester_id` (`requester_id`),\n      KEY `requestee_id` (`requestee_id`),\n      KEY `rtid` (`rtid`)\n    ) /*!40100 DEFAULT CHARACTER SET utf8*/;",
  );
  $pgsql_queries = array(
    "CREATE TABLE {user_relationship_types} (\n      rtid int_unsigned NOT NULL default 0,\n      name varchar(255) NOT NULL default '',\n      plural_name varchar(255) NOT NULL default '',\n      is_oneway smallint NOT NULL default 0,\n      requires_approval smallint NOT NULL default 0,\n      expires_val int_unsigned NOT NULL default 0,\n      PRIMARY KEY (rtid)\n    )",
    "CREATE UNIQUE INDEX {user_relationship_types}_name_idx ON {user_relationship_types} (name)",
    "CREATE SEQUENCE {user_relationship_types}_id_seq",
    "CREATE TABLE {user_relationships} (\n      rid int_unsigned NOT NULL default 0,\n      requester_id int NOT NULL default 0,\n      requestee_id int NOT NULL default 0,\n      rtid int NOT NULL default 0,\n      approved smallint NOT NULL default 0,\n      created_at int NOT NULL,\n      updated_at int NOT NULL,\n      flags int default 0\n    )",
    "CREATE UNIQUE INDEX {user_relationships}_relationship_idx ON {user_relationships} (requester_id, requestee_id, rtid)",
    "CREATE INDEX {user_relationships}_rid_idx ON {user_relationships} (rid)",
    "CREATE INDEX {user_relationships}_requester_id_idx ON {user_relationships} (requester_id)",
    "CREATE INDEX {user_relationships}_requestee_id_idx ON {user_relationships} (requestee_id)",
    "CREATE INDEX {user_relationships}_rtid_idx ON {user_relationships} (rtid)",
    "CREATE SEQUENCE {user_relationships}_id_seq",
  );
  if (_user_relationships_installation_query($mysql_queries, $pgsql_queries)) {
    drupal_set_message(t('User Relationships module installed successfully.'));
  }
  else {
    drupal_set_message(t('The installation of the User Relationships module was unsuccessful.'), 'error');
  }
}

/**
 * Implementation of hook_uninstall().
 */
function user_relationships_uninstall() {
  db_query('DROP TABLE {user_relationships}');
  db_query('DROP TABLE {user_relationship_types}');
  variable_del('user_relationships_require_approval');
  variable_del('user_relationships_allow_multiple');
  variable_del('user_relationships_show_online_status');
  variable_del('user_relationships_user_mail');
  variable_del('user_relationships_profile_relationships');
}

/**
 * Update 1: Add timestamp to allow expiring unanswered requests
 */
function user_relationships_update_1() {
  return _user_relationships_installation_query(array(
    "ALTER TABLE {user_relationships} ADD `created_at` DATETIME NOT NULL",
    "ALTER TABLE {user_relationships} ADD `updated_at` TIMESTAMP NOT NULL",
    "UPDATE {user_relationships} SET `created_at` = NOW()",
  ), NULL, TRUE);
}

/**
 * Update 2: Add expiration of relationship requests
 */
function user_relationships_update_2() {
  return _user_relationships_installation_query(array(
    "ALTER TABLE {user_relationship_types} ADD `expires_val` int(11) unsigned NOT NULL default 0",
  ), NULL, TRUE);
}

/**
 * Update 3: Add plural form of relationship type name
 */
function user_relationships_update_3() {
  return _user_relationships_installation_query(array(
    "ALTER TABLE {user_relationship_types} ADD `plural_name` varchar(255) NOT NULL default '' after name",
  ), NULL, TRUE);
}

/**
 * Update 4: Add separate cache table for user relationship data
 */
function user_relationships_update_4() {
  return _user_relationships_installation_query(array(
    "CREATE TABLE {cache_user_relationships} (\n      `cid` varchar(255) NOT NULL default '',\n      `data` longblob,\n      `expire` int(11) NOT NULL default 0,\n      `created` int(11) NOT NULL default 0,\n      `headers` text,\n      `serialized` int(1) NOT NULL default 0,\n      PRIMARY KEY (`cid`),\n      KEY `expire` (`expire`)\n    ) /*!40100 DEFAULT CHARACTER SET utf8*/",
  ), NULL, TRUE);
}
function user_relationships_update_5() {
  return _user_relationships_installation_query(array(
    // Kill off the cache table
    'DROP TABLE {cache_user_relationships}',
    // drop rid as a primary key as it'll have duplicates
    'ALTER TABLE {user_relationships} DROP PRIMARY KEY',
    // create temporary created_at and updated_at fields and populate them with the current
    // created_at and updated_at values
    'ALTER TABLE {user_relationships} ADD `tmp_created_at` DATETIME',
    'ALTER TABLE {user_relationships} ADD `tmp_updated_at` DATETIME',
    'UPDATE {user_relationships} SET `tmp_created_at` = `created_at`, `tmp_updated_at` = `updated_at`',
    // alter the created_at and updated_at fields to be int(11) to hold unix timestamps
    // update the newly altered fields with the current data in unix timestamp format
    'ALTER TABLE {user_relationships} CHANGE  `created_at`  `created_at` INT(11) UNSIGNED NOT NULL',
    'ALTER TABLE {user_relationships} CHANGE  `updated_at`  `updated_at` INT(11) UNSIGNED NOT NULL',
    'UPDATE {user_relationships} SET `created_at` = UNIX_TIMESTAMP(`tmp_created_at`), `updated_at` = UNIX_TIMESTAMP(`tmp_updated_at`)',
    // remove the temporary fields
    'ALTER TABLE `user_relationships` DROP `tmp_created_at`',
    'ALTER TABLE `user_relationships` DROP `tmp_updated_at`',
    // add a uniqueness checker on the three main fields
    'ALTER IGNORE TABLE {user_relationships} ADD UNIQUE `relationship` (`requester_id`, `requestee_id`, `rtid`)',
    // migrate approved two-way relationships to be double entered
    'INSERT INTO {user_relationships} (`rid`, `requester_id`, `requestee_id`, `rtid`, `approved`, `created_at`, `updated_at`)
      SELECT `rid`, `requestee_id`, `requester_id`, ur.`rtid`, `approved`, `created_at`, `updated_at`
      FROM {user_relationships} ur INNER JOIN {user_relationship_types} urt ON ur.`rtid` = urt.`rtid`
      WHERE urt.`is_oneway` = 0 AND ur.`approved` = 1',
  ), NULL, TRUE);
}
function user_relationships_update_6() {
  return _user_relationships_installation_query(array(
    "ALTER TABLE {user_relationships} ADD `flags` int(11) default 0",
  ), NULL, TRUE);
}
function user_relationships_update_7() {
  global $db_type;
  $ret = array();
  $ids = array();
  if (strpos($db_type, 'mysql') !== FALSE || $db_type == 'pgsql') {
    $results = db_query(" SELECT ur_1.rid AS ur_1, ur_2.rid AS ur_2 \n        FROM {user_relationships} ur_1 \n          JOIN {user_relationships} ur_2 ON ur_1.rtid = ur_2.rtid \n            AND ur_1.requester_id = ur_2.requestee_id \n            AND ur_1.requestee_id = ur_2.requester_id\n      ");
    while ($result = db_fetch_object($results)) {
      if (!isset($ids[$result->ur_1])) {
        $ids[$result->ur_1] = $result->ur_2;
        $ids[$result->ur_2] = $result->ur_1;
        $ret[] = update_sql("UPDATE {user_relationships} SET rid = {$result->ur_1} WHERE rid = {$result->ur_2}");
      }
    }
  }
  else {
    drupal_set_message(t('Unsupported database.'));
  }
  return $ret;
}

Functions

Namesort descending Description
user_relationships_install
user_relationships_uninstall Implementation of hook_uninstall().
user_relationships_update_1 Update 1: Add timestamp to allow expiring unanswered requests
user_relationships_update_2 Update 2: Add expiration of relationship requests
user_relationships_update_3 Update 3: Add plural form of relationship type name
user_relationships_update_4 Update 4: Add separate cache table for user relationship data
user_relationships_update_5
user_relationships_update_6
user_relationships_update_7
_user_relationships_installation_query