function poll_load
Implements hook_load().
File
-
modules/
poll/ poll.module, line 488
Code
function poll_load($nodes) {
global $user;
foreach ($nodes as $node) {
$poll = db_query("SELECT runtime, active FROM {poll} WHERE nid = :nid", array(
':nid' => $node->nid,
))
->fetchObject();
if (empty($poll)) {
$poll = new stdClass();
}
// Load the appropriate choices into the $poll object.
$poll->choice = db_select('poll_choice', 'c')->addTag('translatable')
->fields('c', array(
'chid',
'chtext',
'chvotes',
'weight',
))
->condition('c.nid', $node->nid)
->orderBy('weight')
->execute()
->fetchAllAssoc('chid', PDO::FETCH_ASSOC);
// Determine whether or not this user is allowed to vote.
$poll->allowvotes = FALSE;
if (user_access('vote on polls') && $poll->active) {
if ($user->uid) {
// If authenticated, find existing vote based on uid.
$poll->vote = db_query('SELECT chid FROM {poll_vote} WHERE nid = :nid AND uid = :uid', array(
':nid' => $node->nid,
':uid' => $user->uid,
))
->fetchField();
if (empty($poll->vote)) {
$poll->vote = -1;
$poll->allowvotes = TRUE;
}
}
elseif (!empty($_SESSION['poll_vote'][$node->nid])) {
// Otherwise the user is anonymous. Look for an existing vote in the
// user's session.
$poll->vote = $_SESSION['poll_vote'][$node->nid];
}
else {
// Finally, query the database for an existing vote based on anonymous
// user's hostname.
$poll->allowvotes = !db_query("SELECT 1 FROM {poll_vote} WHERE nid = :nid AND hostname = :hostname AND uid = 0", array(
':nid' => $node->nid,
':hostname' => ip_address(),
))
->fetchField();
}
}
foreach ($poll as $key => $value) {
$nodes[$node->nid]->{$key} = $value;
}
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.