User:Egingell/Uber Sidebar/LocalSkin.php

\n \n";       $s .= "\n \n";

$notice = wfGetSiteNotice; if( $notice ) { $s .= "\n $notice \n"; }       $s .= $this->pageTitle; $s .= $this->pageSubtitle ; $s .= $this->getCategories; wfProfileOut( $fname ); return $s; }

function getCategoryLinks { global $wgOut, $wgTitle, $wgUseCategoryBrowser; global $wgContLang;

if( count( $wgOut->mCategoryLinks ) == 0 ) return '';

# Separator $sep = wfMsgHtml( 'catseparator' );

// Use Unicode bidi embedding override characters, // to make sure links don't smash each other up in ugly ways. $dir = $wgContLang->isRTL ? 'rtl' : 'ltr'; $embed = ""; $pop = ' '; $t = $embed. implode ( "{$pop} {$sep} {$embed}", $wgOut->mCategoryLinks ). $pop;

$msg = wfMsgExt( 'pagecategories', array( 'parsemag', 'escape' ), count( $wgOut->mCategoryLinks ) ); $s = $this->makeLinkObj( Title::newFromText( wfMsgForContent('pagecategorieslink') ), $msg ) . ': ' . $t;

# optional 'dmoz-like' category browser. Will be shown under the list # of categories an article belong to       if($wgUseCategoryBrowser) { $s .= ' ';

# get a big array of the parents tree $parenttree = $wgTitle->getParentCategoryTree; # Skin object passed by reference cause it can not be           # accessed under the method subfunction drawCategoryBrowser $tempout = explode("\n", Skin::drawCategoryBrowser($parenttree, $this) ); # Clean out bogus first entry and sort them unset($tempout[0]); asort($tempout); # Output one per line $s .= implode(" \n", $tempout); }

return $s; }

