function _support_solr_build_subquery in Support Ticketing System 6
Creates a Solr query for a given user
Parameters
$account an account to get grants for and build a solr query:
Throws
Exception
1 call to _support_solr_build_subquery()
- support_solr_apachesolr_modify_query in support_solr/
support_solr.module - Implementation of hook_apachesolr_modify_query().
File
- support_solr/
support_solr.module, line 29 - Apache Solr search for support module.
Code
function _support_solr_build_subquery($account) {
if (!user_access('access content', $account)) {
throw new Exception('No access');
}
$node_access_query = apachesolr_drupal_query();
if (empty($node_access_query)) {
throw new Exception('No query object in apachesolr_nodeaccess');
}
if (user_access('administer nodes', $account)) {
// Access all content from the current site, or public content.
//$node_access_query->add_filter('nodeaccess_all', 0);
//$node_access_query->add_filter('hash', apachesolr_site_hash());
}
else {
$clients = support_search_available_clients();
if (!empty($clients)) {
if (user_access('view other users tickets', $account) || user_access('administer support', $account) || user_access('edit any ticket', $account) || user_access('delete any ticket', $account)) {
// Allow non support tickets (client 0)
$node_access_query
->add_filter('is_support_client', 0);
// OR check for each possible client...
foreach ($clients as $client) {
$node_access_query
->add_filter('is_support_client', $client);
}
return $node_access_query;
}
else {
// Allow non support tickets (client 0)
$node_access_query
->add_filter('is_support_client', 0);
// Set up a subquery to support the AND on the uid
$sq = apachesolr_drupal_query();
// Set up a sub-subquery to support the OR of the clients.
$ssq = apachesolr_drupal_query();
foreach ($clients as $client) {
$ssq
->add_filter('is_support_client', $client);
}
$sq
->add_subquery($ssq, 'OR');
$sq
->add_filter('uid', $account->uid);
$node_access_query
->add_subquery($sq, 'AND');
// client is one of the available clients AND ticket is authored by the user...
return $node_access_query;
}
}
else {
// No access, filter out support tickets
return $node_access_query
->add_filter('type', 'support_ticket', TRUE);
}
}
return $node_access_query;
}