[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/includes/installer/ -> WebInstallerOutput.php (source)

   1  <?php
   2  /**
   3   * Output handler for the web installer.
   4   *
   5   * This program is free software; you can redistribute it and/or modify
   6   * it under the terms of the GNU General Public License as published by
   7   * the Free Software Foundation; either version 2 of the License, or
   8   * (at your option) any later version.
   9   *
  10   * This program is distributed in the hope that it will be useful,
  11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13   * GNU General Public License for more details.
  14   *
  15   * You should have received a copy of the GNU General Public License along
  16   * with this program; if not, write to the Free Software Foundation, Inc.,
  17   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18   * http://www.gnu.org/copyleft/gpl.html
  19   *
  20   * @file
  21   * @ingroup Deployment
  22   */
  23  
  24  /**
  25   * Output class modelled on OutputPage.
  26   *
  27   * I've opted to use a distinct class rather than derive from OutputPage here in
  28   * the interests of separation of concerns: if we used a subclass, there would be
  29   * quite a lot of things you could do in OutputPage that would break the installer,
  30   * that wouldn't be immediately obvious.
  31   *
  32   * @ingroup Deployment
  33   * @since 1.17
  34   */
  35  class WebInstallerOutput {
  36  
  37      /**
  38       * The WebInstaller object this WebInstallerOutput is used by.
  39       *
  40       * @var WebInstaller
  41       */
  42      public $parent;
  43  
  44      /**
  45       * Buffered contents that haven't been output yet
  46       * @var string
  47       */
  48      private $contents = '';
  49  
  50      /**
  51       * Has the header (or short header) been output?
  52       * @var bool
  53       */
  54      private $headerDone = false;
  55  
  56      /**
  57       * @var string
  58       */
  59      public $redirectTarget;
  60  
  61      /**
  62       * Does the current page need to allow being used as a frame?
  63       * If not, X-Frame-Options will be output to forbid it.
  64       *
  65       * @var bool
  66       */
  67      public $allowFrames = false;
  68  
  69      /**
  70       * Whether to use the limited header (used during CC license callbacks)
  71       * @var bool
  72       */
  73      private $useShortHeader = false;
  74  
  75      /**
  76       * @param WebInstaller $parent
  77       */
  78  	public function __construct( WebInstaller $parent ) {
  79          $this->parent = $parent;
  80      }
  81  
  82      /**
  83       * @param string $html
  84       */
  85  	public function addHTML( $html ) {
  86          $this->contents .= $html;
  87          $this->flush();
  88      }
  89  
  90      /**
  91       * @param string $text
  92       */
  93  	public function addWikiText( $text ) {
  94          $this->addHTML( $this->parent->parse( $text ) );
  95      }
  96  
  97      /**
  98       * @param string $html
  99       */
 100  	public function addHTMLNoFlush( $html ) {
 101          $this->contents .= $html;
 102      }
 103  
 104      /**
 105       * @param string $url
 106       *
 107       * @throws MWException
 108       */
 109  	public function redirect( $url ) {
 110          if ( $this->headerDone ) {
 111              throw new MWException( __METHOD__ . ' called after sending headers' );
 112          }
 113          $this->redirectTarget = $url;
 114      }
 115  
 116  	public function output() {
 117          $this->flush();
 118          $this->outputFooter();
 119      }
 120  
 121      /**
 122       * Get the stylesheet of the MediaWiki skin.
 123       *
 124       * @return string
 125       */
 126  	public function getCSS() {
 127          global $wgStyleDirectory;
 128  
 129          $moduleNames = array(
 130              // See SkinTemplate::setupSkinUserCss
 131              'mediawiki.legacy.shared',
 132              // See Vector::setupSkinUserCss
 133              'mediawiki.skinning.interface',
 134          );
 135  
 136          if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
 137              // Force loading Vector skin if available as a fallback skin
 138              // for whatever ResourceLoader wants to have as the default.
 139  
 140              // Include instead of require, as this will work without it, it will just look bad.
 141              // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
 142              // definitions for its RL modules there that we use implicitly below.
 143  
 144              // @codingStandardsIgnoreStart
 145              global $wgResourceModules; // This is NOT UNUSED!
 146              // @codingStandardsIgnoreEnd
 147  
 148              include_once "$wgStyleDirectory/Vector/Vector.php";
 149  
 150              $moduleNames[] = 'skins.vector.styles';
 151          }
 152  
 153          $moduleNames[] = 'mediawiki.legacy.config';
 154  
 155          $resourceLoader = new ResourceLoader();
 156          $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
 157                  'debug' => 'true',
 158                  'lang' => $this->getLanguageCode(),
 159                  'only' => 'styles',
 160          ) ) );
 161  
 162          $styles = array();
 163          foreach ( $moduleNames as $moduleName ) {
 164              /** @var ResourceLoaderFileModule $module */
 165              $module = $resourceLoader->getModule( $moduleName );
 166  
 167              // Based on: ResourceLoaderFileModule::getStyles (without the DB query)
 168              $styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
 169                  $module->readStyleFiles(
 170                      $module->getStyleFiles( $rlContext ),
 171                      $module->getFlip( $rlContext )
 172              ) ) );
 173          }
 174  
 175          return implode( "\n", $styles );
 176      }
 177  
 178      /**
 179       * "<link>" to index.php?css=1 for the "<head>"
 180       *
 181       * @return string
 182       */
 183  	private function getCssUrl() {
 184          return Html::linkedStyle( $_SERVER['PHP_SELF'] . '?css=1' );
 185      }
 186  
 187  	public function useShortHeader( $use = true ) {
 188          $this->useShortHeader = $use;
 189      }
 190  
 191  	public function allowFrames( $allow = true ) {
 192          $this->allowFrames = $allow;
 193      }
 194  
 195  	public function flush() {
 196          if ( !$this->headerDone ) {
 197              $this->outputHeader();
 198          }
 199          if ( !$this->redirectTarget && strlen( $this->contents ) ) {
 200              echo $this->contents;
 201              flush();
 202              $this->contents = '';
 203          }
 204      }
 205  
 206      /**
 207       * @return string
 208       */
 209  	public function getDir() {
 210          global $wgLang;
 211  
 212          return is_object( $wgLang ) ? $wgLang->getDir() : 'ltr';
 213      }
 214  
 215      /**
 216       * @return string
 217       */
 218  	public function getLanguageCode() {
 219          global $wgLang;
 220  
 221          return is_object( $wgLang ) ? $wgLang->getCode() : 'en';
 222      }
 223  
 224      /**
 225       * @return string[]
 226       */
 227  	public function getHeadAttribs() {
 228          return array(
 229              'dir' => $this->getDir(),
 230              'lang' => $this->getLanguageCode(),
 231          );
 232      }
 233  
 234      /**
 235       * Get whether the header has been output
 236       *
 237       * @return bool
 238       */
 239  	public function headerDone() {
 240          return $this->headerDone;
 241      }
 242  
 243  	public function outputHeader() {
 244          $this->headerDone = true;
 245          $this->parent->request->response()->header( 'Content-Type: text/html; charset=utf-8' );
 246  
 247          if ( !$this->allowFrames ) {
 248              $this->parent->request->response()->header( 'X-Frame-Options: DENY' );
 249          }
 250  
 251          if ( $this->redirectTarget ) {
 252              $this->parent->request->response()->header( 'Location: ' . $this->redirectTarget );
 253  
 254              return;
 255          }
 256  
 257          if ( $this->useShortHeader ) {
 258              $this->outputShortHeader();
 259  
 260              return;
 261          }
 262  ?>
 263  <?php echo Html::htmlHeader( $this->getHeadAttribs() ); ?>
 264  <head>
 265      <meta name="robots" content="noindex, nofollow" />
 266      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 267      <title><?php $this->outputTitle(); ?></title>
 268      <?php echo $this->getCssUrl() . "\n"; ?>
 269      <?php echo $this->getJQuery() . "\n"; ?>
 270      <?php echo Html::linkedScript( 'config.js' ) . "\n"; ?>
 271  </head>
 272  
 273  <?php echo Html::openElement( 'body', array( 'class' => $this->getDir() ) ) . "\n"; ?>
 274  <div id="mw-page-base"></div>
 275  <div id="mw-head-base"></div>
 276  <div id="content" class="mw-body">
 277  <div id="bodyContent" class="mw-body-content">
 278  
 279  <h1><?php $this->outputTitle(); ?></h1>
 280  <?php
 281      }
 282  
 283  	public function outputFooter() {
 284          if ( $this->useShortHeader ) {
 285              echo Html::closeElement( 'body' ) . Html::closeElement( 'html' );
 286  
 287              return;
 288          }
 289  ?>
 290  
 291  </div></div>
 292  
 293  <div id="mw-panel">
 294      <div class="portal" id="p-logo">
 295        <a style="background-image: url(images/installer-logo.png);"
 296          href="https://www.mediawiki.org/"
 297          title="Main Page"></a>
 298      </div>
 299      <div class="portal"><div class="body">
 300  <?php
 301      echo $this->parent->parse( wfMessage( 'config-sidebar' )->plain(), true );
 302  ?>
 303      </div></div>
 304  </div>
 305  
 306  <?php
 307          echo Html::closeElement( 'body' ) . Html::closeElement( 'html' );
 308      }
 309  
 310  	public function outputShortHeader() {
 311  ?>
 312  <?php echo Html::htmlHeader( $this->getHeadAttribs() ); ?>
 313  <head>
 314      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 315      <meta name="robots" content="noindex, nofollow" />
 316      <title><?php $this->outputTitle(); ?></title>
 317      <?php echo $this->getCssUrl() . "\n"; ?>
 318      <?php echo $this->getJQuery(); ?>
 319      <?php echo Html::linkedScript( 'config.js' ); ?>
 320  </head>
 321  
 322  <body style="background-image: none">
 323  <?php
 324      }
 325  
 326  	public function outputTitle() {
 327          global $wgVersion;
 328          echo wfMessage( 'config-title', $wgVersion )->escaped();
 329      }
 330  
 331      /**
 332       * @return string
 333       */
 334  	public function getJQuery() {
 335          return Html::linkedScript( "../resources/lib/jquery/jquery.js" );
 336      }
 337  
 338  }
