(bug 30836) API siteinfo specialpagealiases should not return nonexistent special...
[lhc/web/wiklou.git] / includes / api / ApiQueryLogEvents.php
index 4ecf3af..bb4b429 100644 (file)
  * @file
  */
 
-if ( !defined( 'MEDIAWIKI' ) ) {
-       // Eclipse helper - will be ignored in production
-       require_once( 'ApiQueryBase.php' );
-}
-
 /**
  * Query action to List the log events, with optional filtering by various parameters.
  *
@@ -116,7 +111,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        $index['logging'] = 'type_time';
                }
 
-               $this->addWhereRange( 'log_timestamp', $params['dir'], $params['start'], $params['end'] );
+               $this->addTimestampWhereRange( 'log_timestamp', $params['dir'], $params['start'], $params['end'] );
 
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
@@ -200,28 +195,47 @@ class ApiQueryLogEvents extends ApiQueryBase {
         * @param $type string
         * @param $action string
         * @param $ts
+        * @param $legacy bool
         * @return array
         */
-       public static function addLogParams( $result, &$vals, $params, $type, $action, $ts ) {
-               $params = explode( "\n", $params );
+       public static function addLogParams( $result, &$vals, $params, $type, $action, $ts, $legacy = false ) {
                switch ( $type ) {
                        case 'move':
-                               if ( isset( $params[0] ) ) {
-                                       $title = Title::newFromText( $params[0] );
+                               if ( $legacy ){
+                                       $targetKey = 0;
+                                       $noredirKey = 1;
+                               } else {
+                                       $targetKey = '4::target';
+                                       $noredirKey = '5::noredir';
+                               }
+
+                               if ( isset( $params[ $targetKey ] ) ) {
+                                       $title = Title::newFromText( $params[ $targetKey ] );
                                        if ( $title ) {
                                                $vals2 = array();
                                                ApiQueryBase::addTitleInfo( $vals2, $title, 'new_' );
                                                $vals[$type] = $vals2;
                                        }
                                }
-                               if ( isset( $params[1] ) && $params[1] ) {
+                               if ( isset( $params[ $noredirKey ] ) && $params[ $noredirKey ] ) {
                                        $vals[$type]['suppressedredirect'] = '';
                                }
                                $params = null;
                                break;
                        case 'patrol':
+                               if ( $legacy ){
+                                       $cur = 0;
+                                       $prev = 1;
+                                       $auto = 2;
+                               } else {
+                                       $cur = '4::curid';
+                                       $prev = '5::previd';
+                                       $auto = '6::auto';
+                               }
                                $vals2 = array();
-                               list( $vals2['cur'], $vals2['prev'], $vals2['auto'] ) = $params;
+                               $vals2['cur'] = $params[$cur];
+                               $vals2['prev'] = $params[$prev];
+                               $vals2['auto'] = $params[$auto];
                                $vals[$type] = $vals2;
                                $params = null;
                                break;
@@ -255,6 +269,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        private function extractRowInfo( $row ) {
+               $logEntry = DatabaseLogEntry::newFromRow( $row );
                $vals = array();
 
                if ( $this->fld_ids ) {
@@ -286,10 +301,11 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                self::addLogParams(
                                        $this->getResult(),
                                        $vals,
-                                       $row->log_params,
-                                       $row->log_type,
-                                       $row->log_action,
-                                       $row->log_timestamp
+                                       $logEntry->getParameters(),
+                                       $logEntry->getType(),
+                                       $logEntry->getSubtype(),
+                                       $logEntry->getTimestamp(),
+                                       $logEntry->isLegacy()
                                );
                        }
                }
@@ -323,8 +339,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                                }
 
                                if ( $this->fld_parsedcomment ) {
-                                       global $wgUser;
-                                       $vals['parsedcomment'] = $wgUser->getSkin()->formatComment( $row->log_comment, $title );
+                                       $vals['parsedcomment'] = Linker::formatComment( $row->log_comment, $title );
                                }
                        }
                }
@@ -432,6 +447,62 @@ class ApiQueryLogEvents extends ApiQueryBase {
                );
        }
 
+       public function getResultProperties() {
+               global $wgLogTypes;
+               return array(
+                       'ids' => array(
+                               'logid' => 'integer',
+                               'pageid' => 'integer'
+                       ),
+                       'title' => array(
+                               'ns' => 'namespace',
+                               'title' => 'string'
+                       ),
+                       'type' => array(
+                               'type' => array(
+                                       ApiBase::PROP_TYPE => $wgLogTypes
+                               ),
+                               'action' => 'string'
+                       ),
+                       'details' => array(
+                               'actionhidden' => 'boolean'
+                       ),
+                       'user' => array(
+                               'userhidden' => 'boolean',
+                               'user' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'anon' => 'boolean'
+                       ),
+                       'userid' => array(
+                               'userhidden' => 'boolean',
+                               'userid' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true
+                               ),
+                               'anon' => 'boolean'
+                       ),
+                       'timestamp' => array(
+                               'timestamp' => 'timestamp'
+                       ),
+                       'comment' => array(
+                               'commenthidden' => 'boolean',
+                               'comment' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
+                       'parsedcomment' => array(
+                               'commenthidden' => 'boolean',
+                               'parsedcomment' => array(
+                                       ApiBase::PROP_TYPE => 'string',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       )
+               );
+       }
+
        public function getDescription() {
                return 'Get events from logs';
        }
@@ -452,7 +523,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'http://www.mediawiki.org/wiki/API:Logevents';
+               return 'https://www.mediawiki.org/wiki/API:Logevents';
        }
 
        public function getVersion() {