danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * User page callbacks for the poll module.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Menu callback to provide a simple list of all polls available.
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 function poll_page() {
|
danielebarchiesi@0
|
12 $polls_per_page = 15;
|
danielebarchiesi@0
|
13
|
danielebarchiesi@0
|
14 $count_select = db_select('node', 'n');
|
danielebarchiesi@0
|
15 $count_select->addExpression('COUNT(*)', 'expression');
|
danielebarchiesi@0
|
16 $count_select->join('poll', 'p', 'p.nid = n.nid');
|
danielebarchiesi@0
|
17 $count_select->condition('n.status', 1);
|
danielebarchiesi@0
|
18
|
danielebarchiesi@0
|
19 // List all polls.
|
danielebarchiesi@0
|
20 $select = db_select('node', 'n');
|
danielebarchiesi@0
|
21 $select->join('poll', 'p', 'p.nid = n.nid');
|
danielebarchiesi@0
|
22 $select->join('poll_choice', 'c', 'c.nid = n.nid');
|
danielebarchiesi@0
|
23 $select->addExpression('SUM(c.chvotes)', 'votes');
|
danielebarchiesi@0
|
24 $select = $select->fields('n', array('nid', 'title', 'created'))
|
danielebarchiesi@0
|
25 ->fields('p', array('active'))
|
danielebarchiesi@0
|
26 ->condition('n.status', 1)
|
danielebarchiesi@0
|
27 ->orderBy('n.created', 'DESC')
|
danielebarchiesi@0
|
28 ->groupBy('n.nid')
|
danielebarchiesi@0
|
29 ->groupBy('n.title')
|
danielebarchiesi@0
|
30 ->groupBy('p.active')
|
danielebarchiesi@0
|
31 ->groupBy('n.created')
|
danielebarchiesi@0
|
32 ->extend('PagerDefault')
|
danielebarchiesi@0
|
33 ->limit($polls_per_page)
|
danielebarchiesi@0
|
34 ->addTag('node_access');
|
danielebarchiesi@0
|
35 $select->setCountQuery($count_select);
|
danielebarchiesi@0
|
36 $queried_nodes = $select->execute()
|
danielebarchiesi@0
|
37 ->fetchAllAssoc('nid');
|
danielebarchiesi@0
|
38
|
danielebarchiesi@0
|
39 $output = '<ul>';
|
danielebarchiesi@0
|
40 foreach ($queried_nodes as $node) {
|
danielebarchiesi@0
|
41 $output .= '<li>' . l($node->title, "node/$node->nid") . ' - ' . format_plural($node->votes, '1 vote', '@count votes') . ' - ' . ($node->active ? t('open') : t('closed')) . '</li>';
|
danielebarchiesi@0
|
42 }
|
danielebarchiesi@0
|
43 $output .= '</ul>';
|
danielebarchiesi@0
|
44 $output .= theme('pager');
|
danielebarchiesi@0
|
45 return $output;
|
danielebarchiesi@0
|
46 }
|
danielebarchiesi@0
|
47
|
danielebarchiesi@0
|
48 /**
|
danielebarchiesi@0
|
49 * Callback for the 'votes' tab for polls you can see other votes on
|
danielebarchiesi@0
|
50 */
|
danielebarchiesi@0
|
51 function poll_votes($node) {
|
danielebarchiesi@0
|
52 $votes_per_page = 20;
|
danielebarchiesi@0
|
53 drupal_set_title($node->title);
|
danielebarchiesi@0
|
54
|
danielebarchiesi@0
|
55 $header[] = array('data' => t('Visitor'), 'field' => 'u.name');
|
danielebarchiesi@0
|
56 $header[] = array('data' => t('Vote'), 'field' => 'pc.chtext');
|
danielebarchiesi@0
|
57 $header[] = array('data' => t('Timestamp'), 'field' => 'pv.timestamp', 'sort' => 'desc');
|
danielebarchiesi@0
|
58
|
danielebarchiesi@0
|
59 $select = db_select('poll_vote', 'pv')->extend('PagerDefault')->extend('TableSort');
|
danielebarchiesi@0
|
60 $select->join('poll_choice', 'pc', 'pv.chid = pc.chid');
|
danielebarchiesi@0
|
61 $select->join('users', 'u', 'pv.uid = u.uid');
|
danielebarchiesi@0
|
62 $queried_votes = $select
|
danielebarchiesi@0
|
63 ->addTag('translatable')
|
danielebarchiesi@0
|
64 ->fields('pv', array('chid', 'uid', 'hostname', 'timestamp', 'nid'))
|
danielebarchiesi@0
|
65 ->fields('pc', array('chtext'))
|
danielebarchiesi@0
|
66 ->fields('u', array('name'))
|
danielebarchiesi@0
|
67 ->condition('pv.nid', $node->nid)
|
danielebarchiesi@0
|
68 ->limit($votes_per_page)
|
danielebarchiesi@0
|
69 ->orderByHeader($header)
|
danielebarchiesi@0
|
70 ->execute();
|
danielebarchiesi@0
|
71
|
danielebarchiesi@0
|
72 $rows = array();
|
danielebarchiesi@0
|
73 foreach ($queried_votes as $vote) {
|
danielebarchiesi@0
|
74 $rows[] = array(
|
danielebarchiesi@0
|
75 $vote->name ? theme('username', array('account' => $vote)) : check_plain($vote->hostname),
|
danielebarchiesi@0
|
76 check_plain($vote->chtext),
|
danielebarchiesi@0
|
77 format_date($vote->timestamp),
|
danielebarchiesi@0
|
78 );
|
danielebarchiesi@0
|
79 }
|
danielebarchiesi@0
|
80 $build['poll_votes_table'] = array(
|
danielebarchiesi@0
|
81 '#theme' => 'table',
|
danielebarchiesi@0
|
82 '#header' => $header,
|
danielebarchiesi@0
|
83 '#rows' => $rows,
|
danielebarchiesi@0
|
84 '#prefix' => t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'),
|
danielebarchiesi@0
|
85 );
|
danielebarchiesi@0
|
86 $build['poll_votes_pager'] = array('#theme' => 'pager');
|
danielebarchiesi@0
|
87 return $build;
|
danielebarchiesi@0
|
88 }
|
danielebarchiesi@0
|
89
|
danielebarchiesi@0
|
90 /**
|
danielebarchiesi@0
|
91 * Callback for the 'results' tab for polls you can vote on
|
danielebarchiesi@0
|
92 */
|
danielebarchiesi@0
|
93 function poll_results($node) {
|
danielebarchiesi@0
|
94 drupal_set_title($node->title);
|
danielebarchiesi@0
|
95 $node->show_results = TRUE;
|
danielebarchiesi@0
|
96 return node_show($node);
|
danielebarchiesi@0
|
97 }
|