mirror of
https://github.com/danpros/htmly.git
synced 2026-04-19 03:56:21 +05:30
[TASK] PSR-2
This commit is contained in:
parent
5483453e75
commit
5f6bf63760
2 changed files with 327 additions and 327 deletions
|
|
@ -1,531 +1,531 @@
|
||||||
<?php
|
<?php
|
||||||
if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300) {
|
if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50300) {
|
||||||
error(500, 'dispatch requires at least PHP 5.3 to run.');
|
error(500, 'dispatch requires at least PHP 5.3 to run.');
|
||||||
}
|
}
|
||||||
|
|
||||||
function _log($message)
|
function _log($message)
|
||||||
{
|
{
|
||||||
if (config('debug.enable') == true && php_sapi_name() !== 'cli') {
|
if (config('debug.enable') == true && php_sapi_name() !== 'cli') {
|
||||||
$file = config('debug.log');
|
$file = config('debug.log');
|
||||||
$type = $file ? 3 : 0;
|
$type = $file ? 3 : 0;
|
||||||
error_log("{$message}\n", $type, $file);
|
error_log("{$message}\n", $type, $file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function site_url()
|
function site_url()
|
||||||
{
|
{
|
||||||
if (config('site.url') == null)
|
if (config('site.url') == null)
|
||||||
error(500, '[site.url] is not set');
|
error(500, '[site.url] is not set');
|
||||||
|
|
||||||
// Forcing the forward slash
|
// Forcing the forward slash
|
||||||
return rtrim(config('site.url'),'/').'/';
|
return rtrim(config('site.url'), '/') . '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
function site_path()
|
function site_path()
|
||||||
{
|
{
|
||||||
static $_path;
|
static $_path;
|
||||||
|
|
||||||
if (config('site.url') == null)
|
if (config('site.url') == null)
|
||||||
error(500, '[site.url] is not set');
|
error(500, '[site.url] is not set');
|
||||||
|
|
||||||
if (!$_path)
|
if (!$_path)
|
||||||
$_path = rtrim(parse_url(config('site.url'), PHP_URL_PATH),'/');
|
$_path = rtrim(parse_url(config('site.url'), PHP_URL_PATH), '/');
|
||||||
|
|
||||||
return $_path;
|
return $_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
function error($code, $message)
|
function error($code, $message)
|
||||||
{
|
{
|
||||||
@header("HTTP/1.0 {$code} {$message}", true, $code);
|
@header("HTTP/1.0 {$code} {$message}", true, $code);
|
||||||
die($message);
|
die($message);
|
||||||
}
|
}
|
||||||
|
|
||||||
function config($key, $value = null)
|
function config($key, $value = null)
|
||||||
{
|
{
|
||||||
static $_config = array();
|
static $_config = array();
|
||||||
|
|
||||||
if ($key === 'source' && file_exists($value))
|
if ($key === 'source' && file_exists($value))
|
||||||
$_config = parse_ini_file($value, true);
|
$_config = parse_ini_file($value, true);
|
||||||
elseif ($value == null)
|
elseif ($value == null)
|
||||||
return (isset($_config[$key]) ? $_config[$key] : null);
|
return (isset($_config[$key]) ? $_config[$key] : null);
|
||||||
else
|
else
|
||||||
$_config[$key] = $value;
|
$_config[$key] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function to_b64($str)
|
function to_b64($str)
|
||||||
{
|
{
|
||||||
$str = base64_encode($str);
|
$str = base64_encode($str);
|
||||||
$str = preg_replace('/\//', '_', $str);
|
$str = preg_replace('/\//', '_', $str);
|
||||||
$str = preg_replace('/\+/', '.', $str);
|
$str = preg_replace('/\+/', '.', $str);
|
||||||
$str = preg_replace('/\=/', '-', $str);
|
$str = preg_replace('/\=/', '-', $str);
|
||||||
return trim($str, '-');
|
return trim($str, '-');
|
||||||
}
|
}
|
||||||
|
|
||||||
function from_b64($str)
|
function from_b64($str)
|
||||||
{
|
{
|
||||||
$str = preg_replace('/\_/', '/', $str);
|
$str = preg_replace('/\_/', '/', $str);
|
||||||
$str = preg_replace('/\./', '+', $str);
|
$str = preg_replace('/\./', '+', $str);
|
||||||
$str = preg_replace('/\-/', '=', $str);
|
$str = preg_replace('/\-/', '=', $str);
|
||||||
$str = base64_decode($str);
|
$str = base64_decode($str);
|
||||||
return $str;
|
return $str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extension_loaded('mcrypt')) {
|
if (extension_loaded('mcrypt')) {
|
||||||
|
|
||||||
function encrypt($decoded, $algo = MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_CBC)
|
function encrypt($decoded, $algo = MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_CBC)
|
||||||
{
|
{
|
||||||
if (($secret = config('cookies.secret')) == null)
|
if (($secret = config('cookies.secret')) == null)
|
||||||
error(500, '[cookies.secret] is not set');
|
error(500, '[cookies.secret] is not set');
|
||||||
|
|
||||||
$secret = mb_substr($secret, 0, mcrypt_get_key_size($algo, $mode));
|
$secret = mb_substr($secret, 0, mcrypt_get_key_size($algo, $mode));
|
||||||
$iv_size = mcrypt_get_iv_size($algo, $mode);
|
$iv_size = mcrypt_get_iv_size($algo, $mode);
|
||||||
$iv_code = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
|
$iv_code = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
|
||||||
$encrypted = to_b64(mcrypt_encrypt($algo, $secret, $decoded, $mode, $iv_code));
|
$encrypted = to_b64(mcrypt_encrypt($algo, $secret, $decoded, $mode, $iv_code));
|
||||||
|
|
||||||
return sprintf('%s|%s', $encrypted, to_b64($iv_code));
|
return sprintf('%s|%s', $encrypted, to_b64($iv_code));
|
||||||
}
|
}
|
||||||
|
|
||||||
function decrypt($encoded, $algo = MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_CBC)
|
function decrypt($encoded, $algo = MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_CBC)
|
||||||
{
|
{
|
||||||
if (($secret = config('cookies.secret')) == null)
|
if (($secret = config('cookies.secret')) == null)
|
||||||
error(500, '[cookies.secret] is not set');
|
error(500, '[cookies.secret] is not set');
|
||||||
|
|
||||||
$secret = mb_substr($secret, 0, mcrypt_get_key_size($algo, $mode));
|
$secret = mb_substr($secret, 0, mcrypt_get_key_size($algo, $mode));
|
||||||
list($enc_str, $iv_code) = explode('|', $encoded);
|
list($enc_str, $iv_code) = explode('|', $encoded);
|
||||||
$enc_str = from_b64($enc_str);
|
$enc_str = from_b64($enc_str);
|
||||||
$iv_code = from_b64($iv_code);
|
$iv_code = from_b64($iv_code);
|
||||||
$enc_str = mcrypt_decrypt($algo, $secret, $enc_str, $mode, $iv_code);
|
$enc_str = mcrypt_decrypt($algo, $secret, $enc_str, $mode, $iv_code);
|
||||||
|
|
||||||
return rtrim($enc_str, "\0");
|
return rtrim($enc_str, "\0");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function set_cookie($name, $value, $expire = 31536000, $path = '/')
|
function set_cookie($name, $value, $expire = 31536000, $path = '/')
|
||||||
{
|
{
|
||||||
$value = (function_exists('encrypt') ? encrypt($value) : $value);
|
$value = (function_exists('encrypt') ? encrypt($value) : $value);
|
||||||
setcookie($name, $value, time() + $expire, $path);
|
setcookie($name, $value, time() + $expire, $path);
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_cookie($name)
|
function get_cookie($name)
|
||||||
{
|
{
|
||||||
$value = from($_COOKIE, $name);
|
$value = from($_COOKIE, $name);
|
||||||
|
|
||||||
if ($value)
|
if ($value)
|
||||||
$value = (function_exists('decrypt') ? decrypt($value) : $value);
|
$value = (function_exists('decrypt') ? decrypt($value) : $value);
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function delete_cookie()
|
function delete_cookie()
|
||||||
{
|
{
|
||||||
$cookies = func_get_args();
|
$cookies = func_get_args();
|
||||||
foreach ($cookies as $ck)
|
foreach ($cookies as $ck)
|
||||||
setcookie($ck, '', -10, '/');
|
setcookie($ck, '', -10, '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we have APC loaded, enable cache functions
|
// if we have APC loaded, enable cache functions
|
||||||
if (extension_loaded('apc')) {
|
if (extension_loaded('apc')) {
|
||||||
|
|
||||||
function cache($key, $func, $ttl = 0)
|
function cache($key, $func, $ttl = 0)
|
||||||
{
|
{
|
||||||
if (($data = apc_fetch($key)) === false) {
|
if (($data = apc_fetch($key)) === false) {
|
||||||
$data = call_user_func($func);
|
$data = call_user_func($func);
|
||||||
if ($data !== null) {
|
if ($data !== null) {
|
||||||
apc_store($key, $data, $ttl);
|
apc_store($key, $data, $ttl);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
}
|
}
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
function cache_invalidate()
|
function cache_invalidate()
|
||||||
{
|
{
|
||||||
foreach (func_get_args() as $key) {
|
foreach (func_get_args() as $key) {
|
||||||
apc_delete($key);
|
apc_delete($key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function warn($name = null, $message = null)
|
function warn($name = null, $message = null)
|
||||||
{
|
{
|
||||||
static $warnings = array();
|
static $warnings = array();
|
||||||
|
|
||||||
if ($name == '*')
|
if ($name == '*')
|
||||||
return $warnings;
|
return $warnings;
|
||||||
|
|
||||||
if (!$name)
|
if (!$name)
|
||||||
return count(array_keys($warnings));
|
return count(array_keys($warnings));
|
||||||
|
|
||||||
if (!$message)
|
if (!$message)
|
||||||
return isset($warnings[$name]) ? $warnings[$name] : null ;
|
return isset($warnings[$name]) ? $warnings[$name] : null;
|
||||||
|
|
||||||
$warnings[$name] = $message;
|
$warnings[$name] = $message;
|
||||||
}
|
}
|
||||||
|
|
||||||
function _u($str)
|
function _u($str)
|
||||||
{
|
{
|
||||||
return urlencode($str);
|
return urlencode($str);
|
||||||
}
|
}
|
||||||
|
|
||||||
function _h($str, $enc = 'UTF-8', $flags = ENT_QUOTES)
|
function _h($str, $enc = 'UTF-8', $flags = ENT_QUOTES)
|
||||||
{
|
{
|
||||||
return htmlentities($str, $flags, $enc);
|
return htmlentities($str, $flags, $enc);
|
||||||
}
|
}
|
||||||
|
|
||||||
function from($source, $name)
|
function from($source, $name)
|
||||||
{
|
{
|
||||||
if (is_array($name)) {
|
if (is_array($name)) {
|
||||||
$data = array();
|
$data = array();
|
||||||
foreach ($name as $k)
|
foreach ($name as $k)
|
||||||
$data[$k] = isset($source[$k]) ? $source[$k] : null ;
|
$data[$k] = isset($source[$k]) ? $source[$k] : null;
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
return isset($source[$name]) ? $source[$name] : null ;
|
return isset($source[$name]) ? $source[$name] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function stash($name, $value = null)
|
function stash($name, $value = null)
|
||||||
{
|
{
|
||||||
static $_stash = array();
|
static $_stash = array();
|
||||||
|
|
||||||
if ($value === null)
|
if ($value === null)
|
||||||
return isset($_stash[$name]) ? $_stash[$name] : null;
|
return isset($_stash[$name]) ? $_stash[$name] : null;
|
||||||
|
|
||||||
$_stash[$name] = $value;
|
$_stash[$name] = $value;
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
function method($verb = null)
|
function method($verb = null)
|
||||||
{
|
{
|
||||||
if ($verb == null || (strtoupper($verb) == strtoupper($_SERVER['REQUEST_METHOD'])))
|
if ($verb == null || (strtoupper($verb) == strtoupper($_SERVER['REQUEST_METHOD'])))
|
||||||
return strtoupper($_SERVER['REQUEST_METHOD']);
|
return strtoupper($_SERVER['REQUEST_METHOD']);
|
||||||
|
|
||||||
error(400, 'bad request');
|
error(400, 'bad request');
|
||||||
}
|
}
|
||||||
|
|
||||||
function client_ip()
|
function client_ip()
|
||||||
{
|
{
|
||||||
if (isset($_SERVER['HTTP_CLIENT_IP']))
|
if (isset($_SERVER['HTTP_CLIENT_IP']))
|
||||||
return $_SERVER['HTTP_CLIENT_IP'];
|
return $_SERVER['HTTP_CLIENT_IP'];
|
||||||
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
|
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
|
||||||
return $_SERVER['HTTP_X_FORWARDED_FOR'];
|
return $_SERVER['HTTP_X_FORWARDED_FOR'];
|
||||||
|
|
||||||
return $_SERVER['REMOTE_ADDR'];
|
return $_SERVER['REMOTE_ADDR'];
|
||||||
}
|
}
|
||||||
|
|
||||||
function redirect(/* $code_or_path, $path_or_cond, $cond */)
|
function redirect(/* $code_or_path, $path_or_cond, $cond */)
|
||||||
{
|
{
|
||||||
$argv = func_get_args();
|
$argv = func_get_args();
|
||||||
$argc = count($argv);
|
$argc = count($argv);
|
||||||
|
|
||||||
$path = null;
|
$path = null;
|
||||||
$code = 302;
|
$code = 302;
|
||||||
$cond = true;
|
$cond = true;
|
||||||
|
|
||||||
switch ($argc) {
|
switch ($argc) {
|
||||||
case 3:
|
case 3:
|
||||||
list($code, $path, $cond) = $argv;
|
list($code, $path, $cond) = $argv;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (is_string($argv[0]) ? $argv[0] : $argv[1]) {
|
if (is_string($argv[0]) ? $argv[0] : $argv[1]) {
|
||||||
$code = 302;
|
$code = 302;
|
||||||
$path = $argv[0];
|
$path = $argv[0];
|
||||||
$cond = $argv[1];
|
$cond = $argv[1];
|
||||||
} else {
|
} else {
|
||||||
$code = $argv[0];
|
$code = $argv[0];
|
||||||
$path = $argv[1];
|
$path = $argv[1];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (!is_string($argv[0]))
|
if (!is_string($argv[0]))
|
||||||
error(500, 'bad call to redirect()');
|
error(500, 'bad call to redirect()');
|
||||||
$path = $argv[0];
|
$path = $argv[0];
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error(500, 'bad call to redirect()');
|
error(500, 'bad call to redirect()');
|
||||||
}
|
}
|
||||||
|
|
||||||
$cond = (is_callable($cond) ? !!call_user_func($cond) : !!$cond);
|
$cond = (is_callable($cond) ? !!call_user_func($cond) : !!$cond);
|
||||||
|
|
||||||
if (!$cond)
|
if (!$cond)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
header('Location: '.$path, true, $code);
|
header('Location: ' . $path, true, $code);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
function partial($view, $locals = null)
|
function partial($view, $locals = null)
|
||||||
{
|
{
|
||||||
if (is_array($locals) && count($locals)) {
|
if (is_array($locals) && count($locals)) {
|
||||||
extract($locals, EXTR_SKIP);
|
extract($locals, EXTR_SKIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($view_root = config('views.root')) == null)
|
if (($view_root = config('views.root')) == null)
|
||||||
error(500, "[views.root] is not set");
|
error(500, "[views.root] is not set");
|
||||||
|
|
||||||
$path = basename($view);
|
$path = basename($view);
|
||||||
$view = preg_replace('/'.$path.'$/', "_{$path}", $view);
|
$view = preg_replace('/' . $path . '$/', "_{$path}", $view);
|
||||||
$view = "{$view_root}/{$view}.html.php";
|
$view = "{$view_root}/{$view}.html.php";
|
||||||
|
|
||||||
if (file_exists($view)) {
|
if (file_exists($view)) {
|
||||||
ob_start();
|
ob_start();
|
||||||
require $view;
|
require $view;
|
||||||
return ob_get_clean();
|
return ob_get_clean();
|
||||||
} else {
|
} else {
|
||||||
error(500, "partial [{$view}] not found");
|
error(500, "partial [{$view}] not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function content($value = null)
|
function content($value = null)
|
||||||
{
|
{
|
||||||
return stash('$content$', $value);
|
return stash('$content$', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function render($view, $locals = null, $layout = null)
|
function render($view, $locals = null, $layout = null)
|
||||||
{
|
{
|
||||||
$login = login();
|
$login = login();
|
||||||
if(!$login) {
|
if (!$login) {
|
||||||
$c = str_replace('/', '#', str_replace('?', '~', $_SERVER['REQUEST_URI']));
|
$c = str_replace('/', '#', str_replace('?', '~', $_SERVER['REQUEST_URI']));
|
||||||
$dir = 'cache/page';
|
$dir = 'cache/page';
|
||||||
$cachefile = $dir. '/' . $c . '.cache';
|
$cachefile = $dir . '/' . $c . '.cache';
|
||||||
if(is_dir($dir) === false) {
|
if (is_dir($dir) === false) {
|
||||||
mkdir($dir, 0777, true);
|
mkdir($dir, 0777, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_array($locals) && count($locals)) {
|
if (is_array($locals) && count($locals)) {
|
||||||
extract($locals, EXTR_SKIP);
|
extract($locals, EXTR_SKIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($view_root = config('views.root')) == null)
|
if (($view_root = config('views.root')) == null)
|
||||||
error(500, "[views.root] is not set");
|
error(500, "[views.root] is not set");
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
include "{$view_root}/{$view}.html.php";
|
include "{$view_root}/{$view}.html.php";
|
||||||
content(trim(ob_get_clean()));
|
content(trim(ob_get_clean()));
|
||||||
|
|
||||||
if ($layout !== false) {
|
if ($layout !== false) {
|
||||||
|
|
||||||
if ($layout == null) {
|
if ($layout == null) {
|
||||||
$layout = config('views.layout');
|
$layout = config('views.layout');
|
||||||
$layout = ($layout == null) ? 'layout' : $layout;
|
$layout = ($layout == null) ? 'layout' : $layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
$layout = "{$view_root}/{$layout}.html.php";
|
$layout = "{$view_root}/{$layout}.html.php";
|
||||||
|
|
||||||
header('Content-type: text/html; charset=utf-8');
|
header('Content-type: text/html; charset=utf-8');
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
require $layout;
|
require $layout;
|
||||||
|
|
||||||
if(!$login) {
|
if (!$login) {
|
||||||
if (!file_exists($cachefile)) {
|
if (!file_exists($cachefile)) {
|
||||||
file_put_contents($cachefile, ob_get_contents());
|
file_put_contents($cachefile, ob_get_contents());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
echo trim(ob_get_clean());
|
echo trim(ob_get_clean());
|
||||||
} else {
|
} else {
|
||||||
echo content();
|
echo content();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function json($obj, $code = 200)
|
function json($obj, $code = 200)
|
||||||
{
|
{
|
||||||
header('Content-type: application/json', true, $code);
|
header('Content-type: application/json', true, $code);
|
||||||
echo json_encode($obj);
|
echo json_encode($obj);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
function condition()
|
function condition()
|
||||||
{
|
{
|
||||||
static $cb_map = array();
|
static $cb_map = array();
|
||||||
|
|
||||||
$argv = func_get_args();
|
$argv = func_get_args();
|
||||||
$argc = count($argv);
|
$argc = count($argv);
|
||||||
|
|
||||||
if (!$argc)
|
if (!$argc)
|
||||||
error(500, 'bad call to condition()');
|
error(500, 'bad call to condition()');
|
||||||
|
|
||||||
$name = array_shift($argv);
|
$name = array_shift($argv);
|
||||||
$argc = $argc - 1;
|
$argc = $argc - 1;
|
||||||
|
|
||||||
if (!$argc && is_callable($cb_map[$name]))
|
if (!$argc && is_callable($cb_map[$name]))
|
||||||
return call_user_func($cb_map[$name]);
|
return call_user_func($cb_map[$name]);
|
||||||
|
|
||||||
if (is_callable($argv[0]))
|
if (is_callable($argv[0]))
|
||||||
return ($cb_map[$name] = $argv[0]);
|
return ($cb_map[$name] = $argv[0]);
|
||||||
|
|
||||||
if (is_callable($cb_map[$name]))
|
if (is_callable($cb_map[$name]))
|
||||||
return call_user_func_array($cb_map[$name], $argv);
|
return call_user_func_array($cb_map[$name], $argv);
|
||||||
|
|
||||||
error(500, 'condition ['.$name.'] is undefined');
|
error(500, 'condition [' . $name . '] is undefined');
|
||||||
}
|
}
|
||||||
|
|
||||||
function middleware($cb_or_path = null)
|
function middleware($cb_or_path = null)
|
||||||
{
|
{
|
||||||
static $cb_map = array();
|
static $cb_map = array();
|
||||||
|
|
||||||
if ($cb_or_path == null || is_string($cb_or_path)) {
|
if ($cb_or_path == null || is_string($cb_or_path)) {
|
||||||
foreach ($cb_map as $cb) {
|
foreach ($cb_map as $cb) {
|
||||||
call_user_func($cb, $cb_or_path);
|
call_user_func($cb, $cb_or_path);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
array_push($cb_map, $cb_or_path);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
array_push($cb_map, $cb_or_path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function filter($sym, $cb_or_val = null)
|
function filter($sym, $cb_or_val = null)
|
||||||
{
|
{
|
||||||
static $cb_map = array();
|
static $cb_map = array();
|
||||||
|
|
||||||
if (is_callable($cb_or_val)) {
|
if (is_callable($cb_or_val)) {
|
||||||
$cb_map[$sym] = $cb_or_val;
|
$cb_map[$sym] = $cb_or_val;
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (is_array($sym) && count($sym) > 0) {
|
|
||||||
foreach ($sym as $s) {
|
|
||||||
$s = substr($s, 1);
|
|
||||||
if (isset($cb_map[$s]) && isset($cb_or_val[$s]))
|
|
||||||
call_user_func($cb_map[$s], $cb_or_val[$s]);
|
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
error(500, 'bad call to filter()');
|
if (is_array($sym) && count($sym) > 0) {
|
||||||
|
foreach ($sym as $s) {
|
||||||
|
$s = substr($s, 1);
|
||||||
|
if (isset($cb_map[$s]) && isset($cb_or_val[$s]))
|
||||||
|
call_user_func($cb_map[$s], $cb_or_val[$s]);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error(500, 'bad call to filter()');
|
||||||
}
|
}
|
||||||
|
|
||||||
function route_to_regex($route)
|
function route_to_regex($route)
|
||||||
{
|
{
|
||||||
$route = preg_replace_callback('@:[\w]+@i', function ($matches) {
|
$route = preg_replace_callback('@:[\w]+@i', function ($matches) {
|
||||||
$token = str_replace(':', '', $matches[0]);
|
$token = str_replace(':', '', $matches[0]);
|
||||||
return '(?P<'.$token.'>[a-z0-9_\0-\.]+)';
|
return '(?P<' . $token . '>[a-z0-9_\0-\.]+)';
|
||||||
}, $route);
|
}, $route);
|
||||||
return '@^'.rtrim($route, '/').'$@i';
|
return '@^' . rtrim($route, '/') . '$@i';
|
||||||
}
|
}
|
||||||
|
|
||||||
function route($method, $pattern, $callback = null)
|
function route($method, $pattern, $callback = null)
|
||||||
{
|
{
|
||||||
// callback map by request type
|
// callback map by request type
|
||||||
static $route_map = array(
|
static $route_map = array(
|
||||||
'GET' => array(),
|
'GET' => array(),
|
||||||
'POST' => array()
|
'POST' => array()
|
||||||
);
|
|
||||||
|
|
||||||
$method = strtoupper($method);
|
|
||||||
|
|
||||||
if (!in_array($method, array('GET', 'POST')))
|
|
||||||
error(500, 'Only GET and POST are supported');
|
|
||||||
|
|
||||||
// a callback was passed, so we create a route defiition
|
|
||||||
if ($callback !== null) {
|
|
||||||
|
|
||||||
// create a route entry for this pattern
|
|
||||||
$route_map[$method][$pattern] = array(
|
|
||||||
'xp' => route_to_regex($pattern),
|
|
||||||
'cb' => $callback
|
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
$method = strtoupper($method);
|
||||||
|
|
||||||
|
if (!in_array($method, array('GET', 'POST')))
|
||||||
|
error(500, 'Only GET and POST are supported');
|
||||||
|
|
||||||
|
// a callback was passed, so we create a route defiition
|
||||||
|
if ($callback !== null) {
|
||||||
|
|
||||||
|
// create a route entry for this pattern
|
||||||
|
$route_map[$method][$pattern] = array(
|
||||||
|
'xp' => route_to_regex($pattern),
|
||||||
|
'cb' => $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
// callback is null, so this is a route invokation. look up the callback.
|
// callback is null, so this is a route invokation. look up the callback.
|
||||||
foreach ($route_map[$method] as $pat => $obj) {
|
foreach ($route_map[$method] as $pat => $obj) {
|
||||||
|
|
||||||
// if the requested uri ($pat) has a matching route, let's invoke the cb
|
// if the requested uri ($pat) has a matching route, let's invoke the cb
|
||||||
if (!preg_match($obj['xp'], $pattern, $vals))
|
if (!preg_match($obj['xp'], $pattern, $vals))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// call middleware
|
// call middleware
|
||||||
middleware($pattern);
|
middleware($pattern);
|
||||||
|
|
||||||
// construct the params for the callback
|
// construct the params for the callback
|
||||||
array_shift($vals);
|
array_shift($vals);
|
||||||
preg_match_all('@:([\w]+)@', $pat, $keys, PREG_PATTERN_ORDER);
|
preg_match_all('@:([\w]+)@', $pat, $keys, PREG_PATTERN_ORDER);
|
||||||
$keys = array_shift($keys);
|
$keys = array_shift($keys);
|
||||||
$argv = array();
|
$argv = array();
|
||||||
|
|
||||||
|
foreach ($keys as $index => $id) {
|
||||||
|
$id = substr($id, 1);
|
||||||
|
if (isset($vals[$id])) {
|
||||||
|
array_push($argv, trim(urldecode($vals[$id])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// call filters if we have symbols
|
||||||
|
if (count($keys)) {
|
||||||
|
filter(array_values($keys), $vals);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if cb found, invoke it
|
||||||
|
if (is_callable($obj['cb'])) {
|
||||||
|
call_user_func_array($obj['cb'], $argv);
|
||||||
|
}
|
||||||
|
|
||||||
|
// leave after first match
|
||||||
|
break;
|
||||||
|
|
||||||
foreach ($keys as $index => $id) {
|
|
||||||
$id = substr($id, 1);
|
|
||||||
if (isset($vals[$id])) {
|
|
||||||
array_push($argv, trim(urldecode($vals[$id])));
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// call filters if we have symbols
|
|
||||||
if (count($keys)) {
|
|
||||||
filter(array_values($keys), $vals);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if cb found, invoke it
|
|
||||||
if (is_callable($obj['cb'])) {
|
|
||||||
call_user_func_array($obj['cb'], $argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
// leave after first match
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function get($path, $cb)
|
function get($path, $cb)
|
||||||
{
|
{
|
||||||
route('GET', $path, $cb);
|
route('GET', $path, $cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
function post($path, $cb)
|
function post($path, $cb)
|
||||||
{
|
{
|
||||||
route('POST', $path, $cb);
|
route('POST', $path, $cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
function flash($key, $msg = null, $now = false)
|
function flash($key, $msg = null, $now = false)
|
||||||
{
|
{
|
||||||
static $x = array(),
|
static $x = array(),
|
||||||
$f = null;
|
$f = null;
|
||||||
|
|
||||||
$f = (config('cookies.flash') ? config('cookies.flash') : '_F');
|
$f = (config('cookies.flash') ? config('cookies.flash') : '_F');
|
||||||
|
|
||||||
if ($c = get_cookie($f))
|
if ($c = get_cookie($f))
|
||||||
$c = json_decode($c, true);
|
$c = json_decode($c, true);
|
||||||
else
|
else
|
||||||
$c = array();
|
$c = array();
|
||||||
|
|
||||||
if ($msg == null) {
|
if ($msg == null) {
|
||||||
|
|
||||||
if (isset($c[$key])) {
|
if (isset($c[$key])) {
|
||||||
$x[$key] = $c[$key];
|
$x[$key] = $c[$key];
|
||||||
unset($c[$key]);
|
unset($c[$key]);
|
||||||
set_cookie($f, json_encode($c));
|
set_cookie($f, json_encode($c));
|
||||||
|
}
|
||||||
|
|
||||||
|
return (isset($x[$key]) ? $x[$key] : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (isset($x[$key]) ? $x[$key] : null);
|
if (!$now) {
|
||||||
}
|
$c[$key] = $msg;
|
||||||
|
set_cookie($f, json_encode($c));
|
||||||
|
}
|
||||||
|
|
||||||
if (!$now) {
|
$x[$key] = $msg;
|
||||||
$c[$key] = $msg;
|
|
||||||
set_cookie($f, json_encode($c));
|
|
||||||
}
|
|
||||||
|
|
||||||
$x[$key] = $msg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function dispatch()
|
function dispatch()
|
||||||
{
|
{
|
||||||
$path = urldecode($_SERVER['REQUEST_URI']);
|
$path = urldecode($_SERVER['REQUEST_URI']);
|
||||||
|
|
||||||
if (config('site.url') !== null)
|
if (config('site.url') !== null)
|
||||||
$path = preg_replace('@^'.preg_quote(site_path()).'@', '', $path);
|
$path = preg_replace('@^' . preg_quote(site_path()) . '@', '', $path);
|
||||||
|
|
||||||
$parts = preg_split('/\?/', $path, -1, PREG_SPLIT_NO_EMPTY);
|
$parts = preg_split('/\?/', $path, -1, PREG_SPLIT_NO_EMPTY);
|
||||||
|
|
||||||
$uri = trim($parts[0], '/');
|
$uri = trim($parts[0], '/');
|
||||||
$uri = strlen($uri) ? $uri : 'index';
|
$uri = strlen($uri) ? $uri : 'index';
|
||||||
|
|
||||||
route(method(), "/{$uri}");
|
route(method(), "/{$uri}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,20 +2,22 @@
|
||||||
|
|
||||||
$updater = new Kanti\HubUpdater("danpros/htmly");
|
$updater = new Kanti\HubUpdater("danpros/htmly");
|
||||||
$info = $updater->getCurrentInfo();
|
$info = $updater->getCurrentInfo();
|
||||||
$versionNumber = substr($info['tag_name'],1);
|
$versionNumber = substr($info['tag_name'], 1);
|
||||||
|
|
||||||
function isGraterThan($string){
|
function isGraterThan($string)
|
||||||
|
{
|
||||||
global $versionNumber;
|
global $versionNumber;
|
||||||
return (version_compare($versionNumber,$string) > 0);
|
return (version_compare($versionNumber, $string) > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/3338123/how-do-i-recursively-delete-a-directory-and-its-entire-contents-files-sub-dir
|
// http://stackoverflow.com/questions/3338123/how-do-i-recursively-delete-a-directory-and-its-entire-contents-files-sub-dir
|
||||||
function rrmdir($dir) {
|
function rrmdir($dir)
|
||||||
|
{
|
||||||
if (is_dir($dir)) {
|
if (is_dir($dir)) {
|
||||||
$objects = scandir($dir);
|
$objects = scandir($dir);
|
||||||
foreach ($objects as $object) {
|
foreach ($objects as $object) {
|
||||||
if ($object != "." && $object != "..") {
|
if ($object != "." && $object != "..") {
|
||||||
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
|
if (filetype($dir . "/" . $object) == "dir") rrmdir($dir . "/" . $object); else unlink($dir . "/" . $object);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reset($objects);
|
reset($objects);
|
||||||
|
|
@ -24,13 +26,11 @@ function rrmdir($dir) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//run upgrade specific stuff
|
//run upgrade specific stuff
|
||||||
if(isGraterThan("2.3")) {// 2.4, 2.5, ...
|
if (isGraterThan("2.3")) {// 2.4, 2.5, ...
|
||||||
if(file_exists("vendor/")){
|
if (file_exists("vendor/")) {
|
||||||
rrmdir("vendor/");
|
rrmdir("vendor/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isGraterThan("2.3")) {
|
file_put_contents("index.php", file_get_contents("system/upgrade/index.php"));
|
||||||
file_put_contents("index.php",file_get_contents("system/upgrade/index.php"));
|
rrmdir("system/upgrade/");
|
||||||
rrmdir("system/upgrade/");
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue