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

Revision: 114861
Author:   bsitu
Date:     2012-04-12 00:55:03 +0000 (Thu, 12 Apr 2012)
Log Message:
-----------
Add page triage page id validation

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

Modified: trunk/extensions/PageTriage/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.php  2012-04-12 00:32:44 UTC (rev 
114860)
+++ trunk/extensions/PageTriage/PageTriage.php  2012-04-12 00:55:03 UTC (rev 
114861)
@@ -80,7 +80,6 @@
 $wgAutoloadClasses['ApiPageTriageAction'] = $dir . 
'api/ApiPageTriageAction.php';
 
 // custom exceptions
-$wgAutoloadClasses['MWArticleMetadataMissingPageIdException'] = $dir . 
'includes/ArticleMetadata.php';
 $wgAutoloadClasses['MWPageTriageUtilInvalidNumberException'] = $dir . 
'includes/PageTriageUtil.php';
 $wgAutoloadClasses['MWPageTriageMissingRevisionException'] = $dir . 
'includes/PageTriage.php';
 

Modified: trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-12 00:32:44 UTC (rev 114860)
+++ trunk/extensions/PageTriage/api/ApiPageTriageGetMetadata.php        
2012-04-12 00:55:03 UTC (rev 114861)
@@ -11,7 +11,7 @@
                        $this->dieUsage( 'Too many pages in the request', 
'exceed-page-limit' );
                }
 
-               $articleMetadata = new ArticleMetadata( $params['page_id'] );
+               $articleMetadata = new ArticleMetadata( $params['page_id'], 
false );
                $metaData = $articleMetadata->getMetadata();
 
                $result = array( 'result' => 'success', 'page' => $metaData );

Modified: trunk/extensions/PageTriage/includes/ArticleMetadata.php
===================================================================
--- trunk/extensions/PageTriage/includes/ArticleMetadata.php    2012-04-12 
00:32:44 UTC (rev 114860)
+++ trunk/extensions/PageTriage/includes/ArticleMetadata.php    2012-04-12 
00:55:03 UTC (rev 114861)
@@ -9,15 +9,14 @@
 
        /**
         * @param $pageId array - list of page id
+        * @param $validated bool - whether the page ids are validated
         */
