You are here

function _user_relationships_save_relationship in User Relationships 5.2

Create the new relationship

2 calls to _user_relationships_save_relationship()
user_relationships_request_relationship in ./user_relationships_api.inc
Public API for creating a relationship.
user_relationships_update_relationship in ./user_relationships_api.inc
Public API for updating a relationship.

File

./user_relationships.module, line 225

Code

function _user_relationships_save_relationship(&$relationship, $op = 'create') {
  if (!isset($relationship->flags)) {
    $relationship->flags = UR_OK;
  }
  _user_relationships_invoke('pre-save', $relationship, $op);
  if (!$relationship->created_at) {
    $relationship->created_at = time();
  }
  if ($relationship->rid) {

    // Delete the original request
    db_query('DELETE FROM {user_relationships} WHERE rid = %d', $relationship->rid);

    // Delete possible requests coming the other direction
    $relationship_type = user_relationships_type_load($relationship->rtid);
    if (!$relationship_type->is_oneway) {
      db_query('DELETE FROM {user_relationships} WHERE rtid = %d AND requester_id = %d AND requestee_id = %d', $relationship->rtid, $relationship->requestee_id, $relationship->requester_id);
    }
  }
  else {
    $relationship->rid = db_next_id('{user_relationships}_id');
  }
  $queries = array();
  $relationship_type = user_relationships_type_load($relationship->rtid);
  $query = 'INSERT INTO {user_relationships} (rid, requester_id, requestee_id, rtid, approved, created_at, updated_at, flags) VALUES';
  $insertions = '(%d, %d, %d, %d, %d, %d, %d, %d)';
  $arguments = array(
    $relationship->rid,
    $relationship->requester_id,
    $relationship->requestee_id,
    $relationship->rtid,
    $relationship->approved,
    $relationship->created_at,
    time(),
    $relationship->flags,
  );
  $queries[] = array(
    "{$query} {$insertions}",
    $arguments,
  );
  if ($relationship->approved && !$relationship_type->is_oneway) {
    $requester = $arguments[1];
    $arguments[1] = $arguments[2];
    $arguments[2] = $requester;
    $queries[] = array(
      "{$query} {$insertions}",
      $arguments,
    );
  }
  foreach ($queries as $query) {
    if (db_query($query[0], $query[1]) === FALSE) {

      // If this ever happens we have major problems
      return FALSE;
    }
  }
  _user_relationships_invoke('post-save', $relationship, $op);
  return $relationship;
}