dumphtml.inc

来自「php 开发的内容管理系统」· INC 代码 · 共 651 行 · 第 1/2 页

INC
651
字号
		# Another ugly hack		if ( !$this->setupDone ) {			$this->oldCopyrightIcon = $wgCopyrightIcon;		}		$wgCopyrightIcon = str_replace( 'src="/images',			'src="' . htmlspecialchars( $wgScriptPath ) . '/images', $this->oldCopyrightIcon );		$wgStylePath = "$wgScriptPath/skins";		$wgUploadPath = "$wgScriptPath/{$this->imageRel}";		$wgSharedUploadPath = "$wgUploadPath/shared";		$wgMaxCredits = -1;		$wgHideInterlanguageLinks = !$this->interwiki;		$wgThumbnailScriptPath = $wgSharedThumbnailScriptPath = false;		$wgEnableParserCache = false;		$wgMathPath = "$wgScriptPath/math";		if ( !empty( $wgRightsText ) ) {			$wgRightsUrl = "$wgScriptPath/COPYING.html";		}		$wgUser = new User;		$wgUser->setOption( 'skin', $this->skin );		$wgUser->setOption( 'editsection', 0 );		$this->sharedStaticPath = "$wgUploadDirectory/shared";		$this->setupDone = true;	}	/** Reads the content of a title object, executes the skin and captures the result */	function getArticleHTML( &$title ) {		global $wgOut, $wgTitle, $wgArticle, $wgUser;		$linkCache =& LinkCache::singleton();		$linkCache->clear();		$wgTitle = $title;		if ( is_null( $wgTitle ) ) {			return false;		}		$ns = $wgTitle->getNamespace();		if ( $ns == NS_SPECIAL ) {			$wgOut = new OutputPage;			$wgOut->setParserOptions( new ParserOptions );			SpecialPage::executePath( $wgTitle );		} else {			/** @todo merge with Wiki.php code */			if ( $ns == NS_IMAGE ) {				$wgArticle = new ImagePage( $wgTitle );			} elseif ( $ns == NS_CATEGORY ) {				$wgArticle = new CategoryPage( $wgTitle );			} else {				$wgArticle = new Article( $wgTitle );			}			$rt = Title::newFromRedirect( $wgArticle->fetchContent() );			if ( $rt != NULL ) {				return $this->getRedirect( $rt );			} else {				$wgOut = new OutputPage;				$wgOut->setParserOptions( new ParserOptions );				$wgArticle->view();			}		}		$sk =& $wgUser->getSkin();		ob_start();		$sk->outputPage( $wgOut );		$text = ob_get_contents();		ob_end_clean();		return $text;	}	function getRedirect( $rt ) {		$url = $rt->escapeLocalURL();		$text = $rt->getPrefixedText();		return <<<ENDTEXT<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  <meta http-equiv="Refresh" content="0;url=$url" /></head><body>  <p>Redirecting to <a href="$url">$text</a></p></body></html>ENDTEXT;	}	/** Returns image paths used in an XHTML document */	function findImages( $text ) {		global $wgOutputEncoding, $wgDumpImages;		$parser = xml_parser_create( $wgOutputEncoding );		xml_set_element_handler( $parser, 'wfDumpStartTagHandler', 'wfDumpEndTagHandler' );		$wgDumpImages = array();		xml_parse( $parser, $text );		xml_parser_free( $parser );		return $wgDumpImages;	}	/**	 * Copy images (or create symlinks) from commons to a static directory.	 * This is necessary even if you intend to distribute all of commons, because	 * the directory contents is used to work out which image description pages	 * are needed.	 *	 * Also copies math images	 *	 */	function copyImages( $images ) {		global $wgSharedUploadPath, $wgSharedUploadDirectory, $wgMathPath, $wgMathDirectory;		# Find shared uploads and copy them into the static directory		$sharedPathLength = strlen( $wgSharedUploadPath );		$mathPathLength = strlen( $wgMathPath );		foreach ( $images as $escapedImage => $dummy ) {			$image = urldecode( $escapedImage );			# Is it shared?			if ( substr( $image, 0, $sharedPathLength ) == $wgSharedUploadPath ) {				# Reconstruct full filename				$rel = substr( $image, $sharedPathLength + 1 ); // +1 for slash				$sourceLoc = "$wgSharedUploadDirectory/$rel";				$staticLoc = "{$this->sharedStaticPath}/$rel";				#print "Copying $sourceLoc to $staticLoc\n";				# Copy to static directory				if ( !file_exists( $staticLoc ) ) {					wfMkdirParents( dirname( $staticLoc ), 0755 );					if ( function_exists( 'symlink' ) && !$this->forceCopy ) {						symlink( $sourceLoc, $staticLoc );					} else {						copy( $sourceLoc, $staticLoc );					}				}				if ( substr( $rel, 0, 6 ) == 'thumb/' ) {					# That was a thumbnail					# We will also copy the real image					$parts = explode( '/', $rel );					$rel = "{$parts[1]}/{$parts[2]}/{$parts[3]}";					$sourceLoc = "$wgSharedUploadDirectory/$rel";					$staticLoc = "{$this->sharedStaticPath}/$rel";					#print "Copying $sourceLoc to $staticLoc\n";					if ( !file_exists( $staticLoc ) ) {						wfMkdirParents( dirname( $staticLoc ), 0755 );						if ( function_exists( 'symlink' ) && !$this->forceCopy ) {							symlink( $sourceLoc, $staticLoc );						} else {							copy( $sourceLoc, $staticLoc );						}					}				}			} else			# Is it math?			if ( substr( $image, 0, $mathPathLength ) == $wgMathPath ) {				$rel = substr( $image, $mathPathLength + 1 ); // +1 for slash				$source = "$wgMathDirectory/$rel";				$dest = "{$this->dest}/math/$rel";				@mkdir( "{$this->dest}/math", 0755 );				if ( !file_exists( $dest ) ) {					copy( $source, $dest );				}			}		}	}	function onGetFullURL( &$title, &$url, $query ) {		global $wgContLang, $wgArticlePath;		$iw = $title->getInterwiki();		if ( $title->isExternal() && $wgContLang->getLanguageName( $iw ) ) {			if ( $title->getDBkey() == '' ) {				$url = str_replace( '$1', "../$iw/index.html", $wgArticlePath );			} else {				$url = str_replace( '$1', "../$iw/" . wfUrlencode( $this->getHashedFilename( $title ) ),					$wgArticlePath );			}			return false;		} else {			return true;		}	}	function onGetLocalURL( &$title, &$url, $query ) {		global $wgArticlePath;		if ( $title->isExternal() ) {			# Default is fine for interwiki			return true;		}		$url = false;		if ( $query != '' ) {			parse_str( $query, $params );			if ( isset($params['action']) && $params['action'] == 'raw' ) {				if ( $params['gen'] == 'css' || $params['gen'] == 'js' ) {					$file = 'gen.' . $params['gen'];				} else {					$file = $this->getFriendlyName( $title->getPrefixedDBkey() );					// Clean up Monobook.css etc.					if ( preg_match( '/^(.*)\.(css|js)_[0-9a-f]{4}$/', $file, $matches ) ) {						$file = $matches[1] . '.' . $matches[2];					}				}				$this->rawPages[$file] = array( $file, $title, $params );				$url = str_replace( '$1', "raw/" . wfUrlencode( $file ), $wgArticlePath );			}		}		if ( $url === false ) {			$url = str_replace( '$1', wfUrlencode( $this->getHashedFilename( $title ) ), $wgArticlePath );		}		return false;	}	function getHashedFilename( &$title ) {		if ( '' != $title->mInterwiki ) {			$dbkey = $title->getDBkey();		} else {			$dbkey = $title->getPrefixedDBkey();		}		$mainPage = Title::newMainPage();		if ( $mainPage->getPrefixedDBkey() == $dbkey ) {			return 'index.html';		}		return $this->getHashedDirectory( $title ) . '/' .			$this->getFriendlyName( $dbkey ) . '.html';	}	function getFriendlyName( $name ) {		global $wgLang;		# Replace illegal characters for Windows paths with underscores		$friendlyName = strtr( $name, '/\\*?"<>|~', '_________' );		# Work out lower case form. We assume we're on a system with case-insensitive		# filenames, so unless the case is of a special form, we have to disambiguate		if ( function_exists( 'mb_strtolower' ) ) {			$lowerCase = $wgLang->ucfirst( mb_strtolower( $name ) );		} else {			$lowerCase = ucfirst( strtolower( $name ) );		}		# Make it mostly unique		if ( $lowerCase != $friendlyName  ) {			$friendlyName .= '_' . substr(md5( $name ), 0, 4);		}		# Handle colon specially by replacing it with tilde		# Thus we reduce the number of paths with hashes appended		$friendlyName = str_replace( ':', '~', $friendlyName );		return $friendlyName;	}	/**	 * Get a relative directory for putting a title into	 */	function getHashedDirectory( &$title ) {		if ( '' != $title->getInterwiki() ) {			$pdbk = $title->getDBkey();		} else {			$pdbk = $title->getPrefixedDBkey();		}		# Find the first colon if there is one, use characters after it		$p = strpos( $pdbk, ':' );		if ( $p !== false ) {			$dbk = substr( $pdbk, $p + 1 );			$dbk = substr( $dbk, strspn( $dbk, '_' ) );		} else {			$dbk = $pdbk;		}		# Split into characters		preg_match_all( '/./us', $dbk, $m );		$chars = $m[0];		$length = count( $chars );		$dir = '';		for ( $i = 0; $i < $this->depth; $i++ ) {			if ( $i ) {				$dir .= '/';			}			if ( $i >= $length ) {				$dir .= '_';			} else {				$c = $chars[$i];				if ( ord( $c ) >= 128 || preg_match( '/[a-zA-Z0-9!#$%&()+,[\]^_`{}-]/', $c ) ) {					if ( function_exists( 'mb_strtolower' ) ) {						$dir .= mb_strtolower( $c );					} else {						$dir .= strtolower( $c );					}				} else {					$dir .= sprintf( "%02X", ord( $c ) );				}			}		}		return $dir;	}}/** XML parser callback */function wfDumpStartTagHandler( $parser, $name, $attribs ) {	global $wgDumpImages;	if ( $name == 'IMG' && isset( $attribs['SRC'] ) ) {		$wgDumpImages[$attribs['SRC']] = true;	}}/** XML parser callback */function wfDumpEndTagHandler( $parser, $name ) {}# vim: syn=php?>

⌨️ 快捷键说明

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