summaryrefslogtreecommitdiff
path: root/modules/poll/poll.tokens.inc
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2009-08-19 20:19:37 +0000
committerDries Buytaert <dries@buytaert.net>2009-08-19 20:19:37 +0000
commit40003c8307ca64da0cd1ab0ee4d87f4812be8088 (patch)
tree05aa427a035a991cc82b68e42d5eb2282273bac4 /modules/poll/poll.tokens.inc
parente998857eb8a5ef4d2ebe381a57c19b1b355fe4ef (diff)
downloadbrdo-40003c8307ca64da0cd1ab0ee4d87f4812be8088.tar.gz
brdo-40003c8307ca64da0cd1ab0ee4d87f4812be8088.tar.bz2
- Patch #113614 by eaton, fago, et al: add centralized token/placeholder subsituation to core.
Diffstat (limited to 'modules/poll/poll.tokens.inc')
-rw-r--r--modules/poll/poll.tokens.inc91
1 files changed, 91 insertions, 0 deletions
diff --git a/modules/poll/poll.tokens.inc b/modules/poll/poll.tokens.inc
new file mode 100644
index 000000000..9fe6857ad
--- /dev/null
+++ b/modules/poll/poll.tokens.inc
@@ -0,0 +1,91 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Builds placeholder replacement tokens for values specific to Poll nodes.
+ */
+
+/**
+ * Implement hook_token_info().
+ */
+function poll_token_info() {
+ $node['poll-votes'] = array(
+ 'name' => t("Poll votes"),
+ 'description' => t("The number of votes that have been cast on a poll node."),
+ );
+ $node['poll-winner'] = array(
+ 'name' => t("Poll winner"),
+ 'description' => t("The winning poll answer."),
+ );
+ $node['poll-winner-votes'] = array(
+ 'name' => t("Poll winner votes"),
+ 'description' => t("The number of votes received by the winning poll answer."),
+ );
+ $node['poll-winner-percent'] = array(
+ 'name' => t("Poll winner percent"),
+ 'description' => t("The percentage of votes received by the winning poll answer."),
+ );
+ $node['poll-duration'] = array(
+ 'name' => t("Poll duration"),
+ 'description' => t("The length of time the poll node is set to run."),
+ );
+
+ return array(
+ 'tokens' => array('node' => $node),
+ );
+}
+
+/**
+ * Implement hook_tokens().
+ */
+function poll_tokens($type, $tokens, array $data = array(), array $options = array()) {
+ $url_options = array('absolute' => TRUE);
+ $sanitize = !empty($options['sanitize']);
+
+ if ($type == 'node' && !empty($data['node']) && $data['node']->type == 'poll') {
+ $node = $data['node'];
+
+ $total_votes = 0;
+ $highest_votes = 0;
+ foreach ($node->choice as $choice) {
+ if ($choice['chvotes'] > $highest_votes) {
+ $winner = $choice;
+ $highest_votes = $choice['chvotes'];
+ }
+ $total_votes = $total_votes + $choice['chvotes'];
+ }
+ foreach ($tokens as $name => $original) {
+ switch ($name) {
+ case 'poll-votes':
+ $replacements[$original] = $total_votes;
+ break;
+
+ case 'poll-winner':
+ if (isset($winner)) {
+ $replacements[$original] = $sanitize ? filter_xss($winner['chtext']) : $winner['chtext'];
+ }
+ break;
+
+ case 'poll-winner-votes':
+ if (isset($winner)) {
+ $replacements[$original] = $winner['chvotes'];
+ }
+ break;
+
+ case 'poll-winner-percent':
+ if (isset($winner)) {
+ $percent = ($winner['chvotes'] / $total_votes) * 100;
+ $replacements[$original] = number_format($percent, 0);
+ }
+ break;
+
+ case 'poll-duration':
+ $replacements[$original] = format_interval($node->runtime, 1, $language_code);
+ break;
+ }
+ }
+ }
+
+ return $replacements;
+}