You are here

user_relationship_migrate.mysql.inc in User Relationships 6

MySQL implementation of Buddylist2->UR migration

File

user_relationship_migrate/user_relationship_migrate.mysql.inc
View source
<?php

/**
 * @file MySQL implementation of Buddylist2->UR migration
 */

/**
 * Migrate pending relationships.
 */
function user_relationship_migrate_pending($rtid) {
  db_query('LOCK TABLE {user_relationships} WRITE, {buddylist_pending_requests} READ');
  db_query("INSERT INTO {user_relationships} (requester_id, requestee_id, rtid, approved, created_at)\n     SELECT requester_uid, requestee_uid, %d, 0, %d FROM {buddylist_pending_requests}", $rtid, time());
  db_query('UNLOCK TABLES');
  return TRUE;
}

/**
 * Helper function to run the actual transactions.
 */
function _user_relationship_migrate_run($rtid) {
  $rtype = user_relationships_type_load(array(
    'rtid' => $rtid,
  ));
  if (!$rtype->rtid) {
    return FALSE;
  }
  $start_time = time();
  if ($rtype->is_oneway) {

    //migrate one-way relationships as is, rid will autoincrement
    db_query("INSERT INTO {user_relationships} (rtid, requester_id, requestee_id, created_at, updated_at, approved) \n       SELECT %d, uid, buddy, timestamp, %d, 1 \n       FROM {buddylist}", $rtid, time());
  }
  else {

    //for two-way relationship, use IF and IGNORE so that only one direction is imported
    db_query("INSERT IGNORE INTO {user_relationships} (rtid, requester_id, requestee_id, created_at, updated_at, approved) \n       SELECT %d, IF( uid > buddy, uid, buddy ) AS uid, IF( uid < buddy, uid, buddy ) AS buddy, timestamp, %d, 1 \n       FROM {buddylist}", $rtid, time());

    //then, fill in the other direction keeping the same rid. The SELECT below picks two-way relationships which do not

    //have a record going in the opposite direction.
    db_query('INSERT INTO {user_relationships} (rid, rtid, requester_id, requestee_id, created_at, updated_at, approved)
        SELECT ur1.rid, ur1.rtid, ur1.requestee_id, ur1.requester_id, ur1.created_at, ur1.updated_at, ur1.approved
        FROM {user_relationships} ur1 LEFT JOIN {user_relationships} ur2 ON ur1.rid = ur2.rid AND ur1.requester_id = ur2.requestee_id
        WHERE ur1.rtid = %d AND ur2.rid is null and ur1.updated_at >= %d', $rtid, $start_time);
  }
  return TRUE;
}

Functions

Namesort descending Description
user_relationship_migrate_pending Migrate pending relationships.
_user_relationship_migrate_run Helper function to run the actual transactions.