http://www.mediawiki.org/wiki/Special:Code/MediaWiki/84637
Revision: 84637
Author: tparscal
Date: 2011-03-23 21:52:41 +0000 (Wed, 23 Mar 2011)
Log Message:
-----------
Fixes more issues in r84535
* User rating expiration is now based on user ratings
* When no ratings are current, the API still shows the user ratings if they
exist
* Made the user interface respond to user ratings independent of totals
Modified Paths:
--------------
trunk/extensions/ArticleFeedback/api/ApiQueryArticleFeedback.php
trunk/extensions/ArticleFeedback/modules/jquery.articleFeedback/jquery.articleFeedback.js
Modified: trunk/extensions/ArticleFeedback/api/ApiQueryArticleFeedback.php
===================================================================
--- trunk/extensions/ArticleFeedback/api/ApiQueryArticleFeedback.php
2011-03-23 21:45:32 UTC (rev 84636)
+++ trunk/extensions/ArticleFeedback/api/ApiQueryArticleFeedback.php
2011-03-23 21:52:41 UTC (rev 84637)
@@ -13,7 +13,6 @@
$this->addTables( array( 'article_feedback_pages',
'article_feedback_ratings' ) );
$this->addFields( array(
- 'aap_page_id',
'MAX(aap_revision) as aap_revision',
'SUM(aap_total) as aap_total',
'SUM(aap_count) as aap_count',
@@ -32,59 +31,74 @@
$this->addOption( 'GROUP BY', 'aap_rating_id' );
$this->addOption( 'LIMIT', count( $wgArticleFeedbackRatings ) );
+ // Rating counts and totals
$res = $this->select( __METHOD__ );
-
- if ( $params['userrating'] ) {
- $userRatings = $this->getUserRatings( $params );
- }
-
- $ratings = array();
-
- $userRatedArticle = false;
-
- $rev = null;
+ $ratings = array( $params['pageid'] => array( 'pageid' =>
$params['pageid'] ) );
foreach ( $res as $i => $row ) {
- // All the revs and pageIds will be the same for all
rows, these are shortcuts
- $pageId = $row->aap_page_id;
- // This is special however, because we need this data
later for expired calculation
- $rev = $row->aap_revision;
-
- if ( !isset( $ratings[$pageId] ) ) {
- $page = array(
- 'pageid' => $pageId,
- 'revid' => $rev,
- );
-
- if ( $params['userrating'] ) {
- if ( isset(
$userRatings[$i]['expertise'] ) ) {
- $page['expertise'] =
$userRatings[$i]['expertise'];
- }
- }
-
- $ratings[$pageId] = $page;
+ if ( !isset( $ratings[$params['pageid']] ) ) {
+ $ratings[$params['pageid']]['revid'] =
$row->aap_revision;
}
-
- $thisRow = array(
+ if ( !isset( $ratings[$params['pageid']]['ratings'] ) )
{
+ $ratings[$params['pageid']]['ratings'] =
array();
+ }
+ $ratings[$params['pageid']]['ratings'][] = array(
'ratingid' => $row->aap_rating_id,
'ratingdesc' => $row->aar_rating,
'total' => $row->aap_total,
'count' => $row->aap_count,
);
-
- if ( $params['userrating'] && isset(
$userRatings[$i]['value'] ) ) {
- $thisRow['userrating'] =
$userRatings[$i]['value'];
-
- $userRatedArticle = true;
+ }
+
+ // User ratings
+ $ratings[$params['pageid']]['status'] = 'current';
+ if ( $params['userrating'] ) {
+ $userRatings = $this->getUserRatings( $params );
+ if ( isset( $ratings[$params['pageid']]['ratings'] ) ) {
+ // Valid ratings already exist
+ foreach (
$ratings[$params['pageid']]['ratings'] as $i => $rating ) {
+ // Rating value
+
$ratings[$params['pageid']]['ratings'][$i]['userrating'] =
+
$userRatings[$rating['ratingid']]['value'];
+ // Expertise
+ if ( !isset(
$ratings[$params['pageid']]['expertise'] ) ) {
+
$ratings[$params['pageid']]['expertise'] =
+
$userRatings[$rating['ratingid']]['expertise'];
+ }
+ // Expiration
+ if (
$userRatings[$rating['ratingid']]['revision'] < $revisionLimit ) {
+
$ratings[$params['pageid']]['status'] = 'expired';
+ }
+ }
+ } else {
+ // No valid ratings exist
+ if ( count( $userRatings ) ) {
+ $ratings[$params['pageid']]['status'] =
'expired';
+ }
+ foreach ( $userRatings as $ratingId =>
$userRating ) {
+ // Revision
+ if ( !isset(
$ratings[$params['pageid']]['revid'] ) ) {
+
$ratings[$params['pageid']]['revid'] = $userRating['revision'];
+ }
+ // Ratings
+ if ( !isset(
$ratings[$params['pageid']]['ratings'] ) ) {
+
$ratings[$params['pageid']]['ratings'] = array();
+ }
+ // Rating value
+
$ratings[$params['pageid']]['ratings'][] = array(
+ 'ratingid' => $ratingId,
+ 'ratingdesc' =>
$userRating['text'],
+ 'total' => 0,
+ 'count' => 0,
+ 'userrating' =>
$userRating['value'],
+ );
+ // Expertise
+ if ( !isset(
$ratings[$params['pageid']]['expertise'] ) ) {
+
$ratings[$params['pageid']]['expertise'] = $userRating['expertise'];
+ }
+ }
}
-
- $ratings[$pageId]['ratings'][] = $thisRow;
}
- // Ratings can only be expired if the user has rated before
- if ( $params['userrating'] && $userRatedArticle ) {
- $ratings[$params['pageid']]['status'] = $rev >=
$revisionLimit ? 'current' : 'expired';
- }
-
foreach ( $ratings as $rat ) {
$result->setIndexedTagName( $rat['ratings'], 'r' );
$result->addValue( array( 'query',
$this->getModuleName() ), null, $rat );
@@ -107,11 +121,16 @@
$token = $params['anontoken'];
}
- $dbr = wfGetDb( DB_SLAVE );
- $res = $dbr->select(
- array( 'article_feedback',
'article_feedback_properties' ),
- array( 'aa_rating_id', 'aa_rating_value',
'afp_value_text' ),
+ $res = $this->getDB()->select(
+ array( 'article_feedback',
'article_feedback_properties', 'article_feedback_ratings' ),
array(
+ 'aa_rating_id',
+ 'aar_rating',
+ 'aa_revision',
+ 'aa_rating_value',
+ 'afp_value_text'
+ ),
+ array(
'aa_page_id' => $pageId,
'aa_rating_id' => $wgArticleFeedbackRatings,
'aa_user_id' => $wgUser->getId(),
@@ -121,21 +140,26 @@
'ORDER BY' => 'aa_revision DESC',
'LIMIT' => count( $wgArticleFeedbackRatings )
),
- array( 'article_feedback_properties' => array(
- 'LEFT JOIN', array(
- 'afp_revision=aa_revision',
- 'afp_user_text=aa_user_text',
-
'afp_user_anon_token=aa_user_anon_token',
- 'aa_user_anon_token' => $token,
- 'afp_key' => 'expertise',
- )
- ) )
+ array(
+ 'article_feedback_properties' => array(
+ 'LEFT JOIN', array(
+ 'afp_revision=aa_revision',
+ 'afp_user_text=aa_user_text',
+
'afp_user_anon_token=aa_user_anon_token',
+ 'aa_user_anon_token' => $token,
+ 'afp_key' => 'expertise',
+ )
+ ),
+ 'article_feedback_ratings' => array( 'LEFT
JOIN', array( 'aar_id=aa_rating_id' ) )
+ )
);
$ratings = array();
foreach ( $res as $row ) {
$ratings[$row->aa_rating_id] = array(
'value' => $row->aa_rating_value,
- 'expertise' => $row->afp_value_text
+ 'expertise' => $row->afp_value_text,
+ 'revision' => $row->aa_revision,
+ 'text' => $row->aar_rating,
);
}
return $ratings;
@@ -150,8 +174,7 @@
protected function getRevisionLimit( $pageId ) {
global $wgArticleFeedbackRatingLifetime;
- $dbr = wfGetDb( DB_SLAVE );
- $revision = $dbr->selectField(
+ $revision = $this->getDB()->selectField(
'revision',
'rev_id',
array( 'rev_page' => $pageId ),
Modified:
trunk/extensions/ArticleFeedback/modules/jquery.articleFeedback/jquery.articleFeedback.js
===================================================================
---
trunk/extensions/ArticleFeedback/modules/jquery.articleFeedback/jquery.articleFeedback.js
2011-03-23 21:45:32 UTC (rev 84636)
+++
trunk/extensions/ArticleFeedback/modules/jquery.articleFeedback/jquery.articleFeedback.js
2011-03-23 21:52:41 UTC (rev 84637)
@@ -247,6 +247,7 @@
}
}
}
+ // Report
if ( typeof ratingData ===
'undefined' || ratingData.total == 0 ) {
// Setup in "no
ratings" mode
$(this)
@@ -258,9 +259,7 @@
.end()
.find(
'.articleFeedback-rating-count' )
.text(
mw.msg( 'articlefeedback-report-empty' ) )
- .end()
- .find( 'input' )
- .attr(
'checked', false );
+ .end();
} else {
// Setup using
ratingData
var average =
ratingData.total / ratingData.count;
@@ -276,11 +275,24 @@
.text(
mw.msg(
'articlefeedback-report-ratings', ratingData.count
) )
- .end()
- .find(
'input[value="' + ratingData.userrating + '"]' )
+ .end();
+ }
+ // Form
+ if ( typeof
ratingData.userrating !== 'undefined' ) {
+ if (
ratingData.userrating === 0 ) {
+ $(this)
+ .find(
'input' )
+ .attr(
'checked', false );
+ } else {
+ $(this)
+ .find(
'input[value="' + ratingData.userrating + '"]' )
.attr(
'checked', true );
- // If any ratings
exist, make sure expertise is enabled so users can suppliment their ratings.
-
$.articleFeedback.fn.enableExpertise( context.$ui.find(
'.articleFeedback-expertise' ) );
+ }
+ // If any ratings
exist, make sure expertise is enabled so users can
+ // suppliment their
ratings.
+
$.articleFeedback.fn.enableExpertise(
+
context.$ui.find( '.articleFeedback-expertise' )
+ );
}
$.articleFeedback.fn.updateRating.call( $(this) );
} );
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs