View source
<?php
function _user_relationships_api_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_api_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_api_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');
}
}
function user_relationships_api_uninstall() {
db_query('DROP TABLE {user_relationships}');
db_query('DROP TABLE {user_relationship_types}');
variable_del('user_relationships_last_expire');
}
function user_relationships_api_update_1() {
return _user_relationships_api_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);
}
function user_relationships_api_update_2() {
return _user_relationships_api_installation_query(array(
"ALTER TABLE {user_relationship_types} ADD `expires_val` int(11) unsigned NOT NULL default 0",
), NULL, TRUE);
}
function user_relationships_api_update_3() {
return _user_relationships_api_installation_query(array(
"ALTER TABLE {user_relationship_types} ADD `plural_name` varchar(255) NOT NULL default '' after name",
), NULL, TRUE);
}
function user_relationships_api_update_4() {
return _user_relationships_api_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_api_update_5() {
return _user_relationships_api_installation_query(array(
'DROP TABLE {cache_user_relationships}',
'ALTER TABLE {user_relationships} DROP PRIMARY KEY',
'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 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`)',
'ALTER TABLE `user_relationships` DROP `tmp_created_at`',
'ALTER TABLE `user_relationships` DROP `tmp_updated_at`',
'ALTER IGNORE TABLE {user_relationships} ADD UNIQUE `relationship` (`requester_id`, `requestee_id`, `rtid`)',
'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_api_update_6() {
return _user_relationships_api_installation_query(array(
"ALTER TABLE {user_relationships} ADD `flags` int(11) default 0",
), NULL, TRUE);
}
function user_relationships_api_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;
}