Created
July 19, 2011 22:30
-
-
Save johnlettman-old/1093902 to your computer and use it in GitHub Desktop.
Main classes file of Hybridium Engine -- contains a collection of previously created classes for easier development.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace Hybridium; | |
############### | |
## URL Class ## | |
############### | |
class URL { | |
public static function thisURL($forceSSL = false) { | |
if(!isset($_SERVER['REQUEST_URI'])) | |
$serverrequri = $_SERVER['PHP_SELF']; | |
else | |
$serverrequri = $_SERVER['REQUEST_URI']; | |
if($forceSSL) $s = 's'; | |
else $s = empty($_SERVER['HTTPS']) ? '' : ($_SERVER['HTTPS'] == 'on') ? 's' : '' | |
$protocol = String::left(strtolower($_SERVER['SERVER_PROTOCOL']), '/').$s; | |
$port = ($_SERVER['SERVER_PORT'] == '80') ? '' : (':'.$_SERVER['SERVER_PORT']); | |
return $protocol.'://'.$_SERVER['SERVER_NAME'].$port.$serverrequri; | |
} | |
} | |
################ | |
## Byte Class ## | |
################ | |
class Byte { | |
public static function Readable($val, $round = 0) { | |
$unit = array('','K','M','G','T','P','E','Z','Y'); | |
while($val >= 1000) { | |
$val /= 1024; | |
array_shift($unit); | |
} | |
return round($val, $round) . array_shift($unit) . "B"; | |
} | |
} | |
################## | |
## String Class ## | |
################## | |
class String { | |
public static function contains($str, $content, $ignorecase = true){ | |
if ($ignorecase){ | |
$str = strtolower($str); | |
$content = strtolower($content); | |
} | |
return (boolean) strpos($content, $str) ? true : false; | |
} | |
public static function endsWith($needle, $haystack){ | |
return (boolean) (substr($haystack, strlen($needle)*(-1)) == $needle); | |
} | |
public static function beginsWith($needle, $haystack) { | |
return (boolean) (substr($haystack, 0, strlen($needle))==$needle); | |
} | |
public static function toLinks($string = null) { | |
if($string == null || !preg_match('/(http|www\.|ftp\.|@)/i', $string)) { return $string; } | |
$lines = explode('\n', $string); $return = ''; | |
while (list($k,$l) = each($lines)) { | |
$l = preg_replace("/([ \t]|^)www\./i", "\\1http://www.", $l); | |
$l = preg_replace("/([ \t]|^)ftp\./i", "\\1ftp://ftp.", $l); | |
$l = preg_replace("/(http:\/\/[^ )\r\n!]+)/i", "<a href=\"\\1\">\\1</a>", $l); | |
$l = preg_replace("/(https:\/\/[^ )\r\n!]+)/i", "<a href=\"\\1\">\\1</a>", $l); | |
$l = preg_replace("/(ftp:\/\/[^ )\r\n!]+)/i", "<a href=\"\\1\">\\1</a>", $l); | |
$l = preg_replace("/([-a-z0-9_]+(\.[_a-z0-9-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)+))/i", "<a href=\"mailto:\\1\">\\1</a>", $l); | |
$return .= $l."\n"; | |
} | |
return $return; | |
} | |
public static function getBetween($start, $end, $haystack) { | |
$r = explode($start, $haystack); | |
if(isset($r[1])) { | |
$r = explode($end, $r[1]); | |
return $r[0]; | |
} | |
return ''; | |
} | |
public static function removeLinks($string) { | |
return preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string); | |
} | |
public static function left($s1, $s2) { | |
return substr($s1, 0, strpos($s1, $s2)); | |
} | |
} | |
################ | |
## Slug Class ## | |
################ | |
class Slug { | |
private static function my_str_split($string) { | |
$slen = strlen($string); | |
for($i=0; $i<$slen; $i++) $sArray[$i]=$string{$i}; | |
return $sArray; | |
} | |
private static function noDiacritics($string) { | |
$cyrylicFrom = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', | |
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', | |
'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', | |
'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё', | |
'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', | |
'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', | |
'ъ', 'ы', 'ь', 'э', 'ю', 'я'); | |
$cyrylicTo = array('A', 'B', 'W', 'G', 'D', 'Ie', 'Io', 'Z', 'Z', 'I', | |
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', | |
'U', 'F', 'Ch', 'C', 'Tch', 'Sh', 'Shtch', '', 'Y', | |
'', 'E', 'Iu', 'Ia', 'a', 'b', 'w', 'g', 'd', 'ie', | |
'io', 'z', 'z', 'i', 'j', 'k', 'l', 'm', 'n', 'o', | |
'p', 'r', 's', 't', 'u', 'f', 'ch', 'c', 'tch', 'sh', | |
'shtch', '', 'y', '', 'e', 'iu', 'ia'); | |
$from = array("Á", "À", "Â", "Ä", "Ă", "Ā", "Ã", "Å", "Ą", "Æ", "Ć", "Ċ", "Ĉ", | |
"Č", "Ç", "Ď", "Đ", "Ð", "É", "È", "Ė", "Ê", "Ë", "Ě", "Ē", "Ę", | |
"Ə", "Ġ", "Ĝ", "Ğ", "Ģ", "á", "à", "â", "ä", "ă", "ā", "ã", "å", | |
"ą", "æ", "ć", "ċ", "ĉ", "č", "ç", "ď", "đ", "ð", "é", "è", "ė", | |
"ê", "ë", "ě", "ē", "ę", "ə", "ġ", "ĝ", "ğ", "ģ", "Ĥ", "Ħ", "I", | |
"Í", "Ì", "İ", "Î", "Ï", "Ī", "Į", "IJ", "Ĵ", "Ķ", "Ļ", "Ł", "Ń", | |
"Ň", "Ñ", "Ņ", "Ó", "Ò", "Ô", "Ö", "Õ", "Ő", "Ø", "Ơ", "Œ", "ĥ", | |
"ħ", "ı", "í", "ì", "i", "î", "ï", "ī", "į", "ij", "ĵ", "ķ", "ļ", | |
"ł", "ń", "ň", "ñ", "ņ", "ó", "ò", "ô", "ö", "õ", "ő", "ø", "ơ", | |
"œ", "Ŕ", "Ř", "Ś", "Ŝ", "Š", "Ş", "Ť", "Ţ", "Þ", "Ú", "Ù", "Û", | |
"Ü", "Ŭ", "Ū", "Ů", "Ų", "Ű", "Ư", "Ŵ", "Ý", "Ŷ", "Ÿ", "Ź", "Ż", | |
"Ž", "ŕ", "ř", "ś", "ŝ", "š", "ş", "ß", "ť", "ţ", "þ", "ú", "ù", | |
"û", "ü", "ŭ", "ū", "ů", "ų", "ű", "ư", "ŵ", "ý", "ŷ", "ÿ", "ź", "ż", "ž"); | |
$to = array("A", "A", "A", "A", "A", "A", "A", "A", "A", "AE", "C", "C", "C", | |
"C", "C", "D", "D", "D", "E", "E", "E", "E", "E", "E", "E", "E", | |
"G", "G", "G", "G", "G", "a", "a", "a", "a", "a", "a", "a", "a", | |
"a", "ae", "c", "c", "c", "c", "c", "d", "d", "d", "e", "e", "e", | |
"e", "e", "e", "e", "e", "g", "g", "g", "g", "g", "H", "H", "I", | |
"I", "I", "I", "I", "I", "I", "I", "IJ", "J", "K", "L", "L", "N", | |
"N", "N", "N", "O", "O", "O", "O", "O", "O", "O", "O", "CE", "h", | |
"h", "i", "i", "i", "i", "i", "i", "i", "i", "ij", "j", "k", "l", | |
"l", "n", "n", "n", "n", "o", "o", "o", "o", "o", "o", "o", "o", | |
"o", "R", "R", "S", "S", "S", "S", "T", "T", "T", "U", "U", "U", | |
"U", "U", "U", "U", "U", "U", "U", "W", "Y", "Y", "Y", "Z", "Z", | |
"Z", "r", "r", "s", "s", "s", "s", "B", "t", "t", "b", "u", "u", | |
"u", "u", "u", "u", "u", "u", "u", "u", "w", "y", "y", "y", "z", "z", "z"); | |
$from = array_merge($from, $cyrylicFrom); | |
$to = array_merge($to, $cyrylicTo); | |
$newstring = str_replace($from, $to, $string); | |
return $newstring; | |
} | |
public static function makeSlug($string, $maxlen = 0) { | |
$newStringTab = array(); | |
$string = strtolower(self::noDiacritics($string)); | |
if(function_exists('str_split')) $stringTab=str_split($string); | |
else $stringTab = self::my_str_split($string); | |
$numbers = array("0","1","2","3","4","5","6","7","8","9","-"); | |
foreach($stringTab as $letter) { | |
if(in_array($letter, range("a", "z")) || in_array($letter, $numbers)) | |
$newStringTab[] = $letter; | |
elseif($letter == " ") | |
$newStringTab[]="-"; | |
} | |
if(count($newStringTab)) { | |
$newString = implode($newStringTab); | |
if($maxlen > 0) $newString=substr($newString, 0, $maxlen); | |
$newString = self::removeDuplicates('--', '-', $newString); | |
} | |
else $newString = ''; | |
return $newString; | |
} | |
public static function checkSlug($sSlug) { | |
if(ereg("^[a-zA-Z0-9]+[a-zA-Z0-9\_\-]*$", $sSlug)) | |
return true; | |
else return false; | |
} | |
private static function removeDuplicates($sSearch, $sReplace, $sSubject) { | |
$i = 0; | |
do { | |
$sSubject = str_replace($sSearch, $sReplace, $sSubject); | |
$pos = strpos($sSubject, $sSearch); | |
$i++; | |
if($i > 100) throw new \Exception("Loop error."); | |
} while($pos !== false); | |
return $sSubject; | |
} | |
} | |
#################################### | |
# Error Conversion and Exceptions. # | |
#################################### | |
class Error extends \Exception { | |
protected $types = array( | |
E_ERROR => 'ERROR', | |
E_WARNING => 'WARNING', | |
E_PARSE => 'PARSING ERROR', | |
E_NOTICE => 'NOTICE', | |
E_CORE_ERROR => 'CORE ERROR', | |
E_CORE_WARNING => 'CORE WARNING', | |
E_COMPILE_ERROR => 'COMPILE ERROR', | |
E_COMPILE_WARNING => 'COMPILE WARNING', | |
E_USER_ERROR => 'USER ERROR', | |
E_USER_WARNING => 'USER WARNING', | |
E_USER_NOTICE => 'USER NOTICE', | |
E_STRICT => 'STRICT NOTICE', | |
E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR'); | |
public function handle($code, $string, $file, $line, $context) { | |
$exception = new self($string, $code); | |
$exception->line = $line; | |
$exception->file = $file; | |
throw $exception; | |
} | |
public function getType() { | |
return isset($this->types[$this->getCode()]) ? $this->types[$this->getCode()] : null ; | |
} | |
} | |
# Errors. | |
error_reporting(E_ALL ^ E_NOTICE); | |
set_error_handler(array('Hybridium\Error', 'handle'), E_ALL); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment