cms/drupal/modules/poll/poll.tokens.inc
changeset 541 e756a8c72c3d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/drupal/modules/poll/poll.tokens.inc	Fri Sep 08 12:04:06 2017 +0200
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @file
+ * Builds placeholder replacement tokens for values specific to Poll nodes.
+ */
+
+/**
+ * Implements 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['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 is set to run."),
+  );
+
+  return array(
+    'tokens' => array('node' => $node),
+  );
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function poll_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $sanitize = !empty($options['sanitize']);
+  if (isset($options['language'])) {
+    $url_options['language'] = $options['language'];
+    $language_code = $options['language']->language;
+  }
+  else {
+    $language_code = NULL;
+  }
+
+  $replacements = array();
+
+  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'];
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-winner-votes':
+          if (isset($winner)) {
+            $replacements[$original] = $winner['chvotes'];
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-winner-percent':
+          if (isset($winner)) {
+            $percent = ($winner['chvotes'] / $total_votes) * 100;
+            $replacements[$original] = number_format($percent, 0);
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-duration':
+          $replacements[$original] = format_interval($node->runtime, 1, $language_code);
+          break;
+      }
+    }
+  }
+
+  return $replacements;
+}