/** Render the array as a serie of links. * @param $tree Array: categories tree returned by Title::getParentCategoryTree * @param &skin Object: skin passed by reference * @return String separated by &gt;, terminate with "\n" */   function drawCategoryBrowser($tree, &$skin) { $return = ''; foreach ($tree as $element => $parent) { if (empty($parent)) { # element start a new list $return .= "\n"; } else { # grab the others elements $return .= Skin::drawCategoryBrowser($parent, $skin). ' &gt; '; }           # add our current element to the list $eltitle = Title::NewFromText($element); $return .= $skin->makeLinkObj( $eltitle, $eltitle->getText ) ; }       return $return; }

function getCategories { $catlinks=$this->getCategoryLinks; if(!empty($catlinks)) { return "{$catlinks} "; }   }

function getQuickbarCompensator( $rows = 1 ) { return " "; }

/**    * This gets called shortly before the \ tag. * @return String HTML to be put before \ */   function afterContent { $printfooter = "\n". $this->printFooter. " \n"; return $printfooter. $this->doAfterContent; }

/**    * This gets called shortly before the \ tag. * @return String HTML-wrapped JS code to be put before \ */   function bottomScripts { global $wgJsMimeType; return "\n\t\tif (window.runOnloadHook) runOnloadHook; \n"; }

/** @return string Retrievied from HTML text */ function printSource { global $wgTitle; $url = htmlspecialchars( $wgTitle->getFullURL ); return wfMsg( 'retrievedfrom', ''.$url.'' ); }

function printFooter { return " ". $this->printSource. " \n\n ". $this->pageStats. " \n"; }

/** overloaded by derived classes */ function doAfterContent { }

function pageTitleLinks { global $wgOut, $wgTitle, $wgUser, $wgRequest;

$oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); $action = $wgRequest->getText( 'action' );

$s = $this->printableLink; $disclaimer = $this->disclaimerLink; # may be empty if( $disclaimer ) { $s .= ' | '. $disclaimer; }       $privacy = $this->privacyLink; # may be empty too if( $privacy ) { $s .= ' | '. $privacy; }

if ( $wgOut->isArticleRelated ) { if ( $wgTitle->getNamespace == NS_IMAGE ) { $name = $wgTitle->getDBkey; $image = new Image( $wgTitle ); if( $image->exists ) { $link = htmlspecialchars( $image->getURL ); $style = $this->getInternalLinkAttributes( $link, $name ); $s .= " | {$name}"; }           }        }        if ( 'history' == $action || isset( $diff ) || isset( $oldid ) ) { $s .= ' | '. $this->makeKnownLinkObj( $wgTitle,                   wfMsg( 'currentrev' ) ); }

if ( $wgUser->getNewtalk ) { # do not show "You have new messages" text when we are viewing our # own talk page if( !$wgTitle->equals( $wgUser->getTalkPage ) ) { $tl = $this->makeKnownLinkObj( $wgUser->getTalkPage, wfMsgHtml( 'newmessageslink' ), 'redirect=no' ); $dl = $this->makeKnownLinkObj( $wgUser->getTalkPage, wfMsgHtml( 'newmessagesdifflink' ), 'diff=cur' ); $s.= ' | '. wfMsg( 'youhavenewmessages', $tl, $dl ). ' ';               # disable caching $wgOut->setSquidMaxage(0); $wgOut->enableClientCache(false); }       }

$undelete = $this->getUndeleteLink; if( !empty( $undelete ) ) { $s .= ' | '.$undelete; }       return $s; }

function getUndeleteLink { global $wgUser, $wgTitle, $wgContLang, $action; if(   $wgUser->isAllowed( 'deletedhistory' ) &&            (($wgTitle->getArticleID == 0) || ($action == "history")) &&            ($n = $wgTitle->isDeleted ) ) {           if ( $wgUser->isAllowed( 'delete' ) ) { $msg = 'thisisdeleted'; } else { $msg = 'viewdeleted'; }           return wfMsg( $msg,                $this->makeKnownLinkObj( SpecialPage::getTitleFor( 'Undelete', $wgTitle->getPrefixedDBkey ), wfMsgExt( 'restorelink', array( 'parsemag', 'escape' ), $n ) ) ); }       return ''; }

function printableLink { global $wgOut, $wgFeedClasses, $wgRequest;

$printurl = $wgRequest->escapeAppendQuery( 'printable=yes' );

$s = "". wfMsg( 'printableversion' ). ''; if( $wgOut->isSyndicated ) { foreach( $wgFeedClasses as $format => $class ) { $feedurl = $wgRequest->escapeAppendQuery( "feed=$format" ); $s .= " | {$format}</a>"; }       }        return $s; }

function pageTitle { global $wgOut; $s = ' '. htmlspecialchars( $wgOut->getPageTitle ). ' ';       return $s; }

function pageSubtitle { global $wgOut;

$sub = $wgOut->getSubtitle; if ( '' == $sub ) { global $wgExtraSubtitle; $sub = wfMsg( 'tagline' ). $wgExtraSubtitle; }       $subpages = $this->subPageSubtitle; $sub .= !empty($subpages)?" <p class='subpages'>$subpages":''; $s = "<p class='subtitle'>{$sub} \n"; return $s; }

function subPageSubtitle { global $wgOut,$wgTitle,$wgNamespacesWithSubpages; $subpages = ''; if($wgOut->isArticle && !empty($wgNamespacesWithSubpages[$wgTitle->getNamespace])) { $ptext=$wgTitle->getPrefixedText; if(preg_match('/\//',$ptext)) { $links = explode('/',$ptext); $c = 0; $growinglink = ''; foreach($links as $link) { $c++; if ($c<count($links)) { $growinglink .= $link; $getlink = $this->makeLink( $growinglink, htmlspecialchars( $link ) ); if(preg_match('/class="new"/i',$getlink)) { break; } # this is a hack, but it saves time if ($c>1) { $subpages .= ' | '; } else { $subpages .= '&lt; '; }                       $subpages .= $getlink; $growinglink .= '/'; }               }            }        }        return $subpages; }

function nameAndLogin { global $wgUser, $wgTitle, $wgLang, $wgContLang, $wgShowIPinHeader;

$lo = $wgContLang->specialPage( 'Userlogout' );

$s = ''; if ( $wgUser->isAnon ) { if( $wgShowIPinHeader && isset( $_COOKIE[ini_get('session.name')] ) ) { $n = wfGetIP;

$tl = $this->makeKnownLinkObj( $wgUser->getTalkPage,                 $wgLang->getNsText( NS_TALK ) );

$s .= $n. ' ('.$tl.')'; } else { $s .= wfMsg('notloggedin'); }

$rt = $wgTitle->getPrefixedURL; if ( 0 == strcasecmp( urlencode( $lo ), $rt ) ) { $q = ''; } else { $q = "returnto={$rt}"; }

$s .= "\n ". $this->makeKnownLinkObj(               SpecialPage::getTitleFor( 'Userlogin' ),                wfMsg( 'login' ), $q ); } else { $n = $wgUser->getName; $rt = $wgTitle->getPrefixedURL; $tl = $this->makeKnownLinkObj( $wgUser->getTalkPage,             $wgLang->getNsText( NS_TALK ) );

$tl = " ({$tl})";

$s .= $this->makeKnownLinkObj( $wgUser->getUserPage,             $n ). "{$tl} ". $this->makeKnownLinkObj( SpecialPage::getTitleFor( 'Userlogout' ), wfMsg( 'logout' ),             "returnto={$rt}" ). ' | ' .             $this->specialLink( 'preferences' ); }       $s .= ' | '. $this->makeKnownLink( wfMsgForContent( 'helppage' ),         wfMsg( 'help' ) );

return $s; }

function getSearchLink { $searchPage = SpecialPage::getTitleFor( 'Search' ); return $searchPage->getLocalURL; }

function escapeSearchLink { return htmlspecialchars( $this->getSearchLink ); }

function searchForm { global $wgRequest; $search = $wgRequest->getText( 'search' );

$s = '<form name="search" class="inline" method="post" action="'         . $this->escapeSearchLink . "\">\n" . '<input type="text" name="search" size="19" value="'         . htmlspecialchars(substr($search,0,256)) . "\" />\n" . '<input type="submit" name="go" value="' . wfMsg ('searcharticle') . '" /> ' . '<input type="submit" name="fulltext" value="' . wfMsg ('searchbutton') . "\" />\n ";

return $s; }

function topLinks { global $wgOut; $sep = " |\n";

$s = $this->mainPageLink. $sep . $this->specialLink( 'recentchanges' );

if ( $wgOut->isArticleRelated ) { $s .= $sep. $this->editThisPage . $sep. $this->historyLink; }       # Many people don't like this dropdown box #$s .= $sep. $this->specialPagesList; $s .= $this->variantLinks; $s .= $this->extensionTabLinks;

return $s; }   /**     * Compatibility for extensions adding functionality through tabs. * Eventually these old skins should be replaced with SkinTemplate-based * versions, sigh... * @return string */   function extensionTabLinks { $tabs = array; $s = ''; wfRunHooks( 'SkinTemplateTabs', array( $this, &$tabs ) ); foreach( $tabs as $tab ) { $s .= ' | '. Xml::element( 'a',               array( 'href' => $tab['href'] ),                $tab['text'] ); }       return $s; }   /**     * Language/charset variant links for classic-style skins * @return string */   function variantLinks { $s = ''; /* show links to different language variants */ global $wgDisableLangConversion, $wgContLang, $wgTitle; $variants = $wgContLang->getVariants; if( !$wgDisableLangConversion && sizeof( $variants ) > 1 ) { foreach( $variants as $code ) { $varname = $wgContLang->getVariantname( $code ); if( $varname == 'disable' ) continue; $s .= ' | <a href="' . $wgTitle->escapeLocalUrl( 'variant=' . $code ) . '">'. htmlspecialchars( $varname ). '</a>'; }       }        return $s; }

function bottomLinks { global $wgOut, $wgUser, $wgTitle, $wgUseTrackbacks; $sep = " |\n";

$s = ''; if ( $wgOut->isArticleRelated ) { $s .= ' '. $this->editThisPage. ' ';           if ( $wgUser->isLoggedIn ) { $s .= $sep. $this->watchThisPage; }           $s .= $sep. $this->talkLink . $sep. $this->historyLink . $sep. $this->whatLinksHere . $sep. $this->watchPageLinksLink;

if ($wgUseTrackbacks) $s .= $sep. $this->trackbackLink;

if ( $wgTitle->getNamespace == NS_USER               || $wgTitle->getNamespace == NS_USER_TALK )

{               $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( $this->showEmailUser( $id ) ) { $s .= $sep. $this->emailUserLink; }           }            if ( $wgTitle->getArticleID ) { $s .= "\n "; if($wgUser->isAllowed('delete')) { $s .= $this->deleteThisPage; } if($wgUser->isAllowed('protect')) { $s .= $sep. $this->protectThisPage; } if($wgUser->isAllowed('move')) { $s .= $sep. $this->moveThisPage; } }           $s .= " \n". $this->otherLanguages; }       return $s; }

function pageStats { global $wgOut, $wgLang, $wgArticle, $wgRequest, $wgUser; global $wgDisableCounters, $wgMaxCredits, $wgShowCreditsIfMax, $wgTitle, $wgPageShowWatchingUsers;

$oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); if ( ! $wgOut->isArticle ) { return ''; } if ( isset( $oldid ) || isset( $diff ) ) { return ''; } if ( 0 == $wgArticle->getID ) { return ''; }

$s = ''; if ( !$wgDisableCounters ) { $count = $wgLang->formatNum( $wgArticle->getCount ); if ( $count ) { $s = wfMsgExt( 'viewcount', array( 'parseinline' ), $count ); }       }

if (isset($wgMaxCredits) && $wgMaxCredits != 0) { require_once('Credits.php'); $s .= ' '. getCredits($wgArticle, $wgMaxCredits, $wgShowCreditsIfMax); } else { $s .= $this->lastModified; }

if ($wgPageShowWatchingUsers && $wgUser->getOption( 'shownumberswatching' )) { $dbr =& wfGetDB( DB_SLAVE ); $watchlist = $dbr->tableName( 'watchlist' ); $sql = "SELECT COUNT(*) AS n FROM $watchlist               WHERE wl_title='". $dbr->strencode($wgTitle->getDBKey). "' AND wl_namespace=". $wgTitle->getNamespace ; $res = $dbr->query( $sql, 'Skin::pageStats'); $x = $dbr->fetchObject( $res ); $s .= ' '. wfMsg('number_of_watching_users_pageview', $x->n ); }

return $s. ' ' . $this->getCopyright; }

function getCopyright( $type = 'detect' ) { global $wgRightsPage, $wgRightsUrl, $wgRightsText, $wgRequest;

if ( $type == 'detect' ) { $oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' );

if ( !is_null( $oldid ) && is_null( $diff ) && wfMsgForContent( 'history_copyright' ) !== '-' ) { $type = 'history'; } else { $type = 'normal'; }       }

if ( $type == 'history' ) { $msg = 'history_copyright'; } else { $msg = 'copyright'; }

$out = ''; if( $wgRightsPage ) { $link = $this->makeKnownLink( $wgRightsPage, $wgRightsText ); } elseif( $wgRightsUrl ) { $link = $this->makeExternalLink( $wgRightsUrl, $wgRightsText ); } else { # Give up now return $out; }       $out .= wfMsgForContent( $msg, $link ); return $out; }

function getCopyrightIcon { global $wgRightsUrl, $wgRightsText, $wgRightsIcon, $wgCopyrightIcon; $out = ''; if ( isset( $wgCopyrightIcon ) && $wgCopyrightIcon ) { $out = $wgCopyrightIcon; } else if ( $wgRightsIcon ) { $icon = htmlspecialchars( $wgRightsIcon ); if ( $wgRightsUrl ) { $url = htmlspecialchars( $wgRightsUrl ); $out .= '<a href="'.$url.'">'; }           $text = htmlspecialchars( $wgRightsText ); $out .= "<img src=\"$icon\" alt='$text' />"; if ( $wgRightsUrl ) { $out .= '</a>'; }       }        return $out; }

function getPoweredBy { global $wgStylePath; $url = htmlspecialchars( "$wgStylePath/common/images/poweredby_mediawiki_88x31.png" ); $img = '<a href="http://www.mediawiki.org/"><img src="'.$url.'" alt="Powered by MediaWiki" /></a>'; return $img; }

function lastModified { global $wgLang, $wgArticle, $wgLoadBalancer;

$timestamp = $wgArticle->getTimestamp; if ( $timestamp ) { $d = $wgLang->date( $timestamp, true ); $t = $wgLang->time( $timestamp, true ); $s = ' '. wfMsg( 'lastmodifiedat', $d, $t ); } else { $s = ''; }       if ( $wgLoadBalancer->getLaggedSlaveMode ) { $s .= ' '. wfMsg( 'laggedslavemode' ). ' ';       }        return $s; }

function logoText( $align = '' ) { if ( '' != $align ) { $a = " align='{$align}'"; } else { $a = ''; }

$mp = wfMsg( 'mainpage' ); $mptitle = Title::newMainPage; $url = ( is_object($mptitle) ? $mptitle->escapeLocalURL : '' );

$logourl = $this->getLogo; $s = "<a href='{$url}'><img{$a} src='{$logourl}' alt='[{$mp}]' /></a>"; return $s; }

/**    * show a drop-down box of special pages */   function specialPagesList { global $wgUser, $wgContLang, $wgServer, $wgRedirectScript; $pages = array_merge( SpecialPage::getRegularPages, SpecialPage::getRestrictedPages ); foreach ( $pages as $name => $page ) { $pages[$name] = $page->getDescription; }

$go = wfMsg( 'go' ); $sp = wfMsg( 'specialpages' ); $spp = $wgContLang->specialPage( 'Specialpages' );

$s = '<form id="specialpages" method="get" class="inline" '. 'action="' . htmlspecialchars( "{$wgServer}{$wgRedirectScript}" ) . "\">\n"; $s .= "<select name=\"wpDropdown\">\n"; $s .= "<option value=\"{$spp}\">{$sp} \n";

foreach ( $pages as $name => $desc ) { $p = $wgContLang->specialPage( $name ); $s .= "<option value=\"{$p}\">{$desc} \n"; }       $s .= " \n"; $s .= "<input type='submit' value=\"{$go}\" name='redirect' />\n"; $s .= " \n"; return $s; }

function mainPageLink { $s = $this->makeKnownLinkObj( Title::newMainPage, wfMsg( 'mainpage' ) ); return $s; }

function copyrightLink { $s = $this->makeKnownLink( wfMsgForContent( 'copyrightpage' ),         wfMsg( 'copyrightpagename' ) ); return $s; }

function privacyLink { $privacy = wfMsg( 'privacy' ); if ($privacy == '-') { return ''; } else { return $this->makeKnownLink( wfMsgForContent( 'privacypage' ), $privacy); }   }

function aboutLink { $s = $this->makeKnownLink( wfMsgForContent( 'aboutpage' ),         wfMsg( 'aboutsite' ) ); return $s; }

function disclaimerLink { $disclaimers = wfMsg( 'disclaimers' ); if ($disclaimers == '-') { return ''; } else { return $this->makeKnownLink( wfMsgForContent( 'disclaimerpage' ),                                        $disclaimers ); }   }

function editThisPage { global $wgOut, $wgTitle;

if ( ! $wgOut->isArticleRelated ) { $s = wfMsg( 'protectedpage' ); } else { if ( $wgTitle->userCanEdit ) { $t = wfMsg( 'editthispage' ); } else { $t = wfMsg( 'viewsource' ); }

$s = $this->makeKnownLinkObj( $wgTitle, $t, $this->editUrlOptions ); }       return $s; }

/**    * Return URL options for the 'edit page' link. * This may include an 'oldid' specifier, if the current page view is such. *    * @return string * @private */   function editUrlOptions { global $wgArticle;

if( $this->mRevisionId && ! $wgArticle->isCurrent ) { return "action=edit&oldid=". intval( $this->mRevisionId ); } else { return "action=edit"; }   }

function deleteThisPage { global $wgUser, $wgTitle, $wgRequest;

$diff = $wgRequest->getVal( 'diff' ); if ( $wgTitle->getArticleID && ( ! $diff ) && $wgUser->isAllowed('delete') ) { $t = wfMsg( 'deletethispage' );

$s = $this->makeKnownLinkObj( $wgTitle, $t, 'action=delete' ); } else { $s = ''; }       return $s; }

function protectThisPage { global $wgUser, $wgTitle, $wgRequest;

$diff = $wgRequest->getVal( 'diff' ); if ( $wgTitle->getArticleID && ( ! $diff ) && $wgUser->isAllowed('protect') ) { if ( $wgTitle->isProtected ) { $t = wfMsg( 'unprotectthispage' ); $q = 'action=unprotect'; } else { $t = wfMsg( 'protectthispage' ); $q = 'action=protect'; }           $s = $this->makeKnownLinkObj( $wgTitle, $t, $q ); } else { $s = ''; }       return $s; }

function watchThisPage { global $wgOut, $wgTitle; ++$this->mWatchLinkNum;

if ( $wgOut->isArticleRelated ) { if ( $wgTitle->userIsWatching ) { $t = wfMsg( 'unwatchthispage' ); $q = 'action=unwatch'; $id = "mw-unwatch-link".$this->mWatchLinkNum; } else { $t = wfMsg( 'watchthispage' ); $q = 'action=watch'; $id = 'mw-watch-link'.$this->mWatchLinkNum; }           $s = $this->makeKnownLinkObj( $wgTitle, $t, $q, , , " id=\"$id\"" ); } else { $s = wfMsg( 'notanarticle' ); }       return $s; }

function moveThisPage { global $wgTitle;

if ( $wgTitle->userCanMove ) { return $this->makeKnownLinkObj( SpecialPage::getTitleFor( 'Movepage' ),             wfMsg( 'movethispage' ), 'target=' . $wgTitle->getPrefixedURL ); } else { // no message if page is protected - would be redundant return ''; }   }

function historyLink { global $wgTitle;

return $this->makeKnownLinkObj( $wgTitle,         wfMsg( 'history' ), 'action=history' ); }

function whatLinksHere { global $wgTitle;

return $this->makeKnownLinkObj(            SpecialPage::getTitleFor( 'Whatlinkshere', $wgTitle->getPrefixedDBkey ),             wfMsg( 'whatlinkshere' ) ); }

function userContribsLink { global $wgTitle;

return $this->makeKnownLinkObj(            SpecialPage::getTitleFor( 'Contributions', $wgTitle->getDBkey ),            wfMsg( 'contributions' ) ); }

function showEmailUser( $id ) { global $wgEnableEmail, $wgEnableUserEmail, $wgUser; return $wgEnableEmail && $wgEnableUserEmail && $wgUser->isLoggedIn && # show only to signed in users 0 != $id; # we can only email to non-anons .. }
 * 1)               '' != $id->getEmail && # who must have an email address stored ..
 * 2)               0 != $id->getEmailauthenticationtimestamp && # .. which is authenticated
 * 3)               1 != $wgUser->getOption('disablemail'); # and not disabled

function emailUserLink { global $wgTitle;

return $this->makeKnownLinkObj(            SpecialPage::getTitleFor( 'Emailuser', $wgTitle->getDBkey ),            wfMsg( 'emailuser' ) ); }

function watchPageLinksLink { global $wgOut, $wgTitle;

if ( ! $wgOut->isArticleRelated ) { return '(' . wfMsg( 'notanarticle' ) . ')'; } else { return $this->makeKnownLinkObj(                SpecialPage::getTitleFor( 'Recentchangeslinked', $wgTitle->getPrefixedDBkey ),                 wfMsg( 'recentchangeslinked' ) ); }   }

function trackbackLink { global $wgTitle;

return "<a href=\"" . $wgTitle->trackbackURL . "\">" . wfMsg('trackbacklink'). "</a>"; }

function otherLanguages { global $wgOut, $wgContLang, $wgHideInterlanguageLinks;

if ( $wgHideInterlanguageLinks ) { return ''; }

$a = $wgOut->getLanguageLinks; if ( 0 == count( $a ) ) { return ''; }

$s = wfMsg( 'otherlanguages' ). ': ';       $first = true; if($wgContLang->isRTL) $s .= ' '; foreach( $a as $l ) { if ( ! $first ) { $s .= ' | '; } $first = false;

$nt = Title::newFromText( $l ); $url = $nt->escapeFullURL; $text = $wgContLang->getLanguageName( $nt->getInterwiki );

if ( '' == $text ) { $text = $l; } $style = $this->getExternalLinkAttributes( $l, $text ); $s .= "<a href=\"{$url}\"{$style}>{$text}</a>"; }       if($wgContLang->isRTL) $s .= ' '; return $s; }

function bugReportsLink { $s = $this->makeKnownLink( wfMsgForContent( 'bugreportspage' ),         wfMsg( 'bugreports' ) ); return $s; }

function dateLink { $t1 = Title::newFromText( gmdate( 'F j' ) ); $t2 = Title::newFromText( gmdate( 'Y' ) );

$id = $t1->getArticleID;

if ( 0 == $id ) { $s = $this->makeBrokenLink( $t1->getText ); } else { $s = $this->makeKnownLink( $t1->getText ); }       $s .= ', ';

$id = $t2->getArticleID;

if ( 0 == $id ) { $s .= $this->makeBrokenLink( $t2->getText ); } else { $s .= $this->makeKnownLink( $t2->getText ); }       return $s; }

function talkLink { global $wgTitle;

if ( NS_SPECIAL == $wgTitle->getNamespace ) { # No discussion links for special pages return ''; }

if( $wgTitle->isTalkPage ) { $link = $wgTitle->getSubjectPage; switch( $link->getNamespace ) { case NS_MAIN: $text = wfMsg( 'articlepage' ); break; case NS_USER: $text = wfMsg( 'userpage' ); break; case NS_PROJECT: $text = wfMsg( 'projectpage' ); break; case NS_IMAGE: $text = wfMsg( 'imagepage' ); break; case NS_MEDIAWIKI: $text = wfMsg( 'mediawikipage' ); break; case NS_TEMPLATE: $text = wfMsg( 'templatepage' ); break; case NS_HELP: $text = wfMsg( 'viewhelppage' ); break; case NS_CATEGORY: $text = wfMsg( 'categorypage' ); break; default: $text = wfMsg( 'articlepage' ); }       } else { $link = $wgTitle->getTalkPage; $text = wfMsg( 'talkpage' ); }

$s = $this->makeLinkObj( $link, $text );

return $s; }

function commentLink { global $wgTitle, $wgOut;

if ( $wgTitle->getNamespace == NS_SPECIAL ) { return ''; }       # __NEWSECTIONLINK___ changes behaviour here # If it's present, the link points to this page, otherwise # it points to the talk page if( $wgTitle->isTalkPage ) { $title =& $wgTitle; } elseif( $wgOut->showNewSectionLink ) { $title =& $wgTitle; } else { $title =& $wgTitle->getTalkPage; }       return $this->makeKnownLinkObj( $title, wfMsg( 'postcomment' ), 'action=edit&section=new' ); }

/* these are used extensively in SkinTemplate, but also some other places */ static function makeMainPageUrl( $urlaction = '' ) { $title = Title::newMainPage; self::checkTitle( $title, $name ); return $title->getLocalURL( $urlaction ); }

static function makeSpecialUrl( $name, $urlaction = '' ) { $title = SpecialPage::getTitleFor( $name ); return $title->getLocalURL( $urlaction ); }

static function makeSpecialUrlSubpage( $name, $subpage, $urlaction = '' ) { $title = SpecialPage::getSafeTitleFor( $name, $subpage ); return $title->getLocalURL( $urlaction ); }

static function makeI18nUrl( $name, $urlaction = '' ) { $title = Title::newFromText( wfMsgForContent( $name ) ); self::checkTitle( $title, $name ); return $title->getLocalURL( $urlaction ); }

static function makeUrl( $name, $urlaction = '' ) { $title = Title::newFromText( $name ); self::checkTitle( $title, $name ); return $title->getLocalURL( $urlaction ); }

# If url string starts with http, consider as external URL, else # internal static function makeInternalOrExternalUrl( $name ) { if ( preg_match( '/^(?:' . wfUrlProtocols . ')/', $name ) ) { return $name; } else { return self::makeUrl( $name ); }   }

# this can be passed the NS number as defined in Language.php static function makeNSUrl( $name, $urlaction = '', $namespace = NS_MAIN ) { $title = Title::makeTitleSafe( $namespace, $name ); self::checkTitle( $title, $name ); return $title->getLocalURL( $urlaction ); }

/* these return an array with the 'href' and boolean 'exists' */ static function makeUrlDetails( $name, $urlaction = '' ) { $title = Title::newFromText( $name ); self::checkTitle( $title, $name ); return array(           'href' => $title->getLocalURL( $urlaction ),            'exists' => $title->getArticleID != 0 ? true : false        ); }

/**    * Make URL details where the article exists (or at least it's convenient to think so) */   static function makeKnownUrlDetails( $name, $urlaction = '' ) { $title = Title::newFromText( $name ); self::checkTitle( $title, $name ); return array(           'href' => $title->getLocalURL( $urlaction ),            'exists' => true        ); }

# make sure we have some title to operate on   static function checkTitle( &$title, &$name ) { if( !is_object( $title ) ) { $title = Title::newFromText( $name ); if( !is_object( $title ) ) { $title = Title::newFromText( '--error: link target missing--' ); }       }    }

/**    * Build an array that represents the sidebar(s), the navigation bar among them *    * @return array * @private */   function buildSidebar { global $parserMemc, $wgEnableSidebarCache, $wgOut; global $wgParser, $wgLang, $wgContLang, $wgTitle, $wgUser;

$fname = 'SkinTemplate::buildSidebar';

wfProfileIn( $fname );

$key = wfMemcKey( 'sidebar' ); $cacheSidebar = $wgEnableSidebarCache && ($wgLang->getCode == $wgContLang->getCode); if ($cacheSidebar) { $cachedsidebar = $parserMemc->get( $key ); if ($cachedsidebar!="") { wfProfileOut($fname); return $cachedsidebar; }       }

$bar = array;

$NameSpaceNumber = $wgTitle->getNamespace; if (!$nsText = $wgTitle->getNSText) { $nsText = '(Main)'; }

$sideBar_str_default = wfMsgForContent( 'sidebar' );

// Namespace based sidebar $sideBar_str_custom = wfMsgForContent( 'sidebar'.$NameSpaceNumber );

// Get the user's sidebar and add it to the rest. $rev = Revision::newFromTitle(Title::newFromText('User:'. $wgUser->mName. '/Sidebar')); $sideBar_str_user = $rev->getText;

if (trim($sideBar_str_custom) != '&lt;sidebar'.$NameSpaceNumber . '&gt;' ) { $sideBar_str_default .= "\n". $sideBar_str_custom; }

if ( $sideBar_str_user ) { $sideBar_str_default .= "\n". $sideBar_str_user; }

$lines = array_unique(explode( "\n", $sideBar_str_default ));

foreach ($lines as $line) { if (strpos($line, '*') !== 0) continue; if (strpos($line, '**') !== 0) { $line = trim($line, '* '); if (preg_match('(\? if \((.*?)\) "(.*?)" \?)', $line, $match)) { if ($wgUser->isAllowed( $match[1] ) ) { $line = $match[2]; } else { continue; }               }                $heading = $line; } else { if (strpos($line, '|') !== false) { // sanity check $line = trim($line, '* '); // If there's PHP-esque code, execute it first. unset($match);

if (preg_match('(\? if \((.*?)\) "(.*?)" \?)', $line, $match)) { if ($wgUser->isAllowed( $match[1] ) ) { $line = $match[2]; } else { continue; }                   }

$line = explode( '|', $line, 2 );

$link = wfMsgForContent( $line[0] );

if ($link == '-') continue; //                   if (wfEmptyMsg($line[1], $text = wfMsg($line[1]))) if (wfEmptyMsg($line[1], $text = $line[1])) $text = $line[1]; if (wfEmptyMsg($line[0], $link)) $link = $line[0];

if ( preg_match( '/^(?:' . wfUrlProtocols . ')/', $link ) ) { $href = $link; } else { if ( $title = Title::newFromText( $link ) ) { $title = $title->fixSpecialName; $href = $title->getLocalURL; } else { $title = Title::newFromText( 'INVALID-TITLE' ); $href = $title->getLocalURL; }                   }                    $text = str_ireplace('{ns}', $NameSpaceNumber, $text); $text = str_ireplace('{nst}', $nsText, $text); $href = str_ireplace('{ns}', $NameSpaceNumber, $href); $href = str_ireplace('{nst}', $nsText, $href);

$bar[$heading][$text] = array(                       'text' => $text,                        'href' => $href,                        'id' => 'n-' . strtr($line[1], ' ', '-'),                        'active' => false                    ); } else { continue; } }       }

// try adding category links, if any if ($wgOut->mCategoryLinks) { foreach ($wgOut->mCategoryLinks AS $cat) { preg_match('(<a href=".*" title="(.*)">(.*)</a>)', $cat, $matches); if ( $title = Title::newFromText( $matches[1] ) ) { $title = $title->fixSpecialName; $href = $title->getLocalURL; } else { $title = Title::newFromText( 'INVALID-TITLE' ); $href = $title->getLocalURL; }               $bar['Categories'][$matches[2]] = array(                    'text' => $matches[2],                    'href' => $href,                    'id' => 'n-' . strtr($cat, ' ', '-'),                    'active' => false                ); }       }

// try adding category pages if in the Category namespace. if ($nsText == 'Category') { $viewer = new CategoryViewer( $wgTitle ); $viewer->doCategoryQuery; $viewer->finaliseCategoryState; foreach (array( 'Sub Categories' => 'children', 'Articles in Category' => 'articles', 'Images in Category' => 'showGallery', ) AS $name => $var) { if ($viewer->$var) { foreach($viewer->$var AS $val) { if (strpos($val, '<img')) { // This check is only for my Wiki, you probably won't need it. preg_match('(<a href=".*" title="(.*)"><img src=".*">(.*)</a>)', $val, $matches); } else { preg_match('(<a href=".*" title="(.*)">(.*)</a>)', $val, $matches); }                       foreach ($matches AS &$v) { $v = trim($v); }

if ( $title = Title::newFromText( $matches[1] ) ) { $title = $title->fixSpecialName; $href = $title->getLocalURL; } else { $title = Title::newFromText( 'INVALID-TITLE' ); $href = $title->getLocalURL; }                       $bar[$name][$matches[2]] = array(                            'text' => $matches[2],                            'href' => $href,                            'id' => 'n-' . strtr($matches[2], ' ', '-'),                            'active' => false                        ); }               }            }        }        // Sort the Array based on the following: $bar['customize']['Your Sidebar'] = array(           'text' => 'Your Sidebar',            'href' => 'index.php?title=User:'.$wgUser->mName.'/Sidebar&action=edit',            'id' => 'n-Your_Sidebar',            'active' => false        ); reset($bar); $first_key = key($bar); ksort($bar[$first_key]); $sort_array[$first_key] = $bar[$first_key]; // first on the list is always first $temp = array_keys($bar); unset($temp[array_search($first_key, $temp)]); natcasesort($temp); foreach ($temp AS $heading) { ksort($bar[$heading]); $sort_array[$heading] = $bar[$heading]; }       $bar = $sort_array; if ($cacheSidebar) $parserMemc->set( $key, $bar, 86400 ); wfProfileOut( $fname ); return $bar; } } ?>