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() {
66 <SCRIPT TYPE=\"text/javascript\">
67 function toggleVisibility( _levelId, _otherId, _linkId) {
68 var thisLevel = document.getElementById( _levelId );
69 var otherLevel = document.getElementById( _otherId );
70 var linkLevel = document.getElementById( _linkId );
71 if ( thisLevel.style.display == 'none' ) {
72 thisLevel.style.display = 'block';
73 otherLevel.style.display = 'none';
74 linkLevel.style.display = 'inline';
76 thisLevel.style.display = 'none';
77 otherLevel.style.display = 'inline';
78 linkLevel.style.display = 'none';
86 function getUserStyles()
88 $s = "<style type='text/css' media='screen'><!--\n";
89 $s .= $this->doGetUserStyles();
90 $s .= "//--></style>\n";
94 function doGetUserStyles()
99 if ( 1 == $wgUser->getOption( "underline" ) ) {
100 $s .= "a.stub, a.new, a.internal, a.external { " .
101 "text-decoration: underline; }\n";
103 $s .= "a.stub, a.new, a.internal, a.external { " .
104 "text-decoration: none; }\n";
106 if ( 1 == $wgUser->getOption( "highlightbroken" ) ) {
107 $s .= "a.new { color: #CC2200; }\n" .
108 "#quickbar a.new { color: CC2200; }\n";
110 if ( 1 == $wgUser->getOption( "justify" ) ) {
111 $s .= "#article { text-align: justify; }\n";
116 function getBodyOptions()
118 global $wgUser, $wgTitle, $wgNamespaceBackgrounds, $wgOut, $oldid, $redirect, $diff,$action;
120 if ( 0 != $wgTitle->getNamespace() ) {
121 $a = array( "bgcolor" => "#FFFFDD" );
123 else $a = array( "bgcolor" => "#FFFFFF" );
124 if($wgOut->isArticle() && $wgUser->getOption("editondblclick")
126 (!$wgTitle->isProtected() ||
$wgUser->isSysop())
129 $n = $wgTitle->getPrefixedURL();
130 $t = wfMsg( "editthispage" );
132 if ( $redirect ) { $red = "&redirect={$redirect}"; }
133 if ( $oldid && ! isset( $diff ) ) {
134 $oid = "&oldid={$oldid}";
136 $s = wfLocalUrlE($n,"action=edit{$oid}{$red}");
137 $s = "document.location = \"" .$s ."\";";
138 $a +
= array ("ondblclick" => $s);
141 if($action=="edit") { # set focus in edit box
142 $a +
= array("onLoad"=>"document.editform.wpTextbox1.focus()");
147 function getExternalLinkAttributes( $link, $text )
149 global $wgUser, $wgOut, $wgLang;
151 $link = urldecode( $link );
152 $link = $wgLang->checkTitleEncoding( $link );
153 $link = str_replace( "_", " ", $link );
154 $link = wfEscapeHTML( $link );
156 if ( $wgOut->isPrintable() ) { $r = " class='printable'"; }
157 else { $r = " class='external'"; }
159 if ( 1 == $wgUser->getOption( "hover" ) ) {
160 $r .= " title=\"{$link}\"";
165 function getInternalLinkAttributes( $link, $text, $broken = false )
167 global $wgUser, $wgOut;
169 $link = urldecode( $link );
170 $link = str_replace( "_", " ", $link );
171 $link = wfEscapeHTML( $link );
173 if ( $wgOut->isPrintable() ) { $r = " class='printable'"; }
174 else if ( $broken == "stub" ) { $r = " class='stub'"; }
175 else if ( $broken == "yes" ) { $r = " class='new'"; }
176 else { $r = " class='internal'"; }
178 if ( 1 == $wgUser->getOption( "hover" ) ) {
179 $r .= " title=\"{$link}\"";
190 # This will be called immediately after the <body> tag. Split into
191 # two functions to make it easier to subclass.
193 function beforeContent()
195 global $wgUser, $wgOut;
197 if ( $wgOut->isPrintable() ) {
198 $s = $this->pageTitle() . $this->pageSubtitle() . "\n";
199 $s .= "\n<div class='bodytext'>";
202 return $this->doBeforeContent();
205 function doBeforeContent()
207 global $wgUser, $wgOut, $wgTitle;
208 wfProfileIn( "Skin::doBeforeContent" );
211 $qb = $this->qbSetting();
213 if( $langlinks = $this->otherLanguages() ) {
219 $borderhack = "class='top'";
222 $s .= "\n<div id='content'>\n<div id='topbar'>" .
223 "<table width='98%' border=0 cellspacing=0><tr>";
226 $s .= "<td class='top' align=left valign=top rowspan='{$rows}'>" .
227 $this->logoText() . "</td>";
228 } else if ( 1 == $qb ||
3 == $qb ) { # Left
229 $s .= $this->getQuickbarCompensator( $rows );
231 $s .= "<td {$borderhack} align=left valign=top>";
233 $s .= $this->topLinks() ;
234 $s .= "<p class='subtitle'>" . $this->pageTitleLinks();
236 $s .= "</td>\n<td {$borderhack} valign=top align=right nowrap>";
237 $s .= $this->nameAndLogin();
238 $s .= "\n<br>" . $this->searchForm() . "</td>";
241 $s .= "</tr>\n<tr><td class='top' colspan=\"2\">$langlinks</td>";
244 if ( 2 == $qb ) { # Right
245 $s .= $this->getQuickbarCompensator( $rows );
247 $s .= "</tr></table>\n</div>\n";
248 $s .= "\n<div id='article'>";
250 $s .= $this->pageTitle();
251 $s .= $this->pageSubtitle() . "\n<p>";
256 function getQuickbarCompensator( $rows = 1 )
258 return "<td width='152' rowspan='{$rows}'> </td>";
261 # This gets called immediately before the </body> tag.
263 function afterContent()
265 global $wgUser, $wgOut, $wgServer, $HTTP_SERVER_VARS;
267 if ( $wgOut->isPrintable() ) {
270 $u = $wgServer . $HTTP_SERVER_VARS['REQUEST_URI'];
271 $u = preg_replace( "/[?&]printable=yes/", "", $u );
272 $rf = str_replace( "$1", $u, wfMsg( "retrievedfrom" ) );
274 if ( $wgOut->isArticle() ) {
275 $lm = "<br>" . $this->lastModified();
278 $s .= "<p><em>{$rf}{$lm}</em>\n";
281 return $this->doAfterContent();
284 function doAfterContent()
286 global $wgUser, $wgOut;
287 wfProfileIn( "Skin::doAfterContent" );
289 $s = "\n</div><br clear=all>\n";
291 $s .= "\n<div id='footer'>";
292 $s .= "<table width='98%' border=0 cellspacing=0><tr>";
294 $qb = $this->qbSetting();
295 if ( 1 == $qb ||
3 == $qb ) { # Left
296 $s .= $this->getQuickbarCompensator();
298 $s .= "<td class='bottom' align=left valign=top>";
300 $s .= $this->bottomLinks();
301 $s .= "\n<br>" . $this->mainPageLink()
302 . " | " . $this->aboutLink()
303 . " | " . $this->specialLink( "recentchanges" )
304 . " | " . $this->searchForm()
305 . "<br>" . $this->pageStats();
308 if ( 2 == $qb ) { # Right
309 $s .= $this->getQuickbarCompensator();
311 $s .= "</tr></table>\n</div>\n</div>\n";
313 if ( 0 != $qb ) { $s .= $this->quickBar(); }
318 function pageTitleLinks()
320 global $wgOut, $wgTitle, $oldid, $action, $diff, $wgUser, $wgLang;
322 $s = $this->printableLink();
324 if ( $wgOut->isArticle() ) {
325 if ( $wgTitle->getNamespace() == Namespace::getImage() ) {
326 $name = $wgTitle->getDBkey();
327 $link = wfEscapeHTML( wfImageUrl( $name ) );
328 $style = $this->getInternalLinkAttributes( $link, $name );
329 $s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
332 if ( "history" == $action ||
isset( $diff ) ||
isset( $oldid ) ) {
333 $s .= " | " . $this->makeKnownLink( $wgTitle->getPrefixedText(),
334 wfMsg( "currentrev" ) );
337 if ( $wgUser->getNewtalk() ) {
338 # do not show "You have new messages" text when we are viewing our
341 if(!(strcmp($wgTitle->getText(),$wgUser->getName()) == 0 &&
342 $wgTitle->getNamespace()==Namespace::getTalk(Namespace::getUser()))) {
343 $n =$wgUser->getName();
344 $tl = $this->makeKnownLink( $wgLang->getNsText(
345 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
346 wfMsg("newmessageslink") );
347 $s.=" | <strong>". str_replace( "$1", $tl, wfMsg("newmessages") ) . "</strong>";
353 function printableLink()
355 global $wgOut, $wgTitle, $oldid, $action;
357 if ( "history" == $action ) { $q = "action=history&"; }
360 $s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
361 WfMsg( "printableversion" ), "{$q}printable=yes" );
367 global $wgOut, $wgTitle;
369 $s = "<h1 class='pagetitle'>" . $wgOut->getPageTitle() . "</h1>";
373 function pageSubtitle()
375 global $wgOut,$wgTitle,$wgNamespacesWithSubpages;
377 $sub = $wgOut->getSubtitle();
378 if ( "" == $sub ) { $sub = wfMsg( "fromwikipedia" ); }
379 if($wgOut->isArticle() && $wgNamespacesWithSubpages[$wgTitle->getNamespace()]) {
380 $ptext=$wgTitle->getPrefixedText();
381 if(preg_match("/\//",$ptext)) {
382 $sub.="</p><p class='subpages'>";
383 $links=explode("/",$ptext);
386 foreach($links as $link) {
388 if ($c<count($links)) {
390 $getlink=$this->makeLink($growinglink,$link);
391 if(preg_match("/class='new'/i",$getlink)) { break; } # this is a hack, but it saves time
404 $s = "<p class='subtitle'>{$sub}\n";
408 function nameAndLogin()
410 global $wgUser, $wgTitle, $wgLang;
412 $li = $wgLang->specialPage( "Userlogin" );
413 $lo = $wgLang->specialPage( "Userlogout" );
416 if ( 0 == $wgUser->getID() ) {
417 $n = getenv( "REMOTE_ADDR" );
418 $rt = $wgTitle->getPrefixedURL();
419 if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
421 } else { $q = "returnto={$rt}"; }
424 $tl = $this->makeKnownLink( $wgLang->getNsText(
425 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
426 $wgLang->getNsText( Namespace::getTalk( 0 ) ) );
428 $s .= $n . " (".$tl.")" . "\n<br>" . $this->makeKnownLink( $li,
429 wfMsg( "login" ), $q );
434 $n = $wgUser->getName();
435 $rt = $wgTitle->getPrefixedURL();
436 $tl = $this->makeKnownLink( $wgLang->getNsText(
437 Namespace::getTalk( Namespace::getUser() ) ) . ":{$n}",
438 $wgLang->getNsText( Namespace::getTalk( 0 ) ) );
442 $s .= $this->makeKnownLink( $wgLang->getNsText(
443 Namespace::getUser() ) . ":{$n}", $n ) . "{$tl}<br>" .
444 $this->makeKnownLink( $lo, wfMsg( "logout" ),
445 "returnto={$rt}" ) . " | " .
446 $this->specialLink( "preferences" );
448 $s .= " | " . $this->makeKnownLink( wfMsg( "helppage" ),
454 function searchForm()
457 $s = "<form id=\"search\" class=\"inline\" method=\"get\" action=\""
458 . wfLocalUrl( "" ) . "\">"
459 . "<input type=text name=\"search\" size=19 value=\""
460 . htmlspecialchars(substr($search,0,256)) . "\">\n"
461 . "<input type=submit value=\"" . wfMsg( "search" )
462 . "\"> <input type=submit name=\"go\" value=\""
463 . wfMsg ("go") . "\"></form>";
473 $s = $this->mainPageLink() . $sep
474 . $this->specialLink( "recentchanges" );
476 if ( $wgOut->isArticle() ) {
477 $s .= $sep . $this->editThisPage()
478 . $sep . $this->historyLink();
480 $s .= $sep . $this->specialPagesList();
485 function bottomLinks()
487 global $wgOut, $wgUser, $wgTitle;
491 if ( $wgOut->isArticle() ) {
492 $s .= "<strong>" . $this->editThisPage() . "</strong>";
493 if ( 0 != $wgUser->getID() ) {
494 $s .= $sep . $this->watchThisPage();
496 $s .= $sep . $this->talkLink()
497 . $sep . $this->historyLink()
498 . $sep . $this->whatLinksHere()
499 . $sep . $this->watchPageLinksLink();
501 if ( $wgTitle->getNamespace() == Namespace::getUser()
502 ||
$wgTitle->getNamespace() == Namespace::getTalk(Namespace::getUser()) )
505 $id=User
::idFromName($wgTitle->getText());
506 $ip=User
::isIP($wgTitle->getText());
508 if($id ||
$ip) { # both anons and non-anons have contri list
509 $s .= $sep . $this->userContribsLink();
511 if ( 0 != $wgUser->getID() ) { # show only to signed in users
512 if($id) { # can only email non-anons
513 $s .= $sep . $this->emailUserLink();
517 if ( $wgUser->isSysop() && $wgTitle->getArticleId() ) {
518 $s .= "\n<br>" . $this->deleteThisPage() .
519 $sep . $this->protectThisPage() .
520 $sep . $this->moveThisPage();
522 $s .= "<br>\n" . $this->otherLanguages();
529 global $wgOut, $wgLang, $wgArticle;
530 global $oldid, $diff;
532 if ( ! $wgOut->isArticle() ) { return ""; }
533 if ( isset( $oldid ) ||
isset( $diff ) ) { return ""; }
534 if ( 0 == $wgArticle->getID() ) { return ""; }
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( date( "F j" ) );
952 $t2 = Title
::newFromText( date( "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='media' 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>";
1670 include_once( "SkinStandard.php" );
1671 include_once( "SkinNostalgia.php" );
1672 include_once( "SkinCologneBlue.php" );