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

Revision: 114873
Author:   bsitu
Date:     2012-04-12 23:12:47 +0000 (Thu, 12 Apr 2012)
Log Message:
-----------
Add support of metadata update upon user being blocked

Modified Paths:
--------------
    trunk/extensions/PageTriage/PageTriage.hooks.php
    trunk/extensions/PageTriage/PageTriage.php
    trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php
    trunk/extensions/PageTriage/includes/ArticleMetadata.php
    trunk/extensions/PageTriage/includes/PageTriageUtil.php

Modified: trunk/extensions/PageTriage/PageTriage.hooks.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-12 21:38:55 UTC 
(rev 114872)
+++ trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-12 23:12:47 UTC 
(rev 114873)
@@ -233,4 +233,16 @@
                $out->addModules( 'ext.pageTriage.startup' );
                return true;
        }
+       
+       /**
+        * Update Article metadata when a user gets blocked 
+        *
+        * 'BlockIpComplete': after an IP address or user is blocked
+        * $block: the Block object that was saved
+        * $performer: the user who did the block (not the one being blocked)
+        */
+       public static function onBlockIpComplete( $block, $performer ) {
+               PageTriageUtil::updateMetadataOnBlockChange( $block );
+               return true;
+       }
 }
\ No newline at end of file

Modified: trunk/extensions/PageTriage/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.php  2012-04-12 21:38:55 UTC (rev 
114872)
+++ trunk/extensions/PageTriage/PageTriage.php  2012-04-12 23:12:47 UTC (rev 
114873)
@@ -101,6 +101,7 @@
 $wgHooks['ArticleDeleteComplete'][] = 
'PageTriageHooks::onArticleDeleteComplete';
 $wgHooks['MarkPatrolledComplete'][] = 
'PageTriageHooks::onMarkPatrolledComplete';
 $wgHooks['BeforePageDisplay'][] = 'PageTriageHooks::beforePageDisplay';
+$wgHooks['BlockIpComplete'][] = 'PageTriageHooks::onBlockIpComplete';
 
 $wgPageTriageMarkPatrolledLinkExpiry = 3600 * 24 * 30; // 30 days
 

Modified: trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-12 21:38:55 UTC (rev 114872)
+++ trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-12 23:12:47 UTC (rev 114873)
@@ -18,14 +18,6 @@
                $this->getResult()->addValue( null, $this->getModuleName(), 
$result );
        }
 
-       public function needsToken() {
-               return true;
-       }
-
-       public function getTokenSalt() {
-               return '';
-       }
-
        public function getAllowedParams() {
                return array(
                        'page_id' => array(
@@ -36,14 +28,6 @@
                );
        }
 
-       public function mustBePosted() {
-               return true;
-       }
-
-       public function isWriteMode() {
-               return true;
-       }
-
        public function getVersion() {
                return __CLASS__ . ': $Id: ApiPageTriageGetMetadata.php $';
        }

Modified: trunk/extensions/PageTriage/includes/ArticleMetadata.php
===================================================================
--- trunk/extensions/PageTriage/includes/ArticleMetadata.php    2012-04-12 
21:38:55 UTC (rev 114872)
+++ trunk/extensions/PageTriage/includes/ArticleMetadata.php    2012-04-12 
23:12:47 UTC (rev 114873)
@@ -62,7 +62,32 @@
 
                return true;
        }
+       
+       /**
+        * Update the metadata in cache
+        * @param $update array - key => value pair for update
+        * @param $pageId int
+        */
+       public function updateMetadataInCache( $update, $pageId = null ) {
+               global $wgMemc;
 
+               $keyPrefix = $this->memcKeyPrefix();
+
+               if ( $pageId ) {
+                       $pageId = array( $pageId );
+               } else {
+                       $pageId = $this->mPageId;
+               }
+               
+               foreach ( $pageId as $val ) {
+                       $data =  $wgMemc->get( $keyPrefix . '-' . $val );
+                       if ( $data !== false ) {
+                               $wgMemc->replace( $keyPrefix . '-' . $val, 
array_merge( $data, $update ), 86400 );
+                       }
+               }
+               
+       }
+
        /**
         * Flush the metadata in cache
         * @param $pageId - page id to be flushed, if null is provided, all
@@ -236,7 +261,7 @@
                                unset( $pageIds[$key] );
                        }
                }
-               
+
                if ( $pageIds ) {
                        $dbr = wfGetDB( DB_SLAVE );
 
@@ -252,7 +277,7 @@
                                $cache[$row->ptrp_page_id] = true;
                        }
                }
-               
+
                return $cleanUp;
        }
 

Modified: trunk/extensions/PageTriage/includes/PageTriageUtil.php
===================================================================
--- trunk/extensions/PageTriage/includes/PageTriageUtil.php     2012-04-12 
21:38:55 UTC (rev 114872)
+++ trunk/extensions/PageTriage/includes/PageTriageUtil.php     2012-04-12 
23:12:47 UTC (rev 114873)
@@ -283,6 +283,47 @@
                return $return;
        }
 
+       /**
+        * Update user metadata when a user's block status is updated
+        * @param $block Block - Block object
+        * @param $status int 1/0
+        */
+       public static function updateMetadataOnBlockChange( $block, $status = 1 
) {
+               // do instant update if the number of page to be updated is 
less or equal to
+               // the number below, otherwise, delay this to the cron
+               $maxNumToProcess = 500;
+
+               $tags = ArticleMetadata::getValidTags();
+
+               $dbr = wfGetDB( DB_SLAVE );
+
+               $res = $dbr->select(
+                       array( 'pagetriage_page_tags' ),
+                       array( 'ptrpt_page_id' ),
+                       array( 'ptrpt_tag_id' => $tags['user_name'], 
'ptrpt_value' => (string)$block->getTarget() ),
+                       __METHOD__,
+                       array( 'LIMIT' => $maxNumToProcess + 1 )
+               );
+
+               if ( $dbr->numRows( $res ) > $maxNumToProcess ) {
+                       return;
+               }
+
+               $pageIds = array();
+               foreach ( $res as $row ) {
+                       $pageIds[] = $row->ptrpt_page_id;
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->update(  
+                       'pagetriage_page_tags',
+                       array( 'ptrpt_value' => $status ),
+                       array( 'ptrpt_page_id' => $pageIds, 'ptrpt_tag_id' => 
$tags['user_block_status'] )
+               );
+
+               $metadata = new ArticleMetadata( $pageIds );
+               $metadata->updateMetadataInCache( array( 'user_block_status' => 
$status ) );
+       }
 }
 
 class MWPageTriageUtilInvalidNumberException extends MWException {}
\ No newline at end of file


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

Reply via email to