assign("SALT_CDN",SALT_PUBLIC); $template->assign("SALT_PUBLIC",SALT_PUBLIC); $template->assign("SALT_USER",SALT_USER); $template->assign("SALT_ADMIN",SALT_ADMIN); // Convert hidden URL to raw one $urls = Cache::read("urls"); $p = strtolower(gpc("p")); if (!empty($urls["/".$p])) $p = $urls["/".$p]; $n = preg_match_all("#[^/]+#", $p, $out); $p = $out[0]; // Admin part if ($n && $p[0] == SALT_ADMIN) { if (isset($p[1])) $template->assign("menu_where", $p[1]); else $template->assign("menu_where", ""); if (isset($p[2])) $template->assign("submenu_where", $p[2]); else $template->assign("submenu_where", ""); $template->assign("themes", Theme::get_themes()); if ($n <= 1) $page = require("admin/home.php"); else { if (isset($p[2])) $cmpstr = $p[1]."/".$p[2]; else $cmpstr = $p[1]; if (strpos($cmpstr, 'ex/') === 0) $page = require("admin/exercice.php"); else switch($cmpstr) { case "certificate": case "certificate/": case "certificate/newca": case "certificate/newca/": case "certificate/newclient": case "certificate/newclient/": case "certificate/deleteca": case "certificate/deleteca/": case "certificate/revoke": case "certificate/revoke/": case "certificate/get": case "certificate/get/": $page = require("admin/certificate.php"); break; case "chrono": case "chrono/": case "chrono/init": case "chrono/init/": case "chrono/start": case "chrono/start/": $page = require("admin/chrono.php"); break; case "exercices/import": case "exercices/import/": $page = require("admin/import_exercices.php"); break; // Theme case "themes": case "themes/": $page = require("admin/list_themes.php"); break; case "themes/import": case "themes/import/": $page = require("admin/import_themes.php"); break; case "themes/export": case "themes/export/": $page = require("admin/export_theme.php"); break; // Users case "teams": case "teams/": $page = require("admin/list_users.php"); break; case "teams/import": case "teams/import/": $page = require("admin/import_users.php"); break; case "teams/export": case "teams/export/": $page = require("admin/export_users.php"); break; } } } // Known users else if ($n && $p[0] == SALT_USER) { $connected = true; if ($n <= 1) { require("public/home.php"); $page = "teams/list"; } else { $TEAM = new Team($p[1]); $template->assign("my_team", $TEAM); $template->assign("themes", Theme::get_themes()); if ($n <= 2) $page = require("team/summary.php"); else { switch($p[2]) { case "me/": case "me": $page = require("team/me.php"); break; case "rank/": case "rank": $page = require("team/rank.php"); break; case "summary": case "summary/": $page = require("team/summary.php"); break; case "confirmation": $page = require("team/confirmation.php"); break; } // SALT/$team/$theme if (empty($page)) { $tmp = explode("-", $p[2]); $id = intval($tmp[0]); if ($id == 0) $page = "404"; else { try { $THEME = new Theme($id); unset($tmp, $id); $template->assign("cur_theme", $THEME); if ($n == 4 || ($n >= 5 && $p[4] == "submission")) $id_exo = $p[3]; else if ($n == 3) { foreach($THEME->get_exercices_ordered() as $exo) { if (! $exo->has_solved($TEAM)) break; } $id_exo = $exo->id; } $EXERCICE = new Exercice($id_exo, $THEME); $template->assign("cur_exercice", $EXERCICE); $page = require("team/exercice.php"); } catch(ExerciceNotFoundException $e) { $page = "404"; } catch(InvalidThemeException $e) { $page = "404"; } catch(ThemeNotFoundException $e) { $page = "404"; } } } } } } // Public part else { if ($n == 0) $page = require("public/home.php"); else if ($n == 1) { $TEAM = intval(substr($p[0], 0, strpos($p[0], "-"))); if (!empty($TEAM)) $page = require("public/score.php"); else $page = require("public/rank.php"); } } // No page here...? if (empty($page) || $page == "404" || ! file_exists(ONYX . "/tpl/bootstrap/".$page.".tpl")) { $template->assign("err", 404); $template->display("404.tpl"); } else $template->display($page.".tpl");