mCategoryLinks ) == 0 ) return "" ; if ( !$wgOut->isArticle() ) return "" ; $sk = $wgUser->getSkin() ; $s = "" ; $s .= "\n
\n"; $s .= $sk->makeKnownLink ( "Special:Categories" , "Categories" , "article=".$wgTitle->getDBkey() ) ; $t = implode ( " | " , $wgOut->mCategoryLinks ) ; if ( $t != "" ) $s .= " : " ; $s .= $t ; return $s ; } class RecentChangesClass { var $secureName , $displayName , $link , $namespace ; var $oldid , $diffid , $timestamp , $curlink , $lastlink , $usertalklink , $versionlink ; var $usercomment , $userlink ; var $isminor , $isnew , $watched , $islog ; } ; class Skin { /* private */ var $lastdate, $lastline; var $rc_cache ; # Cache for Enhanced Recent Changes var $rccc ; # Recent Changes Cache Counter for visibility toggle function Skin() { } function getSkinNames() { global $wgValidSkinNames; return $wgValidSkinNames; } function getStylesheet() { return "wikistandard.css"; } function qbSetting() { global $wgOut, $wgUser; if ( $wgOut->isQuickbarSupressed() ) { return 0; } $q = $wgUser->getOption( "quickbar" ); if ( "" == $q ) { $q = 0; } return $q; } function initPage() { global $wgOut, $wgStyleSheetPath; $fname = "Skin::initPage"; wfProfileIn( $fname ); $wgOut->addLink( "shortcut icon", "", "/favicon.ico" ); if ( $wgOut->isPrintable() ) { $ss = "wikiprintable.css"; } else { $ss = $this->getStylesheet(); } $wgOut->addLink( "stylesheet", "", "{$wgStyleSheetPath}/{$ss}" ); wfProfileOut( $fname ); } function outputPage( &$out ) { wfProfileIn( "Skin::outputPage" ); $this->initPage(); $out->out( $out->headElement() ); $out->out( "\ngetBodyOptions(); foreach ( $ops as $name => $val ) { $out->out( " $name='$val'" ); } $out->out( ">\n" ); if ( $wgDebugComments ) { $out->out( "\n" ); } $out->out( $this->beforeContent() ); $out->out( $out->mBodytext ); $out->out( $this->afterContent() ); wfProfileClose(); $out->out( $out->reportTime() ); $out->out( "\n" ); } function getHeadScripts() { global $wgStyleSheetPath; $r = "\n"; return $r; } function getUserStyles() { $s = "\n"; return $s; } function doGetUserStyles() { global $wgUser; $s = ""; if ( 1 == $wgUser->getOption( "underline" ) ) { # Don't override browser settings } else { # CHECK MERGE @@@ # Force no underline $s .= "a.stub, a.new, a.internal, a.external { " . "text-decoration: none; }\n"; } if ( 1 == $wgUser->getOption( "highlightbroken" ) ) { $s .= "a.new, #quickbar a.new { color: #CC2200; }\n"; } if ( 1 == $wgUser->getOption( "justify" ) ) { $s .= "#article { text-align: justify; }\n"; } return $s; } function getBodyOptions() { global $wgUser, $wgTitle, $wgNamespaceBackgrounds, $wgOut, $oldid, $redirect, $diff,$action; if ( 0 != $wgTitle->getNamespace() ) { $a = array( "bgcolor" => "#ffffec" ); } else $a = array( "bgcolor" => "#FFFFFF" ); if($wgOut->isArticle() && $wgUser->getOption("editondblclick") && (!$wgTitle->isProtected() || $wgUser->isSysop()) ) { $n = $wgTitle->getPrefixedURL(); $t = wfMsg( "editthispage" ); $oid = $red = ""; if ( $redirect ) { $red = "&redirect={$redirect}"; } if ( $oldid && ! isset( $diff ) ) { $oid = "&oldid={$oldid}"; } $s = wfLocalUrlE($n,"action=edit{$oid}{$red}"); $s = "document.location = \"" .$s ."\";"; $a += array ("ondblclick" => $s); } $a['onload'] = $wgOut->getOnloadHandler(); return $a; } function getExternalLinkAttributes( $link, $text ) { global $wgUser, $wgOut, $wgLang; $link = urldecode( $link ); $link = $wgLang->checkTitleEncoding( $link ); $link = str_replace( "_", " ", $link ); $link = wfEscapeHTML( $link ); if ( $wgOut->isPrintable() ) { $r = " class='printable'"; } else { $r = " class='external'"; } if ( 1 == $wgUser->getOption( "hover" ) ) { $r .= " title=\"{$link}\""; } return $r; } function getInternalLinkAttributes( $link, $text, $broken = false ) { global $wgUser, $wgOut; $link = urldecode( $link ); $link = str_replace( "_", " ", $link ); $link = wfEscapeHTML( $link ); if ( $wgOut->isPrintable() ) { $r = " class='printable'"; } else if ( $broken == "stub" ) { $r = " class='stub'"; } else if ( $broken == "yes" ) { $r = " class='new'"; } else { $r = " class='internal'"; } if ( 1 == $wgUser->getOption( "hover" ) ) { $r .= " title=\"{$link}\""; } return $r; } function getInternalLinkAttributesObj( &$nt, $text, $broken = false ) { global $wgUser, $wgOut; if ( $wgOut->isPrintable() ) { $r = " class='printable'"; } else if ( $broken == "stub" ) { $r = " class='stub'"; } else if ( $broken == "yes" ) { $r = " class='new'"; } else { $r = " class='internal'"; } if ( 1 == $wgUser->getOption( "hover" ) ) { $r .= ' title ="' . $nt->getEscapedText() . '"'; } return $r; } function getLogo() { global $wgLogo; return $wgLogo; } # This will be called immediately after the tag. Split into # two functions to make it easier to subclass. # function beforeContent() { global $wgUser, $wgOut, $wgSiteNotice; if ( $wgOut->isPrintable() ) { $s = $this->pageTitle() . $this->pageSubtitle() . "\n"; $s .= "\n
"; return $s; } if( $wgSiteNotice ) { $note = "\n
$wgSiteNotice
\n"; } else { $note = ""; } return $this->doBeforeContent() . $note; } function doBeforeContent() { global $wgUser, $wgOut, $wgTitle, $wgLang; $fname = "Skin::doBeforeContent"; wfProfileIn( $fname ); $s = ""; $qb = $this->qbSetting(); if( $langlinks = $this->otherLanguages() ) { $rows = 2; $borderhack = ""; } else { $rows = 1; $langlinks = false; $borderhack = "class='top'"; } $s .= "\n
\n
" . ""; $shove = ($qb != 0); $left = ($qb == 1 || $qb == 3); if($wgLang->isRTL()) $left = !$left; if ( !$shove ) { $s .= ""; } elseif( $left ) { $s .= $this->getQuickbarCompensator( $rows ); } $l = $wgLang->isRTL() ? "right" : "left"; $s .= "\n"; if ( $langlinks ) { $s .= "\n"; } if ( $shove && !$left ) { # Right $s .= $this->getQuickbarCompensator( $rows ); } $s .= "
" . $this->logoText() . ""; $s .= $this->topLinks() ; $s .= "

" . $this->pageTitleLinks(); $r = $wgLang->isRTL() ? "left" : "right"; $s .= "

"; $s .= $this->nameAndLogin(); $s .= "\n
" . $this->searchForm() . "
$langlinks
\n
\n"; $s .= "\n
"; $s .= $this->pageTitle(); $s .= $this->pageSubtitle() ; $s .= getCategories(); // For some odd reason, zhis can't be a function of the object $s .= "\n

"; wfProfileOut( $fname ); return $s; } function getQuickbarCompensator( $rows = 1 ) { return " "; } # This gets called immediately before the tag. # function afterContent() { global $wgUser, $wgOut, $wgServer; global $wgTitle; if ( $wgOut->isPrintable() ) { $s = "\n

\n"; $u = htmlspecialchars( $wgServer . $wgTitle->getFullURL() ); $u = "$u"; $rf = wfMsg( "retrievedfrom", $u ); if ( $wgOut->isArticle() ) { $lm = "
" . $this->lastModified(); } else { $lm = ""; } $cr = wfMsg( "gnunote" ); $s .= "

{$rf}{$lm} {$cr}\n"; return $s; } return $this->doAfterContent(); } function doAfterContent() { global $wgUser, $wgOut, $wgLang; $fname = "Skin::doAfterContent"; wfProfileIn( $fname ); wfProfileIn( "$fname-1" ); $s = "\n


\n"; $s .= "\n\n
\n"; wfProfileOut( "$fname-3" ); wfProfileIn( "$fname-4" ); if ( 0 != $qb ) { $s .= $this->quickBar(); } wfProfileOut( "$fname-4" ); wfProfileOut( $fname ); return $s; } function pageTitleLinks() { global $wgOut, $wgTitle, $oldid, $action, $diff, $wgUser, $wgLang, $wgUseApproval ; $s = $this->printableLink(); if ( wfMsg ( "disclaimers" ) != "-" ) $s .= " | " . $this->makeKnownLink( wfMsg( "disclaimerpage" ), wfMsg( "disclaimers" ) ) ; if ( $wgOut->isArticle() ) { if ( $wgTitle->getNamespace() == Namespace::getImage() ) { $name = $wgTitle->getDBkey(); $link = wfEscapeHTML( wfImageUrl( $name ) ); $style = $this->getInternalLinkAttributes( $link, $name ); $s .= " | {$name}"; } # This will show the "Approve" link if $wgUseApproval=true; if ( isset ( $wgUseApproval ) && $wgUseApproval ) { $t = $wgTitle->getDBkey(); $name = "Approve this article" ; $link = "http://test.wikipedia.org/w/magnus/wiki.phtml?title={$t}&action=submit&doit=1" ; #wfEscapeHTML( wfImageUrl( $name ) ); $style = $this->getExternalLinkAttributes( $link, $name ); $s .= " | {$name}" ; } } if ( "history" == $action || isset( $diff ) || isset( $oldid ) ) { $s .= " | " . $this->makeKnownLink( $wgTitle->getPrefixedText(), wfMsg( "currentrev" ) ); } if ( $wgUser->getNewtalk() ) { # do not show "You have new messages" text when we are viewing our # own talk page if(!(strcmp($wgTitle->getText(),$wgUser->getName()) == 0 && $wgTitle->getNamespace()==Namespace::getTalk(Namespace::getUser()))) { $n =$wgUser->getName(); $tl = $this->makeKnownLink( $wgLang->getNsText( Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}", wfMsg("newmessageslink") ); $s.=" | ". wfMsg( "newmessages", $tl ) . ""; } } if( $wgUser->isSysop() && (($wgTitle->getArticleId() == 0) || ($action == "history")) && ($n = $wgTitle->isDeleted() ) ) { $s .= " | " . wfMsg( "thisisdeleted", $this->makeKnownLink( $wgLang->SpecialPage( "Undelete/" . $wgTitle->getPrefixedDBkey() ), wfMsg( "restorelink", $n ) ) ); } return $s; } function printableLink() { global $wgOut, $wgTitle, $oldid, $action; $q = ""; foreach( $_GET as $var => $val ) { if( $var != "title" && $var != "printable" ) $q .= urlencode( $var ) . "=" . urlencode( $val ); } if( !empty( $q ) ) $q .= "&"; $s = $this->makeKnownLink( $wgTitle->getPrefixedText(), WfMsg( "printableversion" ), "{$q}printable=yes" ); return $s; } function pageTitle() { global $wgOut, $wgTitle, $wgUser; $s = "

" . $wgOut->getPageTitle() . "

"; if($wgUser->getOption("editsectiononrightclick") && $wgTitle->userCanEdit()) { $s=$this->editSectionScript(0,$s);} return $s; } function pageSubtitle() { global $wgOut,$wgTitle,$wgNamespacesWithSubpages; $sub = $wgOut->getSubtitle(); if ( "" == $sub ) { global $wgExtraSubtitle; $sub = wfMsg( "fromwikipedia" ) . $wgExtraSubtitle; } if($wgOut->isArticle() && $wgNamespacesWithSubpages[$wgTitle->getNamespace()]) { $ptext=$wgTitle->getPrefixedText(); if(preg_match("/\//",$ptext)) { $sub.="

"; $links=explode("/",$ptext); $c=0; $growinglink=""; foreach($links as $link) { $c++; if ($cmakeLink( $growinglink, $link ); if(preg_match("/class='new'/i",$getlink)) { break; } # this is a hack, but it saves time if ($c>1) { $sub .= " | "; } else { $sub .="< "; } $sub .= $getlink; $growinglink.="/"; } } } } $s = "

{$sub}\n"; return $s; } function nameAndLogin() { global $wgUser, $wgTitle, $wgLang, $wgShowIPinHeader; $li = $wgLang->specialPage( "Userlogin" ); $lo = $wgLang->specialPage( "Userlogout" ); $s = ""; if ( 0 == $wgUser->getID() ) { if( $wgShowIPinHeader ) { $n = getenv( "REMOTE_ADDR" ); $tl = $this->makeKnownLink( $wgLang->getNsText( Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}", $wgLang->getNsText( Namespace::getTalk( 0 ) ) ); $s .= $n . " (".$tl.")"; } else { $s .= wfMsg("notloggedin"); } $rt = $wgTitle->getPrefixedURL(); if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) { $q = ""; } else { $q = "returnto={$rt}"; } $s .= "\n
" . $this->makeKnownLink( $li, wfMsg( "login" ), $q ); } else { $n = $wgUser->getName(); $rt = $wgTitle->getPrefixedURL(); $tl = $this->makeKnownLink( $wgLang->getNsText( Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}", $wgLang->getNsText( Namespace::getTalk( 0 ) ) ); $tl = " ({$tl})"; $s .= $this->makeKnownLink( $wgLang->getNsText( Namespace::getUser() ) . ":{$n}", $n ) . "{$tl}
" . $this->makeKnownLink( $lo, wfMsg( "logout" ), "returnto={$rt}" ) . " | " . $this->specialLink( "preferences" ); } $s .= " | " . $this->makeKnownLink( wfMsg( "helppage" ), wfMsg( "help" ) ); return $s; } function searchForm() { global $search; $s = "

