You are here

function forum_access_view_any_forum in Forum Access 7

Access callback for the 'forum' menu item.

Returns 1 if the user has at least one role that can access at least one forum, 2 if the user is moderator in at least one forum, FALSE otherwise.

1 string reference to 'forum_access_view_any_forum'
forum_access_menu_alter in ./forum_access.module
Implements hook_menu_alter().

File

./forum_access.module, line 148
forum_access.module

Code

function forum_access_view_any_forum($account = NULL) {
  global $user;
  $returns =& drupal_static(__FUNCTION__, array());
  if (!isset($account)) {
    $account = $user;
  }
  if (!isset($returns[$account->uid])) {
    if (user_access('bypass node access', $account)) {
      return $returns[$account->uid] = 1;
    }
    if (!user_access('access content')) {
      return $returns[$account->uid] = FALSE;
    }
    $rids = variable_get('forum_access_rids', NULL);
    if (!isset($rids)) {
      $rids = db_query("SELECT fa.rid FROM {forum_access} fa WHERE fa.grant_view > 0 GROUP BY fa.rid")
        ->fetchCol();
      variable_set('forum_access_rids', $rids);
    }
    foreach ($rids as $rid) {
      if (isset($account->roles[$rid])) {
        return $returns[$account->uid] = 1;
      }
    }

    // Check moderator, too.
    $query = db_select('acl', 'acl');
    $query
      ->join('acl_user', 'aclu', "acl.acl_id = aclu.acl_id");
    $count = $query
      ->fields('acl', array(
      'number',
    ))
      ->condition('acl.module', 'forum_access')
      ->condition('aclu.uid', $account->uid)
      ->countQuery()
      ->execute()
      ->fetchField();
    $returns[$account->uid] = $count > 0 ? 2 : FALSE;
  }
  return $returns[$account->uid];
}