annotate modules/poll/poll.pages.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
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 }