" . "\n" . " " . "
"; return $s; } function topLinks() { global $wgOut; $sep = " |\n"; $s = $this->mainPageLink() . $sep . $this->specialLink( "recentchanges" ); if ( $wgOut->isArticle() ) { $s .= $sep . $this->editThisPage() . $sep . $this->historyLink(); } # Many people don't like this dropdown box #$s .= $sep . $this->specialPagesList(); return $s; } function bottomLinks() { global $wgOut, $wgUser, $wgTitle; $sep = " |\n"; $s = ""; if ( $wgOut->isArticle() ) { $s .= "" . $this->editThisPage() . ""; if ( 0 != $wgUser->getID() ) { $s .= $sep . $this->watchThisPage(); } $s .= $sep . $this->talkLink() . $sep . $this->historyLink() . $sep . $this->whatLinksHere() . $sep . $this->watchPageLinksLink(); if ( $wgTitle->getNamespace() == Namespace::getUser() || $wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser()) ) { $id=User::idFromName($wgTitle->getText()); $ip=User::isIP($wgTitle->getText()); if($id || $ip) { # both anons and non-anons have contri list $s .= $sep . $this->userContribsLink(); } if ( 0 != $wgUser->getID() ) { # show only to signed in users if($id) { # can only email non-anons $s .= $sep . $this->emailUserLink(); } } } if ( $wgUser->isSysop() && $wgTitle->getArticleId() ) { $s .= "\n
" . $this->deleteThisPage() . $sep . $this->protectThisPage() . $sep . $this->moveThisPage(); } $s .= "
\n" . $this->otherLanguages(); } return $s; } function pageStats() { global $wgOut, $wgLang, $wgArticle; global $oldid, $diff, $wgDisableCounters; if ( ! $wgOut->isArticle() ) { return ""; } if ( isset( $oldid ) || isset( $diff ) ) { return ""; } if ( 0 == $wgArticle->getID() ) { return ""; } if ( $wgDisableCounters ) { $s = ""; } else { $count = $wgArticle->getCount(); $s = wfMsg( "viewcount", $count ); } $s .= $this->lastModified(); $s .= " " . wfMsg( "gnunote" ); return "{$s}"; } function lastModified() { global $wgLang, $wgArticle; $d = $wgLang->timeanddate( $wgArticle->getTimestamp(), true ); $s = " " . wfMsg( "lastmodified", $d ); return $s; } function logoText( $align = "" ) { if ( "" != $align ) { $a = " align='{$align}'"; } else { $a = ""; } $mp = wfMsg( "mainpage" ); $s = "getLogo() . "\" alt=\"" . "[{$mp}]\">"; return $s; } function quickBar() { global $wgOut, $wgTitle, $wgUser, $action, $wgLang; global $wpPreview, $wgDisableUploads; $fname = "Skin::quickBar"; wfProfileIn( $fname ); $tns=$wgTitle->getNamespace(); $s = "\n
"; $s .= "\n" . $this->logoText() . "\n
"; $sep = "\n
"; $s .= $this->mainPageLink() . $sep . $this->specialLink( "recentchanges" ) . $sep . $this->specialLink( "randompage" ); if ($wgUser->getID()) { $s.= $sep . $this->specialLink( "watchlist" ) ; $s .= $sep .$this->makeKnownLink( $wgLang->specialPage( "Contributions" ), wfMsg( "mycontris" ), "target=" . wfUrlencode($wgUser->getName() ) ); } // only show watchlist link if logged in if ( wfMsg ( "currentevents" ) != "-" ) $s .= $sep . $this->makeKnownLink( wfMsg( "currentevents" ), "" ) ; $s .= "\n

"; $articleExists = $wgTitle->getArticleId(); if ( $wgOut->isArticle() || $action =="edit" || $action =="history" || $wpPreview) { if($wgOut->isArticle()) { $s .= "" . $this->editThisPage() . ""; } else { # backlink to the article in edit or history mode if($articleExists){ # no backlink if no article switch($tns) { case 0: $text = wfMsg("articlepage"); break; case 1: $text = wfMsg("viewtalkpage"); break; case 2: $text = wfMsg("userpage"); break; case 3: $text = wfMsg("viewtalkpage"); break; case 4: $text = wfMsg("wikipediapage"); break; case 5: $text = wfMsg("viewtalkpage"); break; case 6: $text = wfMsg("imagepage"); break; case 7: $text = wfMsg("viewtalkpage"); break; default: $text= wfMsg("articlepage"); } $link = $wgTitle->getText(); if ($nstext = $wgLang->getNsText($tns) ) { # add namespace if necessary $link = $nstext . ":" . $link ; } $s .= $this->makeLink( $link, $text ); } elseif( $wgTitle->getNamespace() != Namespace::getSpecial() ) { # we just throw in a "New page" text to tell the user that he's in edit mode, # and to avoid messing with the separator that is prepended to the next item $s .= "" . wfMsg("newpage") . ""; } } if( $tns%2 && $action!="edit" && !$wpPreview) { $s.="
".$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("postcomment"),"action=edit§ion=new"); } /* watching could cause problems in edit mode: if user edits article, then loads "watch this article" in background and then saves article with "Watch this article" checkbox disabled, the article is transparently unwatched. Therefore we do not show the "Watch this page" link in edit mode */ if ( 0 != $wgUser->getID() && $articleExists) { if($action!="edit" && $action!="history" && $action != "submit" ) { $s .= $sep . $this->watchThisPage(); } if ( $wgTitle->userCanEdit() ) $s .= $sep . $this->moveThisPage(); } if ( $wgUser->isSysop() and $articleExists ) { $s .= $sep . $this->deleteThisPage() . $sep . $this->protectThisPage(); } $s .= $sep . $this->talkLink(); if ($articleExists && $action !="history") { $s .= $sep . $this->historyLink(); } $s.=$sep . $this->whatLinksHere(); if($wgOut->isArticle()) { $s .= $sep . $this->watchPageLinksLink(); } if ( Namespace::getUser() == $wgTitle->getNamespace() || $wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser()) ) { $id=User::idFromName($wgTitle->getText()); $ip=User::isIP($wgTitle->getText()); if($id||$ip) { $s .= $sep . $this->userContribsLink(); } if ( 0 != $wgUser->getID() ) { if($id) { # can only email real users $s .= $sep . $this->emailUserLink(); } } } $s .= "\n

"; } if ( 0 != $wgUser->getID() && !$wgDisableUploads ) { $s .= $this->specialLink( "upload" ) . $sep; } $s .= $this->specialLink( "specialpages" ) . $sep . $this->bugReportsLink(); global $wgSiteSupportPage; if( $wgSiteSupportPage ) { $s .= "\n
" . wfMsg( "sitesupport" ) . ""; } $s .= "\n
\n"; wfProfileOut( $fname ); return $s; } function specialPagesList() { global $wgUser, $wgOut, $wgLang, $wgServer, $wgRedirectScript; $a = array(); $validSP = $wgLang->getValidSpecialPages(); foreach ( $validSP as $name => $desc ) { if ( "" == $desc ) { continue; } $a[$name] = $desc; } if ( $wgUser->isSysop() ) { $sysopSP = $wgLang->getSysopSpecialPages(); foreach ( $sysopSP as $name => $desc ) { if ( "" == $desc ) { continue; } $a[$name] = $desc ; } } if ( $wgUser->isDeveloper() ) { $devSP = $wgLang->getDeveloperSpecialPages(); foreach ( $devSP as $name => $desc ) { if ( "" == $desc ) { continue; } $a[$name] = $desc ; } } $go = wfMsg( "go" ); $sp = wfMsg( "specialpages" ); $spp = $wgLang->specialPage( "Specialpages" ); $s = "
\n"; $s .= "\n"; $s .= "\n"; $s .= "
\n"; return $s; } function mainPageLink() { $mp = wfMsg( "mainpage" ); $s = $this->makeKnownLink( $mp, $mp ); return $s; } function copyrightLink() { $s = $this->makeKnownLink( wfMsg( "copyrightpage" ), wfMsg( "copyrightpagename" ) ); return $s; } function aboutLink() { $s = $this->makeKnownLink( wfMsg( "aboutpage" ), wfMsg( "aboutwikipedia" ) ); return $s; } function disclaimerLink() { $s = $this->makeKnownLink( wfMsg( "disclaimerpage" ), wfMsg( "disclaimers" ) ); return $s; } function editThisPage() { global $wgOut, $wgTitle, $oldid, $redirect, $diff; if ( ! $wgOut->isArticle() || $diff ) { $s = wfMsg( "protectedpage" ); } else { $n = $wgTitle->getPrefixedText(); if ( $wgTitle->userCanEdit() ) { $t = wfMsg( "editthispage" ); } else { #$t = wfMsg( "protectedpage" ); $t = wfMsg( "viewsource" ); } $oid = $red = ""; if ( $redirect ) { $red = "&redirect={$redirect}"; } if ( $oldid && ! isset( $diff ) ) { $oid = "&oldid={$oldid}"; } $s = $this->makeKnownLink( $n, $t, "action=edit{$oid}{$red}" ); } return $s; } function deleteThisPage() { global $wgUser, $wgOut, $wgTitle, $diff; if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) { $n = $wgTitle->getPrefixedText(); $t = wfMsg( "deletethispage" ); $s = $this->makeKnownLink( $n, $t, "action=delete" ); } else { $s = ""; } return $s; } function protectThisPage() { global $wgUser, $wgOut, $wgTitle, $diff; if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) { $n = $wgTitle->getPrefixedText(); if ( $wgTitle->isProtected() ) { $t = wfMsg( "unprotectthispage" ); $q = "action=unprotect"; } else { $t = wfMsg( "protectthispage" ); $q = "action=protect"; } $s = $this->makeKnownLink( $n, $t, $q ); } else { $s = ""; } return $s; } function watchThisPage() { global $wgUser, $wgOut, $wgTitle, $diff; if ( $wgOut->isArticle() && ( ! $diff ) ) { $n = $wgTitle->getPrefixedText(); if ( $wgTitle->userIsWatching() ) { $t = wfMsg( "unwatchthispage" ); $q = "action=unwatch"; } else { $t = wfMsg( "watchthispage" ); $q = "action=watch"; } $s = $this->makeKnownLink( $n, $t, $q ); } else { $s = wfMsg( "notanarticle" ); } return $s; } function moveThisPage() { global $wgTitle, $wgLang; if ( $wgTitle->userCanEdit() ) { $s = $this->makeKnownLink( $wgLang->specialPage( "Movepage" ), wfMsg( "movethispage" ), "target=" . $wgTitle->getPrefixedURL() ); } // no message if page is protected - would be redundant return $s; } function historyLink() { global $wgTitle; $s = $this->makeKnownLink( $wgTitle->getPrefixedText(), wfMsg( "history" ), "action=history" ); return $s; } function whatLinksHere() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ), wfMsg( "whatlinkshere" ), "target=" . $wgTitle->getPrefixedURL() ); return $s; } function userContribsLink() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ), wfMsg( "contributions" ), "target=" . $wgTitle->getURL() ); return $s; } function emailUserLink() { global $wgTitle, $wgLang; $s = $this->makeKnownLink( $wgLang->specialPage( "Emailuser" ), wfMsg( "emailuser" ), "target=" . $wgTitle->getURL() ); return $s; } function watchPageLinksLink() { global $wgOut, $wgTitle, $wgLang; if ( ! $wgOut->isArticle() ) { $s = "(" . wfMsg( "notanarticle" ) . ")"; } else { $s = $this->makeKnownLink( $wgLang->specialPage( "Recentchangeslinked" ), wfMsg( "recentchangeslinked" ), "target=" . $wgTitle->getPrefixedURL() ); } return $s; } function otherLanguages() { global $wgOut, $wgLang, $wgTitle; $a = $wgOut->getLanguageLinks(); # TEST THIS @@@ if ( 0 == count( $a ) ) { if ( !$wgUseNewInterlanguage ) return ""; $ns = $wgLang->getNsIndex ( $wgTitle->getNamespace () ) ; if ( $ns != 0 AND $ns != 1 ) return "" ; $pn = "Intl" ; $x = "mode=addlink&xt=".$wgTitle->getDBkey() ; return $this->makeKnownLink( $wgLang->specialPage( $pn ), wfMsg( "intl" ) , $x ); } if ( !$wgUseNewInterlanguage ) { $s = wfMsg( "otherlanguages" ) . ": "; } else { global $wgLanguageCode ; $x = "mode=zoom&xt=".$wgTitle->getDBkey() ; $x .= "&xl=".$wgLanguageCode ; $s = $this->makeKnownLink( $wgLang->specialPage( "Intl" ), wfMsg( "otherlanguages" ) , $x ) . ": " ; } $s = wfMsg( "otherlanguages" ) . ": "; $first = true; if($wgLang->isRTL()) $s .= ""; foreach( $a as $l ) { if ( ! $first ) { $s .= " | "; } $first = false; $nt = Title::newFromText( $l ); $url = $nt->getFullURL(); $text = $wgLang->getLanguageName( $nt->getInterwiki() ); if ( "" == $text ) { $text = $l; } $style = $this->getExternalLinkAttributes( $l, $text ); $s .= "{$text}"; } if($wgLang->isRTL()) $s .= ""; return $s; } function bugReportsLink() { $s = $this->makeKnownLink( wfMsg( "bugreportspage" ), wfMsg( "bugreports" ) ); return $s; } function dateLink() { global $wgLinkCache; $t1 = Title::newFromText( gmdate( "F j" ) ); $t2 = Title::newFromText( gmdate( "Y" ) ); $wgLinkCache->suspend(); $id = $t1->getArticleID(); $wgLinkCache->resume(); if ( 0 == $id ) { $s = $this->makeBrokenLink( $t1->getText() ); } else { $s = $this->makeKnownLink( $t1->getText() ); } $s .= ", "; $wgLinkCache->suspend(); $id = $t2->getArticleID(); $wgLinkCache->resume(); if ( 0 == $id ) { $s .= $this->makeBrokenLink( $t2->getText() ); } else { $s .= $this->makeKnownLink( $t2->getText() ); } return $s; } function talkLink() { global $wgLang, $wgTitle, $wgLinkCache; $tns = $wgTitle->getNamespace(); if ( -1 == $tns ) { return ""; } $pn = $wgTitle->getText(); $tp = wfMsg( "talkpage" ); if ( Namespace::isTalk( $tns ) ) { $lns = Namespace::getSubject( $tns ); switch($tns) { case 1: $text = wfMsg("articlepage"); break; case 3: $text = wfMsg("userpage"); break; case 5: $text = wfMsg("wikipediapage"); break; case 7: $text = wfMsg("imagepage"); break; default: $text= wfMsg("articlepage"); } } else { $lns = Namespace::getTalk( $tns ); $text=$tp; } $n = $wgLang->getNsText( $lns ); if ( "" == $n ) { $link = $pn; } else { $link = "{$n}:{$pn}"; } $wgLinkCache->suspend(); $s = $this->makeLink( $link, $text ); $wgLinkCache->resume(); return $s; } function commentLink() { global $wgLang, $wgTitle, $wgLinkCache; $tns = $wgTitle->getNamespace(); if ( -1 == $tns ) { return ""; } $lns = ( Namespace::isTalk( $tns ) ) ? $tns : Namespace::getTalk( $tns ); # assert Namespace::isTalk( $lns ) $n = $wgLang->getNsText( $lns ); $pn = $wgTitle->getText(); $link = "{$n}:{$pn}"; $wgLinkCache->suspend(); $s = $this->makeKnownLink($link, wfMsg("postcomment"), "action=edit§ion=new"); $wgLinkCache->resume(); return $s; } # After all the page content is transformed into HTML, it makes # a final pass through here for things like table backgrounds. # function transformContent( $text ) { return $text; } # Note: This function MUST call getArticleID() on the link, # otherwise the cache won't get updated properly. See LINKCACHE.DOC. # function makeLink( $title, $text = "", $query = "", $trail = "" ) { wfProfileIn( "Skin::makeLink" ); $nt = Title::newFromText( $title ); if ($nt) { $result = $this->makeLinkObj( Title::newFromText( $title ), $text, $query, $trail ); } else { wfDebug( "Invalid title passed to Skin::makeLink(): \"$title\"\n" ); $result = $text == "" ? $title : $text; } wfProfileOut( "Skin::makeLink" ); return $result; } function makeKnownLink( $title, $text = "", $query = "", $trail = "" ) { $nt = Title::newFromText( $title ); if ($nt) { return $this->makeKnownLinkObj( Title::newFromText( $title ), $text, $query, $trail ); } else { wfDebug( "Invalid title passed to Skin::makeKnownLink(): \"$title\"\n" ); return $text == "" ? $title : $text; } } function makeBrokenLink( $title, $text = "", $query = "", $trail = "" ) { $nt = Title::newFromText( $title ); if ($nt) { return $this->makeBrokenLinkObj( Title::newFromText( $title ), $text, $query, $trail ); } else { wfDebug( "Invalid title passed to Skin::makeBrokenLink(): \"$title\"\n" ); return $text == "" ? $title : $text; } } function makeStubLink( $title, $text = "", $query = "", $trail = "" ) { $nt = Title::newFromText( $title ); if ($nt) { return $this->makeStubLinkObj( Title::newFromText( $title ), $text, $query, $trail ); } else { wfDebug( "Invalid title passed to Skin::makeStubLink(): \"$title\"\n" ); return $text == "" ? $title : $text; } } # Pass a title object, not a title string function makeLinkObj( &$nt, $text= "", $query = "", $trail = "" ) { global $wgOut, $wgUser; if ( $nt->isExternal() ) { $u = $nt->getFullURL(); if ( "" == $text ) { $text = $nt->getPrefixedText(); } $style = $this->getExternalLinkAttributes( $link, $text ); $inside = ""; if ( "" != $trail ) { if ( preg_match( "/^([a-z]+)(.*)$$/sD", $trail, $m ) ) { $inside = $m[1]; $trail = $m[2]; } } $retVal = "{$text}{$inside}{$trail}"; } elseif ( 0 == $nt->getNamespace() && "" == $nt->getText() ) { $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail ); } elseif ( ( -1 == $nt->getNamespace() ) || ( Namespace::getImage() == $nt->getNamespace() ) ) { $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail ); } else { $aid = $nt->getArticleID() ; if ( 0 == $aid ) { $retVal = $this->makeBrokenLinkObj( $nt, $text, $query, $trail ); } else { $threshold = $wgUser->getOption("stubthreshold") ; if ( $threshold > 0 ) { $res = wfQuery ( "SELECT HIGH_PRIORITY length(cur_text) AS x, cur_namespace, cur_is_redirect FROM cur WHERE cur_id='{$aid}'", DB_READ ) ; if ( wfNumRows( $res ) > 0 ) { $s = wfFetchObject( $res ); $size = $s->x; if ( $s->cur_is_redirect OR $s->cur_namespace != 0 ) { $size = $threshold*2 ; # Really big } wfFreeResult( $res ); } else { $size = $threshold*2 ; # Really big } } else { $size = 1 ; } if ( $size < $threshold ) { $retVal = $this->makeStubLinkObj( $nt, $text, $query, $trail ); } else { $retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail ); } } } return $retVal; } # Pass a title object, not a title string function makeKnownLinkObj( &$nt, $text = "", $query = "", $trail = "" ) { global $wgOut, $wgTitle; $fname = "Skin::makeKnownLinkObj"; wfProfileIn( $fname ); $link = $nt->getPrefixedURL(); if ( "" == $link ) { $u = ""; if ( "" == $text ) { $text = $nt->getFragment(); } } else { $u = wfLocalUrlE( $link, $query ); } if ( "" != $nt->getFragment() ) { $u .= "#" . wfEscapeHTML( $nt->getFragment() ); } if ( "" == $text ) { $text = $nt->getPrefixedText(); } $style = $this->getInternalLinkAttributesObj( $nt, $text ); $inside = ""; if ( "" != $trail ) { if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) { $inside = $m[1]; $trail = $m[2]; } } $r = "{$text}{$inside}{$trail}"; wfProfileOut( $fname ); return $r; } # Pass a title object, not a title string function makeBrokenLinkObj( &$nt, $text = "", $query = "", $trail = "" ) { global $wgOut, $wgUser; $fname = "Skin::makeBrokenLinkObj"; wfProfileIn( $fname ); $link = $nt->getPrefixedURL(); if ( "" == $query ) { $q = "action=edit"; } else { $q = "action=edit&{$query}"; } $u = wfLocalUrlE( $link, $q ); if ( "" == $text ) { $text = $nt->getPrefixedText(); } $style = $this->getInternalLinkAttributesObj( $nt, $text, "yes" ); $inside = ""; if ( "" != $trail ) { if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) { $inside = $m[1]; $trail = $m[2]; } } if ( $wgOut->isPrintable() || ( 1 == $wgUser->getOption( "highlightbroken" ) ) ) { $s = "{$text}{$inside}{$trail}"; } else { $s = "{$text}{$inside}?{$trail}"; } wfProfileOut( $fname ); return $s; } # Pass a title object, not a title string function makeStubLinkObj( &$nt, $text = "", $query = "", $trail = "" ) { global $wgOut, $wgUser; $link = $nt->getPrefixedURL(); $u = wfLocalUrlE( $link, $query ); if ( "" == $text ) { $text = $nt->getPrefixedText(); } $style = $this->getInternalLinkAttributesObj( $nt, $text, "stub" ); $inside = ""; if ( "" != $trail ) { if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) { $inside = $m[1]; $trail = $m[2]; } } if ( $wgOut->isPrintable() || ( 1 == $wgUser->getOption( "highlightbroken" ) ) ) { $s = "{$text}{$inside}{$trail}"; } else { $s = "{$text}{$inside}!{$trail}"; } return $s; } function fnamePart( $url ) { $basename = strrchr( $url, "/" ); if ( false === $basename ) { $basename = $url; } else { $basename = substr( $basename, 1 ); } return wfEscapeHTML( $basename ); } function makeImage( $url, $alt = "" ) { global $wgOut; if ( "" == $alt ) { $alt = $this->fnamePart( $url ); } $s = "\"{$alt}\""; return $s; } function makeImageLink( $name, $url, $alt = "" ) { $nt = Title::makeTitle( Namespace::getImage(), $name ); return $this->makeImageLinkObj( $nt, $alt ); } function makeImageLinkObj( $nt, $alt = "" ) { $link = $nt->getPrefixedURL(); $name = $nt->getDBKey(); $url = wfImageUrl( $name ); if ( empty( $alt ) ) { $alt = preg_replace( '/\.(.+?)^/', '', $name ); } $alt = htmlspecialchars( $alt ); $u = wfLocalUrlE( $link ); $s = "" . "\"{$alt}\""; return $s; } function makeMediaLink( $name, $url, $alt = "" ) { $nt = Title::makeTitle( Namespace::getMedia(), $name ); return $this->makeMediaLinkObj( $nt, $alt ); } function makeMediaLinkObj( $nt, $alt = "" ) { $name = $nt->getDBKey(); $url = wfImageUrl( $name ); if ( empty( $alt ) ) { $alt = preg_replace( '/\.(.+?)^/', '', $name ); } $u = htmlspecialchars( $url ); $s = "{$alt}"; return $s; } function specialLink( $name, $key = "" ) { global $wgLang; if ( "" == $key ) { $key = strtolower( $name ); } $pn = $wgLang->ucfirst( $name ); return $this->makeKnownLink( $wgLang->specialPage( $pn ), wfMsg( $key ) ); } # Called by history lists and recent changes # function beginRecentChangesList() { $rc_cache = array() ; $rccc = 0 ; $this->lastdate = ""; return ""; } function beginImageHistoryList() { $s = "\n

