(bug 19004) Added support for tags to the API. Patch by Matthew Britton.
[lhc/web/wiklou.git] / includes / api / ApiQueryRevisions.php
index 7e4f71f..6fbb038 100644 (file)
@@ -42,7 +42,7 @@ class ApiQueryRevisions extends ApiQueryBase {
        }
 
        private $fld_ids = false, $fld_flags = false, $fld_timestamp = false, $fld_size = false,
-                       $fld_comment = false, $fld_user = false, $fld_content = false;
+                       $fld_comment = false, $fld_user = false, $fld_content = false, $fld_tags = false;
 
        protected function getTokenFunctions() {
                // tokenname => function
@@ -121,9 +121,8 @@ class ApiQueryRevisions extends ApiQueryBase {
                }
 
                $db = $this->getDB();
-               $this->addTables('revision');
+               $this->addTables(array('page', 'revision'));
                $this->addFields(Revision::selectFields());
-               $this->addTables('page');
                $this->addWhere('page_id = rev_page');
 
                $prop = array_flip($params['prop']);
@@ -135,6 +134,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                $this->fld_timestamp = isset ($prop['timestamp']);
                $this->fld_comment = isset ($prop['comment']);
                $this->fld_size = isset ($prop['size']);
+               $this->fld_tags = isset ($prop['tags']);
                $this->fld_user = isset ($prop['user']);
                $this->token = $params['token'];
                $this->diffto = $params['diffto'];
@@ -143,6 +143,16 @@ class ApiQueryRevisions extends ApiQueryBase {
                        $this->addFields( Revision::selectPageFields() );
                }
 
+               if ($this->fld_tags || !is_null($params['tag'])) {
+                       $this->addTables('tag_summary');
+                       $this->addJoinConds(array('tag_summary' => array('LEFT JOIN', array('rev_id=ts_rev_id'))));
+                       $this->addFields('ts_tags');
+               }
+               
+               if( !is_null($params['tag']) ) {
+                       $this->addWhereFld('ts_tags', $params['tag']);
+               }
+               
                if (isset ($prop['content'])) {
 
                        // For each page we will request, the user must have read rights for that page
@@ -293,9 +303,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                                $this->setContinueEnumParameter('startid', intval($row->rev_id));
                                break;
                        }
-                       $revision = new Revision( $row );
+                       
                        //
-                       $fit = $this->addPageSubItem($revision->getPage(), $this->extractRowInfo($revision), 'rev');
+                       $fit = $this->addPageSubItem($row->rev_page, $this->extractRowInfo($row), 'rev');
                        if(!$fit)
                        {
                                if($enumRevMode)
@@ -311,7 +321,8 @@ class ApiQueryRevisions extends ApiQueryBase {
                $db->freeResult($res);
        }
 
-       private function extractRowInfo( $revision ) {
+       private function extractRowInfo( $row ) {
+               $revision = new Revision( $row );
                $title = $revision->getTitle();
                $vals = array ();
 
@@ -353,6 +364,9 @@ class ApiQueryRevisions extends ApiQueryBase {
                        }
                }       
 
+               if ($this->fld_tags && $row->ts_tags)
+                       $vals['tags'] = $row->ts_tags;
+               
                if(!is_null($this->token))
                {
                        $tokenFunctions = $this->getTokenFunctions();
@@ -427,6 +441,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                                        'size',
                                        'comment',
                                        'content',
+                                       'tags'
                                )
                        ),
                        'limit' => array (
@@ -460,6 +475,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'excludeuser' => array(
                                ApiBase :: PARAM_TYPE => 'user'
                        ),
+                       'tag' => null,
                        'expandtemplates' => false,
                        'generatexml' => false,
                        'section' => null,
@@ -483,6 +499,7 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'dir' => 'direction of enumeration - towards "newer" or "older" revisions (enum)',
                        'user' => 'only include revisions made by user',
                        'excludeuser' => 'exclude revisions made by user',
+                       'tag' => 'only list revisions with this tag',
                        'expandtemplates' => 'expand templates in revision content',
                        'generatexml' => 'generate XML parse tree for revision content',
                        'section' => 'only retrieve the content of this section',