function privatemsg_filter_query_privatemsg_list_alter in Privatemsg 7
Same name and namespace in other branches
- 7.2 privatemsg_filter/privatemsg_filter.module \privatemsg_filter_query_privatemsg_list_alter()
Hook into the query builder to add the tagging info to the correct query
File
- privatemsg_filter/
privatemsg_filter.module, line 685 - Allows users to tag private messages and to filter based upon those tags.
Code
function privatemsg_filter_query_privatemsg_list_alter($query) {
$account = $query
->getMetaData('arg_1');
$argument = $query
->getMetaData('arg_2');
// Add all conditions to the count query too.
$count_query = $query
->getCountQuery();
// Check if its a filtered view.
if ($argument == 'sent') {
$query
->condition('pm.author', $account->uid);
$count_query
->condition('pm.author', $account->uid);
}
$filter = privatemsg_filter_get_filter($account);
if ($argument == 'inbox') {
$filter['tags'][] = variable_get('privatemsg_filter_inbox_tag', '');
}
// Filter the message listing by any set tags.
if ($filter) {
if (!empty($filter['tags'])) {
foreach ($filter['tags'] as $tag) {
$alias = $query
->join('pm_tags_index', 'pmti', "%alias.thread_id = pmi.thread_id AND %alias.uid = pmi.recipient AND pmi.type IN ('user', 'hidden')");
$query
->condition($alias . '.tag_id', $tag);
$alias = $count_query
->join('pm_tags_index', 'pmti', "%alias.thread_id = pmi.thread_id AND %alias.uid = pmi.recipient AND pmi.type IN ('user', 'hidden')");
$count_query
->condition($alias . '.tag_id', $tag);
}
}
if (isset($filter['author']) && !empty($filter['author'])) {
foreach ($filter['author'] as $author) {
$alias = $query
->join('pm_index', 'pmi', '%alias.mid = pm.mid');
$query
->condition($alias . '.recipient', $author->uid);
$query
->condition($alias . '.type', 'user');
$alias = $count_query
->join('pm_index', 'pmi', '%alias.mid = pm.mid');
$count_query
->condition($alias . '.recipient', $author->uid);
$count_query
->condition($alias . '.type', 'user');
}
}
if (!empty($filter['search'])) {
if (variable_get('privatemsg_filter_searchbody', FALSE)) {
$search = db_or()
->condition('pm.subject', '%' . $filter['search'] . '%', 'LIKE')
->condition('pm.body', '%' . $filter['search'] . '%', 'LIKE');
// Clone the condition so that they are both compiled.
$query
->condition(clone $search);
$count_query
->condition($search);
}
else {
$query
->condition('pm.subject', '%' . $filter['search'] . '%', 'LIKE');
$count_query
->condition('pm.subject', '%' . $filter['search'] . '%', 'LIKE');
}
}
}
}