skin.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 1,500 行 · 第 1/3 页

PHP
1,500
字号
	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 = "<span dir='$dir'>";		$pop = '</span>';		$t = $embed . implode ( "{$pop} {$sep} {$embed}" , $wgOut->mCategoryLinks ) . $pop;		$msg = wfMsgExt('categories', array('parsemag', 'escape'), count( $wgOut->mCategoryLinks ));		$s = $this->makeKnownLinkObj( Title::makeTitle( NS_SPECIAL, 'Categories' ),			$msg, 'article=' . urlencode( $wgTitle->getPrefixedDBkey() ) )			. ': ' . $t;		# optional 'dmoz-like' category browser. Will be shown under the list		# of categories an article belong to		if($wgUseCategoryBrowser) {			$s .= '<br /><hr />';			# 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("<br />\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 "<p class='catlinks'>{$catlinks}</p>";		}	}	function getQuickbarCompensator( $rows = 1 ) {		return "<td width='152' rowspan='{$rows}'>&nbsp;</td>";	}	/**	 * This gets called immediately before the \</body\> tag.	 * @return String HTML to be put after \</body\> ???	 */	function afterContent() {		$printfooter = "<div class=\"printfooter\">\n" . $this->printFooter() . "</div>\n";		return $printfooter . $this->doAfterContent();	}	/** @return string Retrievied from HTML text */	function printSource() {		global $wgTitle;		$url = htmlspecialchars( $wgTitle->getFullURL() );		return wfMsg( 'retrievedfrom', '<a href="'.$url.'">'.$url.'</a>' );	}	function printFooter() {		return "<p>" .  $this->printSource() .			"</p>\n\n<p>" . $this->pageStats() . "</p>\n";	}	/** overloaded by derived classes */	function doAfterContent() { }	function pageTitleLinks() {		global $wgOut, $wgTitle, $wgUser, $wgRequest;		extract( $wgRequest->getValues( 'oldid', '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 .= " | <a href=\"{$link}\"{$style}>{$name}</a>";				}			}		}		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.= ' | <strong>'. wfMsg( 'youhavenewmessages', $tl, $dl ) . '</strong>';				# 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->makeKnownLink(					$wgContLang->SpecialPage( 'Undelete/' . $wgTitle->getPrefixedDBkey() ),					wfMsgExt( 'restorelink', array( 'parsemag', 'escape' ), $n ) ) );		}		return '';	}	function printableLink() {		global $wgOut, $wgFeedClasses, $wgRequest;		$baseurl = $_SERVER['REQUEST_URI'];		if( strpos( '?', $baseurl ) == false ) {			$baseurl .= '?';		} else {			$baseurl .= '&';		}		$baseurl = htmlspecialchars( $baseurl );		$printurl = $wgRequest->escapeAppendQuery( 'printable=yes' );		$s = "<a href=\"$printurl\">" . wfMsg( 'printableversion' ) . '</a>';		if( $wgOut->isSyndicated() ) {			foreach( $wgFeedClasses as $format => $class ) {				$feedurl = $wgRequest->escapeAppendQuery( "feed=$format" );				$s .= " | <a href=\"$feedurl\">{$format}</a>";			}		}		return $s;	}	function pageTitle() {		global $wgOut;		$s = '<h1 class="pagetitle">' . htmlspecialchars( $wgOut->getPageTitle() ) . '</h1>';		return $s;	}	function pageSubtitle() {		global $wgOut;		$sub = $wgOut->getSubtitle();		if ( '' == $sub ) {			global $wgExtraSubtitle;			$sub = wfMsg( 'tagline' ) . $wgExtraSubtitle;		}		$subpages = $this->subPageSubtitle();		$sub .= !empty($subpages)?"</p><p class='subpages'>$subpages":'';		$s = "<p class='subtitle'>{$sub}</p>\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;		$li = $wgContLang->specialPage( 'Userlogin' );		$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<br />" . $this->makeKnownLinkObj(				Title::makeTitle( NS_SPECIAL, '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}<br />" .			  $this->makeKnownLinkObj( Title::makeTitle( NS_SPECIAL, 'Userlogout' ), wfMsg( 'logout' ),			  "returnto={$rt}" ) . ' | ' .			  $this->specialLink( 'preferences' );		}		$s .= ' | ' . $this->makeKnownLink( wfMsgForContent( 'helppage' ),		  wfMsg( 'help' ) );		return $s;	}	function getSearchLink() {		$searchPage =& Title::makeTitle( NS_SPECIAL, '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 ('go') . '" />&nbsp;'		  . '<input type="submit" name="fulltext" value="' . wfMsg ('search') . "\" />\n</form>";		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();		/* 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->getLocalUrl( 'variant=' . $code ) . '">' . $varname . '</a>';			}		}		return $s;	}	function bottomLinks() {		global $wgOut, $wgUser, $wgTitle, $wgUseTrackbacks;		$sep = " |\n";		$s = '';		if ( $wgOut->isArticleRelated() ) {			$s .= '<strong>' . $this->editThisPage() . '</strong>';			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<br />";				if($wgUser->isAllowed('delete')) { $s .= $this->deleteThisPage(); }				if($wgUser->isAllowed('protect')) { $s .= $sep . $this->protectThisPage(); }				if($wgUser->isAllowed('move')) { $s .= $sep . $this->moveThisPage(); }			}			$s .= "<br />\n" . $this->otherLanguages();		}		return $s;	}	function pageStats() {		global $wgOut, $wgLang, $wgArticle, $wgRequest, $wgUser;		global $wgDisableCounters, $wgMaxCredits, $wgShowCreditsIfMax, $wgTitle, $wgPageShowWatchingUsers;		extract( $wgRequest->getValues( 'oldid', '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 );			extract( $dbr->tableNames( '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="MediaWiki" /></a>';		return $img;	}	function lastModified() {		global $wgLang, $wgArticle, $wgLoadBalancer;		$timestamp = $wgArticle->getTimestamp();		if ( $timestamp ) {			$d = $wgLang->timeanddate( $timestamp, true );			$s = ' ' . wfMsg( 'lastmodified', $d );		} else {			$s = '';		}		if ( $wgLoadBalancer->getLaggedSlaveMode() ) {			$s .= ' <strong>' . wfMsg( 'laggedslavemode' ) . '</strong>';		}		return $s;	}	function logoText( $align = '' ) {		if ( '' != $align ) { $a = " align='{$align}'"; }		else { $a = ''; }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?