X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FSkinTemplate.php;h=5c0ceb5c9a894d128ef82c9184b85b354d4601ec;hb=8da29ee8fccfd8d36ec11f597670a7dcd743449c;hp=63b0c5d09e7a3514863ffcfe7b8295259f4fe1e1;hpb=23a94cea16f2e011702061de5ce7dc62b270ddbb;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index 63b0c5d09e..5c0ceb5c9a 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -97,7 +97,7 @@ class SkinTemplate extends Skin { var $stylename; /** - * For QuickTemplate, name or reference to callback function which + * For QuickTemplate, the name of the subclass which * will actually fill the template. * * In PHPTal mode, name of PHPTal template to be used. @@ -118,7 +118,7 @@ class SkinTemplate extends Skin { parent::initPage( $out ); $this->skinname = 'monobook'; $this->stylename = 'monobook'; - $this->template = 'MonoBookTemplate'; + $this->template = 'QuickTemplate'; } /** @@ -132,8 +132,8 @@ class SkinTemplate extends Skin { * @return object * @access private */ - function &setupTemplate( $callback, $repository=false, $cache_dir=false ) { - return new QuickTemplate( $callback ); + function &setupTemplate( $classname, $repository=false, $cache_dir=false ) { + return new $classname(); } /** @@ -148,6 +148,7 @@ class SkinTemplate extends Skin { global $wgMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest; global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgSiteNotice; global $wgMaxCredits, $wgShowCreditsIfMax; + global $wgPageShowWatchingUsers; $fname = 'SkinTemplate::outputPage'; wfProfileIn( $fname ); @@ -156,6 +157,10 @@ class SkinTemplate extends Skin { wfProfileIn( "$fname-init" ); $this->initPage( $out ); + + $this->mTitle = $wgTitle; + $this->mUser =& $wgUser; + $tpl =& $this->setupTemplate( $this->template, 'skins' ); #if ( $wgUseDatabaseMessages ) { // uncomment this to fall back to GetText @@ -164,19 +169,20 @@ class SkinTemplate extends Skin { wfProfileOut( "$fname-init" ); wfProfileIn( "$fname-stuff" ); - $this->thispage = $wgTitle->getPrefixedDbKey(); - $this->thisurl = $wgTitle->getPrefixedURL(); - $this->loggedin = $wgUser->getID() != 0; - $this->iscontent = ($wgTitle->getNamespace() != Namespace::getSpecial() ); + $this->thispage = $this->mTitle->getPrefixedDbKey(); + $this->thisurl = $this->mTitle->getPrefixedURL(); + $this->loggedin = $wgUser->isLoggedIn(); + $this->iscontent = ($this->mTitle->getNamespace() != NS_SPECIAL ); $this->iseditable = ($this->iscontent and !($action == 'edit' or $action == 'submit')); $this->username = $wgUser->getName(); - $this->userpage = $wgContLang->getNsText( Namespace::getUser() ) . ":" . $wgUser->getName(); + $userPage = $wgUser->getUserPage(); + $this->userpage = $userPage->getPrefixedText(); $this->userpageUrlDetails = $this->makeUrlDetails($this->userpage); $this->usercss = $this->userjs = $this->userjsprev = false; $this->setupUserCss(); $this->setupUserJs(); - $this->titletxt = $wgTitle->getPrefixedText(); + $this->titletxt = $this->mTitle->getPrefixedText(); wfProfileOut( "$fname-stuff" ); wfProfileIn( "$fname-stuff2" ); @@ -218,16 +224,17 @@ class SkinTemplate extends Skin { $tpl->setRef( 'skinname', $this->skinname ); $tpl->setRef( 'stylename', $this->stylename ); $tpl->setRef( 'loggedin', $this->loggedin ); - $tpl->set('nsclass', 'ns-'.$wgTitle->getNamespace()); - $tpl->set('notspecialpage', $wgTitle->getNamespace() != NS_SPECIAL); + $tpl->set('nsclass', 'ns-'.$this->mTitle->getNamespace()); + $tpl->set('notspecialpage', $this->mTitle->getNamespace() != NS_SPECIAL); /* XXX currently unused, might get useful later - $tpl->set( "editable", ($wgTitle->getNamespace() != NS_SPECIAL ) ); - $tpl->set( "exists", $wgTitle->getArticleID() != 0 ); - $tpl->set( "watch", $wgTitle->userIsWatching() ? "unwatch" : "watch" ); - $tpl->set( "protect", count($wgTitle->isProtected()) ? "unprotect" : "protect" ); + $tpl->set( "editable", ($this->mTitle->getNamespace() != NS_SPECIAL ) ); + $tpl->set( "exists", $this->mTitle->getArticleID() != 0 ); + $tpl->set( "watch", $this->mTitle->userIsWatching() ? "unwatch" : "watch" ); + $tpl->set( "protect", count($this->mTitle->isProtected()) ? "unprotect" : "protect" ); $tpl->set( "helppage", wfMsg('helppage')); */ $tpl->set( 'searchaction', $this->escapeSearchLink() ); + $tpl->set( 'search', trim( $wgRequest->getVal( 'search' ) ) ); $tpl->setRef( 'stylepath', $wgStylePath ); $tpl->setRef( 'logopath', $wgLogo ); $tpl->setRef( "lang", $wgContLanguageCode ); @@ -251,15 +258,14 @@ class SkinTemplate extends Skin { $tpl->set('jsvarurl', false); } if( $wgUser->getNewtalk() ) { - $usertitle = Title::newFromText( $this->userpage ); + $usertitle = $this->mUser->getUserPage(); $usertalktitle = $usertitle->getTalkPage(); - if($usertalktitle->getPrefixedDbKey() != $this->thispage){ - + if( !$usertalktitle->equals( $this->mTitle ) ) { $ntl = wfMsg( 'newmessages', - $this->makeKnownLink( - $wgContLang->getNsText( Namespace::getTalk( Namespace::getUser() ) ) - . ':' . $this->username, - wfMsg('newmessageslink') ) + $this->makeKnownLinkObj( + $usertalktitle, + wfMsg('newmessageslink') + ) ); # Disable Cache $wgOut->setSquidMaxage(0); @@ -281,7 +287,28 @@ class SkinTemplate extends Skin { } else { $tpl->set('viewcount', false); } + } else { + $tpl->set('viewcount', false); } + + if ($wgPageShowWatchingUsers) { + $dbr =& wfGetDB( DB_SLAVE ); + extract( $dbr->tableNames( 'watchlist' ) ); + $sql = "SELECT COUNT(*) AS n FROM $watchlist + WHERE wl_title='" . $dbr->strencode($this->mTitle->getDBKey()) . + "' AND wl_namespace=" . $this->mTitle->getNamespace() ; + $res = $dbr->query( $sql, 'SkinPHPTal::outputPage'); + $x = $dbr->fetchObject( $res ); + $numberofwatchingusers = $x->n; + if ($numberofwatchingusers > 0) { + $tpl->set('numberofwatchingusers', wfMsg('number_of_watching_users_pageview', $numberofwatchingusers)); + } else { + $tpl->set('numberofwatchingusers', false); + } + } else { + $tpl->set('numberofwatchingusers', false); + } + $tpl->set('lastmod', $this->lastModified()); $tpl->set('copyright',$this->getCopyright()); @@ -299,11 +326,13 @@ class SkinTemplate extends Skin { $tpl->set('viewcount', false); $tpl->set('lastmod', false); $tpl->set('credits', false); + $tpl->set('numberofwatchingusers', false); } else { $tpl->set('copyright', false); $tpl->set('viewcount', false); $tpl->set('lastmod', false); $tpl->set('credits', false); + $tpl->set('numberofwatchingusers', false); } wfProfileOut( "$fname-stuff3" ); @@ -316,6 +345,7 @@ class SkinTemplate extends Skin { $tpl->setRef( 'debug', $out->mDebugtext ); $tpl->set( 'reporttime', $out->reportTime() ); $tpl->set( 'sitenotice', $wgSiteNotice ); + $tpl->set( 'tagline', wfMsg('tagline') ); $printfooter = "
\n" . $this->printSource() . "
\n"; $out->mBodytext .= $printfooter ; @@ -386,16 +416,14 @@ class SkinTemplate extends Skin { global $wgShowIPinHeader; $personal_urls = array(); if ($this->loggedin) { + /* Logged in users personal toolbar */ $personal_urls['userpage'] = array( - 'text' => $this->username, - 'href' => &$this->userpageUrlDetails['href'], - 'class' => $this->userpageUrlDetails['exists']?false:'new' + 'text' => wfMsg('mypage'), + 'href' => $this->makeSpecialUrl('Mypage') ); - $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); $personal_urls['mytalk'] = array( 'text' => wfMsg('mytalk'), - 'href' => &$usertalkUrlDetails['href'], - 'class' => $usertalkUrlDetails['exists']?false:'new' + 'href' => $this->makeSpecialUrl('Mytalk') ); $personal_urls['preferences'] = array( 'text' => wfMsg('preferences'), @@ -407,7 +435,7 @@ class SkinTemplate extends Skin { ); $personal_urls['mycontris'] = array( 'text' => wfMsg('mycontris'), - 'href' => $this->makeSpecialUrl('Contributions','target=' . urlencode( $this->username ) ) + 'href' => $this->makeSpecialUrl('Mycontributions') ); $personal_urls['logout'] = array( 'text' => wfMsg('userlogout'), @@ -415,23 +443,22 @@ class SkinTemplate extends Skin { ); } else { if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) { + /* Anonymous with session users personal toolbar */ $personal_urls['anonuserpage'] = array( - 'text' => $this->username, - 'href' => &$this->userpageUrlDetails['href'], - 'class' => $this->userpageUrlDetails['exists']?false:'new' + 'text' => wfMsg('mypage'), + 'href' => $this->makeSpecialUrl('Mypage') ); - $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); - $personal_urls['anontalk'] = array( - 'text' => wfMsg('anontalk'), - 'href' => &$usertalkUrlDetails['href'], - 'class' => $usertalkUrlDetails['exists']?false:'new' + $personal_urls['mytalk'] = array( + 'text' => wfMsg('mytalk'), + 'href' => $this->makeSpecialUrl('Mytalk') ); + $personal_urls['anonlogin'] = array( 'text' => wfMsg('userlogin'), 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ) ); } else { - + /* Anonymous users personal toolbar */ $personal_urls['login'] = array( 'text' => wfMsg('userlogin'), 'href' => $this->makeSpecialUrl('Userlogin', 'returnto=' . $this->thisurl ) @@ -442,65 +469,69 @@ class SkinTemplate extends Skin { return $personal_urls; } + + function tabAction( &$title, $message, $selected, $query='', $checkEdit=false ) { + $classes = array(); + if( $selected ) { + $classes[] = 'selected'; + } + if( $checkEdit && $title->getArticleId() == 0 ) { + $classes[] = 'new'; + } + return array( + 'class' => implode( ' ', $classes ), + 'text' => wfMsg( $message ), + 'href' => $title->getLocalUrl( $query ) ); + } + /** * an array of edit links by default used for the tabs * @return array * @access private */ function buildContentActionUrls () { + global $wgContLang, $wgUseValidation; $fname = 'SkinTemplate::buildContentActionUrls'; wfProfileIn( $fname ); - global $wgTitle, $wgUser, $wgOut, $wgRequest, $wgUseValidation; + 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 and !$wgOut->isQuickbarSuppressed() ) { + if( $this->iscontent ) { $nskey = $this->getNameSpaceKey(); - $is_active = !Namespace::isTalk( $wgTitle->getNamespace()) ; - if ( $action == 'validate' ) $is_active = false ; # Show article tab deselected when validating - $content_actions[$nskey] = array('class' => ($is_active) ? 'selected' : false, - 'text' => wfMsg($nskey), - 'href' => $this->makeArticleUrl($this->thispage)); - - /* set up the classes for the talk link */ - wfProfileIn( "$fname-talk" ); - $talk_class = (Namespace::isTalk( $wgTitle->getNamespace()) ? 'selected' : false); - $talktitle = $wgTitle->getTalkPage(); - if( $talktitle->getArticleId() != 0 ) { - $content_actions['talk'] = array( - 'class' => $talk_class, - 'text' => wfMsg('talk'), - 'href' => $talktitle->getLocalUrl() - ); - } else { - $content_actions['talk'] = array( - 'class' => $talk_class ? $talk_class.' new' : 'new', - 'text' => wfMsg('talk'), - 'href' => $talktitle->getLocalUrl( 'action=edit' ) - ); - } - wfProfileOut( "$fname-talk" ); - + $content_actions[$nskey] = $this->tabAction( + $this->mTitle->getSubjectPage(), + $nskey, + !$this->mTitle->isTalkPage() ); + + $content_actions['talk'] = $this->tabAction( + $this->mTitle->getTalkPage(), + 'talk', + $this->mTitle->isTalkPage(), + '', + true); + wfProfileIn( "$fname-edit" ); - if ( $wgTitle->userCanEdit() ) { + if ( $this->mTitle->userCanEdit() ) { $oid = ( $oldid && ! isset( $diff ) ) ? '&oldid='.IntVal( $oldid ) : false; - $istalk = ( Namespace::isTalk( $wgTitle->getNamespace()) ); + $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' => $wgTitle->getLocalUrl( 'action=edit'.$oid ) + 'href' => $this->mTitle->getLocalUrl( 'action=edit'.$oid ) ); + if ( $istalk ) { $content_actions['addsection'] = array( 'class' => $section == 'new'?'selected':false, 'text' => wfMsg('addsection'), - 'href' => $wgTitle->getLocalUrl( 'action=edit§ion=new' ) + 'href' => $this->mTitle->getLocalUrl( 'action=edit§ion=new' ) ); } } else { @@ -508,44 +539,33 @@ class SkinTemplate extends Skin { $content_actions['viewsource'] = array( 'class' => ($action == 'edit') ? 'selected' : false, 'text' => wfMsg('viewsource'), - 'href' => $wgTitle->getLocalUrl( 'action=edit'.$oid ) + 'href' => $this->mTitle->getLocalUrl( 'action=edit'.$oid ) ); } wfProfileOut( "$fname-edit" ); wfProfileIn( "$fname-live" ); - if ( $wgTitle->getArticleId() ) { + if ( $this->mTitle->getArticleId() ) { $content_actions['history'] = array( 'class' => ($action == 'history') ? 'selected' : false, 'text' => wfMsg('history_short'), - 'href' => $wgTitle->getLocalUrl( 'action=history') + 'href' => $this->mTitle->getLocalUrl( 'action=history') ); - # XXX: is there a rollback action anywhere or is it planned? - # Don't recall where i got this from... - /*if( $wgUser->getNewtalk() ) { - $content_actions['rollback'] = array('class' => ($action == 'rollback') ? 'selected' : false, - 'text' => wfMsg('rollback_short'), - 'href' => $this->makeUrl($this->thispage, 'action=rollback'), - 'ttip' => wfMsg('tooltip-rollback'), - 'akey' => wfMsg('accesskey-rollback')); - } - */ - if($wgUser->isAllowed('protect')){ - if(!$wgTitle->isProtected()){ + if(!$this->mTitle->isProtected()){ $content_actions['protect'] = array( 'class' => ($action == 'protect') ? 'selected' : false, 'text' => wfMsg('protect'), - 'href' => $wgTitle->getLocalUrl( 'action=protect' ) + 'href' => $this->mTitle->getLocalUrl( 'action=protect' ) ); } else { $content_actions['unprotect'] = array( 'class' => ($action == 'unprotect') ? 'selected' : false, 'text' => wfMsg('unprotect'), - 'href' => $wgTitle->getLocalUrl( 'action=unprotect' ) + 'href' => $this->mTitle->getLocalUrl( 'action=unprotect' ) ); } } @@ -553,13 +573,13 @@ class SkinTemplate extends Skin { $content_actions['delete'] = array( 'class' => ($action == 'delete') ? 'selected' : false, 'text' => wfMsg('delete'), - 'href' => $wgTitle->getLocalUrl( 'action=delete' ) + 'href' => $this->mTitle->getLocalUrl( 'action=delete' ) ); } - if ( $wgUser->getID() != 0 ) { - if ( $wgTitle->userCanMove()) { + if ( $wgUser->isLoggedIn() ) { + if ( $this->mTitle->userCanMove()) { $content_actions['move'] = array( - 'class' => ($wgTitle->getDbKey() == 'Movepage' and $wgTitle->getNamespace == Namespace::getSpecial()) ? 'selected' : false, + 'class' => ($this->mTitle->getDbKey() == 'Movepage' and $this->mTitle->getNamespace == NS_SPECIAL) ? 'selected' : false, 'text' => wfMsg('move'), 'href' => $this->makeSpecialUrl('Movepage', 'target='. urlencode( $this->thispage ) ) ); @@ -568,42 +588,54 @@ class SkinTemplate extends Skin { } else { //article doesn't exist or is deleted if($wgUser->isAllowed('delete')){ - if( $n = $wgTitle->isDeleted() ) { + if( $n = $this->mTitle->isDeleted() ) { $content_actions['undelete'] = array( 'class' => false, - 'text' => wfMsg( "undelete_short", $n ), + 'text' => ($n == 1) ? wfMsg( 'undelete_short1' ) : wfMsg('undelete_short', $n ), 'href' => $this->makeSpecialUrl('Undelete/'.$this->thispage) ); } } } wfProfileOut( "$fname-live" ); - - if ( $wgUser->getID() != 0 and $action != 'submit' ) { - if( !$wgTitle->userIsWatching()) { + + if( $wgUser->isLoggedIn() and $action != 'submit' ) { + if( !$this->mTitle->userIsWatching()) { $content_actions['watch'] = array( 'class' => ($action == 'watch' or $action == 'unwatch') ? 'selected' : false, 'text' => wfMsg('watch'), - 'href' => $wgTitle->getLocalUrl( 'action=watch' ) + 'href' => $this->mTitle->getLocalUrl( 'action=watch' ) ); } else { $content_actions['unwatch'] = array( 'class' => ($action == 'unwatch' or $action == 'watch') ? 'selected' : false, 'text' => wfMsg('unwatch'), - 'href' => $wgTitle->getLocalUrl( 'action=unwatch' ) + 'href' => $this->mTitle->getLocalUrl( 'action=unwatch' ) ); } - } - # Show validate tab - if ( $wgUseValidation && $wgTitle->getArticleId() && $wgTitle->getNamespace() == 0 ) { - global $wgArticle ; - $article_time = "×tamp=" . $wgArticle->mTimestamp ; - $content_actions['validate'] = array( - 'class' => ($action == 'validate') ? 'selected' : false , - 'text' => wfMsg('val_tab'), - 'href' => $wgTitle->getLocalUrl( 'action=validate'.$article_time) - ); + # Validate tab. TODO: add validation to logged-in user rights + if($wgUseValidation){ # && $wgUser->isAllowed('validate')){ + if ( $oldid ) $oid = IntVal( $oldid ) ; # 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}" ; + $res = wfQuery( $sql, DB_READ ); + if( $s = wfFetchObject( $res ) ) + $oid = $s->page_latest ; + else $oid = "" ; # Something's wrong, like the article has been deleted in the last 10 ns + } + if ( $oid != "" ) { + $oid = "&revision={$oid}" ; + $content_actions['validate'] = array( + 'class' => ($action == 'validate') ? 'selected' : false, + 'text' => wfMsg('val_tab'), + 'href' => $this->mTitle->getLocalUrl( "action=validate{$oid}" ) + ); + } + } } } else { /* show special page tab */ @@ -615,6 +647,29 @@ class SkinTemplate extends Skin { ); } + /* show links to different language variants */ + global $wgDisableLangConversion; + $variants = $wgContLang->getVariants(); + if( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) { + $preferred = $wgContLang->getPreferredVariant(); + $actstr = ''; + if( $action ) + $actstr = 'action=' . $action . '&'; + $vcount=0; + foreach( $variants as $code ) { + $varname = $wgContLang->getVariantname( $code ); + if( $varname == 'disable' ) + continue; + $selected = ( $code == $preferred )? 'selected' : false; + $content_actions['varlang-' . $vcount] = array( + 'class' => $selected, + 'text' => $varname, + 'href' => $this->mTitle->getLocalUrl( $actstr . 'variant=' . $code ) + ); + $vcount ++; + } + } + wfProfileOut( $fname ); return $content_actions; } @@ -658,7 +713,7 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::buildNavUrls'; wfProfileIn( $fname ); - global $wgTitle, $wgUser, $wgRequest; + global $wgUser, $wgRequest; global $wgSiteSupportPage, $wgDisableUploads; $action = $wgRequest->getText( 'action' ); @@ -682,14 +737,14 @@ class SkinTemplate extends Skin { } $nav_urls['specialpages'] = array('href' => $this->makeSpecialUrl('Specialpages')); - if( $wgTitle->getNamespace() != NS_SPECIAL) { + if( $this->mTitle->getNamespace() != NS_SPECIAL) { $nav_urls['whatlinkshere'] = array('href' => $this->makeSpecialUrl('Whatlinkshere', 'target='.urlencode( $this->thispage))); $nav_urls['recentchangeslinked'] = array('href' => $this->makeSpecialUrl('Recentchangeslinked', 'target='.urlencode( $this->thispage))); } - if( $wgTitle->getNamespace() == NS_USER || $wgTitle->getNamespace() == NS_USER_TALK ) { - $id = User::idFromName($wgTitle->getText()); - $ip = User::isIP($wgTitle->getText()); + if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) { + $id = User::idFromName($this->mTitle->getText()); + $ip = User::isIP($this->mTitle->getText()); } else { $id = 0; $ip = false; @@ -697,18 +752,16 @@ class SkinTemplate extends Skin { if($id || $ip) { # both anons and non-anons have contri list $nav_urls['contributions'] = array( - 'href' => $this->makeSpecialUrl('Contributions', "target=" . $wgTitle->getPartialURL() ) + 'href' => $this->makeSpecialUrl('Contributions', "target=" . $this->mTitle->getPartialURL() ) ); } else { $nav_urls['contributions'] = false; } $nav_urls['emailuser'] = false; - if ( 0 != $wgUser->getID() ) { # show only to signed in users - if($id) { # can only email non-anons - $nav_urls['emailuser'] = array( - 'href' => $this->makeSpecialUrl('Emailuser', "target=" . $wgTitle->getPartialURL() ) - ); - } + if( $this->showEmailUser( $id ) ) { + $nav_urls['emailuser'] = array( + 'href' => $this->makeSpecialUrl('Emailuser', "target=" . $this->mTitle->getPartialURL() ) + ); } wfProfileOut( $fname ); return $nav_urls; @@ -720,8 +773,7 @@ class SkinTemplate extends Skin { * @private */ function getNameSpaceKey () { - global $wgTitle; - switch ($wgTitle->getNamespace()) { + switch ($this->mTitle->getNamespace()) { case NS_MAIN: case NS_TALK: return 'nstab-main'; @@ -762,11 +814,11 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::setupUserCss'; wfProfileIn( $fname ); - global $wgRequest, $wgTitle, $wgAllowUserCss, $wgUseSiteCss; + global $wgRequest, $wgAllowUserCss, $wgUseSiteCss, $wgContLang, $wgSquidMaxage, $wgStylePath, $wgUser; - $sitecss = ""; - $usercss = ""; - $siteargs = ""; + $sitecss = ''; + $usercss = ''; + $siteargs = '&maxage=' . $wgSquidMaxage; # Add user-specific code if this is a user and we allow that kind of thing @@ -774,27 +826,30 @@ class SkinTemplate extends Skin { $action = $wgRequest->getText('action'); # if we're previewing the CSS page, use it - if($wgTitle->isCssSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) { - $siteargs .= "&smaxage=0&maxage=0"; + if( $this->mTitle->isCssSubpage() and $this->userCanPreview( $action ) ) { + $siteargs = "&smaxage=0&maxage=0"; $usercss = $wgRequest->getText('wpTextbox1'); } else { - $siteargs .= "&maxage=0"; $usercss = '@import "' . $this->makeUrl($this->userpage . '/'.$this->skinname.'.css', 'action=raw&ctype=text/css') . '";' ."\n"; } + + $siteargs .= '&ts=' . $wgUser->mTouched; } - # If we use the site's dynamic CSS, throw that in, too + 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->makeUrl('-','action=raw&gen=css' . $siteargs).'";'."\n"; + $sitecss .= '@import "' . $this->makeNSUrl(ucfirst($this->skinname) . '.css', 'action=raw&ctype=text/css&smaxage=' . $wgSquidMaxage, 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 = '/**/'; + $this->usercss = "/**/'; } wfProfileOut( $fname ); } @@ -806,11 +861,11 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::setupUserJs'; wfProfileIn( $fname ); - global $wgRequest, $wgTitle, $wgAllowUserJs; + global $wgRequest, $wgAllowUserJs; $action = $wgRequest->getText('action'); if( $wgAllowUserJs && $this->loggedin ) { - if($wgTitle->isJsSubpage() and $action == 'submit' and $wgTitle->userCanEditCssJsSubpage()) { + if( $this->mTitle->isJsSubpage() and $this->userCanPreview( $action ) ) { # XXX: additional security check/prompt? $this->userjsprev = '/*getText('wpTextbox1') . ' /*]]>*/'; } else { @@ -828,24 +883,20 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::getUserStylesheet'; wfProfileIn( $fname ); - global $wgUser, $wgRequest, $wgTitle, $wgContLang, $wgSquidMaxage, $wgStylePath; - $action = $wgRequest->getText('action'); - $maxage = $wgRequest->getText('maxage'); + global $wgUser; $s = "/* generated user stylesheet */\n"; - if($wgContLang->isRTL()) $s .= '@import "'.$wgStylePath.'/'.$this->stylename.'/rtl.css";'."\n"; - $s .= '@import "'. - $this->makeNSUrl(ucfirst($this->skinname).'.css', 'action=raw&ctype=text/css&smaxage='.$wgSquidMaxage, NS_MEDIAWIKI)."\";\n"; - if($wgUser->getID() != 0) { - if ( 1 == $wgUser->getOption( "underline" ) ) { + + if( $wgUser->isLoggedIn() ) { + if ( $wgUser->getOption( "underline" ) ) { $s .= "a { text-decoration: underline; }\n"; } else { $s .= "a { text-decoration: none; }\n"; } } - if ( 1 != $wgUser->getOption( "highlightbroken" ) ) { + if ( !$wgUser->getOption( "highlightbroken" ) ) { $s .= "a.new, #quickbar a.new { color: #CC2200; }\n"; } - if ( 1 == $wgUser->getOption( "justify" ) ) { + if ( $wgUser->getOption( "justify" ) ) { $s .= "#bodyContent { text-align: justify; }\n"; } wfProfileOut( $fname ); @@ -859,7 +910,7 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::getUserJs'; wfProfileIn( $fname ); - global $wgUser, $wgStylePath; + global $wgStylePath; $s = '/* generated javascript */'; $s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';"; $s .= '/* MediaWiki:'.ucfirst($this->skinname)." */\n"; @@ -873,29 +924,101 @@ class SkinTemplate extends Skin { /** * Generic wrapper for template functions, with interface * compatible with what we use of PHPTAL 0.7. + * @package MediaWiki + * @subpackage Skins */ class QuickTemplate { - function QuickTemplate( $callback, $repository=false, $cache_dir=false ) { - $this->outputCallback = $callback; + /** + * @access public + */ + function QuickTemplate() { $this->data = array(); - $this->translator = null; + $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 + */ function execute() { - return call_user_func_array( $this->outputCallback, - array( &$this->data, &$this->translator ) ); + echo "Override this function."; + } + + + /** + * @access private + */ + 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; + + $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 + */ + function haveMsg( $str ) { + $msg = $this->translator->translate( $str ); + return ($msg != '-') && ($msg != ''); # ???? } }