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