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