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

Revision: 114722
Author:   bsitu
Date:     2012-04-04 23:31:46 +0000 (Wed, 04 Apr 2012)
Log Message:
-----------
Add api for triaging/untriaging article and logging

Modified Paths:
--------------
    trunk/extensions/PageTriage/PageTriage.hooks.php
    trunk/extensions/PageTriage/PageTriage.php

Added Paths:
-----------
    trunk/extensions/PageTriage/api/ApiPageTriageAction.php
    trunk/extensions/PageTriage/includes/PageTriage.php

Modified: trunk/extensions/PageTriage/PageTriage.hooks.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-04 22:49:33 UTC 
(rev 114721)
+++ trunk/extensions/PageTriage/PageTriage.hooks.php    2012-04-04 23:31:46 UTC 
(rev 114722)
@@ -107,27 +107,8 @@
         * Add page to page triage queue
         */
        private static function addToPageTriageQueue( $pageId ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $dbw = wfGetDB( DB_MASTER );
-               
-               // Pull page creation date from database
-               $res = $dbr->select(
-                       'revision',
-                       'MIN(rev_timestamp) AS creation_date',
-                       array( 'rev_page' => $pageId ),
-                       __METHOD__
-               );
-               foreach ( $res as $row ) {
-                       $creationDate = $row->creation_date;
-               }
-               
-               $row = array(
-                       'ptrp_page_id' => $pageId,
-                       'ptrp_triaged' => 0,
-                       'ptrp_timestamp' => $creationDate
-               );
-
-               $dbw->replace( 'pagetriage_page', array( 'ptrp_page_id' ), 
$row, __METHOD__ );  
+               $pageTriage = new PageTriage( $pageId );
+               $pageTriage->addToPageTriageQueue();
        }
 
        /**

Modified: trunk/extensions/PageTriage/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/PageTriage.php  2012-04-04 22:49:33 UTC (rev 
114721)
+++ trunk/extensions/PageTriage/PageTriage.php  2012-04-04 23:31:46 UTC (rev 
114722)
@@ -56,12 +56,14 @@
 $wgSpecialPages['PageTriage'] = 'SpecialPageTriage';
 $wgSpecialPageGroups['PageTriage'] = 'changes';
 $wgAutoloadClasses['ArticleMetadata'] = $dir . 'includes/ArticleMetadata.php';
+$wgAutoloadClasses['PageTriage'] = $dir . 'includes/PageTriage.php';
 $wgAutoloadClasses['PageTriageUtil'] = $dir . 'includes/PageTriageUtil.php';
 $wgAutoloadClasses['PageTriageHooks'] = $dir . 'PageTriage.hooks.php';
 
 $wgAutoloadClasses['ApiPageTriageList'] = $dir . 'api/ApiPageTriageList.php';
 $wgAutoloadClasses['ApiPageTriageGetMetadata'] = $dir . 
'api/ApiPageTriageGetMetadata.php';
 $wgAutoloadClasses['ApiPageTriageStats'] = $dir . 'api/ApiPageTriageStats.php';
+$wgAutoloadClasses['ApiPageTriageAction'] = $dir . 
'api/ApiPageTriageAction.php';
 
 // custom exceptions
 $wgAutoloadClasses['MWArticleMetadataMissingPageIdException'] = $dir . 
'includes/ArticleMetadata.php';
@@ -72,6 +74,7 @@
 $wgAPIModules['pagetriagelist'] = 'ApiPageTriageList';
 $wgAPIModules['pagetriagegetmetadata'] = 'ApiPageTriageGetMetadata';
 $wgAPIModules['pagetriagestats'] = 'ApiPageTriageStats';
+$wgAPIModules['pagetriageaction'] = 'ApiPageTriageAction';
 
 // hooks
 $wgHooks['LoadExtensionSchemaUpdates'][] = 'efPageTriageSchemaUpdates';

Added: trunk/extensions/PageTriage/api/ApiPageTriageAction.php
===================================================================
--- trunk/extensions/PageTriage/api/ApiPageTriageAction.php                     
        (rev 0)
+++ trunk/extensions/PageTriage/api/ApiPageTriageAction.php     2012-04-04 
23:31:46 UTC (rev 114722)
@@ -0,0 +1,73 @@
+<?php
+
+class ApiPageTriageAction extends ApiBase {
+       
+       public function execute() {
+               global $wgUser;
+
+               if ( $wgUser->isAnon() || $wgUser->isBlocked( false )  ) {
+                       $this->dieUsage( "You don't have permission to do 
that", 'permission-denied' );
+               }
+               
+               //@Todo: Add more user permission checking
+
+               $params = $this->extractRequestParams();
+               
+               $pageTriage = new PageTriage( $params['pageid'] );
+               $pageTriage->setTriageStatus( $params['triaged'], $wgUser );
+
+               $result = array( 'result' => 'success' );
+               $this->getResult()->addValue( null, $this->getModuleName(), 
$result );
+       }
+
+       public function needsToken() {
+               return true;
+       }
+
+       public function getTokenSalt() {
+               return '';
+       }
+
+       public function getAllowedParams() {
+               return array(
+                       'pageid' => array(
+                               ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_TYPE => 'integer'
+                       ),
+                       'triaged' => array(
+                               ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_TYPE => array(
+                                       '1',
+                                       '0',
+                               ),
+                       ),
+                       'token' => array(
+                               ApiBase::PARAM_REQUIRED => true,
+                       )
+               );
+       }
+
+       public function mustBePosted() {
+               return true;
+       }
+
+       public function isWriteMode() {
+               return true;
+       }
+
+       public function getVersion() {
+               return __CLASS__ . ': $Id$';
+       }
+
+       public function getParamDescription() {
+               return array(
+                       'pageid' => 'The article for which to be marked as 
triaged or untriaged',
+                       'triaged' => 'whether the article is triaged or not',
+                       'token' => 'edit token'
+               );
+       }
+
+       public function getDescription() {
+               return 'Mark an article as triaged or untriaged';
+       }
+}


Property changes on: trunk/extensions/PageTriage/api/ApiPageTriageAction.php
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Added: trunk/extensions/PageTriage/includes/PageTriage.php
===================================================================
--- trunk/extensions/PageTriage/includes/PageTriage.php                         
(rev 0)
+++ trunk/extensions/PageTriage/includes/PageTriage.php 2012-04-04 23:31:46 UTC 
(rev 114722)
@@ -0,0 +1,140 @@
+<?php
+
+class PageTriage {
+
+       // database property
+       protected $mPageId;
+       protected $mTriaged;
+       protected $mTimestamp;
+
+       // additional property
+       protected $mMetadata;
+
+       /**
+        * @param $pageId int
+        */
+       public function __construct( $pageId ) {
+               $this->mPageId = intval( $pageId );
+       }
+
+       /**
+        * Add page to page triage queue
+        * @return bool
+        */
+       public function addToPageTriageQueue() {
+               $dbr = wfGetDB( DB_SLAVE );
+               $dbw = wfGetDB( DB_MASTER );
+               
+               // Pull page creation date from database
+               $res = $dbr->selectRow(
+                       'revision',
+                       'MIN(rev_timestamp) AS creation_date',
+                       array( 'rev_page' => $this->mPageId ),
+                       __METHOD__
+               );
+               
+               if ( !$res ) {
+                       return false;
+               }
+               
+               $row = array(
+                       'ptrp_page_id' => $this->mPageId,
+                       'ptrp_triaged' => '0',
+                       'ptrp_timestamp' => $res->creation_date
+               );
+
+               $dbw->replace( 'pagetriage_page', array( 'ptrp_page_id' ), 
$row, __METHOD__ );
+
+               return true;
+       }
+       
+       /**
+        * set the triage status of an article in pagetriage queue
+        * @param $triaged string - '1'/'0'
+        * @param $user User
+        */
+       public function setTriageStatus( $triaged, User $user = null ) {
+               $dbw = wfGetDB( DB_MASTER );
+               
+               $row = array();
+               if ( $triaged === '1' ) {
+                       $row['ptrp_triaged'] = '1';
+               } else {
+                       $row['ptrp_triaged'] = '0';
+               }
+
+               $this->mTriaged = $row['ptrp_triaged'];
+
+               $dbw->begin();
+               $dbw->update( 'pagetriage_page', $row, array( 'ptrp_page_id' => 
$this->mPageId ), __METHOD__ );
+               
+               // Log it if set by user
+               if ( $dbw->affectedRows() > 0 && !is_null( $user ) && 
!$user->isAnon() ) {
+                       $this->logUserTriageAction( $user );
+               }
+               $dbw->commit();
+       }
+       
+       /**
+        * Load a page triage record
+        * @return false
+        */
+       public function retrieve() {
+               $dbr = wfGetDB( DB_SLAVE );
+               
+               $res = $dbr->selectRow(
+                       array( 'pagetriage_page' ),
+                       array( 'ptrp_triaged', 'ptrp_timestamp' ),
+                       array( 'ptrp_page_id' => $this->mPageId ),
+                       __METHOD__
+               );
+               
+               if ( !$res ) {
+                       return false;
+               }
+               
+               $this->mTriaged = $res->ptrp_triaged;
+               $this->mTimestamp = $res->ptrp_timestamp;
+               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
+        */
+       protected function logUserTriageAction( $user ) {
+               $dbw = wfGetDB( DB_MASTER );
+
+               $row = array(
+                       'ptrl_page_id' => $this->mPageId,
+                       'ptrl_user_id' => $user->getID(),
+                       'ptrl_triaged' => $this->mTriaged,
+                       'ptrl_timestamp' => $dbw->timestamp( wfTimestampNow() )
+               );
+               
+               $row['ptrl_id'] = $dbw->nextSequenceValue( 
'pagetriage_log_ptrl_id' );
+               $dbw->insert( 'pagetriage_log', $row, __METHOD__ );
+       }
+       
+}


Property changes on: trunk/extensions/PageTriage/includes/PageTriage.php
___________________________________________________________________
Added: svn:eol-style
   + native


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

Reply via email to