422 lines
10 KiB
PHP
422 lines
10 KiB
PHP
<?php
|
|
/**
|
|
* @file base.php
|
|
* @created_on 2018-04-13
|
|
* @updated_on 2020-02-10
|
|
* @author Go Namhyeon <gnh1201@gmail.com>
|
|
* @brief Base module
|
|
*/
|
|
|
|
// is_not_fn: mixed
|
|
if(!function_exists("is_not_fn")) {
|
|
function is_not_fn($fn) {
|
|
$err = -1;
|
|
|
|
if(is_array($fn)) {
|
|
foreach($fn as $k=>$v) {
|
|
if(!function_exists($v) || !is_callable($v)) {
|
|
$err = $k;
|
|
break;
|
|
}
|
|
}
|
|
} elseif(!function_exists($fn) || !is_callable($fn)) {
|
|
$err++;
|
|
}
|
|
|
|
return $err;
|
|
}
|
|
}
|
|
|
|
// is_fn: bool
|
|
if(!(is_not_fn("is_fn") < 0)) {
|
|
function is_fn($fn) {
|
|
return (is_not_fn($fn) < 0);
|
|
}
|
|
}
|
|
|
|
if(!is_fn("is_deprecated_fn")) {
|
|
function is_deprecated_fn($fn) {
|
|
$flag = false;
|
|
|
|
$config = get_config();
|
|
$deprecated_fn = get_value_in_array("deprecated_fn", $config, array());
|
|
$deprecated_fn_list = explode(",", $deprecated_fn);
|
|
|
|
if(is_array($fn)) {
|
|
foreach($fn as $k=>$v) {
|
|
if(in_array($v, $deprecated_fn_list)) {
|
|
$flag = true;
|
|
write_common_log(sprintf("Deprecated: %s()", $v), "system/base");
|
|
}
|
|
}
|
|
} else {
|
|
if(in_array($fn, $deprecated_fn_list)) {
|
|
$flag = true;
|
|
write_common_log(sprintf("Deprecated: %s()", $fn), "system/base");
|
|
}
|
|
}
|
|
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
// set_shared_var: void
|
|
if(!is_fn("set_shared_var")) {
|
|
function set_shared_var($k, $v) {
|
|
global $shared_vars;
|
|
$shared_vars[$k] = $v;
|
|
}
|
|
}
|
|
|
|
// get shared var: mixed
|
|
if(!is_fn("get_shared_var")) {
|
|
function get_shared_var($k) {
|
|
global $shared_vars;
|
|
return array_key_exists($k, $shared_vars) ? $shared_vars[$k] : null;
|
|
}
|
|
}
|
|
|
|
// register loaded resources
|
|
if(!is_fn("register_loaded")) {
|
|
function register_loaded($k, $v) {
|
|
$loaded = get_shared_var("loaded");
|
|
|
|
if(array_key_exists($k, $loaded)) {
|
|
if(is_array($loaded[$k])) {
|
|
$loaded[$k][] = $v;
|
|
}
|
|
}
|
|
|
|
set_shared_var("loaded", $loaded);
|
|
}
|
|
}
|
|
|
|
// sandbox for include function
|
|
if(!is_fn("include_isolate")) {
|
|
function include_isolate($file, $data=array()) {
|
|
if(count($data) > 0) {
|
|
extract($data);
|
|
}
|
|
return include($file);
|
|
}
|
|
}
|
|
|
|
// set autoloader
|
|
if(!is_fn("set_autoloader")) {
|
|
function set_autoloader() {
|
|
return include('./vendor/autoload.php');
|
|
}
|
|
}
|
|
|
|
// load view file
|
|
if(!is_fn("renderView")) {
|
|
function renderView($name, $data=array()) {
|
|
$flag = true;
|
|
$views = explode(';', $name);
|
|
foreach($views as $name2) {
|
|
$viewfile = './view/' . $name2 . '.php';
|
|
if(file_exists($viewfile)) {
|
|
register_loaded("view", $name2);
|
|
$flag = $flag && !include_isolate($viewfile, $data);
|
|
}
|
|
}
|
|
return !$flag;
|
|
}
|
|
}
|
|
|
|
// load view by rules
|
|
if(!is_fn("renderViewByRules")) {
|
|
function renderViewByRules($rules, $data=array()) {
|
|
foreach($rules as $k=>$v) {
|
|
if(in_array($k, get_routes())) {
|
|
renderView($v, $data);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// load system module
|
|
if(!is_fn("loadModule")) {
|
|
function loadModule($name) {
|
|
$flag = true;
|
|
$modules = explode(';', $name);
|
|
foreach($modules as $name2) {
|
|
$systemfile = './system/' . $name2 . '.php';
|
|
if(file_exists($systemfile)) {
|
|
register_loaded("system", $name2);
|
|
$flag = $flag && !include_isolate($systemfile);
|
|
} else {
|
|
set_error("Module " . $name . "dose not exists");
|
|
}
|
|
}
|
|
return !$flag;
|
|
}
|
|
}
|
|
|
|
// load helper file
|
|
if(!is_fn("loadHelper")) {
|
|
function loadHelper($name) {
|
|
$flag = true;
|
|
$helpers = explode(';', $name);
|
|
foreach($helpers as $name2) {
|
|
$helperfile = './helper/' . $name2 . '.php';
|
|
if(file_exists($helperfile)) {
|
|
register_loaded("helper", $name2);
|
|
$flag = $flag && !include_isolate($helperfile);
|
|
} else {
|
|
set_error("Helper " . $name . "dose not exists");
|
|
}
|
|
}
|
|
return !$flag;
|
|
}
|
|
}
|
|
|
|
// load route file
|
|
if(!is_fn("loadRoute")) {
|
|
function loadRoute($name, $data=array()) {
|
|
$flag = true;
|
|
$routes = explode(";", $name);
|
|
foreach($routes as $name2) {
|
|
$routefile = './route/' . $name2 . '.php';
|
|
if(file_exists($routefile)) {
|
|
register_loaded("route", $name2);
|
|
$flag = $flag && !include_isolate($routefile, $data);
|
|
} else {
|
|
set_error("Route " . $name . "dose not exists");
|
|
}
|
|
}
|
|
return !$flag;
|
|
}
|
|
}
|
|
|
|
// load vendor file
|
|
if(!is_fn("loadVendor")) {
|
|
function loadVendor($uses, $data=array()) {
|
|
$flag = true;
|
|
$usenames = array();
|
|
|
|
if(is_string($uses) && !empty($uses)) {
|
|
$usenames[] = $uses;
|
|
} elseif(is_array($uses)) {
|
|
$usenames = array_merge($usenames, $uses);
|
|
} else {
|
|
return !$flag;
|
|
}
|
|
|
|
foreach($usenames as $name) {
|
|
$vendorfile = './vendor/' . $name . '.php';
|
|
if(file_exists($vendorfile)) {
|
|
register_loaded("vendor", $name);
|
|
$flag = $flag && !include_isolate($vendorfile, $data);
|
|
} else {
|
|
set_error("Vendor " . $name . "dose not exists");
|
|
}
|
|
}
|
|
return !$flag;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("array_key_empty")) {
|
|
function array_key_empty($key, $array) {
|
|
$flag = true;
|
|
|
|
if(is_array($array)) {
|
|
if(array_key_exists($key, $array)) {
|
|
$flag = $flag && empty($array[$key]);
|
|
}
|
|
}
|
|
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("array_key_equals")) {
|
|
function array_key_equals($key, $array, $value) {
|
|
$flag = false;
|
|
|
|
if(is_array($array)) {
|
|
if(array_key_exists($key, $array)) {
|
|
$flag = ($array[$key] == $value);
|
|
}
|
|
}
|
|
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("array_key_is_array")) {
|
|
function array_key_is_array($key, $array) {
|
|
$flag = false;
|
|
|
|
if(is_array($array)) {
|
|
if(array_key_exists($key, $array)) {
|
|
$flag = is_array($array[$key]);
|
|
}
|
|
}
|
|
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
// example: array_key_unset(array_search("apple", $fruits), $fruits);
|
|
if(!is_fn("array_key_unset")) {
|
|
function array_key_unset($key, &$array) {
|
|
if(array_key_exists($key, $array)) {
|
|
unset($array[$key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!is_fn("array_keys_empty")) {
|
|
function array_keys_empty($keys, $array) {
|
|
$flag = false;
|
|
foreach($keys as $key) {
|
|
if(array_key_empty($key, $array)) {
|
|
$flag = $key;
|
|
}
|
|
}
|
|
return $flag;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("get_value_in_array")) {
|
|
function get_value_in_array($name, $arr=array(), $default=false) {
|
|
$output = false;
|
|
|
|
$_name = "";
|
|
if(is_array($name)) {
|
|
foreach($name as $w) {
|
|
if(!empty($w)) {
|
|
$_name = $w;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
$_name = $name;
|
|
}
|
|
|
|
if(is_array($arr)) {
|
|
$output = array_key_empty($_name, $arr) ? $default : $arr[$_name];
|
|
} else {
|
|
$output = $default;
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("get_value_in_object")) {
|
|
function get_value_in_object($name, $obj, $default="") {
|
|
$output = $obj->$name;
|
|
return $output;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("check_array_length")) {
|
|
function check_array_length($arr, $len) {
|
|
return ((!is_array($arr) ? -1 : count($arr)) - $len);
|
|
}
|
|
}
|
|
|
|
if(!is_fn("check_is_empty")) {
|
|
function check_is_empty($v, $d=true) {
|
|
return (empty($v) ? $d : false);
|
|
}
|
|
}
|
|
|
|
if(!is_fn("get_key_in_array")) {
|
|
function get_key_in_array($val, $arr) {
|
|
return array_search($val, $arr);
|
|
}
|
|
}
|
|
|
|
// error handler (set error)
|
|
if(!is_fn("set_error")) {
|
|
function set_error($msg, $code="ERROR") {
|
|
global $shared_vars;
|
|
$shared_vars['errors'][] = $code . ": " . $msg;
|
|
write_common_log($msg, "set_error");
|
|
}
|
|
}
|
|
|
|
// error handler (get errors)
|
|
if(!is_fn("get_errors")) {
|
|
function get_errors($d=false, $e=false) { // d: display, e: exit
|
|
global $shared_vars;
|
|
return $shared_vars['errors'];
|
|
}
|
|
}
|
|
|
|
// error handler (show errors)
|
|
if(!is_fn("show_errors")) {
|
|
function show_errors($exit=true) {
|
|
$errors = get_errors();
|
|
foreach($errors as $err) {
|
|
echo $err . DOC_EOL;
|
|
}
|
|
|
|
if($exit !== false) {
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
|
|
// error handler (trigger error)
|
|
if(!is_fn("trigger_error")) {
|
|
function trigger_error($msg, $code="ERROR") {
|
|
set_error($msg, $code);
|
|
show_errors();
|
|
}
|
|
}
|
|
|
|
if(!is_fn("get_property_value")) {
|
|
function get_property_value($prop, $obj, $ac=false) {
|
|
$result = false;
|
|
if(is_object($obj) && property_exists($obj, $prop)) {
|
|
if($ac) {
|
|
$reflection = new ReflectionClass($obj);
|
|
$property = $reflection->getProperty($prop);
|
|
$property->setAccessible($ac);
|
|
$result = $property->getValue($obj);
|
|
} else {
|
|
$result = $obj->{$prop};
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
if(!is_fn("get_routes")) {
|
|
function get_routes() {
|
|
$loaded = get_shared_var("loaded");
|
|
return $loaded['route'];
|
|
}
|
|
}
|
|
|
|
// Deprecated: array_multikey_empty() is changed to array_keys_empty(), since version 1.2
|
|
if(!is_fn("array_multikey_empty")) {
|
|
function array_multikey_empty($keys, $array) {
|
|
return array_keys_empty($keys, $array);
|
|
}
|
|
}
|
|
|
|
// Deprecated: set_error_exit() is changed to do_error()
|
|
if(!is_fn("set_error_exit")) {
|
|
function set_error_exit($msg, $code="ERROR") {
|
|
do_error($msg, $code);
|
|
}
|
|
}
|
|
|
|
$loaded = array(
|
|
"module" => array(),
|
|
"helper" => array(),
|
|
"view" => array(),
|
|
"route" => array(),
|
|
"vendor" => array(),
|
|
);
|
|
|
|
$errors = array();
|
|
|
|
set_shared_var("loaded", $loaded);
|
|
set_shared_var("errors", $errors);
|