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

Revision: 103527
Author:   neilk
Date:     2011-11-17 23:49:35 +0000 (Thu, 17 Nov 2011)
Log Message:
-----------
phase 1 of Moodbar changes from bsitu & rmoen

Modified Paths:
--------------
    branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php
    branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php
    branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php
    branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php
    branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php
    
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js
    
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
    
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js

Modified: branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php
===================================================================
--- branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php   
2011-11-17 23:43:53 UTC (rev 103526)
+++ branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php   
2011-11-17 23:49:35 UTC (rev 103527)
@@ -57,7 +57,10 @@
                                ApiBase::PARAM_TYPE => 'integer',
                        ),
                        
-                       'reason' => null,
+                       'reason' => array(
+                               ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_TYPE => 'string'
+                       ),
                        'token' => array(
                                ApiBase::PARAM_REQUIRED => true,
                        ),

Modified: branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php
===================================================================
--- branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php   2011-11-17 
23:43:53 UTC (rev 103526)
+++ branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php   2011-11-17 
23:49:35 UTC (rev 103527)
@@ -193,7 +193,8 @@
                } elseif ( $key == 'type' ) {
                        return in_array( $value, self::$validTypes );
                } elseif ( $key == 'comment' ) {
-                       return mb_strlen( $value ) <= 140;
+                       $comment_len = mb_strlen( $value );
+                       return $comment_len > 0 && $comment_len <= 140;
                }
 
                return true;

Modified: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php
===================================================================
--- branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php   2011-11-17 
23:43:53 UTC (rev 103526)
+++ branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php   2011-11-17 
23:49:35 UTC (rev 103527)
@@ -94,9 +94,12 @@
        'moodbar-comment-hidden' => '(Feedback hidden by administrative 
action)',
        'moodbar-feedback-show' => 'show hidden feedback',
        'moodbar-feedback-hide' => 'hide feedback',
-       'moodbar-hidden-footer' => 'Hidden Feedback $1',
+       'moodbar-hidden-footer' => 'Hidden Feedback by $1 on $2 $3, reason: $4 
$5',
+       'moodbar-hidden-footer-without-log' => 'Hidden Feedback $1',
        'moodbar-feedback-restore' => 'restore hidden feedback',
        'moodbar-action-item' => 'Feedback item:',
+        'moodbar-action-reason' => 'Reason:',
+        'moodbar-action-reason-required' => 'Please provide a reason.',
        'moodbar-hide-header' => 'Hide this item from view',
        'moodbar-hide-intro' => '',
        'moodbar-restore-header' => "Restore this item's visibility",
@@ -271,7 +274,8 @@
 {{Identical|More}}',
        'moodbar-feedback-newer' => 'Text of the link that the user can click 
to go back to more recent results. Only visible if JavaScript is not enabled.',
        'moodbar-feedback-older' => 'Text of the link that the user can click 
to see less recent results. Only visible if JavaScript is not enabled.',
-       'moodbar-hidden-footer' => '* $1 is a link to restore the item 
displaying {{msg-mw|moodbar-feedback-restore}}',
+       'moodbar-hidden-footer' => '* $1 is the username, $2 is the date, $3 is 
the time, $4 is the reason for hiding the feedback,$5 is a link to restore the 
item displaying {{msg-mw|moodbar-feedback-restore}}',
+        'moodbar-hidden-footer-without-log' => '* $1 is a link to restore the 
item displaying {{msg-mw|moodbar-feedback-restore}}',
        'moodbar-type-happy' => 'No gender support ([[bugzilla:30071|bug 
30071]])',
        'moodbar-type-sad' => 'No gender support ([[bugzilla:30071|bug 
30071]])',
        'moodbar-type-confused' => 'No gender support ([[bugzilla:30071|bug 
30071]])',

Modified: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php
===================================================================
--- branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php        2011-11-17 
23:43:53 UTC (rev 103526)
+++ branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php        2011-11-17 
23:49:35 UTC (rev 103527)
@@ -149,6 +149,8 @@
                'moodbar-feedback-noresults',
                'moodbar-feedback-ajaxerror',
                'moodbar-feedback-action-error',
+               'moodbar-action-reason',
+               'moodbar-action-reason-required'
        ),
 );
 

Modified: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php
===================================================================
--- branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php       
2011-11-17 23:43:53 UTC (rev 103526)
+++ branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php       
2011-11-17 23:49:35 UTC (rev 103527)
@@ -218,12 +218,14 @@
                                
                $userPageUrl = 
htmlspecialchars($user->getUserPage()->getLocalURL());
                
+               $userLink = Linker::userLink( $user->getId(), $username );
+               
                return <<<HTML
                        <div class="fbd-item-userName">
-                               <a href="$userPageUrl" 
class="fbd-item-userLink">$username</a>
-                               <sup class="fbd-item-userLinks">
+                               $userLink
+                               <span class="fbd-item-userLinks">
                                        $links
-                               </sup>
+                               </span>
                        </div>
 HTML;
        }
