X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FOutputPage.php;h=458907fbfd522253c4d6400e8f43411d62787a44;hb=a048101d7604543e8f502b9971c0517a0bba4a1a;hp=1dd42124ea30ef458fd73366574932341734ba9c;hpb=86f4602db09511141a4be880288d233171106a87;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/OutputPage.php b/includes/OutputPage.php index 1dd42124ea..458907fbfd 100644 --- a/includes/OutputPage.php +++ b/includes/OutputPage.php @@ -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; @@ -69,7 +73,14 @@ class OutputPage { # To add an http-equiv meta tag, precede the name with "http:" function addMeta( $name, $val ) { array_push( $this->mMetatags, array( $name, $val ) ); } function addKeyword( $text ) { array_push( $this->mKeywords, $text ); } - function addScript( $script ) { $this->mScripts .= $script; } + 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 .= ""; + $this->mScripts .= ""; + } + + function getScript() { + return $this->mScripts . $this->getHeadItems(); + } + + function getHeadItems() { + $s = ''; + foreach ( $this->mHeadItems as $item ) { + $s .= $item; + } + return $s; } - function getScript() { return $this->mScripts; } + function addHeadItem( $name, $value ) { + $this->mHeadItems[$name] = $value; + } function setETag($tag) { $this->mETag = $tag; } function setArticleBodyOnly($only) { $this->mArticleBodyOnly = $only; } @@ -252,7 +277,7 @@ class OutputPage { $lb->setArray( $arr ); $lb->execute(); - $sk =& $wgUser->getSkin(); + $sk = $wgUser->getSkin(); foreach ( $categories as $category => $unused ) { $title = Title::makeTitleSafe( NS_CATEGORY, $category ); $text = $wgContLang->convertHtml( $title->getText() ); @@ -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 ) ); } @@ -489,7 +518,7 @@ class OutputPage { # maintain different caches for logged-in users and non-logged in ones $wgRequest->response()->header( 'Vary: Accept-Encoding, Cookie' ); if( !$this->uncacheableBecauseRequestvars() && $this->mEnableClientCache ) { - if( $wgUseSquid && ! isset( $_COOKIE[ini_get( 'session.name') ] ) && + if( $wgUseSquid && session_id() == '' && ! $this->isPrintable() && $this->mSquidMaxage != 0 ) { if ( $wgUseESI ) { @@ -549,13 +578,16 @@ class OutputPage { if ( $wgUseAjax ) { $this->addScript( "\n" ); + + wfRunHooks( 'AjaxAddScript', array( &$this ) ); + if( $wgAjaxSearch ) { - $this->addScript( "\n" ); + $this->addScript( "\n" ); $this->addScript( "\n" ); } if( $wgAjaxWatch && $wgUser->isLoggedIn() ) { - $this->addScript( "\n" ); + $this->addScript( "\n" ); } } @@ -574,6 +606,7 @@ class OutputPage { $this->sendCacheControl(); + $wgRequest->response()->header("Content-Type: text/html; charset=utf-8"); if( $wgDebugRedirects ) { $url = htmlspecialchars( $this->mRedirect ); print "\n\nRedirect\n\n\n"; @@ -710,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' ); @@ -729,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 ) { @@ -739,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: ' . @@ -756,13 +813,16 @@ 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 ); } - /** @obsolete */ + /** @deprecated */ public function errorpage( $title, $msg ) { throw new ErrorPageError( $title, $msg ); } @@ -804,10 +864,10 @@ class OutputPage { $groupName = User::getGroupName( $key ); $groupPage = User::getGroupPage( $key ); if( $groupPage ) { - $skin =& $wgUser->getSkin(); - $groups[] = '"'.$skin->makeLinkObj( $groupPage, $groupName ).'"'; + $skin = $wgUser->getSkin(); + $groups[] = $skin->makeLinkObj( $groupPage, $groupName ); } else { - $groups[] = '"'.$groupName.'"'; + $groups[] = $groupName; } } } @@ -872,7 +932,7 @@ class OutputPage { $this->returnToMain( true, $mainPage ); } - /** @obsolete */ + /** @deprecated */ public function databaseError( $fname, $sql, $error, $errno ) { throw new MWException( "OutputPage::databaseError is obsolete\n" ); } @@ -893,7 +953,7 @@ class OutputPage { $this->setPageTitle( wfMsg( 'viewsource' ) ); $this->setSubtitle( wfMsg( 'viewsourcefor', $skin->makeKnownLinkObj( $wgTitle ) ) ); - $cascadeSources = $wgTitle->getCascadeProtectionSources(); + list( $cascadeSources, /* $restrictions */ ) = $wgTitle->getCascadeProtectionSources(); # Determine if protection is due to the page being a system message # and show an appropriate explanation @@ -906,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 { @@ -936,32 +996,32 @@ class OutputPage { $this->returnToMain( false ); } - /** @obsolete */ + /** @deprecated */ public function fatalError( $message ) { throw new FatalError( $message ); } - /** @obsolete */ + /** @deprecated */ public function unexpectedValueError( $name, $val ) { throw new FatalError( wfMsg( 'unexpected', $name, $val ) ); } - /** @obsolete */ + /** @deprecated */ public function fileCopyError( $old, $new ) { throw new FatalError( wfMsg( 'filecopyerror', $old, $new ) ); } - /** @obsolete */ + /** @deprecated */ public function fileRenameError( $old, $new ) { throw new FatalError( wfMsg( 'filerenameerror', $old, $new ) ); } - /** @obsolete */ + /** @deprecated */ public function fileDeleteError( $name ) { throw new FatalError( wfMsg( 'filedeleteerror', $name ) ); } - /** @obsolete */ + /** @deprecated */ public function fileNotFoundError( $name ) { throw new FatalError( wfMsg( 'filenotfound', $name ) ); } @@ -1094,9 +1154,10 @@ class OutputPage { $ret .= "\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(); @@ -1175,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( "
\n{$warning}\n
\n" ); + } + } -?> + +?> \ No newline at end of file