function views_handler_filter_role_custom in Views (for Drupal 7) 5
1 string reference to 'views_handler_filter_role_custom'
- user_views_tables in modules/
views_user.inc - This include file implements views functionality on behalf of user.module
File
- modules/
views_user.inc, line 408
Code
function views_handler_filter_role_custom($op, $filter, $filterinfo, &$query) {
$table = $filterinfo['table'];
$field = $filterinfo['field'];
//filter for role authenticated users
if (in_array(DRUPAL_AUTHENTICATED_RID, $filter['value'])) {
if ($filter['operator'] == 'OR') {
//filter for anonymous users too -> return all
if (in_array(DRUPAL_ANONYMOUS_RID, $filter['value'])) {
return;
}
$query
->add_where("node.uid != 0");
return;
}
else {
if ($filter['operator'] == 'NOR') {
//filter for anonymous users too?
if (in_array(DRUPAL_ANONYMOUS_RID, $filter['value'])) {
$query
->ensure_table($table);
$query
->add_where("%s.%s = '0'", $table, $field);
//this will get no results
return;
}
else {
$query
->add_where("node.uid = 0");
return;
}
}
else {
if ($filter['operator'] == 'AND' && !in_array(DRUPAL_ANONYMOUS_RID, $filter['value'])) {
$key = array_search(DRUPAL_AUTHENTICATED_RID, $filter['value']);
unset($filter['value'][$key]);
//if there are other roles left the default filter handling is ok
//else we must exclude the anonymous user
if (count($filter['value']) == 0) {
$query
->add_where("node.uid != 0");
return;
}
}
}
}
}
else {
if (in_array(DRUPAL_ANONYMOUS_RID, $filter['value'])) {
if ($filter['operator'] == 'OR') {
$key = array_search(DRUPAL_ANONYMOUS_RID, $filter['value']);
unset($filter['value'][$key]);
if (count($filter['value']) == 0) {
$query
->add_where("node.uid = 0");
return;
}
else {
//we need to do the join to users_roles here manually
$table_data = _views_get_tables();
$joininfo = $table_data[$table]['join'];
$joininfo['extra']['rid'] = array_map('intval', $filter['value']);
$num = $query
->add_table($table, false, 1, $joininfo);
$tablename = $query
->get_table_name($table, $num);
//and allow anonymous nodes
$query
->add_where("node.uid = 0 OR %s.%s IS NOT NULL", $tablename, $field);
return;
}
}
else {
if ($filter['operator'] == 'NOR') {
$query
->add_where("node.uid != 0");
}
else {
if ($filter['operator'] == 'AND') {
$query
->add_where("node.uid = 0");
if (count($filter['value']) == 1) {
//no need to run the default filter handler any more
return;
}
}
}
}
}
}
if ($filter['value']) {
views_handler_filter_default($op, $filter, $filterinfo, $query);
}
}