function _faq_ask_list_unanswered in FAQ_Ask 7
Same name and namespace in other branches
- 6.2 faq_ask.module \_faq_ask_list_unanswered()
- 6 faq_ask.module \_faq_ask_list_unanswered()
This is the code to select the Unanswered Questions for the block. It is also used by the "unanswered" page by setting a very high limit.
2 calls to _faq_ask_list_unanswered()
- faq_ask_block_view in ./
faq_ask.module - Implements hook_block_view().
- faq_ask_list_more in ./
faq_ask.module - This function lists all the unanswered questions the user is allowed to see. It is used by the "more..." link from the block, but can also be called independently.
File
- ./
faq_ask.module, line 2035 - This module is an add-on to the FAQ module that allows users with the 'ask question' permission to create a question which will be queued for an 'expert' to answer.
Code
function _faq_ask_list_unanswered($limit) {
global $user;
$output = '';
// Bounce anonymous users.
if ($user->uid == 0) {
if ($limit < 1000) {
// If this is a block
return NULL;
// Return empty content
}
else {
// Snached from http://drupal.org/node/60148
drupal_set_message(t("Access Denied: Please Login"));
$dest = drupal_get_destination();
drupal_goto('user/login', $dest);
// this remembers where the user is coming from
}
}
// What permissions does this user have?
$can_edit = user_access('administer faq') || user_access('administer nodes');
$is_expert = user_access('answer question');
// Find the vocabulary to search for...
$vocabulary = taxonomy_vocabulary_load_multiple(variable_get('faq_ask_vocabularies', 0));
// Join the term_data table to select based on tid.
$query = db_select('node', 'n');
$query
->leftJoin('faq_ask_term_index', 'ti', 'n.nid = ti.nid OR ti.tid IS NULL');
$query
->addField('n', 'nid');
$query
->addField('ti', 'tid');
$query
->condition('n.status', 0);
$query
->condition('n.type', 'faq');
$mode = 'edit';
// Note: If the admin is also an expert, the expert-ness prevails.
if ($is_expert) {
$mode = 'answer';
// Get all the expert's terms from the database into a keyed array of term indexes keyed by the term index: $terms[tid] = tid
$terms = db_select('faq_expert', 'fe')
->condition('uid', $user->uid)
->fields('fe')
->execute()
->fetchAllKeyed(1, 1);
// Check if this expert has any categories.
if (count($terms) == 0) {
if ($limit > 1000) {
return '<p>' . t("For some strange reason, I couldn't find any categories for you.") . '</p>';
}
else {
return NULL;
}
}
// find the nodes that are in our terms or does not have a term
$query
->condition(db_or()
->condition('tid', $terms, 'IN')
->isNull('tid'));
}
elseif (!$can_edit) {
// If not expert and cannot edit the node by permission - edit own
$query
->condition('n.uid', $user->uid);
// AND n.uid = $user->uid (the user and the node owner are the same)
}
// A high limit means we are doing the "unanswered" page.
if ($limit < 1000) {
$totalcount = $query
->countQuery()
->execute()
->fetchField();
// Find the total number of items w/o limit
$query
->range(0, $limit);
// We are only displaying a block
$query
->orderBy('n.created');
$nids = $query
->execute()
->fetchCol();
// Get nids
if ($totalcount) {
return theme('faq_ask_unanswered_block', array(
'data' => $nids,
'more_link' => $totalcount > $limit,
'mode' => $mode,
));
}
else {
return '';
}
}
$query
->orderBy('tid');
// Only need the nid column.
$result = $query
->execute()
->fetchAllKeyed();
// Get fts
$data = array();
// Rearrange so that we have an array indexed by tid => array(nids)
foreach ($result as $nid => $tid) {
if (empty($data[$tid])) {
$data[$tid] = array();
}
$data[$tid][] = $nid;
}
foreach ($data as $tid => $nodes) {
// Output via theme each block of nodes
$output .= theme('faq_ask_unanswered', array(
'data' => $nodes,
'term' => $tid,
'mode' => $mode,
));
}
return $output;
}