https://www.mediawiki.org/wiki/Special:Code/MediaWiki/113686

Revision: 113686
Author:   wikinaut
Date:     2012-03-12 23:56:59 +0000 (Mon, 12 Mar 2012)
Log Message:
-----------
added method for votersto revoke their vote.

Modified Paths:
--------------
    trunk/extensions/AJAXPoll/AJAXPoll.css
    trunk/extensions/AJAXPoll/AJAXPoll.i18n.php
    trunk/extensions/AJAXPoll/AJAXPoll.php
    trunk/extensions/AJAXPoll/AJAXPoll_body.php

Modified: trunk/extensions/AJAXPoll/AJAXPoll.css
===================================================================
--- trunk/extensions/AJAXPoll/AJAXPoll.css      2012-03-12 23:53:06 UTC (rev 
113685)
+++ trunk/extensions/AJAXPoll/AJAXPoll.css      2012-03-12 23:56:59 UTC (rev 
113686)
@@ -23,6 +23,14 @@
        font-size: 0.9em;
 }
 
+.ajaxpoll .ajaxpoll-hover-vote {
+       background: cyan;
+}
+
+.ajaxpoll .ajaxpoll-hover-revoke {
+       background: gold;
+}
+
 .ajaxpoll .ajaxpoll-answer-vote {
        border: 1px solid #CCC;
        width: 100%;

Modified: trunk/extensions/AJAXPoll/AJAXPoll.i18n.php
===================================================================
--- trunk/extensions/AJAXPoll/AJAXPoll.i18n.php 2012-03-12 23:53:06 UTC (rev 
113685)
+++ trunk/extensions/AJAXPoll/AJAXPoll.i18n.php 2012-03-12 23:56:59 UTC (rev 
113686)
@@ -24,6 +24,8 @@
        'ajaxpoll-info' => 'There {{PLURAL:$1|was one vote|were $1 votes}} 
since the poll was created on $2.',
        'ajaxpoll-submitting' => 'Please wait, submitting your vote.',
        'ajaxpoll-vote-permission' => 'You are not entitled to vote.',
+       'ajaxpoll-revoke-vote' => 'I want to revoke my vote',
+       'ajaxpoll-vote-revoked' => 'You succesfully revoked your vote.',
 
        'right-ajaxpoll-vote' => 'Can vote in AJAX-based polls',
 );

Modified: trunk/extensions/AJAXPoll/AJAXPoll.php
===================================================================
--- trunk/extensions/AJAXPoll/AJAXPoll.php      2012-03-12 23:53:06 UTC (rev 
113685)
+++ trunk/extensions/AJAXPoll/AJAXPoll.php      2012-03-12 23:56:59 UTC (rev 
113686)
@@ -19,7 +19,7 @@
  * @author Jack Phoenix <[email protected]>
  * @author Thomas Gries
  * @maintainer Thomas Gries
- * @version 1.67
+ * @version 1.68
  * @link http://www.mediawiki.org/wiki/Extension:AJAX_Poll Documentation
  */
 
@@ -31,7 +31,7 @@
 $wgExtensionCredits['parserhook'][] = array(
        'path' => __FILE__,
        'name' => 'AJAX Poll',
-       'version' => '1.67 20120312',
+       'version' => '1.68 20120313',
        'author' => array( 'Dariusz Siedlecki', 'Jack Phoenix', 'Thomas Gries' 
),
        'descriptionmsg' => 'ajaxpoll-desc',
        'url' => 'https://www.mediawiki.org/wiki/Extension:AJAX_Poll',

Modified: trunk/extensions/AJAXPoll/AJAXPoll_body.php
===================================================================
--- trunk/extensions/AJAXPoll/AJAXPoll_body.php 2012-03-12 23:53:06 UTC (rev 
113685)
+++ trunk/extensions/AJAXPoll/AJAXPoll_body.php 2012-03-12 23:56:59 UTC (rev 
113686)
@@ -165,51 +165,68 @@
                        return AJAXPoll::buildHTML( $id, $user );
                }
 
