diff options
Diffstat (limited to 'includes/SkinTemplate.php')
-rw-r--r-- | includes/SkinTemplate.php | 114 |
1 files changed, 61 insertions, 53 deletions
diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index ff095477..cddd2195 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -18,25 +18,11 @@ if ( ! defined( 'MEDIAWIKI' ) ) # http://www.gnu.org/copyleft/gpl.html /** - * Template-filler skin base class - * Formerly generic PHPTal (http://phptal.sourceforge.net/) skin - * Based on Brion's smarty skin - * Copyright (C) Gabriel Wicke -- http://www.aulinx.de/ - * - * Todo: Needs some serious refactoring into functions that correspond - * to the computations individual esi snippets need. Most importantly no body - * parsing for most of those of course. - * - * @package MediaWiki - * @subpackage Skins - */ - -/** * Wrapper object for MediaWiki's localization functions, * to be passed to the template engine. * * @private - * @package MediaWiki + * @addtogroup Skins */ class MediaWiki_I18N { var $_context = array(); @@ -68,8 +54,16 @@ class MediaWiki_I18N { } /** + * Template-filler skin base class + * Formerly generic PHPTal (http://phptal.sourceforge.net/) skin + * Based on Brion's smarty skin + * @copyright Copyright © Gabriel Wicke -- http://www.aulinx.de/ + * + * @todo Needs some serious refactoring into functions that correspond + * to the computations individual esi snippets need. Most importantly no body + * parsing for most of those of course. * - * @package MediaWiki + * @addtogroup Skins */ class SkinTemplate extends Skin { /**#@+ @@ -193,9 +187,9 @@ class SkinTemplate extends Skin { $tpl->set( 'title', $wgOut->getPageTitle() ); $tpl->set( 'pagetitle', $wgOut->getHTMLTitle() ); $tpl->set( 'displaytitle', $wgOut->mPageLinkTitle ); - $tpl->set( 'pageclass', Sanitizer::escapeClass( 'page-'.$wgTitle->getPrefixedText() ) ); + $tpl->set( 'pageclass', Sanitizer::escapeClass( 'page-'.$this->mTitle->getPrefixedText() ) ); - $nsname = isset( $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] ) ? + $nsname = isset( $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] ) ? $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] : $this->mTitle->getNsText(); @@ -339,8 +333,8 @@ class SkinTemplate extends Skin { $tpl->setRef( 'newtalk', $ntl ); $tpl->setRef( 'skin', $this); $tpl->set( 'logo', $this->logoText() ); - if ( $wgOut->isArticle() and (!isset( $oldid ) or isset( $diff )) and - $wgArticle and 0 != $wgArticle->getID() ) + if ( $wgOut->isArticle() and (!isset( $oldid ) or isset( $diff )) and + $wgArticle and 0 != $wgArticle->getID() ) { if ( !$wgDisableCounters ) { $viewcount = $wgLang->formatNum( $wgArticle->getCount() ); @@ -354,7 +348,7 @@ class SkinTemplate extends Skin { } if ($wgPageShowWatchingUsers) { - $dbr =& wfGetDB( DB_SLAVE ); + $dbr = wfGetDB( DB_SLAVE ); $watchlist = $dbr->tableName( 'watchlist' ); $sql = "SELECT COUNT(*) AS n FROM $watchlist WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) . @@ -458,6 +452,11 @@ class SkinTemplate extends Skin { $tpl->set( 'sidebar', $this->buildSidebar() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); + // original version by hansm + if( !wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) { + wfDebug( __METHOD__ . ': Hook SkinTemplateOutputPageBeforeExec broke outputPage execution!' ); + } + // execute template wfProfileIn( "$fname-execute" ); $res = $tpl->execute(); @@ -476,7 +475,7 @@ class SkinTemplate extends Skin { * @param mixed $str * @private */ - function printOrError( &$str ) { + function printOrError( $str ) { echo $str; } @@ -486,7 +485,7 @@ class SkinTemplate extends Skin { * @private */ function buildPersonalUrls() { - global $wgTitle, $wgShowIPinHeader; + global $wgTitle, $wgRequest; $fname = 'SkinTemplate::buildPersonalUrls'; $pageurl = $wgTitle->getLocalURL(); @@ -511,22 +510,37 @@ class SkinTemplate extends Skin { $href = self::makeSpecialUrl( 'Preferences' ); $personal_urls['preferences'] = array( 'text' => wfMsg( 'mypreferences' ), - 'href' => self::makeSpecialUrl( 'Preferences' ), + 'href' => $href, 'active' => ( $href == $pageurl ) ); $href = self::makeSpecialUrl( 'Watchlist' ); $personal_urls['watchlist'] = array( - 'text' => wfMsg( 'watchlist' ), + 'text' => wfMsg( 'mywatchlist' ), 'href' => $href, 'active' => ( $href == $pageurl ) ); + + # We need to do an explicit check for Special:Contributions, as we + # have to match both the title, and the target (which could come + # from request values or be specified in "sub page" form. The plot + # thickens, because $wgTitle is altered for special pages, so doesn't + # contain the original alias-with-subpage. + $title = Title::newFromText( $wgRequest->getText( 'title' ) ); + if( $title instanceof Title && $title->getNamespace() == NS_SPECIAL ) { + list( $spName, $spPar ) = + SpecialPage::resolveAliasWithSubpage( $title->getText() ); + $active = $spName == 'Contributions' + && ( ( $spPar && $spPar == $this->username ) + || $wgRequest->getText( 'target' ) == $this->username ); + } else { + $active = false; + } + $href = self::makeSpecialUrlSubpage( 'Contributions', $this->username ); $personal_urls['mycontris'] = array( 'text' => wfMsg( 'mycontris' ), 'href' => $href, - // FIXME # 'active' was disabed in r11346 with message: "disable bold link to my contributions; link was bold on all - // Special:Contributions, not just current user's (fix me please!)". Until resolved, explicitly setting active to false. - 'active' => false # ( ( $href == $pageurl . '/' . $this->username ) + 'active' => $active ); $personal_urls['logout'] = array( 'text' => wfMsg( 'userlogout' ), @@ -536,7 +550,7 @@ class SkinTemplate extends Skin { 'active' => false ); } else { - if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) { + if( $this->showIPinHeader() ) { $href = &$this->userpageUrlDetails['href']; $personal_urls['anonuserpage'] = array( 'text' => $this->username, @@ -555,7 +569,7 @@ class SkinTemplate extends Skin { $personal_urls['anonlogin'] = array( 'text' => wfMsg('userlogin'), 'href' => self::makeSpecialUrl( 'Userlogin', 'returnto=' . $this->thisurl ), - 'active' => $wgTitle->isSpecial( 'Userlogin' ) + 'active' => $wgTitle->isSpecial( 'Userlogin' ) ); } else { @@ -567,19 +581,11 @@ class SkinTemplate extends Skin { } } - wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$wgTitle ) ); + wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$wgTitle ) ); wfProfileOut( $fname ); return $personal_urls; } - /** - * Returns true if the IP should be shown in the header - */ - function showIPinHeader() { - global $wgShowIPinHeader; - return $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ); - } - function tabAction( $title, $message, $selected, $query='', $checkEdit=false ) { $classes = array(); if( $selected ) { @@ -604,6 +610,9 @@ class SkinTemplate extends Skin { function makeTalkUrlDetails( $name, $urlaction = '' ) { $title = Title::newFromText( $name ); + if( !is_object($title) ) { + throw new MWException( __METHOD__." given invalid pagename $name" ); + } $title = $title->getTalkPage(); self::checkTitle( $title, $name ); return array( @@ -659,7 +668,7 @@ class SkinTemplate extends Skin { true); wfProfileIn( "$fname-edit" ); - if ( $this->mTitle->userCanEdit() && ( $this->mTitle->exists() || $this->mTitle->userCanCreate() ) ) { + if ( $this->mTitle->quickUserCan( 'edit' ) && ( $this->mTitle->exists() || $this->mTitle->quickUserCan( 'create' ) ) ) { $istalk = $this->mTitle->isTalkPage(); $istalkclass = $istalk?' istalk':''; $content_actions['edit'] = array( @@ -716,7 +725,7 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) ); } - if ( $this->mTitle->userCanMove()) { + if ( $this->mTitle->quickUserCan( 'move' ) ) { $moveTitle = SpecialPage::getTitleFor( 'Movepage', $this->thispage ); $content_actions['move'] = array( 'class' => $this->mTitle->isSpecial( 'Movepage' ) ? 'selected' : false, @@ -755,6 +764,7 @@ class SkinTemplate extends Skin { ); } } + wfRunHooks( 'SkinTemplateTabs', array( &$this , &$content_actions ) ) ; } else { @@ -762,7 +772,7 @@ class SkinTemplate extends Skin { $content_actions[$this->mTitle->getNamespaceKey()] = array( 'class' => 'selected', - 'text' => wfMsg('specialpage'), + 'text' => wfMsg('nstab-special'), 'href' => $wgRequest->getRequestURL(), // @bug 2457, 2510 ); @@ -832,16 +842,14 @@ class SkinTemplate extends Skin { // default permalink to being off, will override it as required below. $nav_urls['permalink'] = false; - + // A print stylesheet is attached to all pages, but nobody ever // figures that out. :) Add a link... if( $this->iscontent && ($action == '' || $action == 'view' || $action == 'purge' ) ) { - $revid = $wgArticle ? $wgArticle->getLatest() : 0; - if ( !( $revid == 0 ) ) - $nav_urls['print'] = array( - 'text' => wfMsg( 'printableversion' ), - 'href' => $wgRequest->appendQuery( 'printable=yes' ) - ); + $nav_urls['print'] = array( + 'text' => wfMsg( 'printableversion' ), + 'href' => $wgRequest->appendQuery( 'printable=yes' ) + ); // Also add a "permalink" while we're at it if ( (int)$oldid ) { @@ -850,6 +858,7 @@ class SkinTemplate extends Skin { 'href' => '' ); } else { + $revid = $wgArticle ? $wgArticle->getLatest() : 0; if ( !( $revid == 0 ) ) $nav_urls['permalink'] = array( 'text' => wfMsg( 'permalink' ), @@ -894,7 +903,7 @@ class SkinTemplate extends Skin { if ( $wgUser->isAllowed( 'block' ) ) { $nav_urls['blockip'] = array( 'href' => self::makeSpecialUrlSubpage( 'Blockip', $this->mTitle->getText() ) - ); + ); } else { $nav_urls['blockip'] = false; } @@ -1010,7 +1019,7 @@ class SkinTemplate extends Skin { wfProfileIn( $fname ); $out = false; wfRunHooks( 'SkinTemplateSetupPageCss', array( &$out ) ); - + wfProfileOut( $fname ); return $out; } @@ -1065,8 +1074,7 @@ class SkinTemplate extends Skin { /** * Generic wrapper for template functions, with interface * compatible with what we use of PHPTAL 0.7. - * @package MediaWiki - * @subpackage Skins + * @addtogroup Skins */ class QuickTemplate { /** |