API: added query parameter indexpageids to list the page ids of all returned page...
[lhc/web/wiklou.git] / includes / OutputPage.php
index b94fd22..458907f 100644 (file)
@@ -15,6 +15,7 @@ class OutputPage {
        var $mLastModified, $mETag, $mCategoryLinks;
        var $mScripts, $mLinkColours, $mPageLinkTitle;
 
+       var $mAllowUserJs;
        var $mSuppressQuickbar;
        var $mOnloadHandler;
        var $mDoNothing;
@@ -33,6 +34,8 @@ class OutputPage {
         * Initialise private variables
         */
        function __construct() {
+               global $wgAllowUserJs;
+               $this->mAllowUserJs = $wgAllowUserJs;
                $this->mMetatags = $this->mKeywords = $this->mLinktags = array();
                $this->mHTMLtitle = $this->mPagetitle = $this->mBodytext =
                $this->mRedirect = $this->mLastModified =
@@ -47,6 +50,7 @@ class OutputPage {
                $this->mParserOptions = null;
                $this->mSquidMaxage = 0;
                $this->mScripts = '';
+               $this->mHeadItems = array();
                $this->mETag = false;
                $this->mRevisionId = null;
                $this->mNewSectionLink = false;
@@ -70,6 +74,13 @@ class OutputPage {
        function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); }
        function addKeyword( $text ) { array_push( $this->mKeywords, $text ); }
        function addScript( $script ) { $this->mScripts .= "\t\t".$script; }
+       function addStyle( $style ) {
+               global $wgStylePath, $wgStyleVersion;
+               $this->addLink(
+                               array(
+                                       'rel' => 'stylesheet',
+                                       'href' => $wgStylePath . '/' . $style . '?' . $wgStyleVersion ) );
+       }
 
        /**
         * Add a self-contained script tag with the given contents
@@ -77,10 +88,24 @@ class OutputPage {
         */
        function addInlineScript( $script ) {
                global $wgJsMimeType;
-               $this->mScripts .= "<script type=\"$wgJsMimeType\"><!--\n$script\n--></script>";
+               $this->mScripts .= "<script type=\"$wgJsMimeType\">/*<![CDATA[*/\n$script\n/*]]>*/</script>";
+       }
+
+       function getScript() { 
+               return $this->mScripts . $this->getHeadItems(); 
        }
 
-       function getScript() { return $this->mScripts; }
+       function getHeadItems() {
+               $s = '';
+               foreach ( $this->mHeadItems as $item ) {
+                       $s .= $item;
+               }
+               return $s;
+       }
+
+       function addHeadItem( $name, $value ) {
+               $this->mHeadItems[$name] = $value;
+       }
 
        function setETag($tag) { $this->mETag = $tag; }
        function setArticleBodyOnly($only) { $this->mArticleBodyOnly = $only; }
@@ -268,6 +293,9 @@ class OutputPage {
        public function suppressQuickbar() { $this->mSuppressQuickbar = true; }
        public function isQuickbarSuppressed() { return $this->mSuppressQuickbar; }
 
+       public function disallowUserJs() { $this->mAllowUserJs = false; }
+       public function isUserJsAllowed() { return $this->mAllowUserJs; }
+
        public function addHTML( $text ) { $this->mBodytext .= $text; }
        public function clearHTML() { $this->mBodytext = ''; }
        public function getHTML() { return $this->mBodytext; }
@@ -355,6 +383,7 @@ class OutputPage {
                        $this->mSubtitle .= $parserOutput->mSubtitle ;
                }
                $this->mNoGallery = $parserOutput->getNoGallery();
+               $this->mHeadItems = array_merge( $this->mHeadItems, (array)$parserOutput->mHeadItems );
                wfRunHooks( 'OutputPageParserOutput', array( &$this, $parserOutput ) );
        }
 
@@ -714,7 +743,7 @@ class OutputPage {
         * @return nothing
         */
        function blockedPage( $return = true ) {
-               global $wgUser, $wgContLang, $wgTitle;
+               global $wgUser, $wgContLang, $wgTitle, $wgLang;
 
                $this->setPageTitle( wfMsg( 'blockedtitle' ) );
                $this->setRobotpolicy( 'noindex,nofollow' );
@@ -733,7 +762,31 @@ class OutputPage {
 
                $blockid = $wgUser->mBlock->mId;
 
-               $this->addWikiText( wfMsg( 'blockedtext', $link, $reason, $ip, $name, $blockid ) );
+               $blockExpiry = $wgUser->mBlock->mExpiry;
+               if ( $blockExpiry == 'infinity' ) {
+                       // Entry in database (table ipblocks) is 'infinity' but 'ipboptions' uses 'infinite' or 'indefinite'
+                       // Search for localization in 'ipboptions'
+                       $scBlockExpiryOptions = wfMsg( 'ipboptions' );
+                       foreach ( explode( ',', $scBlockExpiryOptions ) as $option ) {
+                               if ( strpos( $option, ":" ) === false )
+                                       continue;
+                               list( $show, $value ) = explode( ":", $option );
+                               if ( $value == 'infinite' || $value == 'indefinite' ) {
+                                       $blockExpiry = $show;
+                                       break;
+                               }
+                       }
+               } else {
+                       $blockExpiry = $wgLang->timeanddate( wfTimestamp( TS_MW, $blockExpiry ), true );
+               }
+
+               if ( $wgUser->mBlock->mAuto ) {
+                       $msg = 'autoblockedtext';
+               } else {
+                       $msg = 'blockedtext';
+               }
+
+               $this->addWikiText( wfMsg( $msg, $link, $reason, $ip, $name, $blockid, $blockExpiry ) );
                
                # Don't auto-return to special pages
                if( $return ) {
@@ -743,13 +796,13 @@ class OutputPage {
        }
 
        /**
-        * Outputs a pretty page to explain why the request exploded.
+        * Output a standard error page
         *
-        * @param string $title Message key for page title.
-        * @param string $msg   Message key for page text.
-        * @return nothing
+        * @param string $title Message key for page title
+        * @param string $msg Message key for page text
+        * @param array $params Message parameters
         */
-       public function showErrorPage( $title, $msg ) {
+       public function showErrorPage( $title, $msg, $params = array() ) {
                global $wgTitle;
 
                $this->mDebugtext .= 'Original title: ' .
@@ -760,9 +813,12 @@ class OutputPage {
                $this->setArticleRelated( false );
                $this->enableClientCache( false );
                $this->mRedirect = '';
-
                $this->mBodytext = '';
-               $this->addWikiText( wfMsg( $msg ) );
+               
+               array_unshift( $params, $msg );
+               $message = call_user_func_array( 'wfMsg', $params );
+               $this->addWikiText( $message );
+               
                $this->returnToMain( false );
        }
 
@@ -897,7 +953,7 @@ class OutputPage {
                        $this->setPageTitle( wfMsg( 'viewsource' ) );
                        $this->setSubtitle( wfMsg( 'viewsourcefor', $skin->makeKnownLinkObj( $wgTitle ) ) );
 
-                       list( $cascadeSources, $restrictions ) = $wgTitle->getCascadeProtectionSources();
+                       list( $cascadeSources, /* $restrictions */ ) = $wgTitle->getCascadeProtectionSources();
 
                        # Determine if protection is due to the page being a system message
                        # and show an appropriate explanation
@@ -910,7 +966,7 @@ class OutputPage {
                                        $titles .= '* [[:' . $title->getPrefixedText() . "]]\n";
                                }
 
-                               $notice = wfMsg( 'cascadeprotected' ) . "\n$titles";
+                               $notice = wfMsgExt( 'cascadeprotected', array('parsemag'), count($cascadeSources) ) . "\n$titles";
 
                                $this->addWikiText( $notice );
                        } else {
@@ -1098,9 +1154,10 @@ class OutputPage {
                $ret .= "<link rel='stylesheet' type='text/css' $media href='$printsheet' />\n";
 
                $sk = $wgUser->getSkin();
-               $ret .= $sk->getHeadScripts();
+               $ret .= $sk->getHeadScripts( $this->mAllowUserJs );
                $ret .= $this->mScripts;
                $ret .= $sk->getUserStyles();
+               $ret .= $this->getHeadItems();
 
                if ($wgUseTrackbacks && $this->isArticleRelated())
                        $ret .= $wgTitle->trackbackRDF();
@@ -1179,5 +1236,21 @@ class OutputPage {
        public function showNewSectionLink() {
                return $this->mNewSectionLink;
        }
+       
+       /**
+        * Show a warning about slave lag
+        *
+        * If the lag is higher than 30 seconds, then the warning is
+        * a bit more obvious
+        *
+        * @param int $lag Slave lag
+        */
+       public function showLagWarning( $lag ) {
+               $message = $lag >= 30 ? 'lag-warn-high' : 'lag-warn-normal';
+               $warning = wfMsgHtml( $message, htmlspecialchars( $lag ) );
+               $this->addHtml( "<div class=\"mw-{$message}\">\n{$warning}\n</div>\n" );
+       }
+       
 }
-?>
+
+?>
\ No newline at end of file