Wikia code/includes/specials/SpecialVersion.php

From mediawiki.org
--- D:\Programming\SVN\mediawiki\branches\REL1_16\phase3\includes\specials\SpecialVersion.php	2011-07-18 22:31:17.758789100 +0100
+++ D:\Programming\SVN\wikia\trunk\includes\specials\SpecialVersion.php	2011-08-17 15:28:16.407226600 +0100
@@ -112,6 +112,10 @@
 				"<tr>
 					<th>" . wfMsg( 'version-software-product' ) . "</th>
 					<th>" . wfMsg( 'version-software-version' ) . "</th>
+				</tr>\n
+				<tr>
+					<td>Wikia</td>
+					<td>" . self::getWikiaVersion() . "</td>
 				</tr>\n";
 		foreach( $software as $name => $version ) {
 			$out .= "<tr>
@@ -149,6 +153,24 @@
 		return $version;
 	}
 	
+	/** Return a string of the Wikia version with SVN revision */
+	public static function getWikiaVersion() {
+		global $wgWikiaConfRevision;
+		if (preg_match('/\/wikia\/(tags\/)?([^\/]+)/', '$HeadURL: https://svn.wikia-code.com/wikia/trunk/includes/specials/SpecialVersion.php $', $matches)) {
+			$wikia_release = $matches[2];
+		} else {
+			$wikia_release = '';
+		}
+		
+		if (preg_match('/\/(svn\/)?tags\/wikia-conf\/([^\/]+)/', $wgWikiaConfRevision, $matches)) {
+			$conf_release = $matches[2];
+		} else {
+			$conf_release = 'trunk';
+		}
+
+		return "Code: $wikia_release, Config: $conf_release";
+	}
+	
 	/**
 	 * Return a wikitext-formatted string of the MediaWiki version with a link to
 	 * the SVN revision if available
@@ -179,7 +201,7 @@
 
 	/** Generate wikitext showing extensions name, URL, author and description */
 	function extensionCredits() {
-		global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgSkinExtensionFunctions;
+		global $wgExtensionCredits, $wgExtensionFunctions, $wgParser, $wgFileExtensions, $wgSkinExtensionFunctions;
 
 		if ( ! count( $wgExtensionCredits ) && ! count( $wgExtensionFunctions ) && ! count( $wgSkinExtensionFunctions ) )
 			return '';
@@ -188,6 +210,7 @@
 			'specialpage' => wfMsg( 'version-specialpages' ),
 			'parserhook' => wfMsg( 'version-parserhooks' ),
 			'variable' => wfMsg( 'version-variables' ),
+			'widget' => 'Widgets',
 			'media' => wfMsg( 'version-mediahandlers' ),
 			'other' => wfMsg( 'version-other' ),
 		);
@@ -225,6 +248,11 @@
 			$out .= '<tr><td colspan="4">' . $this->listToText( $fhooks ) . "</td></tr>\n";
 		}
 
+		if ( count( $wgFileExtensions ) ) {
+			$out .= $this->openExtType('File extensions allowed for upload');
+			$out .= '<tr><td colspan="3">' . $this->listToText( $wgFileExtensions ) . "</td></tr>\n";
+		}
+
 		if ( count( $wgSkinExtensionFunctions ) ) {
 			$out .= $this->openExtType( wfMsg( 'version-skin-extension-functions' ), 'skin-extension-functions' );
 			$out .= '<tr><td colspan="4">' . $this->listToText( $wgSkinExtensionFunctions ) . "</td></tr>\n";
@@ -506,5 +534,44 @@
 		}
 	}
 
+	public static function getSvnURL( $dir ) {
+		// http://svnbook.red-bean.com/nightly/en/svn.developer.insidewc.html
+		$entries = $dir . '/.svn/entries';
+
+		if( !file_exists( $entries ) ) {
+			return false;
+		}
+
+		$content = file( $entries );
+
+		// check if file is xml (subversion release <= 1.3) or not (subversion release = 1.4)
+		if( preg_match( '/^<\?xml/', $content[0] ) ) {
+			// subversion is release <= 1.3
+			if( !function_exists( 'simplexml_load_file' ) ) {
+				// We could fall back to expat... YUCK
+				return false;
+			}
+
+			// SimpleXml whines about the xmlns...
+			wfSuppressWarnings();
+			$xml = simplexml_load_file( $entries );
+			wfRestoreWarnings();
+
+			if( $xml ) {
+				foreach( $xml->entry as $entry ) {
+					if( $xml->entry[0]['name'] == '' ) {
+						// The directory entry should always have a revision marker.
+						if( $entry['url'] ) {
+							return str_replace( 'https://svn.wikia-code.com', '', $entry['url'] );
+						}
+					}
+				}
+			}
+			return false;
+		} else {
+			// subversion is release 1.4
+			return str_replace( rtrim($content[5]), '', rtrim($content[4]) );
+		}
+	}
 	/**#@-*/
 }