You are here

function _avatar_selection_image_list in Avatar Selection 7

Same name and namespace in other branches
  1. 5.2 avatar_selection.module \_avatar_selection_image_list()
  2. 5 avatar_selection.module \_avatar_selection_image_list()
  3. 6 avatar_selection.module \_avatar_selection_image_list()

Get the list of avatars available to a certain user.

Parameters

$user: User object (optional).

$set_type: Set type, can be 'role' or 'og' (optional).

$set_id: The unique identifier of the set (optional).

$from: The offset.

$count: Number of avatars to return.

Return value

Return an array with the list of avatars for the current user, together with the number of avatars.

4 calls to _avatar_selection_image_list()
avatar_selection_edit_form in ./avatar_selection.admin.inc
Create the form structure for listing the avatars and managing them in the 'Manage Avatars' tab under the Avatar Selection administration page.
avatar_selection_form_user_profile_form_alter in ./avatar_selection.module
Implements hook_form_alter().
avatar_selection_form_user_register_form_alter in ./avatar_selection.module
Implements hook_form_alter().
avatar_selection_get_random_image in ./avatar_selection.module
Select a random avatar picture for a certain user.

File

./avatar_selection.module, line 491
The Avatar Selection module allows the user to pick an avatar image from a list already loaded by an administrative user, and to the administrator to disable uploading other avatar files by the user.

Code

function _avatar_selection_image_list($user = '', $set_type = '', $set_id = 0, $from = 0, $count = 0) {
  $avatars = array();
  $url = file_build_uri('avatar_selection');
  file_prepare_directory($url);
  $total = 0;

  // Prepare base query.
  $count_query = db_select('avatar_selection', 'avs')
    ->fields('avs', array(
    'fid',
  ))
    ->distinct();
  $query = db_select('avatar_selection', 'avs')
    ->fields('avs', array(
    'avatar',
    'fid',
    'name',
    'weight',
  ))
    ->distinct()
    ->orderBy('weight', 'ASC')
    ->orderBy('name', 'ASC')
    ->orderBy('avatar', 'ASC');

  // If we're searching on a particular role - join avatar_selection_roles table.
  if ($set_type == 'role') {
    if ($set_id) {
      $count_avsr_alias = $count_query
        ->join('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid AND avsr.rid = :rid', array(
        ':rid' => $set_id,
      ));
      $avsr_alias = $query
        ->join('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid AND avsr.rid = :rid', array(
        ':rid' => $set_id,
      ));
    }
    else {
      $count_avsr_alias = $count_query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $count_query
        ->isNULL("{$count_avsr_alias}.rid");
      $avsr_alias = $query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $query
        ->isNULL("{$avsr_alias}.rid");
    }
  }
  elseif ($set_type == 'og') {
    if ($set_id) {
      $count_avs_og_alias = $count_query
        ->join('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid AND avs_og.ogid = :ogid', array(
        ':ogid' => $set_id,
      ));
      $avs_og_alias = $query
        ->join('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid AND avs_og.ogid = :ogid', array(
        ':ogid' => $set_id,
      ));
    }
    else {
      $count_avs_og_alias = $count_query
        ->leftJoin('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid');
      $count_query
        ->isNULL("{$count_avs_og_alias}.ogid");
      $avs_og_alias = $query
        ->leftJoin('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid');
      $query
        ->isNULL("{$avs_og_alias}.ogid");
    }
  }
  elseif (!empty($user)) {

    // Set up some variables.
    $user_roles = array_keys($user->roles);
    $user_og = array();
    if (module_exists('og') && !empty($user->group_audience)) {
      $og_groups = $user->group_audience;
      if (!empty($og_groups) && is_array($og_groups)) {
        foreach ($og_groups as $key => $groups) {
          foreach ($groups as $group) {
            $user_og[] = $group['gid'];
          }
        }
      }
    }

    // Organic groups enabled - join avatar_selection_og table.
    if (module_exists('og') && !empty($user_og)) {
      if (variable_get('avatar_selection_distinctive_avatars', FALSE) || $user->uid != 1) {
        $count_avs_og_alias = $count_query
          ->leftJoin('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid');
        $count_query
          ->condition(db_or()
          ->isNULL("{$count_avs_og_alias}.ogid")
          ->condition("{$count_avs_og_alias}.ogid", $user_og, 'IN'));
        $avs_og_alias = $query
          ->leftJoin('avatar_selection_og', 'avs_og', 'avs.aid = avs_og.aid');
        $query
          ->condition(db_or()
          ->isNULL("{$avs_og_alias}.ogid")
          ->condition("{$avs_og_alias}.ogid", $user_og, 'IN'));
      }
    }

    // Distinct avatars are enabled - join avatar_selection_usage and avatar_selection_roles tables.
    if (variable_get('avatar_selection_distinctive_avatars', FALSE)) {
      $count_usage_alias = $count_query
        ->leftJoin('avatar_selection_usage', 'u', 'u.fid = avs.fid');
      $count_query
        ->isNull('u.fid');
      $count_avsr_alias = $count_query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $count_query
        ->condition(db_or()
        ->isNULL("{$count_avsr_alias}.rid")
        ->condition("{$count_avsr_alias}.rid", $user_roles, 'IN'));
      $usage_alias = $query
        ->leftJoin('avatar_selection_usage', 'u', 'u.fid = avs.fid');
      $query
        ->isNull('u.fid');
      $avsr_alias = $query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $query
        ->condition(db_or()
        ->isNULL("{$avsr_alias}.rid")
        ->condition("{$avsr_alias}.rid", $user_roles, 'IN'));
    }
    elseif ($user->uid != 1) {
      $count_avsr_alias = $count_query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $count_query
        ->condition(db_or()
        ->isNULL("{$count_avsr_alias}.rid")
        ->condition("{$count_avsr_alias}.rid", $user_roles, 'IN'));
      $avsr_alias = $query
        ->leftJoin('avatar_selection_roles', 'avsr', 'avs.aid = avsr.aid');
      $query
        ->condition(db_or()
        ->isNULL("{$avsr_alias}.rid")
        ->condition("{$avsr_alias}.rid", $user_roles, 'IN'));
    }
  }

  // Execute the queries.
  $total = $count_query
    ->countQuery()
    ->execute()
    ->fetchField();
  $count = $count ? $count : $total;
  $result = $query
    ->range($from, $count)
    ->execute();

  // Theme images.
  if (module_exists('image')) {
    $imagecache_preset = variable_get('avatar_selection_imagecache_preset', 0);
  }
  foreach ($result as $avatar) {
    $filepath = $url . '/' . $avatar->avatar;
    if (module_exists('image') && $imagecache_preset && file_valid_uri($filepath)) {
      $avatars[$avatar->fid] = theme('image_style', array(
        'style_name' => $imagecache_preset,
        'path' => $filepath,
        'alt' => $avatar->name,
        'title' => $avatar->name,
      ));
    }
    else {
      $avatars[$avatar->fid] = theme('image', array(
        'path' => $filepath,
        'alt' => $avatar->name,
        'title' => $avatar->name,
      ));
    }
  }
  $selects['avatars'] = $avatars;
  $selects['total'] = $total;
  return $selects;
}