NxTIC/subDir/public_html/index.php

145 lines
3.9 KiB
PHP

<?php define('__ROOT__', dirname(dirname(__FILE__)) );
require_once __ROOT__.'/autoloader.php';
use \router\core\Router;
use \api\core\ModuleRequest;
use \api\core\ModuleResponse;
use \manager\ManagerError;
use \database\core\Database;
use \api\core\Checker;
use \manager\MenuManager;
/*******************************************/
/* DEBUGGER */
/*******************************************/
debug();
/*******************************************/
define('__REDIRECT__', 'Location: '.__SERVER_HOST__.'/dashboard/');
/* [x] Gestion des utilisateurs
=========================================================*/
/* (1) Valeurs par defaut */
if( !isset($_SESSION['userid']) ) $_SESSION['userid'] = null;
if( !isset($_SESSION['username']) ) $_SESSION['username'] = null;
if( !isset($_SESSION['permission']) ) $_SESSION['permission'] = [];
/* (2) Gestion de la connection */
$login_vars = isset($_POST['login-sub']);
$login_vars = $login_vars && isset($_POST['login']) && Checker::run('varchar(3,50)', $_POST['login']);
$login_vars = $login_vars && isset($_POST['password']) && Checker::run('text', $_POST['password']);
// Status de login
$_SESSION['login_status'] = 'no';
// Si les parametres de connection, on essaie de connecter
if( $login_vars ){
$login = new ModuleRequest('user/login', [ 'login' => $_POST['login'], 'password' => $_POST['password'] ]);
$login_ans = $login->dispatch();
// Si aucune erreur, on dit qu'on vient de se connecter
if( $login_ans->error == ManagerError::Success )
$_SESSION['login_status'] = 'logged';
else // Si on n'a pas les bonnes donnees
$_SESSION['login_status'] = 'error';
}
/* (3) Gestion de le deconnexion */
$logout_vars = isset($_POST['logout-sub']);
// Si on se deconnecte
if( $logout_vars ){
$logout = new ModuleRequest('user/logout');
$logout_ans = $logout->dispatch();
// Si aucune erreur, on dit qu'on vient de se deconnecter
if( $logout_ans->error == ManagerError::Success )
$_SESSION['login_status'] = 'unlogged';
}
/* [0] On initialise le routeur
===================================================*/
$R = new Router( $_GET['url'] );
/* (2) Gestion des SVG avec couleur modifiée */
// path/to/resource/filename@HEXADE.svg
$R->get('(.+)@([a-f0-9]{6})(\.svg)', function($matches){
$path = __PUBLIC__.'/'.$matches[0].$matches[2];
header('Content-Type: image/svg+xml');
// On crée la partie ajoutée
$stylesheet = "\n<style type='text/css'>\n";
$stylesheet .= "\t#stylisable{\n";
$stylesheet .= "\t\tfill: #".$matches[1]." !important;\n";
$stylesheet .= "\t\tfill-opacity: 1 !important;\n";
$stylesheet .= "\t}\n";
$stylesheet .= "</style></svg>";
// On récupère le fichier
$file = file_get_contents($path);
// On ajoute le style
$file = str_replace('</svg>', $stylesheet, $file);
echo $file;
});
/* [1] On cree les regles de routage
===================================================*/
// Racine -> page d'accueil
$R->get('/?', function(){ header(__REDIRECT__); });
/* [2] On recupere la liste des pages du site
=========================================================*/
$temporaryMenuInflater = new MenuManager();
$views = $temporaryMenuInflater->getCategories();
// nomPage/arg1/arg2 -> inclusion de la page
$R->get('(?:'.implode('|', $views).')(?:/[\w-]+)*/?', function(){ include __PUBLIC__.'/view.php'; });
// Api
$R->post('api(?:/(.*))?', function($url){
$request = ModuleRequest::fromPost($url, $_POST);
$answer = $request->dispatch();
// Si c'est une réponse
if( $answer instanceof ModuleResponse )
echo $answer->serialize();
});
// N'importe -> page d'accueil
$R->get('.+', function(){ header(__REDIRECT__); });
$R->post('.+', function(){ header(__REDIRECT__); });
/* [3] On lance le routeur
===================================================*/
$R->run();
?>