1 | <?php |
||
2 | |||
3 | /** |
||
4 | * Start system core |
||
5 | * |
||
6 | * @author Alexey Krupskiy <[email protected]> |
||
7 | * @link http://inji.ru/ |
||
8 | * @copyright 2015 Alexey Krupskiy |
||
9 | * @license https://github.com/injitools/cms-Inji/blob/master/LICENSE |
||
10 | */ |
||
11 | session_start(); |
||
12 | |||
13 | include_once INJI_SYSTEM_DIR . '/Inji/Inji.php'; |
||
14 | include_once INJI_SYSTEM_DIR . '/Inji/Router.php'; |
||
15 | include_once INJI_SYSTEM_DIR . '/Inji/Router/Folder.php'; |
||
16 | include_once INJI_SYSTEM_DIR . '/Inji/Router/Path.php'; |
||
17 | |||
18 | spl_autoload_register('Inji\Router::findClass'); |
||
19 | |||
20 | Inji\Router::addPath(INJI_SYSTEM_DIR . '/Inji/', 'Inji\\'); |
||
21 | Inji\Router::addPath(INJI_SYSTEM_DIR . '/modules/', 'Inji\\', 10); |
||
22 | Inji\Router::addPath(INJI_SYSTEM_DIR . '/modules/', 'Inji\\', 20, 1, ['models', 'objects', 'controllers']); |
||
23 | |||
24 | //load core |
||
25 | Inji::$inst = new Inji(); |
||
26 | Inji::$config = Inji\Config::system(); |
||
27 | Inji::$inst->listen('Config-change-system', 'systemConfig', function ($event) { |
||
28 | Inji::$config = $event['eventObject']; |
||
29 | return $event['eventObject']; |
||
30 | }); |
||
31 | |||
32 | |||
33 | putenv('COMPOSER_HOME=' . getcwd()); |
||
34 | putenv('COMPOSER_CACHE_DIR=' . getcwd() . DIRECTORY_SEPARATOR . 'cache/composer'); |
||
35 | Inji\ComposerCmd::check(); |
||
36 | if (!function_exists('idn_to_utf8')) { |
||
37 | Inji\ComposerCmd::requirePackage("mabrahamde/idna-converter", "dev-master", '.'); |
||
38 | |||
39 | function idn_to_utf8($domain) { |
||
40 | if (empty(Inji::$storage['IdnaConvert'])) { |
||
41 | Inji::$storage['IdnaConvert'] = new \idna_convert(array('idn_version' => 2008)); |
||
42 | } |
||
43 | return Inji::$storage['IdnaConvert']->decode($domain); |
||
44 | } |
||
45 | } |
||
46 | |||
47 | Inji\BowerCmd::check(); |
||
48 | |||
49 | if (file_exists('vendor/autoload.php')) { |
||
50 | include 'vendor/autoload.php'; |
||
51 | } |
||
52 | |||
53 | $domain = idn_to_utf8($_SERVER['SERVER_NAME']); |
||
54 | if (strpos($domain, 'www.') === 0) { |
||
55 | $domain = substr($domain, 4); |
||
56 | } |
||
57 | define('INJI_DOMAIN_NAME', $domain); |
||
58 | |||
59 | |||
60 | //Make default app params |
||
61 | $finalApp = [ |
||
62 | 'name' => INJI_DOMAIN_NAME, |
||
63 | 'dir' => INJI_DOMAIN_NAME, |
||
64 | 'installed' => false, |
||
65 | 'default' => true, |
||
66 | 'route' => INJI_DOMAIN_NAME, |
||
67 | ]; |
||
68 | Inji\App::$primary = Inji\App::$cur = new Inji\App($finalApp); |
||
69 | $apps = Inji\Apps\App::connection('injiStorage')->setDbOption('share', true)->getList(); |
||
70 | foreach ($apps as $app) { |
||
71 | if ($app->default) { |
||
72 | $finalApp = $app->_params; |
||
73 | } |
||
74 | if (preg_match("!{$app->route}!i", INJI_DOMAIN_NAME)) { |
||
75 | $finalApp = $app->_params; |
||
76 | break; |
||
77 | } |
||
78 | } |
||
79 | Inji\App::$cur = new Inji\App($finalApp); |
||
80 | $params = Inji\Tools::uriParse($_SERVER['REQUEST_URI']); |
||
81 | |||
82 | Inji\App::$cur->type = 'app'; |
||
83 | Inji\App::$cur->path = INJI_PROGRAM_DIR . '/' . Inji\App::$cur->dir; |
||
84 | Inji\App::$cur->params = $params; |
||
85 | Inji\App::$cur->config = Inji\Config::app(Inji\App::$cur); |
||
86 | if (!Inji\App::$cur->namespace) { |
||
87 | Inji\App::$cur->namespace = ucfirst(Inji\App::$cur->name); |
||
88 | } |
||
89 | Inji\App::$primary = Inji\App::$cur; |
||
90 | |||
91 | if (!empty($params[0]) && file_exists(INJI_SYSTEM_DIR . '/program/' . $params[0] . '/')) { |
||
92 | |||
93 | Inji\App::$primary->params = []; |
||
94 | |||
95 | Inji\App::$cur = new Inji\App(); |
||
96 | Inji\App::$cur->name = $params[0]; |
||
97 | Inji\App::$cur->namespace = 'Inji\\' . ucfirst($params[0]); |
||
98 | Inji\App::$cur->system = true; |
||
99 | Inji\App::$cur->staticPath = "/" . Inji\App::$cur->name . "/static"; |
||
100 | Inji\App::$cur->templatesPath = "/" . Inji\App::$cur->name . "/static/templates"; |
||
101 | Inji\App::$cur->path = INJI_SYSTEM_DIR . '/program/' . Inji\App::$cur->name; |
||
102 | Inji\App::$cur->type = 'app' . ucfirst(strtolower(Inji\App::$cur->name)); |
||
103 | Inji\App::$cur->installed = true; |
||
104 | Inji\App::$cur->params = array_slice($params, 1); |
||
105 | Inji\App::$cur->config = Inji\Config::app(Inji\App::$cur); |
||
106 | |||
107 | Inji::$inst->listen('Config-change-app-' . Inji\App::$primary->name, 'primaryAppConfig', function ($event) { |
||
108 | Inji\App::$primary->config = $event['eventObject']; |
||
109 | return $event['eventObject']; |
||
110 | }); |
||
111 | |||
112 | Inji\Router::addPath(Inji\App::$cur->path . '/objects/', Inji\App::$cur->namespace . '\\', 60); |
||
113 | Inji\Router::addPath(Inji\App::$cur->path . '/modules/', Inji\App::$cur->namespace . '\\', 70); |
||
114 | Inji\Router::addPath(Inji\App::$cur->path . '/modules/', Inji\App::$cur->namespace . '\\', 80, 2, ['models', 'objects', 'controllers']); |
||
115 | |||
116 | } |
||
117 | if (!empty(Inji\App::$primary->namespace)) { |
||
118 | Inji\Router::addPath(Inji\App::$primary->path . '/objects/', Inji\App::$primary->namespace . '\\', 30); |
||
119 | Inji\Router::addPath(Inji\App::$primary->path . '/modules/', Inji\App::$primary->namespace . '\\', 40); |
||
120 | Inji\Router::addPath(Inji\App::$primary->path . '/modules/', Inji\App::$primary->namespace . '\\', 50, 1, ['models', 'objects', 'controllers']); |
||
121 | } |
||
122 | Inji\App::$cur->log = new Inji\Log(); |
||
123 | Inji\App::$cur->log->run = defined('LOG_ENABLED'); |
||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
![]() |
|||
124 | Inji::$inst->listen('Config-change-app-' . Inji\App::$cur->name, 'curAppConfig', function ($event) { |
||
125 | Inji\App::$cur->config = $event['eventObject']; |
||
126 | return $event['eventObject']; |
||
127 | }); |
||
128 | $shareConfig = Inji\Config::share(); |
||
129 | if (empty($shareConfig['installed']) && Inji\App::$cur->name != 'setup' && (empty(Inji\App::$cur->params[0]) || Inji\App::$cur->params[0] != 'static')) { |
||
130 | Inji\Tools::redirect('/setup'); |
||
131 | } |
||
132 | Inji\Module::$cur = Inji\Module::resolveModule(Inji\App::$cur); |
||
133 | |||
134 | if (Inji\Module::$cur === null) { |
||
135 | INJI_SYSTEM_ERROR('Module not found', true); |
||
136 | } |
||
137 | |||
138 | Inji\Controller::$cur = Inji\Module::$cur->findController(); |
||
139 | if (Inji\Controller::$cur === null) { |
||
140 | INJI_SYSTEM_ERROR('Controller not found', true); |
||
141 | } |
||
142 | if (!empty(Inji\App::$primary->config['autoloadModules'])) { |
||
143 | foreach (Inji\App::$primary->config['autoloadModules'] as $module) { |
||
144 | Inji\App::$cur->$module; |
||
145 | } |
||
146 | } |
||
147 | if (Inji\App::$primary !== Inji\App::$cur) { |
||
148 | foreach (Inji\App::$cur->config['autoloadModules'] as $module) { |
||
149 | Inji\App::$cur->$module; |
||
150 | } |
||
151 | } |
||
152 | Inji\Controller::$cur->run(); |
||
153 |