-       public function __construct( array $pageId ) {
-               $pageId = self::validatePageId( $pageId );
-
-               if ( !$pageId ) {
-                       throw new MWArticleMetadataMissingPageIdException( 
'Missing page id' );
+       public function __construct( array $pageId, $validated = true ) {
+               if ( $validated ) {
+                       $this->mPageId = $pageId;       
+               } else {
+                       $this->mPageId = self::validatePageId( $pageId );
                }
-
-               $this->mPageId = $pageId;
        }
 
        /**
@@ -26,39 +25,41 @@
         * @param $pageId - the page id to be deleted
         */
        public function deleteMetadata( $pageId = null ) {
-               if( is_null($pageId) ) {
+               if ( is_null( $pageId ) ) {
                        $pageId = $this->mPageId;
                }
 
-               // $pageId can be an array or a single value.
-               $dbw  = wfGetDB( DB_MASTER );
+               if ( $pageId ) {
+                       // $pageId can be an array or a single value.
+                       $dbw  = wfGetDB( DB_MASTER );
+       
+                       $dbw->begin();
+                       $dbw->delete(
+                               'pagetriage_page_tags',
+                               array( 'ptrpt_page_id' => $pageId ),
+                               __METHOD__,
+                               array()
+                       );
+       
+                       $dbw->delete(
+                               'pagetriage_page',
+                               array( 'ptrp_page_id' => $pageId ),
+                               __METHOD__,
+                               array()
+                       );
+       
+                       $dbw->delete(
+                               'pagetriage_log',
+                               array( 'ptrl_page_id' => $pageId ),
+                               __METHOD__,
+                               array()
+                       );
+       
+                       // also remove it from the cache
+                       $this->flushMetadataFromCache( $pageId );
+                       $dbw->commit();
+               }
 
-               $dbw->begin();
-               $dbw->delete(
-                       'pagetriage_page_tags',
-                       array( 'ptrpt_page_id' => $pageId ),
-                       __METHOD__,
-                       array()
-               );
-
-               $dbw->delete(
-                       'pagetriage_page',
-                       array( 'ptrp_page_id' => $pageId ),
-                       __METHOD__,
-                       array()
-               );
-
-               $dbw->delete(
-                       'pagetriage_log',
-                       array( 'ptrl_page_id' => $pageId ),
-                       __METHOD__,
-                       array()
-               );
-
-               // also remove it from the cache
-               $this->flushMetadataFromCache( $pageId );
-               $dbw->commit();
-
                return true;
        }
 
@@ -200,7 +201,7 @@
                                array( 'ptrt_tag_id', 'ptrt_tag_name' ),
                                array( ),
                                __METHOD__
-                       );
+               );
 
                foreach ( $res as $row ) {
                        $tags[$row->ptrt_tag_name] = $row->ptrt_tag_id;
@@ -210,25 +211,53 @@
        }
 
        /**
-        * Typecast the value in page id array to int
+        * Typecast the value in page id array to int and verify that it's
+        * in page triage queue
         * @param $pageIds array
         * @return array
         */
        public static function validatePageId( array $pageIds ) {
+               static $cache = array();
+
                $cleanUp = array();
-               foreach ( $pageIds as $val ) {
+               foreach ( $pageIds as $key => $val ) {
                        $casted = intval( $val );
                        if ( $casted ) {
-                               $cleanUp[] = $casted;
+                               if ( isset( $cache[$casted] ) ) {
+                                       if ( $cache[$casted] ) {
+                                               $cleanUp[] = $casted;
+                                       }
+                                       unset( $pageIds[$key] );
+                               } else {
+                                       $pageIds[$key] = $casted;
+                                       $cahce[$casted] = false;
+                               }
+                       } else {
+                               unset( $pageIds[$key] );
                        }
                }
+               
+               if ( $pageIds ) {
+                       $dbr = wfGetDB( DB_SLAVE );
+
+                       $res = $dbr->select(
+                                       array( 'pagetriage_page' ),
+                                       array( 'ptrp_page_id' ),
+                                       array( 'ptrp_page_id' => $pageIds ),
+                                       __METHOD__
+                       );
+
+                       foreach ( $res as $row ) {
+                               $cleanUp[] = $row->ptrp_page_id;
+                               $cache[$row->ptrp_page_id] = true;
+                       }
+               }
+               
                return $cleanUp;
        }
 
 }
 
-class MWArticleMetadataMissingPageIdException extends MWException {}
-
 /**
  * Compiling metadata for articles
  */
@@ -242,7 +271,7 @@
        /**
         * @param $pageId array - list of page id
         */
-       private function __construct( array $pageId ) {
+       private function __construct( $pageId ) {
                $this->mPageId = $pageId;
 
                $this->component = array(
@@ -260,11 +289,13 @@
        /**
         * Factory for creating an instance
         * @param $pageId array
+        * @param $validated bool - whether page ids are validated
         * @return ArticleCompileProcessor|false
         */
-       public static function newFromPageId( $pageId = array() ) {
-               $pageId = ArticleMetadata::validatePageId( $pageId );
-
+       public static function newFromPageId( array $pageId, $validated = true 
) {
+               if ( !$validated ) {
+                       $pageId = ArticleMetadata::validatePageId( $pageId );
+               }
                if ( $pageId ) {
                        return new ArticleCompileProcessor( $pageId );
                } else {

Modified: trunk/extensions/PageTriage/includes/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/includes/PageTriage.php 2012-04-12 00:32:44 UTC 
(rev 114860)
+++ trunk/extensions/PageTriage/includes/PageTriage.php 2012-04-12 00:55:03 UTC 
(rev 114861)
@@ -9,7 +9,6 @@
        protected $mDeleted;
 
        // additional property
-       protected $mMetadata;
        protected $mLoaded;
 
        /**
@@ -157,28 +156,7 @@
                return true;
        }
 
-       public function retrieveTriageLog() {
-               // get the triage log   
-       }
-
-       public function loadMetadata() {
-               $metaData = new ArticleMetadata( array( $this->mPageId ) );
-               $this->mMetadata = $metaData->getMetadata();    
-       }
-
        /**
-        * Get the metadata for this page
-        * @return array
-        */
-       public function getMetadata() {
-               if ( is_null( $this->mMetadata ) ) {
-                       $this->loadMetadata();
-               }
-
-               return $this->mMetadata;
-       }
-
-       /**
         * Log the user triage action
         * @param $user User
         */


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

Reply via email to