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>
                                                                        &#xb7;
                                                                        <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

Reply via email to