Merge "Remove useless test in getParamValue function of mediawiki.util.js"
[lhc/web/wiklou.git] / includes / api / ApiFormatXml.php
index 6e59961..ef2c54f 100644 (file)
  * @file
  */
 
-if ( !defined( 'MEDIAWIKI' ) ) {
-       // Eclipse helper - will be ignored in production
-       require_once( 'ApiFormatBase.php' );
-}
-
 /**
  * API XML output formatter
  * @ingroup API
@@ -38,6 +33,7 @@ class ApiFormatXml extends ApiFormatBase {
        private $mRootElemName = 'api';
        public static $namespace = 'http://www.mediawiki.org/xml/api/';
        private $mDoubleQuote = false;
+       private $mIncludeNamespace = false;
        private $mXslt = null;
 
        public function __construct( $main, $format ) {
@@ -59,18 +55,22 @@ class ApiFormatXml extends ApiFormatBase {
        public function execute() {
                $params = $this->extractRequestParams();
                $this->mDoubleQuote = $params['xmldoublequote'];
+               $this->mIncludeNamespace = $params['includexmlnamespace'];
                $this->mXslt = $params['xslt'];
 
                $this->printText( '<?xml version="1.0"?>' );
                if ( !is_null( $this->mXslt ) ) {
                        $this->addXslt();
                }
-
-               // If the result data already contains an 'xmlns' namespace added
-               // for custom XML output types, it will override the one for the
-               // generic API results.
-               // This allows API output of other XML types like Atom, RSS, RSD.
-               $data = $this->getResultData() + array( 'xmlns' => self::$namespace );
+               if ( $this->mIncludeNamespace ) {
+                       // If the result data already contains an 'xmlns' namespace added
+                       // for custom XML output types, it will override the one for the
+                       // generic API results.
+                       // This allows API output of other XML types like Atom, RSS, RSD.
+                       $data = $this->getResultData() + array( 'xmlns' => self::$namespace );
+               } else {
+                       $data = $this->getResultData();
+               }
 
                $this->printText(
                        self::recXmlPrint( $this->mRootElemName,
@@ -201,20 +201,23 @@ class ApiFormatXml extends ApiFormatBase {
                        $this->setWarning( 'Stylesheet should have .xsl extension.' );
                        return;
                }
-               $this->printText( '<?xml-stylesheet href="' . $nt->escapeLocalURL( 'action=raw' ) . '" type="text/xsl" ?>' );
+               $this->printText( '<?xml-stylesheet href="' . htmlspecialchars( $nt->getLocalURL( 'action=raw' ) ) . '" type="text/xsl" ?>' );
        }
 
        public function getAllowedParams() {
                return array(
                        'xmldoublequote' => false,
                        'xslt' => null,
+                       'includexmlnamespace' => false,
                );
        }
 
        public function getParamDescription() {
                return array(
                        'xmldoublequote' => 'If specified, double quotes all attributes and content',
-                       'xslt' => 'If specified, adds <xslt> as stylesheet',
+                       'xslt' => 'If specified, adds <xslt> as stylesheet. This should be a wiki page '
+                               . 'in the MediaWiki namespace whose page name ends with ".xsl"',
+                       'includexmlnamespace' => 'If specified, adds an XML namespace'
                );
        }