" . wfMsg( "imghistory" ) . "

\n" . "

" . wfMsg( "imghistlegend" ) . "\n

\n"; return $s; } function endImageHistoryList() { $s = "\n"; return $s; } function recentChangesBlockLine ( $y ) { global $wgUploadPath ; $M = wfMsg( "minoreditletter" ); $N = wfMsg( "newpageletter" ); $r = "" ; $r .= "" ; $r .= "" ; if ( $y->isnew ) $r .= $N ; else $r .= " " ; if ( $y->isminor ) $r .= $M ; else $r .= " " ; $r .= " ".$y->timestamp." " ; $r .= "" ; $link = $y->link ; if ( $y->watched ) $link = "{$link}" ; $r .= $link ; $r .= " (" ; $r .= $y->curlink ; $r .= "; " ; $r .= $this->makeKnownLink( $y->secureName, wfMsg( "hist" ), "action=history" ); $r .= ") . . ".$y->userlink ; $r .= $y->usertalklink ; if ( $y->usercomment != "" ) $r .= " (".wfEscapeHTML($y->usercomment).")" ; $r .= "
\n" ; return $r ; } function recentChangesBlockGroup ( $y ) { global $wgUploadPath ; $r = "" ; $M = wfMsg( "minoreditletter" ); $N = wfMsg( "newpageletter" ); $isnew = false ; $userlinks = array () ; foreach ( $y AS $x ) { $oldid = $x->diffid ; if ( $x->isnew ) $isnew = true ; $u = $x->userlink ; if ( !isset ( $userlinks[$u] ) ) $userlinks[$u] = 0 ; $userlinks[$u]++ ; } krsort ( $userlinks ) ; asort ( $userlinks ) ; $users = array () ; $u = array_keys ( $userlinks ) ; foreach ( $u as $x ) { $z = $x ; if ( $userlinks[$x] > 1 ) $z .= " ({$userlinks[$x]}×)" ; array_push ( $users , $z ) ; } $users = " [".implode("; ",$users)."]" ; $e = $y ; $e = array_shift ( $e ) ; # Arrow $rci = "RCI{$this->rccc}" ; $rcl = "RCL{$this->rccc}" ; $rcm = "RCM{$this->rccc}" ; $tl = "" ; $tl .= "" ; $tl .= "" ; $tl .= "" ; $r .= $tl ; # Main line $r .= "" ; if ( $isnew ) $r .= $N ; else $r .= " " ; $r .= " " ; # Minor $r .= " ".$e->timestamp." " ; $r .= "" ; $link = $e->link ; if ( $e->watched ) $link = "{$link}" ; $r .= $link ; if ( !$e->islog ) { $r .= " (".count($y)." " ; if ( $isnew ) $r .= wfMsg("changes"); else $r .= $this->makeKnownLink( $e->secureName , wfMsg("changes") , "diff=0&oldid=".$oldid ) ; $r .= "; " ; $r .= $this->makeKnownLink( $e->secureName, wfMsg( "history" ), "action=history" ); $r .= ")" ; } $r .= $users ; $r .= "
\n" ; # Sub-entries $r .= "\n" ; $this->rccc++ ; return $r ; } function recentChangesBlock () { global $wgUploadPath ; if ( count ( $this->rc_cache ) == 0 ) return "" ; $k = array_keys ( $this->rc_cache ) ; foreach ( $k AS $x ) { $y = $this->rc_cache[$x] ; if ( count ( $y ) < 2 ) { $r .= $this->recentChangesBlockLine ( array_shift ( $y ) ) ; } else { $r .= $this->recentChangesBlockGroup ( $y ) ; } } return "
{$r}
" ; } function recentChangesLine( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 ) { global $wgUser ; $usenew = $wgUser->getOption( "usenewrc" ); if ( $usenew ) $r = $this->recentChangesLineNew ( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched , $oldid , $diffid ) ; else $r = $this->recentChangesLineOld ( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched , $oldid , $diffid ) ; return $r ; } function recentChangesLineOld( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0, $diffid = 0 ) { global $wgTitle, $wgLang, $wgUser; $d = $wgLang->date( $ts, true); $s = ""; if ( $d != $this->lastdate ) { if ( "" != $this->lastdate ) { $s .= "\n"; } $s .= "

{$d}

\n