You are here

function user_relationshipsactivity_user_relationships in Activity 5.4

Same name and namespace in other branches
  1. 5.3 contrib/user_relationshipsactivity/user_relationshipsactivity.module \user_relationshipsactivity_user_relationships()
  2. 6 contrib/user_relationshipsactivity/user_relationshipsactivity.module \user_relationshipsactivity_user_relationships()

Implementation of hook_user_relationships().

Parameters

$op: The action taken on a user relationship or user relationship type

$relationship: The relationship object.

$category: An optional parameter that when added indicates the 'suboperation' of the operation in $op

The array of possible $op and $category parameters are:

$type | $category | Description ---------------------------------------------------------------------------------------- insert | type | before a new relationship type is created update | type | before a relationship type is updated delete | type | after a relationship type is deleted load | type | after a relationship type is loaded (so you can add data to it if you'd like) load | NULL | after a relationship is loaded pre-save | request|update|approve | before a new relationship is created or updated post-save | request|update|approve | after a new relationship is created or updated delete | remove | when a relationship is removed delete | cancel | when a relationship request is cancelled delete | disapprove | when a relationship request is disapprove

File

contrib/user_relationshipsactivity/user_relationshipsactivity.module, line 137

Code

function user_relationshipsactivity_user_relationships($op, $relationship, $category = NULL) {
  if ($category == 'type' || ($op == 'load' || $op == 'pre-save')) {
    return;
  }
  $relationship = array_merge((array) $relationship, (array) user_relationships_type_load($relationship->rtid));
  $type = preg_replace('/\\s/', '_', drupal_strtolower($relationship['name']));
  switch ($op) {
    case 'post-save':
      if ($relationship['approved']) {
        $operation = 'approved';
        $target_users_roles[ACTIVITY_ALL] = 'all';
      }
      else {
        $operation = 'requested';
      }
      break;
    case 'delete':
      switch ($category) {
        case 'remove':
          $operation = 'deleted';
          $target_users_roles[ACTIVITY_ALL] = 'all';
          break;
        case 'cancel':
          $operation = 'canceled';
          break;
        case 'disapprove':
          $operation = 'denied';
          break;
      }
      break;
  }

  // Check if both type and operation are
  // enabled for activity. If not then stop here
  if (!in_array($type, variable_get('user_relatinshipsactivity_token_types', array(
    $type,
  )), TRUE) || !in_array($operation, variable_get('user_relationshipsactivity_op_types', array(
    $operation,
  )), TRUE)) {
    return FALSE;
  }
  $user = user_load(array(
    'uid' => $relationship['requester_id'],
  ));

  // Privacy setting check for user voting
  if (activity_user_privacy_optout($user)) {
    return FALSE;
  }

  // There is a quirk in user_relationships in that if the $op is
  // delete and $category is remove, the user that is deleting
  // the relationship is set as the requestee when they should be
  // the requester. So let's swap the values in this case.
  // See http://drupal.org/node/254446

  /*
  if ($op == 'delete' && $category == 'remove') {
    $requestee = $relationship['requester_id'];
    $relationship['requester_id'] = $relationship['requestee_id'];
    $relationship['requestee_id'] = $requestee;
  }
  */
  $data = array(
    'requestee-uid' => $relationship['requestee_id'],
    'relationship-type-id' => $relationship['rtid'],
  );
  $target_users_roles[$relationship['requester_id']] = 'requester';
  $target_users_roles[$relationship['requestee_id']] = 'requestee';
  activity_insert($user->uid, 'user_relationshipsactivity', $type, $operation, $data, $target_users_roles);
}