JuKu /
JuKuCMS
| 1 | <?php |
||
| 2 | |||
| 3 | $start_time = microtime(true); |
||
| 4 | |||
| 5 | //define root path |
||
| 6 | define('ROOT_PATH', dirname(__FILE__) . "/"); |
||
| 7 | |||
| 8 | error_reporting(E_ALL); |
||
| 9 | |||
| 10 | //start session |
||
| 11 | session_start(); |
||
| 12 | |||
| 13 | require("system/core/init.php"); |
||
| 14 | |||
| 15 | //reset OpCache in debug mode |
||
| 16 | if (CLEAR_OP_CACHE) { |
||
| 17 | //http://php.net/manual/en/function.opcache-reset.php |
||
| 18 | //http://php.net/manual/en/function.opcache-invalidate.php |
||
| 19 | opcache_reset(); |
||
| 20 | } |
||
| 21 | |||
| 22 | //throw event |
||
| 23 | Events::throwEvent("start_session"); |
||
| 24 | |||
| 25 | //get domain |
||
| 26 | $domain = Domain::getCurrent(); |
||
| 27 | |||
| 28 | //check, if redirect is enabled |
||
| 29 | if ($domain->isRedirectUrl()) { |
||
| 30 | if ($domain->getRedirectCode() == 301) { |
||
| 31 | header("HTTP/1.1 301 Moved Permanently"); |
||
| 32 | } else if ($domain->getRedirectCode() == 302) { |
||
| 33 | header("HTTP/1.1 302 Found"); |
||
| 34 | } |
||
| 35 | |||
| 36 | header("Location: " + $domain->getRedirectUrl()); |
||
| 37 | header("Connection: close"); |
||
| 38 | |||
| 39 | exit; |
||
| 40 | } |
||
| 41 | |||
| 42 | //check, if gzip compression is enabled |
||
| 43 | if (Settings::get("gzip_compression", false)) { |
||
| 44 | //use gzip compression |
||
| 45 | ob_start(); |
||
| 46 | } |
||
| 47 | |||
| 48 | //TODO: remove this code in production |
||
| 49 | if (isset($_REQUEST['clear_cache'])) { |
||
| 50 | //clear cache |
||
| 51 | Cache::clear(); |
||
| 52 | |||
| 53 | //clear gettext cache |
||
| 54 | PHPUtils::clearGetTextCache(); |
||
| 55 | |||
| 56 | echo "Clear cache!<br />"; |
||
| 57 | } |
||
| 58 | |||
| 59 | //create new instance of registry |
||
| 60 | $registry = Registry::singleton(); |
||
| 61 | |||
| 62 | //get domain |
||
| 63 | $domain = new Domain(); |
||
| 64 | $domain->load(); |
||
| 65 | $registry->storeObject("domain", $domain); |
||
| 66 | $registry->setSetting("domain_name", DomainUtils::getCurrentDomain()); |
||
| 67 | |||
| 68 | $mobile_detection_start_time = microtime(true); |
||
| 69 | |||
| 70 | //mobile detection |
||
| 71 | $registry->setSetting("isMobile", Browser::isMobile()); |
||
| 72 | $registry->setSetting("isDesktop", !Browser::isMobile()); |
||
| 73 | |||
| 74 | $mobile_detection_end_time = microtime(true); |
||
| 75 | $mobile_detection_exec_time = $mobile_detection_end_time - $mobile_detection_start_time; |
||
| 76 | |||
| 77 | //get prefered language |
||
| 78 | $registry->setSetting("pref_lang", Lang::getPrefLangToken()); |
||
| 79 | $registry->setSetting("lang_token", Lang::getLangToken(Lang::listSupportedLangTokens())); |
||
| 80 | |||
| 81 | //set default language domain |
||
| 82 | Translator::getBackend()->setDefaultDomain("core"); |
||
| 83 | |||
| 84 | //get user |
||
| 85 | $user = User::current(); |
||
| 86 | $registry->storeObject("user", $user); |
||
| 87 | |||
| 88 | //get my groups |
||
| 89 | $groups = new Groups(); |
||
| 90 | $groups->loadMyGroups($user->getID()); |
||
| 91 | $registry->storeObject("groups", $groups); |
||
| 92 | |||
| 93 | //get permission checker |
||
| 94 | $registry->storeObject("permission_checker", PermissionChecker::current()); |
||
| 95 | |||
| 96 | $page = new Page(); |
||
| 97 | $page->load(); |
||
| 98 | |||
| 99 | //load folder |
||
| 100 | $folder = new Folder($page->getFolder()); |
||
| 101 | $folder->load($page->getFolder()); |
||
| 102 | |||
| 103 | //check, if user has folder permissions |
||
| 104 | if (!$folder->checkPermissions(PermissionChecker::current())) { |
||
| 105 | //user dont has permissions to access folder |
||
| 106 | $page->load("error403"); |
||
| 107 | } |
||
| 108 | |||
| 109 | //set folder |
||
| 110 | $registry->setSetting("folder", $page->getFolder()); |
||
| 111 | |||
| 112 | //create page type |
||
| 113 | $page_type = PageLoader::loadInstance($page->getPageType()); |
||
| 114 | $page_type->setPage($page); |
||
| 115 | |||
| 116 | //check, if user has page permissions |
||
| 117 | if (!$page_type->checkPermissions(PermissionChecker::current())) { |
||
| 118 | //user dont has custom permissions to access page |
||
| 119 | $page->load("error403"); |
||
| 120 | |||
| 121 | //create page type |
||
| 122 | $page_type = PageLoader::loadInstance($page->getPageType()); |
||
| 123 | $page_type->setPage($page); |
||
| 124 | } |
||
| 125 | |||
| 126 | //check page rights |
||
| 127 | $page_rights = new PageRights($page); |
||
| 128 | $page_rights->load(); |
||
| 129 | |||
| 130 | //permission to see a published page |
||
| 131 | $page_permission = "see"; |
||
| 132 | |||
| 133 | //check, if page is not published |
||
| 134 | if (!$page->isPublished()) { |
||
| 135 | //another permission is required, because page is not published yet |
||
| 136 | $page_permission = "see_draft"; |
||
| 137 | } |
||
| 138 | |||
| 139 | if (!$page_rights->checkRights($user->getID(), $groups->listGroupIDs(), $page_permission)) { |
||
| 140 | //user dont has custom permissions to access page |
||
| 141 | $page->load("error403"); |
||
| 142 | |||
| 143 | //create page type |
||
| 144 | $page_type = PageLoader::loadInstance($page->getPageType()); |
||
| 145 | $page_type->setPage($page); |
||
| 146 | } |
||
| 147 | |||
| 148 | $registry->storeObject("page", $page); |
||
| 149 | $registry->storeObject("folder", $folder); |
||
| 150 | $registry->storeObject("page_type", $page_type); |
||
| 151 | |||
| 152 | //set content type |
||
| 153 | header("Content-Type: " . $page_type->getContentType()); |
||
| 154 | $page_type->setCustomHeader(); |
||
| 155 | |||
| 156 | //get current style |
||
| 157 | $registry->setSetting("current_style_name", StyleController::getCurrentStyle($registry, $page, $page_type)); |
||
| 158 | |||
| 159 | |||
| 160 | //set login & logout url |
||
| 161 | $redirect_url = urlencode(DomainUtils::getURL()); |
||
| 162 | |||
| 163 | if (isset($_REQUEST['redirect_url']) && !empty($_REQUEST['redirect_url'])) { |
||
| 164 | $redirect_url = $_REQUEST['redirect_url']; |
||
| 165 | } |
||
| 166 | |||
| 167 | $registry->setSetting("login_url", DomainUtils::getBaseURL() . "/" . Settings::get("login_page", "login") . "?action=login&redirect_url=" . $redirect_url); |
||
| 168 | $registry->setSetting("logout_url", DomainUtils::getBaseURL() . "/" . Settings::get("logout_page", "logout") . "?csrf_token=" . urlencode(Security::getCSRFToken())); |
||
| 169 | |||
| 170 | //get (global) main menu |
||
| 171 | $menuID = (int) ($page->getGlobalMenuID() != -1) ? $page->getGlobalMenuID() : ($folder->hasCustomMainMenu() ? $folder->getMainMenu() : Settings::get("main_menuID")); |
||
| 172 | $menu = new Menu($menuID, "menu"); |
||
| 173 | $menu->loadMenu($menuID, $folder); |
||
| 174 | $registry->storeObject("main_menu", $menu); |
||
| 175 | |||
| 176 | //get (global) main menu |
||
| 177 | $localMenuID = (int) ($page->getLocalMenuID() != -1) ? $page->getLocalMenuID() : ($folder->hasCustomLocalMenu() ? $folder->getLocalMenu() : Settings::get("local_menuID")); |
||
| 178 | $localMenu = new Menu($menuID, "localmenu"); |
||
| 179 | $localMenu->loadMenu($localMenuID, $folder); |
||
| 180 | $registry->storeObject("local_menu", $localMenu); |
||
| 181 | |||
| 182 | $registry->setSetting("header", ""); |
||
| 183 | $registry->setSetting("footer", ""); |
||
| 184 | |||
| 185 | Events::throwEvent("Show page", array( |
||
| 186 | 'registry' => &$registry |
||
| 187 | )); |
||
| 188 | |||
| 189 | //show page here |
||
| 190 | if ($page_type->showDesign()) { |
||
| 191 | //show page with design |
||
| 192 | StyleController::showPage($registry, $page, $page_type); |
||
| 193 | } else { |
||
| 194 | //only show content |
||
| 195 | echo $page_type->getContent(); |
||
| 196 | |||
| 197 | if ($page_type->exitAfterOutput()) { |
||
| 198 | //flush gzip cache |
||
| 199 | ob_end_flush(); |
||
| 200 | |||
| 201 | exit; |
||
| 202 | } |
||
| 203 | } |
||
| 204 | |||
| 205 | $end_time = microtime(true); |
||
| 206 | $exec_time = $end_time - $start_time; |
||
| 207 | |||
| 208 | if ($page_type->showHTMLComments()) { |
||
| 209 | //benchmark code |
||
| 210 | if (ACTIVATE_BENCHMARK) { |
||
| 211 | echo "<!-- page was generated in " . $exec_time . " seconds -->\n"; |
||
| 212 | echo "<!-- mobile detection executed in " . $mobile_detection_exec_time . " seconds, isMobile: " . ($registry->getSetting("isMobile") ? "true" : "false") . " -->\n"; |
||
| 213 | |||
| 214 | //benchmark dwoo template engine |
||
| 215 | foreach (DwooTemplate::listFileBenchmark() as $file=>$exec_time) { |
||
| 216 | echo "<!-- Dwoo benchmark file '" . $file . "': " . $exec_time . " seconds -->\n"; |
||
| 217 | } |
||
| 218 | |||
| 219 | foreach (CSSBuilder::listBenchmarks() as $key=>$exec_time) { |
||
| 220 | echo "<!-- css generation of file '" . $key . "': " . $exec_time . " seconds -->\n"; |
||
| 221 | } |
||
| 222 | |||
| 223 | foreach (JSBuilder::listBenchmarks() as $key=>$exec_time) { |
||
| 224 | echo "<!-- js generation of file '" . $key . "': " . $exec_time . " seconds -->\n"; |
||
| 225 | } |
||
| 226 | } |
||
| 227 | |||
| 228 | if (DEBUG_MODE) { |
||
| 229 | echo "<!-- userID: " . User::current()->getID() . ", username: " . User::current()->getUsername() . " -->\n"; |
||
| 230 | echo "<!-- " . Database::getInstance()->countQueries() . " sql queries executed -->\n"; |
||
| 231 | echo "<!-- pref_lang: " . $registry->getSetting("pref_lang") . " -->\n"; |
||
| 232 | echo "<!-- lang_token: " . $registry->getSetting("lang_token") . " -->\n"; |
||
| 233 | |||
| 234 | if (DEBUG_SQL_QUERIES) { |
||
| 235 | foreach (Database::getInstance()->listQueryHistory() as $query_array) { |
||
| 236 | echo "<!-- query: " . $query_array['query'] . " -->\n"; |
||
| 237 | } |
||
| 238 | } |
||
| 239 | } |
||
| 240 | } |
||
| 241 | |||
| 242 | //flush gzip cache |
||
| 243 | ob_end_flush(); |
||
| 244 | ob_end_flush(); |
||
| 245 | flush(); |
||
| 246 | |||
| 247 | //update online list |
||
| 248 | User::current()->updateOnlineList(); |
||
| 249 | |||
| 250 | //https://stackoverflow.com/questions/4806637/continue-processing-after-closing-connection |
||
| 251 | ignore_user_abort(true); |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 252 | |||
| 253 | //execute tasks |
||
| 254 | if (!Settings::get("cronjon_enabled", true)) { |
||
| 255 | Tasks::schedule(Settings::get("max_tasks_on_site", 3)); |
||
| 256 | } |
||
| 257 | |||
| 258 | ?> |