| 1: | <?php
|
| 2: | |
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: | |
| 10: | |
| 11: | |
| 12: | |
| 13: |
|
| 14: |
|
| 15: | use LucidFrame\Core\SchemaManager;
|
| 16: |
|
| 17: | |
| 18: | |
| 19: |
|
| 20: | define('FILE_RESIZE_BOTH', 'both');
|
| 21: | |
| 22: | |
| 23: |
|
| 24: | define('FILE_RESIZE_HEIGHT', 'height');
|
| 25: | |
| 26: | |
| 27: |
|
| 28: | define('FILE_RESIZE_WIDTH', 'width');
|
| 29: | |
| 30: | |
| 31: |
|
| 32: | define('FILE_UPLOAD_ERR_MOVE', 100);
|
| 33: | |
| 34: | |
| 35: |
|
| 36: | define('FILE_UPLOAD_ERR_IMAGE_CREATE', 101);
|
| 37: | |
| 38: | |
| 39: |
|
| 40: | define('LC_FETCH_ASSOC', 1);
|
| 41: | define('LC_FETCH_ARRAY', 2);
|
| 42: | define('LC_FETCH_OBJECT', 3);
|
| 43: | |
| 44: | |
| 45: |
|
| 46: | define('LC_CONSOLE_OPTION_REQUIRED', 4);
|
| 47: | define('LC_CONSOLE_OPTION_OPTIONAL', 5);
|
| 48: | define('LC_CONSOLE_OPTION_NOVALUE', 6);
|
| 49: |
|
| 50: | |
| 51: | |
| 52: | |
| 53: | |
| 54: |
|
| 55: | $lc_httpStatusCode = 200;
|
| 56: | |
| 57: | |
| 58: | |
| 59: | |
| 60: |
|
| 61: | $lc_sitewideWarnings = array();
|
| 62: | |
| 63: | |
| 64: | |
| 65: | |
| 66: |
|
| 67: | $lc_autoload = array();
|
| 68: | |
| 69: | |
| 70: | |
| 71: | |
| 72: |
|
| 73: | $lc_namespace = '';
|
| 74: | |
| 75: | |
| 76: | |
| 77: | |
| 78: |
|
| 79: | $lc_cleanRoute = '';
|
| 80: | |
| 81: | |
| 82: | |
| 83: | |
| 84: |
|
| 85: | $lc_jsVars = array();
|
| 86: | |
| 87: | |
| 88: | |
| 89: | |
| 90: |
|
| 91: | $lc_canonical = '';
|
| 92: | |
| 93: | |
| 94: | |
| 95: | |
| 96: |
|
| 97: | $lc_envParameters = null;
|
| 98: | |
| 99: | |
| 100: | |
| 101: | |
| 102: |
|
| 103: | $_meta = array();
|
| 104: | |
| 105: | |
| 106: | |
| 107: | |
| 108: |
|
| 109: | global $db_builtQueries;
|
| 110: | $db_builtQueries = array();
|
| 111: | $db_printQuery = false;
|
| 112: |
|
| 113: |
|
| 114: |
|
| 115: |
|
| 116: |
|
| 117: | |
| 118: | |
| 119: | |
| 120: | |
| 121: |
|
| 122: | function __prerequisite()
|
| 123: | {
|
| 124: | if (version_compare(phpversion(), '5.3.0', '<')) {
|
| 125: | die('PHPLucidFrame requires at least PHP 5.3.0. Your PHP installation is ' . phpversion() . '.');
|
| 126: | }
|
| 127: |
|
| 128: | |
| 129: | |
| 130: |
|
| 131: | if (!file_exists(INC . 'config.php')) {
|
| 132: | copy(INC . 'config.default.php', INC . 'config.php');
|
| 133: | }
|
| 134: |
|
| 135: | if (PHP_SAPI !== 'cli') {
|
| 136: | register_shutdown_function('__kernelShutdownHandler');
|
| 137: | }
|
| 138: | }
|
| 139: |
|
| 140: | |
| 141: | |
| 142: | |
| 143: | |
| 144: | |
| 145: | |
| 146: | |
| 147: | |
| 148: | |
| 149: | |
| 150: | |
| 151: | |
| 152: | |
| 153: |
|
| 154: | function __dotNotationToArray($key, $scope = 'global', $value = '', $serialize = false)
|
| 155: | {
|
| 156: | if (empty($key)) {
|
| 157: | return null;
|
| 158: | }
|
| 159: |
|
| 160: | if (!in_array($scope, array('global', 'session')) && !is_array($scope)) {
|
| 161: | return null;
|
| 162: | }
|
| 163: |
|
| 164: | if (is_array($scope)) {
|
| 165: | $input = &$scope;
|
| 166: | }
|
| 167: |
|
| 168: | $type = count(func_get_args()) > 2 ? 'setter' : 'getter';
|
| 169: | $keys = explode(".", $key);
|
| 170: |
|
| 171: | $firstKey = array_shift($keys);
|
| 172: |
|
| 173: | $lastKey = end($keys);
|
| 174: |
|
| 175: | $count = count($keys);
|
| 176: | $justOneLevelKey = ($count === 0);
|
| 177: |
|
| 178: | if ($type == 'getter' && $justOneLevelKey) {
|
| 179: |
|
| 180: | if ($scope == 'session' && __sessionLoadable()) {
|
| 181: | $firstKey = S_PREFIX . $firstKey;
|
| 182: | return (array_key_exists($firstKey, $_SESSION)) ? $_SESSION[$firstKey] : null;
|
| 183: | } elseif ($scope == 'global') {
|
| 184: | return (array_key_exists($firstKey, $GLOBALS)) ? $GLOBALS[$firstKey] : null;
|
| 185: | } elseif (is_array($scope) && isset($input)) {
|
| 186: | return (array_key_exists($firstKey, $input)) ? $input[$firstKey] : null;
|
| 187: | }
|
| 188: | }
|
| 189: |
|
| 190: | $current = null;
|
| 191: | if ($scope == 'session' && __sessionLoadable()) {
|
| 192: | $firstKey = S_PREFIX . $firstKey;
|
| 193: | if (!array_key_exists($firstKey, $_SESSION)) {
|
| 194: | $_SESSION[$firstKey] = null;
|
| 195: | }
|
| 196: | $current = &$_SESSION[$firstKey];
|
| 197: | } elseif ($scope == 'global') {
|
| 198: | if (!array_key_exists($firstKey, $GLOBALS)) {
|
| 199: | $GLOBALS[$firstKey] = null;
|
| 200: | }
|
| 201: | $current = &$GLOBALS[$firstKey];
|
| 202: | } elseif (is_array($scope) && isset($input)) {
|
| 203: | if (!array_key_exists($firstKey, $input)) {
|
| 204: | $input[$firstKey] = null;
|
| 205: | }
|
| 206: | $current = &$input[$firstKey];
|
| 207: | }
|
| 208: |
|
| 209: | $theLastHasValue = false;
|
| 210: | if (($type == 'setter' && $count) || ($type == 'getter' && $count > 1)) {
|
| 211: |
|
| 212: | foreach ($keys as $k) {
|
| 213: | if ($k == $lastKey && isset($current[$lastKey])) {
|
| 214: | if ($type === 'getter') {
|
| 215: | return $current[$lastKey];
|
| 216: | }
|
| 217: |
|
| 218: | $theLastHasValue = true;
|
| 219: | if ($scope != 'session') {
|
| 220: |
|
| 221: | $current[$lastKey] = is_array($current[$k]) ? $current[$k] : array($current[$k]);
|
| 222: | }
|
| 223: | break;
|
| 224: | }
|
| 225: | if ($count && !isset($current[$k]) && !is_array($current)) {
|
| 226: | $current = array($k => null);
|
| 227: | }
|
| 228: | $current = &$current[$k];
|
| 229: | }
|
| 230: | }
|
| 231: |
|
| 232: | if ($type == 'setter') {
|
| 233: | if (is_array($current) && $theLastHasValue) {
|
| 234: |
|
| 235: | $current[$lastKey] = ($serialize) ? serialize($value) : $value;
|
| 236: | } else {
|
| 237: | $current = ($serialize) ? serialize($value) : $value;
|
| 238: | }
|
| 239: | return $current;
|
| 240: | } elseif ($type == 'getter') {
|
| 241: |
|
| 242: | return $count ? (isset($current[$lastKey]) ? $current[$lastKey] : null) : $current;
|
| 243: | }
|
| 244: | return null;
|
| 245: | }
|
| 246: |
|
| 247: | |
| 248: | |
| 249: | |
| 250: | |
| 251: | |
| 252: | |
| 253: | |
| 254: | |
| 255: |
|
| 256: | function __envLoader()
|
| 257: | {
|
| 258: | global $lc_languages;
|
| 259: | global $lc_baseURL;
|
| 260: | global $lc_sites;
|
| 261: | global $lc_env;
|
| 262: | global $lc_debugLevel;
|
| 263: | global $lc_minifyHTML;
|
| 264: | global $lc_timeZone;
|
| 265: | global $lc_memoryLimit;
|
| 266: | global $lc_maxExecTime;
|
| 267: |
|
| 268: | |
| 269: | |
| 270: |
|
| 271: | ini_set('magic_quotes_runtime', '0');
|
| 272: | |
| 273: | |
| 274: | |
| 275: |
|
| 276: | ini_set('memory_limit', $lc_memoryLimit);
|
| 277: | |
| 278: | |
| 279: | |
| 280: |
|
| 281: | ini_set('max_execution_time', $lc_maxExecTime);
|
| 282: |
|
| 283: | |
| 284: | |
| 285: |
|
| 286: | date_default_timezone_set($lc_timeZone);
|
| 287: |
|
| 288: | $lc_env = strtolower($lc_env);
|
| 289: | if (!in_array($lc_env, __envList())) {
|
| 290: | $lc_env = ENV_PROD;
|
| 291: | }
|
| 292: | if ($lc_env == ENV_PROD) {
|
| 293: | error_reporting(0);
|
| 294: | ini_set('display_errors', 0);
|
| 295: | ini_set('display_startup_errors', 0);
|
| 296: | } else {
|
| 297: | $lc_minifyHTML = false;
|
| 298: | switch($lc_debugLevel) {
|
| 299: | case 1:
|
| 300: | error_reporting(E_ERROR | E_PARSE);
|
| 301: | ini_set('display_errors', 1);
|
| 302: | ini_set('display_startup_errors', 0);
|
| 303: | break;
|
| 304: | case 2:
|
| 305: | error_reporting(E_ERROR | E_PARSE | E_NOTICE | E_WARNING);
|
| 306: | ini_set('display_errors', 1);
|
| 307: | ini_set('display_startup_errors', 1);
|
| 308: | break;
|
| 309: | case 3:
|
| 310: | error_reporting(E_ALL);
|
| 311: | ini_set('display_errors', 1);
|
| 312: | ini_set('display_startup_errors', 1);
|
| 313: | break;
|
| 314: | default:
|
| 315: | error_reporting($lc_debugLevel);
|
| 316: | ini_set('display_errors', 1);
|
| 317: | ini_set('display_startup_errors', 1);
|
| 318: | }
|
| 319: | }
|
| 320: |
|
| 321: | if (empty($lc_languages) || !is_array($lc_languages)) {
|
| 322: | $lc_languages = array('en' => 'English');
|
| 323: | }
|
| 324: |
|
| 325: | $REQUEST_URI = $_SERVER['REQUEST_URI'];
|
| 326: |
|
| 327: | $requestURI = substr($REQUEST_URI, strpos($REQUEST_URI, '/'.$lc_baseURL) + strlen($lc_baseURL) + 1);
|
| 328: | $requestURI = ltrim($requestURI, '/');
|
| 329: | $request = explode('/', $requestURI);
|
| 330: | $lc_namespace = $request[0];
|
| 331: |
|
| 332: |
|
| 333: | if (array_key_exists($lc_namespace, $lc_languages)) {
|
| 334: | array_shift($request);
|
| 335: | $requestURI = ltrim(ltrim($requestURI, $lc_namespace), '/');
|
| 336: | $lc_namespace = count($request) ? $request[0] : '';
|
| 337: | }
|
| 338: |
|
| 339: | if (!(isset($lc_sites) && is_array($lc_sites) && array_key_exists($lc_namespace, $lc_sites))) {
|
| 340: | $lc_namespace = '';
|
| 341: | }
|
| 342: |
|
| 343: |
|
| 344: | define('REQUEST_URI', trim($requestURI, '/'));
|
| 345: |
|
| 346: | define('LC_NAMESPACE', $lc_namespace);
|
| 347: |
|
| 348: | unset($requestURI);
|
| 349: | unset($request);
|
| 350: | }
|
| 351: |
|
| 352: | |
| 353: | |
| 354: | |
| 355: | |
| 356: | |
| 357: | |
| 358: |
|
| 359: | function __secret($file = null)
|
| 360: | {
|
| 361: | if ($file !== null && is_file($file) && file_exists($file)) {
|
| 362: | return trim(file_get_contents($file));
|
| 363: | }
|
| 364: |
|
| 365: | $file = INC . '.secret';
|
| 366: | return (is_file($file) && file_exists($file)) ? trim(file_get_contents($file)) : '';
|
| 367: | }
|
| 368: |
|
| 369: | |
| 370: | |
| 371: | |
| 372: | |
| 373: | |
| 374: |
|
| 375: | function __env()
|
| 376: | {
|
| 377: | $defaultEnv = ENV_DEV;
|
| 378: |
|
| 379: | $oldFile = ROOT . '.env';
|
| 380: | if (is_file($oldFile) && file_exists($oldFile)) {
|
| 381: | $defaultEnv = trim(file_get_contents($oldFile));
|
| 382: | if (in_array($defaultEnv, __envList())) {
|
| 383: | unlink($oldFile);
|
| 384: | }
|
| 385: | }
|
| 386: |
|
| 387: | $file = ROOT . FILE_ENV;
|
| 388: | if (!(is_file($file) && file_exists($file))) {
|
| 389: | file_put_contents($file, $defaultEnv);
|
| 390: | }
|
| 391: |
|
| 392: | $env = trim(file_get_contents($file));
|
| 393: | if (!in_array($env, __envList())) {
|
| 394: | $env = ENV_PROD;
|
| 395: | }
|
| 396: |
|
| 397: | return $env;
|
| 398: | }
|
| 399: |
|
| 400: | |
| 401: | |
| 402: | |
| 403: | |
| 404: | |
| 405: |
|
| 406: | function __envList()
|
| 407: | {
|
| 408: | return array(ENV_PROD, ENV_STAGING, ENV_DEV, ENV_TEST, 'dev', 'prod');
|
| 409: | }
|
| 410: |
|
| 411: | |
| 412: | |
| 413: | |
| 414: | |
| 415: | |
| 416: | |
| 417: | |
| 418: | |
| 419: | |
| 420: | |
| 421: | |
| 422: |
|
| 423: | function __kernelErrorHandler($code, $message, $file, $line)
|
| 424: | {
|
| 425: | if (!(error_reporting() & $code)) {
|
| 426: |
|
| 427: |
|
| 428: | return false;
|
| 429: | }
|
| 430: |
|
| 431: | $type = __kernelErrorTypes($code);
|
| 432: | $trace = array_reverse(debug_backtrace());
|
| 433: |
|
| 434: | $status = _g('httpStatusCode');
|
| 435: | if (empty($status) || $status == 200) {
|
| 436: | $status = 500;
|
| 437: | _g('httpStatusCode', $status);
|
| 438: | }
|
| 439: |
|
| 440: | _header($status);
|
| 441: |
|
| 442: | include( _i('inc/tpl/exception.php') );
|
| 443: | exit;
|
| 444: | }
|
| 445: |
|
| 446: | |
| 447: | |
| 448: | |
| 449: | |
| 450: | |
| 451: |
|
| 452: | function __kernelShutdownHandler()
|
| 453: | {
|
| 454: | $error = error_get_last();
|
| 455: |
|
| 456: | if (is_array($error)) {
|
| 457: | if (__env() == ENV_PROD || error_reporting() == 0) {
|
| 458: | _log($error);
|
| 459: | }
|
| 460: |
|
| 461: | __kernelErrorHandler($error['type'], $error['message'], $error['file'], $error['line']);
|
| 462: | }
|
| 463: | }
|
| 464: |
|
| 465: | |
| 466: | |
| 467: | |
| 468: | |
| 469: | |
| 470: | |
| 471: | |
| 472: |
|
| 473: | function __kernelErrorTypes($code)
|
| 474: | {
|
| 475: | switch($code) {
|
| 476: | case E_ERROR:
|
| 477: | return 'E_ERROR: Fatal error';
|
| 478: |
|
| 479: | case E_WARNING:
|
| 480: | return 'E_WARNING: Warning';
|
| 481: |
|
| 482: | case E_PARSE:
|
| 483: | return 'E_PARSE: Parse error';
|
| 484: |
|
| 485: | case E_NOTICE:
|
| 486: | return 'E_NOTICE: Notice';
|
| 487: |
|
| 488: | case E_CORE_ERROR:
|
| 489: | return 'E_CORE_ERROR: Fatal error';
|
| 490: |
|
| 491: | case E_CORE_WARNING:
|
| 492: | return 'E_CORE_WARNING: Warning';
|
| 493: |
|
| 494: | case E_COMPILE_ERROR:
|
| 495: | return 'E_COMPILE_ERROR: Fatal error';
|
| 496: |
|
| 497: | case E_COMPILE_WARNING:
|
| 498: | return 'E_COMPILE_WARNING: Warning';
|
| 499: |
|
| 500: | case E_USER_ERROR:
|
| 501: | return 'E_USER_ERROR: User-generated error';
|
| 502: |
|
| 503: | case E_USER_WARNING:
|
| 504: | return 'E_USER_WARNING: User-generated warning';
|
| 505: |
|
| 506: | case E_USER_NOTICE:
|
| 507: | return 'E_USER_NOTICE: User-generated notice';
|
| 508: |
|
| 509: | case E_STRICT:
|
| 510: | return 'E_STRICT: Information';
|
| 511: |
|
| 512: | case E_RECOVERABLE_ERROR:
|
| 513: | return 'E_RECOVERABLE_ERROR: Catchable fatal error';
|
| 514: |
|
| 515: | case E_DEPRECATED:
|
| 516: | return 'E_DEPRECATED: Deprecated warning';
|
| 517: |
|
| 518: | case E_USER_DEPRECATED:
|
| 519: | return 'E_USER_DEPRECATED: User-generated deprecated warning';
|
| 520: | }
|
| 521: |
|
| 522: | return 'E_ERROR, Error';
|
| 523: | }
|
| 524: |
|
| 525: | |
| 526: | |
| 527: | |
| 528: |
|
| 529: | function __autoloadHelper($modules)
|
| 530: | {
|
| 531: | $modules = is_array($modules) ? $modules : array($modules);
|
| 532: | $helperDirs = _baseDirs('helpers');
|
| 533: |
|
| 534: | foreach ($modules as $helper) {
|
| 535: | foreach ($helperDirs as $dir) {
|
| 536: | $moduleFile = $dir . $helper . '_helper.php';
|
| 537: | if (is_file($moduleFile) && file_exists($moduleFile)) {
|
| 538: | include($moduleFile);
|
| 539: | }
|
| 540: | }
|
| 541: | }
|
| 542: | }
|
| 543: |
|
| 544: | |
| 545: | |
| 546: | |
| 547: | |
| 548: | |
| 549: | |
| 550: |
|
| 551: | function __dbLoadable()
|
| 552: | {
|
| 553: | global $argv;
|
| 554: |
|
| 555: | return !(PHP_SAPI == 'cli'
|
| 556: | && stripos($argv[0], 'lucidframe') !== false
|
| 557: | && isset($argv[1]) && in_array($argv[1], ['list', 'env', 'secret:generate']));
|
| 558: | }
|
| 559: |
|
| 560: | |
| 561: | |
| 562: | |
| 563: | |
| 564: | |
| 565: | |
| 566: |
|
| 567: | function __sessionLoadable()
|
| 568: | {
|
| 569: | return PHP_SAPI != 'cli';
|
| 570: | }
|
| 571: |
|
| 572: |
|
| 573: |
|
| 574: |
|
| 575: |
|
| 576: | |
| 577: | |
| 578: | |
| 579: | |
| 580: | |
| 581: | |
| 582: | |
| 583: | |
| 584: | |
| 585: | |
| 586: | |
| 587: | |
| 588: | |
| 589: | |
| 590: | |
| 591: | |
| 592: | |
| 593: | |
| 594: |
|
| 595: | function _schema($dbNamespace = 'default', $cache = false)
|
| 596: | {
|
| 597: | $files = array();
|
| 598: | if ($cache) {
|
| 599: | $files[] = SchemaManager::getSchemaLockFileName($dbNamespace);
|
| 600: | $files[] = SchemaManager::getSchemaLockFileName();
|
| 601: | }
|
| 602: |
|
| 603: | $files[] = DB."schema.{$dbNamespace}.php";
|
| 604: | $files[] = DB."schema.php";
|
| 605: |
|
| 606: | foreach ($files as $f) {
|
| 607: | if (is_file($f) && file_exists($f)) {
|
| 608: | $file = $f;
|
| 609: | if (pathinfo($file, PATHINFO_EXTENSION) == 'lock') {
|
| 610: | return unserialize(file_get_contents($file));
|
| 611: | } else {
|
| 612: | $schema = include($file);
|
| 613: | return is_array($schema) ? $schema : null;
|
| 614: | }
|
| 615: | }
|
| 616: | }
|
| 617: |
|
| 618: | return false;
|
| 619: | }
|
| 620: |
|
| 621: | |
| 622: | |
| 623: | |
| 624: | |
| 625: | |
| 626: | |
| 627: | |
| 628: | |
| 629: |
|
| 630: | function _i($file, $recursive = true)
|
| 631: | {
|
| 632: | global $lc_baseURL;
|
| 633: | global $lc_sites;
|
| 634: | global $lc_languages;
|
| 635: |
|
| 636: | $ext = strtolower(substr($file, strrpos($file, '.')+1));
|
| 637: | if (in_array($ext, array('js', 'css'))) {
|
| 638: | $appRoot = WEB_APP_ROOT;
|
| 639: | $root = WEB_ROOT;
|
| 640: | } else {
|
| 641: | $appRoot = APP_ROOT;
|
| 642: | $root = ROOT;
|
| 643: | }
|
| 644: |
|
| 645: | if (!is_array($lc_languages)) {
|
| 646: | $lc_languages = array('en' => 'English');
|
| 647: | }
|
| 648: |
|
| 649: | $REQUEST_URI = $_SERVER['REQUEST_URI'];
|
| 650: |
|
| 651: | $requestURI = trim(ltrim($REQUEST_URI, '/'.$lc_baseURL));
|
| 652: | $request = explode('/', $requestURI);
|
| 653: |
|
| 654: | $needle = $request[0];
|
| 655: |
|
| 656: | if (array_key_exists($needle, $lc_languages)) {
|
| 657: | array_shift($request);
|
| 658: | }
|
| 659: |
|
| 660: | $folders = array();
|
| 661: | if (LC_NAMESPACE == '') {
|
| 662: |
|
| 663: | $folders = array(
|
| 664: | APP_ROOT => $appRoot,
|
| 665: | ROOT => $root
|
| 666: | );
|
| 667: | }
|
| 668: |
|
| 669: | if (isset($lc_sites) && is_array($lc_sites) && count($lc_sites)) {
|
| 670: | if (array_key_exists(LC_NAMESPACE, $lc_sites)) {
|
| 671: |
|
| 672: | $folders = array(
|
| 673: | APP_ROOT.$lc_sites[LC_NAMESPACE]._DS_ => $appRoot . $lc_sites[LC_NAMESPACE] . _DS_,
|
| 674: | APP_ROOT => $appRoot,
|
| 675: | ROOT => $root
|
| 676: | );
|
| 677: | }
|
| 678: | }
|
| 679: |
|
| 680: |
|
| 681: |
|
| 682: | foreach ($folders as $key => $value) {
|
| 683: | if ($key === ROOT && substr($file, 0, 7) === 'helpers') {
|
| 684: | $fileWithPath = LIB . $file;
|
| 685: | $libHelper = true;
|
| 686: | } else {
|
| 687: | $fileWithPath = $key . $file;
|
| 688: | $libHelper = false;
|
| 689: | }
|
| 690: |
|
| 691: | if (is_file($fileWithPath) && file_exists($fileWithPath)) {
|
| 692: | if ($libHelper === false) {
|
| 693: | $fileWithPath = $value . $file;
|
| 694: | }
|
| 695: |
|
| 696: | return $fileWithPath;
|
| 697: | }
|
| 698: |
|
| 699: | if ($recursive == false) {
|
| 700: | break;
|
| 701: | }
|
| 702: | }
|
| 703: |
|
| 704: | if (strstr($_SERVER['PHP_SELF'], APP_DIR)) {
|
| 705: | if ($recursive == true) {
|
| 706: | if ($root === ROOT && substr($file, 0, 7) === 'helpers') {
|
| 707: | $file = LIB . $file;
|
| 708: | } else {
|
| 709: | $file = $root . $file;
|
| 710: | }
|
| 711: | } else {
|
| 712: | $file = $root . $file;
|
| 713: | }
|
| 714: |
|
| 715: | if (is_file($file) && file_exists($file)) {
|
| 716: | return $file;
|
| 717: | }
|
| 718: | }
|
| 719: |
|
| 720: | return '';
|
| 721: | }
|
| 722: |
|
| 723: | |
| 724: | |
| 725: | |
| 726: |
|
| 727: | function _host()
|
| 728: | {
|
| 729: | if (isset($_SERVER['HTTP_HOST'])) {
|
| 730: | return $_SERVER['HTTP_HOST'];
|
| 731: | }
|
| 732: |
|
| 733: | if (isset($_SERVER['SERVER_NAME'])) {
|
| 734: | return $_SERVER['SERVER_NAME'];
|
| 735: | }
|
| 736: |
|
| 737: | return _env('host');
|
| 738: | }
|
| 739: |
|
| 740: | |
| 741: | |
| 742: | |
| 743: | |
| 744: | |
| 745: | |
| 746: |
|
| 747: | function _cfg($key, $value = '')
|
| 748: | {
|
| 749: | if (strrpos($key, 'lc_') === 0) {
|
| 750: | $key = substr($key, 3);
|
| 751: | }
|
| 752: |
|
| 753: | $key = 'lc_' . $key;
|
| 754: |
|
| 755: | return count(func_get_args()) == 2 ? __dotNotationToArray($key, 'global', $value) : __dotNotationToArray($key, 'global');
|
| 756: | }
|
| 757: |
|
| 758: | |
| 759: | |
| 760: | |
| 761: | |
| 762: | |
| 763: | |
| 764: |
|
| 765: | function _cfgOption($name, $key)
|
| 766: | {
|
| 767: | $config = _cfg($name);
|
| 768: |
|
| 769: | return isset($config[$key]) ? $config[$key] : null;
|
| 770: | }
|
| 771: |
|
| 772: | |
| 773: | |
| 774: | |
| 775: | |
| 776: | |
| 777: | |
| 778: |
|
| 779: | function _p($name = 'env')
|
| 780: | {
|
| 781: | if ($name == 'env') {
|
| 782: | return __env();
|
| 783: | }
|
| 784: |
|
| 785: | global $argv;
|
| 786: |
|
| 787: | if (PHP_SAPI == 'cli' && isset($argv[0]) && stripos($argv[0], 'lucidframe') !== false) {
|
| 788: |
|
| 789: | $env = _cfg('env');
|
| 790: | } elseif (PHP_SAPI == 'cli' || stripos($_SERVER['REQUEST_URI'], 'tests/') !== false) {
|
| 791: |
|
| 792: |
|
| 793: | $env = 'test';
|
| 794: | _cfg('env', $env);
|
| 795: | } else {
|
| 796: |
|
| 797: | $env = _cfg('env');
|
| 798: | }
|
| 799: |
|
| 800: | if (!in_array($env, __envList())) {
|
| 801: | die(sprintf('Wrong environment configuration. Use "%s" or "%s" or "%s" or "%s".', ENV_DEV, ENV_STAGING, ENV_PROD, ENV_TEST));
|
| 802: | }
|
| 803: |
|
| 804: | $param = include(INC . 'parameter/' . $env . '.php');
|
| 805: |
|
| 806: | return __dotNotationToArray($name, $param);
|
| 807: | }
|
| 808: |
|
| 809: | |
| 810: | |
| 811: | |
| 812: | |
| 813: | |
| 814: | |
| 815: |
|
| 816: | function _g($key, $value = '')
|
| 817: | {
|
| 818: | if (empty($key)) {
|
| 819: | return null;
|
| 820: | }
|
| 821: |
|
| 822: | if (count(func_get_args()) == 2) {
|
| 823: | return __dotNotationToArray($key, 'global', $value);
|
| 824: | } else {
|
| 825: | return __dotNotationToArray($key);
|
| 826: | }
|
| 827: | }
|
| 828: |
|
| 829: | |
| 830: | |
| 831: | |
| 832: | |
| 833: | |
| 834: |
|
| 835: | function _env($name, $default = '')
|
| 836: | {
|
| 837: | global $lc_envParameters;
|
| 838: |
|
| 839: | if ($lc_envParameters === null) {
|
| 840: | $files = array(
|
| 841: | INC . 'parameter/env.inc',
|
| 842: | INC . 'parameter/parameter.env.inc',
|
| 843: | );
|
| 844: |
|
| 845: | foreach ($files as $file) {
|
| 846: | if (is_file($file) && file_exists($file)) {
|
| 847: | $lc_envParameters = include($file);
|
| 848: | break;
|
| 849: | }
|
| 850: | }
|
| 851: | }
|
| 852: |
|
| 853: | $value = __dotNotationToArray($name, $lc_envParameters);
|
| 854: |
|
| 855: | return $value ?: $default;
|
| 856: | }
|
| 857: |
|
| 858: | |
| 859: | |
| 860: | |
| 861: |
|
| 862: | function _baseUrlWithProtocol()
|
| 863: | {
|
| 864: | $baseUrl = _cfg('baseURL');
|
| 865: | $protocol = _cfg('ssl') ? 'https' : 'http';
|
| 866: |
|
| 867: | if (PHP_SAPI == 'cli') {
|
| 868: | $base = trim(_p('siteDomain'), '/');
|
| 869: | } else {
|
| 870: | $base = strtolower($protocol) . '://';
|
| 871: | $base .= $_SERVER['HTTP_HOST'];
|
| 872: | }
|
| 873: |
|
| 874: | if ($baseUrl) {
|
| 875: | $base .= '/' . $baseUrl;
|
| 876: | }
|
| 877: |
|
| 878: | return $base;
|
| 879: | }
|
| 880: |
|
| 881: | |
| 882: | |
| 883: | |
| 884: | |
| 885: |
|
| 886: | function _baseDirs($subDir = '')
|
| 887: | {
|
| 888: | $folders = array();
|
| 889: |
|
| 890: | $namespace = LC_NAMESPACE;
|
| 891: | if (!empty($_GET['lc_namespace'])) {
|
| 892: | $namespace = $_GET['lc_namespace'];
|
| 893: | }
|
| 894: |
|
| 895: | $sites = _cfg('sites');
|
| 896: | if (count($sites) && array_key_exists($namespace, $sites)) {
|
| 897: | $folders[] = rtrim(APP_ROOT . $sites[$namespace] . _DS_ . $subDir, _DS_) . _DS_;
|
| 898: | }
|
| 899: |
|
| 900: | $folders[] = rtrim(APP_ROOT . $subDir, _DS_) . _DS_;
|
| 901: | $folders[] = rtrim(LIB . $subDir, _DS_) . _DS_;
|
| 902: |
|
| 903: | return $folders;
|
| 904: | }
|
| 905: |
|
| 906: | |
| 907: | |
| 908: | |
| 909: | |
| 910: | |
| 911: | |
| 912: | |
| 913: |
|
| 914: | function _log($msg, $file = '', $type = 3)
|
| 915: | {
|
| 916: | if ($file) {
|
| 917: | $file = $file . '-'. date('Ymd') . '.log';
|
| 918: | } else {
|
| 919: | $file = 'log-'. date('Ymd') . '.log';
|
| 920: | }
|
| 921: | $file = LOG . $file;
|
| 922: | $file = substr($file, 0, strrpos($file, '.log'));
|
| 923: | $file .= '-' . __env();
|
| 924: | if (strtolower(php_sapi_name()) == 'cli') {
|
| 925: | $file .= '.cli';
|
| 926: | }
|
| 927: | $file .= '.log';
|
| 928: |
|
| 929: | if (is_array($msg)) {
|
| 930: | if (isset($msg['message'])) {
|
| 931: | $msg = $msg['message'] . ' in ' . $msg['file'] . ' on line ' . $msg['line'];
|
| 932: | } else {
|
| 933: | $msg = print_r($msg, true);
|
| 934: | }
|
| 935: | }
|
| 936: |
|
| 937: | $msg = '[' . date('Y-m-d H:i:s') . '] : ' . trim($msg) . PHP_EOL;
|
| 938: |
|
| 939: | return error_log($msg, $type, $file);
|
| 940: | }
|
| 941: |
|
| 942: |
|
| 943: | __prerequisite();
|
| 944: | |