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];
}