4 # These are the INTERNAL names, which get mapped
5 # directly to class names. For display purposes, the
6 # Language class has internationalized names
8 /* private */ $wgValidSkinNames = array(
9 "Standard", "Nostalgia", "CologneBlue"
12 class RecentChangesClass
{
13 var $secureName , $displayName , $link , $namespace ;
14 var $oldid , $diffid , $timestamp , $curlink , $lastlink , $usertalklink , $versionlink ;
15 var $usercomment , $userlink ;
16 var $isminor , $isnew , $watched , $islog ;
21 /* private */ var $lastdate, $lastline;
23 var $rc_cache ; # Cache for Enhanced Recent Changes
24 var $rccc ; # Recent Changes Cache Counter for visibility toggle
31 function getSkinNames()
33 global $wgValidSkinNames;
34 return $wgValidSkinNames;
37 function getStylesheet()
39 return "wikistandard.css";
44 global $wgOut, $wgUser;
46 if ( $wgOut->isQuickbarSupressed() ) { return 0; }
47 $q = $wgUser->getOption( "quickbar" );
48 if ( "" == $q ) { $q = 0; }
54 global $wgOut, $wgStyleSheetPath;
55 wfProfileIn( "Skin::initPage" );
57 $wgOut->addLink( "shortcut icon", "", "/favicon.ico" );
58 if ( $wgOut->isPrintable() ) { $ss = "wikiprintable.css"; }
59 else { $ss = $this->getStylesheet(); }
60 $wgOut->addLink( "stylesheet", "", "{$wgStyleSheetPath}/{$ss}" );
64 function getHeadScripts() {
65 global $wgStyleSheetPath;
66 $r = "<script type=\"text/javascript\" src=\"{$wgStyleSheetPath}/wikibits.js\"></script>\n";
70 function getUserStyles()
72 $s = "<style type='text/css' media='screen'><!--\n";
73 $s .= $this->doGetUserStyles();
74 $s .= "//--></style>\n";
78 function doGetUserStyles()
83 if ( 1 == $wgUser->getOption( "underline" ) ) {
84 # Don't override browser settings
87 $s .= "a.stub, a.new, a.internal, a.external { " .
88 "text-decoration: none; }\n";
90 if ( 1 == $wgUser->getOption( "highlightbroken" ) ) {
91 $s .= "a.new, #quickbar a.new { color: #CC2200; }\n";
93 if ( 1 == $wgUser->getOption( "justify" ) ) {
94 $s .= "#article { text-align: justify; }\n";
99 function getBodyOptions()
101 global $wgUser, $wgTitle, $wgNamespaceBackgrounds, $wgOut, $oldid, $redirect, $diff,$action;
103 if ( 0 != $wgTitle->getNamespace() ) {
104 $a = array( "bgcolor" => "#FFFFDD" );
106 else $a = array( "bgcolor" => "#FFFFFF" );
107 if($wgOut->isArticle() && $wgUser->getOption("editondblclick")
109 (!$wgTitle->isProtected() ||
$wgUser->isSysop())
112 $n = $wgTitle->getPrefixedURL();
113 $t = wfMsg( "editthispage" );
115 if ( $redirect ) { $red = "&redirect={$redirect}"; }
116 if ( $oldid && ! isset( $diff ) ) {
117 $oid = "&oldid={$oldid}";
119 $s = wfLocalUrlE($n,"action=edit{$oid}{$red}");
120 $s = "document.location = \"" .$s ."\";";
121 $a +
= array ("ondblclick" => $s);
124 if($action=="edit") { # set focus in edit box
125 $a +
= array("onLoad"=>"document.editform.wpTextbox1.focus()");
130 function getExternalLinkAttributes( $link, $text )
132 global $wgUser, $wgOut, $wgLang;
134 $link = urldecode( $link );
135 $link = $wgLang->checkTitleEncoding( $link );
136 $link = str_replace( "_", " ", $link );
137 $link = wfEscapeHTML( $link );
139 if ( $wgOut->isPrintable() ) { $r = " class='printable'"; }
140 else { $r = " class='external'"; }
142 if ( 1 == $wgUser->getOption( "hover" ) ) {
143 $r .= " title=\"{$link}\"";
148 function getInternalLinkAttributes( $link, $text, $broken = false )
150 global $wgUser, $wgOut;
152 $link = urldecode( $link );
153 $link = str_replace( "_", " ", $link );
154 $link = wfEscapeHTML( $link );
156 if ( $wgOut->isPrintable() ) { $r = " class='printable'"; }
157 else if ( $broken == "stub" ) { $r = " class='stub'"; }
158 else if ( $broken == "yes" ) { $r = " class='new'"; }
159 else { $r = " class='internal'"; }
161 if ( 1 == $wgUser->getOption( "hover" ) ) {
162 $r .= " title=\"{$link}\"";
173 # This will be called immediately after the <body> tag. Split into
174 # two functions to make it easier to subclass.
176 function beforeContent()
178 global $wgUser, $wgOut;
180 if ( $wgOut->isPrintable() ) {
181 $s = $this->pageTitle() . $this->pageSubtitle() . "\n";
182 $s .= "\n<div class='bodytext'>";
185 return $this->doBeforeContent();
188 function doBeforeContent()
190 global $wgUser, $wgOut, $wgTitle, $wgLang;
191 wfProfileIn( "Skin::doBeforeContent" );
194 $qb = $this->qbSetting();
196 if( $langlinks = $this->otherLanguages() ) {
202 $borderhack = "class='top'";
205 $s .= "\n<div id='content'>\n<div id='topbar'>" .
206 "<table width='98%' border=0 cellspacing=0><tr>";
209 $left = ($qb == 1 ||
$qb == 3);
210 if($wgLang->isRTL()) $left = !$left;
213 $s .= "<td class='top' align=left valign=top rowspan='{$rows}'>" .
214 $this->logoText() . "</td>";
216 $s .= $this->getQuickbarCompensator( $rows );
218 $l = $wgLang->isRTL() ?
"right" : "left";
219 $s .= "<td {$borderhack} align='$l' valign='top'>";
221 $s .= $this->topLinks() ;
222 $s .= "<p class='subtitle'>" . $this->pageTitleLinks();
224 $r = $wgLang->isRTL() ?
"left" : "right";
225 $s .= "</td>\n<td {$borderhack} valign='top' align='$r' nowrap>";
226 $s .= $this->nameAndLogin();
227 $s .= "\n<br>" . $this->searchForm() . "</td>";
230 $s .= "</tr>\n<tr><td class='top' colspan=\"2\">$langlinks</td>";
233 if ( $shove && !$left ) { # Right
234 $s .= $this->getQuickbarCompensator( $rows );
236 $s .= "</tr></table>\n</div>\n";
237 $s .= "\n<div id='article'>";
239 $s .= $this->pageTitle();
240 $s .= $this->pageSubtitle() . "\n<p>";
245 function getQuickbarCompensator( $rows = 1 )
247 return "<td width='152' rowspan='{$rows}'> </td>";
250 # This gets called immediately before the </body> tag.
252 function afterContent()
254 global $wgUser, $wgOut, $wgServer, $HTTP_SERVER_VARS;
256 if ( $wgOut->isPrintable() ) {
259 $u = $wgServer . $HTTP_SERVER_VARS['REQUEST_URI'];
260 $u = preg_replace( "/[?&]printable=yes/", "", $u );
261 $rf = str_replace( "$1", $u, wfMsg( "retrievedfrom" ) );
263 if ( $wgOut->isArticle() ) {
264 $lm = "<br>" . $this->lastModified();
267 $s .= "<p><em>{$rf}{$lm}</em>\n";
270 return $this->doAfterContent();
273 function doAfterContent()
275 global $wgUser, $wgOut, $wgLang;
276 wfProfileIn( "Skin::doAfterContent" );
278 $s = "\n</div><br clear=all>\n";
280 $s .= "\n<div id='footer'>";
281 $s .= "<table width='98%' border=0 cellspacing=0><tr>";
283 $qb = $this->qbSetting();
285 $left = ($qb == 1 ||
$qb == 3);
286 if($wgLang->isRTL()) $left = !$left;
288 if ( $shove && $left ) { # Left
289 $s .= $this->getQuickbarCompensator();
291 $l = $wgLang->isRTL() ?
"right" : "left";
292 $s .= "<td class='bottom' align='$l' valign='top'>";
294 $s .= $this->bottomLinks();
295 $s .= "\n<br>" . $this->mainPageLink()
296 . " | " . $this->aboutLink()
297 . " | " . $this->specialLink( "recentchanges" )
298 . " | " . $this->searchForm()
299 . "<br>" . $this->pageStats();
302 if ( $shove && !$left ) { # Right
303 $s .= $this->getQuickbarCompensator();
305 $s .= "</tr></table>\n</div>\n</div>\n";
307 if ( 0 != $qb ) { $s .= $this->quickBar(); }
312 function pageTitleLinks()
314 global $wgOut, $wgTitle, $oldid, $action, $diff, $wgUser, $wgLang;
316 $s = $this->printableLink();
318 if ( $wgOut->isArticle() ) {
319 if ( $wgTitle->getNamespace() == Namespace::getImage() ) {
320 $name = $wgTitle->getDBkey();
321 $link = wfEscapeHTML( wfImageUrl( $name ) );
322 $style = $this->getInternalLinkAttributes( $link, $name );
323 $s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
326 if ( "history" == $action ||
isset( $diff ) ||
isset( $oldid ) ) {
327 $s .= " | " . $this->makeKnownLink( $wgTitle->getPrefixedText(),
328 wfMsg( "currentrev" ) );
331 if ( $wgUser->getNewtalk() ) {
332 # do not show "You have new messages" text when we are viewing our
335 if(!(strcmp($wgTitle->getText(),$wgUser->getName()) == 0 &&
336 $wgTitle->getNamespace()==Namespace::getTalk(Namespace::getUser()))) {
337 $n =$wgUser->getName();
338 $tl = $this->makeKnownLink( $wgLang->getNsText(
339 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
340 wfMsg("newmessageslink") );
341 $s.=" | <strong>". str_replace( "$1", $tl, wfMsg("newmessages") ) . "</strong>";
347 function printableLink()
349 global $wgOut, $wgTitle, $oldid, $action;
351 if ( "history" == $action ) { $q = "action=history&"; }
354 $s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
355 WfMsg( "printableversion" ), "{$q}printable=yes" );
361 global $wgOut, $wgTitle;
363 $s = "<h1 class='pagetitle'>" . $wgOut->getPageTitle() . "</h1>";
367 function pageSubtitle()
369 global $wgOut,$wgTitle,$wgNamespacesWithSubpages;
371 $sub = $wgOut->getSubtitle();
372 if ( "" == $sub ) { $sub = wfMsg( "fromwikipedia" ); }
373 if($wgOut->isArticle() && $wgNamespacesWithSubpages[$wgTitle->getNamespace()]) {
374 $ptext=$wgTitle->getPrefixedText();
375 if(preg_match("/\//",$ptext)) {
376 $sub.="</p><p class='subpages'>";
377 $links=explode("/",$ptext);
380 foreach($links as $link) {
382 if ($c<count($links)) {
384 $getlink=$this->makeLink($growinglink,$link);
385 if(preg_match("/class='new'/i",$getlink)) { break; } # this is a hack, but it saves time
398 $s = "<p class='subtitle'>{$sub}\n";
402 function nameAndLogin()
404 global $wgUser, $wgTitle, $wgLang, $wgShowIPinHeader;
406 $li = $wgLang->specialPage( "Userlogin" );
407 $lo = $wgLang->specialPage( "Userlogout" );
410 if ( 0 == $wgUser->getID() ) {
411 if( $wgShowIPinHeader ) {
412 $n = getenv( "REMOTE_ADDR" );
414 $tl = $this->makeKnownLink( $wgLang->getNsText(
415 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
416 $wgLang->getNsText( Namespace::getTalk( 0 ) ) );
418 $s .= $n . " (".$tl.")";
420 $s .= wfMsg("notloggedin");
423 $rt = $wgTitle->getPrefixedURL();
424 if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
426 } else { $q = "returnto={$rt}"; }
428 $s .= "\n<br>" . $this->makeKnownLink( $li,
429 wfMsg( "login" ), $q );
431 $n = $wgUser->getName();
432 $rt = $wgTitle->getPrefixedURL();
433 $tl = $this->makeKnownLink( $wgLang->getNsText(
434 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
435 $wgLang->getNsText( Namespace::getTalk( 0 ) ) );
439 $s .= $this->makeKnownLink( $wgLang->getNsText(
440 Namespace::getUser() ) . ":{$n}", $n ) . "{$tl}<br>" .
441 $this->makeKnownLink( $lo, wfMsg( "logout" ),
442 "returnto={$rt}" ) . " | " .
443 $this->specialLink( "preferences" );
445 $s .= " | " . $this->makeKnownLink( wfMsg( "helppage" ),
451 function searchForm()
455 $s = "<form name='search' class='inline' method=get action=\""
456 . wfLocalUrl( "" ) . "\">"
457 . "<input type=text name=\"search\" size=19 value=\""
458 . htmlspecialchars(substr($search,0,256)) . "\">\n"
459 . "<input type=submit name=\"go\" value=\"" . wfMsg ("go") . "\"> "
460 . "<input type=submit value=\"" . wfMsg ("search") . "\"></form>";
470 $s = $this->mainPageLink() . $sep
471 . $this->specialLink( "recentchanges" );
473 if ( $wgOut->isArticle() ) {
474 $s .= $sep . $this->editThisPage()
475 . $sep . $this->historyLink();
477 $s .= $sep . $this->specialPagesList();
482 function bottomLinks()
484 global $wgOut, $wgUser, $wgTitle;
488 if ( $wgOut->isArticle() ) {
489 $s .= "<strong>" . $this->editThisPage() . "</strong>";
490 if ( 0 != $wgUser->getID() ) {
491 $s .= $sep . $this->watchThisPage();
493 $s .= $sep . $this->talkLink()
494 . $sep . $this->historyLink()
495 . $sep . $this->whatLinksHere()
496 . $sep . $this->watchPageLinksLink();
498 if ( $wgTitle->getNamespace() == Namespace::getUser()
499 ||
$wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser()) )
502 $id=User
::idFromName($wgTitle->getText());
503 $ip=User
::isIP($wgTitle->getText());
505 if($id ||
$ip) { # both anons and non-anons have contri list
506 $s .= $sep . $this->userContribsLink();
508 if ( 0 != $wgUser->getID() ) { # show only to signed in users
509 if($id) { # can only email non-anons
510 $s .= $sep . $this->emailUserLink();
514 if ( $wgUser->isSysop() && $wgTitle->getArticleId() ) {
515 $s .= "\n<br>" . $this->deleteThisPage() .
516 $sep . $this->protectThisPage() .
517 $sep . $this->moveThisPage();
519 $s .= "<br>\n" . $this->otherLanguages();
526 global $wgOut, $wgLang, $wgArticle;
527 global $oldid, $diff, $wgDisableCounters;
529 if ( ! $wgOut->isArticle() ) { return ""; }
530 if ( isset( $oldid ) ||
isset( $diff ) ) { return ""; }
531 if ( 0 == $wgArticle->getID() ) { return ""; }
533 if ( $wgDisableCounters ) {
536 $count = $wgArticle->getCount();
537 $s = str_replace( "$1", $count, wfMsg( "viewcount" ) );
539 $s .= $this->lastModified();
540 $s .= " " . wfMsg( "gnunote" );
541 return "<span id='pagestats'>{$s}</span>";
544 function lastModified()
546 global $wgLang, $wgArticle;
548 $d = $wgLang->timeanddate( $wgArticle->getTimestamp(), true );
549 $s = " " . str_replace( "$1", $d, wfMsg( "lastmodified" ) );
553 function logoText( $align = "" )
555 if ( "" != $align ) { $a = " align='{$align}'"; }
558 $mp = wfMsg( "mainpage" );
559 $s = "<a href=\"" . wfLocalUrlE( $mp ) . "\"><img{$a} border=0 src=\""
560 . $this->getLogo() . "\" alt=\"" . "[{$mp}]\"></a>";
566 global $wgOut, $wgTitle, $wgUser, $action, $wgLang;
568 wfProfileIn( "Skin::quickBar" );
570 $s = "\n<div id='quickbar'>";
571 $s .= "\n" . $this->logoText() . "\n<hr>";
574 $s .= $this->mainPageLink()
575 . $sep . $this->specialLink( "recentchanges" )
576 . $sep . $this->specialLink( "randompage" );
577 if ($wgUser->getID()) {
578 $s.= $sep . $this->specialLink( "watchlist" ) ;
579 $s .= $sep .$this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
580 wfMsg( "mycontris" ), "target=" . wfUrlencode($wgUser->getName() ) );
583 // only show watchlist link if logged in
584 if ( wfMsg ( "currentevents" ) != "-" ) $s .= $sep . $this->makeKnownLink( wfMsg( "currentevents" ), "" ) ;
586 $articleExists = $wgTitle->getArticleId();
587 if ( $wgOut->isArticle() ||
$action =="edit" ||
$action =="history" ||
$wpPreview) {
589 if($wgOut->isArticle()) {
590 $s .= "<strong>" . $this->editThisPage() . "</strong>";
591 } else { # backlink to the article in edit or history mode
593 if($articleExists){ # no backlink if no article
594 $tns=$wgTitle->getNamespace();
597 $text = wfMsg("articlepage");
600 $text = wfMsg("viewtalkpage");
603 $text = wfMsg("userpage");
606 $text = wfMsg("viewtalkpage");
609 $text = wfMsg("wikipediapage");
612 $text = wfMsg("viewtalkpage");
615 $text = wfMsg("imagepage");
618 $text = wfMsg("viewtalkpage");
621 $text= wfMsg("articlepage");
624 $link = $wgTitle->getText();
625 if ($nstext = $wgLang->getNsText($tns) ) { # add namespace if necessary
626 $link = $nstext . ":" . $link ;
628 $s .= $this->makeLink($link, $text );
629 } elseif( $wgTitle->getNamespace() != Namespace::getSpecial() ) {
630 # we just throw in a "New page" text to tell the user that he's in edit mode,
631 # and to avoid messing with the separator that is prepended to the next item
632 $s .= "<strong>" . wfMsg("newpage") . "</strong>";
638 watching could cause problems in edit mode:
639 if user edits article, then loads "watch this article" in background and then saves
640 article with "Watch this article" checkbox disabled, the article is transparently
641 unwatched. Therefore we do not show the "Watch this page" link in edit mode
643 if ( 0 != $wgUser->getID() && $articleExists) {
644 if($action!="edit" && $action!="history" &&
645 $action != "submit" )
646 {$s .= $sep . $this->watchThisPage(); }
647 if ( $wgTitle->userCanEdit() ) $s .= $sep . $this->moveThisPage();
649 if ( $wgUser->isSysop() and $articleExists ) {
650 $s .= $sep . $this->deleteThisPage() .
651 $sep . $this->protectThisPage();
653 $s .= $sep . $this->talkLink();
654 if ($articleExists && $action !="history") { $s .= $sep . $this->historyLink();}
655 $s.=$sep . $this->whatLinksHere();
657 if($wgOut->isArticle()) {
658 $s .= $sep . $this->watchPageLinksLink();
661 if ( Namespace::getUser() == $wgTitle->getNamespace()
662 ||
$wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser())
665 $id=User
::idFromName($wgTitle->getText());
666 $ip=User
::isIP($wgTitle->getText());
669 $s .= $sep . $this->userContribsLink();
671 if ( 0 != $wgUser->getID() ) {
672 if($id) { # can only email real users
673 $s .= $sep . $this->emailUserLink();
680 if ( 0 != $wgUser->getID() ) {
681 $s .= $this->specialLink( "upload" ) . $sep;
683 $s .= $this->specialLink( "specialpages" )
684 . $sep . $this->bugReportsLink();
691 function specialPagesList()
693 global $wgUser, $wgOut, $wgLang, $wgServer, $wgRedirectScript;
696 $validSP = $wgLang->getValidSpecialPages();
698 foreach ( $validSP as $name => $desc ) {
699 if ( "" == $desc ) { continue; }
702 if ( $wgUser->isSysop() )
704 $sysopSP = $wgLang->getSysopSpecialPages();
706 foreach ( $sysopSP as $name => $desc ) {
707 if ( "" == $desc ) { continue; }
711 if ( $wgUser->isDeveloper() )
713 $devSP = $wgLang->getDeveloperSpecialPages();
715 foreach ( $devSP as $name => $desc ) {
716 if ( "" == $desc ) { continue; }
721 $sp = wfMsg( "specialpages" );
722 $spp = $wgLang->specialPage( "Specialpages" );
724 $s = "<form id=\"specialpages\" method=\"get\" class=\"inline\" " .
725 "action=\"{$wgServer}{$wgRedirectScript}\">\n";
726 $s .= "<select name=\"wpDropdown\">\n";
727 $s .= "<option value=\"{$spp}\">{$sp}</option>\n";
729 foreach ( $a as $name => $desc ) {
730 $p = $wgLang->specialPage( $name );
731 $s .= "<option value=\"{$p}\">{$desc}</option>\n";
734 $s .= "<input type=submit value=\"{$go}\" name=redirect>\n";
739 function mainPageLink()
741 $mp = wfMsg( "mainpage" );
742 $s = $this->makeKnownLink( $mp, $mp );
746 function copyrightLink()
748 $s = $this->makeKnownLink( wfMsg( "copyrightpage" ),
749 wfMsg( "copyrightpagename" ) );
755 $s = $this->makeKnownLink( wfMsg( "aboutpage" ),
756 wfMsg( "aboutwikipedia" ) );
760 function editThisPage()
762 global $wgOut, $wgTitle, $oldid, $redirect, $diff;
764 if ( ! $wgOut->isArticle() ||
$diff ) {
765 $s = wfMsg( "protectedpage" );
766 } else if ( $wgTitle->userCanEdit() ) {
767 $n = $wgTitle->getPrefixedText();
768 $t = wfMsg( "editthispage" );
771 if ( $redirect ) { $red = "&redirect={$redirect}"; }
772 if ( $oldid && ! isset( $diff ) ) {
773 $oid = "&oldid={$oldid}";
775 $s = $this->makeKnownLink( $n, $t, "action=edit{$oid}{$red}" );
777 $s = wfMsg( "protectedpage" );
782 function deleteThisPage()
784 global $wgUser, $wgOut, $wgTitle, $diff;
786 if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) {
787 $n = $wgTitle->getPrefixedText();
788 $t = wfMsg( "deletethispage" );
790 $s = $this->makeKnownLink( $n, $t, "action=delete" );
792 $s = wfMsg( "error" );
797 function protectThisPage()
799 global $wgUser, $wgOut, $wgTitle, $diff;
801 if ( $wgTitle->getArticleId() && ( ! $diff ) && $wgUser->isSysop() ) {
802 $n = $wgTitle->getPrefixedText();
804 if ( $wgTitle->isProtected() ) {
805 $t = wfMsg( "unprotectthispage" );
806 $q = "action=unprotect";
808 $t = wfMsg( "protectthispage" );
809 $q = "action=protect";
811 $s = $this->makeKnownLink( $n, $t, $q );
813 $s = wfMsg( "error" );
818 function watchThisPage()
820 global $wgUser, $wgOut, $wgTitle, $diff;
822 if ( $wgOut->isArticle() && ( ! $diff ) ) {
823 $n = $wgTitle->getPrefixedText();
825 if ( $wgTitle->userIsWatching() ) {
826 $t = wfMsg( "unwatchthispage" );
827 $q = "action=unwatch";
829 $t = wfMsg( "watchthispage" );
832 $s = $this->makeKnownLink( $n, $t, $q );
834 $s = wfMsg( "notanarticle" );
839 function moveThisPage()
841 global $wgTitle, $wgLang;
843 if ( $wgTitle->userCanEdit() ) {
844 $s = $this->makeKnownLink( $wgLang->specialPage( "Movepage" ),
845 wfMsg( "movethispage" ), "target=" . $wgTitle->getPrefixedURL() );
846 } // no message if page is protected - would be redundant
850 function historyLink()
854 $s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
855 wfMsg( "history" ), "action=history" );
859 function whatLinksHere()
861 global $wgTitle, $wgLang;
863 $s = $this->makeKnownLink( $wgLang->specialPage( "Whatlinkshere" ),
864 wfMsg( "whatlinkshere" ), "target=" . $wgTitle->getPrefixedURL() );
868 function userContribsLink()
870 global $wgTitle, $wgLang;
872 $s = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
873 wfMsg( "contributions" ), "target=" . $wgTitle->getURL() );
877 function emailUserLink()
879 global $wgTitle, $wgLang;
881 $s = $this->makeKnownLink( $wgLang->specialPage( "Emailuser" ),
882 wfMsg( "emailuser" ), "target=" . $wgTitle->getURL() );
886 function watchPageLinksLink()
888 global $wgOut, $wgTitle, $wgLang;
890 if ( ! $wgOut->isArticle() ) {
891 $s = "(" . wfMsg( "notanarticle" ) . ")";
893 $s = $this->makeKnownLink( $wgLang->specialPage(
894 "Recentchangeslinked" ), wfMsg( "recentchangeslinked" ),
895 "target=" . $wgTitle->getPrefixedURL() );
900 function otherLanguages()
902 global $wgOut, $wgLang, $wgTitle , $wgUseNewInterlanguage ;
904 $a = $wgOut->getLanguageLinks();
905 if ( 0 == count( $a ) ) {
906 if ( !$wgUseNewInterlanguage ) return "";
907 $ns = $wgLang->getNsIndex ( $wgTitle->getNamespace () ) ;
908 if ( $ns != 0 AND $ns != 1 ) return "" ;
910 $x = "mode=addlink&xt=".$wgTitle->getDBkey() ;
911 return $this->makeKnownLink( $wgLang->specialPage( $pn ),
912 wfMsg( "intl" ) , $x );
915 if ( !$wgUseNewInterlanguage ) {
916 $s = wfMsg( "otherlanguages" ) . ": ";
918 global $wgLanguageCode ;
919 $x = "mode=zoom&xt=".$wgTitle->getDBkey() ;
920 $x .= "&xl=".$wgLanguageCode ;
921 $s = $this->makeKnownLink( $wgLang->specialPage( "Intl" ),
922 wfMsg( "otherlanguages" ) , $x ) . ": " ;
926 foreach( $a as $l ) {
927 if ( ! $first ) { $s .= " | "; }
930 $nt = Title
::newFromText( $l );
931 $url = $nt->getFullURL();
932 $text = $wgLang->getLanguageName( $nt->getInterwiki() );
934 if ( "" == $text ) { $text = $l; }
935 $style = $this->getExternalLinkAttributes( $l, $text );
936 $s .= "<a href=\"{$url}\"{$style}>{$text}</a>";
941 function bugReportsLink()
943 $s = $this->makeKnownLink( wfMsg( "bugreportspage" ),
944 wfMsg( "bugreports" ) );
951 $t1 = Title
::newFromText( gmdate( "F j" ) );
952 $t2 = Title
::newFromText( gmdate( "Y" ) );
954 $wgLinkCache->suspend();
955 $id = $t1->getArticleID();
956 $wgLinkCache->resume();
959 $s = $this->makeBrokenLink( $t1->getText() );
961 $s = $this->makeKnownLink( $t1->getText() );
965 $wgLinkCache->suspend();
966 $id = $t2->getArticleID();
967 $wgLinkCache->resume();
970 $s .= $this->makeBrokenLink( $t2->getText() );
972 $s .= $this->makeKnownLink( $t2->getText() );
979 global $wgLang, $wgTitle, $wgLinkCache;
981 $tns = $wgTitle->getNamespace();
982 if ( -1 == $tns ) { return ""; }
984 $pn = $wgTitle->getText();
985 $tp = wfMsg( "talkpage" );
986 if ( Namespace::isTalk( $tns ) ) {
987 $lns = Namespace::getSubject( $tns );
990 $text = wfMsg("articlepage");
993 $text = wfMsg("userpage");
996 $text = wfMsg("wikipediapage");
999 $text = wfMsg("imagepage");
1002 $text= wfMsg("articlepage");
1006 $lns = Namespace::getTalk( $tns );
1009 $n = $wgLang->getNsText( $lns );
1010 if ( "" == $n ) { $link = $pn; }
1011 else { $link = "{$n}:{$pn}"; }
1013 $wgLinkCache->suspend();
1014 $s = $this->makeLink( $link, $text );
1015 $wgLinkCache->resume();
1020 # After all the page content is transformed into HTML, it makes
1021 # a final pass through here for things like table backgrounds.
1023 function transformContent( $text )
1028 # Note: This function MUST call getArticleID() on the link,
1029 # otherwise the cache won't get updated properly. See LINKCACHE.DOC.
1031 function makeLink( $title, $text= "", $query = "", $trail = "" )
1033 global $wgOut, $wgUser;
1035 $nt = Title
::newFromText( $title );
1037 if ( $nt->isExternal() ) {
1038 $u = $nt->getFullURL();
1039 if ( "" == $text ) { $text = $nt->getPrefixedText(); }
1040 $style = $this->getExternalLinkAttributes( $link, $text );
1043 if ( "" != $trail ) {
1044 if ( preg_match( "/^([a-z]+)(.*)$$/sD", $trail, $m ) ) {
1049 return "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
1051 if ( 0 == $nt->getNamespace() && "" == $nt->getText() ) {
1052 return $this->makeKnownLink( $title, $text, $query, $trail );
1054 if ( ( -1 == $nt->getNamespace() ) ||
1055 ( Namespace::getImage() == $nt->getNamespace() ) ) {
1056 return $this->makeKnownLink( $title, $text, $query, $trail );
1058 $aid = $nt->getArticleID() ;
1060 return $this->makeBrokenLink( $title, $text, $query, $trail );
1062 $threshold = $wgUser->getOption("stubthreshold") ;
1063 if ( $threshold > 0 ) {
1064 $res = wfQuery ( "SELECT HIGH_PRIORITY length(cur_text) AS x, cur_namespace, cur_is_redirect FROM cur WHERE cur_id='{$aid}'" ) ;
1066 if ( wfNumRows( $res ) > 0 ) {
1067 $s = wfFetchObject( $res );
1069 if ( $s->cur_is_redirect
OR $s->cur_namespace
!= 0 )
1070 $size = $threshold*2 ; # Really big
1071 wfFreeResult( $res );
1072 } else $size = $threshold*2 ; # Really big
1075 if ( $size < $threshold )
1076 return $this->makeStubLink( $title, $text, $query, $trail );
1077 return $this->makeKnownLink( $title, $text, $query, $trail );
1081 function makeKnownLink( $title, $text = "", $query = "", $trail = "" )
1083 global $wgOut, $wgTitle;
1085 $nt = Title
::newFromText( $title );
1086 $link = $nt->getPrefixedURL();
1088 if ( "" == $link ) {
1090 if ( "" == $text ) { $text = $nt->getFragment(); }
1092 $u = wfLocalUrlE( $link, $query );
1094 if ( "" != $nt->getFragment() ) {
1095 $u .= "#" . wfEscapeHTML( $nt->getFragment() );
1097 if ( "" == $text ) { $text = $nt->getPrefixedText(); }
1098 $style = $this->getInternalLinkAttributes( $link, $text );
1101 if ( "" != $trail ) {
1102 if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
1107 $r = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
1111 function makeBrokenLink( $title, $text = "", $query = "", $trail = "" )
1113 global $wgOut, $wgUser;
1115 $nt = Title
::newFromText( $title );
1116 $link = $nt->getPrefixedURL();
1118 if ( "" == $query ) { $q = "action=edit"; }
1119 else { $q = "action=edit&{$query}"; }
1120 $u = wfLocalUrlE( $link, $q );
1122 if ( "" == $text ) { $text = $nt->getPrefixedText(); }
1123 $style = $this->getInternalLinkAttributes( $link, $text, "yes" );
1126 if ( "" != $trail ) {
1127 if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
1132 if ( $wgOut->isPrintable() ||
1133 ( 1 == $wgUser->getOption( "highlightbroken" ) ) ) {
1134 $s = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
1136 $s = "{$text}{$inside}<a href=\"{$u}\"{$style}>?</a>{$trail}";
1141 function makeStubLink( $title, $text = "", $query = "", $trail = "" )
1143 global $wgOut, $wgUser;
1145 $nt = Title
::newFromText( $title );
1146 $link = $nt->getPrefixedURL();
1148 $u = wfLocalUrlE( $link, $query );
1150 if ( "" == $text ) { $text = $nt->getPrefixedText(); }
1151 $style = $this->getInternalLinkAttributes( $link, $text, "stub" );
1154 if ( "" != $trail ) {
1155 if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
1160 if ( $wgOut->isPrintable() ||
1161 ( 1 == $wgUser->getOption( "highlightbroken" ) ) ) {
1162 $s = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
1164 $s = "{$text}{$inside}<a href=\"{$u}\"{$style}>!</a>{$trail}";
1169 function fnamePart( $url )
1171 $basename = strrchr( $url, "/" );
1172 if ( false === $basename ) { $basename = $url; }
1173 else { $basename = substr( $basename, 1 ); }
1174 return wfEscapeHTML( $basename );
1177 function makeImage( $url, $alt = "" )
1181 if ( "" == $alt ) { $alt = $this->fnamePart( $url ); }
1182 $s = "<img src=\"{$url}\" alt=\"{$alt}\">";
1186 function makeImageLink( $name, $url, $alt = "" )
1188 global $wgOut, $wgTitle, $wgLang;
1190 $nt = Title
::newFromText( $wgLang->getNsText(
1191 Namespace::getImage() ) . ":{$name}" );
1192 $link = $nt->getPrefixedURL();
1193 if ( "" == $alt ) { $alt = $name; }
1195 $u = wfLocalUrlE( $link );
1196 $s = "<a href=\"{$u}\" class='image' title=\"{$alt}\">" .
1197 "<img border=0 src=\"{$url}\" alt=\"{$alt}\"></a>";
1201 function makeMediaLink( $name, $url, $alt = "" )
1203 global $wgOut, $wgTitle;
1205 if ( "" == $alt ) { $alt = $name; }
1206 $u = wfEscapeHTML( $url );
1207 $s = "<a href=\"{$u}\" class='internal' title=\"{$alt}\">{$alt}</a>";
1211 function specialLink( $name, $key = "" )
1215 if ( "" == $key ) { $key = strtolower( $name ); }
1216 $pn = $wgLang->ucfirst( $name );
1217 return $this->makeKnownLink( $wgLang->specialPage( $pn ),
1221 # Called by history lists and recent changes
1224 function beginRecentChangesList()
1226 $rc_cache = array() ;
1228 $this->lastdate
= "";
1232 function beginHistoryList()
1234 $this->lastdate
= $this->lastline
= "";
1235 $s = "\n<p>" . wfMsg( "histlegend" ) . "\n<ul>";
1239 function beginImageHistoryList()
1241 $s = "\n<h2>" . wfMsg( "imghistory" ) . "</h2>\n" .
1242 "<p>" . wfMsg( "imghistlegend" ) . "\n<ul>";
1246 function endRecentChangesList()
1248 $s = $this->recentChangesBlock() ;
1253 function endHistoryList()
1255 $last = wfMsg( "last" );
1257 $s = preg_replace( "/!OLDID![0-9]+!/", $last, $this->lastline
);
1262 function endImageHistoryList()
1268 function historyLine( $ts, $u, $ut, $ns, $ttl, $oid, $c, $isminor )
1272 $artname = Title
::makeName( $ns, $ttl );
1273 $last = wfMsg( "last" );
1274 $cur = wfMsg( "cur" );
1275 $cr = wfMsg( "currentrev" );
1277 if ( $oid && $this->lastline
) {
1278 $ret = preg_replace( "/!OLDID!([0-9]+)!/", $this->makeKnownLink(
1279 $artname, $last, "diff=\\1&oldid={$oid}" ), $this->lastline
);
1283 $dt = $wgLang->timeanddate( $ts, true );
1285 if ( $oid ) { $q = "oldid={$oid}"; }
1287 $link = $this->makeKnownLink( $artname, $dt, $q );
1290 $ul = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
1291 $ut, "target=" . $ut );
1292 } else { $ul = $this->makeLink( $wgLang->getNsText(
1293 Namespace::getUser() ) . ":{$ut}", $ut ); }
1297 $curlink = $this->makeKnownLink( $artname, $cur,
1298 "diff=0&oldid={$oid}" );
1302 $s .= "({$curlink}) (!OLDID!{$oid}!) . .";
1304 $M = wfMsg( "minoreditletter" );
1305 if ( $isminor ) { $s .= " <strong>{$M}</strong>"; }
1306 $s .= " {$link} . . {$ul}";
1308 if ( "" != $c && "*" != $c ) { $s .= " <em>(" . wfEscapeHTML($c) . ")</em>"; }
1311 $this->lastline
= $s;
1315 function recentChangesBlockLine ( $y ) {
1316 global $wgUploadPath ;
1318 $M = wfMsg( "minoreditletter" );
1319 $N = wfMsg( "newpageletter" );
1321 $r .= "<img src='{$wgUploadPath}/Arr_.png' width=12 height=12 border=0>" ;
1323 if ( $y->isnew
) $r .= $N ;
1324 else $r .= " " ;
1325 if ( $y->isminor
) $r .= $M ;
1326 else $r .= " " ;
1327 $r .= " ".$y->timestamp
." " ;
1330 if ( $y->watched
) $link = "<strong>{$link}</strong>" ;
1336 $r .= $this->makeKnownLink( $y->secureName
, wfMsg( "hist" ), "action=history" );
1338 $r .= ") . . ".$y->userlink
;
1339 $r .= $y->usertalklink
;
1340 if ( $y->usercomment
!= "" )
1341 $r .= " <em>(".wfEscapeHTML($y->usercomment
).")</em>" ;
1346 function recentChangesBlockGroup ( $y ) {
1347 global $wgUploadPath ;
1350 $M = wfMsg( "minoreditletter" );
1351 $N = wfMsg( "newpageletter" );
1353 $userlinks = array () ;
1354 foreach ( $y AS $x ) {
1355 $oldid = $x->diffid
;
1356 if ( $x->isnew
) $isnew = true ;
1358 if ( !isset ( $userlinks[$u] ) ) $userlinks[$u] = 0 ;
1362 krsort ( $userlinks ) ;
1363 asort ( $userlinks ) ;
1365 $u = array_keys ( $userlinks ) ;
1366 foreach ( $u as $x ) {
1368 if ( $userlinks[$x] > 1 ) $z .= " ({$userlinks[$x]}×)" ;
1369 array_push ( $users , $z ) ;
1371 $users = " <font size='-1'>[".implode("; ",$users)."]</font>" ;
1374 $e = array_shift ( $e ) ;
1377 $rci = "RCI{$this->rccc}" ;
1378 $rcl = "RCL{$this->rccc}" ;
1379 $rcm = "RCM{$this->rccc}" ;
1380 $tl = "<a href='javascript:toggleVisibility(\"{$rci}\",\"{$rcm}\",\"{$rcl}\")'>" ;
1381 $tl .= "<span id='{$rcm}'><img src='{$wgUploadPath}/Arr_r.png' width=12 height=12 border=0></span>" ;
1382 $tl .= "<span id='{$rcl}' style='display:none'><img src='{$wgUploadPath}/Arr_d.png' width=12 height=12 border=0></span>" ;
1388 if ( $isnew ) $r .= $N ;
1389 else $r .= " " ;
1390 $r .= " " ; # Minor
1391 $r .= " ".$e->timestamp
." " ;
1395 if ( $e->watched
) $link = "<strong>{$link}</strong>" ;
1399 $r .= " (".count($y)." " ;
1400 if ( $isnew ) $r .= wfMsg("changes");
1401 else $r .= $this->makeKnownLink( $e->secureName
, wfMsg("changes") , "diff=0&oldid=".$oldid ) ;
1403 $r .= $this->makeKnownLink( $e->secureName
, wfMsg( "history" ), "action=history" );
1411 $r .= "<div id='{$rci}' style='display:none'>" ;
1412 foreach ( $y AS $x )
1414 $r .= "<img src='{$wgUploadPath}/Arr_.png' width=12 height=12 border=0>";
1415 $r .= "<tt> " ;
1416 if ( $x->isnew
) $r .= $N ;
1417 else $r .= " " ;
1418 if ( $x->isminor
) $r .= $M ;
1419 else $r .= " " ;
1423 if ( $x->oldid
!= 0 ) $o = "oldid=".$x->oldid
;
1424 if ( $x->islog
) $link = $x->timestamp
;
1425 else $link = $this->makeKnownLink( $x->secureName
, $x->timestamp
, $o ) ;
1426 $link = "<tt>{$link}</tt>" ;
1433 $r .= $x->lastlink
;
1434 $r .= ") . . ".$x->userlink
;
1435 $r .= $x->usertalklink
;
1436 if ( $x->usercomment
!= "" )
1437 $r .= " <em>(".wfEscapeHTML($x->usercomment
).")</em>" ;
1446 function recentChangesBlock ()
1448 global $wgUploadPath ;
1449 if ( count ( $this->rc_cache
) == 0 ) return "" ;
1450 $k = array_keys ( $this->rc_cache
) ;
1451 foreach ( $k AS $x )
1453 $y = $this->rc_cache
[$x] ;
1454 if ( count ( $y ) < 2 ) {
1455 $r .= $this->recentChangesBlockLine ( array_shift ( $y ) ) ;
1457 $r .= $this->recentChangesBlockGroup ( $y ) ;
1461 return "<div align=left>{$r}</div>" ;
1464 function recentChangesLine( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 )
1467 $usenew = $wgUser->getOption( "usenewrc" );
1469 $r = $this->recentChangesLineNew ( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched , $oldid , $diffid ) ;
1471 $r = $this->recentChangesLineOld ( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched , $oldid , $diffid ) ;
1475 function recentChangesLineOld( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0, $diffid = 0 )
1477 global $wgTitle, $wgLang, $wgUser;
1479 $d = $wgLang->date( $ts, true);
1481 if ( $d != $this->lastdate
) {
1482 if ( "" != $this->lastdate
) { $s .= "</ul>\n"; }
1483 $s .= "<h4>{$d}</h4>\n<ul>";
1484 $this->lastdate
= $d;
1486 $h = $wgLang->time( $ts, true );
1487 $t = Title
::makeName( $ns, $ttl );
1488 $clink = $this->makeKnownLink( $t , "" );
1489 $nt = Title
::newFromText( $t );
1492 $clink = "<strong>{$clink}</strong>";
1494 $hlink = $this->makeKnownLink( $t, wfMsg( "hist" ), "action=history" );
1495 if ( $isnew ||
$nt->isLog() ) {
1496 $dlink = wfMsg( "diff" );
1498 $dlink = $this->makeKnownLink( $t, wfMsg( "diff" ),
1499 "diff={$oldid}&oldid={$diffid}" ); # Finagle's law
1502 $ul = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
1503 $ut, "target=" . $ut );
1504 } else { $ul = $this->makeLink( $wgLang->getNsText(
1505 Namespace::getUser() ) . ":{$ut}", $ut ); }
1507 $utns=$wgLang->getNsText(Namespace::getTalk(Namespace::getUser()));
1508 $talkname=$wgLang->getNsText(Namespace::getTalk(0)); # use the shorter name
1509 $utl= $this->makeLink($utns . ":{$ut}", $talkname );
1510 $cr = wfMsg( "currentrev" );
1512 $s .= "<li> ({$dlink}) ({$hlink}) . .";
1513 $M = wfMsg( "minoreditletter" );
1514 $N = wfMsg( "newpageletter" );
1515 if ( $isminor ) { $s .= " <strong>{$M}</strong>"; }
1516 if ( $isnew ) { $s .= "<strong>{$N}</strong>"; }
1517 $s .= " {$clink}; {$h} . . {$ul}";
1520 if ( ( 0 == $u ) && $wgUser->isSysop() ) {
1521 $blink = $this->makeKnownLink( $wgLang->specialPage(
1522 "Blockip" ), wfMsg( "blocklink" ), "ip={$ut}" );
1528 $utl = "({$utl} | {$blink})";
1532 if ( "" != $c && "*" != $c ) {
1533 $s .= " <em>(" . wfEscapeHTML( $c ) . ")</em>";
1540 function recentChangesLineNew( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 )
1542 global $wgTitle, $wgLang, $wgUser;
1544 $rc = new RecentChangesClass
;
1546 $d = $wgLang->date( $ts, true);
1549 if ( $d != $this->lastdate
) {
1550 $ret = $this->recentChangesBlock () ;
1551 $this->rc_cache
= array() ;
1552 $ret .= "<h4>{$d}</h4>\n";
1553 $this->lastdate
= $d;
1555 $h = $wgLang->time( $ts, true );
1556 $t = Title
::makeName( $ns, $ttl );
1557 $clink = $this->makeKnownLink( $t, "" ) ;
1558 if ( $oldid == 0 ) $c2link = $clink ;
1559 else $c2link = $this->makeKnownLink( $t, "" , "oldid={$oldid}" );
1560 $nt = Title
::newFromText( $t );
1562 $rc->timestamp
= $h ;
1563 $rc->oldid
= $oldid ;
1564 $rc->diffid
= $diffid ;
1565 $rc->watched
= $watched ;
1566 $rc->isnew
= $isnew ;
1567 $rc->isminor
= $isminor ;
1568 $rc->secureName
= $t ;
1569 $rc->displayName
= $nt ;
1570 $rc->link
= $clink ;
1571 $rc->usercomment
= $c ;
1572 $rc->islog
= $nt->isLog() ;
1574 if ( ( $isnew && $oldid == 0 ) ||
$nt->isLog() ) {
1575 $dlink = wfMsg( "cur" );
1577 $dlink = $this->makeKnownLink( $t, wfMsg( "cur" ),
1578 "diff=0&oldid={$oldid}" );
1581 if ( $diffid == 0 ||
$nt->isLog() ) {
1582 $plink = wfMsg( "last" );
1584 $plink = $this->makeKnownLink( $t, wfMsg( "last" ),
1585 "diff={$oldid}&oldid={$diffid}" );
1589 $ul = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
1590 $ut, "target=" . $ut );
1591 } else { $ul = $this->makeLink( $wgLang->getNsText(
1592 Namespace::getUser() ) . ":{$ut}", $ut ); }
1594 $rc->userlink
= $ul ;
1595 $rc->lastlink
= $plink ;
1596 $rc->curlink
= $dlink ;
1598 $utns=$wgLang->getNsText(Namespace::getTalk(Namespace::getUser()));
1599 $talkname=$wgLang->getNsText(Namespace::getTalk(0)); # use the shorter name
1600 $utl= $this->makeLink($utns . ":{$ut}", $talkname );
1602 if ( ( 0 == $u ) && $wgUser->isSysop() ) {
1603 $blink = $this->makeKnownLink( $wgLang->specialPage(
1604 "Blockip" ), wfMsg( "blocklink" ), "ip={$ut}" );
1605 $rc->usertalklink
= " ({$utl} | {$blink})";
1607 $rc->usertalklink
=" ({$utl})";
1610 if ( !isset ( $this->rc_cache
[$t] ) ) $this->rc_cache
[$t] = array() ;
1611 array_push ( $this->rc_cache
[$t] , $rc ) ;
1616 function imageHistoryLine( $iscur, $ts, $img, $u, $ut, $size, $c )
1618 global $wgUser, $wgLang, $wgTitle;
1620 $dt = $wgLang->timeanddate( $ts, true );
1621 $del = wfMsg( "deleteimg" );
1622 $cur = wfMsg( "cur" );
1625 $url = wfImageUrl( $img );
1627 if ( $wgUser->isSysop() ) {
1628 $link = wfLocalUrlE( "", "image=" . $wgTitle->getURL() .
1630 $style = $this->getInternalLinkAttributes( $link, $del );
1632 $dlink = "<a href=\"{$link}\"{$style}>{$del}</a>";
1637 $url = wfEscapeHTML( wfImageArchiveUrl( $img ) );
1638 if( $wgUser->getID() != 0 ) {
1639 $rlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
1640 wfMsg( "revertimg" ), "action=revert&oldimage=" .
1641 urlencode( $img ) );
1642 $dlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
1643 $del, "action=delete&oldimage=" . urlencode( $img ) );
1645 # Having live active links for non-logged in users
1646 # means that bots and spiders crawling our site can
1647 # inadvertently change content. Baaaad idea.
1648 $rlink = wfMsg( "revertimg" );
1652 if ( 0 == $u ) { $ul = $ut; }
1653 else { $ul = $this->makeLink( $wgLang->getNsText(
1654 Namespace::getUser() ) . ":{$ut}", $ut ); }
1656 $nb = str_replace( "$1", $size, wfMsg( "nbytes" ) );
1657 $style = $this->getInternalLinkAttributes( $url, $dt );
1659 $s = "<li> ({$dlink}) ({$rlink}) <a href=\"{$url}\"{$style}>{$dt}</a>"
1660 . " . . {$ul} ({$nb})";
1662 if ( "" != $c && "*" != $c ) {
1663 $s .= " <em>(" . wfEscapeHTML( $c ) . ")</em>";
1669 function tocIndent($level) {
1671 while($level-->0) $rv.="<div style=\"margin-left:2em;\">\n";
1676 function tocUnindent($level) {
1677 while($level-->0) $rv.="</div>\n";
1681 // parameter level defines if we are on an indentation level
1682 function tocLine($anchor,$tocline,$level) {
1686 return "<A CLASS=\"internal\" HREF=\"#".$anchor."\">".$tocline."</A><BR>\n";
1689 return "<div style=\"margin-bottom:0px;\">\n".
1690 "<A CLASS=\"internal\" HREF=\"#".$anchor."\">".$tocline."</A><BR>\n".
1696 function tocTable($toc) {
1698 /* does not auto-expand, use table for now
1700 <div><div style=\"border-width:1px;background-color:#f3f3ff;border-color:#8888aa;border-style:solid;padding:1em;padding-bottom:1em;\">
1701 <b>".wfMsg("toc")."</b><P>
1705 "<table border=\"0\" bgcolor=\"#8888aa\" cellpadding=\"0\" cellspacing=\"1\"><tr><td>\n" .
1706 "<table border=\"0\" bgcolor=\"#f3f3ff\" CELLPADDING=5><tr><td>\n".
1707 "<b>".wfMsg("toc")."</b>" .
1708 " <script type='text/javascript'>showTocToggle(\"" . wfMsg("showtoc") . "\",\"" . wfMsg("hidetoc") . "\")</script>" .
1709 "</td></tr><tr id='tocinside'><td>\n".
1710 $toc."</td></tr></table></td></tr></table><P>\n";
1713 function editSectionLink($section) {
1715 global $wgTitle,$wgUser,$oldid;
1716 if($wgTitle->isProtected() && !$wgUser->isSysop()) return "";
1717 if($oldid) return "";
1718 $editurl="§ion={$section}";
1719 $url=$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("editsection"),"action=edit".$editurl);
1720 return "<div style=\"float:right;margin-left:5px;\"><small>[".$url."]</small></div>";
1725 include_once( "SkinStandard.php" );
1726 include_once( "SkinNostalgia.php" );
1727 include_once( "SkinCologneBlue.php" );