API: Overhaul ApiResult, make format=xml not throw, and add json formatversion
[lhc/web/wiklou.git] / includes / api / ApiParse.php
index 73bea83..3ca62c6 100644 (file)
@@ -124,7 +124,6 @@ class ApiParse extends ApiBase {
                        } else { // Not $oldid, but $pageid or $page
                                if ( $params['redirects'] ) {
                                        $reqParams = array(
-                                               'action' => 'query',
                                                'redirects' => '',
                                        );
                                        if ( !is_null( $pageid ) ) {
@@ -134,14 +133,12 @@ class ApiParse extends ApiBase {
                                        }
                                        $req = new FauxRequest( $reqParams );
                                        $main = new ApiMain( $req );
-                                       $main->execute();
-                                       $data = $main->getResultData();
-                                       $redirValues = isset( $data['query']['redirects'] )
-                                               ? $data['query']['redirects']
-                                               : array();
+                                       $pageSet = new ApiPageSet( $main );
+                                       $pageSet->execute();
+
                                        $to = $page;
-                                       foreach ( (array)$redirValues as $r ) {
-                                               $to = $r['to'];
+                                       foreach ( $pageSet->getRedirectTitles() as $title ) {
+                                               $to = $title->getFullText();
                                        }
                                        $pageParams = array( 'title' => $to );
                                } elseif ( !is_null( $pageid ) ) {
@@ -226,16 +223,20 @@ class ApiParse extends ApiBase {
                                // Build a result and bail out
                                $result_array = array();
                                $result_array['text'] = array();
-                               ApiResult::setContent( $result_array['text'], $this->pstContent->serialize( $format ) );
+                               ApiResult::setContentValue( $result_array['text'], 'text', $this->pstContent->serialize( $format ) );
                                if ( isset( $prop['wikitext'] ) ) {
                                        $result_array['wikitext'] = array();
-                                       ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
+                                       ApiResult::setContentValue( $result_array['wikitext'], 'wikitext', $this->content->serialize( $format ) );
                                }
                                if ( !is_null( $params['summary'] ) ||
                                        ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
                                ) {
                                        $result_array['parsedsummary'] = array();
-                                       ApiResult::setContent( $result_array['parsedsummary'], $this->formatSummary( $titleObj, $params ) );
+                                       ApiResult::setContentValue(
+                                               $result_array['parsedsummary'],
+                                               'parsedsummary',
+                                               $this->formatSummary( $titleObj, $params )
+                                       );
                                }
 
                                $result->addValue( null, $this->getModuleName(), $result_array );
@@ -269,14 +270,18 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['text'] ) ) {
                        $result_array['text'] = array();
-                       ApiResult::setContent( $result_array['text'], $p_result->getText() );
+                       ApiResult::setContentValue( $result_array['text'], 'text', $p_result->getText() );
                }
 
                if ( !is_null( $params['summary'] ) ||
                        ( !is_null( $params['sectiontitle'] ) && $this->section === 'new' )
                ) {
                        $result_array['parsedsummary'] = array();
-                       ApiResult::setContent( $result_array['parsedsummary'], $this->formatSummary( $titleObj, $params ) );
+                       ApiResult::setContentValue(
+                               $result_array['parsedsummary'],
+                               'parsedsummary',
+                               $this->formatSummary( $titleObj, $params )
+                       );
                }
 
                if ( isset( $prop['langlinks'] ) ) {
@@ -301,7 +306,7 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['categorieshtml'] ) ) {
                        $categoriesHtml = $this->categoriesHtml( $p_result->getCategories() );
                        $result_array['categorieshtml'] = array();
-                       ApiResult::setContent( $result_array['categorieshtml'], $categoriesHtml );
+                       ApiResult::setContentValue( $result_array['categorieshtml'], 'categorieshtml', $categoriesHtml );
                }
                if ( isset( $prop['links'] ) ) {
                        $result_array['links'] = $this->formatLinks( $p_result->getLinks() );
@@ -342,8 +347,9 @@ class ApiParse extends ApiBase {
 
                        if ( isset( $prop['headhtml'] ) ) {
                                $result_array['headhtml'] = array();
-                               ApiResult::setContent(
+                               ApiResult::setContentValue(
                                        $result_array['headhtml'],
+                                       'headhtml',
                                        $context->getOutput()->headElement( $context->getSkin() )
                                );
                        }
@@ -359,7 +365,7 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['indicators'] ) ) {
                        foreach ( $p_result->getIndicators() as $name => $content ) {
                                $indicator = array( 'name' => $name );
-                               ApiResult::setContent( $indicator, $content );
+                               ApiResult::setContentValue( $indicator, 'content', $content );
                                $result_array['indicators'][] = $indicator;
                        }
                }
@@ -370,10 +376,10 @@ class ApiParse extends ApiBase {
 
                if ( isset( $prop['wikitext'] ) ) {
                        $result_array['wikitext'] = array();
-                       ApiResult::setContent( $result_array['wikitext'], $this->content->serialize( $format ) );
+                       ApiResult::setContentValue( $result_array['wikitext'], 'wikitext', $this->content->serialize( $format ) );
                        if ( !is_null( $this->pstContent ) ) {
                                $result_array['psttext'] = array();
-                               ApiResult::setContent( $result_array['psttext'], $this->pstContent->serialize( $format ) );
+                               ApiResult::setContentValue( $result_array['psttext'], 'psttext', $this->pstContent->serialize( $format ) );
                        }
                }
                if ( isset( $prop['properties'] ) ) {
@@ -387,7 +393,7 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['limitreporthtml'] ) ) {
                        $limitreportHtml = EditPage::getPreviewLimitReport( $p_result );
                        $result_array['limitreporthtml'] = array();
-                       ApiResult::setContent( $result_array['limitreporthtml'], $limitreportHtml );
+                       ApiResult::setContentValue( $result_array['limitreporthtml'], 'limitreporthtml', $limitreportHtml );
                }
 
                if ( $params['generatexml'] ) {
@@ -403,7 +409,7 @@ class ApiParse extends ApiBase {
                                $xml = $dom->__toString();
                        }
                        $result_array['parsetree'] = array();
-                       ApiResult::setContent( $result_array['parsetree'], $xml );
+                       ApiResult::setContentValue( $result_array['parsetree'], 'parsetree', $xml );
                }
 
                $result_mapping = array(
@@ -543,7 +549,7 @@ class ApiParse extends ApiBase {
                                // native language name
                                $entry['autonym'] = Language::fetchLanguageName( $title->getInterwiki() );
                        }
-                       ApiResult::setContent( $entry, $bits[1] );
+                       ApiResult::setContentValue( $entry, 'title', $bits[1] );
                        $result[] = $entry;
                }
 
@@ -578,7 +584,7 @@ class ApiParse extends ApiBase {
                foreach ( $links as $link => $sortkey ) {
                        $entry = array();
                        $entry['sortkey'] = $sortkey;
-                       ApiResult::setContent( $entry, $link );
+                       ApiResult::setContentValue( $entry, 'category', $link );
                        if ( !isset( $hiddencats[$link] ) ) {
                                $entry['missing'] = '';
                        } elseif ( $hiddencats[$link] ) {
@@ -603,7 +609,7 @@ class ApiParse extends ApiBase {
                        foreach ( $nslinks as $title => $id ) {
                                $entry = array();
                                $entry['ns'] = $ns;
-                               ApiResult::setContent( $entry, Title::makeTitle( $ns, $title )->getFullText() );
+                               ApiResult::setContentValue( $entry, 'title', Title::makeTitle( $ns, $title )->getFullText() );
                                if ( $id != 0 ) {
                                        $entry['exists'] = '';
                                }
@@ -626,7 +632,7 @@ class ApiParse extends ApiBase {
                                        $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
                                }
 
-                               ApiResult::setContent( $entry, $title->getFullText() );
+                               ApiResult::setContentValue( $entry, 'title', $title->getFullText() );
                                $result[] = $entry;
                        }
                }
@@ -639,7 +645,7 @@ class ApiParse extends ApiBase {
                foreach ( $headItems as $tag => $content ) {
                        $entry = array();
                        $entry['tag'] = $tag;
-                       ApiResult::setContent( $entry, $content );
+                       ApiResult::setContentValue( $entry, 'content', $content );
                        $result[] = $entry;
                }
 
@@ -651,7 +657,7 @@ class ApiParse extends ApiBase {
                foreach ( $properties as $name => $value ) {
                        $entry = array();
                        $entry['name'] = $name;
-                       ApiResult::setContent( $entry, $value );
+                       ApiResult::setContentValue( $entry, 'value', $value );
                        $result[] = $entry;
                }
 
@@ -663,7 +669,7 @@ class ApiParse extends ApiBase {
                foreach ( $css as $file => $link ) {
                        $entry = array();
                        $entry['file'] = $file;
-                       ApiResult::setContent( $entry, $link );
+                       ApiResult::setContentValue( $entry, 'link', $link );
                        $result[] = $entry;
                }
 
@@ -680,8 +686,8 @@ class ApiParse extends ApiBase {
                        if ( !is_array( $value ) ) {
                                $value = array( $value );
                        }
-                       $apiResult->setIndexedTagName( $value, 'param' );
-                       $apiResult->setIndexedTagName_recursive( $value, 'param' );
+                       ApiResult::setIndexedTagName( $value, 'param' );
+                       ApiResult::setIndexedTagNameOnSubarrays( $value, 'param' );
                        $entry = array_merge( $entry, $value );
                        $result[] = $entry;
                }
@@ -692,7 +698,7 @@ class ApiParse extends ApiBase {
        private function setIndexedTagNames( &$array, $mapping ) {
                foreach ( $mapping as $key => $name ) {
                        if ( isset( $array[$key] ) ) {
-                               $this->getResult()->setIndexedTagName( $array[$key], $name );
+                               ApiResult::setIndexedTagName( $array[$key], $name );
                        }
                }
        }