You are here

function _user_relationships_ui_actions_between in User Relationships 6

Same name and namespace in other branches
  1. 5.3 user_relationships_ui/user_relationships_ui.module \_user_relationships_ui_actions_between()

List of possible relationship actions with between two users

Parameters

$viewer - user object for the visitor:

$viewed - user object for the user being looked at:

action_types - associative array of kinds of links to show (all by default). Only the existence of specific array keys is needed:: add, remove, requested, received

2 calls to _user_relationships_ui_actions_between()
template_preprocess_user_relationships_actions_block in user_relationship_blocks/user_relationship_blocks.module
Template pre processor for the relationship actions block
user_relationships_ui_user in user_relationships_ui/user_relationships_ui.module
Implementation of hook_user().

File

user_relationships_ui/user_relationships_ui.module, line 200
UI components of user_relationships @author Jeff Smick (creator) @author Alex Karshakevich (maintainer) http://drupal.org/user/183217 @author Darren Ferguson (contributor) http://drupal.org/user/70179

Code

function _user_relationships_ui_actions_between(&$viewer, &$viewed, $action_types = array(
  'add' => 1,
  'remove' => 1,
  'requested' => 1,
  'received' => 1,
)) {
  if (!user_access('can have relationships') || $viewer->uid == $viewed->uid) {
    return;
  }
  $list = array();
  if (isset($action_types['requested'])) {
    $relationships = user_relationships_load(array(
      'requester_id' => $viewer->uid,
      'requestee_id' => $viewed->uid,
      'approved' => FALSE,
    ));
    foreach ($relationships as $relationship) {
      $list[] = t('You have sent a new %relationship_name request to this user. (!pending_requests)', array(
        '%relationship_name' => ur_tt("user_relationships:rtid:{$relationship->rtid}:name", $relationship->name),
        '!pending_requests' => l(t('pending requests'), "relationships/requests"),
      ));
    }
  }
  if (isset($action_types['received'])) {
    $relationships = user_relationships_load(array(
      'requester_id' => $viewed->uid,
      'requestee_id' => $viewer->uid,
      'approved' => FALSE,
    ));
    foreach ($relationships as $relationship) {
      $list[] = t('This user has requested to be your %relationship_name. (!pending_requests)', array(
        '%relationship_name' => ur_tt("user_relationships:rtid:{$relationship->rtid}:name", $relationship->name),
        '!pending_requests' => l(t('pending requests'), "user/{$viewer->uid}/relationships/requests"),
      ));
    }
  }
  if (isset($action_types['add'])) {

    // Compute if any more relationships can be created
    $types_count = (int) db_result(db_query("SELECT COUNT(*) FROM {user_relationship_types}"));
    $existing_relationships = user_relationships_load(array(
      'between' => array(
        $viewer->uid,
        $viewed->uid,
      ),
    ), array(
      'sort' => 'rtid',
    ));
    $all_relationships = user_relationships_types_load();
    $relationships_count = 0;

    // Unset the relationships which already exist
    foreach ($existing_relationships as $rtid => $relationship_type) {
      foreach ($relationship_type as $relationship) {
        if (!$relationship->is_oneway || !$relationship->is_reciprocal || $relationship->requester_id == $viewer->uid) {
          unset($all_relationships[$rtid]);
          $relationships_count++;
        }
      }
    }
    if (!$relationships_count || variable_get('user_relationships_allow_multiple', TRUE) && $relationships_count < $types_count) {

      //if configured, create direct links
      if (variable_get('user_relationships_show_direct_links', 1)) {

        //draw a single link, or one for each relationship type
        foreach ($all_relationships as $rtid => $relationship) {

          //check this type can be requested
          if (!user_relationships_api_can_request($viewer, $relationship) || !user_relationships_api_can_receive($viewed, $relationship)) {
            continue;
          }
          $list[] = theme('user_relationships_request_relationship_direct_link', $viewed, $relationship);
        }
      }
      else {
        $list[] = theme('user_relationships_request_relationship_link', $viewed);
      }
    }
  }
  if (isset($action_types['remove'])) {
    $relationships = user_relationships_load(array(
      'between' => array(
        $viewer->uid,
        $viewed->uid,
      ),
    ));
    foreach ($relationships as $relationship) {
      if ($relationship->approved && !isset($list[$relationship->rid])) {
        $list[$relationship->rid] = t('%relationship_name (!remove_link)', array(
          '%relationship_name' => ur_tt("user_relationships:rtid:{$relationship->rtid}:name", $relationship->name) . ($relationship->is_oneway ? $relationship->requester_id == $viewer->uid ? t(' (You to Them)') : t(' (Them to You)') : NULL),
          '!remove_link' => theme('user_relationships_remove_link', $viewer->uid, $relationship->rid),
        ));
      }
    }
  }
  return $list;
}