https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114692
Revision: 114692
Author: bsitu
Date: 2012-04-04 01:03:18 +0000 (Wed, 04 Apr 2012)
Log Message:
-----------
add redlink status to user page and user talk page
Modified Paths:
--------------
trunk/extensions/PageTriage/PageTriage.i18n.php
trunk/extensions/PageTriage/SpecialPageTriage.php
trunk/extensions/PageTriage/api/ApiPageTriageList.php
trunk/extensions/PageTriage/api/ApiPageTriageStats.php
trunk/extensions/PageTriage/includes/PageTriageUtil.php
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.stats.js
Modified: trunk/extensions/PageTriage/PageTriage.i18n.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.i18n.php 2012-04-04 00:52:29 UTC
(rev 114691)
+++ trunk/extensions/PageTriage/PageTriage.i18n.php 2012-04-04 01:03:18 UTC
(rev 114692)
@@ -52,7 +52,7 @@
'pagetriage-filter-set-button' => 'Set Filters',
'pagetriage-stats-untriaged-age' => 'Article Ages: Average: $1, Oldest:
$2',
'pagetriage-stats-less-than-a-day' => 'less than one day',
- 'pagetriage-stats-top-triagers' => 'Top {{PLURAL:$1|triager|$1
triagers}}: $2',
+ 'pagetriage-stats-top-triagers' => 'Top {{PLURAL:$1|triager|$1
triagers}}: ',
'pagetriage-filter-ns-article' => 'Article',
'pagetriage-filter-ns-all' => 'All',
'pagetriage-more' => 'More',
Modified: trunk/extensions/PageTriage/SpecialPageTriage.php
===================================================================
--- trunk/extensions/PageTriage/SpecialPageTriage.php 2012-04-04 00:52:29 UTC
(rev 114691)
+++ trunk/extensions/PageTriage/SpecialPageTriage.php 2012-04-04 01:03:18 UTC
(rev 114692)
@@ -26,6 +26,9 @@
public function execute( $sub ) {
$out = $this->getOutput();
+//$data = array( array( 'user_name' => 'Bsitu'), array( 'user_name' => 'Test1'
) );
+//print_r( PageTriageUtil::pageStatusForUser( $data ));
+//die;
// TODO: check user permissions, make sure they're logged in
and have the pagepatrol userright
global $wgUser;
@@ -124,9 +127,9 @@
<div
class="mwe-pt-author">
<% if( typeof(
user_name ) != 'undefined' ) { %>
<%= gM(
'pagetriage-byline' ) %>
- <a href="<%=
user_title.getUrl() %>"><%= user_name %></a>
+ <a <%=
userPageLinkClass %> href="<%= user_title.getUrl() %>"><%= user_name %></a>
<span
class="mwe-pt-talk-contribs">
- (<a
href="<%= user_talk_title.getUrl() %>">talk</a>
+ (<a <%=
talkPageLinkClass %> href="<%= user_talk_title.getUrl()+'&redlink=1'
%>">talk</a>
·
<a
href="<%= user_contribs_title.getUrl() %>">contribs</a>)
</span>
@@ -245,7 +248,21 @@
<!-- bottom nav template -->
<script type="text/template"
id="listStatsNavTemplate">
<div id="mwe-pt-top-triager">
- <%= ptrTopTriager %>
+ <%
+ if ( toptriager.total ) {
+ %>
+ <%= ptrTopTriagerStr %>
+ <%
+ for ( var m in
ptrTopTriager ) {
+ %>
+ <!--
Todo: escape user name -->
+ <a <%=
ptrTopTriager[m].linkCSS %> href="<%= ptrTopTriager[m].title.getUrl() %>"><%=
ptrTopTriager[m].userName %></a>
+ <%
+ }
+ %>
+ <%
+ }
+ %>
</div>
<div id="mwe-pt-article-age-stats">
<% if ( ptrAverage ) { %> <%=
gM( 'pagetriage-stats-untriaged-age', ptrAverage, ptrOldest ) %> <% } %>
Modified: trunk/extensions/PageTriage/api/ApiPageTriageList.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageList.php 2012-04-04
00:52:29 UTC (rev 114691)
+++ trunk/extensions/PageTriage/api/ApiPageTriageList.php 2012-04-04
01:03:18 UTC (rev 114692)
@@ -28,7 +28,7 @@
}
// Output the results
- $result = array( 'result' => 'success', 'pages' =>
$metaDataSend );
+ $result = array( 'result' => 'success', 'pages' =>
$metaDataSend, 'userpagestatus' => PageTriageUtil::pageStatusForUser(
$metaDataSend ) );
$this->getResult()->addValue( null, $this->getModuleName(),
$result );
}
Modified: trunk/extensions/PageTriage/api/ApiPageTriageStats.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageStats.php 2012-04-04
00:52:29 UTC (rev 114691)
+++ trunk/extensions/PageTriage/api/ApiPageTriageStats.php 2012-04-04
01:03:18 UTC (rev 114692)
@@ -14,7 +14,8 @@
'toptriager' => array(
'total' => count( $topTriager ),
'data' => $topTriager
- )
+ ),
+ 'userpagestatus' =>
PageTriageUtil::pageStatusForUser( $topTriager )
);
$result = array( 'result' => 'success', 'stats' => $data );
Modified: trunk/extensions/PageTriage/includes/PageTriageUtil.php
===================================================================
--- trunk/extensions/PageTriage/includes/PageTriageUtil.php 2012-04-04
00:52:29 UTC (rev 114691)
+++ trunk/extensions/PageTriage/includes/PageTriageUtil.php 2012-04-04
01:03:18 UTC (rev 114692)
@@ -212,7 +212,77 @@
return false;
}
}
+
+ /**
+ * Check the existance of user page and talk page for a list of users
+ * @param $users array - contains user_name db keys
+ * @return array
+ */
+ public static function pageStatusForUser( $users ) {
+ global $wgMemc;
+ $return = array();
+ $title = array();
+ $dataToCache = array();
+
+ foreach ( $users as $user ) {
+ $user = (array) $user;
+ $key = wfMemcKey( 'pagetriage', 'user-page-status',
$user['user_name']);
+ $data = $wgMemc->get( $key );
+ if ( $data !== false ) {
+ foreach ( $data as $pageKey => $status ) {
+ if ( $status === 1 ) {
+ $return[$pageKey] = $status;
+ }
+ }
+ } else {
+ $u = Title::newFromText( $user['user_name'],
NS_USER );
+ if ( $u ) {
+ $t = Title::makeTitle( NS_USER_TALK,
$u->getDBkey() );
+ $title[$u->getDBkey()] = array(
'user_name' => $user['user_name'], 'u' => $u, 't' => $t );
+ }
+ }
+ }
+
+ if ( $title ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select(
+ array( 'page' ),
+ array( 'page_namespace', 'page_title' ),
+ array( 'page_title' => array_keys( $title ),
'page_namespace' => array( NS_USER, NS_USER_TALK ) ),
+ __METHOD__
+ );
+
+ $dataToCache = array();
+ foreach ( $res as $row ) {
+ $user = $title[$row->page_title];
+ if ( $row->page_namespace == NS_USER ) {
+
$dataToCache[$user['user_name']][$user['u']->getPrefixedDBkey()] = 1;
+ } else {
+
$dataToCache[$user['user_name']][$user['t']->getPrefixedDBkey()] = 1;
+ }
+ }
+
+ foreach ( $title as $key => $value ) {
+ $data = array();
+ if ( !isset(
$dataToCache[$value['user_name']][$value['u']->getPrefixedDBkey()] ) ) {
+
$dataToCache[$value['user_name']][$value['u']->getPrefixedDBkey()] = 0;
+ } else {
+
$return[$value['u']->getPrefixedDBkey()] = 1;
+ }
+ if ( !isset(
$dataToCache[$value['user_name']][$value['t']->getPrefixedDBkey()] ) ) {
+
$dataToCache[$value['user_name']][$value['t']->getPrefixedDBkey()] = 0;
+ } else {
+
$return[$value['t']->getPrefixedDBkey()] = 1;
+ }
+ $memcKey = wfMemcKey( 'pagetriage',
'user-page-status', $value['user_name'] );
+ $wgMemc->set( $memcKey,
$dataToCache[$value['user_name']], 3600 );
+ }
+ }
+
+ return $return;
+ }
+
}
class MWPageTriageUtilInvalidNumberException extends MWException {}
Modified:
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
===================================================================
---
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
2012-04-04 00:52:29 UTC (rev 114691)
+++
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.article.js
2012-04-04 01:03:18 UTC (rev 114692)
@@ -30,6 +30,9 @@
article.set( 'user_title', new
mw.Title( userName, mw.config.get('wgNamespaceIds')['user'] ) );
article.set( 'user_talk_title', new
mw.Title( userName, mw.config.get('wgNamespaceIds')['user_talk'] ) );
article.set( 'user_contribs_title', new
mw.Title( gM( 'pagetriage-special-contributions' ) + '/' + userName ) );
+ article.set( 'userPageLinkClass',
article.get( 'user_title' ).exists() ? '' : 'class="new"' );
+ article.set( 'talkPageLinkClass',
article.get( 'user_talk_title' ).exists() ? '' : 'class="new"' );
+
}
article.set( 'title_url',
mw.util.wikiUrlencode( article.get( 'title' ) ) );
}
@@ -75,6 +78,9 @@
},
parse: function( response ) {
+ for ( var title in
response.pagetriagelist.userpagestatus ) {
+ mw.Title.exist.set( title );
+ }
// extract the useful bits of json.
return response.pagetriagelist.pages;
},
Modified:
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.stats.js
===================================================================
---
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.stats.js
2012-04-04 00:52:29 UTC (rev 114691)
+++
trunk/extensions/PageTriage/modules/ext.pageTriage.models/ext.pageTriage.stats.js
2012-04-04 01:03:18 UTC (rev 114692)
@@ -15,7 +15,19 @@
formatMetadata: function ( stats ) {
stats.set( 'ptr_untriaged_article_count', stats.get(
'untriagedarticle' )['count'] );
- stats.set( 'ptrTopTriager', this.formatTopTriager(
stats.get( 'toptriager' ) ) );
+
+ var topTriager = {};
+ for ( var i in stats.get( 'toptriager' )['data'] ) {
+ var title = new mw.Title( stats.get(
'toptriager' )['data'][i]['user_name'], mw.config.get('wgNamespaceIds')['user']
);
+ topTriager[i] = {
+ title: title,
+ linkCSS: mw.Title.exists( title) ? '' :
'class="new"',
+ userName: stats.get( 'toptriager'
)['data'][i]['user_name']
+ };
+ }
+
+ stats.set( 'ptrTopTriager', topTriager );
+ stats.set( 'ptrTopTriagerStr', gM(
'pagetriage-stats-top-triagers', Number( stats.get( 'toptriager' ).total ) ) );
stats.set( 'ptrAverage', this.formatDaysFromNow(
stats.get( 'untriagedarticle' )['age-50th-percentile'] ) );
stats.set( 'ptrOldest', this.formatDaysFromNow(
stats.get( 'untriagedarticle' )['age-100th-percentile'] ) );
},
@@ -67,6 +79,9 @@
url: mw.util.wikiScript( 'api' ) +
'?action=pagetriagestats&format=json',
parse: function( response ) {
+ for ( var title in response.userpagestatus ) {
+ mw.Title.exist.set( title );
+ }
// extract the useful bits of json.
return response.pagetriagestats.stats;
}
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs