server/htdocs/index.php

266 lines
6.2 KiB
PHP

<?php
//Inclusion de l'API Onyx
require_once(trim(file_get_contents('./.onyx')));
define("SALT_PUBLIC", $VAR["prefix_public"]);
define("SALT_USER", $VAR["prefix_teams"]);
define("SALT_ADMIN", $VAR["prefix_admin"]);
//On active le débogage si l'on est sur le domaine de debug
//if ($_SERVER["SERVER_NAME"] == "localhost" || $_SERVER["SERVER_NAME"] == "fic" || $_SERVER["SERVER_NAME"] == "fic.nemunai.re" || $_SERVER["SERVER_NAME"] == "atlantis.chen.li")
define("DEBUG", true);
//Chargement de tout le nécessaire pour le site
require_once("common.php");
$template->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 if (!empty($p[1]) && empty($VAR["start_challenge"]))
{
$TEAM = new Team($p[1]);
$template->assign("my_team", $TEAM);
$template->assign("themes", Theme::get_themes());
require("team/me.php");
$page = "teams/lobby";
}
else if (!empty($p[1]) && time() > $VAR["end_challenge"])
{
$TEAM = new Team($p[1]);
$template->assign("my_team", $TEAM);
$template->assign("themes", Theme::get_themes());
$template->assign("rank", Team::get_top());
require("team/summary.php");
$page = "teams/end";
}
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 && $p[0] == "errors")
{
$template->assign("err", intval($p[1]));
$page = "err";
}
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("err.tpl");
}
else
$template->display($page.".tpl");