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