Merge "Expose ID of relevant page in JS variables"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 19 Nov 2014 04:01:50 +0000 (04:01 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 19 Nov 2014 04:01:50 +0000 (04:01 +0000)
1  2 
includes/OutputPage.php

diff --combined includes/OutputPage.php
@@@ -182,14 -182,12 +182,14 @@@ class OutputPage extends ContextSource 
  
        protected $mFeedLinksAppendQuery = null;
  
 -      /**
 -       * @var int
 -       * The level of 'untrustworthiness' allowed for modules loaded on this page.
 +      /** @var array
 +       * What level of 'untrustworthiness' is allowed in CSS/JS modules loaded on this page?
         * @see ResourceLoaderModule::$origin
 +       * ResourceLoaderModule::ORIGIN_ALL is assumed unless overridden;
         */
 -      protected $mAllowedModuleOrigin = ResourceLoaderModule::ORIGIN_ALL;
 +      protected $mAllowedModules = array(
 +              ResourceLoaderModule::TYPE_COMBINED => ResourceLoaderModule::ORIGIN_ALL,
 +      );
  
        /** @var bool Whether output is disabled.  If this is true, the 'output' method will do nothing. */
        protected $mDoNothing = false;
        }
  
        /**
 -       * Restrict the page to loading modules bundled the software.
 +       * Do not allow scripts which can be modified by wiki users to load on this page;
 +       * only allow scripts bundled with, or generated by, the software.
 +       * Site-wide styles are controlled by a config setting, since they can be
 +       * used to create a custom skin/theme, but not user-specific ones.
         *
 -       * Disallows the queue to contain any modules which can be modified by wiki
 -       * users to load on this page.
 +       * @todo this should be given a more accurate name
         */
        public function disallowUserJs() {
 -              $this->reduceAllowedModuleOrigin( ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL );
 +              $this->reduceAllowedModules(
 +                      ResourceLoaderModule::TYPE_SCRIPTS,
 +                      ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL
 +              );
 +
 +              // Site-wide styles are controlled by a config setting, see bug 71621
 +              // for background on why. User styles are never allowed.
 +              if ( $this->getConfig()->get( 'AllowSiteCSSOnRestrictedPages' ) ) {
 +                      $styleOrigin = ResourceLoaderModule::ORIGIN_USER_SITEWIDE;
 +              } else {
 +                      $styleOrigin = ResourceLoaderModule::ORIGIN_CORE_INDIVIDUAL;
 +              }
 +              $this->reduceAllowedModules(
 +                      ResourceLoaderModule::TYPE_STYLES,
 +                      $styleOrigin
 +              );
        }
  
        /**
 -       * Get the level of JavaScript / CSS untrustworthiness allowed on this page.
 -       *
 +       * Show what level of JavaScript / CSS untrustworthiness is allowed on this page
         * @see ResourceLoaderModule::$origin
 -       * @param string $type Unused: Module origin allowance used to be fragmented by
 -       *  ResourceLoaderModule TYPE_ constants.
 +       * @param string $type ResourceLoaderModule TYPE_ constant
         * @return int ResourceLoaderModule ORIGIN_ class constant
         */
 -      public function getAllowedModules( $type = null ) {
 -              return $this->mAllowedModuleOrigin;
 +      public function getAllowedModules( $type ) {
 +              if ( $type == ResourceLoaderModule::TYPE_COMBINED ) {
 +                      return min( array_values( $this->mAllowedModules ) );
 +              } else {
 +                      return isset( $this->mAllowedModules[$type] )
 +                              ? $this->mAllowedModules[$type]
 +                              : ResourceLoaderModule::ORIGIN_ALL;
 +              }
        }
  
        /**
         * Set the highest level of CSS/JS untrustworthiness allowed
         *
         * @deprecated since 1.24 Raising level of allowed untrusted content is no longer supported.
 -       *  Use reduceAllowedModuleOrigin() instead.
 -       *
 +       *  Use reduceAllowedModules() instead
         * @param string $type ResourceLoaderModule TYPE_ constant
 -       * @param int $level ResourceLoaderModule ORIGIN_ constant
 +       * @param int $level ResourceLoaderModule class constant
         */
        public function setAllowedModules( $type, $level ) {
                wfDeprecated( __METHOD__, '1.24' );
 -              $this->reduceAllowedModuleOrigin( $level );
 -      }
 -
 -      /**
 -       * Limit the highest level of CSS/JS untrustworthiness allowed.
 -       *
 -       * @deprecated since 1.24 Module allowance is no longer fragmented by content type.
 -       *  Use reduceAllowedModuleOrigin() instead.
 -       *
 -       * @param string $type ResourceLoaderModule TYPE_ constant
 -       * @param int $level ResourceLoaderModule ORIGIN_ class constant
 -       */
 -      public function reduceAllowedModules( $type, $level ) {
 -              wfDeprecated( __METHOD__, '1.24' );
 -              $this->reduceAllowedModuleOrigin( $level );
 +              $this->reduceAllowedModules( $type, $level );
        }
  
        /**
         * If passed the same or a higher level than the current level of untrustworthiness set, the
         * level will remain unchanged.
         *
 +       * @param string $type
         * @param int $level ResourceLoaderModule class constant
         */
 -      public function reduceAllowedModuleOrigin( $level ) {
 -              $this->mAllowedModuleOrigin = min( $this->mAllowedModuleOrigin, $level );
 +      public function reduceAllowedModules( $type, $level ) {
 +              $this->mAllowedModules[$type] = min( $this->getAllowedModules( $type ), $level );
        }
  
        /**
                        'wgMonthNames' => $lang->getMonthNamesArray(),
                        'wgMonthNamesShort' => $lang->getMonthAbbreviationsArray(),
                        'wgRelevantPageName' => $relevantTitle->getPrefixedDBkey(),
+                       'wgRelevantArticleId' => $relevantTitle->getArticleId(),
                );
  
                if ( $user->isLoggedIn() ) {