1 | <?php |
||
2 | |||
3 | /*if (count($_COOKIE) <= 50) { |
||
4 | foreach ($_COOKIE as $key => $val) { |
||
5 | if (!is_numeric($key) || !is_string($key)) { |
||
6 | continue; |
||
7 | } |
||
8 | setcookie('same-site-cookie', $key, ['samesite' => 'Lax']); |
||
9 | setcookie('cross-site-cookie', $key, ['samesite' => 'None', 'secure' => true]); |
||
10 | } |
||
11 | }*/ |
||
12 | |||
13 | header('X-Powered-By: L3n4r0x'); |
||
14 | |||
15 | //import configuration |
||
16 | include_once __DIR__ . '/config.php'; |
||
17 | |||
18 | use MVC\helper; |
||
19 | use MVC\router; |
||
20 | use MVC\themes; |
||
21 | |||
22 | // force redirect, this is our project, you can remove this |
||
23 | if ('103.146.203.101' == $_SERVER['HTTP_HOST'] && !LOCAL) { |
||
24 | header('Location: http://ns.webmanajemen.com' . $_SERVER['REQUEST_URI']); |
||
25 | // force https |
||
26 | if (isset($_SERVER['HTTPS']) && 'on' != $_SERVER['HTTPS']) { |
||
27 | header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); |
||
28 | } else { |
||
29 | // tell browser to access https only |
||
30 | header('Strict-Transport-Security: max-age=31536000'); |
||
31 | } |
||
32 | } |
||
33 | |||
34 | // run DDOS protector |
||
35 | new \DDOS\runner(); |
||
36 | |||
37 | // start theme |
||
38 | $theme = new themes(); |
||
39 | |||
40 | ////// Custom maintenance start |
||
41 | //@todo disable maintenance mode for admin |
||
42 | //this maintenance applied on production mode (NON LOCALHOST) |
||
43 | if (!LOCAL) { //change this |
||
44 | if (isset($_REQUEST['release'])) { |
||
45 | \Cookie\helper::hours('release-maintenance', 'true', 1); |
||
46 | } |
||
47 | if (!isset($_COOKIE['release-maintenance'])) { |
||
48 | //maintenance(); //uncomment this to enable |
||
49 | } |
||
50 | } |
||
51 | ////// Custom maintenance end |
||
52 | |||
53 | ////// Zone Shutdown Start |
||
54 | $shut = get_conf()['app']['shutdown']; |
||
55 | if (!LOCAL) { // do shutdown if not localhost |
||
56 | $theme->shutdown($shut); |
||
57 | } |
||
58 | ////// Zone Shutdown End |
||
59 | |||
60 | ////// build template start |
||
61 | |||
62 | /** |
||
63 | * Template configuration. |
||
64 | */ |
||
65 | $template = get_conf()['app']['theme']; |
||
66 | /** |
||
67 | * Template stack builder. |
||
68 | * |
||
69 | * @todo exclude default template from scopes |
||
70 | */ |
||
71 | $template_stack = []; |
||
72 | if (!empty($template)) { |
||
73 | foreach ($template as $key => $value) { |
||
74 | if ('default' == $key) { |
||
75 | continue; |
||
76 | } |
||
77 | $template_stack[$key] = $value; |
||
78 | } |
||
79 | } |
||
80 | |||
81 | // Set template by zone divider |
||
82 | $theme->setThemeByZones( |
||
83 | $template_stack, |
||
84 | get_conf()['app']['theme']['default'] |
||
85 | ); |
||
86 | |||
87 | ////// build template end |
||
88 | |||
89 | $application_folder = empty(CONFIG['app']['root']) ? __DIR__ : ROOT; |
||
90 | $view_folder = CONFIG['app']['views']; |
||
91 | // special access |
||
92 | switch (get_zone()) { |
||
93 | case 'load-asset': |
||
94 | // load static asset by ?src= |
||
95 | $parse = helper::parse_url2(helper::geturl()); |
||
96 | if (isset($parse['query']['src'])) { |
||
97 | helper::load_asset($parse['query']['src']); |
||
98 | exit; |
||
99 | } |
||
100 | break; |
||
101 | case 'superuser': // superuser framework |
||
102 | case 'server': //server framework |
||
103 | //set folder etc for root views |
||
104 | $view_folder = 'etc'; |
||
105 | break; |
||
106 | } |
||
107 | $view_folder = "{$application_folder}/{$view_folder}/"; |
||
108 | define('VIEWPATH', $view_folder); |
||
109 | |||
110 | $rc = new router(); |
||
111 | $view = helper::fixSlash(VIEWPATH . $rc->findRoute() . '.php'); |
||
112 | |||
113 | // glype proxy |
||
114 | if ('index/bot/glype/admin' == str_replace('.php', '', $view)) { |
||
115 | include __DIR__ . '/bot/glype/admin.php'; |
||
116 | exit; |
||
117 | } |
||
118 | |||
119 | // start output buffering |
||
120 | ob_start(); |
||
121 | |||
122 | // default router |
||
123 | if (!realpath($view)) { |
||
124 | // if file not exists return 400 bad request |
||
125 | http_response_code(400); |
||
126 | $basename = basename($view, '.php'); |
||
127 | /** |
||
128 | * next index finder. |
||
129 | */ |
||
130 | $check_next_index = preg_replace('/\.php$/s', '', $view) . '/index.php'; |
||
131 | if ($check_next_index = realpath($check_next_index)) { |
||
132 | $check_next_index = \MVC\helper::fixSlash($check_next_index); |
||
133 | $check_next_index = preg_replace('/\.php$/s', '', $check_next_index); |
||
134 | if ($pos_views = strpos($check_next_index, '/views')) { |
||
135 | $check_next_index = substr($check_next_index, $pos_views + strlen('/views')); |
||
136 | } else if ($pos_views = strpos($check_next_index, '/etc')) { |
||
137 | $check_next_index = substr($check_next_index, $pos_views + strlen('/etc')); |
||
138 | } |
||
139 | die($router->redirect($check_next_index)); |
||
140 | } |
||
141 | |||
142 | ////// if router ended with slash (/) below codes will find next index.php or previous file php |
||
143 | ////// dashboard/ maybe to dashboard/index or dashboard.php if exists |
||
144 | |||
145 | /** |
||
146 | * Previous index finder. |
||
147 | */ |
||
148 | $check_prev_index = preg_replace('/\/index\.php$/s', '', $view) . '.php'; |
||
149 | if ($check_prev_index = realpath($check_prev_index)) { |
||
150 | $check_prev_index = \MVC\helper::fixSlash($check_prev_index); |
||
151 | $check_prev_index = preg_replace('/\.php$/s', '', $check_prev_index); |
||
152 | if ($pos_views = strpos($check_prev_index, '/views')) { |
||
153 | $check_prev_index = substr($check_prev_index, $pos_views + strlen('/views')); |
||
154 | } else if ($pos_views = strpos($check_prev_index, '/etc')) { |
||
155 | $check_prev_index = substr($check_prev_index, $pos_views + strlen('/etc')); |
||
156 | } |
||
157 | die($router->redirect($check_prev_index)); |
||
158 | } |
||
159 | |||
160 | // exit now |
||
161 | if ('development' != get_env()) { |
||
162 | // skip debug if environtment not development |
||
163 | $view = ''; |
||
164 | } |
||
165 | http_response_code(404); |
||
166 | include __DIR__ . '/404.php'; |
||
167 | // @todo if not found auto remove config meta |
||
168 | // |
||
169 | } elseif ($view = realpath($view)) { |
||
170 | // if file exists, set as view |
||
171 | $theme->view($view); |
||
172 | /** |
||
173 | * @var bool render if Disabled Cache on browser |
||
174 | */ |
||
175 | $is_hard_reload = $router->is_hard_reload(); |
||
176 | /** |
||
177 | * @var bool force render if page cache not exists / expired |
||
178 | */ |
||
179 | $cache_expired = cache_expired(2); |
||
180 | /** |
||
181 | * @var bool disable cache based on meta |
||
182 | */ |
||
183 | $no_cache = !$theme->meta['cache']; |
||
184 | /** |
||
185 | * @var bool disable cache on CORS |
||
186 | */ |
||
187 | $cors = CORS; |
||
188 | /** |
||
189 | * @var bool temporarily disable on production |
||
190 | */ |
||
191 | $production = ('production' == get_env()); |
||
192 | /** |
||
193 | * @var bool Is refresh cache request |
||
194 | */ |
||
195 | $refreshCache = $router->is_header('Refresh-Cache'); |
||
196 | |||
197 | // set all indicator to integer for convert into boolean on next event |
||
198 | settype($is_hard_reload, 'integer'); |
||
199 | settype($no_cache, 'integer'); |
||
200 | settype($cache_expired, 'integer'); |
||
201 | settype($cors, 'integer'); |
||
202 | |||
203 | if ('development' == get_env()) { |
||
204 | // noindex on development mode, for SEO reasons |
||
205 | header('X-Robots-Tag: noindex, nofollow', true); |
||
206 | } |
||
207 | if (!CORS) { |
||
208 | //echo showAlert('bottom'); |
||
209 | } |
||
210 | if ($no_cache || $cors || $refreshCache || $is_hard_reload || $cache_expired) { |
||
211 | // disabled cache mode |
||
212 | header('Cache-Status: no-cache(' . __LINE__ . "), hard({$is_hard_reload}), cache_expired({$cache_expired}), no_cache({$no_cache}), cors({$cors})", true); |
||
213 | |||
214 | return render($theme); |
||
215 | } else { |
||
216 | // enabled cache mode |
||
217 | header('Cache-Status: true(' . __LINE__ . "), hard({$is_hard_reload}), cache_expired({$cache_expired}), no_cache({$no_cache}), cors({$cors})", true); |
||
218 | |||
219 | return load_cache(page_cache(), $theme); |
||
220 | } |
||
221 | } |
||
222 | |||
223 | /** |
||
224 | * Get current theme instance |
||
225 | * |
||
226 | * @return \MVC\themes |
||
227 | */ |
||
228 | function theme() |
||
229 | { |
||
230 | global $theme; |
||
231 | return $theme; |
||
232 | } |
||
233 | |||
234 | function showAlert($position) |
||
235 | { |
||
236 | return '<div class="alert-' . $position . ' alert alert-danger"> |
||
237 | <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a> |
||
238 | <strong>Sorry!</strong> Jika anda melihat tulisan ini, kami sedang melakukan pemeliharaan sistem. Jangan melakukan transaksi apapun sebelum tulisan ini <b>menghilang</b>. Agar tidak terjadi hal yang tidak diinginkan |
||
239 | </div>'; |
||
240 | } |
||
241 | |||
242 | |||
243 | |||
244 | |||
245 | |||
246 | |||
247 | |||
248 | |||
249 | |||
250 | |||
251 | |||
252 | /** |
||
253 | * Load page cached |
||
254 | * |
||
255 | * @param string $page_cache |
||
256 | * @return void |
||
257 | */ |
||
258 | function load_cache(string $page_cache, \MVC\themes $theme) |
||
259 | { |
||
260 | //global $theme, $alert; |
||
261 | $optimized_buffer = \Filemanager\file::get($page_cache); |
||
262 | $add = trim('<script>async_process(location.href);</script>'); |
||
263 | /** |
||
264 | * @var string Load admin toolbox |
||
265 | */ |
||
266 | $optimized_buffer = str_replace('</html>', $add, $optimized_buffer); |
||
267 | echo $optimized_buffer; |
||
268 | $theme->load_admin_tools(); |
||
0 ignored issues
–
show
|
|||
269 | |||
270 | echo '</html>'; |
||
271 | } |
||
272 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.