X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSkinTemplate.php;h=96fb4b1402836a3493bad772af9922bb1150fa67;hb=b7db9837bf4fc1ec1ecf6bc5a030b2d59f522878;hp=049d2a4e15a75702e33def6800a8c2ef390d880e;hpb=e8203d607aa0294ebcb95a0567adaa72f0792fd2;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 049d2a4e15..96fb4b1402 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -23,7 +23,7 @@ * 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. - * + * * PHPTAL support has been moved to a subclass in SkinPHPTal.php, * and is optional. You'll need to install PHPTAL manually to use * skins that depend on it. @@ -57,10 +57,10 @@ class MediaWiki_I18N { function translate($value) { $fname = 'SkinTemplate-translate'; wfProfileIn( $fname ); - + // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23 $value = preg_replace( '/^string:/', '', $value ); - + $value = wfMsg( $value ); // interpolate variables while (preg_match('/\$([0-9]*?)/sm', $value, $m)) { @@ -132,10 +132,10 @@ class SkinTemplate extends Skin { * @return object * @access private */ - function &setupTemplate( $classname, $repository=false, $cache_dir=false ) { + function setupTemplate( $classname, $repository=false, $cache_dir=false ) { return new $classname(); } - + /** * initialize various variables and generate the template * @@ -144,24 +144,25 @@ class SkinTemplate extends Skin { */ function outputPage( &$out ) { global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgContLang, $wgOut; - global $wgScript, $wgStylePath, $wgLanguageCode, $wgContLanguageCode, $wgUseNewInterlanguage; - global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest; - global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses; + global $wgScript, $wgStylePath, $wgContLanguageCode; + global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgRequest; + global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgHideInterlanguageLinks; global $wgMaxCredits, $wgShowCreditsIfMax; global $wgPageShowWatchingUsers; + global $wgUseTrackbacks; $fname = 'SkinTemplate::outputPage'; wfProfileIn( $fname ); - + extract( $wgRequest->getValues( 'oldid', 'diff' ) ); wfProfileIn( "$fname-init" ); $this->initPage( $out ); - $this->mTitle = $wgTitle; + $this->mTitle =& $wgTitle; $this->mUser =& $wgUser; - $tpl =& $this->setupTemplate( $this->template, 'skins' ); + $tpl = $this->setupTemplate( $this->template, 'skins' ); #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText $tpl->setTranslator(new MediaWiki_I18N()); @@ -177,7 +178,14 @@ class SkinTemplate extends Skin { $this->username = $wgUser->getName(); $userPage = $wgUser->getUserPage(); $this->userpage = $userPage->getPrefixedText(); - $this->userpageUrlDetails = $this->makeUrlDetails($this->userpage); + + if ( $wgUser->isLoggedIn() || $this->showIPinHeader() ) { + $this->userpageUrlDetails = $this->makeUrlDetails($this->userpage); + } else { + # This won't be used in the standard skins, but we define it to preserve the interface + # To save time, we check for existence + $this->userpageUrlDetails = $this->makeKnownUrlDetails($this->userpage); + } $this->usercss = $this->userjs = $this->userjsprev = false; $this->setupUserCss(); @@ -217,13 +225,18 @@ class SkinTemplate extends Skin { } else { $tpl->set( 'feeds', false ); } + if ($wgUseTrackbacks && $out->isArticleRelated()) + $tpl->set( 'trackbackhtml', $wgTitle->trackbackRDF()); + $tpl->setRef( 'mimetype', $wgMimeType ); $tpl->setRef( 'jsmimetype', $wgJsMimeType ); $tpl->setRef( 'charset', $wgOutputEncoding ); $tpl->set( 'headlinks', $out->getHeadLinks() ); + $tpl->set('headscripts', $out->getScript() ); $tpl->setRef( 'wgScript', $wgScript ); $tpl->setRef( 'skinname', $this->skinname ); $tpl->setRef( 'stylename', $this->stylename ); + $tpl->set( 'printable', $wgRequest->getBool( 'printable' ) ); $tpl->setRef( 'loggedin', $this->loggedin ); $tpl->set('nsclass', 'ns-'.$this->mTitle->getNamespace()); $tpl->set('notspecialpage', $this->mTitle->getNamespace() != NS_SPECIAL); @@ -242,9 +255,11 @@ class SkinTemplate extends Skin { $tpl->set( 'dir', $wgContLang->isRTL() ? "rtl" : "ltr" ); $tpl->set( 'rtl', $wgContLang->isRTL() ); $tpl->set( 'langname', $wgContLang->getLanguageName( $wgContLanguageCode ) ); + $tpl->set( 'showjumplinks', $wgUser->getOption( 'showjumplinks' ) ); $tpl->setRef( 'username', $this->username ); $tpl->setRef( 'userpage', $this->userpage); $tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href']); + $tpl->set( 'pagecss', $this->setupPageCss() ); $tpl->setRef( 'usercss', $this->usercss); $tpl->setRef( 'userjs', $this->userjs); $tpl->setRef( 'userjsprev', $this->userjsprev); @@ -310,7 +325,6 @@ class SkinTemplate extends Skin { $tpl->set('numberofwatchingusers', false); } - $tpl->set('lastmod', $this->lastModified()); $tpl->set('copyright',$this->getCopyright()); $this->credits = false; @@ -318,6 +332,8 @@ class SkinTemplate extends Skin { if (isset($wgMaxCredits) && $wgMaxCredits != 0) { require_once("Credits.php"); $this->credits = getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax); + } else { + $tpl->set('lastmod', $this->lastModified()); } $tpl->setRef( 'credits', $this->credits ); @@ -341,6 +357,7 @@ class SkinTemplate extends Skin { $tpl->set( 'copyrightico', $this->getCopyrightIcon() ); $tpl->set( 'poweredbyico', $this->getPoweredBy() ); $tpl->set( 'disclaimer', $this->disclaimerLink() ); + $tpl->set( 'privacy', $this->privacyLink() ); $tpl->set( 'about', $this->aboutLink() ); $tpl->setRef( 'debug', $out->mDebugtext ); @@ -353,11 +370,19 @@ class SkinTemplate extends Skin { # Language links $language_urls = array(); - foreach( $wgOut->getLanguageLinks() as $l ) { - $nt = Title::newFromText( $l ); - $language_urls[] = array('href' => $nt->getFullURL(), - 'text' => ($wgContLang->getLanguageName( $nt->getInterwiki()) != ''?$wgContLang->getLanguageName( $nt->getInterwiki()) : $l), - 'class' => $wgContLang->isRTL() ? 'rtl' : 'ltr'); + + if ( !$wgHideInterlanguageLinks ) { + foreach( $wgOut->getLanguageLinks() as $l ) { + $tmp = explode( ':', $l, 2 ); + $class = 'interwiki-' . $tmp[0]; + unset($tmp); + $nt = Title::newFromText( $l ); + $language_urls[] = array( + 'href' => $nt->getFullURL(), + 'text' => ($wgContLang->getLanguageName( $nt->getInterwiki()) != ''?$wgContLang->getLanguageName( $nt->getInterwiki()) : $l), + 'class' => $class + ); + } } if(count($language_urls)) { $tpl->setRef( 'language_urls', $language_urls); @@ -383,19 +408,19 @@ class SkinTemplate extends Skin { } else { $tpl->set( 'body_onload', false ); } - $tpl->set( 'navigation_urls', $this->buildNavigationUrls() ); + $tpl->set( 'sidebar', $this->buildSidebar() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); // execute template wfProfileIn( "$fname-execute" ); $res = $tpl->execute(); wfProfileOut( "$fname-execute" ); - + // result may be an error $this->printOrError( $res ); wfProfileOut( $fname ); } - + /** * Output the string, or print error message if it's * an error object of the appropriate type. @@ -414,62 +439,80 @@ class SkinTemplate extends Skin { * @access private */ function buildPersonalUrls() { + global $wgTitle, $wgShowIPinHeader, $wgContLang; + $fname = 'SkinTemplate::buildPersonalUrls'; + $pageurl = $wgTitle->getLocalURL(); wfProfileIn( $fname ); - + /* set up the default links for the personal toolbar */ - global $wgShowIPinHeader; $personal_urls = array(); if ($this->loggedin) { $personal_urls['userpage'] = array( 'text' => $this->username, 'href' => &$this->userpageUrlDetails['href'], - 'class' => $this->userpageUrlDetails['exists']?false:'new' + 'class' => $this->userpageUrlDetails['exists']?false:'new', + 'active' => ( $this->userpageUrlDetails['href'] == $pageurl ) ); $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); $personal_urls['mytalk'] = array( 'text' => wfMsg('mytalk'), 'href' => &$usertalkUrlDetails['href'], - 'class' => $usertalkUrlDetails['exists']?false:'new' + 'class' => $usertalkUrlDetails['exists']?false:'new', + 'active' => ( $usertalkUrlDetails['href'] == $pageurl ) ); + $href = $this->makeSpecialUrl('Preferences'); $personal_urls['preferences'] = array( 'text' => wfMsg('preferences'), - 'href' => $this->makeSpecialUrl('Preferences') + 'href' => $this->makeSpecialUrl('Preferences'), + 'active' => ( $href == $pageurl ) ); + $href = $this->makeSpecialUrl('Watchlist'); $personal_urls['watchlist'] = array( 'text' => wfMsg('watchlist'), - 'href' => $this->makeSpecialUrl('Watchlist') + 'href' => $href, + 'active' => ( $href == $pageurl ) ); + $href = $this->makeSpecialUrl("Contributions/$this->username"); $personal_urls['mycontris'] = array( 'text' => wfMsg('mycontris'), - 'href' => $this->makeSpecialUrl("Contributions/$this->username") + 'href' => $href + # FIXME # 'active' => ( $href == $pageurl . '/' . $this->username ) ); $personal_urls['logout'] = array( 'text' => wfMsg('userlogout'), - 'href' => $this->makeSpecialUrl('Userlogout','returnto=' . $this->thisurl ) + 'href' => $this->makeSpecialUrl( 'Userlogout', + $wgTitle->getNamespace() === NS_SPECIAL && $wgTitle->getText() === 'Preferences' ? '' : "returnto={$this->thisurl}" + ) ); } else { if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) { + $href = &$this->userpageUrlDetails['href']; $personal_urls['anonuserpage'] = array( 'text' => $this->username, - 'href' => &$this->userpageUrlDetails['href'], - 'class' => $this->userpageUrlDetails['exists']?false:'new' + 'href' => $href, + 'class' => $this->userpageUrlDetails['exists']?false:'new', + 'active' => ( $pageurl == $href ) ); $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); + $href = &$usertalkUrlDetails['href']; $personal_urls['anontalk'] = array( 'text' => wfMsg('anontalk'), - 'href' => &$usertalkUrlDetails['href'], - 'class' => $usertalkUrlDetails['exists']?false:'new' + 'href' => $href, + 'class' => $usertalkUrlDetails['exists']?false:'new', + 'active' => ( $pageurl == $href ) ); $personal_urls['anonlogin'] = array( 'text' => wfMsg('userlogin'), - 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ) + 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ), + 'active' => ( NS_SPECIAL == $wgTitle->getNamespace() && 'Userlogin' == $wgTitle->getDBkey() ) ); } else { $personal_urls['login'] = array( 'text' => wfMsg('userlogin'), - 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ) + 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ), + 'active' => ( NS_SPECIAL == $wgTitle->getNamespace() && 'Userlogin' == $wgTitle->getDBkey() ) ); } } @@ -477,18 +520,32 @@ class SkinTemplate extends Skin { 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 ) { + function tabAction( $title, $message, $selected, $query='', $checkEdit=false ) { $classes = array(); if( $selected ) { $classes[] = 'selected'; } if( $checkEdit && $title->getArticleId() == 0 ) { $classes[] = 'new'; + $query = 'action=edit'; } + + $text = wfMsg( $message ); + if ( $text == "<$message>" ) { + $text = wfMsg( 'nstab-main' ); + } + return array( 'class' => implode( ' ', $classes ), - 'text' => wfMsg( $message ), + 'text' => $text, 'href' => $title->getLocalUrl( $query ) ); } @@ -501,7 +558,7 @@ class SkinTemplate extends Skin { 'exists' => $title->getArticleID() != 0?true:false ); } - + function makeArticleUrlDetails( $name, $urlaction='' ) { $title = Title::newFromText( $name ); $title= $title->getSubjectPage(); @@ -511,48 +568,48 @@ class SkinTemplate extends Skin { 'exists' => $title->getArticleID() != 0?true:false ); } - + /** * an array of edit links by default used for the tabs * @return array * @access private */ function buildContentActionUrls () { - global $wgContLang, $wgUseValidation; + global $wgContLang, $wgUseValidation, $wgDBprefix, $wgValidationForAnons; $fname = 'SkinTemplate::buildContentActionUrls'; wfProfileIn( $fname ); - + global $wgUser, $wgRequest; $action = $wgRequest->getText( 'action' ); $section = $wgRequest->getText( 'section' ); - $oldid = $wgRequest->getVal( 'oldid' ); - $diff = $wgRequest->getVal( 'diff' ); $content_actions = array(); if( $this->iscontent ) { + $subjpage = $this->mTitle->getSubjectPage(); + $talkpage = $this->mTitle->getTalkPage(); $nskey = $this->getNameSpaceKey(); $content_actions[$nskey] = $this->tabAction( - $this->mTitle->getSubjectPage(), + $subjpage, $nskey, - !$this->mTitle->isTalkPage() ); - + !$this->mTitle->isTalkPage(), + '', true); + $content_actions['talk'] = $this->tabAction( - $this->mTitle->getTalkPage(), + $talkpage, 'talk', $this->mTitle->isTalkPage(), '', true); - + wfProfileIn( "$fname-edit" ); if ( $this->mTitle->userCanEdit() ) { - $oid = ( $oldid && ! isset( $diff ) ) ? '&oldid='.IntVal( $oldid ) : false; $istalk = $this->mTitle->isTalkPage(); $istalkclass = $istalk?' istalk':''; $content_actions['edit'] = array( 'class' => ((($action == 'edit' or $action == 'submit') and $section != 'new') ? 'selected' : '').$istalkclass, 'text' => wfMsg('edit'), - 'href' => $this->mTitle->getLocalUrl( 'action=edit'.$oid ) + 'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); if ( $istalk ) { @@ -563,11 +620,10 @@ class SkinTemplate extends Skin { ); } } else { - $oid = ( $oldid && ! isset( $diff ) ) ? '&oldid='.IntVal( $oldid ) : ''; $content_actions['viewsource'] = array( 'class' => ($action == 'edit') ? 'selected' : false, 'text' => wfMsg('viewsource'), - 'href' => $this->mTitle->getLocalUrl( 'action=edit'.$oid ) + 'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); } wfProfileOut( "$fname-edit" ); @@ -604,14 +660,12 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) ); } - if ( $wgUser->isLoggedIn() ) { - if ( $this->mTitle->userCanMove()) { - $content_actions['move'] = array( - 'class' => ($this->mTitle->getDbKey() == 'Movepage' and $this->mTitle->getNamespace == NS_SPECIAL) ? 'selected' : false, - 'text' => wfMsg('move'), - 'href' => $this->makeSpecialUrl("Movepage/$this->thispage" ) - ); - } + if ( $this->mTitle->userCanMove()) { + $content_actions['move'] = array( + 'class' => ($this->mTitle->getDbKey() == 'Movepage' and $this->mTitle->getNamespace == NS_SPECIAL) ? 'selected' : false, + 'text' => wfMsg('move'), + 'href' => $this->makeSpecialUrl("Movepage/$this->thispage" ) + ); } } else { //article doesn't exist or is deleted @@ -627,7 +681,7 @@ class SkinTemplate extends Skin { } wfProfileOut( "$fname-live" ); - if( $wgUser->isLoggedIn() and $action != 'submit' ) { + if( $this->loggedin ) { if( !$this->mTitle->userIsWatching()) { $content_actions['watch'] = array( 'class' => ($action == 'watch' or $action == 'unwatch') ? 'selected' : false, @@ -641,15 +695,17 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=unwatch' ) ); } + } - # Validate tab. TODO: add validation to logged-in user rights + if( $this->loggedin || $wgValidationForAnons ) { # and $action != 'submit' ) { + # Validate tab. TODO: add validation to logged-in user rights if($wgUseValidation && ( $action == "" || $action=='view' ) ){ # && $wgUser->isAllowed('validate')){ - if ( $oldid ) $oid = IntVal( $oldid ) ; # Use the oldid + if ( $this->mRevisionId ) $oid = intval( $this->mRevisionId ) ; # Use the oldid else {# Trying to get the current article revision through this weird stunt $tid = $this->mTitle->getArticleID(); $tns = $this->mTitle->getNamespace(); - $sql = "SELECT page_latest FROM page WHERE page_id={$tid} AND page_namespace={$tns}" ; + $sql = "SELECT page_latest FROM {$wgDBprefix}page WHERE page_id={$tid} AND page_namespace={$tns}" ; $res = wfQuery( $sql, DB_READ ); if( $s = wfFetchObject( $res ) ) $oid = $s->page_latest ; @@ -671,7 +727,7 @@ class SkinTemplate extends Skin { $content_actions['article'] = array( 'class' => 'selected', 'text' => wfMsg('specialpage'), - 'href' => false + 'href' => $wgRequest->getRequestURL(), // @bug 2457, 2510 ); } @@ -696,47 +752,15 @@ class SkinTemplate extends Skin { ); $vcount ++; } - } + } + wfRunHooks( 'SkinTemplateContentActions', array( &$content_actions ) ); + wfProfileOut( $fname ); return $content_actions; } - - function getNavigationLinks() { - global $wgNavigationLinks; - return $wgNavigationLinks; - } - /** - * build array of global navigation links - * @return array - * @access private - */ - function buildNavigationUrls () { - $fname = 'SkinTemplate::buildNavigationUrls'; - wfProfileIn( $fname ); - - $links = $this->getNavigationLinks(); - - $result = array(); - foreach ( $links as $link ) { - $text = wfMsg( $link['text'] ); - wfProfileIn( "$fname-{$link['text']}" ); - if ($text != '-') { - $dest = wfMsgForContent( $link['href'] ); - wfProfileIn( "$fname-{$link['text']}2" ); - $result[] = array( - 'text' => $text, - 'href' => $this->makeInternalOrExternalUrl( $dest ), - 'id' => 'n-'.$link['text'] - ); - wfProfileOut( "$fname-{$link['text']}2" ); - } - wfProfileOut( "$fname-{$link['text']}" ); - } - wfProfileOut( $fname ); - return $result; - } + /** * build array of common navigation links @@ -744,19 +768,21 @@ class SkinTemplate extends Skin { * @access private */ function buildNavUrls () { + global $wgUseTrackbacks, $wgTitle, $wgArticle; + $fname = 'SkinTemplate::buildNavUrls'; wfProfileIn( $fname ); - + global $wgUser, $wgRequest; global $wgSiteSupportPage, $wgEnableUploads, $wgUploadNavigationUrl; $action = $wgRequest->getText( 'action' ); $oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); - + $nav_urls = array(); $nav_urls['mainpage'] = array('href' => $this->makeI18nUrl('mainpage')); - $nav_urls['randompage'] = array('href' => $this->makeSpecialUrl('Randompage')); + $nav_urls['randompage'] = array('href' => $this->makeSpecialUrl('Random')); $nav_urls['recentchanges'] = array('href' => $this->makeSpecialUrl('Recentchanges')); $nav_urls['currentevents'] = (wfMsgForContent('currentevents') != '-') ? array('href' => $this->makeI18nUrl('currentevents')) : false; $nav_urls['portal'] = (wfMsgForContent('portal') != '-') ? array('href' => $this->makeI18nUrl('portal-url')) : false; @@ -766,15 +792,46 @@ class SkinTemplate extends Skin { $nav_urls['help'] = array('href' => $this->makeI18nUrl('helppage')); if( $wgEnableUploads ) { if ($wgUploadNavigationUrl) { - $nav_urls['upload'] = array('href' => $wgUploadNavigationUrl ); - } else { + $nav_urls['upload'] = array('href' => $wgUploadNavigationUrl ); + } else { $nav_urls['upload'] = array('href' => $this->makeSpecialUrl('Upload')); } } else { - $nav_urls['upload'] = false; + if ($wgUploadNavigationUrl) + $nav_urls['upload'] = array('href' => $wgUploadNavigationUrl ); + else + $nav_urls['upload'] = false; } $nav_urls['specialpages'] = array('href' => $this->makeSpecialUrl('Specialpages')); + + // 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->getRevIdFetched(); + if ( !( $revid == 0 ) ) + $nav_urls['print'] = array( + 'text' => wfMsg( 'printableversion' ), + 'href' => $wgRequest->appendQuery( 'printable=yes' ) + ); + + // Also add a "permalink" while we're at it + if ( (int)$oldid ) { + $nav_urls['permalink'] = array( + 'text' => wfMsg( 'permalink' ), + 'href' => '' + ); + } else { + if ( !( $revid == 0 ) ) + $nav_urls['permalink'] = array( + 'text' => wfMsg( 'permalink' ), + 'href' => $wgTitle->getLocalURL( "oldid=$revid" ) + ); + } + + wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink', array( &$this, &$nav_urls, &$oldid, &$revid ) ); + } + if( $this->mTitle->getNamespace() != NS_SPECIAL) { $nav_urls['whatlinkshere'] = array( 'href' => $this->makeSpecialUrl("Whatlinkshere/$this->thispage") @@ -782,6 +839,10 @@ class SkinTemplate extends Skin { $nav_urls['recentchangeslinked'] = array( 'href' => $this->makeSpecialUrl("Recentchangeslinked/$this->thispage") ); + if ($wgUseTrackbacks) + $nav_urls['trackbacklink'] = array( + 'href' => $wgTitle->trackbackURL() + ); } if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) { @@ -796,6 +857,10 @@ class SkinTemplate extends Skin { $nav_urls['contributions'] = array( 'href' => $this->makeSpecialUrl('Contributions/' . $this->mTitle->getText() ) ); + if ( $wgUser->isAllowed( 'protect' ) ) + $nav_urls['blockip'] = array( + 'href' => $this->makeSpecialUrl( 'Blockip/' . $this->mTitle->getText() ) + ); } else { $nav_urls['contributions'] = false; } @@ -845,17 +910,17 @@ class SkinTemplate extends Skin { case NS_CATEGORY_TALK: return 'nstab-category'; default: - return 'nstab-main'; + return 'nstab-' . strtolower( $this->mTitle->getSubjectNsText() ); } } - + /** * @access private */ function setupUserCss() { $fname = 'SkinTemplate::setupUserCss'; wfProfileIn( $fname ); - + global $wgRequest, $wgAllowUserCss, $wgUseSiteCss, $wgContLang, $wgSquidMaxage, $wgStylePath, $wgUser; $sitecss = ''; @@ -863,10 +928,10 @@ class SkinTemplate extends Skin { $siteargs = '&maxage=' . $wgSquidMaxage; # Add user-specific code if this is a user and we allow that kind of thing - + if ( $wgAllowUserCss && $this->loggedin ) { $action = $wgRequest->getText('action'); - + # if we're previewing the CSS page, use it if( $this->mTitle->isCssSubpage() and $this->userCanPreview( $action ) ) { $siteargs = "&smaxage=0&maxage=0"; @@ -881,15 +946,17 @@ class SkinTemplate extends Skin { } if ($wgContLang->isRTL()) $sitecss .= '@import "' . $wgStylePath . '/' . $this->stylename . '/rtl.css";' . "\n"; - + # If we use the site's dynamic CSS, throw that in, too if ( $wgUseSiteCss ) { - $sitecss .= '@import "' . $this->makeNSUrl(ucfirst($this->skinname) . '.css', 'action=raw&ctype=text/css&smaxage=' . $wgSquidMaxage, NS_MEDIAWIKI) . '";' . "\n"; + $query = "action=raw&ctype=text/css&smaxage=$wgSquidMaxage"; + $sitecss .= '@import "' . $this->makeNSUrl('Common.css', $query, NS_MEDIAWIKI) . '";' . "\n"; + $sitecss .= '@import "' . $this->makeNSUrl(ucfirst($this->skinname) . '.css', $query, NS_MEDIAWIKI) . '";' . "\n"; $sitecss .= '@import "' . $this->makeUrl('-','action=raw&gen=css' . $siteargs) . '";' . "\n"; } - + # If we use any dynamic CSS, make a little CDATA block out of it. - + if ( !empty($sitecss) || !empty($usercss) ) { $this->usercss = "/**/'; } @@ -902,7 +969,7 @@ class SkinTemplate extends Skin { function setupUserJs() { $fname = 'SkinTemplate::setupUserJs'; wfProfileIn( $fname ); - + global $wgRequest, $wgAllowUserJs, $wgJsMimeType; $action = $wgRequest->getText('action'); @@ -916,7 +983,22 @@ class SkinTemplate extends Skin { } wfProfileOut( $fname ); } - + + /** + * Code for extensions to hook into to provide per-page CSS, see + * extensions/PageCSS/PageCSS.php for an implementation of this. + * + * @access private + */ + function setupPageCss() { + $fname = 'SkinTemplate::setupPageCss'; + wfProfileIn( $fname ); + $out = false; + wfRunHooks( 'SkinTemplateSetupPageCss', array( &$out, $this->mTitle->isProtected() ) ); + wfProfileOut( $fname ); + return $out; + } + /** * returns css with user-specific options * @access public @@ -925,21 +1007,21 @@ class SkinTemplate extends Skin { function getUserStylesheet() { $fname = 'SkinTemplate::getUserStylesheet'; wfProfileIn( $fname ); - + global $wgUser; $s = "/* generated user stylesheet */\n"; $s .= $this->reallyDoGetUserStyles(); wfProfileOut( $fname ); return $s; } - + /** * @access public */ function getUserJs() { $fname = 'SkinTemplate::getUserJs'; wfProfileIn( $fname ); - + global $wgStylePath; $s = '/* generated javascript */'; $s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';"; @@ -952,7 +1034,7 @@ class SkinTemplate extends Skin { if ('<'.$msgKey.'>' != $userJS) { $s .= $userJS; } - + wfProfileOut( $fname ); return $s; } @@ -972,28 +1054,28 @@ class QuickTemplate { $this->data = array(); $this->translator = new MediaWiki_I18N(); } - + /** * @access public */ function set( $name, $value ) { $this->data[$name] = $value; } - + /** * @access public */ function setRef($name, &$value) { $this->data[$name] =& $value; } - + /** * @access public */ function setTranslator( &$t ) { $this->translator = &$t; } - + /** * @access public */ @@ -1008,48 +1090,48 @@ class QuickTemplate { function text( $str ) { echo htmlspecialchars( $this->data[$str] ); } - + /** * @access private */ function html( $str ) { echo $this->data[$str]; } - + /** * @access private */ function msg( $str ) { echo htmlspecialchars( $this->translator->translate( $str ) ); } - + /** * @access private */ function msgHtml( $str ) { echo $this->translator->translate( $str ); } - + /** * An ugly, ugly hack. * @access private */ function msgWiki( $str ) { - global $wgParser, $wgTitle, $wgOut, $wgUseTidy; + global $wgParser, $wgTitle, $wgOut; $text = $this->translator->translate( $str ); $parserOutput = $wgParser->parse( $text, $wgTitle, $wgOut->mParserOptions, true ); echo $parserOutput->getText(); } - + /** * @access private */ function haveData( $str ) { return $this->data[$str]; } - + /** * @access private */ @@ -1059,5 +1141,5 @@ class QuickTemplate { } } -} // end of if( defined( 'MEDIAWIKI' ) ) +} // end of if( defined( 'MEDIAWIKI' ) ) ?>