@@ -248,6 +250,8 @@
         * @return string HTML
         */
        protected static function getHiddenFooter( $feedbackItem, $mode ) {
+               global $wgLang;
+               
                $id = $feedbackItem->getProperty('id');
                $permalinkTitle = SpecialPage::getTitleFor( 
'FeedbackDashboard', $id );
                if ( $mode === 'shown' ) {
@@ -257,7 +261,21 @@
                                        ->link( $permalinkTitle, $linkText, 
array(), $query );
                        $link = Xml::tags( 'span', array( 'class' => 
'fbd-item-restore' ), "($link)" );
                        
-                       $footer = 
wfMessage('moodbar-hidden-footer')->rawParams($link)->escaped();
+                       $feedback_hidden_detail = 
self::getFeedbackHiddenDetail($id);
+
+                       if($feedback_hidden_detail === false) {
+                               $footer = 
wfMessage('moodbar-hidden-footer-without-log')->
+                                           rawParams( $link )->escaped();      
+                       }
+                       else {
+                               $footer = wfMessage('moodbar-hidden-footer')->
+                                           rawParams( htmlspecialchars( 
$feedback_hidden_detail->log_user_text ), 
+                                                      
$wgLang->date($feedback_hidden_detail->log_timestamp), 
+                                                      
$wgLang->time($feedback_hidden_detail->log_timestamp),  
+                                                      htmlspecialchars( 
$feedback_hidden_detail->log_comment ), 
+                                                      $link )->escaped();      
+                       }
+                                               
                        return Xml::tags( 'div', array( 'class' => 'error' ), 
$footer );
                } elseif ( $mode === 'hidden' ) {
                        $linkText = 
wfMessage('moodbar-feedback-show')->escaped();
@@ -487,4 +505,24 @@
                }
                return $query;
        }
+       
+       /**
+        * Get admin's username/timestamp/reason for hiding a feedback
+        * @param $mbf_id primary key for moodbar_feedback
+        * @return ResultWrapper|bool
+        */
+       protected static function getFeedbackHiddenDetail( $mbf_id ) {
+               $dbr = wfGetDB( DB_SLAVE );
+               
+               return $dbr->selectRow( array( 'logging' ), 
+                                    array( 'log_user_text', 'log_timestamp', 
'log_comment' ),
+                                    array( 'log_namespace' => NS_SPECIAL,  
+                                           'log_title' => 'FeedbackDashboard/' 
. intval( $mbf_id ),  
+                                           'log_action' => 'hide', 
+                                           'log_type' => 'moodbar' ),
+                                    __METHOD__,
+                                    array( 'LIMIT' => 1, 'ORDER BY' => 
"log_timestamp DESC" )
+               );
+       }
+       
 }

Modified: 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js
===================================================================
--- 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js
    2011-11-17 23:43:53 UTC (rev 103526)
+++ 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js
    2011-11-17 23:49:35 UTC (rev 103527)
@@ -111,7 +111,6 @@
                                                                        
.localize()
                                                                        .click( 
function( e ) {
                                                                                
var $el = $( this );
-                                                                               
mb.ui.overlay.find( '.mw-moodBar-formSubmit').removeAttr('disabled');
                                                                                
mb.ui.overlay.find( '.mw-moodBar-formInput' ).focus();
                                                                                
$mwMoodBarTypes.addClass( 'mw-moodBar-types-select' );
                                                                                
mb.feedbackItem.type = $el.attr( 'rel' );
@@ -120,6 +119,7 @@
                                                                                
        .find( '.mw-moodBar-selected' )
                                                                                
                .not( $el )
                                                                                
                .removeClass( 'mw-moodBar-selected' );
+                                                                               
mb.validate();
                                                                        } )
                                                                        .get( 0 
)
                                                        );
@@ -214,7 +214,7 @@
                                                        var message, 
counterElement;
                                                        message = mw.msg( 
'moodbar-form-note-dynamic' );                                                  
      
                                                        counterElement = 
mw.html.element( 'span', {
-                                                                       'id': 
'mw-moodBar-charCount',
+                                                                       'id': 
'mw-moodBar-charCount'
                                                                } );
                                                        return mw.html.escape( 
message )
                                                                .replace( 
/\$1/, counterElement );
@@ -228,9 +228,18 @@
                                        .val( mw.msg( 'moodbar-form-submit' ) )
                                        .click( function() {
                                                mb.feedbackItem.comment = 
mb.ui.overlay.find( '.mw-moodBar-formInput' ).val();
-                                               mb.swapContent( mb.tpl.loading 
);
-                                               $.moodBar.submit( 
mb.feedbackItem );
+                                               if(mb.feedbackItem.comment){
+                                                       mb.swapContent( 
mb.tpl.loading );
+                                                       $.moodBar.submit( 
mb.feedbackItem );
+                                               }
                                        } )
+                                       .end()
+                                       
+                               // Keypress
+                               .find( '#mw-moodBar-feedbackInput' )
+                                       .keyup( function(event) {               
                                        
+                                               mb.validate();
+                                       })
                                        .end();
                        
                                // Set up character counter
