X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSkinTemplate.php;h=fa1ed86dfa18e181892a705812162669cea93931;hb=bfbf6d8a354a861c34b42d2d864b9f026d333705;hp=6ce406064046c21981f31f76d57b38c0d8289340;hpb=41c9a5550f6a7b356ff7a56712916ff5a5519b58;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 6ce4060640..fa1ed86dfa 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -22,7 +22,7 @@ if ( ! defined( 'MEDIAWIKI' ) ) * to be passed to the template engine. * * @private - * @addtogroup Skins + * @ingroup Skins */ class MediaWiki_I18N { var $_context = array(); @@ -32,8 +32,7 @@ class MediaWiki_I18N { } function translate($value) { - $fname = 'SkinTemplate-translate'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); // Hack for i18n:attributes in PHPTAL 1.0.0 dev version as of 2004-10-23 $value = preg_replace( '/^string:/', '', $value ); @@ -48,7 +47,7 @@ class MediaWiki_I18N { wfRestoreWarnings(); $value = str_replace($src, $varValue, $value); } - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $value; } } @@ -63,7 +62,7 @@ class MediaWiki_I18N { * to the computations individual esi snippets need. Most importantly no body * parsing for most of those of course. * - * @addtogroup Skins + * @ingroup Skins */ class SkinTemplate extends Skin { /**#@+ @@ -136,17 +135,12 @@ class SkinTemplate extends Skin { global $wgUseTrackbacks; global $wgArticlePath, $wgScriptPath, $wgServer, $wgLang, $wgCanonicalNamespaceNames; - $fname = 'SkinTemplate::outputPage'; - wfProfileIn( $fname ); - - // Hook that allows last minute changes to the output page, e.g. - // adding of CSS or Javascript by extensions. - wfRunHooks( 'BeforePageDisplay', array( &$out ) ); + wfProfileIn( __METHOD__ ); $oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); - wfProfileIn( "$fname-init" ); + wfProfileIn( __METHOD__."-init" ); $this->initPage( $out ); $this->mTitle =& $wgTitle; @@ -157,9 +151,9 @@ class SkinTemplate extends Skin { #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText $tpl->setTranslator(new MediaWiki_I18N()); #} - wfProfileOut( "$fname-init" ); + wfProfileOut( __METHOD__."-init" ); - wfProfileIn( "$fname-stuff" ); + wfProfileIn( __METHOD__."-stuff" ); $this->thispage = $this->mTitle->getPrefixedDbKey(); $this->thisurl = $this->mTitle->getPrefixedURL(); $this->loggedin = $wgUser->isLoggedIn(); @@ -181,9 +175,9 @@ class SkinTemplate extends Skin { $this->setupUserCss(); $this->setupUserJs( $out->isUserJsAllowed() ); $this->titletxt = $this->mTitle->getPrefixedText(); - wfProfileOut( "$fname-stuff" ); + wfProfileOut( __METHOD__."-stuff" ); - wfProfileIn( "$fname-stuff2" ); + wfProfileIn( __METHOD__."-stuff2" ); $tpl->set( 'title', $wgOut->getPageTitle() ); $tpl->set( 'pagetitle', $wgOut->getHTMLTitle() ); $tpl->set( 'displaytitle', $wgOut->mPageLinkTitle ); @@ -219,17 +213,10 @@ class SkinTemplate extends Skin { $tpl->set( 'catlinks', $this->getCategories()); if( $wgOut->isSyndicated() ) { $feeds = array(); - foreach( $wgFeedClasses as $format => $class ) { - $linktext = $format; - if ( $format == "atom" ) { - $linktext = wfMsg( 'feed-atom' ); - } else if ( $format == "rss" ) { - $linktext = wfMsg( 'feed-rss' ); - } + foreach( $wgOut->getSyndicationLinks() as $format => $link ) { $feeds[$format] = array( - 'text' => $linktext, - 'href' => $wgRequest->appendQuery( "feed=$format" ) - ); + 'text' => wfMsg( "feed-$format" ), + 'href' => $link ); } $tpl->setRef( 'feeds', $feeds ); } else { @@ -280,6 +267,7 @@ class SkinTemplate extends Skin { $tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href']); $tpl->set( 'userlang', $wgLang->getCode() ); $tpl->set( 'pagecss', $this->setupPageCss() ); + $tpl->set( 'printcss', $this->getPrintCss() ); $tpl->setRef( 'usercss', $this->usercss); $tpl->setRef( 'userjs', $this->userjs); $tpl->setRef( 'userjsprev', $this->userjsprev); @@ -327,9 +315,9 @@ class SkinTemplate extends Skin { } else { $ntl = ''; } - wfProfileOut( "$fname-stuff2" ); + wfProfileOut( __METHOD__."-stuff2" ); - wfProfileIn( "$fname-stuff3" ); + wfProfileIn( __METHOD__."-stuff3" ); $tpl->setRef( 'newtalk', $ntl ); $tpl->setRef( 'skin', $this); $tpl->set( 'logo', $this->logoText() ); @@ -351,13 +339,16 @@ class SkinTemplate extends Skin { $dbr = wfGetDB( DB_SLAVE ); $watchlist = $dbr->tableName( 'watchlist' ); $sql = "SELECT COUNT(*) AS n FROM $watchlist - WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) . + WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBkey()) . "' AND wl_namespace=" . $this->mTitle->getNamespace() ; $res = $dbr->query( $sql, 'SkinTemplate::outputPage'); $x = $dbr->fetchObject( $res ); $numberofwatchingusers = $x->n; if ($numberofwatchingusers > 0) { - $tpl->set('numberofwatchingusers', wfMsg('number_of_watching_users_pageview', $numberofwatchingusers)); + $tpl->set('numberofwatchingusers', + wfMsgExt('number_of_watching_users_pageview', array('parseinline'), + $wgLang->formatNum($numberofwatchingusers)) + ); } else { $tpl->set('numberofwatchingusers', false); } @@ -391,9 +382,9 @@ class SkinTemplate extends Skin { $tpl->set('credits', false); $tpl->set('numberofwatchingusers', false); } - wfProfileOut( "$fname-stuff3" ); + wfProfileOut( __METHOD__."-stuff3" ); - wfProfileIn( "$fname-stuff4" ); + wfProfileIn( __METHOD__."-stuff4" ); $tpl->set( 'copyrightico', $this->getCopyrightIcon() ); $tpl->set( 'poweredbyico', $this->getPoweredBy() ); $tpl->set( 'disclaimer', $this->disclaimerLink() ); @@ -401,7 +392,7 @@ class SkinTemplate extends Skin { $tpl->set( 'about', $this->aboutLink() ); $tpl->setRef( 'debug', $out->mDebugtext ); - $tpl->set( 'reporttime', $out->reportTime() ); + $tpl->set( 'reporttime', wfReportTime() ); $tpl->set( 'sitenotice', wfGetSiteNotice() ); $tpl->set( 'bottomscripts', $this->bottomScripts() ); @@ -430,7 +421,7 @@ class SkinTemplate extends Skin { } else { $tpl->set('language_urls', false); } - wfProfileOut( "$fname-stuff4" ); + wfProfileOut( __METHOD__."-stuff4" ); # Personal toolbar $tpl->set('personal_urls', $this->buildPersonalUrls()); @@ -445,11 +436,7 @@ class SkinTemplate extends Skin { } else { $tpl->set('body_ondblclick', false); } - if( $this->iseditable && $wgUser->getOption( 'editsectiononrightclick' ) ) { - $tpl->set( 'body_onload', 'setupRightClickEdit()' ); - } else { - $tpl->set( 'body_onload', false ); - } + $tpl->set( 'body_onload', false ); $tpl->set( 'sidebar', $this->buildSidebar() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); @@ -459,13 +446,13 @@ class SkinTemplate extends Skin { } // execute template - wfProfileIn( "$fname-execute" ); + wfProfileIn( __METHOD__."-execute" ); $res = $tpl->execute(); - wfProfileOut( "$fname-execute" ); + wfProfileOut( __METHOD__."-execute" ); // result may be an error $this->printOrError( $res ); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); } /** @@ -488,9 +475,8 @@ class SkinTemplate extends Skin { function buildPersonalUrls() { global $wgTitle, $wgRequest; - $fname = 'SkinTemplate::buildPersonalUrls'; $pageurl = $wgTitle->getLocalURL(); - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); /* set up the default links for the personal toolbar */ $personal_urls = array(); @@ -520,14 +506,14 @@ class SkinTemplate extends Skin { '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 ) { + if( $title instanceof Title && $title->getNamespace() == NS_SPECIAL ) { list( $spName, $spPar ) = SpecialPage::resolveAliasWithSubpage( $title->getText() ); $active = $spName == 'Contributions' @@ -536,7 +522,7 @@ class SkinTemplate extends Skin { } else { $active = false; } - + $href = self::makeSpecialUrlSubpage( 'Contributions', $this->username ); $personal_urls['mycontris'] = array( 'text' => wfMsg( 'mycontris' ), @@ -551,6 +537,10 @@ class SkinTemplate extends Skin { 'active' => false ); } else { + global $wgUser; + $loginlink = $wgUser->isAllowed( 'createaccount' ) + ? 'nav-login-createaccount' + : 'login'; if( $this->showIPinHeader() ) { $href = &$this->userpageUrlDetails['href']; $personal_urls['anonuserpage'] = array( @@ -568,14 +558,14 @@ class SkinTemplate extends Skin { 'active' => ( $pageurl == $href ) ); $personal_urls['anonlogin'] = array( - 'text' => wfMsg('userlogin'), + 'text' => wfMsg( $loginlink ), 'href' => self::makeSpecialUrl( 'Userlogin', 'returnto=' . $this->thisurl ), 'active' => $wgTitle->isSpecial( 'Userlogin' ) ); } else { $personal_urls['login'] = array( - 'text' => wfMsg('userlogin'), + 'text' => wfMsg( $loginlink ), 'href' => self::makeSpecialUrl( 'Userlogin', 'returnto=' . $this->thisurl ), 'active' => $wgTitle->isSpecial( 'Userlogin' ) ); @@ -583,7 +573,7 @@ class SkinTemplate extends Skin { } wfRunHooks( 'PersonalUrls', array( &$personal_urls, &$wgTitle ) ); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $personal_urls; } @@ -600,7 +590,14 @@ class SkinTemplate extends Skin { $text = wfMsg( $message ); if ( wfEmptyMsg( $message, $text ) ) { global $wgContLang; - $text = $wgContLang->getFormattedNsText( Namespace::getSubject( $title->getNamespace() ) ); + $text = $wgContLang->getFormattedNsText( MWNamespace::getSubject( $title->getNamespace() ) ); + } + + $result = array(); + if( !wfRunHooks('SkinTemplateTabAction', array(&$this, + $title, $message, $selected, $checkEdit, + &$classes, &$query, &$text, &$result)) ) { + return $result; } return array( @@ -638,9 +635,8 @@ class SkinTemplate extends Skin { * @private */ function buildContentActionUrls () { - global $wgContLang, $wgOut; - $fname = 'SkinTemplate::buildContentActionUrls'; - wfProfileIn( $fname ); + global $wgContLang, $wgLang, $wgOut; + wfProfileIn( __METHOD__ ); global $wgUser, $wgRequest; $action = $wgRequest->getText( 'action' ); @@ -668,13 +664,15 @@ class SkinTemplate extends Skin { '', true); - wfProfileIn( "$fname-edit" ); + wfProfileIn( __METHOD__."-edit" ); if ( $this->mTitle->quickUserCan( 'edit' ) && ( $this->mTitle->exists() || $this->mTitle->quickUserCan( 'create' ) ) ) { $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'), + 'text' => $this->mTitle->exists() + ? wfMsg( 'edit' ) + : wfMsg( 'create' ), 'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); @@ -685,16 +683,16 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=edit§ion=new' ) ); } - } else { + } elseif ( $this->mTitle->exists() || $this->mTitle->isAlwaysKnown() ) { $content_actions['viewsource'] = array( 'class' => ($action == 'edit') ? 'selected' : false, 'text' => wfMsg('viewsource'), 'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); } - wfProfileOut( "$fname-edit" ); + wfProfileOut( __METHOD__."-edit" ); - wfProfileIn( "$fname-live" ); + wfProfileIn( __METHOD__."-live" ); if ( $this->mTitle->getArticleId() ) { $content_actions['history'] = array( @@ -703,6 +701,22 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=history') ); + if($wgUser->isAllowed('delete')){ + $content_actions['delete'] = array( + 'class' => ($action == 'delete') ? 'selected' : false, + 'text' => wfMsg('delete'), + 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) + ); + } + if ( $this->mTitle->quickUserCan( 'move' ) ) { + $moveTitle = SpecialPage::getTitleFor( 'Movepage', $this->thispage ); + $content_actions['move'] = array( + 'class' => $this->mTitle->isSpecial( 'Movepage' ) ? 'selected' : false, + 'text' => wfMsg('move'), + 'href' => $moveTitle->getLocalUrl() + ); + } + if ( $this->mTitle->getNamespace() !== NS_MEDIAWIKI && $wgUser->isAllowed( 'protect' ) ) { if(!$this->mTitle->isProtected()){ $content_actions['protect'] = array( @@ -719,36 +733,39 @@ class SkinTemplate extends Skin { ); } } - if($wgUser->isAllowed('delete')){ - $content_actions['delete'] = array( - 'class' => ($action == 'delete') ? 'selected' : false, - 'text' => wfMsg('delete'), - 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) - ); - } - if ( $this->mTitle->quickUserCan( 'move' ) ) { - $moveTitle = SpecialPage::getTitleFor( 'Movepage', $this->thispage ); - $content_actions['move'] = array( - 'class' => $this->mTitle->isSpecial( 'Movepage' ) ? 'selected' : false, - 'text' => wfMsg('move'), - 'href' => $moveTitle->getLocalUrl() - ); - } } else { //article doesn't exist or is deleted - if( $wgUser->isAllowed( 'delete' ) ) { + if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'undelete' ) ) { if( $n = $this->mTitle->isDeleted() ) { $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); $content_actions['undelete'] = array( 'class' => false, - 'text' => wfMsgExt( 'undelete_short', array( 'parsemag' ), $n ), + 'text' => wfMsgExt( 'undelete_short', array( 'parsemag' ), $wgLang->formatNum($n) ), 'href' => $undelTitle->getLocalUrl( 'target=' . urlencode( $this->thispage ) ) #'href' => self::makeSpecialUrl( "Undelete/$this->thispage" ) ); } } + + if ( $this->mTitle->getNamespace() !== NS_MEDIAWIKI && $wgUser->isAllowed( 'protect' ) ) { + if( !$this->mTitle->getRestrictions( 'create' ) ) { + $content_actions['protect'] = array( + 'class' => ($action == 'protect') ? 'selected' : false, + 'text' => wfMsg('protect'), + 'href' => $this->mTitle->getLocalUrl( 'action=protect' ) + ); + + } else { + $content_actions['unprotect'] = array( + 'class' => ($action == 'unprotect') ? 'selected' : false, + 'text' => wfMsg('unprotect'), + 'href' => $this->mTitle->getLocalUrl( 'action=unprotect' ) + ); + } + } } - wfProfileOut( "$fname-live" ); + + wfProfileOut( __METHOD__."-live" ); if( $this->loggedin ) { if( !$this->mTitle->userIsWatching()) { @@ -765,7 +782,7 @@ class SkinTemplate extends Skin { ); } } - + wfRunHooks( 'SkinTemplateTabs', array( &$this , &$content_actions ) ) ; } else { @@ -802,7 +819,7 @@ class SkinTemplate extends Skin { wfRunHooks( 'SkinTemplateContentActions', array( &$content_actions ) ); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $content_actions; } @@ -814,14 +831,11 @@ class SkinTemplate extends Skin { * @private */ function buildNavUrls () { - global $wgUseTrackbacks, $wgTitle, $wgArticle; - - $fname = 'SkinTemplate::buildNavUrls'; - wfProfileIn( $fname ); - - global $wgUser, $wgRequest; + global $wgUseTrackbacks, $wgTitle, $wgUser, $wgRequest; global $wgEnableUploads, $wgUploadNavigationUrl; + wfProfileIn( __METHOD__ ); + $action = $wgRequest->getText( 'action' ); $nav_urls = array(); @@ -858,7 +872,7 @@ class SkinTemplate extends Skin { 'href' => $wgTitle->getLocalURL( "oldid=$this->mRevisionId" ) ); } - + // Copy in case this undocumented, shady hook tries to mess with internals $revid = $this->mRevisionId; wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink', array( &$this, &$nav_urls, &$revid, &$revid ) ); @@ -895,7 +909,7 @@ class SkinTemplate extends Skin { $nav_urls['contributions'] = array( 'href' => self::makeSpecialUrlSubpage( 'Contributions', $this->mTitle->getText() ) ); - + if( $id ) { $logPage = SpecialPage::getTitleFor( 'Log' ); $nav_urls['log'] = array( 'href' => $logPage->getLocalUrl( 'user=' @@ -922,7 +936,7 @@ class SkinTemplate extends Skin { 'href' => self::makeSpecialUrlSubpage( 'Emailuser', $this->mTitle->getText() ) ); } - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $nav_urls; } @@ -939,8 +953,7 @@ class SkinTemplate extends Skin { * @private */ function setupUserCss() { - $fname = 'SkinTemplate::setupUserCss'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); global $wgRequest, $wgAllowUserCss, $wgUseSiteCss, $wgContLang, $wgSquidMaxage, $wgStylePath, $wgUser; @@ -992,15 +1005,14 @@ class SkinTemplate extends Skin { if ( !empty($sitecss) || !empty($usercss) ) { $this->usercss = "/**/'; } - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); } /** * @private */ function setupUserJs( $allowUserJs ) { - $fname = 'SkinTemplate::setupUserJs'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); global $wgRequest, $wgJsMimeType; $action = $wgRequest->getText('action'); @@ -1010,10 +1022,10 @@ class SkinTemplate extends Skin { # XXX: additional security check/prompt? $this->userjsprev = '/*getText('wpTextbox1') . ' /*]]>*/'; } else { - $this->userjs = self::makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s'); + $this->userjs = self::makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype='.$wgJsMimeType); } } - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); } /** @@ -1023,30 +1035,37 @@ class SkinTemplate extends Skin { * @private */ function setupPageCss() { - $fname = 'SkinTemplate::setupPageCss'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); $out = false; wfRunHooks( 'SkinTemplateSetupPageCss', array( &$out ) ); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $out; } /** * returns css with user-specific options - * @public */ - - function getUserStylesheet() { - $fname = 'SkinTemplate::getUserStylesheet'; - wfProfileIn( $fname ); + public function getUserStylesheet() { + wfProfileIn( __METHOD__ ); $s = "/* generated user stylesheet */\n"; $s .= $this->reallyDoGetUserStyles(); - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $s; } + /** + * Returns the print stylesheet for this skin. In all default skins this + * is just commonPrint.css, but third-party skins may want to modify it. + * + * @return string + */ + protected function getPrintCss() { + global $wgStylePath; + return $wgStylePath . "/common/commonPrint.css"; + } + /** * This returns MediaWiki:Common.js and MediaWiki:[Skinname].js concate- * nated together. For some bizarre reason, it does *not* return any @@ -1060,11 +1079,10 @@ class SkinTemplate extends Skin { * @return string */ public function getUserJs() { - $fname = 'SkinTemplate::getUserJs'; - wfProfileIn( $fname ); + wfProfileIn( __METHOD__ ); $s = parent::getUserJs(); - $s .= "\n\n/* MediaWiki:".ucfirst($this->skinname).".js (deprecated; migrate to Common.js!) */\n"; + $s .= "\n\n/* MediaWiki:".ucfirst($this->skinname).".js */\n"; // avoid inclusion of non defined user JavaScript (with custom skins only) // by checking for default message content @@ -1074,7 +1092,7 @@ class SkinTemplate extends Skin { $s .= $userJS; } - wfProfileOut( $fname ); + wfProfileOut( __METHOD__ ); return $s; } } @@ -1082,7 +1100,7 @@ class SkinTemplate extends Skin { /** * Generic wrapper for template functions, with interface * compatible with what we use of PHPTAL 0.7. - * @addtogroup Skins + * @ingroup Skins */ class QuickTemplate { /** @@ -1185,4 +1203,3 @@ class QuickTemplate { return ($msg != '-') && ($msg != ''); # ???? } } -