Syntax highlight Makefiles
[gitphp.git] / include / Util.class.php
blob:a/include/Util.class.php -> blob:b/include/Util.class.php
--- a/include/Util.class.php
+++ b/include/Util.class.php
@@ -1,32 +1,20 @@
 <?php
 /**
- * GitPHP Util
- *
- * Utility functions
+ * Utility function class
  *
  * @author Christopher Han <xiphux@gmail.com>
  * @copyright Copyright (c) 2010 Christopher Han
- * @package GitPHP
- */
-
-/**
- * Util class
- *
  * @package GitPHP
  */
 class GitPHP_Util
 {
 
 	/**
-	 * AddSlash
-	 *
 	 * Adds a trailing slash to a directory path if necessary
 	 *
-	 * @access public
-	 * @static
 	 * @param string $path path to add slash to
-	 * @param $filesystem true if this is a filesystem path (to also check for backslash for windows paths)
-	 * @return string $path with a trailing slash
+	 * @param boolean $filesystem true if this is a filesystem path (to also check for backslash for windows paths)
+	 * @return string path with a trailing slash
 	 */
 	public static function AddSlash($path, $filesystem = true)
 	{
@@ -47,12 +35,8 @@
 	}
 
 	/**
-	 * IsWindows
-	 *
 	 * Tests if this is running on windows
 	 *
-	 * @access public
-	 * @static
 	 * @return bool true if on windows
 	 */
 	public static function IsWindows()
@@ -60,13 +44,14 @@
 		return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
 	}
 
+	public static function NullFile()
+	{
+		return self::IsWindows() ? 'NUL' : '/dev/null';
+	}
+
 	/**
-	 * Is64Bit
-	 *
 	 * Tests if this is a 64 bit machine
 	 *
-	 * @access public
-	 * @static
 	 * @return bool true if on 64 bit
 	 */
 	public static function Is64Bit()
@@ -75,37 +60,29 @@
 	}
 
 	/**
-	 * MakeSlug
-	 *
 	 * Turn a string into a filename-friendly slug
 	 *
-	 * @access public
 	 * @param string $str string to slugify
-	 * @static
 	 * @return string slug
 	 */
 	public static function MakeSlug($str)
 	{
 		$from = array(
-			'/'
+			'/&'
 		);
 		$to = array(
-			'-'
+			'--'
 		);
 		return str_replace($from, $to, $str);
 	}
 
 	/**
-	 * BaseName
-	 *
 	 * Get the filename of a given path
 	 *
-	 * based on Drupal's basename
+	 * Based on Drupal's basename
 	 *
-	 * @access public
 	 * @param string $path path
 	 * @param string $suffix optionally trim this suffix
-	 * @static
 	 * @return string filename
 	 */
 	public static function BaseName($path, $suffix = null)
@@ -130,14 +107,10 @@
 	}
 
 	/**
-	 * GeshiFilenameToLanguage
-	 *
 	 * Provides a geshi language for a given filename
 	 *
-	 * @access public
 	 * @param string $filename file name
 	 * @return string language
-	 * @static
 	 */
 	public static function GeshiFilenameToLanguage($filename)
 	{
@@ -148,5 +121,78 @@
 		return null;
 	}
 
+	/**
+	 * Recurses into a directory and lists files inside
+	 *
+	 * @param string $dir directory
+	 * @return string[] array of filenames
+	 */
+	public static function ListDir($dir)
+	{
+		$files = array();
+		if ($dh = opendir($dir)) {
+			while (($file = readdir($dh)) !== false) {
+				if (($file == '.') || ($file == '..')) {
+					continue;
+				}
+				$fullFile = $dir . '/' . $file;
+				if (is_dir($fullFile)) {
+					$subFiles = GitPHP_Util::ListDir($fullFile);
+					if (count($subFiles) > 0) {
+						$files = array_merge($files, $subFiles);
+					}
+				} else {
+					$files[] = $fullFile;
+				}
+			}
+		}
+		return $files;
+	}
+
+	/**
+	 * Get the base install url (without index)
+	 *
+	 * @param boolean $full true to return full url (include protocol and hostname)
+	 * @return string base url
+	 */
+	public static function BaseUrl($full = false)
+	{
+		$baseurl = $_SERVER['SCRIPT_NAME'];
+		if (substr_compare($baseurl, 'index.php', -9) === 0)
+			$baseurl = dirname($baseurl);
+		if ($full) {
+			$baseurl = $_SERVER['HTTP_HOST'] . $baseurl;
+			if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'))
+				$baseurl = 'https://' . $baseurl;
+			else
+				$baseurl = 'http://' . $baseurl;
+		}
+		if (GitPHP_Util::IsWindows())
+			$baseurl = rtrim($baseurl, "\\");
+		return rtrim($baseurl, "/");
+	}
+
+	/**
+	 * Tests whether a function is allowed to be called
+	 *
+	 * @param string $function functio name
+	 * @return true if allowed
+	 */
+	public static function FunctionAllowed($function)
+	{
+		if (empty($function))
+			return false;
+
+		$disabled = @ini_get('disable_functions');
+		if (!$disabled) {
+			// no disabled functions
+			// or ini_get is disabled so we can't reliably figure this out
+			return true;
+		}
+
+		$disabledlist = explode(', ', $disabled);
+		return !in_array($function, $disabledlist);
+	}
+
 }
 

comments