wiki.techinc.nl/includes/Skin.php

2210 lines
59 KiB
PHP
Raw Normal View History

2003-04-14 23:10:40 +00:00
<?
# See skin.doc
# These are the INTERNAL names, which get mapped
# directly to class names. For display purposes, the
# Language class has internationalized names
#
/* private */ $wgValidSkinNames = array(
"Standard", "Nostalgia", "CologneBlue" #, "Smarty", "Montparnasse"
2003-04-14 23:10:40 +00:00
);
# For some odd PHP bug, this function can't be part of a class
function getCategories ()
{
global $wgOut , $wgTitle , $wgUseCategoryMagic , $wgUser ;
if ( !isset ( $wgUseCategoryMagic ) || !$wgUseCategoryMagic ) return "" ;
if ( count ( $wgOut->mCategoryLinks ) == 0 ) return "" ;
if ( !$wgOut->isArticle() ) return "" ;
$sk = $wgUser->getSkin() ;
$s = "" ;
$s .= "\n<br>\n";
$s .= $sk->makeKnownLink ( "Special:Categories" , "Categories" , "article=".$wgTitle->getDBkey() ) ;
$t = implode ( " | " , $wgOut->mCategoryLinks ) ;
if ( $t != "" ) $s .= " : " ;
$s .= $t ;
return $s ;
}
2003-04-14 23:10:40 +00:00
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 );
2003-04-14 23:10:40 +00:00
$wgOut->addLink( "shortcut icon", "", "/favicon.ico" );
if ( $wgOut->isPrintable() ) { $ss = "wikiprintable.css"; }
else { $ss = $this->getStylesheet(); }
$wgOut->addLink( "stylesheet", "", "{$wgStyleSheetPath}/{$ss}" );
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
}
function outputPage( &$out ) {
global $wgDebugComments;
wfProfileIn( "Skin::outputPage" );
$this->initPage();
$out->out( $out->headElement() );
$out->out( "\n<body" );
$ops = $this->getBodyOptions();
foreach ( $ops as $name => $val ) {
$out->out( " $name='$val'" );
}
$out->out( ">\n" );
if ( $wgDebugComments ) {
$out->out( "<!-- Wiki debugging output:\n" .
$out->mDebugtext . "-->\n" );
}
$out->out( $this->beforeContent() );
$out->out( $out->mBodytext );
$out->out( $this->afterContent() );
wfProfileClose();
$out->out( $out->reportTime() );
$out->out( "\n</body></html>" );
}
2003-04-14 23:10:40 +00:00
function getHeadScripts() {
global $wgStyleSheetPath;
$r = "<script type=\"text/javascript\" src=\"{$wgStyleSheetPath}/wikibits.js\"></script>\n";
2003-04-14 23:10:40 +00:00
return $r;
}
function getUserStyles()
{
$s = "<style type='text/css'><!--\n";
2003-04-14 23:10:40 +00:00
$s .= $this->doGetUserStyles();
$s .= "//--></style>\n";
return $s;
}
function doGetUserStyles()
{
global $wgUser;
$s = "";
if ( 1 == $wgUser->getOption( "underline" ) ) {
# Don't override browser settings
2003-04-14 23:10:40 +00:00
} else {
# CHECK MERGE @@@
# Force no underline
2003-04-14 23:10:40 +00:00
$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";
2003-04-14 23:10:40 +00:00
}
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() ) {
2003-07-23 07:48:43 +00:00
$a = array( "bgcolor" => "#ffffec" );
2003-04-14 23:10:40 +00:00
}
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();
2003-04-14 23:10:40 +00:00
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 );
2003-10-22 23:56:49 +00:00
if ( $wgOut->isPrintable() ) {
$r = " class='printable'";
} else if ( $broken == "stub" ) {
$r = " class='stub'";
} else if ( $broken == "yes" ) {
$r = " class='new'";
} else {
$r = " class='internal'";
2003-10-22 23:56:49 +00:00
}
2003-04-14 23:10:40 +00:00
if ( 1 == $wgUser->getOption( "hover" ) ) {
$r .= " title=\"{$link}\"";
}
return $r;
}
2003-10-22 23:56:49 +00:00
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'";
2003-10-22 23:56:49 +00:00
}
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
if ( 1 == $wgUser->getOption( "hover" ) ) {
$r .= ' title ="' . $nt->getEscapedText() . '"';
}
return $r;
}
2003-04-14 23:10:40 +00:00
function getLogo()
{
global $wgLogo;
return $wgLogo;
}
# This will be called immediately after the <body> tag. Split into
# two functions to make it easier to subclass.
#
function beforeContent()
{
2003-12-22 11:10:35 +00:00
global $wgUser, $wgOut, $wgSiteNotice;
2003-04-14 23:10:40 +00:00
if ( $wgOut->isPrintable() ) {
$s = $this->pageTitle() . $this->pageSubtitle() . "\n";
$s .= "\n<div class='bodytext'>";
return $s;
}
2003-12-22 11:10:35 +00:00
if( $wgSiteNotice ) {
$note = "\n<div id='notice' style='font-weight: bold; color: red; text-align: center'>$wgSiteNotice</div>\n";
} else {
$note = "";
}
return $this->doBeforeContent() . $note;
2003-04-14 23:10:40 +00:00
}
function doBeforeContent()
{
global $wgUser, $wgOut, $wgTitle, $wgLang;
$fname = "Skin::doBeforeContent";
wfProfileIn( $fname );
2003-04-14 23:10:40 +00:00
$s = "";
$qb = $this->qbSetting();
if( $langlinks = $this->otherLanguages() ) {
$rows = 2;
$borderhack = "";
} else {
$rows = 1;
$langlinks = false;
$borderhack = "class='top'";
}
$s .= "\n<div id='content'>\n<div id='topbar'>" .
"<table width='98%' border=0 cellspacing=0><tr>";
$shove = ($qb != 0);
$left = ($qb == 1 || $qb == 3);
if($wgLang->isRTL()) $left = !$left;
if ( !$shove ) {
2003-04-14 23:10:40 +00:00
$s .= "<td class='top' align=left valign=top rowspan='{$rows}'>" .
$this->logoText() . "</td>";
} elseif( $left ) {
2003-04-14 23:10:40 +00:00
$s .= $this->getQuickbarCompensator( $rows );
}
$l = $wgLang->isRTL() ? "right" : "left";
$s .= "<td {$borderhack} align='$l' valign='top'>";
2003-04-14 23:10:40 +00:00
$s .= $this->topLinks() ;
$s .= "<p class='subtitle'>" . $this->pageTitleLinks();
$r = $wgLang->isRTL() ? "left" : "right";
$s .= "</td>\n<td {$borderhack} valign='top' align='$r' nowrap>";
2003-04-14 23:10:40 +00:00
$s .= $this->nameAndLogin();
$s .= "\n<br>" . $this->searchForm() . "</td>";
if ( $langlinks ) {
$s .= "</tr>\n<tr><td class='top' colspan=\"2\">$langlinks</td>";
}
if ( $shove && !$left ) { # Right
2003-04-14 23:10:40 +00:00
$s .= $this->getQuickbarCompensator( $rows );
}
$s .= "</tr></table>\n</div>\n";
$s .= "\n<div id='article'>";
$s .= $this->pageTitle();
$s .= $this->pageSubtitle() ;
$s .= getCategories(); // For some odd reason, zhis can't be a function of the object
$s .= "\n<p>";
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
return $s;
}
function getQuickbarCompensator( $rows = 1 )
{
return "<td width='152' rowspan='{$rows}'>&nbsp;</td>";
}
# This gets called immediately before the </body> tag.
#
function afterContent()
{
global $wgUser, $wgOut, $wgServer;
2003-08-17 07:58:23 +00:00
global $wgTitle;
2003-04-14 23:10:40 +00:00
if ( $wgOut->isPrintable() ) {
$s = "\n</div>\n";
$u = htmlspecialchars( $wgServer . $wgTitle->getFullURL() );
$u = "<a href=\"$u\">$u</a>";
2003-08-17 07:58:23 +00:00
$rf = wfMsg( "retrievedfrom", $u );
2003-04-14 23:10:40 +00:00
if ( $wgOut->isArticle() ) {
$lm = "<br>" . $this->lastModified();
} else { $lm = ""; }
$cr = wfMsg( "gnunote" );
$s .= "<p><em>{$rf}{$lm} {$cr}</em>\n";
2003-04-14 23:10:40 +00:00
return $s;
}
return $this->doAfterContent();
}
function doAfterContent()
{
global $wgUser, $wgOut, $wgLang;
$fname = "Skin::doAfterContent";
wfProfileIn( $fname );
wfProfileIn( "$fname-1" );
2003-04-14 23:10:40 +00:00
$s = "\n</div><br clear=all>\n";
$s .= "\n<div id='footer'>";
$s .= "<table width='98%' border=0 cellspacing=0><tr>";
wfProfileOut( "$fname-1" );
wfProfileIn( "$fname-2" );
2003-04-14 23:10:40 +00:00
$qb = $this->qbSetting();
$shove = ($qb != 0);
$left = ($qb == 1 || $qb == 3);
if($wgLang->isRTL()) $left = !$left;
if ( $shove && $left ) { # Left
2003-04-14 23:10:40 +00:00
$s .= $this->getQuickbarCompensator();
}
wfProfileOut( "$fname-2" );
wfProfileIn( "$fname-3" );
$l = $wgLang->isRTL() ? "right" : "left";
$s .= "<td class='bottom' align='$l' valign='top'>";
2003-04-14 23:10:40 +00:00
$s .= $this->bottomLinks();
$s .= "\n<br>" . $this->mainPageLink()
. " | " . $this->aboutLink()
. " | " . $this->specialLink( "recentchanges" )
. " | " . $this->searchForm()
. "<br>" . $this->pageStats();
$s .= "</td>";
if ( $shove && !$left ) { # Right
2003-04-14 23:10:40 +00:00
$s .= $this->getQuickbarCompensator();
}
$s .= "</tr></table>\n</div>\n</div>\n";
wfProfileOut( "$fname-3" );
wfProfileIn( "$fname-4" );
2003-04-14 23:10:40 +00:00
if ( 0 != $qb ) { $s .= $this->quickBar(); }
wfProfileOut( "$fname-4" );
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
return $s;
}
function pageTitleLinks()
{
2003-09-01 13:59:33 +00:00
global $wgOut, $wgTitle, $oldid, $action, $diff, $wgUser, $wgLang, $wgUseApproval ;
2003-04-14 23:10:40 +00:00
$s = $this->printableLink();
2004-01-06 06:09:48 +00:00
if ( wfMsg ( "disclaimers" ) != "-" ) $s .= " | " . $this->makeKnownLink( wfMsg( "disclaimerpage" ), wfMsg( "disclaimers" ) ) ;
2003-04-14 23:10:40 +00:00
if ( $wgOut->isArticle() ) {
if ( $wgTitle->getNamespace() == Namespace::getImage() ) {
$name = $wgTitle->getDBkey();
$link = wfEscapeHTML( wfImageUrl( $name ) );
$style = $this->getInternalLinkAttributes( $link, $name );
$s .= " | <a href=\"{$link}\"{$style}>{$name}</a>";
}
# 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 .= " | <a href=\"{$link}\"{$style}>{$name}</a>" ;
} }
if ( "history" == $action || isset( $diff ) || isset( $oldid ) ) {
$s .= " | " . $this->makeKnownLink( $wgTitle->getPrefixedText(),
wfMsg( "currentrev" ) );
}
2003-04-14 23:10:40 +00:00
if ( $wgUser->getNewtalk() ) {
2003-04-14 23:10:40 +00:00
# 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.=" | <strong>". wfMsg( "newmessages", $tl ) . "</strong>";
}
2003-04-14 23:10:40 +00:00
}
if( $wgUser->isSysop() &&
(($wgTitle->getArticleId() == 0) || ($action == "history")) &&
($n = $wgTitle->isDeleted() ) ) {
2003-09-01 04:16:44 +00:00
$s .= " | " . wfMsg( "thisisdeleted",
$this->makeKnownLink(
$wgLang->SpecialPage( "Undelete/" . $wgTitle->getPrefixedDBkey() ),
wfMsg( "restorelink", $n ) ) );
}
2003-04-14 23:10:40 +00:00
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 .= "&";
2003-04-14 23:10:40 +00:00
$s = $this->makeKnownLink( $wgTitle->getPrefixedText(),
WfMsg( "printableversion" ), "{$q}printable=yes" );
return $s;
}
function pageTitle()
{
global $wgOut, $wgTitle, $wgUser;
2003-04-14 23:10:40 +00:00
$s = "<h1 class='pagetitle'>" . $wgOut->getPageTitle() . "</h1>";
if($wgUser->getOption("editsectiononrightclick") && $wgTitle->userCanEdit()) { $s=$this->editSectionScript(0,$s);}
2003-04-14 23:10:40 +00:00
return $s;
}
function pageSubtitle()
{
global $wgOut,$wgTitle,$wgNamespacesWithSubpages;
$sub = $wgOut->getSubtitle();
if ( "" == $sub ) {
global $wgExtraSubtitle;
$sub = wfMsg( "fromwikipedia" ) . $wgExtraSubtitle;
}
2003-04-14 23:10:40 +00:00
if($wgOut->isArticle() && $wgNamespacesWithSubpages[$wgTitle->getNamespace()]) {
$ptext=$wgTitle->getPrefixedText();
if(preg_match("/\//",$ptext)) {
$sub.="</p><p class='subpages'>";
2003-04-14 23:10:40 +00:00
$links=explode("/",$ptext);
$c=0;
$growinglink="";
foreach($links as $link) {
$c++;
if ($c<count($links)) {
$growinglink .= $link;
$getlink = $this->makeLink( $growinglink, $link );
2003-04-14 23:10:40 +00:00
if(preg_match("/class='new'/i",$getlink)) { break; } # this is a hack, but it saves time
if ($c>1) {
2003-04-14 23:10:40 +00:00
$sub .= " | ";
} else {
$sub .="&lt; ";
}
$sub .= $getlink;
$growinglink.="/";
}
}
}
}
$s = "<p class='subtitle'>{$sub}\n";
2003-04-14 23:10:40 +00:00
return $s;
}
function nameAndLogin()
{
global $wgUser, $wgTitle, $wgLang, $wgShowIPinHeader;
2003-04-14 23:10:40 +00:00
$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");
}
2003-04-14 23:10:40 +00:00
$rt = $wgTitle->getPrefixedURL();
if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) {
$q = "";
} else { $q = "returnto={$rt}"; }
$s .= "\n<br>" . $this->makeKnownLink( $li,
wfMsg( "login" ), $q );
2003-04-14 23:10:40 +00:00
} 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}<br>" .
$this->makeKnownLink( $lo, wfMsg( "logout" ),
"returnto={$rt}" ) . " | " .
$this->specialLink( "preferences" );
}
$s .= " | " . $this->makeKnownLink( wfMsg( "helppage" ),
wfMsg( "help" ) );
return $s;
}
function searchForm()
{
global $search;
2003-05-14 21:23:46 +00:00
$s = "<form name='search' class='inline' method=get action=\""
2003-04-14 23:10:40 +00:00
. wfLocalUrl( "" ) . "\">"
. "<input type=text name=\"search\" size=19 value=\""
. htmlspecialchars(substr($search,0,256)) . "\">\n"
2003-05-14 21:23:46 +00:00
. "<input type=submit name=\"go\" value=\"" . wfMsg ("go") . "\">&nbsp;"
. "<input type=submit value=\"" . wfMsg ("search") . "\"></form>";
2003-04-14 23:10:40 +00:00
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();
2003-04-14 23:10:40 +00:00
return $s;
}
function bottomLinks()
{
global $wgOut, $wgUser, $wgTitle;
$sep = " |\n";
$s = "";
if ( $wgOut->isArticle() ) {
$s .= "<strong>" . $this->editThisPage() . "</strong>";
if ( 0 != $wgUser->getID() ) {
$s .= $sep . $this->watchThisPage();
2003-04-14 23:10:40 +00:00
}
$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<br>" . $this->deleteThisPage() .
$sep . $this->protectThisPage() .
$sep . $this->moveThisPage();
2003-04-14 23:10:40 +00:00
}
$s .= "<br>\n" . $this->otherLanguages();
}
return $s;
}
function pageStats()
{
global $wgOut, $wgLang, $wgArticle;
2003-05-14 08:42:47 +00:00
global $oldid, $diff, $wgDisableCounters;
2003-04-14 23:10:40 +00:00
if ( ! $wgOut->isArticle() ) { return ""; }
if ( isset( $oldid ) || isset( $diff ) ) { return ""; }
if ( 0 == $wgArticle->getID() ) { return ""; }
2003-05-14 08:42:47 +00:00
if ( $wgDisableCounters ) {
$s = "";
} else {
$count = $wgArticle->getCount();
2003-11-15 14:11:30 +00:00
$s = wfMsg( "viewcount", $count );
}
2003-04-14 23:10:40 +00:00
$s .= $this->lastModified();
$s .= " " . wfMsg( "gnunote" );
2003-04-14 23:10:40 +00:00
return "<span id='pagestats'>{$s}</span>";
}
function lastModified()
{
global $wgLang, $wgArticle;
$d = $wgLang->timeanddate( $wgArticle->getTimestamp(), true );
2003-11-15 14:11:30 +00:00
$s = " " . wfMsg( "lastmodified", $d );
2003-04-14 23:10:40 +00:00
return $s;
}
function logoText( $align = "" )
{
if ( "" != $align ) { $a = " align='{$align}'"; }
else { $a = ""; }
$mp = wfMsg( "mainpage" );
$s = "<a href=\"" . wfLocalUrlE( urlencode( $mp ) )
. "\"><img{$a} border=0 src=\""
2003-04-14 23:10:40 +00:00
. $this->getLogo() . "\" alt=\"" . "[{$mp}]\"></a>";
return $s;
}
function quickBar()
{
global $wgOut, $wgTitle, $wgUser, $action, $wgLang;
global $wpPreview, $wgDisableUploads, $wgRemoteUploads;
$fname = "Skin::quickBar";
wfProfileIn( $fname );
$tns=$wgTitle->getNamespace();
2003-04-14 23:10:40 +00:00
$s = "\n<div id='quickbar'>";
$s .= "\n" . $this->logoText() . "\n<hr class='sep'>";
2003-04-14 23:10:40 +00:00
$sep = "\n<br>";
$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<br><hr class='sep'>";
2003-04-14 23:10:40 +00:00
$articleExists = $wgTitle->getArticleId();
if ( $wgOut->isArticle() || $action =="edit" || $action =="history" || $wpPreview) {
2003-04-14 23:10:40 +00:00
if($wgOut->isArticle()) {
$s .= "<strong>" . $this->editThisPage() . "</strong>";
} 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 ;
}
2003-10-22 23:56:49 +00:00
$s .= $this->makeLink( $link, $text );
2003-04-14 23:10:40 +00:00
} 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 .= "<strong>" . wfMsg("newpage") . "</strong>";
}
}
if( $tns%2 && $action!="edit" && !$wpPreview) {
$s.="<br>".$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("postcomment"),"action=edit&section=new");
}
2003-04-14 23:10:40 +00:00
/*
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();
2003-04-14 23:10:40 +00:00
}
if ( $wgUser->isSysop() and $articleExists ) {
$s .= $sep . $this->deleteThisPage() .
$sep . $this->protectThisPage();
}
$s .= $sep . $this->talkLink();
if ($articleExists && $action !="history") {
$s .= $sep . $this->historyLink();
}
2003-04-14 23:10:40 +00:00
$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<br><hr class='sep'>";
2003-04-14 23:10:40 +00:00
}
if ( 0 != $wgUser->getID() && ( !$wgDisableUploads || $wgRemoteUploads ) ) {
2003-04-14 23:10:40 +00:00
$s .= $this->specialLink( "upload" ) . $sep;
}
$s .= $this->specialLink( "specialpages" )
. $sep . $this->bugReportsLink();
global $wgSiteSupportPage;
if( $wgSiteSupportPage ) {
$s .= "\n<br><a href=\"" . htmlspecialchars( $wgSiteSupportPage ) .
2003-12-08 10:35:10 +00:00
"\" class=\"internal\">" . wfMsg( "sitesupport" ) . "</a>";
}
$s .= "\n<br></div>\n";
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
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 = "<form id=\"specialpages\" method=\"get\" class=\"inline\" " .
"action=\"{$wgServer}{$wgRedirectScript}\">\n";
$s .= "<select name=\"wpDropdown\">\n";
$s .= "<option value=\"{$spp}\">{$sp}</option>\n";
foreach ( $a as $name => $desc ) {
$p = $wgLang->specialPage( $name );
$s .= "<option value=\"{$p}\">{$desc}</option>\n";
}
$s .= "</select>\n";
$s .= "<input type=submit value=\"{$go}\" name=redirect>\n";
$s .= "</form>\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;
}
2004-01-06 06:00:01 +00:00
function disclaimerLink()
{
$s = $this->makeKnownLink( wfMsg( "disclaimerpage" ),
wfMsg( "disclaimers" ) );
return $s;
}
2003-04-14 23:10:40 +00:00
function editThisPage()
{
global $wgOut, $wgTitle, $oldid, $redirect, $diff;
if ( ! $wgOut->isArticle() || $diff ) {
$s = wfMsg( "protectedpage" );
} else {
2003-04-14 23:10:40 +00:00
$n = $wgTitle->getPrefixedText();
if ( $wgTitle->userCanEdit() ) {
$t = wfMsg( "editthispage" );
} else {
#$t = wfMsg( "protectedpage" );
$t = wfMsg( "viewsource" );
}
2003-04-14 23:10:40 +00:00
$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 = "";
2003-04-14 23:10:40 +00:00
}
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 = "";
2003-04-14 23:10:40 +00:00
}
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, $wgUseNewInterlanguage;
2003-04-14 23:10:40 +00:00
$a = $wgOut->getLanguageLinks();
# TEST THIS @@@
2003-04-14 23:10:40 +00:00
if ( 0 == count( $a ) ) {
if ( !$wgUseNewInterlanguage ) return "";
$ns = $wgLang->getNsIndex ( $wgTitle->getNamespace () ) ;
if ( $ns != 0 AND $ns != 1 ) return "" ;
$pn = "Intl" ;
2003-04-14 23:10:40 +00:00
$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" ) . ": ";
2003-04-14 23:10:40 +00:00
$first = true;
if($wgLang->isRTL()) $s .= "<span dir='LTR'>";
2003-04-14 23:10:40 +00:00
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 .= "<a href=\"{$url}\"{$style}>{$text}</a>";
}
if($wgLang->isRTL()) $s .= "</span>";
2003-04-14 23:10:40 +00:00
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" ) );
2003-04-14 23:10:40 +00:00
$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&section=new");
$wgLinkCache->resume();
return $s;
}
2003-04-14 23:10:40 +00:00
# After all the page content is transformed into HTML, it makes
# a final pass through here for things like table backgrounds.
#
function transformContent( $text )
{
2003-04-14 23:10:40 +00:00
return $text;
}
# Note: This function MUST call getArticleID() on the link,
# otherwise the cache won't get updated properly. See LINKCACHE.DOC.
#
2003-10-22 23:56:49 +00:00
function makeLink( $title, $text = "", $query = "", $trail = "" ) {
wfProfileIn( "Skin::makeLink" );
2003-11-21 01:12:01 +00:00
$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" );
2003-11-21 01:12:01 +00:00
$result = $text == "" ? $title : $text;
}
wfProfileOut( "Skin::makeLink" );
return $result;
2003-10-22 23:56:49 +00:00
}
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
function makeKnownLink( $title, $text = "", $query = "", $trail = "" ) {
2003-11-21 01:12:01 +00:00
$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" );
2003-11-21 01:12:01 +00:00
return $text == "" ? $title : $text;
}
2003-10-22 23:56:49 +00:00
}
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
function makeBrokenLink( $title, $text = "", $query = "", $trail = "" ) {
2003-11-21 01:12:01 +00:00
$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" );
2003-11-21 01:12:01 +00:00
return $text == "" ? $title : $text;
}
2003-10-22 23:56:49 +00:00
}
function makeStubLink( $title, $text = "", $query = "", $trail = "" ) {
2003-11-21 01:12:01 +00:00
$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" );
2003-11-21 01:12:01 +00:00
return $text == "" ? $title : $text;
}
2003-10-22 23:56:49 +00:00
}
# Pass a title object, not a title string
function makeLinkObj( &$nt, $text= "", $query = "", $trail = "" )
{
global $wgOut, $wgUser;
2003-04-14 23:10:40 +00:00
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];
}
}
2003-10-22 23:56:49 +00:00
$retVal = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
} elseif ( 0 == $nt->getNamespace() && "" == $nt->getText() ) {
$retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail );
} elseif ( ( -1 == $nt->getNamespace() ) ||
( Namespace::getImage() == $nt->getNamespace() ) ) {
2003-10-22 23:56:49 +00:00
$retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail );
} else {
2003-10-22 23:56:49 +00:00
$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
2003-10-22 23:56:49 +00:00
}
} else {
$size = 1 ;
}
if ( $size < $threshold ) {
$retVal = $this->makeStubLinkObj( $nt, $text, $query, $trail );
} else {
$retVal = $this->makeKnownLinkObj( $nt, $text, $query, $trail );
}
}
}
2003-10-22 23:56:49 +00:00
return $retVal;
}
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
# Pass a title object, not a title string
function makeKnownLinkObj( &$nt, $text = "", $query = "", $trail = "" )
2003-04-14 23:10:40 +00:00
{
global $wgOut, $wgTitle;
2003-10-22 23:56:49 +00:00
$fname = "Skin::makeKnownLinkObj";
wfProfileIn( $fname );
2003-04-14 23:10:40 +00:00
$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(); }
2003-10-22 23:56:49 +00:00
$style = $this->getInternalLinkAttributesObj( $nt, $text );
2003-04-14 23:10:40 +00:00
$inside = "";
if ( "" != $trail ) {
if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
}
$r = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
2003-10-22 23:56:49 +00:00
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
return $r;
}
2003-10-22 23:56:49 +00:00
# Pass a title object, not a title string
function makeBrokenLinkObj( &$nt, $text = "", $query = "", $trail = "" )
2003-04-14 23:10:40 +00:00
{
global $wgOut, $wgUser;
2003-10-22 23:56:49 +00:00
$fname = "Skin::makeBrokenLinkObj";
wfProfileIn( $fname );
2003-04-14 23:10:40 +00:00
$link = $nt->getPrefixedURL();
if ( "" == $query ) { $q = "action=edit"; }
else { $q = "action=edit&{$query}"; }
$u = wfLocalUrlE( $link, $q );
if ( "" == $text ) { $text = $nt->getPrefixedText(); }
2003-10-22 23:56:49 +00:00
$style = $this->getInternalLinkAttributesObj( $nt, $text, "yes" );
2003-04-14 23:10:40 +00:00
$inside = "";
if ( "" != $trail ) {
if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
}
if ( $wgOut->isPrintable() ||
( 1 == $wgUser->getOption( "highlightbroken" ) ) ) {
$s = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
} else {
$s = "{$text}{$inside}<a href=\"{$u}\"{$style}>?</a>{$trail}";
}
2003-10-22 23:56:49 +00:00
wfProfileOut( $fname );
2003-04-14 23:10:40 +00:00
return $s;
}
2003-10-22 23:56:49 +00:00
# Pass a title object, not a title string
function makeStubLinkObj( &$nt, $text = "", $query = "", $trail = "" )
{
global $wgOut, $wgUser;
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
$link = $nt->getPrefixedURL();
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
$u = wfLocalUrlE( $link, $query );
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
if ( "" == $text ) { $text = $nt->getPrefixedText(); }
$style = $this->getInternalLinkAttributesObj( $nt, $text, "stub" );
2003-04-14 23:10:40 +00:00
2003-10-22 23:56:49 +00:00
$inside = "";
if ( "" != $trail ) {
if ( preg_match( wfMsg("linktrail"), $trail, $m ) ) {
$inside = $m[1];
$trail = $m[2];
}
}
if ( $wgOut->isPrintable() ||
( 1 == $wgUser->getOption( "highlightbroken" ) ) ) {
$s = "<a href=\"{$u}\"{$style}>{$text}{$inside}</a>{$trail}";
} else {
$s = "{$text}{$inside}<a href=\"{$u}\"{$style}>!</a>{$trail}";
}
return $s;
}
2003-04-14 23:10:40 +00:00
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 = "<img src=\"{$url}\" alt=\"{$alt}\">";
return $s;
}
function makeImageLink( $name, $url, $alt = "" ) {
$nt = Title::makeTitle( Namespace::getImage(), $name );
return $this->makeImageLinkObj( $nt, $alt );
}
2003-04-14 23:10:40 +00:00
function makeImageLinkObj( $nt, $alt = "" ) {
2004-01-12 00:55:01 +00:00
global $wgLang, $wgUseImageResize;
$link = $nt->getPrefixedURL();
$name = $nt->getDBKey();
$url = wfImageUrl( $name );
$align = "";
if ( $wgUseImageResize ) {
# Check if the alt text is of the form "options|alt text"
# Options are:
# * thumbnail make a thumbnail with enlarge-icon and caption, alignment depends on lang
# * left no resizing, just left align. label is used for alt= only
# * right same, but right aligned
# * none same, but not aligned
# * ___px scale to ___ pixels width, no aligning. e.g. use in taxobox
$part = explode( "|", $alt);
if ( count($part) > 1 ) {
$mwThumb =& MagicWord::get( MAG_IMG_THUMBNAIL );
$mwLeft =& MagicWord::get( MAG_IMG_LEFT );
$mwRight =& MagicWord::get( MAG_IMG_RIGHT );
$mwNone =& MagicWord::get( MAG_IMG_NONE );
$mwWidth =& MagicWord::get( MAG_IMG_WIDTH );
$alt = $part[count($part)-1];
$thumb=false;
foreach( $part as $key => $val ) {
if ( ! is_null( $mwThumb->matchVariableStartToEnd($val) ) ) {
$thumb=true;
} elseif ( ! is_null( $mwRight->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
$align = "right";
} elseif ( ! is_null( $mwLeft->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
$align = "left";
} elseif ( ! is_null( $mwNone->matchVariableStartToEnd($val) ) ) {
# remember to set an alignment, don't render immediately
$align = "none";
} elseif ( ! is_null( $match = $mwWidth->matchVariableStartToEnd($val) ) ) {
# $match is the image width in pixels
$width = intval($match);
}
}
}
if ( $thumb ) {
# Create a thumbnail. Alignment depends on language
# writing direction, # right aligned for left-to-right-
# languages ("Western languages"), left-aligned
# for right-to-left-languages ("Semitic languages")
#
# If thumbnail width has not been provided, it is set
# here to 180 pixels
if ( $align == "" ) {
$align = $wgLang->isRTL() ? "left" : "right";
}
if ( ! isset($width) ) {
$width = 180;
}
return $this->makeThumbLinkObj( $nt, $alt, $align, $width );
} elseif ( isset($width) ) {
# Create a resized image, without the additional thumbnail
# features
$url = $this->createThumb( $name, $width );
}
} # endif $wgUseImageResize
if ( empty( $alt ) ) {
$alt = preg_replace( '/\.(.+?)^/', '', $name );
}
$alt = htmlspecialchars( $alt );
2003-04-14 23:10:40 +00:00
$u = wfLocalUrlE( $link );
$s = "<a href=\"{$u}\" class='image' title=\"{$alt}\">" .
"<img border=\"0\" src=\"{$url}\" alt=\"{$alt}\"></a>";
2004-01-12 00:55:01 +00:00
if ( "" != $align ) {
$s = "<div class=\"float{$align}\">{$s}</div>";
}
return $s;
}
function createThumb( $name, $width ) {
global $wgUploadDirectory;
global $wgImageMagickConvertCommand;
global $wgUseImageMagick;
2004-01-12 00:55:01 +00:00
$imgPath = wfImagePath( $name );
$thumbName = $width."px-".$icon.$name;
$thumbPath = wfImageArchiveDir( $thumbName, "thumb" )."/".$thumbName;
$thumbUrl = wfImageArchiveUrl( $thumbName, "thumb" );
if ( (! file_exists( $thumbPath ))
|| ( filemtime($thumbPath) < filemtime($imgPath) ) ) {
if ( $wgUseImageMagick ) {
# use ImageMagick
$cmd = $wgImageMagickConvertCommand .
2004-01-12 00:55:01 +00:00
" -quality 95 -geometry {$width}x ".
escapeshellarg($imgPath) . " " .
escapeshellarg($thumbPath);
$conv = shell_exec( $cmd );
} else {
# Use PHP's builtin GD library functions.
#
# First find out what kind of file this is, and select the correct
# input routine for this.
list($src_width, $src_height, $src_type, $src_attr) = getimagesize( $imgPath );
switch( $src_type ) {
case 1: # GIF
$src_image = imagecreatefromgif( $imgPath );
break;
case 2: # JPG
$src_image = imagecreatefromjpeg( $imgPath );
break;
case 3: # PNG
$src_image = imagecreatefrompng( $imgPath );
break;
case 15: # WBMP for WML
$src_image = imagecreatefromwbmp( $imgPath );
break;
case 16: # XBM
$src_image = imagecreatefromxbm( $imgPath );
break;
default:
return "Image type not supported";
break;
}
$height = floor( $src_height * ( $width/$src_width ) );
$dst_image = imagecreatetruecolor( $width, $height );
imagecopyresampled( $dst_image, $src_image,
0,0,0,0,
$width, $height, $src_width, $src_height );
switch( $src_type ) {
case 1: # GIF
case 3: # PNG
case 15: # WBMP
case 16: # XBM
#$thumbUrl .= ".png";
#$thumbPath .= ".png";
imagepng( $dst_image, $thumbPath );
break;
case 2: # JPEG
#$thumbUrl .= ".jpg";
#$thumbPath .= ".jpg";
imageinterlace( $dst_image );
imagejpeg( $dst_image, $thumbPath, 95 );
break;
default:
break;
}
imagedestroy( $dst_image );
imagedestroy( $src_image );
}
2004-01-12 00:55:01 +00:00
}
return $thumbUrl;
}
function makeThumbLinkObj( $nt, $label = "", $align = "right", $boxwidth = 180 ) {
global $wgUploadPath;
$name = $nt->getDBKey();
$image = Title::makeTitle( Namespace::getImage(), $name );
$link = $image->getPrefixedURL();
$url = wfImageUrl( $name );
$path = wfImagePath( $name );
list($width, $height, $type, $attr) = getimagesize( $path );
$cwidth = $boxwidth;
$cheight = intval( $height/($width/$cwidth) );
if ($cheight > $boxwidth*1.5) {
$cheight = $boxwidth*1.3;
$cwidth = intval( $width/($height/$cheight) );
}
if ( $cwidth > $width ) {
$cwidth = $width;
$cheight = $height;
}
$thumbUrl = $this->createThumb( $name, $cwidth );
$u = wfLocalUrlE( $link );
$more = wfMsg( "thumbnail-more" );
$s = "<div class=\"thumbnail-{$align}\" style=\"width:{$boxwidth}px;\">" .
"<a href=\"{$u}\" class=\"internal\" title=\"{$label}\">" .
"<img border=\"0\" src=\"{$thumbUrl}\" alt=\"{$label}\" width=\"{$cwidth}\" height=\"{$cheight}\"></a>" .
"<a href=\"{$u}\" class=\"internal\" title=\"{$more}\">" .
"<img border=\"0\" src=\"{$wgUploadPath}/magnify-clip.png\" width=\"26\" height=\"24\" align=\"right\" alt=\"{$more}\"></a>" .
"<p>{$label}</div></p>";
2003-04-14 23:10:40 +00:00
return $s;
}
function makeMediaLink( $name, $url, $alt = "" ) {
$nt = Title::makeTitle( Namespace::getMedia(), $name );
return $this->makeMediaLinkObj( $nt, $alt );
}
function makeMediaLinkObj( $nt, $alt = "" )
2003-04-14 23:10:40 +00:00
{
$name = $nt->getDBKey();
$url = wfImageUrl( $name );
if ( empty( $alt ) ) {
$alt = preg_replace( '/\.(.+?)^/', '', $name );
}
2003-04-14 23:10:40 +00:00
$u = htmlspecialchars( $url );
$s = "<a href=\"{$u}\" class='internal' title=\"{$alt}\">{$alt}</a>";
2003-04-14 23:10:40 +00:00
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<h2>" . wfMsg( "imghistory" ) . "</h2>\n" .
"<p>" . wfMsg( "imghistlegend" ) . "\n<ul>";
return $s;
}
function endRecentChangesList()
{
$s = $this->recentChangesBlock() ;
$s .= "</ul>\n";
return $s;
}
function endImageHistoryList()
{
$s = "</ul>\n";
return $s;
}
function recentChangesBlockLine ( $y ) {
global $wgUploadPath ;
$M = wfMsg( "minoreditletter" );
$N = wfMsg( "newpageletter" );
$r = "" ;
$r .= "<img src='{$wgUploadPath}/Arr_.png' width=12 height=12 border=0>" ;
$r .= "<tt>" ;
if ( $y->isnew ) $r .= $N ;
else $r .= "&nbsp;" ;
if ( $y->isminor ) $r .= $M ;
else $r .= "&nbsp;" ;
$r .= " ".$y->timestamp." " ;
$r .= "</tt>" ;
$link = $y->link ;
if ( $y->watched ) $link = "<strong>{$link}</strong>" ;
$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 .= " <em>(".wfEscapeHTML($y->usercomment).")</em>" ;
$r .= "<br>\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]}&times;)" ;
array_push ( $users , $z ) ;
}
$users = " <font size='-1'>[".implode("; ",$users)."]</font>" ;
$e = $y ;
$e = array_shift ( $e ) ;
# Arrow
$rci = "RCI{$this->rccc}" ;
$rcl = "RCL{$this->rccc}" ;
$rcm = "RCM{$this->rccc}" ;
$tl = "<a href='javascript:toggleVisibility(\"{$rci}\",\"{$rcm}\",\"{$rcl}\")'>" ;
$tl .= "<span id='{$rcm}'><img src='{$wgUploadPath}/Arr_r.png' width=12 height=12 border=0></span>" ;
$tl .= "<span id='{$rcl}' style='display:none'><img src='{$wgUploadPath}/Arr_d.png' width=12 height=12 border=0></span>" ;
$tl .= "</a>" ;
$r .= $tl ;
# Main line
$r .= "<tt>" ;
if ( $isnew ) $r .= $N ;
else $r .= "&nbsp;" ;
$r .= "&nbsp;" ; # Minor
$r .= " ".$e->timestamp." " ;
$r .= "</tt>" ;
$link = $e->link ;
if ( $e->watched ) $link = "<strong>{$link}</strong>" ;
$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 .= "<br>\n" ;
# Sub-entries
$r .= "<div id='{$rci}' style='display:none'>" ;
foreach ( $y AS $x )
{
$r .= "<img src='{$wgUploadPath}/Arr_.png' width=12 height=12 border=0>";
$r .= "<tt>&nbsp; &nbsp; &nbsp; &nbsp;" ;
if ( $x->isnew ) $r .= $N ;
else $r .= "&nbsp;" ;
if ( $x->isminor ) $r .= $M ;
else $r .= "&nbsp;" ;
$r .= "</tt>" ;
$o = "" ;
if ( $x->oldid != 0 ) $o = "oldid=".$x->oldid ;
if ( $x->islog ) $link = $x->timestamp ;
else $link = $this->makeKnownLink( $x->secureName, $x->timestamp , $o ) ;
$link = "<tt>{$link}</tt>" ;
$r .= $link ;
$r .= " (" ;
$r .= $x->curlink ;
$r .= "; " ;
$r .= $x->lastlink ;
$r .= ") . . ".$x->userlink ;
$r .= $x->usertalklink ;
if ( $x->usercomment != "" )
$r .= " <em>(".wfEscapeHTML($x->usercomment).")</em>" ;
$r .= "<br>\n" ;
}
$r .= "</div>\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 "<div align=left>{$r}</div>" ;
}
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 .= "</ul>\n"; }
$s .= "<h4>{$d}</h4>\n<ul>";
$this->lastdate = $d;
}
$h = $wgLang->time( $ts, true );
$t = Title::makeName( $ns, $ttl );
$clink = $this->makeKnownLink( $t , "" );
$nt = Title::newFromText( $t );
if ( $watched ) {
$clink = "<strong>{$clink}</strong>";
}
$hlink = $this->makeKnownLink( $t, wfMsg( "hist" ), "action=history" );
if ( $isnew || $nt->isLog() ) {
$dlink = wfMsg( "diff" );
} else {
$dlink = $this->makeKnownLink( $t, wfMsg( "diff" ),
"diff={$oldid}&oldid={$diffid}" ); # Finagle's law
}
if ( 0 == $u ) {
$ul = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
2003-04-14 23:10:40 +00:00
$ut, "target=" . $ut );
2003-10-22 23:56:49 +00:00
} else {
$ul = $this->makeLink( $wgLang->getNsText( Namespace::getUser() ) . ":{$ut}", $ut );
}
2003-04-14 23:10:40 +00:00
$talkname=$wgLang->getNsText(Namespace::getTalk(0)); # use the shorter name
global $wgDisableAnonTalk;
if( 0 == $u && $wgDisableAnonTalk ) {
$utl = "";
} else {
$utns=$wgLang->getNsText(Namespace::getTalk(Namespace::getUser()));
$utl= $this->makeLink($utns . ":{$ut}", $talkname );
}
2003-04-14 23:10:40 +00:00
$cr = wfMsg( "currentrev" );
$s .= "<li> ({$dlink}) ({$hlink}) . .";
$M = wfMsg( "minoreditletter" );
$N = wfMsg( "newpageletter" );
if ( $isminor ) { $s .= " <strong>{$M}</strong>"; }
if ( $isnew ) { $s .= "<strong>{$N}</strong>"; }
$s .= " {$clink}; {$h} . . {$ul}";
$blink="";
if ( ( 0 == $u ) && $wgUser->isSysop() ) {
$blink = $this->makeKnownLink( $wgLang->specialPage(
"Blockip" ), wfMsg( "blocklink" ), "ip={$ut}" );
}
if($blink) {
if($utl) $utl .= " | ";
$utl .= $blink;
2003-04-14 23:10:40 +00:00
}
if($utl) $s.=" ({$utl})";
2003-04-14 23:10:40 +00:00
if ( "" != $c && "*" != $c ) {
$s .= " <em>(" . wfEscapeHTML( $c ) . ")</em>";
}
$s .= "</li>\n";
return $s;
}
function recentChangesLineNew( $ts, $u, $ut, $ns, $ttl, $c, $isminor, $isnew, $watched = false, $oldid = 0 , $diffid = 0 )
{
global $wgTitle, $wgLang, $wgUser;
$rc = new RecentChangesClass ;
$d = $wgLang->date( $ts, true);
$s = "";
$ret = "" ;
if ( $d != $this->lastdate ) {
$ret = $this->recentChangesBlock () ;
$this->rc_cache = array() ;
$ret .= "<h4>{$d}</h4>\n";
$this->lastdate = $d;
}
$h = $wgLang->time( $ts, true );
$t = Title::makeName( $ns, $ttl );
$clink = $this->makeKnownLink( $t, "" ) ;
if ( $oldid == 0 ) $c2link = $clink ;
else $c2link = $this->makeKnownLink( $t, "" , "oldid={$oldid}" );
$nt = Title::newFromText( $t );
$rc->timestamp = $h ;
$rc->oldid = $oldid ;
$rc->diffid = $diffid ;
$rc->watched = $watched ;
$rc->isnew = $isnew ;
$rc->isminor = $isminor ;
$rc->secureName = $t ;
$rc->displayName = $nt ;
$rc->link = $clink ;
$rc->usercomment = $c ;
$rc->islog = $nt->isLog() ;
if ( ( $isnew && $oldid == 0 ) || $nt->isLog() ) {
$dlink = wfMsg( "cur" );
} else {
$dlink = $this->makeKnownLink( $t, wfMsg( "cur" ),
"diff=0&oldid={$oldid}" );
}
if ( $diffid == 0 || $nt->isLog() ) {
$plink = wfMsg( "last" );
} else {
$plink = $this->makeKnownLink( $t, wfMsg( "last" ),
"diff={$oldid}&oldid={$diffid}" );
}
if ( 0 == $u ) {
$ul = $this->makeKnownLink( $wgLang->specialPage( "Contributions" ),
2003-04-14 23:10:40 +00:00
$ut, "target=" . $ut );
} else { $ul = $this->makeLink( $wgLang->getNsText(
Namespace::getUser() ) . ":{$ut}", $ut ); }
$rc->userlink = $ul ;
$rc->lastlink = $plink ;
$rc->curlink = $dlink ;
$utns=$wgLang->getNsText(Namespace::getTalk(Namespace::getUser()));
$talkname=$wgLang->getNsText(Namespace::getTalk(0)); # use the shorter name
$utl= $this->makeLink($utns . ":{$ut}", $talkname );
global $wgDisableAnonTalk;
2003-04-14 23:10:40 +00:00
if ( ( 0 == $u ) && $wgUser->isSysop() ) {
$blink = $this->makeKnownLink( $wgLang->specialPage(
"Blockip" ), wfMsg( "blocklink" ), "ip={$ut}" );
if( $wgDisableAnonTalk )
$rc->usertalklink = " ({$blink})";
else
$rc->usertalklink = " ({$utl} | {$blink})";
2003-04-14 23:10:40 +00:00
} else {
if( $wgDisableAnonTalk && ($u == 0) )
$rc->usertalklink = "";
else
$rc->usertalklink = " ({$utl})";
2003-04-14 23:10:40 +00:00
}
if ( !isset ( $this->rc_cache[$t] ) ) $this->rc_cache[$t] = array() ;
array_push ( $this->rc_cache[$t] , $rc ) ;
return $ret;
}
function imageHistoryLine( $iscur, $ts, $img, $u, $ut, $size, $c )
{
global $wgUser, $wgLang, $wgTitle;
$dt = $wgLang->timeanddate( $ts, true );
$del = wfMsg( "deleteimg" );
$cur = wfMsg( "cur" );
if ( $iscur ) {
$url = wfImageUrl( $img );
$rlink = $cur;
if ( $wgUser->isSysop() ) {
$link = wfLocalUrlE( $wgTitle->getPrefixedText(), "image=" . $wgTitle->getURL() .
2003-04-14 23:10:40 +00:00
"&action=delete" );
$style = $this->getInternalLinkAttributes( $link, $del );
$dlink = "<a href=\"{$link}\"{$style}>{$del}</a>";
} else {
$dlink = $del;
}
} else {
$url = wfEscapeHTML( wfImageArchiveUrl( $img ) );
if( $wgUser->getID() != 0 ) {
$rlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
wfMsg( "revertimg" ), "action=revert&oldimage=" .
urlencode( $img ) );
$dlink = $this->makeKnownLink( $wgTitle->getPrefixedText(),
$del, "action=delete&oldimage=" . urlencode( $img ) );
} else {
# Having live active links for non-logged in users
# means that bots and spiders crawling our site can
# inadvertently change content. Baaaad idea.
$rlink = wfMsg( "revertimg" );
$dlink = $del;
}
}
if ( 0 == $u ) { $ul = $ut; }
else { $ul = $this->makeLink( $wgLang->getNsText(
Namespace::getUser() ) . ":{$ut}", $ut ); }
2003-11-15 14:11:30 +00:00
$nb = wfMsg( "nbytes", $size );
2003-04-14 23:10:40 +00:00
$style = $this->getInternalLinkAttributes( $url, $dt );
$s = "<li> ({$dlink}) ({$rlink}) <a href=\"{$url}\"{$style}>{$dt}</a>"
. " . . {$ul} ({$nb})";
if ( "" != $c && "*" != $c ) {
$s .= " <em>(" . wfEscapeHTML( $c ) . ")</em>";
}
$s .= "</li>\n";
return $s;
}
function tocIndent($level) {
2003-07-03 03:17:22 +00:00
while($level-->0) $rv.="<div style=\"margin-left:2em;\">\n";
return $rv;
}
function tocUnindent($level) {
$rv = "";
2003-07-03 03:17:22 +00:00
while($level-->0) $rv.="</div>\n";
return $rv;
}
// parameter level defines if we are on an indentation level
function tocLine($anchor,$tocline,$level) {
if($level) {
return "<A CLASS=\"internal\" HREF=\"#".$anchor."\">".$tocline."</A><BR>\n";
} else {
return "<div style=\"margin-bottom:0px;\">\n".
"<A CLASS=\"internal\" HREF=\"#".$anchor."\">".$tocline."</A><BR>\n".
"</div>\n";
}
}
function tocTable($toc) {
// note to CSS fanatics: putting this in a div does not work -- div won't auto-expand
global $printable;
if (!$printable) {
$hideline = " <script type='text/javascript'>showTocToggle(\"" . wfMsg("showtoc") . "\",\"" . wfMsg("hidetoc") . "\")</script>";
}
return
"<p><table border=\"0\" id=\"toc\"><tr><td align=\"center\">\n".
"<b>".wfMsg("toc")."</b>" .
$hideline .
"</td></tr><tr id='tocinside'><td align=\"left\">\n".
$toc."</td></tr></table><P>\n";
}
# These two do not check for permissions: check $wgTitle->userCanEdit before calling them
function editSectionScript($section,$head) {
global $wgTitle,$wgUser,$oldid;
if($oldid) return $head;
2003-07-29 02:39:13 +00:00
$url = wfLocalUrlE(urlencode($wgTitle->getPrefixedText()),"action=edit&section=$section");
return "<span onContextMenu='document.location=\"".$url."\";return false;'>{$head}</span>";
}
function editSectionLink($section) {
global $printable;
global $wgTitle,$wgUser,$oldid;
if($oldid) return "";
if ($printable) return "";
$editurl="&section={$section}";
$url=$this->makeKnownLink($wgTitle->getPrefixedText(),wfMsg("editsection"),"action=edit".$editurl);
return "<div style=\"float:right;margin-left:5px;\"><small>[".$url."]</small></div>";
}
// This function is called by EditPage.php and shows a bulletin board style
// toolbar for common editing functions. It can be disabled in the user preferences.
// The necsesary JavaScript code can be found in style/wikibits.js.
function getEditToolbar() {
global $wgUploadPath;
// toolarray an array of arrays which each include the filename of
// the button image (without path), the opening tag, the closing tag,
// and optionally a sample text that is inserted between the two when no
// selection is highlighted.
// The tip text is shown when the user moves the mouse over the button.
$toolarray=array(
array( "image"=>"button_bold.gif",
"open"=>"\\'\\'\\'",
"close"=>"\\'\\'\\'",
"sample"=>wfMsg("bold_sample"),
"tip"=>wfMsg("bold_tip")),
array( "image"=>"button_italic.gif",
"open"=>"\\'\\'",
"close"=>"\\'\\'",
"sample"=>wfMsg("italic_sample"),
"tip"=>wfMsg("italic_tip")),
array( "image"=>"button_link.gif",
"open"=>"[[",
"close"=>"]]",
"sample"=>wfMsg("link_sample"),
"tip"=>wfMsg("link_tip")),
array( "image"=>"button_extlink.gif",
"open"=>"[",
"close"=>"]",
"sample"=>wfMsg("extlink_sample"),
"tip"=>wfMsg("extlink_tip")),
array( "image"=>"button_headline.gif",
"open"=>"\\n== ",
"close"=>" ==\\n",
"sample"=>wfMsg("headline_sample"),
"tip"=>wfMsg("headline_tip")),
array( "image"=>"button_math.gif",
"open"=>"\\<math\\>",
"close"=>"\\</math\\>",
"sample"=>wfMsg("math_sample"),
"tip"=>wfMsg("math_tip")),
array( "image"=>"button_image.gif",
"open"=>"[[Image:",
"close"=>"]]",
"sample"=>wfMsg("image_sample"),
"tip"=>wfMsg("image_tip")),
array( "image"=>"button_media.gif",
"open"=>"[[Media:",
"close"=>"]]",
"sample"=>wfMsg("media_sample"),
"tip"=>wfMsg("media_tip")),
array( "image"=>"button_sig.gif",
"open"=>"--~~~~",
"close"=>"",
"sample"=>"",
"tip"=>wfMsg("sig_tip")),
array( "image"=>"button_hr.gif",
"open"=>"\\n----\\n",
"close"=>"",
"sample"=>"",
"tip"=>wfMsg("hr_tip"))
);
$toolbar.="
<div id=\"toolbar\">";
foreach($toolarray as $tool) {
$image=$tool["image"];
$open=$tool["open"];
$close=$tool["close"];
$sample=$tool["sample"];
// Note that we use the tip both for the ALT tag and the TITLE tag of the image.
// Older browsers show a "speedtip" type message only for ALT.
// Ideally these should be different, realistically they
// probably don't need to be.
$tip=$tool["tip"];
$toolbar.=
"<a href=\"#\"".
"onclick=\"javascript:insertTags('$open','$close','$sample');\">".
"<img src=\"$wgUploadPath/$image\" border=\"0\" ALT=\"$tip\" TITLE=\"$tip\">".
"</a>";
}
$toolbar.="</div>";
return $toolbar;
}
2003-04-14 23:10:40 +00:00
}
include_once( "SkinStandard.php" );
include_once( "SkinNostalgia.php" );
include_once( "SkinCologneBlue.php" );
#include_once( "SkinSmarty.php" );
2003-04-14 23:10:40 +00:00
?>