". ', [['includes','Html.php',597]], 7], 'useshortheader': ['useshortheader', '', [['includes/installer','WebInstallerOutput.php',187]], 2], 'htmlheader': ['htmlheader', 'Constructs the opening html-tag with necessary doctypes depending on global variables. ', [['includes','Html.php',875]], 4], 'linkedstyle': ['linkedstyle', 'Output a "" linking to the given URL for the given media type (if any). ', [['includes','Html.php',632]], 3], 'array_merge': ['array_merge', '', [], 382], 'flush': ['flush', '', [], 17], 'getdir': ['getdir', '', [], 38], 'file_exists': ['file_exists', '', [], 81], 'implode': ['implode', '', [], 454], 'is_object': ['is_object', '', [], 127], 'header': ['header', '', [], 174]}; CLASS_DATA={ 'resourceloadercontext': ['resourceloadercontext', 'Object passed around to modules which contains information about the state of a specific loader request ', [['includes/resourceloader','ResourceLoaderContext.php',25]], 5], 'resourceloader': ['resourceloader', 'Dynamic JavaScript and CSS resource loading system. ', [['includes/resourceloader','ResourceLoader.php',25]], 48], 'mwexception': ['mwexception', 'MediaWiki exception ', [['includes/exception','MWException.php',21]], 606], 'webinstalleroutput': ['webinstalleroutput', 'Output class modelled on OutputPage. ', [['includes/installer','WebInstallerOutput.php',24]], 1], 'fauxrequest': ['fauxrequest', 'WebRequest clone which takes values from a provided array. ', [['includes','WebRequest.php',1250]], 12], 'html': ['html', 'This class is a collection of static functions that serve two purposes: ', [['includes','Html.php',26]], 764]}; CONST_DATA={ };


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1