@@ -298,6 +307,14 @@
                                mb.prepareUserinputContent( mb.ui.overlay );
                        }
                        return true;
+               },
+               
+               validate: function() {
+                       if( $( '#mw-moodBar-feedbackInput' ).val() !== "" && $( 
'.mw-moodBar-selected').length ) {
+                               mb.ui.overlay.find( 
'.mw-moodBar-formSubmit').removeAttr('disabled');
+                       } else {
+                               mb.ui.overlay.find( 
'.mw-moodBar-formSubmit').attr({'disabled':'true'});                
+                       }
                }
        } );
 

Modified: 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
===================================================================
--- 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
    2011-11-17 23:43:53 UTC (rev 103526)
+++ 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
    2011-11-17 23:49:35 UTC (rev 103527)
@@ -2,7 +2,8 @@
 
 #fbd-filters {
        position: absolute;
-       width: 12em;
+       width: 14em;
+       left:0px;
 }
 
 #fbd-filters form {
@@ -82,7 +83,7 @@
 /* List */
 
 #fbd-list {
-       margin: 0 0 0 13em;
+       margin: 0px 20px 0px 15em;
        padding: 0;
        min-height: 20em;
        list-style: none;
@@ -173,6 +174,7 @@
 .fbd-item {
        border-bottom: solid 1px silver;
        position: relative;
+       margin-bottom:1em;
 }
 
 .fbd-item-emoticon {
@@ -210,7 +212,7 @@
 }
 
 .fbd-item-userLinks {
-       font-size: 0.5em;
+       font-size: 1em;
 }
 
 .fbd-item-time {
@@ -225,7 +227,8 @@
 
 .fbd-item-permalink,
 .fbd-item-show,
-.fbd-item-hide {
+.fbd-item-hide,
+.fbd-item-reason{
        float: right;
        font-size: 0.8em;
        margin-left: 0.2em;

Modified: 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js
===================================================================
--- 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js
     2011-11-17 23:43:53 UTC (rev 103526)
+++ 
branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js
     2011-11-17 23:49:35 UTC (rev 103527)
@@ -1,7 +1,7 @@
 /**
  * AJAX code for Special:MoodBarFeedback
  */
-jQuery( function( $ ) {
+jQuery( function( $ ) {        
        /**
         * Saved form state
         */
@@ -249,6 +249,44 @@
        }
        
        /**
+        * Do this before administrative action to provide reason
+        */
+       function beforeAction(params, $item){
+               var inlineForm = '<span class="fbd-item-reason">\
+                                       $1\
+                                       <input class="fbd-action-reason" 
name="fb-action-reason" />\
+                                       <button 
class="fbd-action-confirm">Confirm</button>\
+                                       <button 
class="fbd-action-cancel">Cancel</button>\
+                                 </span>'
+                               .replace( /\$1/g, mw.msg( 
'moodbar-action-reason' ));
+                                  
+               var storedParams = params;
+               var $storedItem = $item;
+               
+               $item.find('.fbd-item-hide, .fbd-item-restore, 
.fbd-item-permalink')
+                       .empty();
+                       
+               $item.find('.fbd-item-message')
+                       .append(inlineForm)
+                       .end();
+               
+               $('.fbd-action-confirm').click( function() {
+                       storedParams.reason = 
$item.find('.fbd-action-reason').val();
+                       
+                       if( storedParams.reason ) {
+                               doAction(storedParams, $storedItem);    
+                       } else {
+                               alert( mw.msg( 'moodbar-action-reason-required' 
) );
+                       }
+                       
+               });
+               $('.fbd-action-cancel').click( function() {
+                       reloadItem( $storedItem, true );
+               });
+               
+       }
+       
+       /**
         * Execute an action on an item
         */
        function doAction( params, $item ) {
@@ -258,6 +296,9 @@
                        showItemError( $item, error_str );
                };
                
+               var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
+               $item.find('.fbd-item-hide').empty().append( $spinner );
+               
                $.post( mw.util.wikiScript('api'),
                        $.extend( {
                                'action' : 'feedbackdashboard',
@@ -287,11 +328,7 @@
        function restoreItem(e) {
                var $item = $(this).closest('.fbd-item');
                
-               var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
-               $item.find('.fbd-item-restore').empty().append( $spinner );
-               
-               doAction( { 'mbaction' : 'restore' }, $item );
-               
+               beforeAction( { 'mbaction' : 'restore' }, $item );
                e.preventDefault();
        }
        
@@ -300,12 +337,8 @@
         */
        function hideItem(e) {
                var $item = $(this).closest('.fbd-item');
-               
-               var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
-               $item.find('.fbd-item-hide').empty().append( $spinner );
-               
-               doAction( { 'mbaction' : 'hide' }, $item );
-               
+
+               beforeAction( { 'mbaction' : 'hide' }, $item );
                e.preventDefault();
        }
        
@@ -342,4 +375,5 @@
                        loadComments( 'filter' );
                }
        }
+
 } );


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

Reply via email to