You are here

function _user_relationships_generate_query in User Relationships 5.2

Same name and namespace in other branches
  1. 5.3 user_relationships_api/user_relationships_api.module \_user_relationships_generate_query()
  2. 6 user_relationships_api/user_relationships_api.module \_user_relationships_generate_query()
  3. 7 user_relationships.module \_user_relationships_generate_query()

Helper function to generate queries from a list of parameters

4 calls to _user_relationships_generate_query()
theme_user_relationships_page in ./user_relationships_theme.inc
Categorized list of relationships for a given user
theme_user_relationships_pending_requests_page in ./user_relationships_theme.inc
List of pending requests from other users
theme_user_relationship_implications_page in plugins/user_relationship_implications/user_relationship_implications.module
Categorized list of relationships for a given user
user_relationships_load in ./user_relationships_api.inc
Load relationship objects from the database.

File

./user_relationships.module, line 290

Code

function _user_relationships_generate_query($param = array(), $order = NULL, $limit = NULL, $include_user_info = FALSE) {

  // Turn the conditions into a query.
  foreach ($param as $key => $value) {
    if (!isset($value)) {
      continue;
    }
    $operator = _user_relationship_process_query_argument($key, $value);
    switch ($key) {
      case 'between':
        $cond[] = "((ur.requester_id {$operator[0]} AND ur.requestee_id {$operator[1]})" . ' OR ' . "((urt.is_oneway = 1 OR ur.approved = 0) AND ur.requestee_id {$operator[0]} AND ur.requester_id {$operator[1]}))";
        $arguments[] = $value[0];
        $arguments[] = $value[1];
        $arguments[] = $value[0];
        $arguments[] = $value[1];
        break;
      case 'user':
        $cond[] = "(ur.requester_id {$operator} OR ((urt.is_oneway = 1 OR ur.approved = 0) AND ur.requestee_id {$operator}))";
        $arguments[] = $value;
        $arguments[] = $value;
        break;
      default:
        $types_cols = array(
          'name',
          'plural_name',
          'is_oneway',
          'requires_approval',
          'expires_val',
        );
        $cond[] = "%s.%s {$operator}";
        $arguments[] = !in_array($key, $types_cols) ? 'ur' : 'urt';
        $arguments[] = $key;
        $arguments[] = $value;
    }
  }
  $selects = array(
    'ur.rid',
    'ur.*',
    'urt.*',
  );
  $joins = array(
    'LEFT JOIN {user_relationship_types} urt USING(rtid)',
  );

  // We wont need anything after this point for the count SQL
  $count_joins = implode(' ', $joins);
  if ($include_user_info) {
    $selects = array_merge($selects, array(
      'requesters.name AS requester_name',
      'requestees.name AS requestee_name',
      'requesters.mail AS requester_mail',
      'requestees.mail AS requestee_mail',
      'requesters.data AS requester_data',
      'requestees.data AS requestee_data',
      'requesters.picture AS requester_picture',
      'requestees.picture AS requestee_picture',
    ));
    $joins = array_merge($joins, array(
      'LEFT JOIN {users} requesters ON ur.requester_id = requesters.uid',
      'LEFT JOIN {users} requestees ON ur.requestee_id = requestees.uid',
    ));
  }
  $selects = implode(',', $selects);
  $joins = implode(' ', $joins);
  $cond = $cond ? 'WHERE ' . implode(' AND ', $cond) : '';
  $extra = array();
  if (!empty($order)) {
    $extra[] = "ORDER BY {$order}";
  }
  if (!empty($limit)) {
    $extra[] = "LIMIT {$limit}";
  }
  $extra = implode(' ', $extra);
  return array(
    'query' => "SELECT {$selects} FROM {user_relationships} ur {$joins} {$cond} {$extra}",
    'count' => "SELECT COUNT(rid) AS count FROM {user_relationships} ur {$count_joins} {$cond}",
    'arguments' => $arguments,
  );
}