status;
}
if ($op == "create") {
return 1;
}
}
function poll_block() {
$timestamp = db_result(db_query("SELECT MAX(created) FROM node WHERE type='poll' AND status='1' AND moderate='0'"));
if ($timestamp) {
$poll = node_load(array("type" => "poll", "created" => $timestamp, "moderate" => "0", "status" => "1"));
if ($poll->nid) {
// Poll_view dumps the output into $poll->body
poll_view($poll, 1, 1);
}
}
$blocks[0][subject] = t("Latest poll: %t", array("%t" => $poll->title));
$blocks[0][content] = $poll->body;
$blocks[0][info] = t("Most recent poll");
return $blocks;
}
function poll_cron() {
// Close polls that have exceeded their allowed runtime
$result = db_query("SELECT p.nid FROM poll p LEFT JOIN node n ON p.nid=n.nid WHERE (n.created + p.runtime) < '". time() ."' AND p.active = '1' AND p.runtime != '0'");
while ($poll = db_fetch_object($result)) {
db_query("UPDATE poll SET active='0' WHERE nid='$poll->nid'");
}
}
function poll_delete($node) {
db_query("DELETE FROM poll WHERE nid='$node->nid'");
db_query("DELETE FROM poll_choices WHERE nid='$node->nid'");
}
function poll_form(&$node, &$help, &$error) {
$admin = user_access("administer nodes");
$_duration = array(0 => t("Unlimited"), 86400 => format_interval(86400), 172800 => format_interval(172800), 345600 => format_interval(345600), 604800 => format_interval(604800), 1209600 => format_interval(1209600), 2419200 => format_interval(2419200), 4838400 => format_interval(4838400), 9676800 => format_interval(9676800), 31536000 => format_interval(31536000));
$_active = array(0 => t("Closed"), 1 => t("Active"));
$node->choices = $node->choices ? $node->choices : max(2, count($node->choice) ? count($node->choice) : 5);
if (isset($node->title)) {
// Check for at least two options and validate amount of votes:
for ($i = 0; $i < $node->choices; $i++) {
if ($node->choice[$i] != "") {
$actualchoices++;
}
if ($node->chvotes[$i] < 0) {
$error["chvotes][$i"] = "". t("Negative values are not allowed.") ."";
}
}
if ($actualchoices < 2) {
$error["choice][0"] = "". t("You must fill in at least two choices.") ."";
}
}
else {
$help = variable_get("poll_help", "");
}
if (function_exists("taxonomy_node_form")) {
$output = implode("", taxonomy_node_form("poll", $node));
}
for ($c = 2; $c <= 20; $c++) {
$opts[$c] = $c;
}
$output .= form_select(t("Number of choices"), "choices", $node->choices, $opts, t("This item only specifies the number of boxes in this form, but it doesn't have to equal the actual amount of options: you can leave the extra boxes empty."));
$output .= form_submit(t("Preview")) ."
";
for ($a = 0; $a < $node->choices; $a++) {
$output .= form_textfield(t("Choice") ." ". ($a + 1), "choice][$a", $node->choice[$a], 50, 127, $error["choice][$a"]);
if ($admin) {
$output .= form_textfield(t("Votes for choice %n", array("%n" => ($a + 1))), "chvotes][$a", $node->chvotes[$a] ? $node->chvotes[$a] : 0, 7, 7, $error["chvotes][$a"]);
}
}
if ($admin) {
$output .= form_select(t("Poll status"), "active", isset($node->active) ? $node->active : 1, $_active);
}
$output .= form_select(t("Poll duration"), "runtime", $node->runtime ? $node->runtime : 0, $_duration, t("After this period, the poll will automatically be closed."));
return $output;
}
function poll_help() {
?>
Drupal's poll module allows users to submit multiple-choice questions that others can vote on.
chvotes); $i++) $node->chvotes[$i] = 0; $node->active = 1; } db_query("INSERT INTO poll (nid, runtime, voters, active) VALUES ('$node->nid', '$node->runtime', '', '$node->active')"); for ($i = 0; $i < $node->choices; $i++) { $choice->chtext = filter($node->choice[$i]); $choice->chvotes = (int)$node->chvotes[$i]; $choice->chorder = $i; if ($choice->chtext != "") { db_query("INSERT INTO poll_choices (nid, chtext, chvotes, chorder) VALUES ('$node->nid', '$choice->chtext', '$choice->chvotes', '$choice->chorder')"); } } } function poll_link($type) { if ($type == "menu.create" && user_access("post content")) { $links[] = lm(t("create poll"), array("mod" => "node", "op" => "add", "type" => "poll"), "", array("title" => t("Add a new poll."))); } else if ($type == "page" && user_access("access content")) { $links[] = lm(t("polls"), array("mod" => "poll"), "", array("title" => t("View the list of polls on this site."))); } return $links ? $links : array(); } function poll_load($node) { // Load the appropriate choices into the $node object $poll = db_fetch_object(db_query("SELECT runtime, voters, active FROM poll WHERE nid = '$node->nid'")); $result = db_query("SELECT chtext, chvotes, chorder FROM poll_choices WHERE nid='$node->nid' ORDER BY chorder"); while ($choice = db_fetch_object($result)) { $poll->choice[$choice->chorder] = $choice->chtext; $poll->chvotes[$choice->chorder] = $choice->chvotes; } return $poll; } function poll_node($field) { $info["name"] = t("poll"); $info["description"] = t("A poll is a multiple-choice question which visitors can vote on."); return $info[$field]; } function poll_page() { global $theme; $theme->header(); $result = db_query("SELECT n.nid, n.title, p.active, SUM(c.chvotes) AS votes FROM node n LEFT JOIN poll p ON n.nid=p.nid LEFT JOIN poll_choices c ON n.nid=c.nid WHERE type='poll' AND status='1' AND moderate='0' GROUP BY n.nid ORDER BY n.created DESC"); while ($node = db_fetch_object($result)) { $output .= "$value | $percentage%". (!$block ? " (". format_plural($node->chvotes[$key], "vote", "votes") .")" : "") ." |