X-Git-Url: http://git.cyclocoop.org/%22%20.%20generer_url_ecrire%28%22auteur_infos%22%2C%20%22id_auteur=%24id%22%29%20.%20%22?a=blobdiff_plain;f=includes%2FSkinTemplate.php;h=04c98033de7510664772eedef7edd0ca735fc523;hb=8186aba0250c4c848b9eac998431644e0bf75234;hp=b603f1c4aa9ab82c4bf957f67ac5c2ee0a1a9aa1;hpb=f53864e55365cb6ee82357f6b07adff3a047db62;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/SkinTemplate.php b/includes/SkinTemplate.php index b603f1c4aa..04c98033de 100644 --- a/includes/SkinTemplate.php +++ b/includes/SkinTemplate.php @@ -145,8 +145,8 @@ class SkinTemplate extends Skin { function outputPage( &$out ) { global $wgTitle, $wgArticle, $wgUser, $wgLang, $wgContLang, $wgOut; global $wgScript, $wgStylePath, $wgLanguageCode, $wgContLanguageCode, $wgUseNewInterlanguage; - global $wgMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest; - global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses, $wgSiteNotice; + global $wgMimeType, $wgJsMimeType, $wgOutputEncoding, $wgUseDatabaseMessages, $wgRequest; + global $wgDisableCounters, $wgLogo, $action, $wgFeedClasses; global $wgMaxCredits, $wgShowCreditsIfMax; global $wgPageShowWatchingUsers; @@ -218,6 +218,7 @@ class SkinTemplate extends Skin { $tpl->set( 'feeds', false ); } $tpl->setRef( 'mimetype', $wgMimeType ); + $tpl->setRef( 'jsmimetype', $wgJsMimeType ); $tpl->setRef( 'charset', $wgOutputEncoding ); $tpl->set( 'headlinks', $out->getHeadLinks() ); $tpl->setRef( 'wgScript', $wgScript ); @@ -287,6 +288,8 @@ class SkinTemplate extends Skin { } else { $tpl->set('viewcount', false); } + } else { + $tpl->set('viewcount', false); } if ($wgPageShowWatchingUsers) { @@ -342,8 +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') ); + $tpl->set( 'sitenotice', wfGetSiteNotice() ); $printfooter = "
\n" . $this->printSource() . "
\n"; $out->mBodytext .= $printfooter ; @@ -376,6 +378,11 @@ 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( 'navigation_urls', $this->buildNavigationUrls() ); $tpl->set( 'nav_urls', $this->buildNavUrls() ); @@ -414,14 +421,16 @@ class SkinTemplate extends Skin { global $wgShowIPinHeader; $personal_urls = array(); if ($this->loggedin) { - /* Logged in users personal toolbar */ $personal_urls['userpage'] = array( - 'text' => wfMsg('mypage'), - 'href' => $this->makeSpecialUrl('Mypage') + 'text' => $this->username, + 'href' => &$this->userpageUrlDetails['href'], + 'class' => $this->userpageUrlDetails['exists']?false:'new' ); + $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); $personal_urls['mytalk'] = array( 'text' => wfMsg('mytalk'), - 'href' => $this->makeSpecialUrl('Mytalk') + 'href' => &$usertalkUrlDetails['href'], + 'class' => $usertalkUrlDetails['exists']?false:'new' ); $personal_urls['preferences'] = array( 'text' => wfMsg('preferences'), @@ -433,7 +442,7 @@ class SkinTemplate extends Skin { ); $personal_urls['mycontris'] = array( 'text' => wfMsg('mycontris'), - 'href' => $this->makeSpecialUrl('Mycontributions') + 'href' => $this->makeSpecialUrl("Contributions/$this->username") ); $personal_urls['logout'] = array( 'text' => wfMsg('userlogout'), @@ -441,22 +450,23 @@ class SkinTemplate extends Skin { ); } else { if( $wgShowIPinHeader && isset( $_COOKIE[ini_get("session.name")] ) ) { - /* Anonymous with session users personal toolbar */ $personal_urls['anonuserpage'] = array( - 'text' => wfMsg('mypage'), - 'href' => $this->makeSpecialUrl('Mypage') + 'text' => $this->username, + 'href' => &$this->userpageUrlDetails['href'], + 'class' => $this->userpageUrlDetails['exists']?false:'new' ); - $personal_urls['mytalk'] = array( - 'text' => wfMsg('mytalk'), - 'href' => $this->makeSpecialUrl('Mytalk') + $usertalkUrlDetails = $this->makeTalkUrlDetails($this->userpage); + $personal_urls['anontalk'] = array( + 'text' => wfMsg('anontalk'), + 'href' => &$usertalkUrlDetails['href'], + 'class' => $usertalkUrlDetails['exists']?false:'new' ); - $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 ) @@ -481,6 +491,26 @@ class SkinTemplate extends Skin { 'text' => wfMsg( $message ), 'href' => $title->getLocalUrl( $query ) ); } + + function makeTalkUrlDetails( $name, $urlaction='' ) { + $title = Title::newFromText( $name ); + $title = $title->getTalkPage(); + $this->checkTitle($title, $name); + return array( + 'href' => $title->getLocalURL( $urlaction ), + 'exists' => $title->getArticleID() != 0?true:false + ); + } + + function makeArticleUrlDetails( $name, $urlaction='' ) { + $title = Title::newFromText( $name ); + $title= $title->getSubjectPage(); + $this->checkTitle($title, $name); + return array( + 'href' => $title->getLocalURL( $urlaction ), + 'exists' => $title->getArticleID() != 0?true:false + ); + } /** * an array of edit links by default used for the tabs @@ -488,7 +518,7 @@ class SkinTemplate extends Skin { * @access private */ function buildContentActionUrls () { - global $wgContLang; + global $wgContLang, $wgUseValidation, $wgDBprefix; $fname = 'SkinTemplate::buildContentActionUrls'; wfProfileIn( $fname ); @@ -579,7 +609,7 @@ class SkinTemplate extends Skin { $content_actions['move'] = array( 'class' => ($this->mTitle->getDbKey() == 'Movepage' and $this->mTitle->getNamespace == NS_SPECIAL) ? 'selected' : false, 'text' => wfMsg('move'), - 'href' => $this->makeSpecialUrl('Movepage', 'target='. urlencode( $this->thispage ) ) + 'href' => $this->makeSpecialUrl("Movepage/$this->thispage" ) ); } } @@ -590,14 +620,14 @@ class SkinTemplate extends Skin { $content_actions['undelete'] = array( 'class' => false, 'text' => ($n == 1) ? wfMsg( 'undelete_short1' ) : wfMsg('undelete_short', $n ), - 'href' => $this->makeSpecialUrl('Undelete/'.$this->thispage) + 'href' => $this->makeSpecialUrl("Undelete/$this->thispage") ); } } } wfProfileOut( "$fname-live" ); - if ( $wgUser->isLoggedIn() and $action != 'submit' ) { + if( $wgUser->isLoggedIn() and $action != 'submit' ) { if( !$this->mTitle->userIsWatching()) { $content_actions['watch'] = array( 'class' => ($action == 'watch' or $action == 'unwatch') ? 'selected' : false, @@ -611,8 +641,30 @@ class SkinTemplate extends Skin { 'href' => $this->mTitle->getLocalUrl( 'action=unwatch' ) ); } - } + # 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 + 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 {$wgDBprefix}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 */ @@ -649,6 +701,11 @@ class SkinTemplate extends Skin { wfProfileOut( $fname ); return $content_actions; } + + function getNavigationLinks() { + global $wgNavigationLinks; + return $wgNavigationLinks; + } /** * build array of global navigation links @@ -659,19 +716,20 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::buildNavigationUrls'; wfProfileIn( $fname ); - global $wgNavigationLinks; + $links = $this->getNavigationLinks(); + $result = array(); - foreach ( $wgNavigationLinks as $link ) { + 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'] - ); + $result[] = array( + 'text' => $text, + 'href' => $this->makeInternalOrExternalUrl( $dest ), + 'id' => 'n-'.$link['text'] + ); wfProfileOut( "$fname-{$link['text']}2" ); } wfProfileOut( "$fname-{$link['text']}" ); @@ -690,7 +748,7 @@ class SkinTemplate extends Skin { wfProfileIn( $fname ); global $wgUser, $wgRequest; - global $wgSiteSupportPage, $wgDisableUploads; + global $wgSiteSupportPage, $wgEnableUploads, $wgUploadNavigationUrl; $action = $wgRequest->getText( 'action' ); $oldid = $wgRequest->getVal( 'oldid' ); @@ -698,7 +756,7 @@ class SkinTemplate extends Skin { $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; @@ -706,16 +764,24 @@ class SkinTemplate extends Skin { // $nav_urls['sitesupport'] = array('href' => $this->makeI18nUrl('sitesupportpage')); $nav_urls['sitesupport'] = array('href' => $wgSiteSupportPage); $nav_urls['help'] = array('href' => $this->makeI18nUrl('helppage')); - if( $this->loggedin && !$wgDisableUploads ) { - $nav_urls['upload'] = array('href' => $this->makeSpecialUrl('Upload')); + if( $wgEnableUploads ) { + if ($wgUploadNavigationUrl) { + $nav_urls['upload'] = array('href' => $wgUploadNavigationUrl ); + } else { + $nav_urls['upload'] = array('href' => $this->makeSpecialUrl('Upload')); + } } else { $nav_urls['upload'] = false; } $nav_urls['specialpages'] = array('href' => $this->makeSpecialUrl('Specialpages')); 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))); + $nav_urls['whatlinkshere'] = array( + 'href' => $this->makeSpecialUrl("Whatlinkshere/$this->thispage") + ); + $nav_urls['recentchangeslinked'] = array( + 'href' => $this->makeSpecialUrl("Recentchangeslinked/$this->thispage") + ); } if( $this->mTitle->getNamespace() == NS_USER || $this->mTitle->getNamespace() == NS_USER_TALK ) { @@ -728,7 +794,7 @@ class SkinTemplate extends Skin { if($id || $ip) { # both anons and non-anons have contri list $nav_urls['contributions'] = array( - 'href' => $this->makeSpecialUrl('Contributions', "target=" . $this->mTitle->getPartialURL() ) + 'href' => $this->makeSpecialUrl('Contributions/' . $this->mTitle->getText() ) ); } else { $nav_urls['contributions'] = false; @@ -736,7 +802,7 @@ class SkinTemplate extends Skin { $nav_urls['emailuser'] = false; if( $this->showEmailUser( $id ) ) { $nav_urls['emailuser'] = array( - 'href' => $this->makeSpecialUrl('Emailuser', "target=" . $this->mTitle->getPartialURL() ) + 'href' => $this->makeSpecialUrl('Emailuser/' . $this->mTitle->getText() ) ); } wfProfileOut( $fname ); @@ -837,7 +903,7 @@ class SkinTemplate extends Skin { $fname = 'SkinTemplate::setupUserJs'; wfProfileIn( $fname ); - global $wgRequest, $wgAllowUserJs; + global $wgRequest, $wgAllowUserJs, $wgJsMimeType; $action = $wgRequest->getText('action'); if( $wgAllowUserJs && $this->loggedin ) { @@ -845,7 +911,7 @@ class SkinTemplate extends Skin { # XXX: additional security check/prompt? $this->userjsprev = '/*getText('wpTextbox1') . ' /*]]>*/'; } else { - $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype=text/javascript&dontcountme=s'); + $this->userjs = $this->makeUrl($this->userpage.'/'.$this->skinname.'.js', 'action=raw&ctype='.$wgJsMimeType.'&dontcountme=s'); } } wfProfileOut( $fname ); @@ -855,26 +921,14 @@ class SkinTemplate extends Skin { * returns css with user-specific options * @access public */ + function getUserStylesheet() { $fname = 'SkinTemplate::getUserStylesheet'; wfProfileIn( $fname ); global $wgUser; $s = "/* generated user stylesheet */\n"; - - if( $wgUser->isLoggedIn() ) { - if ( $wgUser->getOption( "underline" ) ) { - $s .= "a { text-decoration: underline; }\n"; - } else { - $s .= "a { text-decoration: none; }\n"; - } - } - if ( !$wgUser->getOption( "highlightbroken" ) ) { - $s .= "a.new, #quickbar a.new { color: #CC2200; }\n"; - } - if ( $wgUser->getOption( "justify" ) ) { - $s .= "#bodyContent { text-align: justify; }\n"; - } + $s .= $this->reallyDoGetUserStyles(); wfProfileOut( $fname ); return $s; } @@ -890,7 +944,14 @@ class SkinTemplate extends Skin { $s = '/* generated javascript */'; $s .= "var skin = '{$this->skinname}';\nvar stylepath = '{$wgStylePath}';"; $s .= '/* MediaWiki:'.ucfirst($this->skinname)." */\n"; - $s .= wfMsg(ucfirst($this->skinname).'.js'); + + // avoid inclusion of non defined user JavaScript (with custom skins only) + // by checking for default message content + $msgKey = ucfirst($this->skinname).'.js'; + $userJS = wfMsg($msgKey); + if ('<'.$msgKey.'>' != $userJS) { + $s .= $userJS; + } wfProfileOut( $fname ); return $s;