diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-08-19 20:19:37 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-08-19 20:19:37 +0000 |
commit | 40003c8307ca64da0cd1ab0ee4d87f4812be8088 (patch) | |
tree | 05aa427a035a991cc82b68e42d5eb2282273bac4 /modules/poll/poll.tokens.inc | |
parent | e998857eb8a5ef4d2ebe381a57c19b1b355fe4ef (diff) | |
download | brdo-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.inc | 91 |
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; +} |