-               $answer = ++$answer;
+               if ( $answer != 0 ) {
 
-               $q = $dbw->select(
-                       'poll_vote',
-                       'COUNT(*) AS c',
-                       array(
-                               'poll_id' => $id,
-                               'poll_user' => $user
-                       ),
-                       __METHOD__
-               );
-               $row = $dbw->fetchRow( $q );
+                       $answer = ++$answer;
 
-               if ( $row['c'] > 0 ) {
-
-                       $updateQuery = $dbw->update(
+                       $q = $dbw->select(
                                'poll_vote',
+                               'COUNT(*) AS count',
                                array(
-                                       'poll_answer' => $answer,
-                                       'poll_date' => wfTimestampNow()
-                               ),
-                               array(
                                        'poll_id' => $id,
                                        'poll_user' => $user
                                ),
                                __METHOD__
                        );
-                       $dbw->commit();
-                       $pollContainerText = ( $updateQuery ) ? 
'ajaxpoll-vote-update' : 'ajaxpoll-vote-error';
+                       $row = $dbw->fetchRow( $q );
 
-               } else {
+                       if ( $row['count'] > 0 ) {
 
-                       $insertQuery = $dbw->insert(
+                               $updateQuery = $dbw->update(
+                                       'poll_vote',
+                                       array(
+                                               'poll_answer' => $answer,
+                                               'poll_date' => wfTimestampNow()
+                                       ),
+                                       array(
+                                               'poll_id' => $id,
+                                               'poll_user' => $user,
+                                       ),
+                                       __METHOD__
+                               );
+                               $dbw->commit();
+                               $pollContainerText = ( $updateQuery ) ? 
'ajaxpoll-vote-update' : 'ajaxpoll-vote-error';
+
+                       } else {
+
+                               $insertQuery = $dbw->insert(
+                                       'poll_vote',
+                                       array(
+                                               'poll_id' => $id,
+                                               'poll_user' => $user,
+                                               'poll_ip' => wfGetIP(),
+                                               'poll_answer' => $answer,
+                                               'poll_date' => wfTimestampNow()
+                                       ),
+                                       __METHOD__
+                               );
+                               $dbw->commit();
+                               $pollContainerText = ( $insertQuery ) ? 
'ajaxpoll-vote-add' : 'ajaxpoll-vote-error';
+
+                       }
+               
+               } else { // revoking a vote
+
+                       $deleteQuery = $dbw->delete(
                                'poll_vote',
                                array(
                                        'poll_id' => $id,
                                        'poll_user' => $user,
-                                       'poll_ip' => wfGetIP(),
-                                       'poll_answer' => $answer,
-                                       'poll_date' => wfTimestampNow()
                                ),
                                __METHOD__
                        );
                        $dbw->commit();
-                       $pollContainerText = ( $insertQuery ) ? 
'ajaxpoll-vote-add' : 'ajaxpoll-vote-error';
+                       $pollContainerText = ( $deleteQuery ) ? 
'ajaxpoll-vote-revoked' : 'ajaxpoll-vote-error';
 
                }
 
@@ -301,7 +318,12 @@
                        // Different message depending on if the user has 
already voted or not, or is entitled to vote
 
                        if ( $wgUser->isAllowed( 'ajaxpoll-vote' ) ) {
-                               $message = ( isset( $row[0] ) ) ? 
$ourLastVoteDate : wfMsg( 'ajaxpoll-no-vote' );
+                               if ( isset( $row[0] ) ) {
+                                       $message = $ourLastVoteDate;
+                                       $lines[] = wfMsg( 
'ajaxpoll-revoke-vote' );
+                               } else {
+                                       $message = wfMsg( 'ajaxpoll-no-vote' );
+                               }
                        } else {
                                $message = wfMsg( 'ajaxpoll-vote-permission' );
                        }
@@ -313,6 +335,9 @@
                                '" id="ajaxpoll-answer-id-' . $id . '"><input 
type="hidden" name="ajaxpoll-post-id" value="' . $id . '" />';
 
                        for ( $i = 1; $i < count( $lines ); $i++ ) {
+
+                               $vote = ( $i != count( $lines ) - 1 );
+                               $voteValue = ( $vote ) ? $i : 0;
                                $ans_no = $i - 1;
 
                                if ( $amountOfVotes == 0 ) {
@@ -330,19 +355,28 @@
                                if ( $wgUser->isAllowed( 'ajaxpoll-vote' ) ) {
 
                                        if ( $wgUseAjax ) {
-                                               $submitJS = 
"sajax_do_call(\"AJAXPoll::submitVote\",[\"" . $id . "\",\"" . $i . "\"], 
$(\"#ajaxpoll-container-" . $id . "\")[0]);";
+                                               $submitJS = 
"sajax_do_call(\"AJAXPoll::submitVote\",[\"" . $id . "\",\"" . $voteValue . 
"\"], $(\"#ajaxpoll-container-" . $id . "\")[0]);";
                                        } else {
                                                $submitJS = 
"$(\"#ajaxpoll-answer-id-" . $id . "\").submit();";
                                        }
 
 
-                               // HTML output has to be on one line thanks to 
a MediaWiki bug
-                               // @see 
https://bugzilla.wikimedia.org/show_bug.cgi?id=1319
-                                       $ret .= "
-<div id='ajaxpoll-answer-" . $ans_no . "' class='ajaxpoll-answer'><div 
class='ajaxpoll-answer-name'><label for='ajaxpoll-post-answer-" . $ans_no . "' 
onclick='$(\"#ajaxpoll-ajax-" . $id . "\").html(\"" . wfMsg( 
'ajaxpoll-submitting' ) . "\");$(\"#ajaxpoll-ajax-" . $id . 
"\").css(\"display\",\"block\");$(this).addClass(\"ajaxpoll-checkevent\").prop(\"checked\",true);
 " . $submitJS . "'><input type='radio' id='ajaxpoll-post-answer-" . $ans_no . 
"' name='ajaxpoll-post-answer-" . $ans_no . "' value='" . $i . "'" . ( $our ? 
'checked=true ' : '' ) . "/>" . strip_tags( $lines[$i] ) .
+                                       // HTML output has to be on one line 
thanks to a MediaWiki bug
+                                       // @see 
https://bugzilla.wikimedia.org/show_bug.cgi?id=1319
+
+                                       if ( $vote ) {
+                                               $ret .= "
+<div id='ajaxpoll-answer-" . $ans_no . "' class='ajaxpoll-answer'><div 
class='ajaxpoll-answer-name'><label for='ajaxpoll-post-answer-" . $ans_no . "' 
onmouseover='$(this).addClass(\"ajaxpoll-hover-vote\");' 
onmouseout='$(this).removeClass(\"ajaxpoll-hover-vote\");' 
onclick='$(\"#ajaxpoll-ajax-" . $id . "\").html(\"" . wfMsg( 
'ajaxpoll-submitting' ) . "\");$(\"#ajaxpoll-ajax-" . $id . 
"\").css(\"display\",\"block\");$(this).addClass(\"ajaxpoll-checkevent\").prop(\"checked\",true);
 " . $submitJS . "'><input type='radio' id='ajaxpoll-post-answer-" . $ans_no . 
"' name='ajaxpoll-post-answer-" . $ans_no . "' value='" . $voteValue . "' " . ( 
$our ? 'checked=true ' : '' ) . "/>" . strip_tags( $lines[$i] ) .
 "</label></div><div class='ajaxpoll-answer-vote" . ( $our ? ' 
ajaxpoll-our-vote' : '' ) ."' onmouseover='mover(this)' 
onmouseout='mout(this);'><span title='" . wfMsg( 'ajaxpoll-percent-votes', 
sprintf( $percent ) ) . "'>" . ( ( isset( $poll_result ) && !empty( 
$poll_result[$i + 1] ) ) ? $poll_result[$i + 1] : 0 ) . "</span><div 
style='width: " . $percent . "%;" . ( $percent == 0 ? ' border:0;' : '' ) . 
"'></div></div>
 </div>
 ";
+                                       } else {
+                                               $ret .= "
+<div id='ajaxpoll-answer-" . $ans_no . "' class='ajaxpoll-answer'><div 
class='ajaxpoll-answer-name'><label for='ajaxpoll-post-answer-" . $ans_no . "' 
onmouseover='$(this).addClass(\"ajaxpoll-hover-revoke\");' 
onmouseout='$(this).removeClass(\"ajaxpoll-hover-revoke\");' 
onclick='$(\"#ajaxpoll-ajax-" . $id . "\").html(\"" . wfMsg( 
'ajaxpoll-submitting' ) . "\");$(\"#ajaxpoll-ajax-" . $id . 
"\").css(\"display\",\"block\");$(this).addClass(\"ajaxpoll-checkevent\").prop(\"checked\",true);
 " . $submitJS . "'><input type='radio' id='ajaxpoll-post-answer-" . $ans_no . 
"' name='ajaxpoll-post-answer-" . $ans_no . "' value='" . $voteValue . "' " . ( 
$our ? 'checked=true ' : '' ) . "/>" . strip_tags( $lines[$i] ) .
+"</label></div>
+</div>
+";
+                                       }
 
                                } else {
 
@@ -351,7 +385,6 @@
 "</label></div><div class='ajaxpoll-answer-vote" . ( $our ? ' 
ajaxpoll-our-vote' : '' ) ."' onmouseover='mover(this)' 
onmouseout='mout(this);'><span title='" . wfMsg( 'ajaxpoll-percent-votes', 
sprintf( $percent ) ) . "'>" . ( ( isset( $poll_result ) && !empty( 
$poll_result[$i + 1] ) ) ? $poll_result[$i + 1] : 0 ) . "</span><div 
style='width: " . $percent . "%;" . ( $percent == 0 ? ' border:0;' : '' ) . 
"'></div></div>
 </div>
 ";
-
                                }
 
                        }


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to