diff --git a/database/database.mysql b/database/database.mysql
index 1940099bd03..7fc160d31c3 100644
--- a/database/database.mysql
+++ b/database/database.mysql
@@ -256,6 +256,30 @@ CREATE TABLE page (
PRIMARY KEY (lid)
);
+#
+# Table structure for table 'poll'
+#
+CREATE TABLE poll (
+ lid int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
+ nid int(10) unsigned DEFAULT '0' NOT NULL,
+ runtime int(10) DEFAULT '0' NOT NULL,
+ voters text NOT NULL,
+ active int(2) unsigned DEFAULT '0' NOT NULL,
+ PRIMARY KEY (lid)
+);
+
+#
+# Table structure for table 'poll_choices'
+#
+CREATE TABLE poll_choices (
+ chid int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
+ nid int(10) unsigned DEFAULT '0' NOT NULL,
+ chtext varchar(128) DEFAULT '' NOT NULL,
+ chvotes int(6) DEFAULT '0' NOT NULL,
+ chorder int(2) DEFAULT '0' NOT NULL,
+ PRIMARY KEY (chid)
+);
+
#
# Table structure for table 'rating'
#
diff --git a/modules/poll.module b/modules/poll.module
new file mode 100644
index 00000000000..b746aaad590
--- /dev/null
+++ b/modules/poll.module
@@ -0,0 +1,311 @@
+runtime = $poll[runtime];
+ $this->active = $poll[active];
+ $this->voters = $poll[voters];
+ }
+}
+
+function poll_cron() {
+ $result = _node_get("type", "poll");
+ while ($poll = db_fetch_array($result)) {
+ if ($poll[active]) {
+ if (($poll[timestamp] + $poll[runtime]) < time()) {
+ $poll[active] = 0;
+ node_save($poll,array(filter));
+ }
+ }
+ }
+}
+
+function poll_get_choices_array($poll) {
+ $result = db_query("SELECT * FROM poll_choices WHERE nid='" . $poll[nid] . "'");
+ if ($result) {
+ while ($choices = db_fetch_array($result)) {
+ $m = max($m,$choices[chvotes]);
+ $t += $choices[chvotes];
+ $poll[choice][$choices[chorder]]=$choices[chtext];
+ $poll[chvotes][$choices[chorder]]=$choices[chvotes];
+ $poll[chid][$choices[chorder]]=$choices[chid];
+ }
+ ksort($poll[choice]);
+ ksort($poll[votes]);
+ ksort($poll[chid]);
+ }
+ $poll[maxvotes]=max(1,$m);
+ $poll[totalvotes]=$t;
+ return $poll;
+}
+
+function poll_get_choices_obj($poll) {
+ $result = db_query("SELECT * FROM poll_choices WHERE nid='" . $poll->nid . "'");
+ if ($result) {
+ while ($choices = db_fetch_array($result)) {
+ $m = max($m,$choices[chvotes]);
+ $t += $choices[chvotes];
+
+ $poll->choice[$choices[chorder]] = $choices[chtext];
+ $poll->chvotes[$choices[chorder]] = $choices[chvotes];
+ $poll->chid[$choices[chorder]] = $choices[chid];
+ }
+ ksort($poll->choice);
+ ksort($poll->chvotes);
+ ksort($poll->chid);
+ }
+ $poll->maxvotes=max(1,$m);
+ $poll->totalvotes=$t;
+ return $poll;
+}
+
+function poll_status() {
+ return array(dumped, queued, posted);
+}
+
+function poll_search($keys) {
+ global $status, $user;
+ $result = db_query("SELECT n.*, p.* FROM poll p LEFT JOIN node n ON n.nid = p.nid AND n.lid = p.lid WHERE n.status = '$status[posted]' AND (n.title LIKE '%$keys%') LIMIT 20");
+ while ($poll = db_fetch_object($result)) {
+ $find[$i++] = array("title" => check_output($poll->title), "link" => (user_access($user, "poll") ? "admin.php?mod=poll&op=edit&id=$poll->nid" : "node.php?id=$poll->nid"), "user" => $poll->userid, "date" => $poll->timestamp);
+ }
+ return $find;
+}
+
+function poll_help() {
+ ?>
+ No help available.
+
" . ($p?" | ":"") . ($p<100?" | ":"") . "
";
+}
+
+function poll_view($node, $main = 0, $block = 0) {
+ global $theme, $op, $user, $chid, $REQUEST_URI;
+
+ if (($node->active) && (!field_get($node->voters,$user->userid))) $voting = 1;
+ if ((!$voting) && ($op != "View")) $op = "View";
+
+ switch ($op) {
+ case "Vote":
+ if (($node->active) && (!field_get($node->voters,$user->userid))) {
+ $result = db_query("UPDATE poll_choices SET chvotes=chvotes+1 WHERE nid='" . $node->nid . "' && chid='" . check_input($chid) . "'");
+ if (($result) && ($user)) {
+ $new = node_get_array("nid",$node->nid);
+ $new[voters] = field_set($node->voters,$user->userid,1);
+ node_save($new,array(voters));
+ $node = node_get_object("nid",$node->nid);
+ }
+ }
+
+ case "View":
+ $node = poll_get_choices_obj($node);
+
+ $title = "" . check_output($node->title) . "";
+ $footer = "(" . format_plural($node->totalvotes, "vote", "votes") . ")";
+
+ $node->totalvotes = max(1,$node->totalvotes);
+
+ if (!$block) $output .= "Posted by " . format_username($node->userid) . " on " . format_date($node->timestamp,large) . "
\r\n";
+ foreach ($node->choice as $key => $value) {
+ if ($main) {
+ $output .= "" . check_output($value) . " | " . poll_graph($node->chvotes[$key] / $node->maxvotes) . " | " . round(($node->chvotes[$key] / $node->totalvotes) * 100) . "% |
";
+ }
+ else {
+ $output .= (!$block ? "
" : "") . check_output($value) . "
" . poll_graph($node->chvotes[$key] / $node->maxvotes) . " | " . round(($node->chvotes[$key] / $node->totalvotes) * 100) . "% |
\r\n";
+ }
+ }
+ $output .= "" . $footer . "
";
+ break;
+
+ default:
+ $node = poll_get_choices_obj($node);
+
+ $title = "" . check_output($node->title) . "";
+ $footer = "(" . format_plural($node->totalvotes, "vote", "votes") . ")";
+
+ $node->totalvotes = max(1,$node->totalvotes);
+
+ if (!$block) $output .= "Posted by " . format_username($node->userid) . " on " . format_date($node->timestamp,large) . "
\r\n";
+ $output .= "";
+ $output .= "
" . form_submit("Vote") . "
" .$footer . "
";
+ $output = form($REQUEST_URI, $output);
+ }
+
+ if (!$block) $theme->box($title,$output);
+ return array("title" => $title, "content" => $output);
+}
+
+function poll_form($edit = array(), $nocheck = 0) {
+ global $allowed_html, $REQUEST_URI, $user;
+
+ $duration = array(0 => t("Unlimited"), 86400 => t("1 day"), 172800 => t("2 days"), 345600 => t("4 days"),
+ 604800 => t("1 week"), 1209600 => t("2 weeks"), 2678400 => t("1 month"), 5356800 => t("2 months"),
+ 10713600 => t("4 months"), 31536000 => t("1 year"));
+
+ $active = array(0 => "Closed", 1 => "Active");
+
+ $admin = ($edit[nid] && user_access($user,"poll")) ? 1 : 0;
+
+ /* Mini-form for number of choiceboxes */
+ $choices = $edit[choices]?$edit[choices]:5;
+ for ($c = 2; $c <= 20; $c++) $opts[$c]=$c;
+ $form .= form_select(t("Number of choices"), "choices", $choices, $opts, t("This box specifies the number of choiceboxes in this form, it doesn't affect the actual amount of choices in the poll."));
+ $form .= form_submit(t("Refresh")) . "
";
+
+ /* Main form */
+ $form .= form_item(t("Your name"), format_username(($edit[userid] ? $edit[userid] : $user->userid)));
+ $form .= form_hidden("userid", $edit[userid]);
+ $form .= form_textfield(t("Question"), "title", $edit[title], 50, 127);
+
+ for ($a = 0; $a < $choices; $a++) {
+ $form .= form_textfield(t("Choice")." ".($a+1), "choice][$a", $edit[choice][$a], 50, 127);
+ if ($admin) $form .= form_textfield(strtr(t("Votes for choice %n"), array("%n" => ($a+1))), "chvotes][$a", $edit[chvotes][$a] ? $edit[chvotes][$a] : 0, 7, 7);
+ }
+
+ $form .= form_select(t("Poll duration"), "runtime", $edit[runtime] ? $edit[runtime] : t("1 week"), $duration, t("After this period, the poll will automatically be closed."));
+ if ($admin) $form .= form_select(t("Poll status"), "active", $edit[active], $active);
+ $form .= structure_form("poll", $edit);
+
+
+ // hidden fields:
+ if ($edit[nid] > 0) {
+ $form .= form_hidden("nid", $edit[nid]);
+ }
+
+ if ((!$edit) || ($nocheck)) {
+ $form .= form_submit(t("Preview"));
+ }
+ else if (!$edit[title]) {
+ $form .= "". t("Warning: you did not supply a question.") ."\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else if ((!$edit[choice][0]) && (!$edit[choice][1])) {
+ $form .= "". t("Warning: you must supply at least 2 choices.") ."
\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else {
+ $form .= form_submit(t("Preview"));
+ $form .= form_submit(t("Submit"));
+ }
+
+ return form($REQUEST_URI, $form);
+}
+
+function poll_save($edit) {
+ global $status, $user;
+
+ if (!$edit[nid]) {
+ $nid = node_save($edit, array(active => 1, author => $user->id, cid, comment => category_comment($edit[cid]), moderate => topic_moderate($edit[tid]), promote => category_promote($edit[cid]), runtime, score => 0, status => (category_submission($edit[cid]) ? $status[queued] : $status[posted]), tid, timestamp => time(), title, type => "poll", votes => 0, voters => ""));
+ }
+ else if (user_access($user)) {
+ $nid = node_save($edit, array(active, cid, tid, runtime, title, type => "poll"));
+ db_query("DELETE FROM poll_choices WHERE nid='" . $nid . "'");
+ }
+ if ($nid) {
+ foreach ($edit[choice] as $key => $value) {
+ if ($value) {
+ $v[] = "('" . $nid . "', '" . check_input($value) . "', '". check_input($edit[votes][$key]) ."', '". check_input($key) ."')";
+ }
+ }
+ db_query("INSERT INTO poll_choices (nid, chtext, chvotes, chorder) VALUES " . implode(",",$v));
+ }
+}
+
+function poll_block() {
+ $result = _node_get("type", "poll");
+ while ($poll = db_fetch_object($result)) {
+ if ($poll->active) break;
+ }
+ if ($poll) {
+ $poll = poll_view($poll, 0, 1);
+ $output = "" . $poll[title] . "
" . $poll[content];
+ }
+ $blocks[0][subject] = "Latest poll";
+ $blocks[0][content] = $output ? $output : "No active polls.";
+ $blocks[0][info] = "Display the latest active poll.";
+ $blocks[0][link] = "index.php";
+ return $blocks;
+}
+
+function poll_query($type = "") {
+ global $status;
+ $queries = array(array("recent polls", "WHERE n.type = 'poll' ORDER BY n.timestamp DESC"), array("active polls", "WHERE n.type = 'poll' AND n.status = '$status[posted]' ORDER BY n.timestamp DESC"), array("queued polls", "WHERE n.type = 'poll' AND n.status = '$status[queued]' ORDER BY n.timestamp DESC"), array("dumped polls", "WHERE n.type = 'poll' AND n.status = '$status[dumped]' ORDER BY n.timestamp DESC"), array("polls without category (integrity)", "WHERE n.type = 'poll' AND n.cid = '0' ORDER BY n.timestamp DESC"), array("polls without topic (integrity)", "WHERE n.type = 'poll' AND n.tid = '0' ORDER BY n.timestamp DESC"));
+ return ($queries[$type] ? $queries[$type] : $queries);
+}
+
+function poll_overview($query = array()) {
+ return node_overview($query);
+}
+
+function poll_admin() {
+ global $id, $edit, $mod, $keys, $op, $theme, $type, $user;
+
+ print "add new poll | poll listing | search poll | overview | help
\n";
+
+ $type = ($type ? $type : 0);
+
+ switch ($op) {
+ case "delete":
+ print poll_delete($id);
+ print poll_overview(poll_query($type));
+ break;
+ case "edit":
+ print poll_form(poll_get_choices_array(node_get_array("nid", check_input($id))));
+ break;
+ case "help":
+ poll_help();
+ break;
+ case "listing":
+ print node_listing(poll_query());
+ break;
+ case "search":
+ print search_form($keys);
+ print search_data($keys, $mod);
+ break;
+ case t("Preview"):
+ poll_view(new Poll($edit));
+ case "add":
+ print poll_form($edit);
+ break;
+ case t("Refresh"):
+ print poll_form($edit, 1);
+ break;
+ case t("Submit"):
+ poll_save($edit);
+ // fall through:
+ default:
+ print poll_overview(poll_query($type));
+ }
+}
+
+
+function poll_user() {
+ global $edit, $op, $theme, $user;
+
+ switch($op) {
+ case t("Refresh"):
+ $theme->box(t("Submit"), poll_form($edit, 1));
+ break;
+ case t("Preview"):
+ poll_view(new Poll($edit));
+ $theme->box(t("Submit"), poll_form($edit));
+ break;
+ case t("Submit"):
+ poll_save($edit);
+ $theme->box(t("Submit"), t("Thank you for your submission."));
+ break;
+ default:
+ $theme->box(t("Submit"), poll_form());
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/modules/poll/poll.module b/modules/poll/poll.module
new file mode 100644
index 00000000000..b746aaad590
--- /dev/null
+++ b/modules/poll/poll.module
@@ -0,0 +1,311 @@
+runtime = $poll[runtime];
+ $this->active = $poll[active];
+ $this->voters = $poll[voters];
+ }
+}
+
+function poll_cron() {
+ $result = _node_get("type", "poll");
+ while ($poll = db_fetch_array($result)) {
+ if ($poll[active]) {
+ if (($poll[timestamp] + $poll[runtime]) < time()) {
+ $poll[active] = 0;
+ node_save($poll,array(filter));
+ }
+ }
+ }
+}
+
+function poll_get_choices_array($poll) {
+ $result = db_query("SELECT * FROM poll_choices WHERE nid='" . $poll[nid] . "'");
+ if ($result) {
+ while ($choices = db_fetch_array($result)) {
+ $m = max($m,$choices[chvotes]);
+ $t += $choices[chvotes];
+ $poll[choice][$choices[chorder]]=$choices[chtext];
+ $poll[chvotes][$choices[chorder]]=$choices[chvotes];
+ $poll[chid][$choices[chorder]]=$choices[chid];
+ }
+ ksort($poll[choice]);
+ ksort($poll[votes]);
+ ksort($poll[chid]);
+ }
+ $poll[maxvotes]=max(1,$m);
+ $poll[totalvotes]=$t;
+ return $poll;
+}
+
+function poll_get_choices_obj($poll) {
+ $result = db_query("SELECT * FROM poll_choices WHERE nid='" . $poll->nid . "'");
+ if ($result) {
+ while ($choices = db_fetch_array($result)) {
+ $m = max($m,$choices[chvotes]);
+ $t += $choices[chvotes];
+
+ $poll->choice[$choices[chorder]] = $choices[chtext];
+ $poll->chvotes[$choices[chorder]] = $choices[chvotes];
+ $poll->chid[$choices[chorder]] = $choices[chid];
+ }
+ ksort($poll->choice);
+ ksort($poll->chvotes);
+ ksort($poll->chid);
+ }
+ $poll->maxvotes=max(1,$m);
+ $poll->totalvotes=$t;
+ return $poll;
+}
+
+function poll_status() {
+ return array(dumped, queued, posted);
+}
+
+function poll_search($keys) {
+ global $status, $user;
+ $result = db_query("SELECT n.*, p.* FROM poll p LEFT JOIN node n ON n.nid = p.nid AND n.lid = p.lid WHERE n.status = '$status[posted]' AND (n.title LIKE '%$keys%') LIMIT 20");
+ while ($poll = db_fetch_object($result)) {
+ $find[$i++] = array("title" => check_output($poll->title), "link" => (user_access($user, "poll") ? "admin.php?mod=poll&op=edit&id=$poll->nid" : "node.php?id=$poll->nid"), "user" => $poll->userid, "date" => $poll->timestamp);
+ }
+ return $find;
+}
+
+function poll_help() {
+ ?>
+ No help available.
+ " . ($p?" | ":"") . ($p<100?" | ":"") . "
";
+}
+
+function poll_view($node, $main = 0, $block = 0) {
+ global $theme, $op, $user, $chid, $REQUEST_URI;
+
+ if (($node->active) && (!field_get($node->voters,$user->userid))) $voting = 1;
+ if ((!$voting) && ($op != "View")) $op = "View";
+
+ switch ($op) {
+ case "Vote":
+ if (($node->active) && (!field_get($node->voters,$user->userid))) {
+ $result = db_query("UPDATE poll_choices SET chvotes=chvotes+1 WHERE nid='" . $node->nid . "' && chid='" . check_input($chid) . "'");
+ if (($result) && ($user)) {
+ $new = node_get_array("nid",$node->nid);
+ $new[voters] = field_set($node->voters,$user->userid,1);
+ node_save($new,array(voters));
+ $node = node_get_object("nid",$node->nid);
+ }
+ }
+
+ case "View":
+ $node = poll_get_choices_obj($node);
+
+ $title = "" . check_output($node->title) . "";
+ $footer = "(" . format_plural($node->totalvotes, "vote", "votes") . ")";
+
+ $node->totalvotes = max(1,$node->totalvotes);
+
+ if (!$block) $output .= "Posted by " . format_username($node->userid) . " on " . format_date($node->timestamp,large) . "
\r\n";
+ foreach ($node->choice as $key => $value) {
+ if ($main) {
+ $output .= "" . check_output($value) . " | " . poll_graph($node->chvotes[$key] / $node->maxvotes) . " | " . round(($node->chvotes[$key] / $node->totalvotes) * 100) . "% |
";
+ }
+ else {
+ $output .= (!$block ? "
" : "") . check_output($value) . "
" . poll_graph($node->chvotes[$key] / $node->maxvotes) . " | " . round(($node->chvotes[$key] / $node->totalvotes) * 100) . "% |
\r\n";
+ }
+ }
+ $output .= "" . $footer . "
";
+ break;
+
+ default:
+ $node = poll_get_choices_obj($node);
+
+ $title = "" . check_output($node->title) . "";
+ $footer = "(" . format_plural($node->totalvotes, "vote", "votes") . ")";
+
+ $node->totalvotes = max(1,$node->totalvotes);
+
+ if (!$block) $output .= "Posted by " . format_username($node->userid) . " on " . format_date($node->timestamp,large) . "
\r\n";
+ $output .= "";
+ $output .= "
" . form_submit("Vote") . "
" .$footer . "
";
+ $output = form($REQUEST_URI, $output);
+ }
+
+ if (!$block) $theme->box($title,$output);
+ return array("title" => $title, "content" => $output);
+}
+
+function poll_form($edit = array(), $nocheck = 0) {
+ global $allowed_html, $REQUEST_URI, $user;
+
+ $duration = array(0 => t("Unlimited"), 86400 => t("1 day"), 172800 => t("2 days"), 345600 => t("4 days"),
+ 604800 => t("1 week"), 1209600 => t("2 weeks"), 2678400 => t("1 month"), 5356800 => t("2 months"),
+ 10713600 => t("4 months"), 31536000 => t("1 year"));
+
+ $active = array(0 => "Closed", 1 => "Active");
+
+ $admin = ($edit[nid] && user_access($user,"poll")) ? 1 : 0;
+
+ /* Mini-form for number of choiceboxes */
+ $choices = $edit[choices]?$edit[choices]:5;
+ for ($c = 2; $c <= 20; $c++) $opts[$c]=$c;
+ $form .= form_select(t("Number of choices"), "choices", $choices, $opts, t("This box specifies the number of choiceboxes in this form, it doesn't affect the actual amount of choices in the poll."));
+ $form .= form_submit(t("Refresh")) . "
";
+
+ /* Main form */
+ $form .= form_item(t("Your name"), format_username(($edit[userid] ? $edit[userid] : $user->userid)));
+ $form .= form_hidden("userid", $edit[userid]);
+ $form .= form_textfield(t("Question"), "title", $edit[title], 50, 127);
+
+ for ($a = 0; $a < $choices; $a++) {
+ $form .= form_textfield(t("Choice")." ".($a+1), "choice][$a", $edit[choice][$a], 50, 127);
+ if ($admin) $form .= form_textfield(strtr(t("Votes for choice %n"), array("%n" => ($a+1))), "chvotes][$a", $edit[chvotes][$a] ? $edit[chvotes][$a] : 0, 7, 7);
+ }
+
+ $form .= form_select(t("Poll duration"), "runtime", $edit[runtime] ? $edit[runtime] : t("1 week"), $duration, t("After this period, the poll will automatically be closed."));
+ if ($admin) $form .= form_select(t("Poll status"), "active", $edit[active], $active);
+ $form .= structure_form("poll", $edit);
+
+
+ // hidden fields:
+ if ($edit[nid] > 0) {
+ $form .= form_hidden("nid", $edit[nid]);
+ }
+
+ if ((!$edit) || ($nocheck)) {
+ $form .= form_submit(t("Preview"));
+ }
+ else if (!$edit[title]) {
+ $form .= "". t("Warning: you did not supply a question.") ."\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else if ((!$edit[choice][0]) && (!$edit[choice][1])) {
+ $form .= "". t("Warning: you must supply at least 2 choices.") ."
\n";
+ $form .= form_submit(t("Preview"));
+ }
+ else {
+ $form .= form_submit(t("Preview"));
+ $form .= form_submit(t("Submit"));
+ }
+
+ return form($REQUEST_URI, $form);
+}
+
+function poll_save($edit) {
+ global $status, $user;
+
+ if (!$edit[nid]) {
+ $nid = node_save($edit, array(active => 1, author => $user->id, cid, comment => category_comment($edit[cid]), moderate => topic_moderate($edit[tid]), promote => category_promote($edit[cid]), runtime, score => 0, status => (category_submission($edit[cid]) ? $status[queued] : $status[posted]), tid, timestamp => time(), title, type => "poll", votes => 0, voters => ""));
+ }
+ else if (user_access($user)) {
+ $nid = node_save($edit, array(active, cid, tid, runtime, title, type => "poll"));
+ db_query("DELETE FROM poll_choices WHERE nid='" . $nid . "'");
+ }
+ if ($nid) {
+ foreach ($edit[choice] as $key => $value) {
+ if ($value) {
+ $v[] = "('" . $nid . "', '" . check_input($value) . "', '". check_input($edit[votes][$key]) ."', '". check_input($key) ."')";
+ }
+ }
+ db_query("INSERT INTO poll_choices (nid, chtext, chvotes, chorder) VALUES " . implode(",",$v));
+ }
+}
+
+function poll_block() {
+ $result = _node_get("type", "poll");
+ while ($poll = db_fetch_object($result)) {
+ if ($poll->active) break;
+ }
+ if ($poll) {
+ $poll = poll_view($poll, 0, 1);
+ $output = "" . $poll[title] . "
" . $poll[content];
+ }
+ $blocks[0][subject] = "Latest poll";
+ $blocks[0][content] = $output ? $output : "No active polls.";
+ $blocks[0][info] = "Display the latest active poll.";
+ $blocks[0][link] = "index.php";
+ return $blocks;
+}
+
+function poll_query($type = "") {
+ global $status;
+ $queries = array(array("recent polls", "WHERE n.type = 'poll' ORDER BY n.timestamp DESC"), array("active polls", "WHERE n.type = 'poll' AND n.status = '$status[posted]' ORDER BY n.timestamp DESC"), array("queued polls", "WHERE n.type = 'poll' AND n.status = '$status[queued]' ORDER BY n.timestamp DESC"), array("dumped polls", "WHERE n.type = 'poll' AND n.status = '$status[dumped]' ORDER BY n.timestamp DESC"), array("polls without category (integrity)", "WHERE n.type = 'poll' AND n.cid = '0' ORDER BY n.timestamp DESC"), array("polls without topic (integrity)", "WHERE n.type = 'poll' AND n.tid = '0' ORDER BY n.timestamp DESC"));
+ return ($queries[$type] ? $queries[$type] : $queries);
+}
+
+function poll_overview($query = array()) {
+ return node_overview($query);
+}
+
+function poll_admin() {
+ global $id, $edit, $mod, $keys, $op, $theme, $type, $user;
+
+ print "add new poll | poll listing | search poll | overview | help
\n";
+
+ $type = ($type ? $type : 0);
+
+ switch ($op) {
+ case "delete":
+ print poll_delete($id);
+ print poll_overview(poll_query($type));
+ break;
+ case "edit":
+ print poll_form(poll_get_choices_array(node_get_array("nid", check_input($id))));
+ break;
+ case "help":
+ poll_help();
+ break;
+ case "listing":
+ print node_listing(poll_query());
+ break;
+ case "search":
+ print search_form($keys);
+ print search_data($keys, $mod);
+ break;
+ case t("Preview"):
+ poll_view(new Poll($edit));
+ case "add":
+ print poll_form($edit);
+ break;
+ case t("Refresh"):
+ print poll_form($edit, 1);
+ break;
+ case t("Submit"):
+ poll_save($edit);
+ // fall through:
+ default:
+ print poll_overview(poll_query($type));
+ }
+}
+
+
+function poll_user() {
+ global $edit, $op, $theme, $user;
+
+ switch($op) {
+ case t("Refresh"):
+ $theme->box(t("Submit"), poll_form($edit, 1));
+ break;
+ case t("Preview"):
+ poll_view(new Poll($edit));
+ $theme->box(t("Submit"), poll_form($edit));
+ break;
+ case t("Submit"):
+ poll_save($edit);
+ $theme->box(t("Submit"), t("Thank you for your submission."));
+ break;
+ default:
+ $theme->box(t("Submit"), poll_form());
+ }
+}
+
+?>
\ No newline at end of file