| 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: | |
| 293: | $lc_minifyHTML = $lc_env == ENV_PROD; |
| 294: | switch ($lc_debugLevel) { |
| 295: | case 0: |
| 296: | error_reporting(0); |
| 297: | ini_set('display_errors', 0); |
| 298: | ini_set('display_startup_errors', 0); |
| 299: | break; |
| 300: | |
| 301: | case 1: |
| 302: | error_reporting(E_ERROR | E_PARSE); |
| 303: | ini_set('display_errors', 1); |
| 304: | ini_set('display_startup_errors', 0); |
| 305: | break; |
| 306: | |
| 307: | case 2: |
| 308: | error_reporting(E_ERROR | E_PARSE | E_NOTICE | E_WARNING); |
| 309: | ini_set('display_errors', 1); |
| 310: | ini_set('display_startup_errors', 1); |
| 311: | break; |
| 312: | |
| 313: | case 3: |
| 314: | error_reporting(E_ALL); |
| 315: | ini_set('display_errors', 1); |
| 316: | ini_set('display_startup_errors', 1); |
| 317: | break; |
| 318: | |
| 319: | default: |
| 320: | error_reporting($lc_debugLevel); |
| 321: | ini_set('display_errors', 1); |
| 322: | ini_set('display_startup_errors', 1); |
| 323: | } |
| 324: | |
| 325: | if (empty($lc_languages) || !is_array($lc_languages)) { |
| 326: | $lc_languages = array('en' => 'English'); |
| 327: | } |
| 328: | |
| 329: | $REQUEST_URI = $_SERVER['REQUEST_URI']; |
| 330: | |
| 331: | $requestURI = substr($REQUEST_URI, strpos($REQUEST_URI, '/'.$lc_baseURL) + strlen($lc_baseURL) + 1); |
| 332: | $requestURI = ltrim($requestURI, '/'); |
| 333: | $request = explode('/', $requestURI); |
| 334: | $lc_namespace = $request[0]; |
| 335: | |
| 336: | if (PHP_SAPI == 'cli' && $_SERVER['SCRIPT_NAME'] == 'lucidframe' && $_SERVER['argc'] == 2) { |
| 337: | $cmd = explode(':', $_SERVER['argv'][1]); |
| 338: | $lc_namespace = count($cmd) > 1 ? $cmd[0] : ''; |
| 339: | } |
| 340: | |
| 341: | |
| 342: | if (array_key_exists($lc_namespace, $lc_languages)) { |
| 343: | array_shift($request); |
| 344: | $requestURI = ltrim(ltrim($requestURI, $lc_namespace), '/'); |
| 345: | $lc_namespace = count($request) ? $request[0] : ''; |
| 346: | } |
| 347: | |
| 348: | if (!(isset($lc_sites) && is_array($lc_sites) && array_key_exists($lc_namespace, $lc_sites))) { |
| 349: | $lc_namespace = ''; |
| 350: | } |
| 351: | |
| 352: | |
| 353: | define('REQUEST_URI', trim($requestURI, '/')); |
| 354: | |
| 355: | define('LC_NAMESPACE', $lc_namespace); |
| 356: | |
| 357: | unset($requestURI); |
| 358: | unset($request); |
| 359: | } |
| 360: | |
| 361: | |
| 362: | |
| 363: | |
| 364: | |
| 365: | |
| 366: | |
| 367: | |
| 368: | function __secret($file = null) |
| 369: | { |
| 370: | if ($file !== null && is_file($file) && file_exists($file)) { |
| 371: | return trim(file_get_contents($file)); |
| 372: | } |
| 373: | |
| 374: | $path = [ |
| 375: | ROOT . '.secret', |
| 376: | INC . '.secret', |
| 377: | ]; |
| 378: | |
| 379: | foreach ($path as $file) { |
| 380: | if (is_file($file) && file_exists($file)) { |
| 381: | return trim(file_get_contents($file)); |
| 382: | } |
| 383: | } |
| 384: | |
| 385: | return ''; |
| 386: | } |
| 387: | |
| 388: | |
| 389: | |
| 390: | |
| 391: | |
| 392: | |
| 393: | |
| 394: | function __env() |
| 395: | { |
| 396: | $defaultEnv = ENV_DEV; |
| 397: | |
| 398: | $oldFile = ROOT . '.env'; |
| 399: | if (is_file($oldFile) && file_exists($oldFile)) { |
| 400: | $defaultEnv = trim(file_get_contents($oldFile)); |
| 401: | if (in_array($defaultEnv, __envList())) { |
| 402: | unlink($oldFile); |
| 403: | } |
| 404: | } |
| 405: | |
| 406: | $file = ROOT . FILE_ENV; |
| 407: | if (!(is_file($file) && file_exists($file))) { |
| 408: | file_put_contents($file, $defaultEnv); |
| 409: | } |
| 410: | |
| 411: | $env = trim(file_get_contents($file)); |
| 412: | if (!in_array($env, __envList())) { |
| 413: | $env = ENV_PROD; |
| 414: | } |
| 415: | |
| 416: | return $env; |
| 417: | } |
| 418: | |
| 419: | |
| 420: | |
| 421: | |
| 422: | |
| 423: | |
| 424: | |
| 425: | function __envList() |
| 426: | { |
| 427: | return array(ENV_PROD, ENV_STAGING, ENV_DEV, ENV_TEST, 'dev', 'prod'); |
| 428: | } |
| 429: | |
| 430: | |
| 431: | |
| 432: | |
| 433: | |
| 434: | |
| 435: | |
| 436: | |
| 437: | |
| 438: | |
| 439: | |
| 440: | |
| 441: | |
| 442: | function __kernelErrorHandler($code, $message, $file, $line) |
| 443: | { |
| 444: | if (!(error_reporting() & $code)) { |
| 445: | |
| 446: | |
| 447: | return false; |
| 448: | } |
| 449: | |
| 450: | $type = __kernelErrorTypes($code); |
| 451: | $trace = array_reverse(debug_backtrace()); |
| 452: | |
| 453: | $status = _g('httpStatusCode'); |
| 454: | if (empty($status) || $status == 200) { |
| 455: | $status = 500; |
| 456: | _g('httpStatusCode', $status); |
| 457: | } |
| 458: | |
| 459: | _header($status); |
| 460: | |
| 461: | include( _i('inc/tpl/exception.php') ); |
| 462: | exit; |
| 463: | } |
| 464: | |
| 465: | |
| 466: | |
| 467: | |
| 468: | |
| 469: | |
| 470: | |
| 471: | function __kernelShutdownHandler() |
| 472: | { |
| 473: | $error = error_get_last(); |
| 474: | |
| 475: | if (is_array($error)) { |
| 476: | if (__env() == ENV_PROD || error_reporting() == 0) { |
| 477: | _log($error); |
| 478: | } |
| 479: | |
| 480: | __kernelErrorHandler($error['type'], $error['message'], $error['file'], $error['line']); |
| 481: | } |
| 482: | } |
| 483: | |
| 484: | |
| 485: | |
| 486: | |
| 487: | |
| 488: | |
| 489: | |
| 490: | |
| 491: | |
| 492: | function __kernelErrorTypes($code) |
| 493: | { |
| 494: | switch($code) { |
| 495: | case E_ERROR: |
| 496: | return 'E_ERROR: Fatal error'; |
| 497: | |
| 498: | case E_WARNING: |
| 499: | return 'E_WARNING: Warning'; |
| 500: | |
| 501: | case E_PARSE: |
| 502: | return 'E_PARSE: Parse error'; |
| 503: | |
| 504: | case E_NOTICE: |
| 505: | return 'E_NOTICE: Notice'; |
| 506: | |
| 507: | case E_CORE_ERROR: |
| 508: | return 'E_CORE_ERROR: Fatal error'; |
| 509: | |
| 510: | case E_CORE_WARNING: |
| 511: | return 'E_CORE_WARNING: Warning'; |
| 512: | |
| 513: | case E_COMPILE_ERROR: |
| 514: | return 'E_COMPILE_ERROR: Fatal error'; |
| 515: | |
| 516: | case E_COMPILE_WARNING: |
| 517: | return 'E_COMPILE_WARNING: Warning'; |
| 518: | |
| 519: | case E_USER_ERROR: |
| 520: | return 'E_USER_ERROR: User-generated error'; |
| 521: | |
| 522: | case E_USER_WARNING: |
| 523: | return 'E_USER_WARNING: User-generated warning'; |
| 524: | |
| 525: | case E_USER_NOTICE: |
| 526: | return 'E_USER_NOTICE: User-generated notice'; |
| 527: | |
| 528: | case E_STRICT: |
| 529: | return 'E_STRICT: Information'; |
| 530: | |
| 531: | case E_RECOVERABLE_ERROR: |
| 532: | return 'E_RECOVERABLE_ERROR: Catchable fatal error'; |
| 533: | |
| 534: | case E_DEPRECATED: |
| 535: | return 'E_DEPRECATED: Deprecated warning'; |
| 536: | |
| 537: | case E_USER_DEPRECATED: |
| 538: | return 'E_USER_DEPRECATED: User-generated deprecated warning'; |
| 539: | } |
| 540: | |
| 541: | return 'E_ERROR, Error'; |
| 542: | } |
| 543: | |
| 544: | |
| 545: | |
| 546: | |
| 547: | |
| 548: | function __autoloadHelper($modules) |
| 549: | { |
| 550: | $modules = is_array($modules) ? $modules : array($modules); |
| 551: | $helperDirs = _baseDirs('helpers'); |
| 552: | |
| 553: | foreach ($modules as $helper) { |
| 554: | foreach ($helperDirs as $dir) { |
| 555: | $moduleFile = $dir . $helper . '_helper.php'; |
| 556: | if (is_file($moduleFile) && file_exists($moduleFile)) { |
| 557: | include($moduleFile); |
| 558: | } |
| 559: | } |
| 560: | } |
| 561: | } |
| 562: | |
| 563: | |
| 564: | |
| 565: | |
| 566: | |
| 567: | |
| 568: | |
| 569: | |
| 570: | function __dbLoadable() |
| 571: | { |
| 572: | global $argv; |
| 573: | |
| 574: | return !(PHP_SAPI == 'cli' |
| 575: | && stripos($argv[0], 'lucidframe') !== false |
| 576: | && isset($argv[1]) && in_array($argv[1], ['list', 'env', 'secret:generate'])); |
| 577: | } |
| 578: | |
| 579: | |
| 580: | |
| 581: | |
| 582: | |
| 583: | |
| 584: | |
| 585: | |
| 586: | function __sessionLoadable() |
| 587: | { |
| 588: | return PHP_SAPI != 'cli'; |
| 589: | } |
| 590: | |
| 591: | |
| 592: | |
| 593: | |
| 594: | |
| 595: | |
| 596: | |
| 597: | |
| 598: | |
| 599: | |
| 600: | |
| 601: | |
| 602: | |
| 603: | |
| 604: | |
| 605: | |
| 606: | |
| 607: | |
| 608: | |
| 609: | |
| 610: | |
| 611: | |
| 612: | |
| 613: | |
| 614: | function _schema($dbNamespace = 'default', $cache = false) |
| 615: | { |
| 616: | $files = array(); |
| 617: | if ($cache) { |
| 618: | $files[] = SchemaManager::getSchemaLockFileName($dbNamespace); |
| 619: | $files[] = SchemaManager::getSchemaLockFileName(); |
| 620: | } |
| 621: | |
| 622: | $files[] = DB."schema.{$dbNamespace}.php"; |
| 623: | $files[] = DB."schema.php"; |
| 624: | |
| 625: | foreach ($files as $f) { |
| 626: | if (is_file($f) && file_exists($f)) { |
| 627: | $file = $f; |
| 628: | if (pathinfo($file, PATHINFO_EXTENSION) == 'lock') { |
| 629: | return unserialize(file_get_contents($file)); |
| 630: | } else { |
| 631: | $schema = include($file); |
| 632: | return is_array($schema) ? $schema : null; |
| 633: | } |
| 634: | } |
| 635: | } |
| 636: | |
| 637: | return false; |
| 638: | } |
| 639: | |
| 640: | |
| 641: | |
| 642: | |
| 643: | |
| 644: | |
| 645: | |
| 646: | |
| 647: | |
| 648: | |
| 649: | function _i($file, $recursive = true) |
| 650: | { |
| 651: | global $lc_baseURL; |
| 652: | global $lc_sites; |
| 653: | global $lc_languages; |
| 654: | |
| 655: | $ext = strtolower(substr($file, strrpos($file, '.')+1)); |
| 656: | if (in_array($ext, array('js', 'css'))) { |
| 657: | $appRoot = WEB_APP_ROOT; |
| 658: | $root = WEB_ROOT; |
| 659: | } else { |
| 660: | $appRoot = APP_ROOT; |
| 661: | $root = ROOT; |
| 662: | } |
| 663: | |
| 664: | if (!is_array($lc_languages)) { |
| 665: | $lc_languages = array('en' => 'English'); |
| 666: | } |
| 667: | |
| 668: | $REQUEST_URI = $_SERVER['REQUEST_URI']; |
| 669: | |
| 670: | $requestURI = trim(ltrim($REQUEST_URI, '/'.$lc_baseURL)); |
| 671: | $request = explode('/', $requestURI); |
| 672: | |
| 673: | $needle = $request[0]; |
| 674: | |
| 675: | if (array_key_exists($needle, $lc_languages)) { |
| 676: | array_shift($request); |
| 677: | } |
| 678: | |
| 679: | $folders = array(); |
| 680: | if (LC_NAMESPACE == '') { |
| 681: | |
| 682: | $folders = array( |
| 683: | APP_ROOT => $appRoot, |
| 684: | ROOT => $root |
| 685: | ); |
| 686: | } |
| 687: | |
| 688: | if (isset($lc_sites) && is_array($lc_sites) && count($lc_sites)) { |
| 689: | if (array_key_exists(LC_NAMESPACE, $lc_sites)) { |
| 690: | |
| 691: | $folders = array( |
| 692: | APP_ROOT.$lc_sites[LC_NAMESPACE]._DS_ => $appRoot . $lc_sites[LC_NAMESPACE] . _DS_, |
| 693: | APP_ROOT => $appRoot, |
| 694: | ROOT => $root |
| 695: | ); |
| 696: | } |
| 697: | } |
| 698: | |
| 699: | |
| 700: | |
| 701: | foreach ($folders as $key => $value) { |
| 702: | if ($key === ROOT && substr($file, 0, 7) === 'helpers') { |
| 703: | $fileWithPath = LIB . $file; |
| 704: | $libHelper = true; |
| 705: | } else { |
| 706: | $fileWithPath = $key . $file; |
| 707: | $libHelper = false; |
| 708: | } |
| 709: | |
| 710: | if (is_file($fileWithPath) && file_exists($fileWithPath)) { |
| 711: | if ($libHelper === false) { |
| 712: | $fileWithPath = $value . $file; |
| 713: | } |
| 714: | |
| 715: | return $fileWithPath; |
| 716: | } |
| 717: | |
| 718: | if ($recursive == false) { |
| 719: | break; |
| 720: | } |
| 721: | } |
| 722: | |
| 723: | if (strstr($_SERVER['PHP_SELF'], APP_DIR)) { |
| 724: | if ($recursive == true) { |
| 725: | if ($root === ROOT && substr($file, 0, 7) === 'helpers') { |
| 726: | $file = LIB . $file; |
| 727: | } else { |
| 728: | $file = $root . $file; |
| 729: | } |
| 730: | } else { |
| 731: | $file = $root . $file; |
| 732: | } |
| 733: | |
| 734: | if (is_file($file) && file_exists($file)) { |
| 735: | return $file; |
| 736: | } |
| 737: | } |
| 738: | |
| 739: | return ''; |
| 740: | } |
| 741: | |
| 742: | |
| 743: | |
| 744: | |
| 745: | |
| 746: | function _host() |
| 747: | { |
| 748: | if (isset($_SERVER['HTTP_HOST'])) { |
| 749: | return $_SERVER['HTTP_HOST']; |
| 750: | } |
| 751: | |
| 752: | if (isset($_SERVER['SERVER_NAME'])) { |
| 753: | return $_SERVER['SERVER_NAME']; |
| 754: | } |
| 755: | |
| 756: | return _env('host'); |
| 757: | } |
| 758: | |
| 759: | |
| 760: | |
| 761: | |
| 762: | |
| 763: | |
| 764: | |
| 765: | |
| 766: | function _cfg($key, $value = '') |
| 767: | { |
| 768: | if (strrpos($key, 'lc_') === 0) { |
| 769: | $key = substr($key, 3); |
| 770: | } |
| 771: | |
| 772: | $key = 'lc_' . $key; |
| 773: | |
| 774: | return count(func_get_args()) == 2 ? __dotNotationToArray($key, 'global', $value) : __dotNotationToArray($key, 'global'); |
| 775: | } |
| 776: | |
| 777: | |
| 778: | |
| 779: | |
| 780: | |
| 781: | |
| 782: | |
| 783: | |
| 784: | function _cfgOption($name, $key) |
| 785: | { |
| 786: | $config = _cfg($name); |
| 787: | |
| 788: | return isset($config[$key]) ? $config[$key] : null; |
| 789: | } |
| 790: | |
| 791: | |
| 792: | |
| 793: | |
| 794: | |
| 795: | |
| 796: | |
| 797: | |
| 798: | function _p($name = 'env') |
| 799: | { |
| 800: | if ($name == 'env') { |
| 801: | return __env(); |
| 802: | } |
| 803: | |
| 804: | global $argv; |
| 805: | |
| 806: | if (PHP_SAPI == 'cli' && isset($argv[0]) && stripos($argv[0], 'lucidframe') !== false) { |
| 807: | |
| 808: | $env = _cfg('env'); |
| 809: | } elseif (PHP_SAPI == 'cli' || stripos($_SERVER['REQUEST_URI'], 'tests/') !== false) { |
| 810: | |
| 811: | |
| 812: | $env = 'test'; |
| 813: | _cfg('env', $env); |
| 814: | } else { |
| 815: | |
| 816: | $env = _cfg('env'); |
| 817: | } |
| 818: | |
| 819: | if (!in_array($env, __envList())) { |
| 820: | die(sprintf('Wrong environment configuration. Use "%s" or "%s" or "%s" or "%s".', ENV_DEV, ENV_STAGING, ENV_PROD, ENV_TEST)); |
| 821: | } |
| 822: | |
| 823: | $param = include(INC . 'parameter/' . $env . '.php'); |
| 824: | |
| 825: | return __dotNotationToArray($name, $param); |
| 826: | } |
| 827: | |
| 828: | |
| 829: | |
| 830: | |
| 831: | |
| 832: | |
| 833: | |
| 834: | |
| 835: | function _g($key, $value = '') |
| 836: | { |
| 837: | if (empty($key)) { |
| 838: | return null; |
| 839: | } |
| 840: | |
| 841: | if (count(func_get_args()) == 2) { |
| 842: | return __dotNotationToArray($key, 'global', $value); |
| 843: | } else { |
| 844: | return __dotNotationToArray($key); |
| 845: | } |
| 846: | } |
| 847: | |
| 848: | |
| 849: | |
| 850: | |
| 851: | |
| 852: | |
| 853: | |
| 854: | function _env($name, $default = '') |
| 855: | { |
| 856: | global $lc_envParameters; |
| 857: | |
| 858: | if ($lc_envParameters === null) { |
| 859: | $files = array( |
| 860: | INC . 'parameter/env.inc', |
| 861: | INC . 'parameter/parameter.env.inc', |
| 862: | ); |
| 863: | |
| 864: | foreach ($files as $file) { |
| 865: | if (is_file($file) && file_exists($file)) { |
| 866: | $lc_envParameters = include($file); |
| 867: | break; |
| 868: | } |
| 869: | } |
| 870: | } |
| 871: | |
| 872: | $value = __dotNotationToArray($name, $lc_envParameters); |
| 873: | |
| 874: | return $value ?: $default; |
| 875: | } |
| 876: | |
| 877: | |
| 878: | |
| 879: | |
| 880: | |
| 881: | function _baseUrlWithProtocol() |
| 882: | { |
| 883: | $baseUrl = _cfg('baseURL'); |
| 884: | $protocol = _cfg('ssl') ? 'https' : 'http'; |
| 885: | |
| 886: | if (PHP_SAPI == 'cli') { |
| 887: | $base = trim(_p('siteDomain'), '/'); |
| 888: | } else { |
| 889: | $base = strtolower($protocol) . '://'; |
| 890: | $base .= $_SERVER['HTTP_HOST']; |
| 891: | } |
| 892: | |
| 893: | if ($baseUrl) { |
| 894: | $base .= '/' . $baseUrl; |
| 895: | } |
| 896: | |
| 897: | return $base; |
| 898: | } |
| 899: | |
| 900: | |
| 901: | |
| 902: | |
| 903: | |
| 904: | |
| 905: | function _baseDirs($subDir = '') |
| 906: | { |
| 907: | $folders = array(); |
| 908: | |
| 909: | $namespace = LC_NAMESPACE; |
| 910: | if (!empty($_GET['lc_namespace'])) { |
| 911: | $namespace = $_GET['lc_namespace']; |
| 912: | } |
| 913: | |
| 914: | $sites = _cfg('sites'); |
| 915: | if (count($sites) && array_key_exists($namespace, $sites)) { |
| 916: | $folders[] = rtrim(APP_ROOT . $sites[$namespace] . _DS_ . $subDir, _DS_) . _DS_; |
| 917: | } |
| 918: | |
| 919: | $folders[] = rtrim(APP_ROOT . $subDir, _DS_) . _DS_; |
| 920: | $folders[] = rtrim(LIB . $subDir, _DS_) . _DS_; |
| 921: | |
| 922: | return $folders; |
| 923: | } |
| 924: | |
| 925: | |
| 926: | |
| 927: | |
| 928: | |
| 929: | |
| 930: | |
| 931: | |
| 932: | |
| 933: | function _log($msg, $file = '', $type = 3) |
| 934: | { |
| 935: | if ($file) { |
| 936: | $file = $file . '-'. date('Ymd') . '.log'; |
| 937: | } else { |
| 938: | $file = 'log-'. date('Ymd') . '.log'; |
| 939: | } |
| 940: | $file = LOG . $file; |
| 941: | $file = substr($file, 0, strrpos($file, '.log')); |
| 942: | $file .= '-' . __env(); |
| 943: | if (strtolower(php_sapi_name()) == 'cli') { |
| 944: | $file .= '.cli'; |
| 945: | } |
| 946: | $file .= '.log'; |
| 947: | |
| 948: | if (is_array($msg)) { |
| 949: | if (isset($msg['message'])) { |
| 950: | $msg = $msg['message'] . ' in ' . $msg['file'] . ' on line ' . $msg['line']; |
| 951: | } else { |
| 952: | $msg = print_r($msg, true); |
| 953: | } |
| 954: | } |
| 955: | |
| 956: | $msg = '[' . date('Y-m-d H:i:s') . '] : ' . trim($msg) . PHP_EOL; |
| 957: | |
| 958: | return error_log($msg, $type, $file); |
| 959: | } |
| 960: | |
| 961: | |
| 962: | __prerequisite(); |
| 963: | |