https://www.mediawiki.org/wiki/Special:Code/MediaWiki/108297
Revision: 108297
Author: bsitu
Date: 2012-01-07 00:56:39 +0000 (Sat, 07 Jan 2012)
Log Message:
-----------
Adding top responders leaderboard to feedback dashboard page
Modified Paths:
--------------
trunk/extensions/MoodBar/MoodBar.i18n.php
trunk/extensions/MoodBar/SpecialFeedbackDashboard.php
trunk/extensions/MoodBar/include/MoodBarUtil.php
Modified: trunk/extensions/MoodBar/MoodBar.i18n.php
===================================================================
--- trunk/extensions/MoodBar/MoodBar.i18n.php 2012-01-07 00:48:27 UTC (rev
108296)
+++ trunk/extensions/MoodBar/MoodBar.i18n.php 2012-01-07 00:56:39 UTC (rev
108297)
@@ -141,6 +141,7 @@
'moodbar-feedback-action-error' => 'An error occurred when trying to
perform this action.',
'moodbar-feedback-response-summary' => '[[$1|$2]] [[$3|responded]] $4
ago',
'moodbar-feedback-edit-summary' => 'Response to
[[Special:FeedbackDashboard/$1|user feedback]]: $2',
+ 'moodbar-feedback-top-responders-title' => 'Top Responders',
// Mood types
'moodbar-type-happy' => '{{GENDER:$1|Happy}}',
'moodbar-type-sad' => '{{GENDER:$1|Sad}}',
@@ -310,6 +311,7 @@
'moodbar-action-reason-required' => 'Text explaining admin action
reason is required',
'moodbar-feedback-response-summary' => 'Text providing a summary of a
user response, $1 is user page, $2 is user name, $3 is user talk page, $4 is
time',
'moodbar-feedback-edit-summary' => 'Auto generated Edit summary for
feedback response, $1 is the feedback id and $2 is the response text',
+ 'moodbar-feedback-top-responders-title' => 'The title for Top
Responders, which is located below feedback dashboard filter',
'moodbar-type-happy' => '$1 is the username that can be used for
GENDER. Message is used on Special:FeedbackDashboard.',
'moodbar-type-sad' => '$1 is the username that can be used for GENDER.
Message is used on Special:FeedbackDashboard.',
'moodbar-type-confused' => '$1 is the username that can be used for
GENDER. Message is used on Special:FeedbackDashboard.',
Modified: trunk/extensions/MoodBar/SpecialFeedbackDashboard.php
===================================================================
--- trunk/extensions/MoodBar/SpecialFeedbackDashboard.php 2012-01-07
00:48:27 UTC (rev 108296)
+++ trunk/extensions/MoodBar/SpecialFeedbackDashboard.php 2012-01-07
00:56:39 UTC (rev 108297)
@@ -70,43 +70,6 @@
}
/**
- * Get the stats for the moodbar type in the last 24 hours
- * @return array - count of number for each moodbar type
- */
- public function getMoodBarTypeStats( ) {
-
- global $wgMemc;
-
- $timestamp = wfTimestamp( TS_UNIX ) - 24 * 60 * 60; // 24 hours
ago
-
- // Try cache first
- $key = wfMemcKey( 'moodbar_feedback', 'type_stats', 'last_day'
);
- $moodbarStat = $wgMemc->get( $key );
-
- if ( $moodbarStat === false ) {
- $dbr = wfGetDB( DB_SLAVE );
- $res = $dbr->select( array( 'moodbar_feedback' ),
- array( 'mbf_type', 'COUNT(*) AS
number' ),
- array( 'mbf_hidden_state' => 0,
'mbf_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
- __METHOD__,
- array( 'GROUP BY' => 'mbf_type'
)
- );
-
- $moodbarStat = array( 'happy' => 0, 'sad' => 0,
'confused' => 0 );
-
- foreach ( $res as $row ) {
- $moodbarStat[$row->mbf_type] = $row->number;
- }
-
- // Cache the results in cache for 1 hour
- $wgMemc->set( $key, $moodbarStat, 60 * 60 );
- }
-
- return $moodbarStat;
-
- }
-
- /**
* Build the filter form. The state of each form element is preserved
* using data in $wgRequest.
* @param $filterType string Value to pass in the <form>'s
data-filtertype attribute
@@ -137,7 +100,7 @@
$filterType = htmlspecialchars( $filterType );
- $moodbarStat = $this->getMoodBarTypeStats();
+ $moodbarStat = MoodBarUtil::getMoodBarTypeStats();
$moodbarStatMsg = wfMessage( 'moodbar-type-stats' )->params(
$moodbarStat['happy'], $moodbarStat['sad'], $moodbarStat['confused']
)->escaped();
$feedbackDashboardDescription = wfMessage(
'moodbar-feedback-description' )->params( $wgSitename ); // don't escape
because there is html
@@ -159,7 +122,9 @@
$showUnansweredFilter = '<label
for="fbd-filters-show-unanswered" id="fbd-filters-type-show-unanswered-label"
class="fbd-filters-label">' .
$showUnansweredCheckbox . $showUnansweredMsg . '</label>';
-
+
+ $leaderBoardElement = self::buildLeaderBoardElement();
+
return <<<HTML
<div id="fbd-description">
<div id="fbd-description-text">
@@ -196,6 +161,7 @@
<button type="submit"
id="fbd-filters-set">$setFiltersMsg</button>
</form>
<a href="$whatIsURL" id="fbd-about">$whatIsMsg</a>
+ $leaderBoardElement
</div>
HTML;
}
@@ -296,6 +262,44 @@
HTML;
}
+ /**
+ * Build the HTML for leaderboard
+ * @return html string
+ */
+ protected static function buildLeaderBoardElement() {
+
+ $topResponders = MoodBarUtil::getTopResponders();
+
+ $html = '';
+
+ if ( $topResponders ) {
+ foreach ( $topResponders as $row ) {
+ $user = User::newFromRow( $row );
+ if ( $user && !$user->isAnon() ) {
+ $html .= '<li>' . Linker::userLink(
$user->getId(), htmlspecialchars( $user->getName() ) ) .
+ '<span>' . $row->number
. '</span></li>';
+ }
+ }
+ }
+
+ if ( $html ) {
+ $topRespondersTitle = wfMessage(
'moodbar-feedback-top-responders-title' )->escaped();
+
+ return <<<HTML
+ <div class="fbd-leaderboard-top-responders">
+ $topRespondersTitle
+ <hr />
+ <ul class="fbd-leaderboard">
+ $html
+ </ul>
+ </div>
+HTML;
+ }
+
+ return $html;
+
+ }
+
protected static function buildResponseElement( $feedbackItem,
$response ) {
global $wgLang, $wgUser;
Modified: trunk/extensions/MoodBar/include/MoodBarUtil.php
===================================================================
--- trunk/extensions/MoodBar/include/MoodBarUtil.php 2012-01-07 00:48:27 UTC
(rev 108296)
+++ trunk/extensions/MoodBar/include/MoodBarUtil.php 2012-01-07 00:56:39 UTC
(rev 108297)
@@ -65,5 +65,76 @@
}
}
+
+ /**
+ * Get the top responders for feedback in past week, default is top 5
+ * @param $num int - the number of top responders we want to get
+ * @return array
+ */
+ public static function getTopResponders( $num = 5 ) {
+
+ global $wgMemc;
+ $timestamp = wfTimestamp( TS_UNIX ) - 7 * 24 * 60 * 60; // 1
week ago
+
+ // Try cache first
+ $key = wfMemcKey( 'moodbar_feedback_response',
'top_responders', 'past_week' );
+ $topResponders = $wgMemc->get( $key );
+
+ if ( $topResponders === false ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( array(
'moodbar_feedback_response', 'user' ),
+ array( 'COUNT(*) AS
number', 'user_id', 'user_name', 'user_real_name' ),
+ array( 'mbfr_user_id =
user_id', 'mbfr_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $timestamp )
) ),
+ __METHOD__,
+ array( 'GROUP BY' =>
'user_id', 'ORDER BY' => 'number DESC', 'LIMIT' => $num )
+ );
+
+ $topResponders = iterator_to_array( $res );
+
+ // Cache the results in cache for 12 hour
+ $wgMemc->set( $key, $topResponders, 12 * 60 * 60 );
+ }
+
+ return $topResponders;
+
+ }
+
+ /**
+ * Get the stats for the moodbar type in the last 24 hours
+ * @return array - count of number for each moodbar type
+ */
+ public function getMoodBarTypeStats() {
+
+ global $wgMemc;
+
+ $timestamp = wfTimestamp( TS_UNIX ) - 24 * 60 * 60; // 24 hours
ago
+
+ // Try cache first
+ $key = wfMemcKey( 'moodbar_feedback', 'type_stats', 'last_day'
);
+ $moodbarStat = $wgMemc->get( $key );
+
+ if ( $moodbarStat === false ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( array( 'moodbar_feedback' ),
+ array( 'mbf_type', 'COUNT(*) AS
number' ),
+ array( 'mbf_hidden_state' => 0,
'mbf_timestamp > ' . $dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
+ __METHOD__,
+ array( 'GROUP BY' => 'mbf_type'
)
+ );
+
+ $moodbarStat = array( 'happy' => 0, 'sad' => 0,
'confused' => 0 );
+
+ foreach ( $res as $row ) {
+ $moodbarStat[$row->mbf_type] = $row->number;
+ }
+
+ // Cache the results in cache for 1 hour
+ $wgMemc->set( $key, $moodbarStat, 60 * 60 );
+ }
+
+ return $moodbarStat;
+
+ }
+
}
\ No newline at end of file
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs