Now all modules are in core modules folder
This commit is contained in:
parent
5ba1cdfa0b
commit
05b6a91b0c
1907 changed files with 0 additions and 0 deletions
15
modules/i18n/i18npoll/i18npoll.info
Normal file
15
modules/i18n/i18npoll/i18npoll.info
Normal file
|
@ -0,0 +1,15 @@
|
|||
name = Poll aggregate
|
||||
description = Aggregates poll results for all translations.
|
||||
dependencies[] = translation
|
||||
dependencies[] = poll
|
||||
package = Multilanguage
|
||||
core = 6.x
|
||||
|
||||
|
||||
|
||||
; Information added by drupal.org packaging script on 2011-10-11
|
||||
version = "6.x-1.10"
|
||||
core = "6.x"
|
||||
project = "i18n"
|
||||
datestamp = "1318336004"
|
||||
|
169
modules/i18n/i18npoll/i18npoll.module
Normal file
169
modules/i18n/i18npoll/i18npoll.module
Normal file
|
@ -0,0 +1,169 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Multilingual poll - Aggregates poll results for all translations.
|
||||
*
|
||||
* Most code ripped off poll module and adapted for multilingual results.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implementation of hook_form_alter().
|
||||
*
|
||||
* Rewrite the cancel vote form with the nid for the translation with the actual vote.
|
||||
*/
|
||||
function i18npoll_form_alter(&$form, $form_state, $form_id) {
|
||||
if ($form_id == 'poll_cancel_form') {
|
||||
if (!empty($form['#nid']) && empty($form['#i18ntnid'])) {
|
||||
// Replace nid with the original node the user voted
|
||||
$node = node_load($form['#nid']);
|
||||
if (!empty($node->tnid) && ($vote = i18npoll_get_vote($node->tnid))) {
|
||||
$form['#i18ntnid'] = $node->tnid;
|
||||
$form['#nid'] = $vote->nid;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_nodeapi().
|
||||
*
|
||||
* Replaces poll results with aggregated translations.
|
||||
*
|
||||
* We don't add all language results on loading to avoid the data being trashed
|
||||
* when editing and saving nodes again.
|
||||
*/
|
||||
function i18npoll_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
|
||||
global $user;
|
||||
|
||||
if ($node->type == 'poll' && !empty($node->tnid)) {
|
||||
// Replace results for node view
|
||||
if ($op == 'view' && (empty($node->allowvotes) || !empty($node->show_results))) {
|
||||
$node->content['body'] = array(
|
||||
'#value' => i18npoll_view_results($node, $teaser, $page, FALSE),
|
||||
);
|
||||
}
|
||||
// Check again whether or not this user is allowed to vote.
|
||||
// User may have voted for any of the translations
|
||||
if ($op == 'load' && $node->allowvotes) {
|
||||
$result = i18npoll_get_vote($node->tnid);
|
||||
if (isset($result->chorder)) {
|
||||
$node->vote = $result->chorder;
|
||||
$node->allowvotes = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_block().
|
||||
*
|
||||
* Generates a block containing the latest poll with aggregated results.
|
||||
*/
|
||||
function i18npoll_block($op = 'list', $delta = 0) {
|
||||
if (user_access('access content')) {
|
||||
if ($op == 'list') {
|
||||
$blocks[0]['info'] = t('Most recent poll (Aggregated translations)');
|
||||
return $blocks;
|
||||
}
|
||||
elseif ($op == 'view') {
|
||||
// Retrieve the latest poll.
|
||||
$sql = db_rewrite_sql("SELECT MAX(n.created) FROM {node} n INNER JOIN {poll} p ON p.nid = n.nid WHERE n.status = 1 AND p.active = 1");
|
||||
$timestamp = db_result(db_query($sql));
|
||||
if ($timestamp) {
|
||||
$poll = node_load(array('type' => 'poll', 'created' => $timestamp, 'status' => 1));
|
||||
|
||||
if ($poll->nid) {
|
||||
$poll = i18npoll_view($poll, TRUE, FALSE, TRUE);
|
||||
}
|
||||
}
|
||||
$block['subject'] = t('Poll');
|
||||
$block['content'] = drupal_render($poll->content);
|
||||
return $block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of hook_view().
|
||||
*
|
||||
* @param $block
|
||||
* An extra parameter that adapts the hook to display a block-ready
|
||||
* rendering of the poll.
|
||||
*/
|
||||
function i18npoll_view($node, $teaser = FALSE, $page = FALSE, $block = FALSE) {
|
||||
global $user;
|
||||
$output = '';
|
||||
|
||||
// Special display for side-block.
|
||||
if ($block) {
|
||||
// No 'read more' link.
|
||||
$node->readmore = FALSE;
|
||||
|
||||
$links = module_invoke_all('link', 'node', $node, 1);
|
||||
$links[] = array(
|
||||
'title' => t('Older polls'),
|
||||
'href' => 'poll',
|
||||
'attributes' => array(
|
||||
'title' => t('View the list of polls on this site.')
|
||||
)
|
||||
);
|
||||
if ($node->allowvotes && $block) {
|
||||
$links[] = array(
|
||||
'title' => t('Results'),
|
||||
'href' => 'node/'. $node->nid .'/results',
|
||||
'attributes' => array(
|
||||
'title' => t('View the current poll results.')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$node->links = $links;
|
||||
}
|
||||
|
||||
if (!empty($node->allowvotes) && ($block || empty($node->show_results))) {
|
||||
$node->content['body'] = array(
|
||||
'#value' => drupal_get_form('poll_view_voting', $node, $block),
|
||||
);
|
||||
}
|
||||
else {
|
||||
$node->content['body'] = array(
|
||||
'#value' => i18npoll_view_results($node, $teaser, $page, $block),
|
||||
);
|
||||
}
|
||||
return $node;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a graphical representation of the results of a poll.
|
||||
*/
|
||||
function i18npoll_view_results(&$node, $teaser, $page, $block) {
|
||||
// Load the appropriate choices into the $poll object.
|
||||
$result = db_query("SELECT c.chorder, SUM(c.chvotes) AS votes FROM {poll_choices} c INNER JOIN {node} n ON c.nid = n.nid WHERE n.tnid = %d GROUP BY c.chorder", $node->tnid);
|
||||
while ($choice = db_fetch_object($result)) {
|
||||
// If this option not set for the source node, do not show.
|
||||
if (isset($node->choice[$choice->chorder])) {
|
||||
$node->choice[$choice->chorder]['chvotes'] = $choice->votes;
|
||||
}
|
||||
}
|
||||
return poll_view_results($node, $teaser, $page, $block);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user vote for this node or its translations.
|
||||
*
|
||||
* Returns object with nid, chorder. Has static caching as this will typically be called twice.
|
||||
*/
|
||||
function i18npoll_get_vote($tnid) {
|
||||
global $user;
|
||||
static $vote = array();
|
||||
if (!array_key_exists($tnid, $vote)) {
|
||||
if ($user->uid) {
|
||||
$vote[$tnid] = db_fetch_object(db_query('SELECT v.nid, v.chorder FROM {poll_votes} v INNER JOIN {node} n ON n.nid = v.nid WHERE n.tnid = %d AND v.uid = %d', $tnid, $user->uid));
|
||||
}
|
||||
else {
|
||||
$vote[$tnid] = db_fetch_object(db_query("SELECT v.chorder FROM {poll_votes} v INNER JOIN {node} n ON n.nid = v.nid WHERE n.tnid = %d AND v.hostname = '%s'", $tnid, ip_address()));
|
||||
}
|
||||
}
|
||||
return $vote[$tnid];
|
||||
}
|
Reference in a new issue