X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2FSkinTemplate.php;h=8425333158456e7c6403a5e7142778572dcd4b4a;hb=3f38197f262e4d715b51c881f379299b0d07dcd3;hp=2161962cc4d3d92d43f49d2e5975c3781074e2ff;hpb=11512c043e92754e7c2f2dbd0380fc2ee9482b48;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 2161962cc4..8425333158 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -1,22 +1,28 @@ + * tag + */ + var $useHeadElement = false; + /**#@-*/ /** @@ -95,20 +107,7 @@ class SkinTemplate extends Skin { * @param $out OutputPage */ function setupSkinUserCss( OutputPage $out ){ - $out->addStyle( 'common/shared.css', 'screen' ); - $out->addStyle( 'common/commonPrint.css', 'print' ); - } - /* add specific javascript the base Skin class */ - function setupSkinUserJs( OutputPage $out ){ - global $wgUseSiteJs; - //use site js: - if( $wgUseSiteJs ) { - $jsCache = $this->loggedin ? '&smaxage=0' : ''; - $siteGenScriptFile = self::makeUrl( '-', - "action=raw$jsCache&gen=js&useskin=" . - urlencode( $this->getSkinName() ) ) ; - $this->jsvarurl = $siteGenScriptFile; - } + $out->addModuleStyles( array( 'mediawiki.legacy.shared', 'mediawiki.legacy.commonPrint' ) ); } /** @@ -116,7 +115,7 @@ class SkinTemplate extends Skin { * and eventually it spits out some HTML. Should have interface * roughly equivalent to PHPTAL 0.7. * - * @param $callback string (or file) + * @param $classname string (or file) * @param $repository string: subdirectory where we keep template files * @param $cache_dir string * @return object @@ -133,16 +132,19 @@ class SkinTemplate extends Skin { */ function outputPage( OutputPage $out ) { global $wgArticle, $wgUser, $wgLang, $wgContLang; - global $wgScript, $wgStylePath, $wgContLanguageCode; + global $wgScript, $wgStylePath, $wgLanguageCode; global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgRequest; - global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces; + global $wgXhtmlDefaultNamespace, $wgXhtmlNamespaces, $wgHtml5Version; global $wgDisableCounters, $wgLogo, $wgHideInterlanguageLinks; global $wgMaxCredits, $wgShowCreditsIfMax; global $wgPageShowWatchingUsers; - global $wgUseTrackbacks, $wgUseSiteJs; - global $wgArticlePath, $wgScriptPath, $wgServer, $wgCanonicalNamespaceNames; + global $wgUseTrackbacks, $wgUseSiteJs, $wgDebugComments; + global $wgArticlePath, $wgScriptPath, $wgServer, $wgProfiler; wfProfileIn( __METHOD__ ); + if ( is_object( $wgProfiler ) ) { + $wgProfiler->setTemplated( true ); + } $oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); @@ -183,12 +185,49 @@ class SkinTemplate extends Skin { $this->userpageUrlDetails = self::makeKnownUrlDetails( $this->userpage ); } - $this->userjs = $this->userjsprev = false; - $this->setupUserCss( $out ); - $this->setupUserJs( $out->isUserJsAllowed() ); $this->titletxt = $this->mTitle->getPrefixedText(); wfProfileOut( __METHOD__ . '-stuff' ); + wfProfileIn( __METHOD__ . '-stuff-head' ); + if ( $this->useHeadElement ) { + $pagecss = $this->setupPageCss(); + if( $pagecss ) + $out->addInlineStyle( $pagecss ); + } else { + $this->setupUserCss( $out ); + + $tpl->set( 'pagecss', $this->setupPageCss() ); + $tpl->setRef( 'usercss', $this->usercss ); + + $this->userjs = $this->userjsprev = false; + $this->setupUserJs( $out->isUserJsAllowed() ); + $tpl->setRef( 'userjs', $this->userjs ); + $tpl->setRef( 'userjsprev', $this->userjsprev ); + + if( $wgUseSiteJs ) { + $jsCache = $this->loggedin ? '&smaxage=0' : ''; + $tpl->set( 'jsvarurl', + self::makeUrl( '-', + "action=raw$jsCache&gen=js&useskin=" . + urlencode( $this->getSkinName() ) ) ); + } else { + $tpl->set( 'jsvarurl', false ); + } + + $tpl->setRef( 'xhtmldefaultnamespace', $wgXhtmlDefaultNamespace ); + $tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces ); + $tpl->set( 'html5version', $wgHtml5Version ); + $tpl->set( 'headlinks', $out->getHeadLinks( $this->getSkinName() ) ); + $tpl->set( 'csslinks', $out->buildCssLinks() ); + + if( $wgUseTrackbacks && $out->isArticleRelated() ) { + $tpl->set( 'trackbackhtml', $out->getTitle()->trackbackRDF() ); + } else { + $tpl->set( 'trackbackhtml', null ); + } + } + wfProfileOut( __METHOD__ . '-stuff-head' ); + wfProfileIn( __METHOD__ . '-stuff2' ); $tpl->set( 'title', $out->getPageTitle() ); $tpl->set( 'pagetitle', $out->getHTMLTitle() ); @@ -196,8 +235,8 @@ class SkinTemplate extends Skin { $tpl->set( 'pageclass', $this->getPageClasses( $this->mTitle ) ); $tpl->set( 'skinnameclass', ( 'skin-' . Sanitizer::escapeClass( $this->getSkinName() ) ) ); - $nsname = isset( $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] ) ? - $wgCanonicalNamespaceNames[ $this->mTitle->getNamespace() ] : + $nsname = MWNamespace::exists( $this->mTitle->getNamespace() ) ? + MWNamespace::getCanonicalName( $this->mTitle->getNamespace() ) : $this->mTitle->getNsText(); $tpl->set( 'nscanonical', $nsname ); @@ -236,22 +275,10 @@ class SkinTemplate extends Skin { } else { $tpl->set( 'feeds', false ); } - if( $wgUseTrackbacks && $out->isArticleRelated() ) { - $tpl->set( 'trackbackhtml', $out->getTitle()->trackbackRDF() ); - } else { - $tpl->set( 'trackbackhtml', null ); - } - $tpl->setRef( 'xhtmldefaultnamespace', $wgXhtmlDefaultNamespace ); - $tpl->set( 'xhtmlnamespaces', $wgXhtmlNamespaces ); $tpl->setRef( 'mimetype', $wgMimeType ); $tpl->setRef( 'jsmimetype', $wgJsMimeType ); $tpl->setRef( 'charset', $wgOutputEncoding ); - $tpl->set( 'headlinks', $out->getHeadLinks() ); - - //moved headscripts to near end of template header output - - $tpl->set( 'csslinks', $out->buildCssLinks() ); $tpl->setRef( 'wgScript', $wgScript ); $tpl->setRef( 'skinname', $this->skinname ); $tpl->set( 'skinclass', get_class( $this ) ); @@ -275,80 +302,45 @@ class SkinTemplate extends Skin { $tpl->setRef( 'scriptpath', $wgScriptPath ); $tpl->setRef( 'serverurl', $wgServer ); $tpl->setRef( 'logopath', $wgLogo ); - $tpl->setRef( 'lang', $wgContLanguageCode ); - $tpl->set( 'dir', $wgContLang->getDir() ); - $tpl->set( 'rtl', $wgContLang->isRTL() ); + + $lang = wfUILang(); + $tpl->set( 'lang', $lang->getCode() ); + $tpl->set( 'dir', $lang->getDir() ); + $tpl->set( 'rtl', $lang->isRTL() ); + $tpl->set( 'capitalizeallnouns', $wgLang->capitalizeAllNouns() ? ' capitalize-all-nouns' : '' ); - $tpl->set( 'langname', $wgContLang->getLanguageName( $wgContLanguageCode ) ); $tpl->set( 'showjumplinks', $wgUser->getOption( 'showjumplinks' ) ); - $tpl->set( 'username', $wgUser->isAnon() ? NULL : $this->username ); + $tpl->set( 'username', $wgUser->isAnon() ? null : $this->username ); $tpl->setRef( 'userpage', $this->userpage ); $tpl->setRef( 'userpageurl', $this->userpageUrlDetails['href'] ); $tpl->set( 'userlang', $wgLang->getCode() ); - $tpl->set( 'userlangattributes', 'lang="' . $wgLang->getCode() . '" xml:lang="' . $wgLang->getCode() . '"' ); - $tpl->set( 'pagecss', $this->setupPageCss() ); - $tpl->setRef( 'usercss', $this->usercss ); - $tpl->setRef( 'userjs', $this->userjs ); - $tpl->setRef( 'userjsprev', $this->userjsprev ); - if( $wgUseSiteJs ) { - $jsCache = $this->loggedin ? '&smaxage=0' : ''; - $tpl->set( 'jsvarurl', - self::makeUrl( '-', - "action=raw$jsCache&gen=js&useskin=" . - urlencode( $this->getSkinName() ) ) ); - } else { - $tpl->set( 'jsvarurl', false ); - } - - $newtalks = $wgUser->getNewMessageLinks(); - if( count( $newtalks ) == 1 && $newtalks[0]['wiki'] === wfWikiID() ) { - $usertitle = $this->mUser->getUserPage(); - $usertalktitle = $usertitle->getTalkPage(); + // Users can have their language set differently than the + // content of the wiki. For these users, tell the web browser + // that interface elements are in a different language. + $tpl->set( 'userlangattributes', '' ); + $tpl->set( 'specialpageattributes', '' ); - if( !$usertalktitle->equals( $this->mTitle ) ) { - $newmessageslink = $this->link( - $usertalktitle, - wfMsgHtml( 'newmessageslink' ), - array(), - array( 'redirect' => 'no' ), - array( 'known', 'noclasses' ) - ); + $lang = $wgLang->getCode(); + $dir = $wgLang->getDir(); + if ( $lang !== $wgContLang->getCode() || $dir !== $wgContLang->getDir() ) { + $attrs = " lang='$lang' dir='$dir'"; - $newmessagesdifflink = $this->link( - $usertalktitle, - wfMsgHtml( 'newmessagesdifflink' ), - array(), - array( 'diff' => 'cur' ), - array( 'known', 'noclasses' ) - ); + $tpl->set( 'userlangattributes', $attrs ); - $ntl = wfMsg( - 'youhavenewmessages', - $newmessageslink, - $newmessagesdifflink - ); - # Disable Cache - $out->setSquidMaxage( 0 ); - } - } else if( count( $newtalks ) ) { - // _>" " for BC <= 1.16 - $sep = str_replace( '_', ' ', wfMsgHtml( 'newtalkseparator' ) ); - $msgs = array(); - foreach( $newtalks as $newtalk ) { - $msgs[] = Xml::element('a', - array( 'href' => $newtalk['link'] ), $newtalk['wiki'] ); + // The content of SpecialPages should be presented in the + // user's language. Content of regular pages should not be touched. + if( $this->mTitle->isSpecialPage() ) { + $tpl->set( 'specialpageattributes', $attrs ); } - $parts = implode( $sep, $msgs ); - $ntl = wfMsgHtml( 'youhavenewmessagesmulti', $parts ); - $out->setSquidMaxage( 0 ); - } else { - $ntl = ''; } + + $newtalks = $this->getNewtalks(); + wfProfileOut( __METHOD__ . '-stuff2' ); wfProfileIn( __METHOD__ . '-stuff3' ); - $tpl->setRef( 'newtalk', $ntl ); + $tpl->setRef( 'newtalk', $newtalks ); $tpl->setRef( 'skin', $this ); $tpl->set( 'logo', $this->logoText() ); if ( $out->isArticle() and ( !isset( $oldid ) or isset( $diff ) ) and @@ -420,12 +412,22 @@ class SkinTemplate extends Skin { $tpl->set( 'privacy', $this->privacyLink() ); $tpl->set( 'about', $this->aboutLink() ); - $tpl->setRef( 'debug', $out->mDebugtext ); + if ( $wgDebugComments ) { + $tpl->setRef( 'debug', $out->mDebugtext ); + } else { + $tpl->set( 'debug', '' ); + } + $tpl->set( 'reporttime', wfReportTime() ); $tpl->set( 'sitenotice', wfGetSiteNotice() ); - $tpl->set( 'bottomscripts', $this->bottomScripts() ); + $tpl->set( 'bottomscripts', $this->bottomScripts( $out ) ); $printfooter = "
\n" . $this->printSource() . "
\n"; + global $wgBetterDirectionality; + if ( $wgBetterDirectionality ) { + $realBodyAttribs = array( 'lang' => $wgLanguageCode, 'dir' => $wgContLang->getDir() ); + $out->mBodytext = Html::rawElement( 'div', $realBodyAttribs, $out->mBodytext ); + } $out->mBodytext .= $printfooter . $this->generateDebugHTML(); $tpl->setRef( 'bodytext', $out->mBodytext ); @@ -443,6 +445,7 @@ class SkinTemplate extends Skin { 'href' => $nt->getFullURL(), 'text' => ( $wgContLang->getLanguageName( $nt->getInterwiki() ) != '' ? $wgContLang->getLanguageName( $nt->getInterwiki() ) : $l ), + 'title' => $nt->getText(), 'class' => $class ); } @@ -461,19 +464,15 @@ class SkinTemplate extends Skin { $content_actions = $this->buildContentActionUrls(); $tpl->setRef( 'content_actions', $content_actions ); - // XXX: attach this from javascript, same with section editing - if( $this->iseditable && $wgUser->getOption( 'editondblclick' ) ){ - $encEditUrl = Xml::escapeJsString( $this->mTitle->getLocalUrl( $this->editUrlOptions() ) ); - $tpl->set( 'body_ondblclick', 'document.location = "' . $encEditUrl . '";' ); - } else { - $tpl->set( 'body_ondblclick', false ); - } - $tpl->set( 'body_onload', false ); $tpl->set( 'sidebar', $this->buildSidebar() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); - //set the head script near the end (in case above actions result in adding scripts) - $tpl->set( 'headscripts', $out->getScript() ); + // Set the head scripts near the end, in case the above actions resulted in added scripts + if ( $this->useHeadElement ) { + $tpl->set( 'headelement', $out->headElement( $this ) ); + } else { + $tpl->set( 'headscripts', $out->getScript() ); + } // original version by hansm if( !wfRunHooks( 'SkinTemplateOutputPageBeforeExec', array( &$this, &$tpl ) ) ) { @@ -500,7 +499,7 @@ class SkinTemplate extends Skin { * an error object of the appropriate type. * For the base class, assume strings all around. * - * @param mixed $str + * @param $str Mixed * @private */ function printOrError( $str ) { @@ -660,7 +659,7 @@ class SkinTemplate extends Skin { self::checkTitle( $title, $name ); return array( 'href' => $title->getLocalURL( $urlaction ), - 'exists' => $title->getArticleID() != 0 ? true : false + 'exists' => $title->getArticleID() != 0, ); } @@ -670,7 +669,7 @@ class SkinTemplate extends Skin { self::checkTitle( $title, $name ); return array( 'href' => $title->getLocalURL( $urlaction ), - 'exists' => $title->getArticleID() != 0 ? true : false + 'exists' => $title->getArticleID() != 0, ); } @@ -717,7 +716,7 @@ class SkinTemplate extends Skin { $istalkclass = $istalk?' istalk':''; $content_actions['edit'] = array( 'class' => ( ( ( $action == 'edit' or $action == 'submit' ) and $section != 'new' ) ? 'selected' : '' ) . $istalkclass, - 'text' => $this->mTitle->exists() + 'text' => ( $this->mTitle->exists() || ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && !wfEmptyMsg( $this->mTitle->getText() ) ) ) ? wfMsg( 'edit' ) : wfMsg( 'create' ), 'href' => $this->mTitle->getLocalUrl( $this->editUrlOptions() ) @@ -733,7 +732,7 @@ class SkinTemplate extends Skin { ); } } - } elseif ( $this->mTitle->isKnown() ) { + } elseif ( $this->mTitle->hasSourceText() ) { $content_actions['viewsource'] = array( 'class' => ($action == 'edit') ? 'selected' : false, 'text' => wfMsg( 'viewsource' ), @@ -786,7 +785,7 @@ class SkinTemplate extends Skin { } } else { //article doesn't exist or is deleted - if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'undelete' ) ) { + if( $wgUser->isAllowed( 'deletedhistory' ) && $wgUser->isAllowed( 'deletedtext' ) ) { if( $n = $this->mTitle->isDeleted() ) { $undelTitle = SpecialPage::getTitleFor( 'Undelete' ); $content_actions['undelete'] = array( @@ -835,7 +834,7 @@ class SkinTemplate extends Skin { } - wfRunHooks( 'SkinTemplateTabs', array( &$this, &$content_actions ) ); + wfRunHooks( 'SkinTemplateTabs', array( $this, &$content_actions ) ); } else { /* show special page tab */ @@ -881,7 +880,7 @@ class SkinTemplate extends Skin { */ function buildNavUrls() { global $wgUseTrackbacks, $wgOut, $wgUser, $wgRequest; - global $wgEnableUploads, $wgUploadNavigationUrl; + global $wgUploadNavigationUrl; wfProfileIn( __METHOD__ ); @@ -891,7 +890,7 @@ class SkinTemplate extends Skin { $nav_urls['mainpage'] = array( 'href' => self::makeMainPageUrl() ); if( $wgUploadNavigationUrl ) { $nav_urls['upload'] = array( 'href' => $wgUploadNavigationUrl ); - } elseif( $wgEnableUploads && $wgUser->isAllowed( 'upload' ) ) { + } elseif( UploadBase::isEnabled() && UploadBase::isAllowed( $wgUser ) === true ) { $nav_urls['upload'] = array( 'href' => self::makeSpecialUrl( 'Upload' ) ); } else { $nav_urls['upload'] = false; @@ -944,8 +943,10 @@ class SkinTemplate extends Skin { } if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) { - $id = User::idFromName( $this->mTitle->getText() ); - $ip = User::isIP( $this->mTitle->getText() ); + $parts = explode( '/', $this->mTitle->getText() ); + $rootUser = $parts[0]; + $id = User::idFromName( $rootUser ); + $ip = User::isIP( $rootUser ); } else { $id = 0; $ip = false; @@ -953,7 +954,7 @@ class SkinTemplate extends Skin { if( $id || $ip ) { # both anons and non-anons have contribs list $nav_urls['contributions'] = array( - 'href' => self::makeSpecialUrlSubpage( 'Contributions', $this->mTitle->getText() ) + 'href' => self::makeSpecialUrlSubpage( 'Contributions', $rootUser ) ); if( $id ) { @@ -961,7 +962,7 @@ class SkinTemplate extends Skin { $nav_urls['log'] = array( 'href' => $logPage->getLocalUrl( array( - 'user' => $this->mTitle->getText() + 'user' => $rootUser ) ) ); @@ -971,7 +972,7 @@ class SkinTemplate extends Skin { if ( $wgUser->isAllowed( 'block' ) ) { $nav_urls['blockip'] = array( - 'href' => self::makeSpecialUrlSubpage( 'Blockip', $this->mTitle->getText() ) + 'href' => self::makeSpecialUrlSubpage( 'Blockip', $rootUser ) ); } else { $nav_urls['blockip'] = false; @@ -984,7 +985,7 @@ class SkinTemplate extends Skin { $nav_urls['emailuser'] = false; if( $this->showEmailUser( $id ) ) { $nav_urls['emailuser'] = array( - 'href' => self::makeSpecialUrlSubpage( 'Emailuser', $this->mTitle->getText() ) + 'href' => self::makeSpecialUrlSubpage( 'Emailuser', $rootUser ) ); } wfProfileOut( __METHOD__ );