Compare commits

..

No commits in common. "master" and "generic-view" have entirely different histories.

77 changed files with 3753 additions and 4028 deletions

View File

@ -1,96 +0,0 @@
<?php
namespace api\core;
use \error\core\Error;
use \error\core\Err;
use \http\core\HttpRequest;
use \api\core\Request;
class Loader{
/* (1) Build an API Request from the HTTP Request
*
* @uri<String> URI
*
* @return outName<outType> outDesc
*
---------------------------------------------------------*/
public static function remote($uri){
/* (1) Fetch HttpRequest correct data
---------------------------------------------------------*/
/* (1) Parse HttpRequest data because php doesn't parse it for non-POST HTTP method */
$httprequest = new HttpRequest();
/* (2) For later use -> replace default @_POST global */
$_POST = $httprequest->POST();
/* (3) Get @data from @_POST values */
$data = $_POST;
/* (2) Check if @path var is set
---------------------------------------------------------*/
/* (1) If is in @uri */
$pathInUrl = is_string($uri) && preg_match('#^/?([\w_-]+/[\w_-]+)(?:/?|/((?:\w+/)*(?:\w+/?)))$#', $uri, $uriMatches);
/* (2) Get @path from @uri + @uri arguments if there is */
if( $pathInUrl ){
// {1} Add @path as data //
$data['path'] = $uriMatches[1];
// {2} Add $uri arguments as data 'URL_@i' (@i is the order beginnint at 0) //
if( count($uriMatches) > 2 ){
$uriParams = explode('/', trim($uriMatches[2], '/'));
foreach($uriParams as $k=>$v)
$data["URL_$k"] = $v;
}
}
/* (3) If @path haven't been found -> error */
if( !isset($data['path']) )
return new Request();
/* (3) Parse arguments from JSON
---------------------------------------------------------*/
/* (1) Init. arguments */
$params = [];
/* (2) Parse each arg (except @path) */
foreach($data as $name=>$value){
if( $name === 'path' )
continue;
// {1} Json parse //
$json = json_decode( $value, true );
// {2} if valid -> set the parsed value //
if( !is_null($json) )
$params[$name] = $json;
// {3} else -> leave it like it was //
else
$params[$name] = $value;
}
/* (4) Build an API Request object
---------------------------------------------------------*/
return new Request($data['path'], $params);
}
}

View File

@ -6,6 +6,7 @@
use \api\core\ModuleFactory; use \api\core\ModuleFactory;
use \error\core\Error; use \error\core\Error;
use \error\core\Err; use \error\core\Err;
use \http\core\HttpRequest;
class Request{ class Request{
@ -334,6 +335,88 @@
} }
/* DESERIALISATION A PARTIR DE L'URL ET DES DONNEES POST (OPT)
*
* @url<String> Contenu de l'url formatté (commence à "/module/methode")
*
* @return instance<Request> Retourne un objet de type <Request>
*
* @note
* 1. `path` peut être dans l'url : /method/module
* `path` peut être dans les données $_POST
* 2. les données peuvent être dans l'url : /module/method/data1/data2/...
* les données peuvent être dans les données $_POST
*
*/
public static function remote($url){
/* [1] Fetch HttpRequest correct data
=========================================================*/
/* (1) Parse HttpRequest data because php doesn't parse it for non-POST HTTP method */
$httprequest = new HttpRequest();
$_POST = $httprequest->POST();
$data = $_POST;
/* [2] On verifie que le @path est renseigne
=========================================================*/
/* (1) Si le path est dans @url */
$pathInUrl = is_string($url) && preg_match('#^/?([\w_-]+/[\w_-]+)(?:/?|/((?:\w+/)*(?:\w+/?)))$#', $url, $urlMatches);
/* (2) On récupère le @path + les arguments dans l'URL */
if( $pathInUrl ){
// {1} On ajoute le @path aux données //
$data['path'] = $urlMatches[1];
// {2} On ajoute les arguments d'URL aux données //
if( count($urlMatches) > 2 ){
$urlParams = explode('/', trim($urlMatches[2], '/'));
foreach($urlParams as $k=>$v)
$data["URL_$k"] = $v;
}
}
/* (2) On vérifie dans tous les cas si le path existe */
if( !isset($data['path']) )
return new Request();
/* [3] On met les paramètres en JSON
=========================================================*/
/* (1) On initialise les paramètres*/
$params = [];
/* (2) On met tous les paramètres en json (sauf @path) */
foreach($data as $name=>$value){
if( $name === 'path' )
continue;
// {1} On met en JSON //
$json = json_decode( $value, true );
// {2} Si ok -> on remplace //
if( !is_null($json) )
$params[$name] = $json;
// {3} Sinon, on laisse tel quel //
else
$params[$name] = $value;
}
/* [4] On retourne une instance de <Request>
=========================================================*/
return new Request($data['path'], $params);
}
/* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE /* VERIFICATION DU FORMAT ET DE LA COHERENCE DU CHEMIN SPECIFIE
* *
* @path<String> String correspondant au chemin de delegation ("module/methode") * @path<String> String correspondant au chemin de delegation ("module/methode")
@ -349,7 +432,7 @@
// On recupere les données de la regex // On recupere les données de la regex
$module = $matches[1]; $module = $matches[1];
$method = $matches[2]; $method = $this->http_method.'::'.$matches[2];
/* [2] Verification de l'existence du module (conf) /* [2] Verification de l'existence du module (conf)

View File

@ -1,211 +0,0 @@
<?php
namespace api\module;
use \database\core\Repo;
use \error\core\Error;
use \error\core\Err;
class adminDefault{
public function __construct(){
// Routine to execute before each call to authenticationDefault's method
}
public function __destruct(){
// Routine to execute after each call to authenticationDefault's method
}
/* RETOURNE LA LISTE DSE ADMINISTRATEURS DE L'ENTREPOT
*
* @return admins<array> Liste des administrateurs de l'entrepôt
*
*/
public function getAll($params){
/* (1) Fetch admin list
---------------------------------------------------------*/
/* (1) Prepare request */
$listRq = new Repo('admin/getByIdWarehouse', [ $_SESSION['WAREHOUSE']['id'] ]);
/* (2) Get response */
$listRs = $listRq->answer();
/* (3) Manage error */
if( !is_array($listRs) )
return ['error' => new Error(Err::RepoError)];
/* (2) Setup data (remove self)
---------------------------------------------------------*/
return ['admins' => $listRs];
}
/* MODIFICATION MOT DE PASSE ADMINISTRATEUR
*
* @old<String> Ancien mot de passe (actuel)
* @new<String> Nouveau mot de passe
* @confirm<String> Confirmation mot de passe
*
* @return status<Boolean> TRUE si les crédits sont bons, sinon FALSE
*
*/
public function update($params){
extract($params);
/* [1] On vérifie la confirmation de mot de passe
=========================================================*/
if( $new !== $confirm )
return [ 'error' => new Error(Err::WrongParam, 'confirm') ];
/* [2] On vérifie le mot de passe actuel
=========================================================*/
/* (1) On hash le mot de passe actuel */
$hash_old = secure_hash($old, $_SESSION['ADMIN']['username']);
/* (2) On vérifie que le mot de passe est correct */
$checkPassword = new Repo('admin/getById', [
$_SESSION['WAREHOUSE']['id'],
$_SESSION['ADMIN']['id']
]);
$adminFetched = $checkPassword->answer();
// Si aucun résultat -> erreur
if( $adminFetched === false )
return [ 'error' => new Error(Err::NoMatchFound) ];
/* [3] On vérifie le mot de passe actuel
=========================================================*/
// Si mot de passe faux, on retourne une erreur
if( $adminFetched['password'] != $hash_old )
return [ 'error' => new Error(Err::WrongParam, 'old') ];
/* [3] On met à jour le mot de passe
=========================================================*/
/* (1) On hash le nouveau mot de passe */
$hash_new = secure_hash($new, $adminFetched['username']);
/* (w) Requête */
$update = new Repo('admin/edit', [
$adminFetched['id_admin'],
$adminFetched['username'],
$adminFetched['mail'],
$hash_new
]);
/* (3) Gestion erreur */
if( !$update->answer() )
return [ 'error' => new Error(Err::RepoError) ];
/* (4) Succès si tout ok */
return [ 'error' => new Error(Err::Success) ];
}
/* CREATION D'UN NOUVEAL ADMINISTRATEUR
*
* @username<String> Identifiant du nouvel administrateur
*
* @return password<String> Mot de passe généré
*
*/
public function create($params){
extract($params);
/* [1] On génère un mot de passe
=========================================================*/
$password = secure_hash(uniqid(), uniqid());
/* [2] On vérifie l'unicité de l'identifiant
=========================================================*/
/* (1) On vérifie que l'identifiant n'existe pas */
$checkPassword = new Repo('admin/getByUsername', [
$_SESSION['WAREHOUSE']['id'],
$username
]);
$adminFetched = $checkPassword->answer();
// Si un résultat -> erreur
if( $adminFetched !== false )
return [ 'error' => new Error(Err::AlreadyExists, 'username') ];
/* [3] On crée l'administrateur
=========================================================*/
/* (1) Requête */
$create = new Repo('admin/create', [
$_SESSION['WAREHOUSE']['id'],
$username,
$mail,
$password
]);
/* (3) Gestion erreur */
if( !$create->answer() )
return [ 'error' => new Error(Err::RepoError) ];
/* (4) Succès si tout ok */
return [ 'password' => $password ];
}
/* SUPPRESSION D'UN ADMINISTRATEUR DU MEME ENTREPOT
*
* @id_admin<int> UID de l'administrateur
*
*/
public function delete($params){
extract($params);
/* [1] On vérifie que ce n'est pas nous-même
=========================================================*/
if( $id_admin == $_SESSION['ADMIN']['id'] )
return ['error' => new Error(Err::NoMatchFound) ];
/* [2] On essaie de supprimer
=========================================================*/
/* (1) On vérifie que l'identifiant n'existe pas */
$del_req = new Repo('admin/delete', [
$_SESSION['WAREHOUSE']['id'],
$id_admin
]);
/* (2) Gestion erreur */
if( !$del_req->answer() )
return [ 'error' => new Error(Err::RepoError) ];
/* (4) Succès si tout ok */
return [];
}
}
?>

View File

@ -121,6 +121,116 @@
/* RETOURNE LA LISTE DSE ADMINISTRATEURS DE L'ENTREPOT
*
* @return admins<array> Liste des administrateurs de l'entrepôt
*
*/
public function get_admins($params){
/* (1) Fetch admin list
---------------------------------------------------------*/
/* (1) Prepare request */
$listRq = new Repo('admin/getByIdWarehouse', [ $_SESSION['WAREHOUSE']['id'] ]);
/* (2) Get response */
$listRs = $listRq->answer();
/* (3) Manage error */
if( !is_array($listRs) )
return ['error' => new Error(Err::RepoError)];
/* (2) Setup data (remove self)
---------------------------------------------------------*/
return ['admins' => $listRs];
}
/* MODIFICATION MOT DE PASSE ADMINISTRATEUR
*
* @old<String> Ancien mot de passe (actuel)
* @new<String> Nouveau mot de passe
* @confirm<String> Confirmation mot de passe
*
* @return status<Boolean> TRUE si les crédits sont bons, sinon FALSE
*
*/
public function update_admin($params){
extract($params);
/* [1] On vérifie la confirmation de mot de passe
=========================================================*/
if( $new !== $confirm )
return [ 'error' => new Error(Err::WrongParam, 'confirm') ];
/* [2] On vérifie le mot de passe actuel
=========================================================*/
/* (1) On hash le mot de passe actuel */
$hash_old = secure_hash($old, $_SESSION['ADMIN']['username']);
/* (2) On vérifie que le mot de passe est correct */
$checkPassword = new Repo('admin/getById', [
$_SESSION['WAREHOUSE']['id'],
$_SESSION['ADMIN']['id']
]);
$adminFetched = $checkPassword->answer();
// Si aucun résultat -> erreur
if( $adminFetched === false )
return [ 'error' => new Error(Err::NoMatchFound) ];
/* [3] On vérifie le mot de passe actuel
=========================================================*/
// Si mot de passe faux, on retourne une erreur
if( $adminFetched['password'] != $hash_old )
return [ 'error' => new Error(Err::WrongParam, 'old') ];
/* [3] On met à jour le mot de passe
=========================================================*/
/* (1) On hash le nouveau mot de passe */
$hash_new = secure_hash($new, $adminFetched['username']);
/* (w) Requête */
$update = new Repo('admin/edit', [
$adminFetched['id_admin'],
$adminFetched['username'],
$adminFetched['mail'],
$hash_new
]);
/* (3) Gestion erreur */
if( !$update->answer() )
return [ 'error' => new Error(Err::RepoError) ];
/* (4) Succès si tout ok */
return [ 'error' => new Error(Err::Success) ];
}
/* MODIFICATION CODE D'ACCES ENTREPOT /* MODIFICATION CODE D'ACCES ENTREPOT
* *
* @old<String> Ancien code d'accès (actuel) * @old<String> Ancien code d'accès (actuel)
@ -186,6 +296,69 @@
} }
/* CREATION D'UN NOUVEAL ADMINISTRATEUR
*
* @username<String> Identifiant du nouvel administrateur
*
* @return password<String> Mot de passe généré
*
*/
public function create_admin($params){
extract($params);
/* [1] On génère un mot de passe
=========================================================*/
$password = secure_hash(uniqid(), uniqid());
/* [2] On vérifie l'unicité de l'identifiant
=========================================================*/
/* (1) On vérifie que l'identifiant n'existe pas */
$checkPassword = new Repo('admin/getByUsername', [
$_SESSION['WAREHOUSE']['id'],
$username
]);
$adminFetched = $checkPassword->answer();
// Si un résultat -> erreur
if( $adminFetched !== false )
return [ 'error' => new Error(Err::AlreadyExists, 'username') ];
/* [3] On crée l'administrateur
=========================================================*/
/* (1) Requête */
$create = new Repo('admin/create', [
$_SESSION['WAREHOUSE']['id'],
$username,
$mail,
$password
]);
/* (3) Gestion erreur */
if( !$create->answer() )
return [ 'error' => new Error(Err::RepoError) ];
/* (4) Succès si tout ok */
return [ 'password' => $password ];
}
} }

View File

@ -150,88 +150,6 @@
]; ];
} }
/* (x) Return the machine history for an history entry
*
* @id_entry<id> UID of the history entry
*
* @return timeline<array> Machine timeline data
*
---------------------------------------------------------*/
public function get_timeline($params){
extract($params);
/* (1) Get history entry data
---------------------------------------------------------*/
/* (1) Request */
$entry = new Repo('history/getById', [$id_entry]);
/* (2) Get response */
$entry = $entry->answer();
/* (3) Manage error */
if( !is_array($entry) )
return ['error' => new Error(Err::RepoError)];
/* (2) Get history for machine
---------------------------------------------------------*/
/* (1) Request */
$timeline = new Repo('history/getByIdMachine', [
$_SESSION['WAREHOUSE']['id'],
$entry['id_machine']
]);
/* (2) Get response */
$timeline = $timeline->answer();
/* (3) Manage error */
if( $timeline === false )
return ['error' => new Error(Err::RepoError)];
/* (3) Return data
---------------------------------------------------------*/
return [ 'timeline' => $timeline ];
}
/* (x) Return the entry data for an history id
*
* @id_entry<id> UID of the history entry
*
* @return data<array> Entry data
*
---------------------------------------------------------*/
public function getById($params){
extract($params);
/* (1) Get history entry data
---------------------------------------------------------*/
/* (1) Request */
$entry = new Repo('history/getById', [$id_entry]);
/* (2) Get response */
$entry = $entry->answer();
/* (3) Manage error */
if( !is_array($entry) )
return ['error' => new Error(Err::RepoError)];
/* (2) Return data
---------------------------------------------------------*/
return [ 'entry' => $entry ];
}
} }

View File

@ -383,7 +383,7 @@
/* [3] Get history for the machine /* [3] Get history for the machine
=========================================================*/ =========================================================*/
/* (1) Write request */ /* (1) Write request */
$history_req = new Repo('history/getByIdMachine', [$_SESSION['WAREHOUSE']['id'], $id_machine]); $history_req = new Repo('history/getByIdMachine', [$id_machine]);
/* (2) Manage error */ /* (2) Manage error */
if( $history_req->error->get() != Err::Success ) if( $history_req->error->get() != Err::Success )

View File

@ -131,17 +131,15 @@
/* SUPPRIME UN ENTREPOT DONNE /* SUPPRIME UN ENTREPOT DONNE
* *
* @id_warehouse<int> UID de l'entrepôt en question * @id_admin<int> UID de l'administrateur en question
* @id_admin<int> UID de l'administrateur en question
* *
* @return status<Boolean> Retourne si oui ou non l'administrateur a bien ete supprime * @return status<Boolean> Retourne si oui ou non l'administrateur a bien ete supprime
* *
*/ */
public static function delete($id_warehouse, $id_admin){ public static function delete($id_admin){
/* [1] On redige/execute la requete /* [1] On redige/execute la requete
=========================================================*/ =========================================================*/
$deleted = Table::get('admin') $deleted = Table::get('admin')
->whereIdWarehouse($id_warehouse)
->whereId($id_admin) ->whereId($id_admin)
->delete(); ->delete();

View File

@ -88,37 +88,15 @@
* FALSE si aucun résultat * FALSE si aucun résultat
* *
*/ */
public static function getByIdMachine($id_warehouse, $id_machine){ public static function getByIdMachine($id_machine){
/* [1] On rédige/execute la requête /* [1] On rédige/execute la requête
=========================================================*/ =========================================================*/
$users = Table::get('user') $machine = Table::get('history')
->whereIdWarehouse($id_warehouse) ->whereIdMachine($id_machine)
->select('id_user') ->orderby('timestamp', Rows::ORDER_DESC)
->select('username', null, null, 'user_name') ->select('*');
->select('firstname', null, null, 'user_firstname')
->select('lastname', null, null, 'user_lastname');
$machines = Table::get('machine') return $machine->fetch();
->whereIdWarehouse($id_warehouse)
->whereId($id_machine)
->select('id_machine')
->select('name', null, null, 'machine_name');
$actions = Table::get('action')
->select('id_action')
->select('name', null, null, 'action_name');
$history = Table::get('history')
->join('id_user', $users)
->join('id_machine', $machines)
->join('id_action', $actions)
->select('id_history')
->select('timestamp')
->orderby('timestamp', Rows::ORDER_DESC);
return $history->fetch();
} }
@ -156,23 +134,21 @@
/* RETOURNE UNE ENTREE SPECIFIQUE /* RETOURNE UNE ENTREE SPECIFIQUE
* *
* @id_entry<int> UID de l'entrée historique * @id_history<int> UID de l'entree
* *
* @return entry<Array> Données de l'entree * @return entry<Array> Données de l'entree
* FALSE si erreur | aucun résultat * FALSE si aucun résultat
* *
*/ */
public static function getById($id_entry){ public static function getById($id_history){
/* [1] On rédige/execute la requête /* [1] On rédige/execute la requête
=========================================================*/ =========================================================*/
$entry = Table::get('history') $user = Table::get('user')
->whereId($id_entry) ->whereId($id_history)
->orderby('timestamp', Rows::ORDER_DESC) ->orderby('timestamp', Rows::ORDER_DESC)
->select('*') ->select('*');
->unique();
return $entry->fetch();
return $user->fetch();
} }
@ -235,60 +211,34 @@
/* [1] Recherche dans les relations 'machines' /* [1] Recherche dans les relations 'machines'
=========================================================*/ =========================================================*/
/* (1) On exécute la requête */ /* (1) On exécute la requête */
$machines_rq = new Repo('machine/search', [$id_warehouse, $keyword]); $machines_r = new Repo('machine/search', [$id_warehouse, $keyword]);
$machines_rs = $machines_rq->answer();
/* (2) Gestion succès */ /* (2) Gestion succès */
if( is_array($machines_rs) ) if( $machines_r->error->get() == Err::Success )
foreach($machines_rs as $row) foreach($machines_r->answer() as $row)
$machine_ids[] = $row['id_machine']; $machine_ids[] = $row['id_machine'];
/* [2] Recherche dans les relations 'users' /* [2] Recherche dans les relations 'users'
=========================================================*/ =========================================================*/
/* (1) On cherche dans les utilisateurs */ /* (1) On cherche dans les utilisateurs */
$users_rq = new Repo('user/search', [$id_warehouse, $keyword]); $users_r = new Repo('user/search', [$id_warehouse, $keyword]);
$users_rs = $users_rq->answer();
/* (2) Gestion succès */ /* (2) Gestion succès */
if( is_array($users_rs) ) if( $users_r->error->get() == Err::Success )
foreach($users_rs as $row) foreach($users_r->answer() as $row)
$user_ids[] = $row['id_user']; $user_ids[] = $row['id_user'];
/* [3] On rédige/execute la requête /* [3] On rédige/execute la requête
=========================================================*/ =========================================================*/
/* (1) Recherche par utilisateur */ $history_r = DatabaseDriver::getPDO()->prepare("SELECT id_history FROM history
$history_r_user = Table::get('history') WHERE id_user IN (SELECT id_user FROM user WHERE username LIKE '%$keyword%')
->select('id_history') or id_machine IN (SELECT id_machine FROM machine WHERE name LIKE '%$keyword%')
->whereIdUser([ $user_ids, Rows::COND_IN ]); ORDER BY timestamp DESC;");
/* (2) Recherche par utilisateur */ $history_r->execute();
$history_r_machine = Table::get('history')
->select('id_history')
->whereIdMachine([ $machine_ids, Rows::COND_IN ]);
/* (3) On enregistre les entrées par utilisateur */ return DatabaseDriver::delNumeric( $history_r->fetchAll() );
$already_id = [];
$ids = $history_r_user->fetch();
foreach($ids as $user_result)
$already_id[ $user_result['id_history'] ] = null;
/* (4) On ajoute les entrées par machines (si pas déja) */
foreach($history_r_machine->fetch() as $machine_result)
if( !isset($already_id[$machine_result['id_history']]) ){
$ids[] = $machine_result;
$already_id[ $machine_result['id_history'] ] = null;
}
/* (5) On retourne le total */
return $ids;
} }

View File

@ -65,75 +65,15 @@
* *
*/ */
public static function search($id_warehouse, $keyword){ public static function search($id_warehouse, $keyword){
// On recupere les donnees
/* (1) Format keyword $search = Table::get('machine')
---------------------------------------------------------*/ { ->whereIdWarehouse($id_warehouse)
->whereName(["%$keyword%", Rows::COND_LIKE])
/* (1) Make all lowercase */
$keyword = strtolower($keyword);
/* (2) Create a keyword set (separator: space) */
$keywords = [];
$keywords_tmp = explode(' ', $keyword);
/* (4) Trim each keyword + ignore empty ones (2 consecutive spaces) */
foreach($keywords_tmp as $kw){
// ignore empty keywords
if( strlen(trim($kw)) == 0 )
continue;
// store others
$keywords[] = trim($kw);
}
}
/* (2) Search for each keyword
---------------------------------------------------------*/ {
/* (1) Initialise id list that will contain each matching user ids */
$mac_id_list = [];
/* (2) Request for each keyword */
foreach($keywords as $kw){
// {2.1} Request //
$searchmac = Table::get('machine')
->select('id_machine')
->whereIdWarehouse($id_warehouse)
->whereName(["%$kw%", Rows::COND_LIKE] );
// {2.2} Fetch result //
$matches = $searchmac->fetch();
// {2.3} Only add non-already added ids //
foreach($matches as $match){
// {2.4.1} If not already -> add it //
if( !isset($mac_id_list[ $match['id_machine'] ]) )
$mac_id_list[ $match['id_machine'] ] = null;
}
}
}
/* (3) Join results
---------------------------------------------------------*/
/* (1) Join request */
$join_rq = Table::get('machine')
->select('id_machine') ->select('id_machine')
->select('name') ->select('name')
->whereId([array_keys($mac_id_list), Rows::COND_IN]); ->orderby('name', Rows::ORDER_ASC);
/* (2) Return result */
return $join_rq->fetch();
return $search->fetch();
} }

View File

@ -66,82 +66,22 @@
* *
*/ */
public static function search($id_warehouse, $keyword){ public static function search($id_warehouse, $keyword){
// On recupere les donnees
$searchusers = DatabaseDriver::getPDO()->prepare("SELECT * FROM user
WHERE id_warehouse = :id_warehouse
AND ( code LIKE '%".$keyword."%'
OR username LIKE '%".$keyword."%'
OR firstname LIKE '%".$keyword."%'
OR lastname LIKE '%".$keyword."%'
OR mail LIKE '%".$keyword."%'
)
");
/* (1) Format keyword $searchusers->execute([
---------------------------------------------------------*/ { ':id_warehouse' => $id_warehouse
]);
/* (1) Make all lowercase */ return DatabaseDriver::delNumeric( $searchusers->fetchAll() );
$keyword = strtolower($keyword);
/* (2) Create a keyword set (separator: space) */
$keywords = [];
$keywords_tmp = explode(' ', $keyword);
/* (4) Trim each keyword + ignore empty ones (2 consecutive spaces) */
foreach($keywords_tmp as $kw){
// ignore empty keywords
if( strlen(trim($kw)) == 0 )
continue;
// store others
$keywords[] = trim($kw);
}
}
/* (2) Search for each keyword
---------------------------------------------------------*/ {
/* (1) Initialise id list that will contain each matching user ids */
$user_id_list = [];
/* (2) Request for each keyword */
foreach($keywords as $kw){
// {2.1} Request //
$searchusers = DatabaseDriver::getPDO()->prepare("SELECT id_user FROM user
WHERE id_warehouse = :id_warehouse
AND ( LOWER(code) LIKE '%".$kw."%'
OR LOWER(username) LIKE '%".$kw."%'
OR LOWER(firstname) LIKE '%".$kw."%'
OR LOWER(lastname) LIKE '%".$kw."%'
OR LOWER(mail) LIKE '%".$kw."%'
)
");
// {2.2} Inject params //
$searchusers->execute([ ':id_warehouse' => $id_warehouse ]);
// {2.3} Fetch result //
$matches = DatabaseDriver::delNumeric( $searchusers->fetchAll() );
// {2.4} Only add non-already added ids //
foreach($matches as $match){
// {2.4.1} If not already -> add it //
if( !isset($user_id_list[ $match['id_user'] ]) )
$user_id_list[ $match['id_user'] ] = null;
}
}
}
/* (3) Join results
---------------------------------------------------------*/
/* (1) Join request */
$join_rq = Table::get('user')
->select('*')
->whereId([array_keys($user_id_list), Rows::COND_IN]);
/* (2) Return result */
return $join_rq->fetch();
} }

View File

@ -1,12 +1,12 @@
{% block search_bar %} <input type='text' class='searchbar' placeholder='Recherche'> {% endblock %} {% block search_bar %} <input type='text' class='searchbar' placeholder='Recherche'> {% endblock %}
{% set count = 0 %} {% set noresult = true %}
{# {% block user_cluster_list %} #} {% block user_cluster_list %}
{% for user_cluster in core.get_clusters(0) %} {% for user_cluster in core.get_clusters(0) %}
{% set count = count + 1 %} {% set noresult = false %}
{% set id_user_cluster = 'u' ~ user_cluster.id_user_cluster %} {% set id_user_cluster = 'u' ~ user_cluster.id_user_cluster %}
{% set memlen = core.get_members(user_cluster.id_user_cluster,0) | length %} {% set memlen = core.get_members(user_cluster.id_user_cluster,0) | length %}
@ -58,16 +58,15 @@
{% endfor %} {% endfor %}
{# {% endblock %} #} {% endblock %}
{# {% block machines_cluster_list %} #} {% block machines_cluster_list %}
{% for machine_cluster in core.get_clusters(1) %} {% for machine_cluster in core.get_clusters(1) %}
{% set count = count + 1 %} {% set noresult = false %}
{% set id_machine_cluster = 'm' ~ machine_cluster.id_machine_cluster %} {% set id_machine_cluster = 'm' ~ machine_cluster.id_machine_cluster %}
{% set memlen = core.get_members(machine_cluster.id_machine_cluster,1) | length %} {% set memlen = core.get_members(machine_cluster.id_machine_cluster,1) | length %}
@ -133,16 +132,16 @@
{% endfor %} {% endfor %}
{# {% endblock %} #} {% endblock %}
{# if no result #} {# if no result #}
{% if count <= 0 %} {% if noresult %}
{% block no_result %} {% block no_result %}
<article class='inline-box'> <article class='inline-box'>
<span>Aucun résultat {{ count }}</span> <span>Aucun groupe trouvé</span>
</article> </article>
{% endblock %} {% endblock %}

View File

@ -10,247 +10,11 @@
class main extends i_view{ class main extends i_view{
public $id_history; public $id_history;
public $timeline = [];
public $entry = [];
/* (1) Constructor
*
* @id_history<id> UID of the history entry
*
---------------------------------------------------------*/
public function __construct($id_history){ public function __construct($id_history){
/* (1) Set attributes
---------------------------------------------------------*/
$this->id_history = $id_history; $this->id_history = $id_history;
/* (3) Get entry data
---------------------------------------------------------*/
/* (1) Request */
$entry_req = new Request('historyDefault/getById', [ 'id_entry' => $this->id_history ]);
/* (2) Get response */
$entry_res = $entry_req->dispatch();
/* (3) On success, store entry data */
if( $entry_res->error->get() == Err::Success )
$this->entry = $entry_res->get('entry');
/* (3) Get machine timeline
---------------------------------------------------------*/
/* (1) Request */
$mac_req = new Request('historyDefault/get_timeline', [ 'id_entry' => $this->id_history ]);
/* (2) Get response */
$mac_res = $mac_req->dispatch();
/* (3) On success, store timeline data */
if( $mac_res->error->get() == Err::Success ){
$this->timeline = $mac_res->get('timeline');
// add date nodes to the timeline
$this->add_date_nodes();
}
}
/* (2) Format timeline data to svg render
*
* @return svg<String> SVG raw render
*
---------------------------------------------------------*/
public function svg(){
/* (1) Initialize variables
---------------------------------------------------------*/
/* (1) Set date() timezone */
date_default_timezone_set('Europe/Paris');
debug();
/* (2) Init. result raw svg */
$RAW = '';
/* (3) Set global range */
$c = 0;
$cl = count($this->timeline);
// if no entry -> abort
if( $cl == 0 )
return '';
/* (4) Useful variables */
$y_pad = 50; // padding between each node
$line_pad = 50; // padding on each LINE end
$line_height = ( $cl + 1 ) * $y_pad; // line height (each node * @y_pad + @y_pad)
$height = $line_height + 2*$line_pad; // svg height
$width = 200; // svg width
$x = 50; // center width
/* (5) Svg tag */
$RAW .= "<svg width='$width' height='$height' viewBox='0 0 $width $height' class='timeline'>";
/* (6) Start CIRCLE */ {
// {6.1} Date node //
$y = $line_pad;
$RAW .= "<circle cx='$x' cy='$y' r='7' fill='#edf0f5' class='tstart'/>";
$RAW .= "<circle cx='$x' cy='$y' r='4' fill='#555' class='tstart'/>";
// {6.2} Date line to text //
$line_end_x = $x + (30-8);
$RAW .= "<path d='m".($x+8)." $y L$line_end_x $y' style='stroke-dasharray: 3px;' s stroke='#444'/>";
// {6.3} Date text //
$x_decal = $x + 30;
$y_decal = $y + 5;
$RAW .= "<text x='$x_decal' y='$y_decal' class='bold'>".date('d / m / Y', $this->timeline[0]['timestamp'])."</text>";
}
/* (2) Build barebone
---------------------------------------------------------*/
/* (1) Default TIMELINE */
$line_end_y = $line_height + $line_pad;
$RAW .= "<path d='m$x $line_pad L$x $line_end_y' style='stroke-dasharray: 3px;' stroke='#444' class='timeline line'/>";
/* (3) Build each action
---------------------------------------------------------*/
for( $c = 0 ; $c < $cl ; $c++ ){
/* (1) Calculate X */
$y = $line_pad + $y_pad + $c*$y_pad;
/* (2) Get entry data */
$entry = $this->timeline[$c];
/* (2.1) If DATE NODE -> add it */
if( isset($entry['date_node']) ){
// {2.1.1} Date node //
$RAW .= "<circle cx='$x' cy='$y' r='7' fill='#edf0f5' class='tstart'/>";
$RAW .= "<circle cx='$x' cy='$y' r='4' fill='#555' class='tstart'/>";
// {2.1.2} Date line to text //
$line_end_x = $x + (30-8);
$RAW .= "<path d='m".($x+8)." $y L$line_end_x $y' style='stroke-dasharray: 3px;' stroke='#555'/>";
// {2.1.3} Date text //
$x_decal = $x + 30;
$y_decal = $y + 5;
$RAW .= "<text x='$x_decal' y='$y_decal' class='bold'>".$entry['date_node']."</text>";
continue;
}
/* (3) Get useful data */
$action_class = strtolower($entry['action_name']);
$icon_uri = '/src/static/timeline/'.$action_class.'@ffffff.svg';
$data_entry = "data-entry='".$entry['id_history']."'";
$data_user = " data-user='".$entry['user_name']."'";
$data_machine = " data-machine='".$entry['machine_name']."'";
$data_action = " data-action='".$entry['action_name']."'";
$data_time = " data-time='".date('H:i:s d/m/Y', $entry['timestamp'])."'";
$data_tags = $data_entry.$data_user.$data_machine.$data_action.$data_time;
$y_img = $y - 5.5;
/* (4) Draw entry circles */
$RAW .= "<circle cx='$x' cy='$y' r='15' class='timeline around $action_class' $data_tags id='e".$entry['id_history']."' data-y='$y' />";
$RAW .= "<circle cx='$x' cy='$y' r='12' class='timeline center $action_class' />";
/* (5) Draw entry icon (action) */
$x_decal = $x - 5.5;
$RAW .= "\t<image x='$x_decal' y='$y_img' width='12' height='12' xlink:href='$icon_uri' class='icon' />";
/* (6) Draw circle below if current user */
if( $this->entry['id_user'] == $entry['id_user'] ){
$x_decal = $x - 25;
// {6.1} If current ENTRY -> draw big circle //
if( $this->entry['id_history'] == $entry['id_history'] )
$RAW .= "<circle cx='$x_decal' cy='$y' r='4' class='timeline below $action_class' />";
// {6.2} Else -> draw little circle //
else
$RAW .= "<circle cx='$x_decal' cy='$y' r='2' class='timeline below $action_class' />";
}
/* (6) Hour */
$x_decal = $x + 25;
$y_decal = $y + 5;
$RAW .= "<text x='$x_decal' y='$y_decal' class='$action_class'>".date('H:i:s', $entry['timestamp'])." - ".$entry['user_name']."</text>";
}
/* (4) Close SVG
---------------------------------------------------------*/
/* (1) Stop CIRCLE */
$y = $line_height + $line_pad;
$RAW .= "<circle cx='$x' cy='$y' r='6' fill='#edf0f5' class='tstop' />";
$RAW .= "<circle cx='$x' cy='$y' r='4' fill='#555' class='tstop' />";
/* (2) Close SVG tag */
$RAW .= "</svg>";
/* (5) Create invisible infobox (for now)
---------------------------------------------------------*/
$RAW .= "<div class='timeline infobox'></div>";
return $RAW;
}
/* (3) Add events for new day in @this->timeline
*
---------------------------------------------------------*/
private function add_date_nodes(){
/* (1) Initialization
---------------------------------------------------------*/
/* (1) Initialize variables */
$last_day = null;
$new_timeline = []; // will contain the new @timeline data
/* (2) Browse each entry
---------------------------------------------------------*/
foreach($this->timeline as $entry){
/* (1) If different day (not null) -> add a node + update last_day */
if( !is_null($last_day) && $last_day != date('d / m / Y', $entry['timestamp']) )
$new_timeline[] = [ 'date_node' => $last_day ];
/* (2) In all cases -> copy the event */
$new_timeline[] = $entry;
/* (3) Update the day */
$last_day = date('d / m / Y', $entry['timestamp']);
}
/* (3) Update the result
---------------------------------------------------------*/
$this->timeline = $new_timeline;
} }
} }

View File

@ -1,6 +1 @@
<!-- <span class='in-dev'>In development.. This feature will soon be available.</span> --> <span class='in-dev'>In development.. This feature will soon be available.</span>
<article class='timeline container' data-length='{{ core.timeline | length }}'>
{{ core.svg() | raw }}
</article>

View File

@ -72,7 +72,7 @@
{% block no_result %} {% block no_result %}
<article class='inline-box'> <article class='inline-box'>
<span>Aucun groupe machine trouvé.</span> <span>Aucun groupe trouvé.</span>
</article> </article>
{% endblock %} {% endblock %}

View File

@ -12,7 +12,7 @@
{% block generated %} {% block generated %}
<input id='admin_password' type='text' placeholder='Mot de passe généré...'><br> <input id='admin_password' type='text' placeholder='Mot de passe généré...' disabled><br>
{% endblock %} {% endblock %}

View File

@ -33,7 +33,7 @@
public function get_admins(){ public function get_admins(){
/* (1) On exécute la requête */ /* (1) On exécute la requête */
$adminListRq = new Request('adminDefault/getAll'); $adminListRq = new Request('authenticationDefault/get_admins');
/* (2) On recupere la reponse */ /* (2) On recupere la reponse */
$adminListRs = $adminListRq->dispatch(); $adminListRs = $adminListRq->dispatch();

View File

@ -4,7 +4,7 @@
{% block entry_tag %} <article class='inline-row' id='{{ admin.id_admin }}'> {% endblock %} {% block entry_tag %} <article class='inline-row' id='{{ admin.id_admin }}'> {% endblock %}
{% block entry_name %} <span data-admin='{{ admin.id_admin }}' class='title'><span style='color: {{ core.theme }};'>{{ admin.username }}</span></span> {% endblock %} {% block entry_name %} <span data-admin='{{ admin.id_admin }}' class='title'><span style='color: {{ core.theme }};'>#{{ admin.username }}</span></span> {% endblock %}
{% block entry_mail %} {% block entry_mail %}

View File

@ -55,7 +55,7 @@
{% block no_result %} {% block no_result %}
<article class='inline-box'> <article class='inline-box'>
<span>Aucun groupe utilisateur trouvé.</span> <span>Aucun groupe trouvé.</span>
</article> </article>
{% endblock %} {% endblock %}

View File

@ -42,7 +42,7 @@
/* [2] Define headers /* [2] Define headers
=========================================================*/ =========================================================*/
$this->headers = self::getallheaders_adapter(); $this->headers = \getallheaders();
/* [3] Define default datasets (GET, POST) /* [3] Define default datasets (GET, POST)
@ -201,30 +201,4 @@
public function HEADERS(){ return $this->headers; } public function HEADERS(){ return $this->headers; }
public function METHOD(){ return $this->method; } public function METHOD(){ return $this->method; }
public function URI(){ return $this->uri; } public function URI(){ return $this->uri; }
private static function getallheaders_adapter(){
/* (1) If exists -> use it
---------------------------------------------------------*/
if( function_exists('getallheaders') )
return getallheaders();
/* (2) If does not (php-fpm)
---------------------------------------------------------*/
/* (1) init. variables */
$fetched_headers = [];
/* (2) Get all headers from $_SERVER */
foreach($_SERVER as $hname=>$hvalue ){
// {1} Store only if begins with 'HTTP_' //
if( substr($hname,0,5) == 'HTTP_' )
$fetched_headers[ str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($hname,5)))))] = $hvalue;
}
/* (3) Return created headers */
return $fetched_headers;
}
} }

View File

@ -237,7 +237,7 @@
/* [3] If `IN` condition /* [3] If `IN` condition
=========================================================*/ =========================================================*/
$defaultWhere = $this->where; $defaultWhere = $this->where;
$inCond = is_array($args[0]) && count($args[0]) > 1 && is_array($args[0][0]) && $args[0][1] == self::COND_IN; $inCond = count($args[0]) > 1 && is_array($args[0][0]) && $args[0][1] == self::COND_IN;
// erreur // erreur
if( is_array($args[0][0]) && !$inCond ) if( is_array($args[0][0]) && !$inCond )

View File

@ -132,10 +132,7 @@
/* [1] On construit la requête /* [1] On construit la requête
=========================================================*/ =========================================================*/
/* (1) Chamo */ /* (1) Chamo */
if( $value[1] == Rows::COND_LIKE ) // make LIKE lowercase $sql .= $field[0].'.'.$field[1].' ';
$sql .= 'LOWER('.$field[0].'.'.$field[1].') ';
else
$sql .= $field[0].'.'.$field[1].' ';
/* (2) Opérateur */ /* (2) Opérateur */
$sql .= substr($value[1], 2, -2).' '; $sql .= substr($value[1], 2, -2).' ';
@ -146,7 +143,7 @@
$sql .= 'NULL'; $sql .= 'NULL';
return $sql; return $sql;
} }
// {2} Si not NULL // // {2} Si not NULL //
$sql .= ':'.$field[0].'_x_'.$field[1].'_'.$offset; $sql .= ':'.$field[0].'_x_'.$field[1].'_'.$offset;

View File

@ -18,10 +18,6 @@ class Router{
* *
*/ */
public function __construct($url){ public function __construct($url){
// Format URI (ne doit pas avoir le premier '/')
if( preg_match("@^/@", $url) )
$url = substr($url, 1);
$this->url = $url; $this->url = $url;
// On initialise les routes // On initialise les routes

View File

@ -1,14 +0,0 @@
<?php
namespace token\core;
class TreeTokenNull{
public function __construct(){}
public function init_parent(){ return true; }
public function init_child(){ return true; }
}

387
composer.lock generated
View File

@ -4,20 +4,21 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "a67d059eefe03511f76073ba76c61878",
"content-hash": "98f631539238eb6dba4f74f1ae9e4744", "content-hash": "98f631539238eb6dba4f74f1ae9e4744",
"packages": [ "packages": [
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.7.0", "version": "v1.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git", "url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
"reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -29,7 +30,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.7-dev" "dev-master": "1.6-dev"
} }
}, },
"autoload": { "autoload": {
@ -63,7 +64,7 @@
"portable", "portable",
"shim" "shim"
], ],
"time": "2018-01-30T19:27:44+00:00" "time": "2017-10-11 12:05:26"
}, },
{ {
"name": "twig/twig", "name": "twig/twig",
@ -129,22 +130,22 @@
"keywords": [ "keywords": [
"templating" "templating"
], ],
"time": "2017-09-27T17:50:14+00:00" "time": "2017-09-27 17:50:14"
} }
], ],
"packages-dev": [ "packages-dev": [
{ {
"name": "composer/ca-bundle", "name": "composer/ca-bundle",
"version": "1.1.0", "version": "1.0.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/ca-bundle.git", "url": "https://github.com/composer/ca-bundle.git",
"reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" "reference": "9dd73a03951357922d8aee6cc084500de93e2343"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", "url": "https://api.github.com/repos/composer/ca-bundle/zipball/9dd73a03951357922d8aee6cc084500de93e2343",
"reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", "reference": "9dd73a03951357922d8aee6cc084500de93e2343",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -153,9 +154,12 @@
"php": "^5.3.2 || ^7.0" "php": "^5.3.2 || ^7.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35", "phpunit/phpunit": "^4.5",
"psr/log": "^1.0", "psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0" "symfony/process": "^2.5 || ^3.0"
},
"suggest": {
"symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
@ -187,39 +191,39 @@
"ssl", "ssl",
"tls" "tls"
], ],
"time": "2017-11-29T09:37:33+00:00" "time": "2017-09-11 07:24:36"
}, },
{ {
"name": "composer/composer", "name": "composer/composer",
"version": "1.6.3", "version": "1.5.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/composer.git", "url": "https://github.com/composer/composer.git",
"reference": "88a69fda0f2187ad8714cedffd7a8872dceaa4c2" "reference": "c639623fa2178b404ed4bab80f0d1263853fa4ae"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/composer/zipball/88a69fda0f2187ad8714cedffd7a8872dceaa4c2", "url": "https://api.github.com/repos/composer/composer/zipball/c639623fa2178b404ed4bab80f0d1263853fa4ae",
"reference": "88a69fda0f2187ad8714cedffd7a8872dceaa4c2", "reference": "c639623fa2178b404ed4bab80f0d1263853fa4ae",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer/ca-bundle": "^1.0", "composer/ca-bundle": "^1.0",
"composer/semver": "^1.0", "composer/semver": "^1.0",
"composer/spdx-licenses": "^1.2", "composer/spdx-licenses": "^1.0",
"justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0", "justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
"php": "^5.3.2 || ^7.0", "php": "^5.3.2 || ^7.0",
"psr/log": "^1.0", "psr/log": "^1.0",
"seld/cli-prompt": "^1.0", "seld/cli-prompt": "^1.0",
"seld/jsonlint": "^1.4", "seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.0", "seld/phar-utils": "^1.0",
"symfony/console": "^2.7 || ^3.0 || ^4.0", "symfony/console": "^2.7 || ^3.0",
"symfony/filesystem": "^2.7 || ^3.0 || ^4.0", "symfony/filesystem": "^2.7 || ^3.0",
"symfony/finder": "^2.7 || ^3.0 || ^4.0", "symfony/finder": "^2.7 || ^3.0",
"symfony/process": "^2.7 || ^3.0 || ^4.0" "symfony/process": "^2.7 || ^3.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7", "phpunit/phpunit": "^4.5 || ^5.0.5",
"phpunit/phpunit-mock-objects": "^2.3 || ^3.0" "phpunit/phpunit-mock-objects": "^2.3 || ^3.0"
}, },
"suggest": { "suggest": {
@ -233,7 +237,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.6-dev" "dev-master": "1.5-dev"
} }
}, },
"autoload": { "autoload": {
@ -264,7 +268,7 @@
"dependency", "dependency",
"package" "package"
], ],
"time": "2018-01-31T15:28:18+00:00" "time": "2017-09-11 14:59:26"
}, },
{ {
"name": "composer/semver", "name": "composer/semver",
@ -326,27 +330,27 @@
"validation", "validation",
"versioning" "versioning"
], ],
"time": "2016-08-30T16:08:34+00:00" "time": "2016-08-30 16:08:34"
}, },
{ {
"name": "composer/spdx-licenses", "name": "composer/spdx-licenses",
"version": "1.3.0", "version": "1.1.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/composer/spdx-licenses.git", "url": "https://github.com/composer/spdx-licenses.git",
"reference": "7e111c50db92fa2ced140f5ba23b4e261bc77a30" "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/composer/spdx-licenses/zipball/7e111c50db92fa2ced140f5ba23b4e261bc77a30", "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
"reference": "7e111c50db92fa2ced140f5ba23b4e261bc77a30", "reference": "2603a0d7ddc00a015deb576fa5297ca43dee6b1c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3.2 || ^7.0" "php": "^5.3.2 || ^7.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5", "phpunit/phpunit": "^4.5 || ^5.0.5",
"phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0"
}, },
"type": "library", "type": "library",
@ -387,24 +391,24 @@
"spdx", "spdx",
"validator" "validator"
], ],
"time": "2018-01-31T13:17:27+00:00" "time": "2017-04-03 19:08:52"
}, },
{ {
"name": "doctrine/collections", "name": "doctrine/collections",
"version": "v1.5.0", "version": "v1.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/doctrine/collections.git", "url": "https://github.com/doctrine/collections.git",
"reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf" "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/doctrine/collections/zipball/a01ee38fcd999f34d9bfbcee59dbda5105449cbf", "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba",
"reference": "a01ee38fcd999f34d9bfbcee59dbda5105449cbf", "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1" "php": "^5.6 || ^7.0"
}, },
"require-dev": { "require-dev": {
"doctrine/coding-standard": "~0.1@dev", "doctrine/coding-standard": "~0.1@dev",
@ -454,28 +458,26 @@
"collections", "collections",
"iterator" "iterator"
], ],
"time": "2017-07-22T10:37:32+00:00" "time": "2017-01-03 10:49:41"
}, },
{ {
"name": "gitonomy/gitlib", "name": "gitonomy/gitlib",
"version": "v1.0.3", "version": "v1.0.2",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/gitonomy/gitlib.git", "url": "https://github.com/gitonomy/gitlib.git",
"reference": "1c2b0605115786613cb517798046c8ab57c17097" "reference": "b4b916423a2e2da631cf3b3787beb9386a7b253c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/gitonomy/gitlib/zipball/1c2b0605115786613cb517798046c8ab57c17097", "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/b4b916423a2e2da631cf3b3787beb9386a7b253c",
"reference": "1c2b0605115786613cb517798046c8ab57c17097", "reference": "b4b916423a2e2da631cf3b3787beb9386a7b253c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3 || ^7.0", "symfony/process": "^2.3|^3.0"
"symfony/process": "^2.3|^3.0|^4.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35|^5.7",
"psr/log": "^1.0" "psr/log": "^1.0"
}, },
"suggest": { "suggest": {
@ -510,7 +512,7 @@
], ],
"description": "Library for accessing git", "description": "Library for accessing git",
"homepage": "http://gitonomy.com", "homepage": "http://gitonomy.com",
"time": "2018-01-10T11:34:47+00:00" "time": "2016-05-11 08:25:40"
}, },
{ {
"name": "jakub-onderka/php-parallel-lint", "name": "jakub-onderka/php-parallel-lint",
@ -557,7 +559,7 @@
], ],
"description": "This tool check syntax of PHP files about 20x faster than serial check.", "description": "This tool check syntax of PHP files about 20x faster than serial check.",
"homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint", "homepage": "https://github.com/JakubOnderka/PHP-Parallel-Lint",
"time": "2015-12-15T10:42:16+00:00" "time": "2015-12-15 10:42:16"
}, },
{ {
"name": "justinrainbow/json-schema", "name": "justinrainbow/json-schema",
@ -623,7 +625,7 @@
"json", "json",
"schema" "schema"
], ],
"time": "2017-10-21T13:15:38+00:00" "time": "2017-10-21 13:15:38"
}, },
{ {
"name": "kahlan/kahlan", "name": "kahlan/kahlan",
@ -677,7 +679,7 @@
"testing", "testing",
"unit test" "unit test"
], ],
"time": "2017-08-12T20:37:11+00:00" "time": "2017-08-12 20:37:11"
}, },
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
@ -755,31 +757,31 @@
"logging", "logging",
"psr-3" "psr-3"
], ],
"time": "2017-06-19T01:22:40+00:00" "time": "2017-06-19 01:22:40"
}, },
{ {
"name": "ocramius/package-versions", "name": "ocramius/package-versions",
"version": "1.3.0", "version": "1.1.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Ocramius/PackageVersions.git", "url": "https://github.com/Ocramius/PackageVersions.git",
"reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" "reference": "72b226d2957e9e6a9ed09aeaa29cabd840d1a3b7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/72b226d2957e9e6a9ed09aeaa29cabd840d1a3b7",
"reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", "reference": "72b226d2957e9e6a9ed09aeaa29cabd840d1a3b7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-plugin-api": "^1.0.0", "composer-plugin-api": "^1.0",
"php": "^7.1.0" "php": "~7.0"
}, },
"require-dev": { "require-dev": {
"composer/composer": "^1.6.3", "composer/composer": "^1.3",
"ext-zip": "*", "ext-zip": "*",
"infection/infection": "^0.7.1", "humbug/humbug": "dev-master",
"phpunit/phpunit": "^7.0.0" "phpunit/phpunit": "^5.7.5"
}, },
"type": "composer-plugin", "type": "composer-plugin",
"extra": { "extra": {
@ -804,37 +806,33 @@
} }
], ],
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"time": "2018-02-05T13:05:30+00:00" "time": "2017-09-06 15:24:43"
}, },
{ {
"name": "ocramius/proxy-manager", "name": "ocramius/proxy-manager",
"version": "2.1.1", "version": "2.0.4",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Ocramius/ProxyManager.git", "url": "https://github.com/Ocramius/ProxyManager.git",
"reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7" "reference": "a55d08229f4f614bf335759ed0cf63378feeb2e6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/e18ac876b2e4819c76349de8f78ccc8ef1554cd7", "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/a55d08229f4f614bf335759ed0cf63378feeb2e6",
"reference": "e18ac876b2e4819c76349de8f78ccc8ef1554cd7", "reference": "a55d08229f4f614bf335759ed0cf63378feeb2e6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ocramius/package-versions": "^1.1.1", "ocramius/package-versions": "^1.0",
"php": "^7.1.0", "php": "7.0.0 - 7.0.5 || ^7.0.7",
"zendframework/zend-code": "^3.1.0" "zendframework/zend-code": "3.0.0 - 3.0.2 || ^3.0.4"
}, },
"require-dev": { "require-dev": {
"couscous/couscous": "^1.5.2", "couscous/couscous": "^1.4.0",
"ext-phar": "*", "ext-phar": "*",
"humbug/humbug": "dev-master@DEV", "phpbench/phpbench": "^0.11.2",
"nikic/php-parser": "^3.0.4", "phpunit/phpunit": "^5.4.6",
"phpbench/phpbench": "^0.12.2", "squizlabs/php_codesniffer": "^2.6.0"
"phpstan/phpstan": "^0.6.4",
"phpunit/phpunit": "^5.6.4",
"phpunit/phpunit-mock-objects": "^3.4.1",
"squizlabs/php_codesniffer": "^2.7.0"
}, },
"suggest": { "suggest": {
"ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
@ -873,7 +871,7 @@
"proxy pattern", "proxy pattern",
"service proxies" "service proxies"
], ],
"time": "2017-05-04T11:12:50+00:00" "time": "2016-11-04 15:53:15"
}, },
{ {
"name": "phpro/grumphp", "name": "phpro/grumphp",
@ -970,7 +968,7 @@
} }
], ],
"description": "A composer plugin that enables source code quality checks.", "description": "A composer plugin that enables source code quality checks.",
"time": "2017-05-31T17:49:48+00:00" "time": "2017-05-31 17:49:48"
}, },
{ {
"name": "psr/container", "name": "psr/container",
@ -1019,7 +1017,7 @@
"container-interop", "container-interop",
"psr" "psr"
], ],
"time": "2017-02-14T16:28:37+00:00" "time": "2017-02-14 16:28:37"
}, },
{ {
"name": "psr/log", "name": "psr/log",
@ -1066,7 +1064,7 @@
"psr", "psr",
"psr-3" "psr-3"
], ],
"time": "2016-10-10T12:19:37+00:00" "time": "2016-10-10 12:19:37"
}, },
{ {
"name": "seld/cli-prompt", "name": "seld/cli-prompt",
@ -1114,27 +1112,27 @@
"input", "input",
"prompt" "prompt"
], ],
"time": "2017-03-18T11:32:45+00:00" "time": "2017-03-18 11:32:45"
}, },
{ {
"name": "seld/jsonlint", "name": "seld/jsonlint",
"version": "1.7.1", "version": "1.6.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/Seldaek/jsonlint.git", "url": "https://github.com/Seldaek/jsonlint.git",
"reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77",
"reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", "reference": "50d63f2858d87c4738d5b76a7dcbb99fa8cf7c77",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.3 || ^7.0" "php": "^5.3 || ^7.0"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" "phpunit/phpunit": "^4.5"
}, },
"bin": [ "bin": [
"bin/jsonlint" "bin/jsonlint"
@ -1163,7 +1161,7 @@
"parser", "parser",
"validator" "validator"
], ],
"time": "2018-01-24T12:46:19+00:00" "time": "2017-06-18 15:11:04"
}, },
{ {
"name": "seld/phar-utils", "name": "seld/phar-utils",
@ -1207,34 +1205,34 @@
"keywords": [ "keywords": [
"phra" "phra"
], ],
"time": "2015-10-13T18:44:15+00:00" "time": "2015-10-13 18:44:15"
}, },
{ {
"name": "symfony/config", "name": "symfony/config",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/config.git", "url": "https://github.com/symfony/config.git",
"reference": "72689b934d6c6ecf73eca874e98933bf055313c9" "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/config/zipball/72689b934d6c6ecf73eca874e98933bf055313c9", "url": "https://api.github.com/repos/symfony/config/zipball/4ab62407bff9cd97c410a7feaef04c375aaa5cfd",
"reference": "72689b934d6c6ecf73eca874e98933bf055313c9", "reference": "4ab62407bff9cd97c410a7feaef04c375aaa5cfd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.5.9|>=7.0.8", "php": "^5.5.9|>=7.0.8",
"symfony/filesystem": "~2.8|~3.0|~4.0" "symfony/filesystem": "~2.8|~3.0"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<3.3", "symfony/dependency-injection": "<3.3",
"symfony/finder": "<3.3" "symfony/finder": "<3.3"
}, },
"require-dev": { "require-dev": {
"symfony/dependency-injection": "~3.3|~4.0", "symfony/dependency-injection": "~3.3",
"symfony/finder": "~3.3|~4.0", "symfony/finder": "~3.3",
"symfony/yaml": "~3.0|~4.0" "symfony/yaml": "~3.0"
}, },
"suggest": { "suggest": {
"symfony/yaml": "To use the yaml reference dumper" "symfony/yaml": "To use the yaml reference dumper"
@ -1242,7 +1240,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1269,49 +1267,48 @@
], ],
"description": "Symfony Config Component", "description": "Symfony Config Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-21T19:05:02+00:00" "time": "2017-10-04 18:56:58"
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "26b6f419edda16c19775211987651cb27baea7f1" "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/26b6f419edda16c19775211987651cb27baea7f1", "url": "https://api.github.com/repos/symfony/console/zipball/116bc56e45a8e5572e51eb43ab58c769a352366c",
"reference": "26b6f419edda16c19775211987651cb27baea7f1", "reference": "116bc56e45a8e5572e51eb43ab58c769a352366c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.5.9|>=7.0.8", "php": "^5.5.9|>=7.0.8",
"symfony/debug": "~2.8|~3.0|~4.0", "symfony/debug": "~2.8|~3.0",
"symfony/polyfill-mbstring": "~1.0" "symfony/polyfill-mbstring": "~1.0"
}, },
"conflict": { "conflict": {
"symfony/dependency-injection": "<3.4", "symfony/dependency-injection": "<3.3"
"symfony/process": "<3.3"
}, },
"require-dev": { "require-dev": {
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/config": "~3.3|~4.0", "symfony/config": "~3.3",
"symfony/dependency-injection": "~3.4|~4.0", "symfony/dependency-injection": "~3.3",
"symfony/event-dispatcher": "~2.8|~3.0|~4.0", "symfony/event-dispatcher": "~2.8|~3.0",
"symfony/lock": "~3.4|~4.0", "symfony/filesystem": "~2.8|~3.0",
"symfony/process": "~3.3|~4.0" "symfony/process": "~2.8|~3.0"
}, },
"suggest": { "suggest": {
"psr/log": "For using the console logger", "psr/log": "For using the console logger",
"symfony/event-dispatcher": "", "symfony/event-dispatcher": "",
"symfony/lock": "", "symfony/filesystem": "",
"symfony/process": "" "symfony/process": ""
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1338,36 +1335,36 @@
], ],
"description": "Symfony Console Component", "description": "Symfony Console Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-29T09:03:43+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/debug", "name": "symfony/debug",
"version": "v4.0.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/debug.git", "url": "https://github.com/symfony/debug.git",
"reference": "c77bb31d0f6310a2ac11e657475d396a92e5dc54" "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/c77bb31d0f6310a2ac11e657475d396a92e5dc54", "url": "https://api.github.com/repos/symfony/debug/zipball/eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd",
"reference": "c77bb31d0f6310a2ac11e657475d396a92e5dc54", "reference": "eb95d9ce8f18dcc1b3dfff00cb624c402be78ffd",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1.3", "php": "^5.5.9|>=7.0.8",
"psr/log": "~1.0" "psr/log": "~1.0"
}, },
"conflict": { "conflict": {
"symfony/http-kernel": "<3.4" "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
}, },
"require-dev": { "require-dev": {
"symfony/http-kernel": "~3.4|~4.0" "symfony/http-kernel": "~2.8|~3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "4.0-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1394,20 +1391,20 @@
], ],
"description": "Symfony Debug Component", "description": "Symfony Debug Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-18T22:19:33+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/dependency-injection", "name": "symfony/dependency-injection",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/dependency-injection.git", "url": "https://github.com/symfony/dependency-injection.git",
"reference": "4b2717ee2499390e371e1fc7abaf886c1c83e83d" "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4b2717ee2499390e371e1fc7abaf886c1c83e83d", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8ebad929aee3ca185b05f55d9cc5521670821ad1",
"reference": "4b2717ee2499390e371e1fc7abaf886c1c83e83d", "reference": "8ebad929aee3ca185b05f55d9cc5521670821ad1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1415,18 +1412,17 @@
"psr/container": "^1.0" "psr/container": "^1.0"
}, },
"conflict": { "conflict": {
"symfony/config": "<3.3.7", "symfony/config": "<3.3.1",
"symfony/finder": "<3.3", "symfony/finder": "<3.3",
"symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.3"
"symfony/yaml": "<3.4"
}, },
"provide": { "provide": {
"psr/container-implementation": "1.0" "psr/container-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"symfony/config": "~3.3|~4.0", "symfony/config": "~3.3",
"symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/expression-language": "~2.8|~3.0",
"symfony/yaml": "~3.4|~4.0" "symfony/yaml": "~3.3"
}, },
"suggest": { "suggest": {
"symfony/config": "", "symfony/config": "",
@ -1438,7 +1434,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1465,20 +1461,20 @@
], ],
"description": "Symfony DependencyInjection Component", "description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-29T09:16:57+00:00" "time": "2017-10-04 17:15:30"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher.git", "url": "https://github.com/symfony/event-dispatcher.git",
"reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca" "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca", "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d7ba037e4b8221956ab1e221c73c9e27e05dd423",
"reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca", "reference": "d7ba037e4b8221956ab1e221c73c9e27e05dd423",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1489,10 +1485,10 @@
}, },
"require-dev": { "require-dev": {
"psr/log": "~1.0", "psr/log": "~1.0",
"symfony/config": "~2.8|~3.0|~4.0", "symfony/config": "~2.8|~3.0",
"symfony/dependency-injection": "~3.3|~4.0", "symfony/dependency-injection": "~3.3",
"symfony/expression-language": "~2.8|~3.0|~4.0", "symfony/expression-language": "~2.8|~3.0",
"symfony/stopwatch": "~2.8|~3.0|~4.0" "symfony/stopwatch": "~2.8|~3.0"
}, },
"suggest": { "suggest": {
"symfony/dependency-injection": "", "symfony/dependency-injection": "",
@ -1501,7 +1497,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1528,20 +1524,20 @@
], ],
"description": "Symfony EventDispatcher Component", "description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/filesystem", "name": "symfony/filesystem",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/filesystem.git", "url": "https://github.com/symfony/filesystem.git",
"reference": "e078773ad6354af38169faf31c21df0f18ace03d" "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", "url": "https://api.github.com/repos/symfony/filesystem/zipball/90bc45abf02ae6b7deb43895c1052cb0038506f1",
"reference": "e078773ad6354af38169faf31c21df0f18ace03d", "reference": "90bc45abf02ae6b7deb43895c1052cb0038506f1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1550,7 +1546,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1577,20 +1573,20 @@
], ],
"description": "Symfony Filesystem Component", "description": "Symfony Filesystem Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00" "time": "2017-10-03 13:33:10"
}, },
{ {
"name": "symfony/finder", "name": "symfony/finder",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/finder.git", "url": "https://github.com/symfony/finder.git",
"reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" "reference": "773e19a491d97926f236942484cb541560ce862d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", "url": "https://api.github.com/repos/symfony/finder/zipball/773e19a491d97926f236942484cb541560ce862d",
"reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", "reference": "773e19a491d97926f236942484cb541560ce862d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1599,7 +1595,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1626,20 +1622,20 @@
], ],
"description": "Symfony Finder Component", "description": "Symfony Finder Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/options-resolver", "name": "symfony/options-resolver",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/options-resolver.git", "url": "https://github.com/symfony/options-resolver.git",
"reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ee4e22978fe885b54ee5da8c7964f0a5301abfb6",
"reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", "reference": "ee4e22978fe885b54ee5da8c7964f0a5301abfb6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1648,7 +1644,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1680,20 +1676,20 @@
"configuration", "configuration",
"options" "options"
], ],
"time": "2018-01-11T07:56:07+00:00" "time": "2017-07-29 21:54:42"
}, },
{ {
"name": "symfony/process", "name": "symfony/process",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/process.git", "url": "https://github.com/symfony/process.git",
"reference": "09a5172057be8fc677840e591b17f385e58c7c0d" "reference": "fdf89e57a723a29baf536e288d6e232c059697b1"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/09a5172057be8fc677840e591b17f385e58c7c0d", "url": "https://api.github.com/repos/symfony/process/zipball/fdf89e57a723a29baf536e288d6e232c059697b1",
"reference": "09a5172057be8fc677840e591b17f385e58c7c0d", "reference": "fdf89e57a723a29baf536e288d6e232c059697b1",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -1702,7 +1698,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1729,34 +1725,34 @@
], ],
"description": "Symfony Process Component", "description": "Symfony Process Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-29T09:03:43+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/proxy-manager-bridge", "name": "symfony/proxy-manager-bridge",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/proxy-manager-bridge.git", "url": "https://github.com/symfony/proxy-manager-bridge.git",
"reference": "ffb375b65cf112364b5374ed99059975ca84a6bd" "reference": "8c88403febb02a49e3f55512fced3c400c80cf28"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/ffb375b65cf112364b5374ed99059975ca84a6bd", "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/8c88403febb02a49e3f55512fced3c400c80cf28",
"reference": "ffb375b65cf112364b5374ed99059975ca84a6bd", "reference": "8c88403febb02a49e3f55512fced3c400c80cf28",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ocramius/proxy-manager": "~0.4|~1.0|~2.0", "ocramius/proxy-manager": "~0.4|~1.0|~2.0",
"php": "^5.5.9|>=7.0.8", "php": "^5.5.9|>=7.0.8",
"symfony/dependency-injection": "~3.4|~4.0" "symfony/dependency-injection": "~2.8|~3.0"
}, },
"require-dev": { "require-dev": {
"symfony/config": "~2.8|~3.0|~4.0" "symfony/config": "~2.8|~3.0"
}, },
"type": "symfony-bridge", "type": "symfony-bridge",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1783,30 +1779,27 @@
], ],
"description": "Symfony ProxyManager Bridge", "description": "Symfony ProxyManager Bridge",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-03T07:37:34+00:00" "time": "2017-10-02 06:42:24"
}, },
{ {
"name": "symfony/yaml", "name": "symfony/yaml",
"version": "v3.4.4", "version": "v3.3.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/yaml.git", "url": "https://github.com/symfony/yaml.git",
"reference": "eab73b6c21d27ae4cd037c417618dfd4befb0bfe" "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/eab73b6c21d27ae4cd037c417618dfd4befb0bfe", "url": "https://api.github.com/repos/symfony/yaml/zipball/8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46",
"reference": "eab73b6c21d27ae4cd037c417618dfd4befb0bfe", "reference": "8c7bf1e7d5d6b05a690b715729cb4cd0c0a99c46",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^5.5.9|>=7.0.8" "php": "^5.5.9|>=7.0.8"
}, },
"conflict": {
"symfony/console": "<3.4"
},
"require-dev": { "require-dev": {
"symfony/console": "~3.4|~4.0" "symfony/console": "~2.8|~3.0"
}, },
"suggest": { "suggest": {
"symfony/console": "For validating YAML files using the lint command" "symfony/console": "For validating YAML files using the lint command"
@ -1814,7 +1807,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.4-dev" "dev-master": "3.3-dev"
} }
}, },
"autoload": { "autoload": {
@ -1841,31 +1834,31 @@
], ],
"description": "Symfony Yaml Component", "description": "Symfony Yaml Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2018-01-21T19:05:02+00:00" "time": "2017-10-05 14:43:42"
}, },
{ {
"name": "zendframework/zend-code", "name": "zendframework/zend-code",
"version": "3.3.0", "version": "3.1.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/zendframework/zend-code.git", "url": "https://github.com/zendframework/zend-code.git",
"reference": "6b1059db5b368db769e4392c6cb6cc139e56640d" "reference": "2899c17f83a7207f2d7f53ec2f421204d3beea27"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/zendframework/zend-code/zipball/6b1059db5b368db769e4392c6cb6cc139e56640d", "url": "https://api.github.com/repos/zendframework/zend-code/zipball/2899c17f83a7207f2d7f53ec2f421204d3beea27",
"reference": "6b1059db5b368db769e4392c6cb6cc139e56640d", "reference": "2899c17f83a7207f2d7f53ec2f421204d3beea27",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.1", "php": "^5.6 || 7.0.0 - 7.0.4 || ^7.0.6",
"zendframework/zend-eventmanager": "^2.6 || ^3.0" "zendframework/zend-eventmanager": "^2.6 || ^3.0"
}, },
"require-dev": { "require-dev": {
"doctrine/annotations": "~1.0", "doctrine/annotations": "~1.0",
"ext-phar": "*", "ext-phar": "*",
"phpunit/phpunit": "^6.2.3", "phpunit/phpunit": "^4.8.21",
"zendframework/zend-coding-standard": "^1.0.0", "squizlabs/php_codesniffer": "^2.5",
"zendframework/zend-stdlib": "^2.7 || ^3.0" "zendframework/zend-stdlib": "^2.7 || ^3.0"
}, },
"suggest": { "suggest": {
@ -1875,8 +1868,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.2-dev", "dev-master": "3.1-dev",
"dev-develop": "3.3-dev" "dev-develop": "3.2-dev"
} }
}, },
"autoload": { "autoload": {
@ -1894,7 +1887,7 @@
"code", "code",
"zf2" "zf2"
], ],
"time": "2017-10-20T15:21:32+00:00" "time": "2016-10-24 13:23:32"
}, },
{ {
"name": "zendframework/zend-eventmanager", "name": "zendframework/zend-eventmanager",
@ -1948,7 +1941,7 @@
"events", "events",
"zf2" "zf2"
], ],
"time": "2017-07-11T19:17:22+00:00" "time": "2017-07-11 19:17:22"
} }
], ],
"aliases": [], "aliases": [],

View File

@ -2,7 +2,7 @@
"documentationDefault": { "documentationDefault": {
"apiBlueprint": { "POST::apiBlueprint": {
"description": "Retourne une documentation de l'API au format API Blueprint.", "description": "Retourne une documentation de l'API au format API Blueprint.",
"permissions": [["admin"]], "permissions": [["admin"]],
"options": { "download": true }, "options": { "download": true },
@ -14,7 +14,7 @@
"motheure": { "motheure": {
"getCount": { "POST::getCount": {
"description": "Retourne le compteur horaire du moteur d'une machine donnée", "description": "Retourne le compteur horaire du moteur d'une machine donnée",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -24,8 +24,7 @@
"count": { "description": "Compte horaire (en secondes)", "type": "int" } "count": { "description": "Compte horaire (en secondes)", "type": "int" }
} }
}, },
"POST::increment": {
"increment": {
"description": "Incrémente le comptheure horaire d'une machine.", "description": "Incrémente le comptheure horaire d'une machine.",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -38,7 +37,7 @@
"authenticationDefault": { "authenticationDefault": {
"warehouse": { "POST::warehouse": {
"description": "Connexion de premier niveau : entrepot.", "description": "Connexion de premier niveau : entrepot.",
"permissions": [], "permissions": [],
"parameters": { "parameters": {
@ -50,7 +49,7 @@
} }
}, },
"admin": { "POST::admin": {
"description": "Connexion de second niveau : administrateur.", "description": "Connexion de second niveau : administrateur.",
"permissions": [["warehouse"]], "permissions": [["warehouse"]],
"parameters": { "parameters": {
@ -62,23 +61,7 @@
} }
}, },
"update_warehouse": { "POST::get_admins": {
"description": "Changement de code d'accés de l'entrepôt",
"permissions": [["admin"]],
"parameters": {
"old": { "description": "Mot de passe actuel", "type": "text" },
"new": { "description": "Nouveau mot de passe", "type": "text" },
"confirm": { "description": "Confirmation du nouveau mot de passe", "type": "text" }
},
"output": {}
}
},
"adminDefault": {
"getAll": {
"description": "Retourne la liste des administrateurs de l'entrepôt.", "description": "Retourne la liste des administrateurs de l'entrepôt.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": {}, "parameters": {},
@ -87,7 +70,7 @@
} }
}, },
"update": { "POST::update_admin": {
"description": "Changement de mot de passe administrateur", "description": "Changement de mot de passe administrateur",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -98,16 +81,18 @@
"output": {} "output": {}
}, },
"delete": { "POST::update_warehouse": {
"description": "Suppression d'un accès administrateur", "description": "Changement de code d'accés de l'entrepôt",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
"id_admin": { "description": "Identifiant de l'administrateur", "type": "id" } "old": { "description": "Mot de passe actuel", "type": "text" },
"new": { "description": "Nouveau mot de passe", "type": "text" },
"confirm": { "description": "Confirmation du nouveau mot de passe", "type": "text" }
}, },
"output": {} "output": {}
}, },
"create": { "POST::create_admin": {
"description": "Création d'un administrateur", "description": "Création d'un administrateur",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -124,7 +109,7 @@
"userDefault": { "userDefault": {
"create": { "POST::create": {
"description": "Création d'un nouvel utilisateur.", "description": "Création d'un nouvel utilisateur.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -139,7 +124,7 @@
} }
}, },
"link": { "POST::link": {
"description": "Ajout d'un utilisateur à un groupe.", "description": "Ajout d'un utilisateur à un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -150,7 +135,7 @@
}, },
"unlink": { "POST::unlink": {
"description": "Retrait d'un utilisateur d'un groupe", "description": "Retrait d'un utilisateur d'un groupe",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -160,7 +145,7 @@
"output": {} "output": {}
}, },
"search": { "POST::search": {
"description": "Recherche d'un utilisateur par mots-clés.", "description": "Recherche d'un utilisateur par mots-clés.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -171,7 +156,7 @@
} }
}, },
"getAll": { "POST::getAll": {
"description": "Liste de tous les utilisateurs", "description": "Liste de tous les utilisateurs",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": {}, "parameters": {},
@ -180,7 +165,7 @@
} }
}, },
"getById": { "POST::getById": {
"description": "Retourne un utilisateur spécifique.", "description": "Retourne un utilisateur spécifique.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -191,7 +176,7 @@
} }
}, },
"getByCode": { "POST::getByCode": {
"description": "Retourne un utilisateur de Code RFID donné.", "description": "Retourne un utilisateur de Code RFID donné.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -202,7 +187,7 @@
} }
}, },
"getByUsername": { "POST::getByUsername": {
"description": "Retourne un utilisateur d'identifiant donné.", "description": "Retourne un utilisateur d'identifiant donné.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -213,7 +198,7 @@
} }
}, },
"getClusters": { "POST::getClusters": {
"description": "Retourne les groupes d'un utilisateur.", "description": "Retourne les groupes d'un utilisateur.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -224,7 +209,7 @@
} }
}, },
"edit": { "POST::edit": {
"description": "Modifie les attributs d'un utilisateur.", "description": "Modifie les attributs d'un utilisateur.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -243,7 +228,7 @@
} }
}, },
"delete": { "POST::delete": {
"description": "Suppression d'un utilisateur.", "description": "Suppression d'un utilisateur.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -259,7 +244,7 @@
"machineDefault": { "machineDefault": {
"update": { "POST::update": {
"description": "Mise à jour d'un SATS.", "description": "Mise à jour d'un SATS.",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -270,7 +255,7 @@
} }
}, },
"sync": { "POST::sync": {
"description": "Synchronisation d'un SATS.", "description": "Synchronisation d'un SATS.",
"permissions": [["warehouse"]], "permissions": [["warehouse"]],
"parameters": { "parameters": {
@ -283,7 +268,7 @@
} }
}, },
"create": { "POST::create": {
"description": "Création d'une nouvelle machine.", "description": "Création d'une nouvelle machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -294,7 +279,7 @@
} }
}, },
"link": { "POST::link": {
"description": "Ajout d'une machine à un groupe.", "description": "Ajout d'une machine à un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -304,7 +289,7 @@
"output": {} "output": {}
}, },
"unlink": { "POST::unlink": {
"description": "Retrait d'une machine d'un groupe.", "description": "Retrait d'une machine d'un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -314,7 +299,7 @@
"output": {} "output": {}
}, },
"search": { "POST::search": {
"description": "Recherche une machine par mots-clés.", "description": "Recherche une machine par mots-clés.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -325,7 +310,7 @@
} }
}, },
"getAll": { "POST::getAll": {
"description": "Retourne la liste de toutes les machines.", "description": "Retourne la liste de toutes les machines.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": {}, "parameters": {},
@ -334,7 +319,7 @@
} }
}, },
"getById": { "POST::getById": {
"description": "Retourne les données d'une machine.", "description": "Retourne les données d'une machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -345,7 +330,7 @@
} }
}, },
"getByName": { "POST::getByName": {
"description": "Retourne les données d'une machine de nom donné.", "description": "Retourne les données d'une machine de nom donné.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -356,7 +341,7 @@
} }
}, },
"getClusters": { "POST::getClusters": {
"description": "Retourne les groupes d'une machine.", "description": "Retourne les groupes d'une machine.",
"permissions": [["admin"], ["sats"]], "permissions": [["admin"], ["sats"]],
"parameters": { "parameters": {
@ -367,7 +352,7 @@
} }
}, },
"edit": { "POST::edit": {
"description": "Modifie les attributs d'une machine.", "description": "Modifie les attributs d'une machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -377,7 +362,7 @@
"output": {} "output": {}
}, },
"delete": { "POST::delete": {
"description": "Supprime une machine.", "description": "Supprime une machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -388,7 +373,7 @@
} }
}, },
"getState": { "POST::getState": {
"description": "Retourne l'état d'une machine.", "description": "Retourne l'état d'une machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -404,7 +389,7 @@
"clusterDefault": { "clusterDefault": {
"create": { "POST::create": {
"description": "Création d'un nouveau groupe.", "description": "Création d'un nouveau groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -416,7 +401,7 @@
} }
}, },
"search": { "POST::search": {
"description": "Recherche d'un groupe par mots-clés.", "description": "Recherche d'un groupe par mots-clés.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -428,7 +413,7 @@
} }
}, },
"getAll": { "POST::getAll": {
"description": "Liste de tous les groupes", "description": "Liste de tous les groupes",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -439,7 +424,7 @@
} }
}, },
"getById": { "POST::getById": {
"description": "Retourne un groupe spécifique.", "description": "Retourne un groupe spécifique.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -451,7 +436,7 @@
} }
}, },
"getByName": { "POST::getByName": {
"description": "Retourne un groupe de nom donné.", "description": "Retourne un groupe de nom donné.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -463,7 +448,7 @@
} }
}, },
"getMembers": { "POST::getMembers": {
"description": "Retourne les membres d'un groupe.", "description": "Retourne les membres d'un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -475,7 +460,7 @@
} }
}, },
"edit": { "POST::edit": {
"description": "Modifie le nom d'un groupe.", "description": "Modifie le nom d'un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -488,7 +473,7 @@
} }
}, },
"delete": { "POST::delete": {
"description": "Suppression d'un groupe.", "description": "Suppression d'un groupe.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -500,7 +485,7 @@
} }
}, },
"addPermission": { "POST::addPermission": {
"description": "Ajout d'une permission", "description": "Ajout d'une permission",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -511,7 +496,7 @@
"output": {} "output": {}
}, },
"remPermission": { "POST::remPermission": {
"description": "Suppression d'une permission", "description": "Suppression d'une permission",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -522,7 +507,7 @@
"output": {} "output": {}
}, },
"getPermissions": { "POST::getPermissions": {
"description": "Retourne la liste des permissions", "description": "Retourne la liste des permissions",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": {}, "parameters": {},
@ -531,7 +516,7 @@
} }
}, },
"getAuthenticatedClusters": { "POST::getAuthenticatedClusters": {
"description": "Retourne les groupes d'utilisateurs ayant une action sur un groupe de machine.", "description": "Retourne les groupes d'utilisateurs ayant une action sur un groupe de machine.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -543,7 +528,7 @@
} }
}, },
"getModules": { "POST::getModules": {
"description": "Retourne les modules d'un groupe de machines", "description": "Retourne les modules d'un groupe de machines",
"permissions": [["admin"], ["sats"]], "permissions": [["admin"], ["sats"]],
"parameters": { "parameters": {
@ -554,7 +539,7 @@
} }
}, },
"getEtrees": { "POST::getEtrees": {
"description": "Retourne les e-trees d'un groupe de machines", "description": "Retourne les e-trees d'un groupe de machines",
"permissions": [["admin"], ["sats"]], "permissions": [["admin"], ["sats"]],
"parameters": { "parameters": {
@ -568,7 +553,7 @@
}, },
"historyDefault": { "historyDefault": {
"create": { "POST::create": {
"description": "Retourne l'historique complet", "description": "Retourne l'historique complet",
"permissions": [["admin"], ["sats"]], "permissions": [["admin"], ["sats"]],
"parameters": { "parameters": {
@ -579,7 +564,7 @@
}, },
"output": {} "output": {}
}, },
"getAll": { "POST::getAll": {
"description": "Retourne l'historique complet", "description": "Retourne l'historique complet",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": {}, "parameters": {},
@ -588,7 +573,7 @@
} }
}, },
"search": { "POST::search": {
"description": "Recherche une entrée historique par mots-clés.", "description": "Recherche une entrée historique par mots-clés.",
"permissions": [["admin"]], "permissions": [["admin"]],
"parameters": { "parameters": {
@ -599,40 +584,18 @@
} }
}, },
"archive": { "POST::archive": {
"description": "Archive de l'historique complet.", "description": "Archive de l'historique complet.",
"permissions": [["admin"]], "permissions": [["admin"]],
"options": { "download": true }, "options": { "download": true },
"parameters": {}, "parameters": {},
"output": {} "output": {}
},
"get_timeline": {
"description": "Retourne la timeline d'une machine pour associée à une entrée historique.",
"permissions": [["admin"]],
"parameters": {
"id_entry": { "description": "UID de l'entrée historique", "type": "id" }
},
"output": {
"timeline": { "description": "Données de la timeline.", "type": "array" }
}
},
"getById": {
"description": "Retourne les données associées à une entrée historique.",
"permissions": [["admin"]],
"parameters": {
"id_entry": { "description": "UID de l'entrée historique", "type": "id" }
},
"output": {
"entry": { "description": "Données de l'entrée.", "type": "array" }
}
} }
}, },
"fetchDefault": { "fetchDefault": {
"dispatch": { "POST::dispatch": {
"description": "Dispatche la gestion des données reçues par un SATS", "description": "Dispatche la gestion des données reçues par un SATS",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -644,7 +607,7 @@
} }
}, },
"rfid_read": { "POST::rfid_read": {
"description": "Enregistrement de l'historique de l'e-tree READ du module RFID", "description": "Enregistrement de l'historique de l'e-tree READ du module RFID",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -655,7 +618,7 @@
} }
}, },
"motheure_simple": { "POST::motheure_simple": {
"description": "Enregistrement du compte horaire de l'e-tree SIMPLE du module MOTHEURE", "description": "Enregistrement du compte horaire de l'e-tree SIMPLE du module MOTHEURE",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -669,7 +632,7 @@
"deployDefault": { "deployDefault": {
"dispatch": { "POST::dispatch": {
"description": "Dispatche la gestion des données à synchroniser par un SATS", "description": "Dispatche la gestion des données à synchroniser par un SATS",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": { "parameters": {
@ -680,7 +643,7 @@
} }
}, },
"rfid_read": { "POST::rfid_read": {
"description": "Enregistrement de l'historique de l'e-tree READ du module RFID", "description": "Enregistrement de l'historique de l'e-tree READ du module RFID",
"permissions": [["sats"]], "permissions": [["sats"]],
"parameters": {}, "parameters": {},

View File

@ -18,7 +18,6 @@
"search", "search",
"getAll", "getAll",
"getById",
"getByIdUser", "getByIdUser",
"getByIdMachine", "getByIdMachine",
"getByIdAction" "getByIdAction"

View File

@ -3,7 +3,7 @@
-- http://www.phpmyadmin.net -- http://www.phpmyadmin.net
-- --
-- Host: localhost -- Host: localhost
-- Generation Time: Nov 13, 2017 at 08:18 AM -- Generation Time: Oct 12, 2017 at 09:32 PM
-- Server version: 5.7.19-0ubuntu0.16.04.1 -- Server version: 5.7.19-0ubuntu0.16.04.1
-- PHP Version: 7.0.22-0ubuntu0.16.04.1 -- PHP Version: 7.0.22-0ubuntu0.16.04.1
@ -19,6 +19,8 @@ SET time_zone = "+00:00";
-- --
-- Database: `logauth` -- Database: `logauth`
-- --
CREATE DATABASE IF NOT EXISTS `logauth` DEFAULT CHARACTER SET latin1 COLLATE latin1_bin;
USE `logauth`;
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -26,6 +28,7 @@ SET time_zone = "+00:00";
-- Table structure for table `action` -- Table structure for table `action`
-- --
DROP TABLE IF EXISTS `action`;
CREATE TABLE `action` ( CREATE TABLE `action` (
`id_action` int(11) NOT NULL, `id_action` int(11) NOT NULL,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
@ -52,6 +55,7 @@ INSERT INTO `action` (`id_action`, `name`, `timeout`, `required`, `action`) VALU
-- Table structure for table `action_merge` -- Table structure for table `action_merge`
-- --
DROP TABLE IF EXISTS `action_merge`;
CREATE TABLE `action_merge` ( CREATE TABLE `action_merge` (
`id_action_merge` int(11) NOT NULL, `id_action_merge` int(11) NOT NULL,
`id_target` int(11) NOT NULL, `id_target` int(11) NOT NULL,
@ -101,6 +105,7 @@ INSERT INTO `action_merge` (`id_action_merge`, `id_target`, `id_source`, `id_act
-- Table structure for table `admin` -- Table structure for table `admin`
-- --
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` ( CREATE TABLE `admin` (
`id_admin` int(11) NOT NULL, `id_admin` int(11) NOT NULL,
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
@ -116,10 +121,8 @@ CREATE TABLE `admin` (
INSERT INTO `admin` (`id_admin`, `id_warehouse`, `username`, `mail`, `password`, `token`) VALUES INSERT INTO `admin` (`id_admin`, `id_warehouse`, `username`, `mail`, `password`, `token`) VALUES
(1, 7, 'adrien.marques', 'adminmail@gmail.com', 'eb35bccc794d3151b050285c3f6f6d084faadcc7345302b639fbb036cf623b7befcbf7ea08579c612f6201b22cdbc98d6d5d39354b3d31f51ba0426a5299371d', '434f3494ca228538463320eccf93ba67ca29e734073fbf7a9178ba7494b0e26365bb5ae2ead89428f515cdcb9ac75f0ec2200033c3911f4a49f133dfb6dd4aca'), (1, 7, 'adrien.marques', 'adminmail@gmail.com', 'eb35bccc794d3151b050285c3f6f6d084faadcc7345302b639fbb036cf623b7befcbf7ea08579c612f6201b22cdbc98d6d5d39354b3d31f51ba0426a5299371d', '434f3494ca228538463320eccf93ba67ca29e734073fbf7a9178ba7494b0e26365bb5ae2ead89428f515cdcb9ac75f0ec2200033c3911f4a49f133dfb6dd4aca'),
(4, 7, 'willy.fontaine', 'willy.fontaine@stef.com', '08678556fd8223eb5d6014deeec072b809df8ac1dd6e087150f2b9e3820640ed92e33db793b9a02f31615490cee7b01c659865a6322a9d784bf86747ec41d7aa', '728caa787cf2f567cfeacf682e64b36a6387955cc441dc62c59fc51df034760e76fccb934b82f4495cfe860c3092665811d93bd1549f7d286d0ad071ee45b6fd'), (2, 8, 'alexandre.marques', 'admin2mail@gmail.com', 'b70896036f6d717f938ca09f531364c17910fc6a2011166e2c2bac6f505bda52e8d8993fefb7a6fdf13b1fd5368280f064ff87e01ae74aadf7e14f582dede676', '287361328d110cbc2e78464563e005dc82a6a0d501b84cba6770dd3d173b65eef0b226fcb8326cc14fb4ee9dec5df6622a11fd8e6e8a6e518a7eca055e67e8c5'),
(5, 8, 'willy.fontaine', 'willy.fontaine@stef.com', '08678556fd8223eb5d6014deeec072b809df8ac1dd6e087150f2b9e3820640ed92e33db793b9a02f31615490cee7b01c659865a6322a9d784bf86747ec41d7aa', '9e8d9632bde19a34e1d0cc953c4ad59f59ed6f8ce981e655fccc6083e8dc2dfbc754230277ec5aa2c5e884a4fd71ee229b2d9e49492ce283fb40c23a73e432f3'), (4, 8, 'willy.fontaine', 'willy.fontaine@stef.com', '08678556fd8223eb5d6014deeec072b809df8ac1dd6e087150f2b9e3820640ed92e33db793b9a02f31615490cee7b01c659865a6322a9d784bf86747ec41d7aa', '728caa787cf2f567cfeacf682e64b36a6387955cc441dc62c59fc51df034760e76fccb934b82f4495cfe860c3092665811d93bd1549f7d286d0ad071ee45b6fd');
(8, 8, 'patrick.letort', 'patrick.letort@stef.com', '2dae3e1c28554b77c2e1ec20fba4405937b159f7607802f8e88df8cefaa53a683f143edad0e1196dd13c58dc180e3bbd23e97ed320361ac33b99500e5f63071c', '8cfae3acc5917a8656e5603f7e7171265342c04af4d3a1c5ddb183905ab8bd0030edc64a4beee67b92bcbdfbbf5299625adfbbc48fb27f42a98e0a0b8afc4e09'),
(9, 8, 'adrien.marques', 'marquesadri1@gmail.com', 'e8bf5e2e0fa92a3dabfa3563c49c55ad1741faf71783d86c3342cd3bd04b46c8b138cb4efeb078c98daa777856de7eccad2189fc5f4f6fe58ffb1dec2baf38b3', '395c9e06462072e0e724be228cddccbf5189ef1f52558241ae2f89cfdf83f825b3c718396f8002a097e4648199ab8094c1390e31f0b77dbc4004093a62115822');
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -127,6 +130,7 @@ INSERT INTO `admin` (`id_admin`, `id_warehouse`, `username`, `mail`, `password`,
-- Table structure for table `chip` -- Table structure for table `chip`
-- --
DROP TABLE IF EXISTS `chip`;
CREATE TABLE `chip` ( CREATE TABLE `chip` (
`id_chip` int(11) NOT NULL, `id_chip` int(11) NOT NULL,
`id_module` int(11) DEFAULT NULL, `id_module` int(11) DEFAULT NULL,
@ -150,6 +154,7 @@ INSERT INTO `chip` (`id_chip`, `id_module`, `name`, `position`, `type`, `pins`)
-- Table structure for table `etree` -- Table structure for table `etree`
-- --
DROP TABLE IF EXISTS `etree`;
CREATE TABLE `etree` ( CREATE TABLE `etree` (
`id_etree` int(11) NOT NULL, `id_etree` int(11) NOT NULL,
`id_module` int(11) NOT NULL, `id_module` int(11) NOT NULL,
@ -172,6 +177,7 @@ INSERT INTO `etree` (`id_etree`, `id_module`, `daemon`) VALUES
-- Table structure for table `global_state` -- Table structure for table `global_state`
-- --
DROP TABLE IF EXISTS `global_state`;
CREATE TABLE `global_state` ( CREATE TABLE `global_state` (
`id_global_state` int(11) NOT NULL, `id_global_state` int(11) NOT NULL,
`global_state` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT 'started | signaled | locked', `global_state` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT 'started | signaled | locked',
@ -194,6 +200,7 @@ INSERT INTO `global_state` (`id_global_state`, `global_state`, `chips`) VALUES
-- Table structure for table `history` -- Table structure for table `history`
-- --
DROP TABLE IF EXISTS `history`;
CREATE TABLE `history` ( CREATE TABLE `history` (
`id_history` int(11) NOT NULL, `id_history` int(11) NOT NULL,
`timestamp` int(11) NOT NULL, `timestamp` int(11) NOT NULL,
@ -207,117 +214,68 @@ CREATE TABLE `history` (
-- --
INSERT INTO `history` (`id_history`, `timestamp`, `id_user`, `id_machine`, `id_action`) VALUES INSERT INTO `history` (`id_history`, `timestamp`, `id_user`, `id_machine`, `id_action`) VALUES
(504, 1508073591, 210, 127, 1), (285, 1506950713, 215, 126, 1),
(505, 1508073598, 210, 127, 5), (286, 1506950739, 215, 126, 5),
(506, 1508073601, 210, 127, 1), (287, 1506950740, 215, 126, 1),
(507, 1508073644, 210, 127, 5), (288, 1506950741, 215, 126, 5),
(508, 1508073654, 210, 127, 1), (289, 1506950742, 215, 126, 1),
(509, 1508073657, 210, 127, 2), (290, 1506950804, 215, 126, 5),
(510, 1508073659, 210, 127, 3), (291, 1506950807, 215, 126, 2),
(511, 1508073682, 218, 127, 4), (292, 1506950810, 215, 126, 5),
(512, 1508073687, 210, 127, 1), (293, 1506950811, 215, 126, 1),
(513, 1508129928, 210, 127, 5), (294, 1506950812, 215, 126, 5),
(514, 1508129955, 210, 127, 1), (295, 1506950813, 215, 126, 1),
(515, 1508129964, 210, 127, 5), (296, 1506950815, 210, 126, 6),
(516, 1508129991, 210, 127, 1), (297, 1506950819, 215, 126, 5),
(517, 1508130001, 210, 127, 5), (298, 1506950822, 215, 126, 2),
(518, 1508130011, 210, 127, 1), (299, 1506950824, 215, 126, 3),
(519, 1508130022, 210, 127, 5), (300, 1506950829, 210, 126, 4),
(520, 1508130024, 210, 127, 1), (301, 1506950831, 215, 126, 1),
(521, 1508130027, 210, 127, 2), (302, 1506951006, 215, 126, 5),
(522, 1508130029, 210, 127, 3), (303, 1506951006, 215, 126, 1),
(523, 1508130114, 218, 127, 4), (304, 1506951007, 215, 126, 5),
(524, 1508130137, 210, 127, 1), (305, 1506951188, 215, 126, 1),
(525, 1508130156, 210, 127, 5), (306, 1506951190, 215, 126, 5),
(526, 1508130160, 210, 127, 1), (307, 1506951201, 215, 126, 1),
(527, 1508130198, 210, 127, 5), (308, 1506951205, 215, 126, 5),
(528, 1508130200, 210, 127, 1), (309, 1506951209, 215, 126, 1),
(529, 1508130203, 210, 127, 2), (310, 1506951210, 215, 126, 5),
(530, 1508130332, 218, 127, 6), (311, 1506951211, 215, 126, 1),
(531, 1508130339, 210, 127, 5), (312, 1506951211, 215, 126, 5),
(532, 1508130349, 210, 127, 1), (313, 1506951212, 215, 126, 1),
(533, 1508130447, 210, 127, 5), (314, 1506951213, 215, 126, 5),
(534, 1508130449, 210, 127, 1), (315, 1506951218, 215, 126, 1),
(535, 1508130451, 210, 127, 5), (316, 1506951219, 215, 126, 5),
(536, 1508130459, 210, 127, 1), (317, 1506951219, 215, 126, 1),
(537, 1508130644, 210, 127, 5), (318, 1506951219, 215, 126, 5),
(538, 1508130652, 210, 127, 1), (319, 1506951220, 215, 126, 1),
(539, 1508130654, 210, 127, 5), (320, 1506951221, 215, 126, 5),
(540, 1508130663, 210, 127, 1), (321, 1506951221, 215, 126, 1),
(541, 1508130668, 210, 127, 5), (322, 1506951225, 215, 126, 5),
(542, 1508131094, 210, 127, 1), (323, 1506951235, 215, 126, 1),
(543, 1508131102, 210, 127, 5), (324, 1506951237, 215, 126, 5),
(544, 1508131107, 210, 127, 1), (325, 1506951271, 215, 126, 1),
(545, 1508131120, 210, 127, 5), (326, 1506951274, 215, 126, 2),
(546, 1508131149, 210, 127, 1), (327, 1506951276, 215, 126, 3),
(547, 1508131167, 210, 127, 5), (328, 1506951341, 210, 126, 4),
(548, 1508131176, 210, 127, 1), (329, 1506951345, 215, 126, 1),
(549, 1508131281, 210, 127, 5), (330, 1506951370, 215, 126, 5),
(550, 1508131286, 210, 127, 1), (331, 1506951372, 215, 126, 1),
(551, 1508131313, 210, 127, 5), (332, 1506951375, 215, 126, 2),
(552, 1508131320, 210, 127, 1), (333, 1506951377, 215, 126, 3),
(553, 1508131323, 210, 127, 5), (334, 1506951480, 210, 126, 4),
(554, 1508136438, 210, 127, 1), (335, 1507815648, 215, 127, 1),
(555, 1508136455, 210, 127, 5), (336, 1507815649, 215, 127, 5),
(556, 1508136480, 210, 127, 1), (337, 1507816917, 215, 127, 1),
(557, 1508136499, 210, 127, 5), (338, 1507820260, 215, 127, 5),
(558, 1508137679, 210, 127, 1), (339, 1507820263, 215, 127, 2),
(559, 1508137723, 210, 127, 5), (340, 1507830442, 215, 127, 5),
(560, 1508137727, 210, 127, 1), (341, 1507830445, 215, 127, 1),
(561, 1508137737, 210, 127, 5), (342, 1507830516, 215, 127, 5),
(562, 1508137744, 210, 127, 1), (343, 1507830518, 215, 127, 1),
(563, 1508152269, 210, 127, 5), (344, 1507830586, 215, 127, 5),
(564, 1508153966, 210, 127, 1), (345, 1507830587, 215, 127, 1),
(565, 1508163844, 210, 127, 5), (346, 1507830590, 210, 127, 6);
(566, 1508163848, 210, 127, 1),
(567, 1508163849, 210, 127, 5),
(568, 1508163873, 210, 127, 1),
(569, 1508163879, 210, 127, 5),
(570, 1508220239, 210, 127, 1),
(571, 1508220269, 210, 127, 5),
(572, 1508220272, 210, 127, 1),
(573, 1508220284, 210, 127, 5),
(574, 1508220292, 210, 127, 1),
(575, 1508226597, 210, 127, 5),
(576, 1508227895, 210, 127, 1),
(577, 1508233976, 210, 127, 5),
(578, 1508236312, 210, 127, 1),
(579, 1508248170, 210, 127, 5),
(580, 1508249485, 210, 127, 1),
(581, 1508253739, 210, 127, 5),
(582, 1508296080, 210, 127, 1),
(583, 1508296083, 210, 127, 5),
(584, 1508296086, 210, 127, 1),
(585, 1508296091, 210, 127, 5),
(586, 1508296095, 210, 127, 1),
(587, 1508296106, 210, 127, 5),
(588, 1508296155, 210, 127, 1),
(589, 1508296156, 210, 127, 5),
(590, 1508296248, 210, 127, 1),
(591, 1508296252, 210, 127, 5),
(592, 1508306368, 210, 127, 1),
(593, 1508325871, 210, 127, 5),
(594, 1508387103, 210, 127, 1),
(595, 1508389196, 210, 127, 5),
(596, 1508389201, 210, 127, 1),
(597, 1508389202, 210, 127, 5),
(598, 1508389203, 210, 127, 1),
(599, 1508389205, 210, 127, 5),
(600, 1508389216, 210, 127, 1),
(601, 1508389224, 210, 127, 5),
(602, 1508389226, 210, 127, 1),
(603, 1508389235, 210, 127, 5),
(604, 1508534088, 210, 127, 1),
(605, 1508534098, 210, 127, 5),
(606, 1508534099, 210, 127, 1),
(607, 1508534383, 210, 127, 5),
(608, 1508650844, 210, 127, 1),
(609, 1508659205, 210, 127, 5),
(610, 1508659207, 210, 127, 1),
(611, 1508665004, 210, 127, 5),
(612, 1508665006, 210, 127, 1),
(613, 1508665094, 210, 127, 5),
(614, 1508667146, 210, 127, 1);
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -325,6 +283,7 @@ INSERT INTO `history` (`id_history`, `timestamp`, `id_user`, `id_machine`, `id_a
-- Table structure for table `log` -- Table structure for table `log`
-- --
DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` ( CREATE TABLE `log` (
`id_log` int(11) NOT NULL, `id_log` int(11) NOT NULL,
`id_feature` int(11) NOT NULL, `id_feature` int(11) NOT NULL,
@ -339,6 +298,7 @@ CREATE TABLE `log` (
-- Table structure for table `machine` -- Table structure for table `machine`
-- --
DROP TABLE IF EXISTS `machine`;
CREATE TABLE `machine` ( CREATE TABLE `machine` (
`id_machine` int(11) NOT NULL, `id_machine` int(11) NOT NULL,
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
@ -463,12 +423,12 @@ INSERT INTO `machine` (`id_machine`, `id_warehouse`, `name`, `token`, `unlock_co
(115, 7, 'sd', NULL, NULL, NULL, NULL), (115, 7, 'sd', NULL, NULL, NULL, NULL),
(116, 7, 'machine13', NULL, NULL, NULL, NULL), (116, 7, 'machine13', NULL, NULL, NULL, NULL),
(121, 7, 'dsad', NULL, NULL, NULL, NULL), (121, 7, 'dsad', NULL, NULL, NULL, NULL),
(122, 8, 'surgel1', '7853cb554aebb76640df3e066b67a099720939aa86e52b9c17bb236d090121936fb018b301fb1ab1b49d68e360a3ebbc0a2a9be99cfadf20f69facf058a1ad4a', NULL, '6452a1', '192.168.0.21'), (122, 8, 'surgel1', NULL, '5f4769b43bba1ad8ee063b917a77a54569280cee4b04b65e251b3fa80a25867645356e99a1178830824be5ae4bd72196d2781d7324a6ca965406676f80e6c159', NULL, NULL),
(123, 8, 'surgel2', NULL, '24d74a635267b26a587a9902ab19275f889c8c693538373ca4c9f85eb4fb75625a07fdef5289161b9fe78156c78a777185efef2bc249f6647538d5758f5b7210', NULL, NULL), (123, 8, 'surgel2', NULL, NULL, NULL, NULL),
(124, 8, 'surgel3', NULL, NULL, NULL, NULL), (124, 8, 'surgel3', NULL, NULL, NULL, NULL),
(125, 8, 'surgel4', NULL, NULL, NULL, NULL), (125, 8, 'surgel4', NULL, NULL, NULL, NULL),
(126, 8, 'lait1', NULL, NULL, NULL, NULL), (126, 8, 'lait1', 'd1607996880675c78ecdf3507540fdf6fbfb4a9fc10f350929e24e5c0b3cea03e444348f7aac7c77410a1fd61745c4f0a370a89621237174a575870d7108d8e4', NULL, '6452a1', '192.168.0.44'),
(127, 8, 'lait2', '207a8ef6a121fbffbedd7affcdf1c4eccf3918941d186ef93ddc03b7eeebc721b58155c10e20d2b45e41de71428f49d51da8a4223284e19d52bea7a1df2f6807', NULL, '23c683', '192.168.1.100'), (127, 8, 'lait2', '14e7f5ba1e789b622bdc1a9770452b71bb8959d694b48fc65610649fdf57d6113b0d4c89216b08633beec11f14764b8854ba7962eb8516d5b90466148f2b8871', NULL, '6452a1', '192.168.0.44'),
(128, 8, 'lait3', NULL, NULL, NULL, NULL), (128, 8, 'lait3', NULL, NULL, NULL, NULL),
(129, 8, 'lait4', NULL, NULL, NULL, NULL); (129, 8, 'lait4', NULL, NULL, NULL, NULL);
@ -478,6 +438,7 @@ INSERT INTO `machine` (`id_machine`, `id_warehouse`, `name`, `token`, `unlock_co
-- Table structure for table `machine_cluster` -- Table structure for table `machine_cluster`
-- --
DROP TABLE IF EXISTS `machine_cluster`;
CREATE TABLE `machine_cluster` ( CREATE TABLE `machine_cluster` (
`id_machine_cluster` int(11) NOT NULL, `id_machine_cluster` int(11) NOT NULL,
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
@ -501,6 +462,7 @@ INSERT INTO `machine_cluster` (`id_machine_cluster`, `id_warehouse`, `name`) VAL
-- Table structure for table `machine_cluster_merge` -- Table structure for table `machine_cluster_merge`
-- --
DROP TABLE IF EXISTS `machine_cluster_merge`;
CREATE TABLE `machine_cluster_merge` ( CREATE TABLE `machine_cluster_merge` (
`id_machine_cluster_merge` int(11) NOT NULL, `id_machine_cluster_merge` int(11) NOT NULL,
`id_machine_cluster` int(11) NOT NULL, `id_machine_cluster` int(11) NOT NULL,
@ -515,15 +477,14 @@ INSERT INTO `machine_cluster_merge` (`id_machine_cluster_merge`, `id_machine_clu
(3, 1, 58), (3, 1, 58),
(4, 2, 75), (4, 2, 75),
(5, 3, 6), (5, 3, 6),
(6, 2, 58),
(9, 4, 122),
(10, 4, 123), (10, 4, 123),
(11, 4, 124), (11, 4, 124),
(12, 4, 125), (12, 4, 125),
(13, 5, 126), (13, 5, 126),
(16, 5, 129), (14, 5, 127),
(18, 5, 127), (16, 5, 129);
(19, 4, 122),
(20, 5, 128),
(22, 3, 58);
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -531,6 +492,7 @@ INSERT INTO `machine_cluster_merge` (`id_machine_cluster_merge`, `id_machine_clu
-- Table structure for table `module` -- Table structure for table `module`
-- --
DROP TABLE IF EXISTS `module`;
CREATE TABLE `module` ( CREATE TABLE `module` (
`id_module` int(11) NOT NULL, `id_module` int(11) NOT NULL,
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL
@ -552,6 +514,7 @@ INSERT INTO `module` (`id_module`, `name`) VALUES
-- Table structure for table `module_availability` -- Table structure for table `module_availability`
-- --
DROP TABLE IF EXISTS `module_availability`;
CREATE TABLE `module_availability` ( CREATE TABLE `module_availability` (
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
`id_module` int(11) NOT NULL `id_module` int(11) NOT NULL
@ -574,6 +537,7 @@ INSERT INTO `module_availability` (`id_warehouse`, `id_module`) VALUES
-- Table structure for table `module_merge` -- Table structure for table `module_merge`
-- --
DROP TABLE IF EXISTS `module_merge`;
CREATE TABLE `module_merge` ( CREATE TABLE `module_merge` (
`id_module_merge` int(11) NOT NULL, `id_module_merge` int(11) NOT NULL,
`id_machine_cluster` int(11) NOT NULL, `id_machine_cluster` int(11) NOT NULL,
@ -599,26 +563,20 @@ INSERT INTO `module_merge` (`id_module_merge`, `id_machine_cluster`, `id_etree`,
-- Table structure for table `motheure` -- Table structure for table `motheure`
-- --
DROP TABLE IF EXISTS `motheure`;
CREATE TABLE `motheure` ( CREATE TABLE `motheure` (
`id_motheure` int(11) NOT NULL, `id_motheure` int(11) NOT NULL,
`id_machine` int(11) NOT NULL, `id_machine` int(11) NOT NULL,
`count` bigint(11) NOT NULL `count` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin; ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
--
-- Dumping data for table `motheure`
--
INSERT INTO `motheure` (`id_motheure`, `id_machine`, `count`) VALUES
(3, 122, 13),
(6, 127, 2890);
-- -------------------------------------------------------- -- --------------------------------------------------------
-- --
-- Table structure for table `state` -- Table structure for table `state`
-- --
DROP TABLE IF EXISTS `state`;
CREATE TABLE `state` ( CREATE TABLE `state` (
`id_state` int(11) NOT NULL, `id_state` int(11) NOT NULL,
`id_chip` int(11) NOT NULL, `id_chip` int(11) NOT NULL,
@ -644,6 +602,7 @@ INSERT INTO `state` (`id_state`, `id_chip`, `state`, `value`) VALUES
-- Table structure for table `user` -- Table structure for table `user`
-- --
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` ( CREATE TABLE `user` (
`id_user` int(11) NOT NULL, `id_user` int(11) NOT NULL,
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
@ -751,7 +710,7 @@ INSERT INTO `user` (`id_user`, `id_warehouse`, `code`, `username`, `firstname`,
(215, 8, 'F9-7D-5D-9E', 'Pass-A', 'Pass', 'A-1', 'passA@logauth.xdrm.io'), (215, 8, 'F9-7D-5D-9E', 'Pass-A', 'Pass', 'A-1', 'passA@logauth.xdrm.io'),
(216, 8, 'D2-E2-CA-12', 'Card-D', 'Carte', 'D-3', 'cardD@logauth.xdrm.io'), (216, 8, 'D2-E2-CA-12', 'Card-D', 'Carte', 'D-3', 'cardD@logauth.xdrm.io'),
(217, 8, 'D4-34-E8-AB', 'Pass-E', 'Pass', 'E-4', 'passE@logauth.xdrm.io'), (217, 8, 'D4-34-E8-AB', 'Pass-E', 'Pass', 'E-4', 'passE@logauth.xdrm.io'),
(218, 8, 'A9-05-5D-9E', 'Pass-F', 'Pass', 'F-5', 'passF@logauth.xdrm.io'); (218, 8, 'A9-5B-5D-9E', 'Pass-F', 'Pass', 'F-5', 'passF@logauth.xdrm.io');
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -759,6 +718,7 @@ INSERT INTO `user` (`id_user`, `id_warehouse`, `code`, `username`, `firstname`,
-- Table structure for table `user_cluster` -- Table structure for table `user_cluster`
-- --
DROP TABLE IF EXISTS `user_cluster`;
CREATE TABLE `user_cluster` ( CREATE TABLE `user_cluster` (
`id_user_cluster` int(11) NOT NULL, `id_user_cluster` int(11) NOT NULL,
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
@ -783,6 +743,7 @@ INSERT INTO `user_cluster` (`id_user_cluster`, `id_warehouse`, `name`) VALUES
-- Table structure for table `user_cluster_merge` -- Table structure for table `user_cluster_merge`
-- --
DROP TABLE IF EXISTS `user_cluster_merge`;
CREATE TABLE `user_cluster_merge` ( CREATE TABLE `user_cluster_merge` (
`id_user_cluster_merge` int(11) NOT NULL, `id_user_cluster_merge` int(11) NOT NULL,
`id_user_cluster` int(11) NOT NULL, `id_user_cluster` int(11) NOT NULL,
@ -808,8 +769,7 @@ INSERT INTO `user_cluster_merge` (`id_user_cluster_merge`, `id_user_cluster`, `i
(91, 5, 210), (91, 5, 210),
(92, 7, 216), (92, 7, 216),
(94, 6, 218), (94, 6, 218),
(99, 8, 217), (99, 8, 217);
(100, 5, 216);
-- -------------------------------------------------------- -- --------------------------------------------------------
@ -817,6 +777,7 @@ INSERT INTO `user_cluster_merge` (`id_user_cluster_merge`, `id_user_cluster`, `i
-- Table structure for table `warehouse` -- Table structure for table `warehouse`
-- --
DROP TABLE IF EXISTS `warehouse`;
CREATE TABLE `warehouse` ( CREATE TABLE `warehouse` (
`id_warehouse` int(11) NOT NULL, `id_warehouse` int(11) NOT NULL,
`name` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL, `name` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
@ -831,7 +792,7 @@ CREATE TABLE `warehouse` (
INSERT INTO `warehouse` (`id_warehouse`, `name`, `theme`, `password`, `token`) VALUES INSERT INTO `warehouse` (`id_warehouse`, `name`, `theme`, `password`, `token`) VALUES
(7, 'stef-montauban', '3091DB', '53859350c1eb59e301d8fe747f4d1c96d3ec31d95cd1bc72c81d72800edbc6ab45da0d5b6208080fb2e519b1f9848ce0a1289775800912068f32e390f5e1bb6c', '2046c66738b4f1f1e6460537f11970ec5b2cfa65f295b2ca0d2036609dcd3f8ccb6ec271e15440933d3b24ae27eba71423a4545583ab6f3736a5d4f7c8f8c53e'), (7, 'stef-montauban', '3091DB', '53859350c1eb59e301d8fe747f4d1c96d3ec31d95cd1bc72c81d72800edbc6ab45da0d5b6208080fb2e519b1f9848ce0a1289775800912068f32e390f5e1bb6c', '2046c66738b4f1f1e6460537f11970ec5b2cfa65f295b2ca0d2036609dcd3f8ccb6ec271e15440933d3b24ae27eba71423a4545583ab6f3736a5d4f7c8f8c53e'),
(8, 'stef-montbartier', 'DB554E', '034a8313428d9780e4c5bc4bc25ae3985d1d987f4c6928f888e61685ec3f183f7ec0c83f691da2eeb64f27d916fb44aafdef66113892dbc800218b3b512e316e', '52131065a906de90e26da0732e58400edd6739cfa03fc658e7593abef4a4504e18e66e1a8fe9da374a8e8f753603463e4777789262b3ee945d4bf72dd8d6399c'); (8, 'stef-toulouse', 'DB554E', '273bd225482d20c061620c80e3bb87528d9e178bd572acd47feb58eee7e8a3847cb308b287d9d94c7a292b33d4c766cdb7c95c2828f53b97bbc0f80fa44aeb83', '52131065a906de90e26da0732e58400edd6739cfa03fc658e7593abef4a4504e18e66e1a8fe9da374a8e8f753603463e4777789262b3ee945d4bf72dd8d6399c');
-- --
-- Indexes for dumped tables -- Indexes for dumped tables
@ -1001,7 +962,7 @@ ALTER TABLE `action_merge`
-- AUTO_INCREMENT for table `admin` -- AUTO_INCREMENT for table `admin`
-- --
ALTER TABLE `admin` ALTER TABLE `admin`
MODIFY `id_admin` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; MODIFY `id_admin` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
-- --
-- AUTO_INCREMENT for table `chip` -- AUTO_INCREMENT for table `chip`
-- --
@ -1021,7 +982,7 @@ ALTER TABLE `global_state`
-- AUTO_INCREMENT for table `history` -- AUTO_INCREMENT for table `history`
-- --
ALTER TABLE `history` ALTER TABLE `history`
MODIFY `id_history` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=615; MODIFY `id_history` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=347;
-- --
-- AUTO_INCREMENT for table `log` -- AUTO_INCREMENT for table `log`
-- --
@ -1041,7 +1002,7 @@ ALTER TABLE `machine_cluster`
-- AUTO_INCREMENT for table `machine_cluster_merge` -- AUTO_INCREMENT for table `machine_cluster_merge`
-- --
ALTER TABLE `machine_cluster_merge` ALTER TABLE `machine_cluster_merge`
MODIFY `id_machine_cluster_merge` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=25; MODIFY `id_machine_cluster_merge` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;
-- --
-- AUTO_INCREMENT for table `module` -- AUTO_INCREMENT for table `module`
-- --
@ -1056,7 +1017,7 @@ ALTER TABLE `module_merge`
-- AUTO_INCREMENT for table `motheure` -- AUTO_INCREMENT for table `motheure`
-- --
ALTER TABLE `motheure` ALTER TABLE `motheure`
MODIFY `id_motheure` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7; MODIFY `id_motheure` int(11) NOT NULL AUTO_INCREMENT;
-- --
-- AUTO_INCREMENT for table `state` -- AUTO_INCREMENT for table `state`
-- --
@ -1076,7 +1037,7 @@ ALTER TABLE `user_cluster`
-- AUTO_INCREMENT for table `user_cluster_merge` -- AUTO_INCREMENT for table `user_cluster_merge`
-- --
ALTER TABLE `user_cluster_merge` ALTER TABLE `user_cluster_merge`
MODIFY `id_user_cluster_merge` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=101; MODIFY `id_user_cluster_merge` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=100;
-- --
-- AUTO_INCREMENT for table `warehouse` -- AUTO_INCREMENT for table `warehouse`
-- --
@ -1161,6 +1122,12 @@ ALTER TABLE `module_merge`
ADD CONSTRAINT `fk_module_merge_id_machine_cluster` FOREIGN KEY (`id_machine_cluster`) REFERENCES `machine_cluster` (`id_machine_cluster`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `fk_module_merge_id_machine_cluster` FOREIGN KEY (`id_machine_cluster`) REFERENCES `machine_cluster` (`id_machine_cluster`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `fk_module_merge_id_warehouse` FOREIGN KEY (`id_warehouse`) REFERENCES `warehouse` (`id_warehouse`) ON DELETE CASCADE ON UPDATE CASCADE; ADD CONSTRAINT `fk_module_merge_id_warehouse` FOREIGN KEY (`id_warehouse`) REFERENCES `warehouse` (`id_warehouse`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table `motheure`
--
ALTER TABLE `motheure`
ADD CONSTRAINT `fk_motheure_id_machine` FOREIGN KEY (`id_machine`) REFERENCES `machine` (`id_machine`) ON DELETE CASCADE ON UPDATE CASCADE;
-- --
-- Constraints for table `state` -- Constraints for table `state`
-- --

View File

@ -12,12 +12,10 @@ $form-valid-color: #27a560;
$form-neutral-color: #2193e6; $form-neutral-color: #2193e6;
$form-search-color: #5630ed; $form-search-color: #5630ed;
$form-invalid-color: #d52918; $form-invalid-color: #d52918;
$form-grey-color: #8d8d8d;
/* GESTION DES LONGUEURS */ /* GESTION DES LONGUEURS */
$menu-side-width: 4em; $menu-side-width: 4em;
$sub-menu-side-width: 7.5em;
// POUR RESOURCE_DISPATCHER // POUR RESOURCE_DISPATCHER

View File

@ -13,11 +13,10 @@
// @active + .list // @active + .list
& > section.active{ & > section.active{
display: flex; display: flex;
flex-flow: row wrap; flex-direction: row;
align-items: flex-start;
justify-content: flex-start; justify-content: flex-start;
align-items: stretch; flex-wrap: wrap;
align-content: flex-start;
&.contain-check-table{ &.contain-check-table{
flex-direction: column; flex-direction: column;
@ -26,13 +25,11 @@
} }
.inline-box{ .inline-box{
flex: 1 1 20%; flex: 0 0 1;
height: auto;
min-height: 10em;
} }
.inline-row{ .inline-row{
flex: 0 0 2.3em; flex: 3em 0 0;
} }
// Barre de recherche // Barre de recherche
@ -65,7 +62,7 @@
.error, .in-dev{ .error, .in-dev{
display: inline-block; display: inline-block;
position: relative; position: relative;
// width: calc( 100% - 2*1em - 2*1em ); width: calc( 100% - 2*1em - 2*1em );
height: 1em; height: 1em;
margin: 1em; margin: 1em;
padding: 1em; padding: 1em;
@ -99,7 +96,6 @@
position: relative; position: relative;
// width: calc( 50% - 2*1em - 2*1em ); // width: calc( 50% - 2*1em - 2*1em );
flex: calc( 50% - 2*1em - 2*1em ); flex: calc( 50% - 2*1em - 2*1em );
height: auto;
margin: 1em; margin: 1em;
padding: 1em; padding: 1em;
@ -373,7 +369,6 @@
&.list{ &.list{
float: none; float: none;
margin-left: 50%; margin-left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%); transform: translateX(-50%);
} }
@ -461,209 +456,388 @@
/* [3] Formulaires
/* [4] Tableau à cocher
=========================================================*/ =========================================================*/
article.check-table{ & > section > form, .form{
display: inline-block;
position: relative;
left: 50%;
margin: .3em 0;
padding: 1em;
border-radius: 3px;
border-color: $form-invalid-color;
box-shadow: 0 0 1px #b7b7b7;
background-color: #fff;
transform: translateX(-50%);
&#choose-cluster{
left: 0;
transform: none;
}
&.valid{
border-color: $form-valid-color;
}
&.neutral{
border-color: $form-neutral-color;
}
&.search{
border-color: $form-neutral-color;
}
// Textes centres
.edit_search_view,
.remove_search_view{
display: inline-block;
width: 100%;
text-align: center;
color: #aaaaaa;
span{
color: #888888;
}
}
span.error-msg{
display: inline-block;
color: #F03C3C;
font-size: 0.7em;
}
}
/* (1) Champs de texte */
input[type=text],
input[type=mail],
input[type=password],
select,
&.invalid > input[type=text],
&.invalid > input[type=mail],
&.invalid > input[type=password],
&.invalid > select,
input.invalid[type=text],
input.invalid[type=mail],
input.invalid[type=password],
select.invalid{
display: inline-block;
margin: 1em 0;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d7dde8;
color: #2f3033;
transition: border .4s ease-in-out;
&:focus,
&:hover{
border-color: $form-invalid-color;
}
}
select{
width: 100%;
display: block;
background: #fff;
option{
padding: .5em;
}
}
// Champs valides
.valid > input[type=text],
.valid > input[type=mail],
.valid > input[type=password],
.valid > select,
input.valid[type=text],
input.valid[type=mail],
input.valid[type=password],
select.valid{
&:focus,
&:hover{
border-color: $form-valid-color;
}
}
// Champs neutres
.neutral > input[type=text],
.neutral > input[type=mail],
.neutral > input[type=password],
.neutral > select,
input.neutral[type=text],
input.neutral[type=mail],
input.neutral[type=password],
select.neutral{
&:focus,
&:hover{
border-color: $form-neutral-color;
}
}
// Champs neutres
.search > input[type=text],
.search > input[type=mail],
.search > input[type=password],
.search > select,
input.search[type=text],
input.search[type=mail],
input.search[type=password]{
&:focus,
&:hover{
border-color: $form-search-color;
}
}
/* (2) Boutons */
button,
button.invalid,
.invalid > button{
display: inline-block;
position: relative;
left: 50%;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid $form-invalid-color;
background: $form-invalid-color center center no-repeat;
color: #fff;
transition: background .4s ease-in-out;
transform: translateX(-50%);
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-invalid-color;
}
}
// Boutons valides
button.valid,
.valid > button{
border-color: $form-valid-color;
background-color: $form-valid-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-valid-color;
}
}
// Boutons neutres
button.neutral,
.neutral > button{
border-color: $form-neutral-color;
background-color: $form-neutral-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-neutral-color;
}
}
// Boutons recherche
button.search,
.search > button{
border-color: $form-search-color;
background-color: $form-search-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-search-color;
}
}
// Boutons quand action validee
.invalid > button.active,
button.invalid.active,
button.active{
background-color: #fff;
background-image: url('/src/static/container/active@#{$rd-form-invalid-color}.svg') !important;
background-size: 1em auto;
color: transparent !important;
}
button.valid.active,
.valid > button.active{
background-image: url('/src/static/container/active@#{$rd-form-valid-color}.svg') !important;
}
button.neutral.active,
.neutral > button.active{
background-image: url('/src/static/container/active@#{$rd-form-neutral-color}.svg') !important;
}
button.search.active,
.search > button.active{
background-image: url('/src/static/container/active@#{$rd-form-search-color}.svg') !important;
}
// "OU" separant les boutons
hr.OR[data-label]{
display: block;
position: relative;
width: 100%;
height: 0;
border: 0;
border-bottom: 1px dashed $form-invalid-color;
&:before{
content: attr(data-label);
display: inline-block;
position: relative;
top: 50%;
left: 50%;
padding: 0 1em;
background-color: #fff;
color: $form-invalid-color;
transform: translateX(-50%) translatey(-50%);
}
}
// "OU" valide
.valid > hr.OR,
hr.OR.valid{
border-bottom: 1px dashed $form-valid-color;
&:before{
color: $form-valid-color;
}
}
// "OU" neutre
.neutral > hr.OR,
hr.OR.neutral{
border-bottom: 1px dashed $form-neutral-color;
&:before{
color: $form-neutral-color;
}
}
// "OU" recherche
.search > hr.OR,
hr.OR.search{
border-bottom: 1px dashed $form-search-color;
&:before{
color: $form-search-color;
}
}
}
/* [4] Tableau à cocher
=========================================================*/
article.check-table{
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
border-radius: 3px;
border: 1px solid #ddd;
& > div{
display: flex; display: flex;
flex-direction: row; flex-direction: row;
flex-wrap: wrap; flex-wrap: nowrap;
justify-content: space-between; justify-content: space-between;
border-radius: 3px; flex: 100%;
border: 1px solid #ddd; padding: .8em 0;
color: #333;
& > div{ background: #f8f8f8;
display: flex; border-bottom: 1px solid #eee;
flex-direction: row; transition: background .2s ease-in-out;
flex-wrap: nowrap;
justify-content: space-between;
flex: 100%;
padding: .8em 0;
color: #333;
background: #f8f8f8;
border-bottom: 1px solid #eee;
transition: background .2s ease-in-out;
&:nth-child(2n){
background: #fdfdfd;
}
overflow: hidden;
& > span{
flex: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
/* (1) Gestion du checkbox hack */
input[type='checkbox']{ display: none; }
input[type='checkbox'] + label[for]{
display: inline-block;
position: absolute;
width: 1.2em;
height: 1.2em;
// border-radius: 50% / 50%;
background: url('/src/static/container/checkbox@999999.svg') center center no-repeat;
background-size: 100% auto;;
transition: box-shadow .2s ease-in-out;
cursor: pointer;
}
input[type='checkbox']:checked + label[for]{
background-image: url('/src/static/container/checkbox@checked@007dd8.svg');
}
}
&:nth-child(2n){
background: #fdfdfd;
} }
}
/* [5] Timeline SVG
=========================================================*/
article.timeline.container{
display: block;
position: absolute;
width: calc( 100vw - #{$menu-side-width} - #{$sub-menu-side-width} - 11em );
flex: 1em;
overflow: hidden; overflow: hidden;
// overflow-x: auto;
svg.timeline{
/* (1) svg circles -> set right transform-origin */ & > span{
& circle.timeline{ flex: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
-webkit-transform-origin: 50% 50% 0;
transform-origin: 50% 50% 0;
transition: transform .2s ease-in-out; /* (1) Gestion du checkbox hack */
input[type='checkbox']{ display: none; }
/* (2) Set cursor to pointer */ input[type='checkbox'] + label[for]{
&.around{ display: inline-block;
cursor: pointer; position: absolute;
width: 1.2em;
height: 1.2em;
/* (3) Dispatch event to next nodes */ // border-radius: 50% / 50%;
&:hover + .center{ // center node
-webkit-transform: scale(1.2); background: url('/src/static/container/checkbox@999999.svg') center center no-repeat;
transform: scale(1.2); background-size: 100% auto;;
} transition: box-shadow .2s ease-in-out;
&:hover + .center + image + .below{ // below node
-webkit-transform: translateX(-100%);
transform: translateX(-100%);
}
}
/* (4) Remove center circle event */
&.center{
-webkit-pointer-events: none;
pointer-events: none;
}
/* (5) Set colors according to action type */
&.around, &.center, &.below{
&.start{ fill: #2cde8b; }
&.stop{ fill: #3a3a3a; }
&.lock{ fill: #e04343; }
&.unlock{ fill: #af1c1c; }
&.signal{ fill: #3258d8; }
&.unsignal{ fill: #2041ab; }
}
/* (6) Make around circles a bit transparent */
&.around{ opacity: .6; }
cursor: pointer;
} }
/* (7) Avoid icons inside center circles to block :hover */ input[type='checkbox']:checked + label[for]{
image{ background-image: url('/src/static/container/checkbox@checked@007dd8.svg');
-webkit-pointer-events: none;
pointer-events: none;
}
/* (8) Default 'text' font*/
text{
fill: #444;
font-size: 14px;
font-family: 'Open Sans';
&.bold{
font-size: 16px;
font-weight: bold;
}
&.start{ fill: #2cde8b; }
&.stop{ fill: #3a3a3a; }
&.lock{ fill: #e04343; }
&.unlock{ fill: #af1c1c; }
&.signal{ fill: #3258d8; }
&.unsignal{ fill: #2041ab; }
} }
} }
/* (9) Timeline infobox */
div.timeline.infobox{
display: none;
position: absolute;
top: 80px;
left: 0;
width: auto;
height: auto;
padding: .5em 1em;
border: 1px solid #b1b6c0;
border-radius: 3px;
background: #d8deea;
color: #444;
&.active{
display: block;
}
}
} }
} }

View File

@ -0,0 +1,7 @@
/* COULEUR DU THEME */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiY29uc3RhbnRzLmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vY29uc3RhbnRzLnNjc3MiCgldLAoJInNvdXJjZXNDb250ZW50IjogWwoJCSIvKiBDT1VMRVVSIERVIFRIRU1FICovXG4kdGhlbWUtY29sb3I6ICNmNDRmMDY7XG5cbi8qIENPVUxFVVIgRFUgU09VUy1NRU5VICovXG4kc3ViLW1lbnUtY29sb3I6ICM1YjVlNjM7XG5cbi8qIENPVUxFVVIgREVTIEVSUkVVUlMgKi9cbiRlcnJvci1jb2xvcjogI2NjNTg1NztcblxuLyogRk9STVVMQUlSRVMgKi9cbiRmb3JtLXZhbGlkLWNvbG9yOiAgICMyN2E1NjA7XG4kZm9ybS1uZXV0cmFsLWNvbG9yOiAjMjE5M2U2O1xuJGZvcm0tc2VhcmNoLWNvbG9yOiAgIzU2MzBlZDtcbiRmb3JtLWludmFsaWQtY29sb3I6ICNkNTI5MTg7XG5cblxuLyogR0VTVElPTiBERVMgTE9OR1VFVVJTICovXG4kbWVudS1zaWRlLXdpZHRoOiA0ZW07XG5cblxuLy8gUE9VUiBSRVNPVVJDRV9ESVNQQVRDSEVSXG4kcmQtZm9ybS12YWxpZC1jb2xvcjogICAnMjdhNTYwJztcbiRyZC1mb3JtLW5ldXRyYWwtY29sb3I6ICcyMTkzZTYnO1xuJHJkLWZvcm0tc2VhcmNoLWNvbG9yOiAgJzU2MzBlZCc7XG4kcmQtZm9ybS1pbnZhbGlkLWNvbG9yOiAnZDUyOTE4JztcbiIKCV0sCgkibWFwcGluZ3MiOiAiQUFBQSxzQkFBc0I7QUFHdEIsMEJBQTBCO0FBRzFCLHlCQUF5QjtBQUd6QixpQkFBaUI7QUFPakIsMkJBQTJCIiwKCSJuYW1lcyI6IFtdCn0= */

View File

@ -0,0 +1,619 @@
@charset "UTF-8";
/* COULEUR DU THEME */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
#WRAPPER > #CONTAINER {
/* [1] Section (contenu)
=========================================================*/
/* [2] INLINE-BOX pour afficher les listes de donnees
=========================================================*/
/* [2-2] INLINE-ROW pour afficher des lignes
=========================================================*/
/* [3] Formulaires
=========================================================*/
/* (1) Champs de texte */
/* (2) Boutons */
}
#WRAPPER > #CONTAINER > section {
display: none;
flex-grow: 1;
}
#WRAPPER > #CONTAINER > section.active {
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: flex-start;
flex-wrap: wrap;
}
#WRAPPER > #CONTAINER > section.active .inline-box {
flex: 0 0 1;
}
#WRAPPER > #CONTAINER > section.active .inline-row {
flex: 3em 0 1;
}
#WRAPPER > #CONTAINER > section.active .searchbar {
display: inline-block;
position: relative;
flex: calc( 100% - 2*1em - 2*1em );
margin: 1em;
padding: .5em 1em;
padding-left: 2em;
border-radius: 3px;
border: 1px solid #b1b1b1;
background: #fff url("/src/static/sub-menu-side/search@b1b1b1.svg") 0.5em center no-repeat;
background-size: 1em;
transition: border .4s ease-in-out;
}
#WRAPPER > #CONTAINER > section.active .searchbar:hover, #WRAPPER > #CONTAINER > section.active .searchbar:focus {
border-color: #5630ed;
}
#WRAPPER > #CONTAINER > section.active .error {
display: inline-block;
position: relative;
width: calc( 100% - 2*1em - 2*1em );
height: 1em;
margin: 1em;
padding: 1em;
border-radius: 3px;
border: 1px solid #d52918;
background: #d52918;
color: #fff;
text-shadow: 1px 1px #a72013;
}
#WRAPPER > #CONTAINER > section > .inline-box, #WRAPPER > #CONTAINER > section > .inline-row {
display: inline-block;
position: relative;
flex: calc( 50% - 2*1em - 2*1em );
margin: 1em;
padding: 1em;
border-radius: 3px;
box-shadow: 0 0 1px #b7b7b7;
background-color: #fff;
/* (0) Etat des machines */
/* (1) Titre de l'element */
/* (2) Code RFID */
/* (3) Adresse mail */
/* (4) Groupes */
/* (5) Lien vers la modification */
/* (6) Lien vers la suppression */
}
#WRAPPER > #CONTAINER > section > .inline-box.hidden, #WRAPPER > #CONTAINER > section > .inline-row.hidden {
display: none;
}
#WRAPPER > #CONTAINER > section > .inline-box a, #WRAPPER > #CONTAINER > section > .inline-row a {
text-decoration: none;
color: inherit;
}
#WRAPPER > #CONTAINER > section > .inline-box.selected, #WRAPPER > #CONTAINER > section > .inline-row.selected {
border: 1px solid #7362ff;
transition: box-shadow .2s ease-in-out;
}
#WRAPPER > #CONTAINER > section > .inline-box.selected:hover, #WRAPPER > #CONTAINER > section > .inline-row.selected:hover {
box-shadow: 2px 2px 7px #aaa;
}
#WRAPPER > #CONTAINER > section > .inline-box .state, #WRAPPER > #CONTAINER > section > .inline-row .state {
display: inline-block;
width: .7em;
height: .7em;
margin-right: .3em;
border-radius: 50% / 50%;
background-color: #ddd;
}
#WRAPPER > #CONTAINER > section > .inline-box .state[data-state='stopped'], #WRAPPER > #CONTAINER > section > .inline-row .state[data-state='stopped'] {
background-color: #ddd;
}
#WRAPPER > #CONTAINER > section > .inline-box .state[data-state='started'], #WRAPPER > #CONTAINER > section > .inline-row .state[data-state='started'] {
background-color: #22E07B;
}
#WRAPPER > #CONTAINER > section > .inline-box .state[data-state='signaled'], #WRAPPER > #CONTAINER > section > .inline-row .state[data-state='signaled'] {
background-color: #3897D6;
}
#WRAPPER > #CONTAINER > section > .inline-box .state[data-state='locked'], #WRAPPER > #CONTAINER > section > .inline-row .state[data-state='locked'] {
background-color: #EA460A;
}
#WRAPPER > #CONTAINER > section > .inline-box .state[data-state='detached'], #WRAPPER > #CONTAINER > section > .inline-row .state[data-state='detached'] {
background-color: transparent;
}
#WRAPPER > #CONTAINER > section > .inline-box .title, #WRAPPER > #CONTAINER > section > .inline-row .title {
display: inline-block;
font-size: 1.15em;
font-weight: bold;
color: #ea4c06;
white-space: nowrap;
}
#WRAPPER > #CONTAINER > section > .inline-box .title > span, #WRAPPER > #CONTAINER > section > .inline-row .title > span {
font-size: .8em;
color: #333;
}
#WRAPPER > #CONTAINER > section > .inline-box .code,
#WRAPPER > #CONTAINER > section > .inline-box .mail, #WRAPPER > #CONTAINER > section > .inline-row .code,
#WRAPPER > #CONTAINER > section > .inline-row .mail {
display: block;
margin: 1em;
color: #333;
white-space: nowrap;
}
#WRAPPER > #CONTAINER > section > .inline-box .code svg,
#WRAPPER > #CONTAINER > section > .inline-box .mail svg, #WRAPPER > #CONTAINER > section > .inline-row .code svg,
#WRAPPER > #CONTAINER > section > .inline-row .mail svg {
display: inline-block;
position: relative;
margin-left: .5em;
margin-right: .5em;
margin-bottom: -.6em;
width: 1.5em;
height: 2em;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .code svg path#stylisable,
#WRAPPER > #CONTAINER > section > .inline-box .mail svg path#stylisable, #WRAPPER > #CONTAINER > section > .inline-row .code svg path#stylisable,
#WRAPPER > #CONTAINER > section > .inline-row .mail svg path#stylisable {
fill: #333 !important;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .code svg path#stroke-stylisable,
#WRAPPER > #CONTAINER > section > .inline-box .mail svg path#stroke-stylisable, #WRAPPER > #CONTAINER > section > .inline-row .code svg path#stroke-stylisable,
#WRAPPER > #CONTAINER > section > .inline-row .mail svg path#stroke-stylisable {
stroke: #333 !important;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups, #WRAPPER > #CONTAINER > section > .inline-row .groups {
display: block;
margin: 1em;
color: #333;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups svg, #WRAPPER > #CONTAINER > section > .inline-row .groups svg {
display: inline-block;
position: relative;
margin-left: .5em;
margin-right: .5em;
margin-bottom: -.6em;
width: 1.5em;
height: 2em;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups svg path, #WRAPPER > #CONTAINER > section > .inline-row .groups svg path {
fill: #333 !important;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore), #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore), #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span {
display: inline-block;
position: relative;
padding: .1em .5em;
margin-right: calc( .4em + 2em );
margin-bottom: .5em;
border-radius: 3px 0 0 3px;
border: 1px solid #bdbdbd;
box-shadow: inset 0 0 2px #fafafa;
background-color: #f9f9f9;
color: #333;
cursor: default;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-group, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-member, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-group, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-member, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-group, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-member, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-group, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-member {
border-radius: 3px;
cursor: pointer;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-permission > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-group > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-member > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-permission > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-group > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-member > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-permission > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-group > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-member > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-permission > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-group > div.dropdown, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-member > div.dropdown {
display: flex;
flex-direction: column;
flex-wrap: nowrap;
flex: 100%;
justify-content: space-between;
position: absolute;
top: calc( 100% + 5px );
left: 0;
width: 12em;
height: 500%;
border-radius: 3px;
overflow: hidden;
overflow-y: auto;
background: #fff;
box-shadow: 0 2px 4px 0 rgba(34, 36, 38, 0.12), 0 2px 10px 0 rgba(34, 36, 38, 0.15);
z-index: 100;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-permission > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-group > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-member > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-permission > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-group > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-member > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-permission > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-group > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-member > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-permission > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-group > div.dropdown > span, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-member > div.dropdown > span {
padding: .5em;
padding-left: 1em;
flex: 2em 1 1;
cursor: pointer;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-permission > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-group > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore).add-member > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-permission > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-group > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span.add-member > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-permission > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-group > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore).add-member > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-permission > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-group > div.dropdown > span:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span.add-member > div.dropdown > span:hover {
background-color: #F8F8F8;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-group, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-member, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-group, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-member, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-group, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-member, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-group, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-member {
display: block;
position: absolute;
top: -1px;
left: 100%;
width: 1em;
height: calc( 100% - .1em - 2px );
padding: .12em .5em;
border-radius: 0 3px 3px 0;
border: 1px solid #bdbdbd;
box-shadow: inset 0 0 2px #fafafa;
background: url("/src/static/sub-menu-side/remove.svg") center center no-repeat;
background-size: auto 70%;
background-color: #f9f9f9;
color: inherit;
cursor: pointer;
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-group:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-permission:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.rem-member:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-group:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-permission:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.rem-member:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-group:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.rem-member:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-group:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.rem-member:hover {
background-image: url("/src/static/sub-menu-side/remove@d52918.svg");
}
#WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span:not(.ignore) > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-box .groups > span.ignore > span > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span:not(.ignore) > span.icon-permission:hover, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.icon-permission, #WRAPPER > #CONTAINER > section > .inline-row .groups > span.ignore > span > span.icon-permission:hover {
border-color: #ddd;
background-color: #eee;
cursor: default;
background-image: url("/src/static/sub-menu-side/permission.svg");
}
#WRAPPER > #CONTAINER > section > .inline-box .link_edit,
#WRAPPER > #CONTAINER > section > .inline-box .link_remove, #WRAPPER > #CONTAINER > section > .inline-row .link_edit,
#WRAPPER > #CONTAINER > section > .inline-row .link_remove {
display: inline-block;
float: right;
position: relative;
width: 1em;
height: 1em;
margin-left: 1em;
cursor: pointer;
}
#WRAPPER > #CONTAINER > section > .inline-box .link_edit > svg,
#WRAPPER > #CONTAINER > section > .inline-box .link_remove > svg, #WRAPPER > #CONTAINER > section > .inline-row .link_edit > svg,
#WRAPPER > #CONTAINER > section > .inline-row .link_remove > svg {
width: 100%;
height: 100%;
fill: #ddd !important;
transition: fill .4s ease-in-out;
pointer-events: none;
}
#WRAPPER > #CONTAINER > section > .inline-box .link_edit:hover > svg,
#WRAPPER > #CONTAINER > section > .inline-box .link_remove:hover > svg, #WRAPPER > #CONTAINER > section > .inline-row .link_edit:hover > svg,
#WRAPPER > #CONTAINER > section > .inline-row .link_remove:hover > svg {
fill: #2193e6 !important;
}
#WRAPPER > #CONTAINER > section > .inline-box .link_remove:hover > svg, #WRAPPER > #CONTAINER > section > .inline-row .link_remove:hover > svg {
fill: #d52918 !important;
}
#WRAPPER > #CONTAINER > section.fstart {
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
align-items: center;
}
#WRAPPER > #CONTAINER > section.fstart .searchbar {
flex: auto 1 1;
}
#WRAPPER > #CONTAINER > section.active > .inline-row {
flex: auto 1 1;
}
#WRAPPER > #CONTAINER > section > .inline-row {
width: calc( 100% - 4em - 2*1em );
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
align-items: center;
overflow: hidden;
}
#WRAPPER > #CONTAINER > section > .inline-row > span {
display: flex;
flex-direction: column;
justify-content: space-around;
flex: 100% 1 1;
border-left: 1px solid #ddd;
text-align: center;
}
#WRAPPER > #CONTAINER > section > .inline-row > span:first-child {
border-left: 0;
}
#WRAPPER > #CONTAINER > section > .inline-row button {
flex: auto;
width: 5em;
}
#WRAPPER > #CONTAINER > section > form, #WRAPPER > #CONTAINER .form {
display: inline-block;
position: relative;
left: 50%;
margin: .3em 0;
padding: 1em;
border-radius: 3px;
border-color: #d52918;
box-shadow: 0 0 1px #b7b7b7;
background-color: #fff;
transform: translateX(-50%);
}
#WRAPPER > #CONTAINER > section > form.valid, #WRAPPER > #CONTAINER .form.valid {
border-color: #27a560;
}
#WRAPPER > #CONTAINER > section > form.neutral, #WRAPPER > #CONTAINER .form.neutral {
border-color: #2193e6;
}
#WRAPPER > #CONTAINER > section > form.search, #WRAPPER > #CONTAINER .form.search {
border-color: #2193e6;
}
#WRAPPER > #CONTAINER > section > form .edit_search_view,
#WRAPPER > #CONTAINER > section > form .remove_search_view, #WRAPPER > #CONTAINER .form .edit_search_view,
#WRAPPER > #CONTAINER .form .remove_search_view {
display: inline-block;
width: 100%;
text-align: center;
color: #aaaaaa;
}
#WRAPPER > #CONTAINER > section > form .edit_search_view span,
#WRAPPER > #CONTAINER > section > form .remove_search_view span, #WRAPPER > #CONTAINER .form .edit_search_view span,
#WRAPPER > #CONTAINER .form .remove_search_view span {
color: #888888;
}
#WRAPPER > #CONTAINER > section > form span.error-msg, #WRAPPER > #CONTAINER .form span.error-msg {
display: inline-block;
color: #F03C3C;
font-size: 0.7em;
}
#WRAPPER > #CONTAINER input[type=text],
#WRAPPER > #CONTAINER input[type=mail],
#WRAPPER > #CONTAINER input[type=password],
#WRAPPER > #CONTAINER select, #WRAPPER > #CONTAINER.invalid > input[type=text], #WRAPPER > #CONTAINER.invalid > input[type=mail], #WRAPPER > #CONTAINER.invalid > input[type=password], #WRAPPER > #CONTAINER.invalid > select,
#WRAPPER > #CONTAINER input.invalid[type=text],
#WRAPPER > #CONTAINER input.invalid[type=mail],
#WRAPPER > #CONTAINER input.invalid[type=password],
#WRAPPER > #CONTAINER select.invalid {
display: inline-block;
margin: 1em 0;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d7dde8;
color: #2f3033;
transition: border .4s ease-in-out;
}
#WRAPPER > #CONTAINER input[type=text]:focus, #WRAPPER > #CONTAINER input[type=text]:hover,
#WRAPPER > #CONTAINER input[type=mail]:focus,
#WRAPPER > #CONTAINER input[type=mail]:hover,
#WRAPPER > #CONTAINER input[type=password]:focus,
#WRAPPER > #CONTAINER input[type=password]:hover,
#WRAPPER > #CONTAINER select:focus,
#WRAPPER > #CONTAINER select:hover, #WRAPPER > #CONTAINER.invalid > input[type=text]:focus, #WRAPPER > #CONTAINER.invalid > input[type=text]:hover, #WRAPPER > #CONTAINER.invalid > input[type=mail]:focus, #WRAPPER > #CONTAINER.invalid > input[type=mail]:hover, #WRAPPER > #CONTAINER.invalid > input[type=password]:focus, #WRAPPER > #CONTAINER.invalid > input[type=password]:hover, #WRAPPER > #CONTAINER.invalid > select:focus, #WRAPPER > #CONTAINER.invalid > select:hover,
#WRAPPER > #CONTAINER input.invalid[type=text]:focus,
#WRAPPER > #CONTAINER input.invalid[type=text]:hover,
#WRAPPER > #CONTAINER input.invalid[type=mail]:focus,
#WRAPPER > #CONTAINER input.invalid[type=mail]:hover,
#WRAPPER > #CONTAINER input.invalid[type=password]:focus,
#WRAPPER > #CONTAINER input.invalid[type=password]:hover,
#WRAPPER > #CONTAINER select.invalid:focus,
#WRAPPER > #CONTAINER select.invalid:hover {
border-color: #d52918;
}
#WRAPPER > #CONTAINER select {
width: 100%;
display: block;
background: #fff;
}
#WRAPPER > #CONTAINER select option {
padding: .5em;
}
#WRAPPER > #CONTAINER .valid > input[type=text]:focus, #WRAPPER > #CONTAINER .valid > input[type=text]:hover,
#WRAPPER > #CONTAINER .valid > input[type=mail]:focus,
#WRAPPER > #CONTAINER .valid > input[type=mail]:hover,
#WRAPPER > #CONTAINER .valid > input[type=password]:focus,
#WRAPPER > #CONTAINER .valid > input[type=password]:hover,
#WRAPPER > #CONTAINER .valid > select:focus,
#WRAPPER > #CONTAINER .valid > select:hover,
#WRAPPER > #CONTAINER input.valid[type=text]:focus,
#WRAPPER > #CONTAINER input.valid[type=text]:hover,
#WRAPPER > #CONTAINER input.valid[type=mail]:focus,
#WRAPPER > #CONTAINER input.valid[type=mail]:hover,
#WRAPPER > #CONTAINER input.valid[type=password]:focus,
#WRAPPER > #CONTAINER input.valid[type=password]:hover,
#WRAPPER > #CONTAINER select.valid:focus,
#WRAPPER > #CONTAINER select.valid:hover {
border-color: #27a560;
}
#WRAPPER > #CONTAINER .neutral > input[type=text]:focus, #WRAPPER > #CONTAINER .neutral > input[type=text]:hover,
#WRAPPER > #CONTAINER .neutral > input[type=mail]:focus,
#WRAPPER > #CONTAINER .neutral > input[type=mail]:hover,
#WRAPPER > #CONTAINER .neutral > input[type=password]:focus,
#WRAPPER > #CONTAINER .neutral > input[type=password]:hover,
#WRAPPER > #CONTAINER .neutral > select:focus,
#WRAPPER > #CONTAINER .neutral > select:hover,
#WRAPPER > #CONTAINER input.neutral[type=text]:focus,
#WRAPPER > #CONTAINER input.neutral[type=text]:hover,
#WRAPPER > #CONTAINER input.neutral[type=mail]:focus,
#WRAPPER > #CONTAINER input.neutral[type=mail]:hover,
#WRAPPER > #CONTAINER input.neutral[type=password]:focus,
#WRAPPER > #CONTAINER input.neutral[type=password]:hover,
#WRAPPER > #CONTAINER select.neutral:focus,
#WRAPPER > #CONTAINER select.neutral:hover {
border-color: #2193e6;
}
#WRAPPER > #CONTAINER .search > input[type=text]:focus, #WRAPPER > #CONTAINER .search > input[type=text]:hover,
#WRAPPER > #CONTAINER .search > input[type=mail]:focus,
#WRAPPER > #CONTAINER .search > input[type=mail]:hover,
#WRAPPER > #CONTAINER .search > input[type=password]:focus,
#WRAPPER > #CONTAINER .search > input[type=password]:hover,
#WRAPPER > #CONTAINER .search > select:focus,
#WRAPPER > #CONTAINER .search > select:hover,
#WRAPPER > #CONTAINER input.search[type=text]:focus,
#WRAPPER > #CONTAINER input.search[type=text]:hover,
#WRAPPER > #CONTAINER input.search[type=mail]:focus,
#WRAPPER > #CONTAINER input.search[type=mail]:hover,
#WRAPPER > #CONTAINER input.search[type=password]:focus,
#WRAPPER > #CONTAINER input.search[type=password]:hover {
border-color: #5630ed;
}
#WRAPPER > #CONTAINER button,
#WRAPPER > #CONTAINER button.invalid,
#WRAPPER > #CONTAINER .invalid > button {
display: inline-block;
position: relative;
left: 50%;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d52918;
background: #d52918 center center no-repeat;
color: #fff;
transition: background .4s ease-in-out;
transform: translateX(-50%);
}
#WRAPPER > #CONTAINER button:hover, #WRAPPER > #CONTAINER button:focus, #WRAPPER > #CONTAINER button:disabled,
#WRAPPER > #CONTAINER button.invalid:hover,
#WRAPPER > #CONTAINER button.invalid:focus,
#WRAPPER > #CONTAINER button.invalid:disabled,
#WRAPPER > #CONTAINER .invalid > button:hover,
#WRAPPER > #CONTAINER .invalid > button:focus,
#WRAPPER > #CONTAINER .invalid > button:disabled {
background-color: #fff;
color: #d52918;
}
#WRAPPER > #CONTAINER button.valid,
#WRAPPER > #CONTAINER .valid > button {
border-color: #27a560;
background-color: #27a560;
}
#WRAPPER > #CONTAINER button.valid:hover, #WRAPPER > #CONTAINER button.valid:focus, #WRAPPER > #CONTAINER button.valid:disabled,
#WRAPPER > #CONTAINER .valid > button:hover,
#WRAPPER > #CONTAINER .valid > button:focus,
#WRAPPER > #CONTAINER .valid > button:disabled {
background-color: #fff;
color: #27a560;
}
#WRAPPER > #CONTAINER button.neutral,
#WRAPPER > #CONTAINER .neutral > button {
border-color: #2193e6;
background-color: #2193e6;
}
#WRAPPER > #CONTAINER button.neutral:hover, #WRAPPER > #CONTAINER button.neutral:focus, #WRAPPER > #CONTAINER button.neutral:disabled,
#WRAPPER > #CONTAINER .neutral > button:hover,
#WRAPPER > #CONTAINER .neutral > button:focus,
#WRAPPER > #CONTAINER .neutral > button:disabled {
background-color: #fff;
color: #2193e6;
}
#WRAPPER > #CONTAINER button.search,
#WRAPPER > #CONTAINER .search > button {
border-color: #5630ed;
background-color: #5630ed;
}
#WRAPPER > #CONTAINER button.search:hover, #WRAPPER > #CONTAINER button.search:focus, #WRAPPER > #CONTAINER button.search:disabled,
#WRAPPER > #CONTAINER .search > button:hover,
#WRAPPER > #CONTAINER .search > button:focus,
#WRAPPER > #CONTAINER .search > button:disabled {
background-color: #fff;
color: #5630ed;
}
#WRAPPER > #CONTAINER .invalid > button.active,
#WRAPPER > #CONTAINER button.invalid.active,
#WRAPPER > #CONTAINER button.active {
background-color: #fff;
background-image: url("/src/static/container/active@d52918.svg") !important;
background-size: 1em auto;
color: transparent !important;
}
#WRAPPER > #CONTAINER button.valid.active,
#WRAPPER > #CONTAINER .valid > button.active {
background-image: url("/src/static/container/active@27a560.svg") !important;
}
#WRAPPER > #CONTAINER button.neutral.active,
#WRAPPER > #CONTAINER .neutral > button.active {
background-image: url("/src/static/container/active@2193e6.svg") !important;
}
#WRAPPER > #CONTAINER button.search.active,
#WRAPPER > #CONTAINER .search > button.active {
background-image: url("/src/static/container/active@5630ed.svg") !important;
}
#WRAPPER > #CONTAINER hr.OR[data-label] {
display: block;
position: relative;
width: 100%;
height: 0;
border: 0;
border-bottom: 1px dashed #d52918;
}
#WRAPPER > #CONTAINER hr.OR[data-label]:before {
content: attr(data-label);
display: inline-block;
position: relative;
top: 50%;
left: 50%;
padding: 0 1em;
background-color: #fff;
color: #d52918;
transform: translateX(-50%) translatey(-50%);
}
#WRAPPER > #CONTAINER .valid > hr.OR,
#WRAPPER > #CONTAINER hr.OR.valid {
border-bottom: 1px dashed #27a560;
}
#WRAPPER > #CONTAINER .valid > hr.OR:before,
#WRAPPER > #CONTAINER hr.OR.valid:before {
color: #27a560;
}
#WRAPPER > #CONTAINER .neutral > hr.OR,
#WRAPPER > #CONTAINER hr.OR.neutral {
border-bottom: 1px dashed #2193e6;
}
#WRAPPER > #CONTAINER .neutral > hr.OR:before,
#WRAPPER > #CONTAINER hr.OR.neutral:before {
color: #2193e6;
}
#WRAPPER > #CONTAINER .search > hr.OR,
#WRAPPER > #CONTAINER hr.OR.search {
border-bottom: 1px dashed #5630ed;
}
#WRAPPER > #CONTAINER .search > hr.OR:before,
#WRAPPER > #CONTAINER hr.OR.search:before {
color: #5630ed;
}
/* [4] Tableau à cocher
=========================================================*/
article.check-table {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
border-radius: 3px;
border: 1px solid #ddd;
}
article.check-table > div {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
flex: 100%;
padding: .8em 0;
color: #333;
background: #f8f8f8;
border-bottom: 1px solid #eee;
transition: background .2s ease-in-out;
overflow: hidden;
}
article.check-table > div:nth-child(2n) {
background: #fdfdfd;
}
article.check-table > div > span {
flex: 100%;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: center;
/* (1) Gestion du checkbox hack */
}
article.check-table > div > span input[type='checkbox'] {
display: none;
}
article.check-table > div > span input[type='checkbox'] + label[for] {
display: inline-block;
position: absolute;
width: 1.2em;
height: 1.2em;
background: url("/src/static/container/checkbox@999999.svg") center center no-repeat;
background-size: 100% auto;
transition: box-shadow .2s ease-in-out;
cursor: pointer;
}
article.check-table > div > span input[type='checkbox']:checked + label[for] {
background-image: url("/src/static/container/checkbox@checked@007dd8.svg");
}
/*# sourceMappingURL=container.css.map */

View File

@ -0,0 +1,2 @@
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiZ2xvYmFsLmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vZ2xvYmFsLnNjc3MiCgldLAoJInNvdXJjZXNDb250ZW50IjogWwoJCSIiCgldLAoJIm1hcHBpbmdzIjogIiIsCgkibmFtZXMiOiBbXQp9 */

View File

@ -0,0 +1,31 @@
/* COULEUR DU THEME */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
#WRAPPER > #HEADER {
/* Animation de chargement qudnd chargement ajax */
}
#WRAPPER > #HEADER > .icon {
display: block;
position: absolute;
top: 0;
left: 0;
width: 4em;
height: 4em;
background-color: #c23f05;
background-image: url("/src/static/iconv2.svg");
background-position: center center;
background-repeat: no-repeat;
background-size: 50% 50%;
cursor: pointer;
transition: all .3s;
}
#WRAPPER > #HEADER.loading > .icon {
background-image: url("/src/static/loaderv2.svg");
background-size: 70% 70%;
}
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAiaGVhZGVyLmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vaGVhZGVyLnNjc3MiLAoJCSIuLi9jb25zdGFudHMuc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIkBpbXBvcnQgJ2NvbnN0YW50cyc7XG5cblxuI1dSQVBQRVIgPiAjSEVBREVSe1xuXHQvLyBJY29uZSBkdSBzaXRlXG5cdCYgPiAuaWNvbntcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6IDA7XG5cdFx0XHRsZWZ0OiAwO1xuXHRcdFx0d2lkdGg6ICRtZW51LXNpZGUtd2lkdGg7XG5cdFx0XHRoZWlnaHQ6ICRtZW51LXNpZGUtd2lkdGg7XG5cblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oJHRoZW1lLWNvbG9yLCAxMCk7XG5cdFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKCcvc3JjL3N0YXRpYy9pY29udjIuc3ZnJyk7XG5cdFx0YmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcblx0XHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXHRcdGJhY2tncm91bmQtc2l6ZTogNTAlIDUwJTtcblxuXHRcdGN1cnNvcjogcG9pbnRlcjtcblxuXHRcdHRyYW5zaXRpb246IGFsbCAuM3M7XG5cblx0fVxuXG5cdC8qIEFuaW1hdGlvbiBkZSBjaGFyZ2VtZW50IHF1ZG5kIGNoYXJnZW1lbnQgYWpheCAqL1xuXHQmLmxvYWRpbmcgPiAuaWNvbntcblx0XHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy9zcmMvc3RhdGljL2xvYWRlcnYyLnN2ZycpO1xuXHRcdGJhY2tncm91bmQtc2l6ZTogNzAlIDcwJTtcblx0fVxuXG59XG4iLAoJCSIvKiBDT1VMRVVSIERVIFRIRU1FICovXG4kdGhlbWUtY29sb3I6ICNmNDRmMDY7XG5cbi8qIENPVUxFVVIgRFUgU09VUy1NRU5VICovXG4kc3ViLW1lbnUtY29sb3I6ICM1YjVlNjM7XG5cbi8qIENPVUxFVVIgREVTIEVSUkVVUlMgKi9cbiRlcnJvci1jb2xvcjogI2NjNTg1NztcblxuLyogRk9STVVMQUlSRVMgKi9cbiRmb3JtLXZhbGlkLWNvbG9yOiAgICMyN2E1NjA7XG4kZm9ybS1uZXV0cmFsLWNvbG9yOiAjMjE5M2U2O1xuJGZvcm0tc2VhcmNoLWNvbG9yOiAgIzU2MzBlZDtcbiRmb3JtLWludmFsaWQtY29sb3I6ICNkNTI5MTg7XG5cblxuLyogR0VTVElPTiBERVMgTE9OR1VFVVJTICovXG4kbWVudS1zaWRlLXdpZHRoOiA0ZW07XG5cblxuLy8gUE9VUiBSRVNPVVJDRV9ESVNQQVRDSEVSXG4kcmQtZm9ybS12YWxpZC1jb2xvcjogICAnMjdhNTYwJztcbiRyZC1mb3JtLW5ldXRyYWwtY29sb3I6ICcyMTkzZTYnO1xuJHJkLWZvcm0tc2VhcmNoLWNvbG9yOiAgJzU2MzBlZCc7XG4kcmQtZm9ybS1pbnZhbGlkLWNvbG9yOiAnZDUyOTE4JztcbiIKCV0sCgkibWFwcGluZ3MiOiAiQUNBQSxzQkFBc0I7QUFHdEIsMEJBQTBCO0FBRzFCLHlCQUF5QjtBQUd6QixpQkFBaUI7QUFPakIsMkJBQTJCO0FEYjNCLEFBQVcsUUFBSCxHQUFHLE9BQU8sQ0FBQTtFQXNCakIsbURBQW1EO0NBTW5EOztBQTVCRCxBQUVLLFFBRkcsR0FBRyxPQUFPLEdBRWIsS0FBSyxDQUFBO0VBQ1IsT0FBTyxFQUFFLEtBQU07RUFDZixRQUFRLEVBQUUsUUFBUztFQUNsQixHQUFHLEVBQUUsQ0FBRTtFQUNQLElBQUksRUFBRSxDQUFFO0VBQ1IsS0FBSyxFQ09VLEdBQUc7RURObEIsTUFBTSxFQ01TLEdBQUc7RURKbkIsZ0JBQWdCLEVBQUUsT0FBTTtFQUN4QixnQkFBZ0IsRUFBRSw2QkFBRztFQUNyQixtQkFBbUIsRUFBRSxhQUFjO0VBQ25DLGlCQUFpQixFQUFFLFNBQVU7RUFDN0IsZUFBZSxFQUFFLE9BQVE7RUFFekIsTUFBTSxFQUFFLE9BQVE7RUFFaEIsVUFBVSxFQUFFLE9BQVE7Q0FFcEI7O0FBcEJGLEFBdUJhLFFBdkJMLEdBQUcsT0FBTyxBQXVCaEIsUUFBUSxHQUFHLEtBQUssQ0FBQTtFQUNoQixnQkFBZ0IsRUFBRSwrQkFBRztFQUNyQixlQUFlLEVBQUUsT0FBUTtDQUN6QiIsCgkibmFtZXMiOiBbXQp9 */

View File

@ -0,0 +1,62 @@
/* COULEUR DU THEME */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
#WRAPPER {
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #edf0f5;
font-family: 'Open Sans', 'Ubuntu';
/* [1] Header de la page
==========================================*/
/* [2] Side-Menu de la page
==========================================*/
/* [3] Container de la page
==========================================*/
}
#WRAPPER > #HEADER {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: calc( 4em - 1px);
border-bottom: 1px solid #c23f05;
background-color: #f44f06;
z-index: 10;
}
#WRAPPER > #MENU-SIDE {
display: block;
position: absolute;
top: 4em;
left: 0;
width: 4em;
height: 100%;
box-shadow: 2px 1px 3px #ddd;
background-color: #fff;
transition: all .3s;
z-index: 9;
}
#WRAPPER > #CONTAINER {
display: flex;
position: absolute;
top: 4em;
left: 4em;
width: calc( 100% - 4em - 2*1em);
height: calc( 100% - 4em - 2*1em);
padding: 1em;
flex-direction: row;
justify-content: space-between;
overflow-x: none;
overflow-y: auto;
}
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAibGF5b3V0LmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vbGF5b3V0LnNjc3MiLAoJCSIuLi9jb25zdGFudHMuc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIkBpbXBvcnQgJ2NvbnN0YW50cyc7XG5cbiNXUkFQUEVSe1xuXHRkaXNwbGF5OiBibG9jaztcblx0cG9zaXRpb246IGZpeGVkO1xuXHRcdHRvcDogMDtcblx0XHRsZWZ0OiAwO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdGhlaWdodDogMTAwJTtcblxuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWRmMGY1O1xuXG5cdGZvbnQtZmFtaWx5OiAnT3BlbiBTYW5zJywgJ1VidW50dSc7XG5cblxuXHQvKiBbMV0gSGVhZGVyIGRlIGxhIHBhZ2Vcblx0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblx0JiA+ICNIRUFERVJ7XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdFx0dG9wOiAwO1xuXHRcdFx0bGVmdDogMDtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdFx0aGVpZ2h0OiBjYWxjKCAjeyRtZW51LXNpZGUtd2lkdGh9IC0gMXB4ICk7XG5cblx0XHRib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKCR0aGVtZS1jb2xvciwgMTApO1xuXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogJHRoZW1lLWNvbG9yO1xuXG5cdFx0ei1pbmRleDogMTA7XG5cblx0fVxuXG5cblx0LyogWzJdIFNpZGUtTWVudSBkZSBsYSBwYWdlXG5cdD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cdC8vIEdlc3Rpb24gZHUgbWVudVxuXHQmID4gI01FTlUtU0lERXtcblx0XHRkaXNwbGF5OiBibG9jaztcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6ICRtZW51LXNpZGUtd2lkdGg7XG5cdFx0XHRsZWZ0OiAwO1xuXHRcdFx0d2lkdGg6ICRtZW51LXNpZGUtd2lkdGg7XG5cdFx0XHRoZWlnaHQ6IDEwMCU7XG5cblx0XHRib3gtc2hhZG93OiAycHggMXB4IDNweCAjZGRkO1xuXG5cdFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcblxuXHRcdHRyYW5zaXRpb246IGFsbCAuM3M7XG5cblx0XHR6LWluZGV4OiA5O1xuXHR9XG5cblxuXHQvKiBbM10gQ29udGFpbmVyIGRlIGxhIHBhZ2Vcblx0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cblx0JiA+ICNDT05UQUlORVJ7XG5cdFx0ZGlzcGxheTogZmxleDtcblx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHR0b3A6ICRtZW51LXNpZGUtd2lkdGg7XG5cdFx0XHRsZWZ0OiAkbWVudS1zaWRlLXdpZHRoO1xuXHRcdFx0d2lkdGg6IGNhbGMoIDEwMCUgLSAjeyRtZW51LXNpZGUtd2lkdGh9IC0gMioxZW0gKTtcblx0XHRcdGhlaWdodDogY2FsYyggMTAwJSAtICN7JG1lbnUtc2lkZS13aWR0aH0gLSAyKjFlbSApO1xuXHRcdHBhZGRpbmc6IDFlbTtcblxuXHRcdC8vIEZsZXggcHJvcGVydGllc1xuXHRcdGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cdFx0anVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG5cdFx0b3ZlcmZsb3cteDogbm9uZTtcblx0XHRvdmVyZmxvdy15OiBhdXRvO1xuXHR9XG59XG4iLAoJCSIvKiBDT1VMRVVSIERVIFRIRU1FICovXG4kdGhlbWUtY29sb3I6ICNmNDRmMDY7XG5cbi8qIENPVUxFVVIgRFUgU09VUy1NRU5VICovXG4kc3ViLW1lbnUtY29sb3I6ICM1YjVlNjM7XG5cbi8qIENPVUxFVVIgREVTIEVSUkVVUlMgKi9cbiRlcnJvci1jb2xvcjogI2NjNTg1NztcblxuLyogRk9STVVMQUlSRVMgKi9cbiRmb3JtLXZhbGlkLWNvbG9yOiAgICMyN2E1NjA7XG4kZm9ybS1uZXV0cmFsLWNvbG9yOiAjMjE5M2U2O1xuJGZvcm0tc2VhcmNoLWNvbG9yOiAgIzU2MzBlZDtcbiRmb3JtLWludmFsaWQtY29sb3I6ICNkNTI5MTg7XG5cblxuLyogR0VTVElPTiBERVMgTE9OR1VFVVJTICovXG4kbWVudS1zaWRlLXdpZHRoOiA0ZW07XG5cblxuLy8gUE9VUiBSRVNPVVJDRV9ESVNQQVRDSEVSXG4kcmQtZm9ybS12YWxpZC1jb2xvcjogICAnMjdhNTYwJztcbiRyZC1mb3JtLW5ldXRyYWwtY29sb3I6ICcyMTkzZTYnO1xuJHJkLWZvcm0tc2VhcmNoLWNvbG9yOiAgJzU2MzBlZCc7XG4kcmQtZm9ybS1pbnZhbGlkLWNvbG9yOiAnZDUyOTE4JztcbiIKCV0sCgkibWFwcGluZ3MiOiAiQUNBQSxzQkFBc0I7QUFHdEIsMEJBQTBCO0FBRzFCLHlCQUF5QjtBQUd6QixpQkFBaUI7QUFPakIsMkJBQTJCO0FEZDNCLEFBQUEsUUFBUSxDQUFBO0VBQ1AsT0FBTyxFQUFFLEtBQU07RUFDZixRQUFRLEVBQUUsS0FBTTtFQUNmLEdBQUcsRUFBRSxDQUFFO0VBQ1AsSUFBSSxFQUFFLENBQUU7RUFDUixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxJQUFLO0VBRWQsZ0JBQWdCLEVBQUUsT0FBUTtFQUUxQixXQUFXLEVBQUUscUJBQXNCO0VBR25DOzZDQUM0QztFQWtCNUM7NkNBQzRDO0VBb0I1Qzs2Q0FDNEM7Q0FpQjVDOztBQXZFRCxBQWVLLFFBZkcsR0FlSCxPQUFPLENBQUE7RUFDVixPQUFPLEVBQUUsS0FBTTtFQUNmLFFBQVEsRUFBRSxRQUFTO0VBQ2xCLEdBQUcsRUFBRSxDQUFFO0VBQ1AsSUFBSSxFQUFFLENBQUU7RUFDUixLQUFLLEVBQUUsSUFBSztFQUNaLE1BQU0sRUFBRSxnQkFBSTtFQUViLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU07RUFFL0IsZ0JBQWdCLEVDMUJKLE9BQU87RUQ0Qm5CLE9BQU8sRUFBRSxFQUFHO0NBRVo7O0FBN0JGLEFBbUNLLFFBbkNHLEdBbUNILFVBQVUsQ0FBQTtFQUNiLE9BQU8sRUFBRSxLQUFNO0VBQ2YsUUFBUSxFQUFFLFFBQVM7RUFDbEIsR0FBRyxFQ3ZCWSxHQUFHO0VEd0JsQixJQUFJLEVBQUUsQ0FBRTtFQUNSLEtBQUssRUN6QlUsR0FBRztFRDBCbEIsTUFBTSxFQUFFLElBQUs7RUFFZCxVQUFVLEVBQUUsZ0JBQWlCO0VBRTdCLGdCQUFnQixFQUFFLElBQUs7RUFFdkIsVUFBVSxFQUFFLE9BQVE7RUFFcEIsT0FBTyxFQUFFLENBQUU7Q0FDWDs7QUFsREYsQUF1REssUUF2REcsR0F1REgsVUFBVSxDQUFBO0VBQ2IsT0FBTyxFQUFFLElBQUs7RUFDZCxRQUFRLEVBQUUsUUFBUztFQUNsQixHQUFHLEVDM0NZLEdBQUc7RUQ0Q2xCLElBQUksRUM1Q1csR0FBRztFRDZDbEIsS0FBSyxFQUFFLHlCQUFJO0VBQ1gsTUFBTSxFQUFFLHlCQUFJO0VBQ2IsT0FBTyxFQUFFLEdBQUk7RUFHYixjQUFjLEVBQUUsR0FBSTtFQUNwQixlQUFlLEVBQUUsYUFBYztFQUUvQixVQUFVLEVBQUUsSUFBSztFQUNqQixVQUFVLEVBQUUsSUFBSztDQUNqQiIsCgkibmFtZXMiOiBbXQp9 */

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,54 @@
/* COULEUR DU THEME */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
#CONTAINER > .sub-menu-side {
display: block;
position: relative;
}
#CONTAINER > .sub-menu-side > span[data-sublink] {
display: block;
position: relative;
width: 7.5em;
padding: .3em 1em .3em 2em;
margin: 1em;
border-radius: 3px;
color: #5b5e63;
text-shadow: 1px 1px white;
white-space: nowrap;
transition: all .2s;
cursor: pointer;
overflow: hidden;
}
#CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg {
display: inline-block;
position: absolute;
left: .5em;
top: 50%;
width: 1em;
height: 1em;
transform: translateY(-50%);
}
#CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg path {
fill: #5b5e63 !important;
}
#CONTAINER > .sub-menu-side > span[data-sublink]:hover, #CONTAINER > .sub-menu-side > span[data-sublink].active {
color: #121213;
background-color: #d8deea;
box-shadow: inset 0 0 4px #c8ced9;
}
#CONTAINER > .sub-menu-side > span[data-sublink]:hover > .svg > svg path, #CONTAINER > .sub-menu-side > span[data-sublink].active > .svg > svg path {
fill: #121213 !important;
}
#CONTAINER > .sub-menu-side > span[data-sublink]:nth-child(1) {
margin-top: 1em;
}
/*# sourceMappingURL=data:application/json;base64,ewoJInZlcnNpb24iOiAzLAoJImZpbGUiOiAic3VibWVudS1zaWRlLmNzcyIsCgkic291cmNlcyI6IFsKCQkiLi4vc3VibWVudS1zaWRlLnNjc3MiLAoJCSIuLi9jb25zdGFudHMuc2NzcyIKCV0sCgkic291cmNlc0NvbnRlbnQiOiBbCgkJIkBpbXBvcnQgJ2NvbnN0YW50cyc7XG5cblxuI0NPTlRBSU5FUiA+IC5zdWItbWVudS1zaWRle1xuXHRkaXNwbGF5OiBibG9jaztcblx0cG9zaXRpb246IHJlbGF0aXZlO1xuXG5cdC8vIExlcyBsaWVucyBkdSBtZW51XG5cdCYgPiBzcGFuW2RhdGEtc3VibGlua117XG5cdFx0ZGlzcGxheTogYmxvY2s7XG5cdFx0cG9zaXRpb246IHJlbGF0aXZlO1xuXHRcdFx0d2lkdGg6IDcuNWVtO1xuXG5cdFx0cGFkZGluZzogLjNlbSAxZW0gLjNlbSAyZW07XG5cdFx0bWFyZ2luOiAxZW07XG5cblx0XHRib3JkZXItcmFkaXVzOiAzcHg7XG5cblx0XHRjb2xvcjogJHN1Yi1tZW51LWNvbG9yO1xuXHRcdHRleHQtc2hhZG93OiAxcHggMXB4IHdoaXRlO1xuXHRcdHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cblx0XHR0cmFuc2l0aW9uOiBhbGwgLjJzO1xuXG5cdFx0Y3Vyc29yOiBwb2ludGVyO1xuXG5cdFx0b3ZlcmZsb3c6IGhpZGRlbjtcblxuXHRcdC8vIERpbWVuc2lvbi9Qb3NpdGlvbiBkZXMgc3ZnIChpY29uZXMpXG5cdFx0JiA+IC5zdmcgPiBzdmd7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdFx0XHRcdGxlZnQ6IC41ZW07XG5cdFx0XHRcdC8vIGxlZnQ6IDEwMCU7XG5cdFx0XHRcdHRvcDogNTAlO1xuXHRcdFx0XHR3aWR0aDogMWVtO1xuXHRcdFx0XHRoZWlnaHQ6IDFlbTtcblxuXHRcdFx0dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuXG5cdFx0XHQvLyBDb2xvcmF0aW9uIHBvdXIgdG91cyBsZXMgZWxlbWVudHMgZHUgc3ZnXG5cdFx0XHQmIHBhdGh7XG5cdFx0XHRcdGZpbGw6ICRzdWItbWVudS1jb2xvciAhaW1wb3J0YW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCY6aG92ZXIsXG5cdFx0Ji5hY3RpdmV7XG5cdFx0XHRjb2xvcjogZGFya2VuKCRzdWItbWVudS1jb2xvciwgMzApO1xuXHRcdFx0YmFja2dyb3VuZC1jb2xvcjogI2Q4ZGVlYTtcblx0XHRcdGJveC1zaGFkb3c6IGluc2V0IDAgMCA0cHggI2M4Y2VkOTtcblxuXHRcdFx0JiA+IC5zdmcgPiBzdmcgcGF0aHtcblx0XHRcdFx0ZmlsbDogZGFya2VuKCRzdWItbWVudS1jb2xvciwgMzApICFpbXBvcnRhbnQ7XG5cdFx0XHR9XG5cblx0XHR9XG5cblx0fVxuXG5cblx0Ly8gT24gZGVjYWxlIGxlIHByZW1pZXJcblx0JiA+IHNwYW5bZGF0YS1zdWJsaW5rXTpudGgtY2hpbGQoMSl7XG5cdFx0bWFyZ2luLXRvcDogMWVtO1xuXHR9XG5cbn1cbiIsCgkJIi8qIENPVUxFVVIgRFUgVEhFTUUgKi9cbiR0aGVtZS1jb2xvcjogI2Y0NGYwNjtcblxuLyogQ09VTEVVUiBEVSBTT1VTLU1FTlUgKi9cbiRzdWItbWVudS1jb2xvcjogIzViNWU2MztcblxuLyogQ09VTEVVUiBERVMgRVJSRVVSUyAqL1xuJGVycm9yLWNvbG9yOiAjY2M1ODU3O1xuXG4vKiBGT1JNVUxBSVJFUyAqL1xuJGZvcm0tdmFsaWQtY29sb3I6ICAgIzI3YTU2MDtcbiRmb3JtLW5ldXRyYWwtY29sb3I6ICMyMTkzZTY7XG4kZm9ybS1zZWFyY2gtY29sb3I6ICAjNTYzMGVkO1xuJGZvcm0taW52YWxpZC1jb2xvcjogI2Q1MjkxODtcblxuXG4vKiBHRVNUSU9OIERFUyBMT05HVUVVUlMgKi9cbiRtZW51LXNpZGUtd2lkdGg6IDRlbTtcblxuXG4vLyBQT1VSIFJFU09VUkNFX0RJU1BBVENIRVJcbiRyZC1mb3JtLXZhbGlkLWNvbG9yOiAgICcyN2E1NjAnO1xuJHJkLWZvcm0tbmV1dHJhbC1jb2xvcjogJzIxOTNlNic7XG4kcmQtZm9ybS1zZWFyY2gtY29sb3I6ICAnNTYzMGVkJztcbiRyZC1mb3JtLWludmFsaWQtY29sb3I6ICdkNTI5MTgnO1xuIgoJXSwKCSJtYXBwaW5ncyI6ICJBQ0FBLHNCQUFzQjtBQUd0QiwwQkFBMEI7QUFHMUIseUJBQXlCO0FBR3pCLGlCQUFpQjtBQU9qQiwyQkFBMkI7QURiM0IsQUFBYSxVQUFILEdBQUcsY0FBYyxDQUFBO0VBQzFCLE9BQU8sRUFBRSxLQUFNO0VBQ2YsUUFBUSxFQUFFLFFBQVM7Q0E2RG5COztBQS9ERCxBQUtzQixVQUxaLEdBQUcsY0FBYyxHQUt0QixJQUFJLENBQUEsQUFBQSxZQUFDLEFBQUEsRUFBYTtFQUNyQixPQUFPLEVBQUUsS0FBTTtFQUNmLFFBQVEsRUFBRSxRQUFTO0VBQ2xCLEtBQUssRUFBRSxLQUFNO0VBRWQsT0FBTyxFQUFFLGlCQUFrQjtFQUMzQixNQUFNLEVBQUUsR0FBSTtFQUVaLGFBQWEsRUFBRSxHQUFJO0VBRW5CLEtBQUssRUNkVSxPQUFPO0VEZXRCLFdBQVcsRUFBRSxhQUFjO0VBQzNCLFdBQVcsRUFBRSxNQUFPO0VBRXBCLFVBQVUsRUFBRSxPQUFRO0VBRXBCLE1BQU0sRUFBRSxPQUFRO0VBRWhCLFFBQVEsRUFBRSxNQUFPO0NBZ0NqQjs7QUF2REYsQUEwQmEsVUExQkgsR0FBRyxjQUFjLEdBS3RCLElBQUksQ0FBQSxBQUFBLFlBQUMsQUFBQSxJQXFCSixJQUFJLEdBQUcsR0FBRyxDQUFBO0VBQ2IsT0FBTyxFQUFFLFlBQWE7RUFDdEIsUUFBUSxFQUFFLFFBQVM7RUFDbEIsSUFBSSxFQUFFLElBQUs7RUFFWCxHQUFHLEVBQUUsR0FBSTtFQUNULEtBQUssRUFBRSxHQUFJO0VBQ1gsTUFBTSxFQUFFLEdBQUk7RUFFYixTQUFTLEVBQUUsZ0JBQVU7Q0FNckI7O0FBekNILEFBc0NLLFVBdENLLEdBQUcsY0FBYyxHQUt0QixJQUFJLENBQUEsQUFBQSxZQUFDLEFBQUEsSUFxQkosSUFBSSxHQUFHLEdBQUcsQ0FZWCxJQUFJLENBQUE7RUFDTCxJQUFJLEVDdENTLE9BQU8sQ0RzQ0UsVUFBVTtDQUNoQzs7QUF4Q0osQUFLc0IsVUFMWixHQUFHLGNBQWMsR0FLdEIsSUFBSSxDQUFBLEFBQUEsWUFBQyxBQUFBLENBc0NQLE1BQU0sRUEzQ1QsQUFLc0IsVUFMWixHQUFHLGNBQWMsR0FLdEIsSUFBSSxDQUFBLEFBQUEsWUFBQyxBQUFBLENBdUNQLE9BQU8sQ0FBQTtFQUNQLEtBQUssRUFBRSxPQUFNO0VBQ2IsZ0JBQWdCLEVBQUUsT0FBUTtFQUMxQixVQUFVLEVBQUUscUJBQXNCO0NBTWxDOztBQXJESCxBQWlEa0IsVUFqRFIsR0FBRyxjQUFjLEdBS3RCLElBQUksQ0FBQSxBQUFBLFlBQUMsQUFBQSxDQXNDUCxNQUFNLEdBTUYsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBakR0QixBQWlEa0IsVUFqRFIsR0FBRyxjQUFjLEdBS3RCLElBQUksQ0FBQSxBQUFBLFlBQUMsQUFBQSxDQXVDUCxPQUFPLEdBS0gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUE7RUFDbEIsSUFBSSxFQUFFLE9BQU0sQ0FBc0IsVUFBVTtDQUM1Qzs7QUFuREosQUEyRG1DLFVBM0R6QixHQUFHLGNBQWMsR0EyRHRCLElBQUksQ0FBQSxBQUFBLFlBQUMsQUFBQSxDQUFhLFVBQVcsQ0FBQSxBQUFBLENBQUMsRUFBQztFQUNsQyxVQUFVLEVBQUUsR0FBSTtDQUNoQiIsCgkibmFtZXMiOiBbXQp9 */

View File

@ -1,324 +0,0 @@
@import 'constants';
/* [3] Formulaires
=========================================================*/
section > form, .form{
display: inline-block;
position: relative;
left: 50%;
margin: .3em 0;
padding: 1em;
border-radius: 3px;
border-color: $form-invalid-color;
box-shadow: 0 0 1px #b7b7b7;
background-color: #fff;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
&#choose-cluster{
left: 0;
-webkit-transform: none;
transform: none;
}
&.valid{
border-color: $form-valid-color;
}
&.neutral{
border-color: $form-neutral-color;
}
&.search{
border-color: $form-neutral-color;
}
// Textes centres
.edit_search_view,
.remove_search_view{
display: inline-block;
width: 100%;
text-align: center;
color: #aaaaaa;
span{
color: #888888;
}
}
span.error-msg{
display: inline-block;
color: #F03C3C;
font-size: 0.7em;
}
}
/* (1) Champs de texte */
input[type=text],
input[type=mail],
input[type=password],
select,
.invalid > input[type=text],
.invalid > input[type=mail],
.invalid > input[type=password],
.invalid > select,
input.invalid[type=text],
input.invalid[type=mail],
input.invalid[type=password],
select.invalid{
display: inline-block;
margin: 1em 0;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d7dde8;
color: #2f3033;
transition: border .4s ease-in-out;
&:focus,
&:hover{
border-color: $form-invalid-color;
}
}
select{
width: 100%;
display: block;
background: #fff;
option{
padding: .5em;
}
}
// Champs valides
.valid > input[type=text],
.valid > input[type=mail],
.valid > input[type=password],
.valid > select,
input.valid[type=text],
input.valid[type=mail],
input.valid[type=password],
select.valid{
&:focus,
&:hover{
border-color: $form-valid-color;
}
}
// Champs neutres
.neutral > input[type=text],
.neutral > input[type=mail],
.neutral > input[type=password],
.neutral > select,
input.neutral[type=text],
input.neutral[type=mail],
input.neutral[type=password],
select.neutral{
&:focus,
&:hover{
border-color: $form-neutral-color;
}
}
// Champs neutres
.search > input[type=text],
.search > input[type=mail],
.search > input[type=password],
.search > select,
input.search[type=text],
input.search[type=mail],
input.search[type=password]{
&:focus,
&:hover{
border-color: $form-search-color;
}
}
/* (2) Boutons */
button,
button.invalid,
.invalid > button{
display: inline-block;
position: relative;
left: 50%;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid $form-invalid-color;
background: $form-invalid-color center center no-repeat;
color: #fff;
transition: background .4s ease-in-out;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-invalid-color;
}
}
// Boutons grisés
button.grey,
.grey > button{
border-color: $form-grey-color;
background-color: $form-grey-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-grey-color;
}
}
// Boutons valides
button.valid,
.valid > button{
border-color: $form-valid-color;
background-color: $form-valid-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-valid-color;
}
}
// Boutons neutres
button.neutral,
.neutral > button{
border-color: $form-neutral-color;
background-color: $form-neutral-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-neutral-color;
}
}
// Boutons recherche
button.search,
.search > button{
border-color: $form-search-color;
background-color: $form-search-color;
&:hover,
&:focus,
&:disabled{
background-color: #fff;
color: $form-search-color;
}
}
// Boutons quand action validee
.invalid > button.active,
button.invalid.active,
button.active{
background-color: #fff;
background-image: url('/src/static/container/active@#{$rd-form-invalid-color}.svg') !important;
background-size: 1em auto;
color: transparent !important;
}
button.valid.active,
.valid > button.active{
background-image: url('/src/static/container/active@#{$rd-form-valid-color}.svg') !important;
}
button.neutral.active,
.neutral > button.active{
background-image: url('/src/static/container/active@#{$rd-form-neutral-color}.svg') !important;
}
button.search.active,
.search > button.active{
background-image: url('/src/static/container/active@#{$rd-form-search-color}.svg') !important;
}
// "OU" separant les boutons
hr.OR[data-label]{
display: block;
position: relative;
width: 100%;
height: 0;
border: 0;
border-bottom: 1px dashed $form-invalid-color;
&:before{
content: attr(data-label);
display: inline-block;
position: relative;
top: 50%;
left: 50%;
padding: 0 1em;
background-color: #fff;
color: $form-invalid-color;
-webkit-transform: translateX(-50%) translatey(-50%);
transform: translateX(-50%) translatey(-50%);
}
}
// "OU" valide
.valid > hr.OR,
hr.OR.valid{
border-bottom: 1px dashed $form-valid-color;
&:before{
color: $form-valid-color;
}
}
// "OU" neutre
.neutral > hr.OR,
hr.OR.neutral{
border-bottom: 1px dashed $form-neutral-color;
&:before{
color: $form-neutral-color;
}
}
// "OU" recherche
.search > hr.OR,
hr.OR.search{
border-bottom: 1px dashed $form-search-color;
&:before{
color: $form-search-color;
}
}

View File

@ -9,7 +9,7 @@
top: 0; top: 0;
left: 0; left: 0;
width: $menu-side-width; width: $menu-side-width;
height: calc( #{$menu-side-width} - 1px ); height: $menu-side-width;
background-color: darken($theme-color, 10); background-color: darken($theme-color, 10);
background-image: url('/src/static/iconv3.svg'); background-image: url('/src/static/iconv3.svg');

View File

@ -68,114 +68,7 @@
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
overflow: hidden; overflow-x: none;
overflow-y: auto; overflow-y: auto;
} }
/* [4] Popup background - window
==========================================*/
& > #POPUP{
display: none;
position: fixed;
top: 50%;
left: 50%;
min-width: 50%;
max-width: 50%;
min-height: 30%;
max-height: 50%;
border-radius: 5px;
background: #fff;
color: #34495e;
box-shadow: -10px 10px 0 rgba(26, 33, 40, .8);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
z-index: 101;
flex-flow: column nowrap;
justify-content: space-between;
&.active{
display: flex;
}
& > .header{
display: block;
position: relative;
width: calc( 100% - 2*1em );
padding: 1em;
border-radius: 5px 5px 0 0;
border-bottom: 2px solid #ecf0f1;
font-size: 1.1em;
font-weight: bold;
}
& > .body{
display: block;
position: relative;
width: calc( 100% - 2*1em );
padding: 1em;
b, strong{
color: #5630ed;
}
}
& > .footer{
display: flex;
position: relative;
width: calc( 100% - 2*1em );
padding: 1em;
background-color: #ecf0f1;
border-radius: 0 0 5px 5px;
// flex props.
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-end;
& button{
left: auto;
margin: 0 1em;
-webkit-transform: none;
transform: none;
}
}
}
& > #POPUP-BG{
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #29333f;
background: rgba(41, 51, 63, .8);
z-index: 100;
}
& #POPUP.active ~ #POPUP-BG{
display: block;
}
} }

View File

@ -87,7 +87,6 @@
box-shadow: inset 0 0 .5em #eee; box-shadow: inset 0 0 .5em #eee;
&:hover:after{ &:hover:after{
-webkit-transform: scaleX(1);
transform: scaleX(1); transform: scaleX(1);
color: #fff; color: #fff;
} }

4
public_html/css/min/constants.css Normal file → Executable file
View File

@ -3,4 +3,6 @@
/* COULEUR DES ERREURS */ /* COULEUR DES ERREURS */
/* FORMULAIRES */ /* FORMULAIRES */
/* GESTION DES LONGUEURS */ /* GESTION DES LONGUEURS */
/*# sourceMappingURL=constants.css.map */
/*# sourceMappingURL= constants.css.map */

File diff suppressed because it is too large Load Diff

View File

@ -2,41 +2,50 @@
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/R.ttf"); src: url("/css/font/Open Sans/R.ttf");
font-weight: normal; font-weight: normal;
font-style: normal; } font-style: normal;
}
@font-face { @font-face {
font-family: 'Open Sans sb'; font-family: 'Open Sans sb';
src: url("/css/font/Open Sans/SB.ttf"); src: url("/css/font/Open Sans/SB.ttf");
font-weight: normal; font-weight: normal;
font-style: normal; } font-style: normal;
}
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/b.ttf"); src: url("/css/font/Open Sans/b.ttf");
font-weight: bold; font-weight: bold;
font-style: normal; } font-style: normal;
}
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/i.ttf"); src: url("/css/font/Open Sans/i.ttf");
font-weight: normal; font-weight: normal;
font-style: italic; } font-style: italic;
}
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/bi.ttf"); src: url("/css/font/Open Sans/bi.ttf");
font-weight: bold; font-weight: bold;
font-style: italic; } font-style: italic;
}
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/L.ttf"); src: url("/css/font/Open Sans/L.ttf");
font-weight: 100; font-weight: 100;
font-style: normal; } font-style: normal;
}
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: url("/css/font/Open Sans/Li.ttf"); src: url("/css/font/Open Sans/Li.ttf");
font-weight: 100; font-weight: 100;
font-style: italic; } font-style: italic;
/*# sourceMappingURL=font.css.map */ }
/*# sourceMappingURL= font.css.map */

37
public_html/css/min/fonts.css Executable file
View File

@ -0,0 +1,37 @@
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/R.ttf");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'Open Sans sb';
src: url("/css/font/Open Sans/SB.ttf");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/b.ttf");
font-weight: bold;
font-style: normal; }
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/i.ttf");
font-weight: normal;
font-style: italic; }
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/bi.ttf");
font-weight: bold;
font-style: italic; }
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/L.ttf");
font-weight: 100;
font-style: normal; }
@font-face {
font-family: 'Open Sans';
src: url("/css/font/Open Sans/Li.ttf");
font-weight: 100;
font-style: italic; }
/*# sourceMappingURL=fonts.css.map */

276
public_html/css/min/global.css Normal file → Executable file
View File

@ -1,275 +1,3 @@
/* COULEUR DU THEME */ /* No CSS */
/* COULEUR DU SOUS-MENU */
/* COULEUR DES ERREURS */
/* FORMULAIRES */
/* GESTION DES LONGUEURS */
/* [3] Formulaires
=========================================================*/
section > form, .form {
display: inline-block;
position: relative;
left: 50%;
margin: .3em 0;
padding: 1em;
border-radius: 3px;
border-color: #d52918;
box-shadow: 0 0 1px #b7b7b7;
background-color: #fff;
-webkit-transform: translateX(-50%);
transform: translateX(-50%); }
section > form#choose-cluster, .form#choose-cluster {
left: 0;
-webkit-transform: none;
transform: none; }
section > form.valid, .form.valid {
border-color: #27a560; }
section > form.neutral, .form.neutral {
border-color: #2193e6; }
section > form.search, .form.search {
border-color: #2193e6; }
section > form .edit_search_view,
section > form .remove_search_view, .form .edit_search_view,
.form .remove_search_view {
display: inline-block;
width: 100%;
text-align: center;
color: #aaaaaa; }
section > form .edit_search_view span,
section > form .remove_search_view span, .form .edit_search_view span,
.form .remove_search_view span {
color: #888888; }
section > form span.error-msg, .form span.error-msg {
display: inline-block;
color: #F03C3C;
font-size: 0.7em; }
/* (1) Champs de texte */ /*# sourceMappingURL= global.css.map */
input[type=text],
input[type=mail],
input[type=password],
select,
.invalid > input[type=text],
.invalid > input[type=mail],
.invalid > input[type=password],
.invalid > select,
input.invalid[type=text],
input.invalid[type=mail],
input.invalid[type=password],
select.invalid {
display: inline-block;
margin: 1em 0;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d7dde8;
color: #2f3033;
transition: border .4s ease-in-out; }
input[type=text]:focus, input[type=text]:hover,
input[type=mail]:focus,
input[type=mail]:hover,
input[type=password]:focus,
input[type=password]:hover,
select:focus,
select:hover,
.invalid > input[type=text]:focus,
.invalid > input[type=text]:hover,
.invalid > input[type=mail]:focus,
.invalid > input[type=mail]:hover,
.invalid > input[type=password]:focus,
.invalid > input[type=password]:hover,
.invalid > select:focus,
.invalid > select:hover,
input.invalid[type=text]:focus,
input.invalid[type=text]:hover,
input.invalid[type=mail]:focus,
input.invalid[type=mail]:hover,
input.invalid[type=password]:focus,
input.invalid[type=password]:hover,
select.invalid:focus,
select.invalid:hover {
border-color: #d52918; }
select {
width: 100%;
display: block;
background: #fff; }
select option {
padding: .5em; }
.valid > input[type=text]:focus, .valid > input[type=text]:hover,
.valid > input[type=mail]:focus,
.valid > input[type=mail]:hover,
.valid > input[type=password]:focus,
.valid > input[type=password]:hover,
.valid > select:focus,
.valid > select:hover,
input.valid[type=text]:focus,
input.valid[type=text]:hover,
input.valid[type=mail]:focus,
input.valid[type=mail]:hover,
input.valid[type=password]:focus,
input.valid[type=password]:hover,
select.valid:focus,
select.valid:hover {
border-color: #27a560; }
.neutral > input[type=text]:focus, .neutral > input[type=text]:hover,
.neutral > input[type=mail]:focus,
.neutral > input[type=mail]:hover,
.neutral > input[type=password]:focus,
.neutral > input[type=password]:hover,
.neutral > select:focus,
.neutral > select:hover,
input.neutral[type=text]:focus,
input.neutral[type=text]:hover,
input.neutral[type=mail]:focus,
input.neutral[type=mail]:hover,
input.neutral[type=password]:focus,
input.neutral[type=password]:hover,
select.neutral:focus,
select.neutral:hover {
border-color: #2193e6; }
.search > input[type=text]:focus, .search > input[type=text]:hover,
.search > input[type=mail]:focus,
.search > input[type=mail]:hover,
.search > input[type=password]:focus,
.search > input[type=password]:hover,
.search > select:focus,
.search > select:hover,
input.search[type=text]:focus,
input.search[type=text]:hover,
input.search[type=mail]:focus,
input.search[type=mail]:hover,
input.search[type=password]:focus,
input.search[type=password]:hover {
border-color: #5630ed; }
/* (2) Boutons */
button,
button.invalid,
.invalid > button {
display: inline-block;
position: relative;
left: 50%;
padding: .7em 1em;
border-radius: 3px;
border: 1px solid #d52918;
background: #d52918 center center no-repeat;
color: #fff;
transition: background .4s ease-in-out;
-webkit-transform: translateX(-50%);
transform: translateX(-50%); }
button:hover, button:focus, button:disabled,
button.invalid:hover,
button.invalid:focus,
button.invalid:disabled,
.invalid > button:hover,
.invalid > button:focus,
.invalid > button:disabled {
background-color: #fff;
color: #d52918; }
button.grey,
.grey > button {
border-color: #8d8d8d;
background-color: #8d8d8d; }
button.grey:hover, button.grey:focus, button.grey:disabled,
.grey > button:hover,
.grey > button:focus,
.grey > button:disabled {
background-color: #fff;
color: #8d8d8d; }
button.valid,
.valid > button {
border-color: #27a560;
background-color: #27a560; }
button.valid:hover, button.valid:focus, button.valid:disabled,
.valid > button:hover,
.valid > button:focus,
.valid > button:disabled {
background-color: #fff;
color: #27a560; }
button.neutral,
.neutral > button {
border-color: #2193e6;
background-color: #2193e6; }
button.neutral:hover, button.neutral:focus, button.neutral:disabled,
.neutral > button:hover,
.neutral > button:focus,
.neutral > button:disabled {
background-color: #fff;
color: #2193e6; }
button.search,
.search > button {
border-color: #5630ed;
background-color: #5630ed; }
button.search:hover, button.search:focus, button.search:disabled,
.search > button:hover,
.search > button:focus,
.search > button:disabled {
background-color: #fff;
color: #5630ed; }
.invalid > button.active,
button.invalid.active,
button.active {
background-color: #fff;
background-image: url("/src/static/container/active@d52918.svg") !important;
background-size: 1em auto;
color: transparent !important; }
button.valid.active,
.valid > button.active {
background-image: url("/src/static/container/active@27a560.svg") !important; }
button.neutral.active,
.neutral > button.active {
background-image: url("/src/static/container/active@2193e6.svg") !important; }
button.search.active,
.search > button.active {
background-image: url("/src/static/container/active@5630ed.svg") !important; }
hr.OR[data-label] {
display: block;
position: relative;
width: 100%;
height: 0;
border: 0;
border-bottom: 1px dashed #d52918; }
hr.OR[data-label]:before {
content: attr(data-label);
display: inline-block;
position: relative;
top: 50%;
left: 50%;
padding: 0 1em;
background-color: #fff;
color: #d52918;
-webkit-transform: translateX(-50%) translatey(-50%);
transform: translateX(-50%) translatey(-50%); }
.valid > hr.OR,
hr.OR.valid {
border-bottom: 1px dashed #27a560; }
.valid > hr.OR:before,
hr.OR.valid:before {
color: #27a560; }
.neutral > hr.OR,
hr.OR.neutral {
border-bottom: 1px dashed #2193e6; }
.neutral > hr.OR:before,
hr.OR.neutral:before {
color: #2193e6; }
.search > hr.OR,
hr.OR.search {
border-bottom: 1px dashed #5630ed; }
.search > hr.OR:before,
hr.OR.search:before {
color: #5630ed; }
/*# sourceMappingURL=global.css.map */

73
public_html/css/min/header.css Normal file → Executable file
View File

@ -4,34 +4,45 @@
/* FORMULAIRES */ /* FORMULAIRES */
/* GESTION DES LONGUEURS */ /* GESTION DES LONGUEURS */
#WRAPPER > #HEADER { #WRAPPER > #HEADER {
/* Animation de chargement qudnd chargement ajax */ } /* Animation de chargement qudnd chargement ajax */
#WRAPPER > #HEADER > .icon { }
display: block;
position: absolute; #WRAPPER > #HEADER > .icon {
top: 0; display: block;
left: 0; position: absolute;
width: 4em; top: 0;
height: calc( 4em - 1px); left: 0;
background-color: #c23f05; width: 4em;
background-image: url("/src/static/iconv3.svg"); height: 4em;
background-position: center center; background-color: #c23f05;
background-repeat: no-repeat; background-image: url("/src/static/iconv3.svg");
background-size: 50% 50%; background-position: center center;
cursor: pointer; background-repeat: no-repeat;
transition: all .3s; } background-size: 50% 50%;
#WRAPPER > #HEADER.loading > .icon { cursor: pointer;
background-image: url("/src/static/loaderv2.svg"); transition: all .3s;
background-size: 70% 70%; } }
#WRAPPER > #HEADER > .logout-icon {
display: block; #WRAPPER > #HEADER.loading > .icon {
position: absolute; background-image: url("/src/static/loaderv2.svg");
top: 0; background-size: 70% 70%;
left: calc( 100% - 4em); }
width: 4em;
height: 4em; #WRAPPER > #HEADER > .logout-icon {
background: transparent url("/src/static/logout@e0e7ed.svg") center center no-repeat; display: block;
background-size: 40%; position: absolute;
cursor: pointer; } top: 0;
#WRAPPER > #HEADER > .logout-icon:hover { left: calc( 100% - 4em);
background-image: url("/src/static/logout@ffffff.svg"); } width: 4em;
/*# sourceMappingURL=header.css.map */ height: 4em;
background: transparent url("/src/static/logout@e0e7ed.svg") center center no-repeat;
background-size: 40%;
cursor: pointer;
}
#WRAPPER > #HEADER > .logout-icon:hover {
background-image: url("/src/static/logout@ffffff.svg");
}
/*# sourceMappingURL= header.css.map */

142
public_html/css/min/layout.css Normal file → Executable file
View File

@ -18,102 +18,46 @@
==========================================*/ ==========================================*/
/* [3] Container de la page /* [3] Container de la page
==========================================*/ ==========================================*/
/* [4] Popup background - window }
==========================================*/ }
#WRAPPER > #HEADER { #WRAPPER > #HEADER {
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
width: 100%; width: 100%;
height: calc( 4em - 1px); height: calc( 4em - 1px);
border-bottom: 1px solid #c23f05; border-bottom: 1px solid #c23f05;
background-color: #f44f06; background-color: #f44f06;
z-index: 10; } z-index: 10;
#WRAPPER > #MENU-SIDE { }
display: block;
position: absolute; #WRAPPER > #MENU-SIDE {
top: 4em; display: block;
left: 0; position: absolute;
width: 4em; top: 4em;
height: 100%; left: 0;
box-shadow: 2px 1px 3px #ddd; width: 4em;
background-color: #fff; height: 100%;
transition: all .3s; box-shadow: 2px 1px 3px #ddd;
z-index: 9; } background-color: #fff;
#WRAPPER > #CONTAINER { transition: all .3s;
display: flex; z-index: 9;
position: absolute; }
top: 4em;
left: 4em; #WRAPPER > #CONTAINER {
width: calc( 100% - 4em - 2*1em); display: flex;
height: calc( 100% - 4em - 2*1em); position: absolute;
padding: 1em; top: 4em;
flex-direction: row; left: 4em;
justify-content: space-between; width: calc( 100% - 4em - 2*1em);
overflow: hidden; height: calc( 100% - 4em - 2*1em);
overflow-y: auto; } padding: 1em;
#WRAPPER > #POPUP { flex-direction: row;
display: none; justify-content: space-between;
position: fixed; overflow-x: none;
top: 50%; overflow-y: auto;
left: 50%; }
min-width: 50%;
max-width: 50%;
min-height: 30%; /*# sourceMappingURL= layout.css.map */
max-height: 50%;
border-radius: 5px;
background: #fff;
color: #34495e;
box-shadow: -10px 10px 0 rgba(26, 33, 40, 0.8);
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
z-index: 101;
flex-flow: column nowrap;
justify-content: space-between; }
#WRAPPER > #POPUP.active {
display: flex; }
#WRAPPER > #POPUP > .header {
display: block;
position: relative;
width: calc( 100% - 2*1em);
padding: 1em;
border-radius: 5px 5px 0 0;
border-bottom: 2px solid #ecf0f1;
font-size: 1.1em;
font-weight: bold; }
#WRAPPER > #POPUP > .body {
display: block;
position: relative;
width: calc( 100% - 2*1em);
padding: 1em; }
#WRAPPER > #POPUP > .body b, #WRAPPER > #POPUP > .body strong {
color: #5630ed; }
#WRAPPER > #POPUP > .footer {
display: flex;
position: relative;
width: calc( 100% - 2*1em);
padding: 1em;
background-color: #ecf0f1;
border-radius: 0 0 5px 5px;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-end; }
#WRAPPER > #POPUP > .footer button {
left: auto;
margin: 0 1em;
-webkit-transform: none;
transform: none; }
#WRAPPER > #POPUP-BG {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #29333f;
background: rgba(41, 51, 63, 0.8);
z-index: 100; }
#WRAPPER #POPUP.active ~ #POPUP-BG {
display: block; }
/*# sourceMappingURL=layout.css.map */

108
public_html/css/min/menu-side.css Normal file → Executable file
View File

@ -15,46 +15,68 @@
color: #a2a2a2; color: #a2a2a2;
line-height: calc( 4em - 2*.7em - 2*.55em - 2*.01em); line-height: calc( 4em - 2*.7em - 2*.55em - 2*.01em);
transition: color .3s, border .3s; transition: color .3s, border .3s;
cursor: pointer; } cursor: pointer;
#WRAPPER > #MENU-SIDE > span[data-link].mt { }
margin-top: 3em; }
#WRAPPER > #MENU-SIDE > span[data-link].mb { #WRAPPER > #MENU-SIDE > span[data-link].mt {
margin-bottom: 3em; } margin-top: 3em;
#WRAPPER > #MENU-SIDE > span[data-link] svg, #WRAPPER > #MENU-SIDE > span[data-link] svg * { }
width: calc( 4em / 2.5);
height: calc( 4em / 2.5); #WRAPPER > #MENU-SIDE > span[data-link].mb {
transition: fill .3s, stroke .3s; margin-bottom: 3em;
pointer-events: none; } }
#WRAPPER > #MENU-SIDE > span[data-link] svg #stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stylisable {
fill: #a2a2a2 !important; } #WRAPPER > #MENU-SIDE > span[data-link] svg, #WRAPPER > #MENU-SIDE > span[data-link] svg * {
#WRAPPER > #MENU-SIDE > span[data-link] svg #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stroke-stylisable { width: calc( 4em / 2.5);
stroke: #a2a2a2 !important; } height: calc( 4em / 2.5);
#WRAPPER > #MENU-SIDE > span[data-link][data-desc]:after { transition: fill .3s, stroke .3s;
content: attr(data-desc); pointer-events: none;
display: block; }
position: absolute;
top: calc( 4em / 4 - 2*.3em); #WRAPPER > #MENU-SIDE > span[data-link] svg #stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stylisable {
left: calc( 4em * 1.15 - 2*.3em); fill: #a2a2a2 !important;
padding: .3em; }
border-radius: 3px;
background-color: #2a2a2a; #WRAPPER > #MENU-SIDE > span[data-link] svg #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stroke-stylisable {
color: #e2e2e2; stroke: #a2a2a2 !important;
white-space: nowrap; }
transition: transform .1s;
-webkit-transform-origin: 0 0; #WRAPPER > #MENU-SIDE > span[data-link][data-desc]:after {
transform-origin: 0 0; content: attr(data-desc);
-webkit-transform: scaleX(0); display: block;
transform: scaleX(0); } position: absolute;
#WRAPPER > #MENU-SIDE > span[data-link]:hover, #WRAPPER > #MENU-SIDE > span[data-link].active { top: calc( 4em / 4 - 2*.3em);
color: #f44f06; left: calc( 4em * 1.15 - 2*.3em);
border-color: #e6e6e6; padding: .3em;
box-shadow: inset 0 0 .5em #eee; } border-radius: 3px;
#WRAPPER > #MENU-SIDE > span[data-link]:hover:hover:after, #WRAPPER > #MENU-SIDE > span[data-link].active:hover:after { background-color: #2a2a2a;
-webkit-transform: scaleX(1); color: #e2e2e2;
transform: scaleX(1); white-space: nowrap;
color: #fff; } transition: transform .1s;
#WRAPPER > #MENU-SIDE > span[data-link]:hover svg #stylisable, #WRAPPER > #MENU-SIDE > span[data-link].active svg #stylisable { -webkit-transform-origin: 0 0;
fill: #000 !important; } transform-origin: 0 0;
#WRAPPER > #MENU-SIDE > span[data-link]:hover svg #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link].active svg #stroke-stylisable { -webkit-transform: scaleX(0);
stroke: #000 !important; } transform: scaleX(0);
/*# sourceMappingURL=menu-side.css.map */ }
#WRAPPER > #MENU-SIDE > span[data-link]:hover, #WRAPPER > #MENU-SIDE > span[data-link].active {
color: #f44f06;
border-color: #e6e6e6;
box-shadow: inset 0 0 .5em #eee;
}
#WRAPPER > #MENU-SIDE > span[data-link]:hover:hover:after, #WRAPPER > #MENU-SIDE > span[data-link].active:hover:after {
transform: scaleX(1);
color: #fff;
}
#WRAPPER > #MENU-SIDE > span[data-link]:hover svg #stylisable, #WRAPPER > #MENU-SIDE > span[data-link].active svg #stylisable {
fill: #000 !important;
}
#WRAPPER > #MENU-SIDE > span[data-link]:hover svg #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link].active svg #stroke-stylisable {
stroke: #000 !important;
}
/*# sourceMappingURL= menu-side.css.map */

127
public_html/css/min/reset.css Normal file → Executable file
View File

@ -10,7 +10,8 @@ html {
-ms-text-size-adjust: 100%; -ms-text-size-adjust: 100%;
/* 2 */ /* 2 */
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
/* 2 */ } /* 2 */
}
/** /**
* Remove default margin. * Remove default margin.
@ -19,7 +20,8 @@ body {
margin: 0; margin: 0;
font-size: 16px; font-size: 16px;
font-family: 'Open Sans', 'Ubuntu', 'Verdana', 'Arial'; font-family: 'Open Sans', 'Ubuntu', 'Verdana', 'Arial';
font-weight: normal; } font-weight: normal;
}
/* HTML5 display definitions /* HTML5 display definitions
========================================================================== */ ========================================================================== */
@ -41,7 +43,8 @@ menu,
nav, nav,
section, section,
summary { summary {
display: block; } display: block;
}
/** /**
* 1. Correct `inline-block` display not defined in IE 8/9. * 1. Correct `inline-block` display not defined in IE 8/9.
@ -54,7 +57,8 @@ video {
display: inline-block; display: inline-block;
/* 1 */ /* 1 */
vertical-align: baseline; vertical-align: baseline;
/* 2 */ } /* 2 */
}
/** /**
* Prevent modern browsers from displaying `audio` without controls. * Prevent modern browsers from displaying `audio` without controls.
@ -62,7 +66,8 @@ video {
*/ */
audio:not([controls]) { audio:not([controls]) {
display: none; display: none;
height: 0; } height: 0;
}
/** /**
* Address `[hidden]` styling not present in IE 8/9/10. * Address `[hidden]` styling not present in IE 8/9/10.
@ -70,7 +75,8 @@ audio:not([controls]) {
*/ */
[hidden], [hidden],
template { template {
display: none; } display: none;
}
/* Links /* Links
========================================================================== */ ========================================================================== */
@ -78,7 +84,8 @@ template {
* Remove the gray background color from active links in IE 10. * Remove the gray background color from active links in IE 10.
*/ */
a { a {
background-color: transparent; } background-color: transparent;
}
/** /**
* Improve readability of focused elements when they are also in an * Improve readability of focused elements when they are also in an
@ -86,7 +93,8 @@ a {
*/ */
a:active, a:active,
a:hover { a:hover {
outline: 0; } outline: 0;
}
/* Text-level semantics /* Text-level semantics
========================================================================== */ ========================================================================== */
@ -101,7 +109,8 @@ abbr[title] {
text-decoration: underline; text-decoration: underline;
/* 2 */ /* 2 */
text-decoration: underline dotted; text-decoration: underline dotted;
/* 2 */ } /* 2 */
}
/** /**
* Address inconsistent styling of b and strong. * Address inconsistent styling of b and strong.
@ -111,18 +120,21 @@ abbr[title] {
b, b,
strong { strong {
font-weight: inherit; font-weight: inherit;
/* 1 */ } /* 1 */
}
b, b,
strong { strong {
font-weight: bolder; font-weight: bolder;
/* 2 */ } /* 2 */
}
/** /**
* Address styling not present in Safari and Chrome. * Address styling not present in Safari and Chrome.
*/ */
dfn { dfn {
font-style: italic; } font-style: italic;
}
/** /**
* Address variable `h1` font-size and margin within `section` and `article` * Address variable `h1` font-size and margin within `section` and `article`
@ -130,20 +142,23 @@ dfn {
*/ */
h1 { h1 {
font-size: 2em; font-size: 2em;
margin: 0.67em 0; } margin: 0.67em 0;
}
/** /**
* Address styling not present in IE 8/9. * Address styling not present in IE 8/9.
*/ */
mark { mark {
background-color: #ff0; background-color: #ff0;
color: #000; } color: #000;
}
/** /**
* Address inconsistent and variable font size in all browsers. * Address inconsistent and variable font size in all browsers.
*/ */
small { small {
font-size: 80%; } font-size: 80%;
}
/** /**
* Prevent `sub` and `sup` affecting `line-height` in all browsers. * Prevent `sub` and `sup` affecting `line-height` in all browsers.
@ -153,13 +168,16 @@ sup {
font-size: 75%; font-size: 75%;
line-height: 0; line-height: 0;
position: relative; position: relative;
vertical-align: baseline; } vertical-align: baseline;
}
sup { sup {
top: -0.5em; } top: -0.5em;
}
sub { sub {
bottom: -0.25em; } bottom: -0.25em;
}
/* Embedded content /* Embedded content
========================================================================== */ ========================================================================== */
@ -167,13 +185,15 @@ sub {
* Remove border when inside `a` element in IE 8/9/10. * Remove border when inside `a` element in IE 8/9/10.
*/ */
img { img {
border: 0; } border: 0;
}
/** /**
* Correct overflow not hidden in IE 9/10/11. * Correct overflow not hidden in IE 9/10/11.
*/ */
svg:not(:root) { svg:not(:root) {
overflow: hidden; } overflow: hidden;
}
/* Grouping content /* Grouping content
========================================================================== */ ========================================================================== */
@ -181,7 +201,8 @@ svg:not(:root) {
* Address margin not present in IE 8/9 and Safari. * Address margin not present in IE 8/9 and Safari.
*/ */
figure { figure {
margin: 1em 40px; } margin: 1em 40px;
}
/** /**
* Address inconsistent styling of `hr`. * Address inconsistent styling of `hr`.
@ -194,13 +215,15 @@ hr {
height: 0; height: 0;
/* 1 */ /* 1 */
overflow: visible; overflow: visible;
/* 2 */ } /* 2 */
}
/** /**
* Contain overflow in all browsers. * Contain overflow in all browsers.
*/ */
pre { pre {
overflow: auto; } overflow: auto;
}
/** /**
* 1. Correct inheritance and scaling of font-size for preformatted text. * 1. Correct inheritance and scaling of font-size for preformatted text.
@ -213,7 +236,8 @@ samp {
font-family: monospace, monospace; font-family: monospace, monospace;
/* 1 */ /* 1 */
font-size: 1em; font-size: 1em;
/* 2 */ } /* 2 */
}
/* Forms /* Forms
========================================================================== */ ========================================================================== */
@ -233,13 +257,15 @@ textarea {
font: inherit; font: inherit;
/* 1 */ /* 1 */
margin: 0; margin: 0;
/* 2 */ } /* 2 */
}
/** /**
* Address `overflow` set to `hidden` in IE 8/9/10/11. * Address `overflow` set to `hidden` in IE 8/9/10/11.
*/ */
button { button {
overflow: visible; } overflow: visible;
}
/** /**
* Address inconsistent `text-transform` inheritance for `button` and `select`. * Address inconsistent `text-transform` inheritance for `button` and `select`.
@ -249,7 +275,8 @@ button {
*/ */
button, button,
select { select {
text-transform: none; } text-transform: none;
}
/** /**
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
@ -265,14 +292,16 @@ input[type="submit"] {
-webkit-appearance: button; -webkit-appearance: button;
/* 2 */ /* 2 */
cursor: pointer; cursor: pointer;
/* 3 */ } /* 3 */
}
/** /**
* Re-set default cursor for disabled elements. * Re-set default cursor for disabled elements.
*/ */
button[disabled], button[disabled],
html input[disabled] { html input[disabled] {
cursor: default; } cursor: default;
}
/** /**
* Remove inner padding and border in Firefox 4+. * Remove inner padding and border in Firefox 4+.
@ -280,14 +309,16 @@ html input[disabled] {
button::-moz-focus-inner, button::-moz-focus-inner,
input::-moz-focus-inner { input::-moz-focus-inner {
border: 0; border: 0;
padding: 0; } padding: 0;
}
/** /**
* Address Firefox 4+ setting `line-height` on `input` using `!important` in * Address Firefox 4+ setting `line-height` on `input` using `!important` in
* the UA stylesheet. * the UA stylesheet.
*/ */
input { input {
line-height: normal; } line-height: normal;
}
/** /**
* It's recommended that you don't attempt to style these elements. * It's recommended that you don't attempt to style these elements.
@ -301,7 +332,8 @@ input[type="radio"] {
box-sizing: border-box; box-sizing: border-box;
/* 1 */ /* 1 */
padding: 0; padding: 0;
/* 2 */ } /* 2 */
}
/** /**
* Fix the cursor style for Chrome's increment/decrement buttons. For certain * Fix the cursor style for Chrome's increment/decrement buttons. For certain
@ -310,13 +342,15 @@ input[type="radio"] {
*/ */
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type="number"]::-webkit-outer-spin-button {
height: auto; } height: auto;
}
/** /**
* Address `appearance` set to `searchfield` in Safari and Chrome. * Address `appearance` set to `searchfield` in Safari and Chrome.
*/ */
input[type="search"] { input[type="search"] {
-webkit-appearance: textfield; } -webkit-appearance: textfield;
}
/** /**
* Remove inner padding and search cancel button in Safari and Chrome on OS X. * Remove inner padding and search cancel button in Safari and Chrome on OS X.
@ -325,7 +359,8 @@ input[type="search"] {
*/ */
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration { input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none; } -webkit-appearance: none;
}
/** /**
* Define consistent border, margin, and padding. * Define consistent border, margin, and padding.
@ -333,7 +368,8 @@ input[type="search"]::-webkit-search-decoration {
fieldset { fieldset {
border: 1px solid #c0c0c0; border: 1px solid #c0c0c0;
margin: 0 2px; margin: 0 2px;
padding: 0.35em 0.625em 0.75em; } padding: 0.35em 0.625em 0.75em;
}
/** /**
* 1. Correct `color` not being inherited in IE 8/9/10/11. * 1. Correct `color` not being inherited in IE 8/9/10/11.
@ -343,20 +379,23 @@ legend {
border: 0; border: 0;
/* 1 */ /* 1 */
padding: 0; padding: 0;
/* 2 */ } /* 2 */
}
/** /**
* Remove default vertical scrollbar in IE 8/9/10/11. * Remove default vertical scrollbar in IE 8/9/10/11.
*/ */
textarea { textarea {
overflow: auto; } overflow: auto;
}
/** /**
* Don't inherit the `font-weight` (applied by a rule above). * Don't inherit the `font-weight` (applied by a rule above).
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X. * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
*/ */
optgroup { optgroup {
font-weight: bold; } font-weight: bold;
}
/* Tables /* Tables
========================================================================== */ ========================================================================== */
@ -365,9 +404,13 @@ optgroup {
*/ */
table { table {
border-collapse: collapse; border-collapse: collapse;
border-spacing: 0; } border-spacing: 0;
}
td, td,
th { th {
padding: 0; } padding: 0;
/*# sourceMappingURL=reset.css.map */ }
/*# sourceMappingURL= reset.css.map */

82
public_html/css/min/submenu-side.css Normal file → Executable file
View File

@ -5,37 +5,51 @@
/* GESTION DES LONGUEURS */ /* GESTION DES LONGUEURS */
#CONTAINER > .sub-menu-side { #CONTAINER > .sub-menu-side {
display: block; display: block;
position: relative; } position: relative;
#CONTAINER > .sub-menu-side > span[data-sublink] { }
display: block;
position: relative; #CONTAINER > .sub-menu-side > span[data-sublink] {
width: 7.5em; display: block;
padding: .3em 1em .3em 2em; position: relative;
margin: 1em; width: 7.5em;
border-radius: 3px; padding: .3em 1em .3em 2em;
color: #5b5e63; margin: 1em;
text-shadow: 1px 1px white; border-radius: 3px;
white-space: nowrap; color: #5b5e63;
transition: all .2s; text-shadow: 1px 1px white;
cursor: pointer; white-space: nowrap;
overflow: hidden; } transition: all .2s;
#CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg { cursor: pointer;
display: inline-block; overflow: hidden;
position: absolute; }
left: .5em;
top: 50%; #CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg {
width: 1em; display: inline-block;
height: 1em; position: absolute;
-webkit-transform: translateY(-50%); left: .5em;
transform: translateY(-50%); } top: 50%;
#CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg path { width: 1em;
fill: #5b5e63 !important; } height: 1em;
#CONTAINER > .sub-menu-side > span[data-sublink]:hover, #CONTAINER > .sub-menu-side > span[data-sublink].active { transform: translateY(-50%);
color: #121213; }
background-color: #d8deea;
box-shadow: inset 0 0 4px #c8ced9; } #CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg path {
#CONTAINER > .sub-menu-side > span[data-sublink]:hover > .svg > svg path, #CONTAINER > .sub-menu-side > span[data-sublink].active > .svg > svg path { fill: #5b5e63 !important;
fill: #121213 !important; } }
#CONTAINER > .sub-menu-side > span[data-sublink]:nth-child(1) {
margin-top: 1em; } #CONTAINER > .sub-menu-side > span[data-sublink]:hover, #CONTAINER > .sub-menu-side > span[data-sublink].active {
/*# sourceMappingURL=submenu-side.css.map */ color: #121213;
background-color: #d8deea;
box-shadow: inset 0 0 4px #c8ced9;
}
#CONTAINER > .sub-menu-side > span[data-sublink]:hover > .svg > svg path, #CONTAINER > .sub-menu-side > span[data-sublink].active > .svg > svg path {
fill: #121213 !important;
}
#CONTAINER > .sub-menu-side > span[data-sublink]:nth-child(1) {
margin-top: 1em;
}
/*# sourceMappingURL= submenu-side.css.map */

View File

@ -9,7 +9,7 @@
& > span[data-sublink]{ & > span[data-sublink]{
display: block; display: block;
position: relative; position: relative;
width: $sub-menu-side-width; width: 7.5em;
padding: .3em 1em .3em 2em; padding: .3em 1em .3em 2em;
margin: 1em; margin: 1em;
@ -36,7 +36,6 @@
width: 1em; width: 1em;
height: 1em; height: 1em;
-webkit-transform: translateY(-50%);
transform: translateY(-50%); transform: translateY(-50%);
// Coloration pour tous les elements du svg // Coloration pour tous les elements du svg

View File

@ -3,16 +3,16 @@
require_once '../vendor/autoload.php'; require_once '../vendor/autoload.php';
use \router\core\Router; use \router\core\Router;
use \api\core\Loader;
use \api\core\Request; use \api\core\Request;
use \api\core\Response; use \api\core\Response;
use \database\core\DatabaseDriver; use \database\core\DatabaseDriver;
use \api\core\AuthSystemDefault; use \api\core\AuthSystemDefault;
use \token\core\TreeTokenNull; use \token\core\TreeToken;
use \log\core\Log; use \log\core\Log;
$page_log = Log::get('router'); $page_log = Log::get('router');
$session_guard = new TreeTokenNull(1000); $session_guard = new TreeToken(1000);
/*******************************************/ /*******************************************/
@ -89,9 +89,6 @@
global $auth; global $auth;
// session timeout warning
$session_warn = 5; // 5 minutes before expiration
// {1} Disable cache // // {1} Disable cache //
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false); header('Cache-Control: post-check=0, pre-check=0', false);
@ -117,41 +114,8 @@
} }
} }
// session timeout
echo "\n\t},\n";
echo "\tsession: {\n";
echo "\t\ttimeout: '".( (ini_get('session.gc_maxlifetime')-$session_warn*60) * 1000 )."'\n";
echo "\n\t}\n"; echo "\n\t}\n";
echo "};\n";
echo "};\n\n";
// {3} Function that reloads or logout the user
echo "var KEEP_SESSION = function(keep){\n";
echo "\tdocument.location = ( keep ) ? '' : '/logout';\n";
echo "};\n\n";
// {4} Function called at session timeout
echo "var SESSION_TIMEOUT_FUNC = function(){\n";
// {4.1} setup POPUP window
echo "\tvar popup = new Popup();\n";
echo "\tvar popup_content = {\n";
echo "\t\ttitle: 'Expiration de connexion',\n";
echo "\t\tcontent: 'Vous n\'avez rien fait depuis un moment. Vous serez déconnecté dans <b>".round(.5+$session_warn)." minutes</b>. Vous pouvez recharger la page pour garder votre connexion.',\n";
echo "\t\ttype: 'search',\n";
echo "\t\taction: 'Recharger la page'\n";
echo "\t}\n";
// {4.2} Show popup dialog -> on reload: reload page ; on cancel: logout
echo "\tpopup.ask(popup_content, KEEP_SESSION);\n";
// {4.3} Logout by default 5min if no popup response
echo "\tsetTimeout(function(){ KEEP_SESSION(false); }, (.5+$session_warn)*60*1000);\n";
echo "};\n\n";
// {5} Set the timeout
echo "var SESSION_TIMEOUT = setTimeout(SESSION_TIMEOUT_FUNC, SERVER.session.timeout);\n";
die(); die();
@ -239,7 +203,7 @@
if( !$GLOBALS['session_guard']->init_child() ) if( !$GLOBALS['session_guard']->init_child() )
die(json_encode([ 'error' => 100, 'ErrorDescription' => 'session_guard.child error' ])); die(json_encode([ 'error' => 100, 'ErrorDescription' => 'session_guard.child error' ]));
$request = Loader::remote($url[0]); $request = Request::remote($url[0]);
$answer = $request->dispatch(); $answer = $request->dispatch();
// Si c'est une réponse (et non un download) // Si c'est une réponse (et non un download)

View File

@ -71,7 +71,7 @@ APIClass.prototype = {
// Récupération token TreeToken // Récupération token TreeToken
window._tree_token_ = ptrAPI.xhr[i].getResponseHeader('X-Tree-Token'); window._tree_token_ = ptrAPI.xhr[i].getResponseHeader('X-Tree-Token');
var parsedResponse = {error:-1, ErrorDescription:'Erreur au niveau de api.js'}; var parsedResponse = {ModuleError:-1, ErrorDescription:'Erreur au niveau de api.js'};
// On essaie de parser le json // On essaie de parser le json
try{ try{
@ -81,21 +81,15 @@ APIClass.prototype = {
// On lance la handler // On lance la handler
console.log('api response', parsedResponse); console.log('api response', parsedResponse);
if( parsedResponse.hasOwnProperty('error') && parsedResponse.error != 0 ) if( parsedResponse.hasOwnProperty('ModuleError') && parsedResponse.ModuleError != 0 )
console.error('ModuleError::'+parsedResponse.error); console.error('ModuleError::'+parsedResponse.ModuleError);
// If success -> reload session_timeout
if( parsedResponse.hasOwnProperty('error') && parsedResponse.error == 0 ){
clearTimeout(SESSION_TIMEOUT);
SESSION_TIMEOUT = setTimeout(SESSION_TIMEOUT_FUNC, SERVER.session.timeout);
}
pHandler(parsedResponse, ptrAPI.optionalParams[i]); pHandler(parsedResponse, ptrAPI.optionalParams[i]);
} }
/* sinon retourne obj.request = 'unreachable' */ /* sinon retourne obj.request = 'unreachable' */
else else
pHandler({error:-2, ErrorDescription:'Erreur au niveau d\'AJAX.'}); pHandler({ModuleError:-2, ModuleDescription:'Erreur au niveau d\'AJAX.'});
} }
}; };
@ -130,6 +124,8 @@ APIClass.prototype = {
// Header pour dire que c'est AJAX // Header pour dire que c'est AJAX
this.xhr[i].setRequestHeader('X-Requested-With', 'XMLHttpRequest'); this.xhr[i].setRequestHeader('X-Requested-With', 'XMLHttpRequest');
this.xhr[i].send( form ); this.xhr[i].send( form );
} }

View File

@ -1 +1 @@
function APIClass(e){this.target=e}APIClass.prototype={xhr:[],buffer:null,optionalParams:[],send:function(e,r,t){e.hasOwnProperty("path")||r({ModuleError:4});for(var s=0;s<this.xhr.length;s++)4==this.xhr[s].readyState&&this.xhr.splice(s,1);if(this.xhr.push(null),s=this.xhr.length-1,this.optionalParams[s]=[],arguments.length>3)for(var o=3;o<arguments.length;o++)this.optionalParams[s].push(arguments[o]);window.XMLHttpRequest?this.xhr[s]=new XMLHttpRequest:this.xhr[s]=new ActiveXObject("Microsoft.XMLHttpRequest");var n=this;this.xhr[s].onreadystatechange=function(){if(4==n.xhr[s].readyState)if(n.buffer=n.xhr[s].responseText,console.log("api request",e),[0,200,417].indexOf(n.xhr[s].status)>-1){window._tree_token_=n.xhr[s].getResponseHeader("X-Tree-Token");var t={error:-1,ErrorDescription:"Erreur au niveau de api.js"};try{t=JSON.parse(n.xhr[s].responseText)}catch(e){}console.log("api response",t),t.hasOwnProperty("error")&&0!=t.error&&console.error("ModuleError::"+t.error),t.hasOwnProperty("error")&&0==t.error&&(clearTimeout(SESSION_TIMEOUT),SESSION_TIMEOUT=setTimeout(SESSION_TIMEOUT_FUNC,SERVER.session.timeout)),r(t,n.optionalParams[s])}else r({error:-2,ErrorDescription:"Erreur au niveau d'AJAX."})};var a=new FormData;for(var i in e)"path"==i?a.append(i,e[i]):e[i]instanceof File?a.append(i,e[i]):a.append(i,JSON.stringify(e[i]));this.xhr[s].open("POST",this.target,!0),null!=t&&this.xhr[s].setRequestHeader("Authorization","Digest "+t),null==window._tree_token_?this.xhr[s].setRequestHeader("X-Tree-Token",JSON.parse('{"'+document.cookie.replace(/=/g,'":"').replace(/; /g,'","')+'"}')._PUBLIC_):this.xhr[s].setRequestHeader("X-Tree-Token",window._tree_token_),this.xhr[s].setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xhr[s].send(a)}}; function APIClass(e){this.target=e}APIClass.prototype={xhr:[],buffer:null,optionalParams:[],send:function(e,r,t){e.hasOwnProperty("path")||r({ModuleError:4});for(var s=0;s<this.xhr.length;s++)4==this.xhr[s].readyState&&this.xhr.splice(s,1);if(this.xhr.push(null),s=this.xhr.length-1,this.optionalParams[s]=[],arguments.length>3)for(var o=3;o<arguments.length;o++)this.optionalParams[s].push(arguments[o]);window.XMLHttpRequest?this.xhr[s]=new XMLHttpRequest:this.xhr[s]=new ActiveXObject("Microsoft.XMLHttpRequest");var n=this;this.xhr[s].onreadystatechange=function(){if(4==n.xhr[s].readyState)if(n.buffer=n.xhr[s].responseText,console.log("api request",e),[0,200,417].indexOf(n.xhr[s].status)>-1){window._tree_token_=n.xhr[s].getResponseHeader("X-Tree-Token");var t={ModuleError:-1,ErrorDescription:"Erreur au niveau de api.js"};try{t=JSON.parse(n.xhr[s].responseText)}catch(e){}console.log("api response",t),t.hasOwnProperty("ModuleError")&&0!=t.ModuleError&&console.error("ModuleError::"+t.ModuleError),r(t,n.optionalParams[s])}else r({ModuleError:-2,ModuleDescription:"Erreur au niveau d'AJAX."})};var a=new FormData;for(var i in e)"path"==i?a.append(i,e[i]):e[i]instanceof File?a.append(i,e[i]):a.append(i,JSON.stringify(e[i]));this.xhr[s].open("POST",this.target,!0),null!=t&&this.xhr[s].setRequestHeader("Authorization","Digest "+t),null==window._tree_token_?this.xhr[s].setRequestHeader("X-Tree-Token",JSON.parse('{"'+document.cookie.replace(/=/g,'":"').replace(/; /g,'","')+'"}')._PUBLIC_):this.xhr[s].setRequestHeader("X-Tree-Token",window._tree_token_),this.xhr[s].setRequestHeader("X-Requested-With","XMLHttpRequest"),this.xhr[s].send(a)}};

View File

@ -1 +1,19 @@
function pageManagerClass(){}var ptrPageManagerClass;pageManagerClass.prototype={loaded:null,depJS:null,depCSS:null,xhr:[],activeXHR:null,page:null,vars:[],root:"",path:"",jsPath:"js",cssPath:"css",pagelist:null,container:null,refresher:function(){},ajax:function(t,e,s,i){var h;h=this.xhr.push(window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest"))-1,this.activeXHR=this.xhr[h],this.xhr[h].addEventListener("readystatechange",function(t){if(void 0!=this.xhr[t]&&4===this.xhr[t].readyState){[0,200].indexOf(this.xhr[t].status)>-1?e(this.xhr[t].responseText):e(),this.xhr[t]=null;for(var s=!0,t=0;t<this.xhr.length;t++)if(null!==this.xhr[t]){s=!1;break}s&&(this.xhr=[])}}.bind(this,h),!1);var n="string"==typeof s&&/^POST|GET$/i.test(s)?s.toUpperCase():"POST",a="POST"==n&&"object"==typeof i&&i instanceof FormData?i:null;return this.xhr[h].open(n,t,!0),this.xhr[h].send(a),this},explodeURL:function(t){if(t=arguments.length>=1?t:document.URL,null!=this.pagelist&&/^(?:(?:https?:\/\/)?[^\/]+)\/([a-z0-9_]+)(?:\/|((?:\/\w+)+)\/?)?(#.*)?$/i.test(t)){var e=RegExp.$2.split("/").slice(1);return this.pagelist.indexOf(RegExp.$1)>-1?{page:RegExp.$1,var:e}:null}return null},loadDependencies:function(){"object"==typeof this.depCSS&&this.depCSS instanceof Element&&this.depCSS.parentNode==document.head&&document.head.removeChild(this.depCSS),"object"==typeof this.depJS&&this.depJS instanceof Element&&this.depJS.parentNode==document.head&&document.head.removeChild(this.depJS),this.ajax(this.root+this.path+"/"+this.cssPath+"/"+this.page+".css",function(t){return null==t?void console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.cssPath+"/"+this.page+".css)"):(this.depCSS=document.createElement("link"),this.depCSS.rel="stylesheet",this.depCSS.type="text/css",this.depCSS.innerHTML=t,void document.head.appendChild(this.depCSS))}.bind(this),"GET"),this.ajax(this.root+this.path+"/"+this.jsPath+"/"+this.page+".js",function(t){return null==t?void console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.jsPath+"/"+this.page+".js)"):(this.depJS=document.createElement("script"),this.depJS.type="text/javascript",this.depJS.innerHTML=t,void document.head.appendChild(this.depJS))}.bind(this),"GET")},updateURL:function(){this.vars.length>0?window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/"+this.vars.join("/")+"/"):window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/")},setPage:function(t,e,s,i,h){var n="object"==typeof i&&i instanceof Array?i:null;if(null!=n)for(var a=0;a<n.length&&(n="string"==typeof n[a]&&/^[a-z0-9_]+$/i.test(n[a])?n:null,null!=n);a++);if(this.pagelist=null!=n?n:this.pagelist,this.root="string"==typeof h?h:this.root,this.path="string"==typeof e?e:this.path,this.container="object"==typeof s&&s instanceof Element?s:this.container,this.pagelist&&this.container){if(t===!0){for(var r=new FormData,a=0;a<this.vars.length;a++)r.append(this.vars[a],null);return this.updateURL(),this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies(),this.refresher.apply(this),this.updateURL()}.bind(this),"POST",r),this}if("string"==typeof t&&this.pagelist.indexOf(t)>-1){this.page=t;for(var r=new FormData,a=0;a<this.vars.length;a++)r.append(this.vars[a],null);this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies()}.bind(this),"POST",r),this.updateURL()}else{var o=this.explodeURL();if(null!=o){var r=new FormData;this.vars.length=0;for(var a=0;a<o.var.length;a++)this.vars[a]=o.var[a],r.append(this.vars[a],null);if(o.page==this.page)return this;this.page=o.page,this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies()}.bind(this),"POST",r),this.updateURL()}else this.setPage(this.pagelist[0])}}else console.warn("pagelist et container manquant");return this},refresh:function(t){return t instanceof Function?void(this.refresher=t):this.setPage(!0)}}; /***************************************/
function pageManagerClass(){}var ptrPageManagerClass
pageManagerClass.prototype={loaded:null,depJS:null,depCSS:null,xhr:[],activeXHR:null,page:null,vars:[],root:"",path:"",jsPath:"js",cssPath:"css",pagelist:null,container:null,refresher:function(){},ajax:function(t,e,s,i){var h
h=this.xhr.push(window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest"))-1,this.activeXHR=this.xhr[h],this.xhr[h].addEventListener("readystatechange",function(t){if(void 0!=this.xhr[t]&&4===this.xhr[t].readyState){[0,200].indexOf(this.xhr[t].status)>-1?e(this.xhr[t].responseText):e(),this.xhr[t]=null
for(var s=!0,t=0;t<this.xhr.length;t++)if(null!==this.xhr[t]){s=!1
break}s&&(this.xhr=[])}}.bind(this,h),!1)
var n="string"==typeof s&&/^POST|GET$/i.test(s)?s.toUpperCase():"POST",a="POST"==n&&"object"==typeof i&&i instanceof FormData?i:null
return this.xhr[h].open(n,t,!0),this.xhr[h].send(a),this},explodeURL:function(t){if(t=arguments.length>=1?t:document.URL,null!=this.pagelist&&/^(?:(?:https?:\/\/)?[^\/]+)\/([a-z0-9_]+)(?:\/|((?:\/\w+)+)\/?)?(#.*)?$/i.test(t)){var e=RegExp.$2.split("/").slice(1)
return this.pagelist.indexOf(RegExp.$1)>-1?{page:RegExp.$1,var:e}:null}return null},loadDependencies:function(){"object"==typeof this.depCSS&&this.depCSS instanceof Element&&this.depCSS.parentNode==document.head&&document.head.removeChild(this.depCSS),"object"==typeof this.depJS&&this.depJS instanceof Element&&this.depJS.parentNode==document.head&&document.head.removeChild(this.depJS),this.ajax(this.root+this.path+"/"+this.cssPath+"/"+this.page+".css",function(t){null!=t?(this.depCSS=document.createElement("link"),this.depCSS.rel="stylesheet",this.depCSS.type="text/css",this.depCSS.href=this.root+this.path+"/"+this.cssPath+"/"+this.page+".css",document.head.appendChild(this.depCSS)):console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.cssPath+"/"+this.page+".css)")}.bind(this)),this.ajax(this.root+this.path+"/"+this.jsPath+"/"+this.page+".js",function(t){null!=t?(this.depJS=document.createElement("script"),this.depJS.type="text/javascript",this.depJS.src=this.root+this.path+"/"+this.jsPath+"/"+this.page+".js",document.head.appendChild(this.depJS)):console.warn("[loadDependencies_Error] - ("+this.root+this.path+"/"+this.jsPath+"/"+this.page+".js)")}.bind(this))},updateURL:function(){this.vars.length>0?window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/"+this.vars.join("/")+"/"):window.history.pushState(this.page,this.page,this.root+"/"+this.page+"/")},setPage:function(t,e,s,i,h){var n="object"==typeof i&&i instanceof Array?i:null
if(null!=n)for(var a=0;a<n.length&&(n="string"==typeof n[a]&&/^[a-z0-9_]+$/i.test(n[a])?n:null,null!=n);a++);if(this.pagelist=null!=n?n:this.pagelist,this.root="string"==typeof h?h:this.root,this.path="string"==typeof e?e:this.path,this.container="object"==typeof s&&s instanceof Element?s:this.container,this.pagelist&&this.container){if(t===!0){for(var r=new FormData,a=0;a<this.vars.length;a++)r.append(this.vars[a],null)
return this.updateURL(),this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies(),this.refresher.apply(this),this.updateURL()}.bind(this),"POST",r),this}if("string"==typeof t&&this.pagelist.indexOf(t)>-1){this.page=t
for(var r=new FormData,a=0;a<this.vars.length;a++)r.append(this.vars[a],null)
this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies()}.bind(this),"POST",r),this.updateURL()}else{var p=this.explodeURL()
if(null!=p){var r=new FormData
this.vars.length=0
for(var a=0;a<p.var.length;a++)this.vars[a]=p.var[a],r.append(this.vars[a],null)
if(p.page==this.page)return this
this.page=p.page,this.ajax(this.root+this.path+"/"+this.page+".php",function(t){this.container.innerHTML=t,this.loadDependencies()}.bind(this),"POST",r),this.updateURL()}else this.setPage(this.pagelist[0])}}else console.warn("pagelist et container manquant")
return this},refresh:function(t){return t instanceof Function?void(this.refresher=t):this.setPage(!0)}}

View File

@ -1 +0,0 @@
function Popup(){this.element={background:document.querySelector("#POPUP-BG"),frame:document.querySelector("#POPUP"),header:document.querySelector("#POPUP .header"),body:document.querySelector("#POPUP .body"),footer:document.querySelector("#POPUP .footer")},this.element.background.addEventListener("click",function(e){this.hide().handler(!1)}.bind(this),!1)}Popup.prototype={handler:null,element:{frame:null,header:null,body:null,footer:null},show:function(){return this.element.frame.addClass("active"),this},hide:function(){return this.element.frame.remClass("active"),this},ask:function(e,n){function t(e){this.hide(),this.handler("grey"!=e.target.className)}if(!(e instanceof Object))return null;if(null==e.title)return null;if(null==e.content)return null;if(null==e.type)return null;if(null==e.action)return null;if(!(n instanceof Function))return null;this.element.header.innerHTML=e.title,this.element.body.innerHTML=e.content,this.handler=n;var r=document.createElement("button");r.className=e.type,r.innerHTML=e.action;var l=document.createElement("button");return l.className="grey",l.innerHTML="Annuler",r.addEventListener("click",t.bind(this),!1),l.addEventListener("click",t.bind(this),!1),this.element.footer.innerHTML="",this.element.footer.appendChild(r),this.element.footer.appendChild(l),this.show()}};

View File

@ -155,33 +155,26 @@ pageManagerClass.prototype = {
// si le fichier css existe // si le fichier css existe
this.ajax(this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css', function(e){ this.ajax(this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css', function(e){
if( e == null ){ // on charge la dépendance CSS si le fichier existe if( e != null ){ // on charge la dépendance CSS si le fichier existe
this.depCSS = document.createElement('link');
this.depCSS.rel = 'stylesheet';
this.depCSS.type = 'text/css';
this.depCSS.href = this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css';
document.head.appendChild(this.depCSS);
}else
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css)'); console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css)');
return; }.bind(this));
}
this.depCSS = document.createElement('link');
this.depCSS.rel = 'stylesheet';
this.depCSS.type = 'text/css';
// this.depCSS.href = this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css';
this.depCSS.innerHTML = e;
document.head.appendChild(this.depCSS);
}.bind(this), 'GET');
// si le fichier js existe // si le fichier js existe
this.ajax(this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js', function(e){ this.ajax(this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js', function(e){
if( e == null ){ // on charge la dépendance JS si le fichier existe if( e != null ){ // on charge la dépendance JS si le fichier existe
this.depJS = document.createElement('script');
this.depJS.type = 'text/javascript';
this.depJS.src = this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js';
document.head.appendChild(this.depJS);
}else
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js)'); console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js)');
return; }.bind(this));
}
this.depJS = document.createElement('script');
this.depJS.type = 'text/javascript';
// this.depJS.src = this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js';
this.depJS.innerHTML = e;
document.head.appendChild(this.depJS);
}.bind(this), 'GET');
}, },
/* ======================================================================= /* =======================================================================
@ -247,7 +240,7 @@ pageManagerClass.prototype = {
fd.append(this.vars[i], null); fd.append(this.vars[i], null);
this.updateURL(); // could be useful for content or dep this.updateURL(); // could be useful for content or dep
this.ajax(this.root+this.path+'/'+this.page+'.php', function(e){ this.ajax(this.root+this.path+'/'+this.page+'.php', function(e){
this.container.innerHTML = e; this.container.innerHTML = e;
this.loadDependencies(); this.loadDependencies();

View File

@ -1,101 +0,0 @@
function Popup(){
/* (1) Fetch DOM elements */
this.element = {
background: document.querySelector('#POPUP-BG'),
frame: document.querySelector('#POPUP'),
header: document.querySelector('#POPUP .header'),
body: document.querySelector('#POPUP .body'),
footer: document.querySelector('#POPUP .footer')
};
/* (2) Set background click === to CANCEL action */
this.element.background.addEventListener('click', function(e){
this.hide().handler(false);
}.bind(this), false);
}
Popup.prototype = {
handler: null,
element: { frame: null, header: null, body: null, footer: null },
show: function(){
this.element.frame.addClass('active');
return this;
},
hide: function(){
this.element.frame.remClass('active');
return this;
},
ask: function(pObject, pHandler){
/* (1) Check argument
---------------------------------------------------------*/
/* (1) Check type */
if( !(pObject instanceof Object) )
return null;
/* (2) Check Title */
if( pObject.title == null )
return null;
/* (3) Check Content */
if( pObject.content == null )
return null;
/* (4) Check Type */
if( pObject.type == null )
return null;
/* (5) Check Action */
if( pObject.action == null )
return null;
/* (6) Check handler */
if( !(pHandler instanceof Function) )
return null;
/* (2) Set the content
---------------------------------------------------------*/
/* (1) Title */
this.element.header.innerHTML = pObject.title;
/* (2) Content */
this.element.body.innerHTML = pObject.content;
/* (3) Store the handler */
this.handler = pHandler;
/* (3) Set the buttons (action)
---------------------------------------------------------*/
/* (1) Define action button */
var action_btn = document.createElement('button');
action_btn.className = pObject.type;
action_btn.innerHTML = pObject.action;
/* (2) Define cancel button */
var cancel_btn = document.createElement('button');
cancel_btn.className = 'grey';
cancel_btn.innerHTML = 'Annuler';
/* (3) Bind events */
function handler(e){ this.hide(); this.handler( e.target.className != 'grey' ); }
action_btn.addEventListener('click', handler.bind(this), false);
cancel_btn.addEventListener('click', handler.bind(this), false);
/* (4) Add elements to the object */
this.element.footer.innerHTML = '';
this.element.footer.appendChild(action_btn);
this.element.footer.appendChild(cancel_btn);
return this.show();
}
};

View File

@ -105,6 +105,8 @@ Element.prototype.anim = function(className, timeout){
}; };
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER /* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
* *
*/ */

6
public_html/js/lib/sha256-min.js vendored Executable file
View File

@ -0,0 +1,6 @@
var sha256={hash:function(a){a=a.utf8Encode();var d=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,
3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],b=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];a+=String.fromCharCode(128);for(var g=Math.ceil((a.length/4+2)/16),h=Array(g),f=0;f<g;f++){h[f]=Array(16);for(var e=0;16>e;e++)h[f][e]=a.charCodeAt(64*f+4*e)<<24|a.charCodeAt(64*
f+4*e+1)<<16|a.charCodeAt(64*f+4*e+2)<<8|a.charCodeAt(64*f+4*e+3)}h[g-1][14]=8*(a.length-1)/Math.pow(2,32);h[g-1][14]=Math.floor(h[g-1][14]);h[g-1][15]=8*(a.length-1)&4294967295;a=Array(64);for(var l,m,q,k,n,p,r,f=0;f<g;f++){for(var c=0;16>c;c++)a[c]=h[f][c];for(c=16;64>c;c++)a[c]=sha256.\u03c31(a[c-2])+a[c-7]+sha256.\u03c30(a[c-15])+a[c-16]&4294967295;e=b[0];l=b[1];m=b[2];q=b[3];k=b[4];n=b[5];p=b[6];r=b[7];for(c=0;64>c;c++){var t=r+sha256.\u03a31(k)+sha256.Ch(k,n,p)+d[c]+a[c],u=sha256.\u03a30(e)+
sha256.Maj(e,l,m);r=p;p=n;n=k;k=q+t&4294967295;q=m;m=l;l=e;e=t+u&4294967295}b[0]=b[0]+e&4294967295;b[1]=b[1]+l&4294967295;b[2]=b[2]+m&4294967295;b[3]=b[3]+q&4294967295;b[4]=b[4]+k&4294967295;b[5]=b[5]+n&4294967295;b[6]=b[6]+p&4294967295;b[7]=b[7]+r&4294967295}return sha256.toHexStr(b[0])+sha256.toHexStr(b[1])+sha256.toHexStr(b[2])+sha256.toHexStr(b[3])+sha256.toHexStr(b[4])+sha256.toHexStr(b[5])+sha256.toHexStr(b[6])+sha256.toHexStr(b[7])},ROTR:function(a,d){return d>>>a|d<<32-a},"\u03a30":function(a){return sha256.ROTR(2,
a)^sha256.ROTR(13,a)^sha256.ROTR(22,a)},"\u03a31":function(a){return sha256.ROTR(6,a)^sha256.ROTR(11,a)^sha256.ROTR(25,a)},"\u03c30":function(a){return sha256.ROTR(7,a)^sha256.ROTR(18,a)^a>>>3},"\u03c31":function(a){return sha256.ROTR(17,a)^sha256.ROTR(19,a)^a>>>10},Ch:function(a,d,b){return a&d^~a&b},Maj:function(a,d,b){return a&d^a&b^d&b},toHexStr:function(a){for(var d="",b,g=7;0<=g;g--)b=a>>>4*g&15,d+=b.toString(16);return d}};
"undefined"==typeof String.prototype.utf8Encode&&(String.prototype.utf8Encode=function(){return unescape(encodeURIComponent(this))});"undefined"==typeof String.prototype.utf8Decode&&(String.prototype.utf8Decode=function(){try{return decodeURIComponent(escape(this))}catch(a){return this}});"undefined"!=typeof module&&module.exports&&(module.exports=sha256);"function"==typeof define&&define.amd&&define([],function(){return sha256});

View File

@ -1,51 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
enable-background="new 0 0 141.732 141.732"
height="32"
id="Livello_1"
version="1.1"
viewBox="0 0 32.000002 32.000001"
width="32"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="lock.svg"><metadata
id="metadata11"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs9" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview7"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-page="true"
inkscape:zoom="9.41931"
inkscape:cx="5.9336621"
inkscape:cy="7.2474796"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Livello_1" /><g
id="Livello_113"
transform="translate(-17.238667,-109.21765)" /><path
inkscape:connector-curvature="0"
d="m 22.378488,16.002563 0,-4.570818 a 6.3784857,6.856227 0 1 0 -12.7569707,0 l 0,4.570818 z m -19.1354571,0 2.1261615,0 0,-4.570818 a 10.630811,11.427045 0 1 1 21.2616196,0 l 0,4.570818 2.126162,0 0,15.997863 -25.5139431,0 z"
id="stylisable" /></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32"
viewBox="0 0 32 32"
width="32"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="signal.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview6"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-page="true"
inkscape:zoom="14.481547"
inkscape:cx="22.770708"
inkscape:cy="28.336291"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<path
d="m 20.363634,25.4545 0,5.091 q 0,0.5909 -0.43181,1.0227 Q 19.500004,32 18.909094,32 l -5.81818,0 q -0.59091,0 -1.02273,-0.4318 -0.43182,-0.4318 -0.43182,-1.0227 l 0,-5.091 q 0,-0.5909 0.43182,-1.0227 Q 12.500004,24 13.090914,24 l 5.81818,0 q 0.59091,0 1.02273,0.4318 0.43181,0.4318 0.43181,1.0227 z M 21.045454,1.4544998 20.409094,18.9091 q -0.0227,0.5909 -0.46591,1.0227 -0.44318,0.4318 -1.03409,0.4318 l -5.81818,0 q -0.59091,0 -1.03409,-0.4318 -0.44319,-0.4318 -0.46591,-1.0227 L 10.954544,1.4544998 Q 10.931844,0.86359978 11.352274,0.43179978 11.772734,-2.22046e-7 12.363634,-2.22046e-7 l 7.27273,0 q 0.59091,0 1.01137,0.431800002046 0.42045,0.4318 0.39772,1.02270002 z"
id="stylisable"
inkscape:connector-curvature="0" />
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,48 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32"
id="Layer_1"
version="1.1"
viewBox="0 0 31.999999 32"
width="32"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="start.svg"><metadata
id="metadata9"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs7" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview5"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-page="true"
inkscape:zoom="14.5625"
inkscape:cx="13.38136"
inkscape:cy="12.329643"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><path
inkscape:connector-curvature="0"
d="M 7.9999977,4.9999997e-8 7.9999977,17.6 l 4.8000003,0 0,14.4 11.2,-19.2 -6.4,0 6.4,-12.799999950000003 z"
id="stylisable" /></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32"
id="Layer_1"
version="1.2"
viewBox="0 0 32 32"
width="32"
xml:space="preserve"
inkscape:version="0.91 r13725"
sodipodi:docname="stop.svg"><metadata
id="metadata11"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs9" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview7"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="9.8333333"
inkscape:cx="-11.033899"
inkscape:cy="6.0000006"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" /><g
id="g3"
transform="matrix(2.0564972,0,0,2.0564972,-8.6779661,-8.6779661)" /><path
inkscape:connector-curvature="0"
d="m 20.295204,16 6.442427,-6.4424263 c 1.185984,-1.1859835 1.185984,-3.1092209 0,-4.294445 -1.185984,-1.1859835 -3.10998,-1.1859835 -4.295964,0 L 16,11.704796 9.5575738,5.2631287 c -1.1859835,-1.1859835 -3.1092211,-1.1859835 -4.2952047,0 -1.1859835,1.1859835 -1.1859835,3.1099803 0,4.294445 L 11.704796,16 5.2623691,22.442427 c -1.1859835,1.185983 -1.1859835,3.10922 0,4.294445 1.1859836,1.185983 3.1092212,1.185983 4.2952047,0 L 16,20.295204 l 6.441667,6.441668 c 1.185984,1.185983 3.10998,1.185983 4.295964,0 1.185984,-1.185984 1.185984,-3.109981 0,-4.294445 L 20.295204,16 Z"
id="stylisable" /></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32"
viewBox="0 0 32 32"
width="32"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="unsignal.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview6"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-page="true"
inkscape:zoom="14.481547"
inkscape:cx="12.792553"
inkscape:cy="12.35049"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<g
transform="matrix(1.1851852,0,0,1.1851852,-3.5555556,-3.5555556)"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1"
id="Page-1">
<g
style="fill:#157efb"
id="icon-24-key">
<path
inkscape:connector-curvature="0"
d="M 18.532404,19.467596 14,24 l -3,0 0,3 -3,0 0,3 -5,0 0,-5 10.532404,-10.532404 C 13.188157,13.543721 13,12.543834 13,11.5 13,6.8055794 16.805579,3 21.5,3 26.194421,3 30,6.8055794 30,11.5 30,16.194421 26.194421,20 21.5,20 20.456166,20 19.456279,19.811843 18.532404,19.467596 l 0,0 0,0 z M 27,9 c 0,-1.6568543 -1.343146,-3 -3,-3 -1.656854,0 -3,1.3431457 -3,3 0,1.656854 1.343146,3 3,3 1.656854,0 3,-1.343146 3,-3 l 0,0 z"
id="stylisable"
style="fill:#000000" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -1,70 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="32"
viewBox="0 0 32 32"
width="32"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="unsignal.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1056"
id="namedview6"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-page="true"
inkscape:zoom="14.481547"
inkscape:cx="12.792553"
inkscape:cy="12.35049"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<g
transform="matrix(1.1851852,0,0,1.1851852,-3.5555556,-3.5555556)"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1"
id="Page-1">
<g
style="fill:#157efb"
id="icon-24-key">
<path
inkscape:connector-curvature="0"
d="M 18.532404,19.467596 14,24 l -3,0 0,3 -3,0 0,3 -5,0 0,-5 10.532404,-10.532404 C 13.188157,13.543721 13,12.543834 13,11.5 13,6.8055794 16.805579,3 21.5,3 26.194421,3 30,6.8055794 30,11.5 30,16.194421 26.194421,20 21.5,20 20.456166,20 19.456279,19.811843 18.532404,19.467596 l 0,0 0,0 z M 27,9 c 0,-1.6568543 -1.343146,-3 -3,-3 -1.656854,0 -3,1.3431457 -3,3 0,1.656854 1.343146,3 3,3 1.656854,0 3,-1.343146 3,-3 l 0,0 z"
id="stylisable"
style="fill:#000000" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -10,7 +10,7 @@
<meta name='desctiption' content="Système de gestion des véhicules pour STEF."> <meta name='desctiption' content="Système de gestion des véhicules pour STEF.">
<!-- Dépendences CSS --> <!-- Dépendences CSS -->
<link type='text/css' rel='stylesheet' href='/css/min/font.css' /> <!-- Chargement des fonts --> <link type='text/css' rel='stylesheet' href='/css/min/fonts.css' /> <!-- Chargement des fonts -->
<link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers --> <link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers -->
<!-- Icone --> <!-- Icone -->
@ -22,8 +22,6 @@
<script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur --> <script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
<script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion des transactions avec le serveur --> <script type='text/javascript' src='/js/lib/page-manager.js' ></script> <!-- Gestion des transactions avec le serveur -->
<script type='text/javascript' src='/serverinfo.js' ></script> <!-- Gestion dynamique des info server -->
</head> </head>
<style type='text/css'> <style type='text/css'>
body{ body{

View File

@ -43,22 +43,6 @@ if( section.view.element != null ){
/* (2) Gestion de la recherche instantannee */ /* (2) Gestion de la recherche instantannee */
section.view.search.func = function(){ section.view.search.func = function(){
// if no keyword -> show all
if( section.view.search.bar.value.length == 0 ){
// On recupere la liste des elements correspondants aux utilisateurs
var history_list = document.querySelectorAll(section.view.text + '> article.inline-row[id]');
// Affiche chaque carte
for( var i = 0 ; i < history_list.length ; i++ )
history_list[i].remClass('hidden');
return;
}
var search = { var search = {
path: 'historyDefault/search', path: 'historyDefault/search',
keywords: section.view.search.bar.value keywords: section.view.search.bar.value
@ -135,31 +119,12 @@ if( section.archive.element != null ){
e.preventDefault(); e.preventDefault();
/* (2) Create popup */ api.send({path: 'historyDefault/archive'}, function(result){
var PopupManager = new Popup(); if( result.error == 0 ){
var confirm_content = { document.location = result.link;
title: "Archivage de l'historique",
content: "L'historique sera définitivement supprimé de la plateforme après la création de l'archive. Cette opération ne peut être annulée.",
type: "search",
action: "Archiver"
};
/* (3) Ask for confirmation */
PopupManager.ask(confirm_content, function(is_confirmed){
// {3.1} If cancelled -> abort //
if( !is_confirmed )
return;
// {3.2} Manage request //
api.send({path: 'historyDefault/archive'}, function(result){
if( result.error == 0 )
document.location = result.link;
});
}
}); });
}, false); }, false);
@ -167,83 +132,3 @@ if( section.archive.element != null ){
} }
/* GESTION DE L'AFFICHAGE DES DETAILS
*
*/
if( section.details.element != null ){
/* (0) On gère le zoom sur un log via URL */
if( pageManager.vars.length > 1 && !isNaN(pageManager.vars[1]) ){
// element
var element = document.getElementById('e'+pageManager.vars[1]);
// if element exist -> scroll to event
if( element != null )
DOM.CONTAINER.scrollTo( 0, element.getData('y') );
}
/* (1) Get useful DOM Elements
---------------------------------------------------------*/
/* (1) Get parent */
section.details.parent = {
text: section.details.text+'article.timeline.container ',
element: document.querySelector( section.details.text+'article.timeline.container ' )
};
/* (2) Get SVG tag */
section.details.svg = {
text: section.details.parent.text+'svg.timeline ',
element: document.querySelector( section.details.parent.text+'svg.timeline ' )
};
/* (3) Get each event node */
section.details.event = {
text: section.details.svg.text+'circle.around ',
list: document.querySelectorAll( section.details.svg.text+'circle.around ' )
};
/* (4) Get infobox node */
section.details.info = {
text: section.details.parent.text+'div.timeline.infobox ',
element: document.querySelector( section.details.parent.text+'div.timeline.infobox ' )
};
/* (5) Bind infobox sub-elements */
section.details.info.input = {
};
/* (3) Function: show infobox on click on event
---------------------------------------------------------*/
/* (1) Set click handler */
section.details.event.handler = function(target){
pageManager.vars[1] = target.getData('entry');
pageManager.refresh();
// section.details.info.element.addClass('active');
console.log('show infobox on element', target);
};
/* (2) Trigger event */
section.details.svg.element.addEventListener('click', function(e){
// {1} Trigger function only if element is an 'around circle' //
if( e.target.nodeName && e.target.getData('entry') && e.target.getData('user') && e.target.getData('machine') && e.target.getData('action') && e.target.getData('time') )
section.details.event.handler(e.target);
}, false);
}

View File

@ -66,20 +66,6 @@ if( section.view.element != null ){
/* (3) Gestion de la recherche instantannee */ /* (3) Gestion de la recherche instantannee */
section.view.search.func = function(){ section.view.search.func = function(){
// if no keyword -> show all
if( section.view.search.bar.value.length == 0 ){
// On recupere la liste des elements correspondants aux utilisateurs
var mac_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
// Affiche chaque carte
for( var i = 0 ; i < mac_list.length ; i++ )
mac_list[i].remClass('hidden');
return;
}
var search = { var search = {
path: 'machineDefault/search', path: 'machineDefault/search',
keywords: section.view.search.bar.value keywords: section.view.search.bar.value
@ -98,7 +84,6 @@ if( section.view.element != null ){
var machine_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]'); var machine_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
// Pour chaque machine // Pour chaque machine
console.log(uid_list);
for( var i = 0 ; i < machine_list.length ; i++ ){ for( var i = 0 ; i < machine_list.length ; i++ ){
// Si doit etre visible // Si doit etre visible
if( uid_list.indexOf(parseInt(machine_list[i].id)) > -1 ) if( uid_list.indexOf(parseInt(machine_list[i].id)) > -1 )
@ -518,26 +503,8 @@ if( section.remove.element != null ){
// On annule l'envoi de base (PHP) // On annule l'envoi de base (PHP)
e.preventDefault(); e.preventDefault();
// Si l'id n'est pas défini -> abort // Si l'id est defini
if( section.remove.input.search.id.value == '' ) if( section.remove.input.search.id.value != '' ){
return;
/* (1) Create popup */
var PopupManager = new Popup();
var confirm_content = {
title: "Suppression de machine",
content: "La machine <b>"+section.remove.input.name.value+"</b> sera définitivement supprimée de la plateforme. Cette opération ne peut être annulée.",
type: "invalid",
action: "Supprimer"
};
/* (2) Ask for confirmation */
PopupManager.ask(confirm_content, function(is_confirmed){
// {2.1} If cancelled -> abort //
if( !is_confirmed )
return;
/* (2) On supprime la machine */ /* (2) On supprime la machine */
var request = { var request = {
@ -581,7 +548,7 @@ if( section.remove.element != null ){
console.error('ModuleError::'+answer.error); console.error('ModuleError::'+answer.error);
}); });
}); }
}, false); }, false);

View File

@ -56,7 +56,7 @@ if( section.password.element != null ){
section.password.errmsg.confirm.innerHTML = ''; section.password.errmsg.confirm.innerHTML = '';
var request = { var request = {
path: 'adminDefault/update', // On veut modifier le mot de passe admin path: 'authenticationDefault/update_admin', // On veut modifier le mot de passe admin
old: section.password.input.old.value, old: section.password.input.old.value,
new: section.password.input.new.value, new: section.password.input.new.value,
confirm: section.password.input.confirm.value confirm: section.password.input.confirm.value

View File

@ -10,11 +10,6 @@ var section = {
element: document.querySelector('#CONTAINER > section[data-sublink="password"]') element: document.querySelector('#CONTAINER > section[data-sublink="password"]')
}, },
admins: {
text: '#CONTAINER > section[data-sublink="admins"] ',
element: document.querySelector('#CONTAINER > section[data-sublink="admins"]')
},
admin: { admin: {
text: '#CONTAINER > section[data-sublink="admin"] ', text: '#CONTAINER > section[data-sublink="admin"] ',
element: document.querySelector('#CONTAINER > section[data-sublink="admin"]') element: document.querySelector('#CONTAINER > section[data-sublink="admin"]')
@ -104,94 +99,8 @@ if( section.password.element != null ){
/* [3] admins -> Liste des administrateurs
=========================================================*/
if( section.admins.element != null ){
/* (1) Fetch the remove links /* [3] admin -> Création d'administrateur
---------------------------------------------------------*/
section.admins.link = {};
section.admins.link.remove = document.querySelectorAll(section.admins.text + '.link_remove[data-admin]');
/* (2) Define admin-remove function
---------------------------------------------------------*/
var remove_admin = function(entry_element){
/* (1) Get admin.id + admin.name */
var admin = {
id: parseInt(entry_element.id),
name: entry_element.children[0].children[0].innerHTML
};
/* (2) Create popup */
var PopupManager = new Popup();
var confirm_content = {
title: "Suppression d'un administrteur",
content: "L'administrateur <b>"+admin.name+"</b> sera définitivement supprimé de la plateforme, cette opération ne peut pas être annulée.",
type: "invalid",
action: "Supprimer"
};
/* (3) Ask for confirmation */
PopupManager.ask(confirm_content, function(is_confirmed){
/* (3.1) If cancelled -> abort */
if( !is_confirmed )
return;
/* (2.1) Manage deletion
---------------------------------------------------------*/
/* (1) Create request */
var request = {
path: 'adminDefault/delete', // On veut créer un nouvel admin
id_admin: admin.id
};
/* (2) Send request + handle response */
api.send(request, function(answer){
if( answer.error == 0 ){ // Tout s'est bien deroule
console.log('Admin supprimé!');
// on supprime de la liste
entry_element.parentNode.removeChild(entry_element);
}else{ // Erreur
console.error('ModuleError::'+answer.error);
}
});
});
};
/* (3) Bind event for each remove link
---------------------------------------------------------*/
for( var i = 0 ; i < section.admins.link.remove.length ; i++ ){
section.admins.link.remove[i].addEventListener('click', function(e){
remove_admin(e.target.parentNode.parentNode);
}, false);
}
}
/* [4] admin -> Création d'administrateur
=========================================================*/ =========================================================*/
if( section.admin.element != null ){ if( section.admin.element != null ){
@ -220,7 +129,7 @@ if( section.admin.element != null ){
section.admin.errmsg.mail.innerHTML = ''; section.admin.errmsg.mail.innerHTML = '';
var request = { var request = {
path: 'adminDefault/create', // On veut créer un nouvel admin path: 'authenticationDefault/create_admin', // On veut créer un nouvel admin
username: section.admin.input.username.value, username: section.admin.input.username.value,
mail: section.admin.input.mail.value mail: section.admin.input.mail.value
}; };

View File

@ -71,20 +71,6 @@ if( section.view.element != null ){
/* (3) Gestion de la recherche instantannee */ /* (3) Gestion de la recherche instantannee */
section.view.search.func = function(){ section.view.search.func = function(){
// if no keyword -> show all
if( section.view.search.bar.value.length == 0 ){
// On recupere la liste des elements correspondants aux utilisateurs
var user_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
// Affiche chaque carte
for( var i = 0 ; i < user_list.length ; i++ )
user_list[i].remClass('hidden');
return;
}
var search = { var search = {
path: 'userDefault/search', path: 'userDefault/search',
keywords: section.view.search.bar.value keywords: section.view.search.bar.value
@ -100,7 +86,7 @@ if( section.view.element != null ){
// On enregistre tous les UID dans un tableau // On enregistre tous les UID dans un tableau
var uid_list = []; var uid_list = [];
for( var i = 0 ; i < result.users.length ; i++ ) for( var i = 0 ; i < result.users.length ; i++ )
uid_list.push( result.users[i].id_user ); uid_list.push( result.users[i].id_user);
// On recupere la liste des elements correspondants aux utilisateurs // On recupere la liste des elements correspondants aux utilisateurs
var user_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]'); var user_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
@ -108,7 +94,7 @@ if( section.view.element != null ){
// Pour chaque utilisateur // Pour chaque utilisateur
for( var i = 0 ; i < user_list.length ; i++ ){ for( var i = 0 ; i < user_list.length ; i++ ){
// Si doit etre visible // Si doit etre visible
if( uid_list.indexOf(parseInt(user_list[i].id)) > -1 ) if( uid_list.indexOf(user_list[i].id) > -1 )
user_list[i].remClass('hidden'); user_list[i].remClass('hidden');
// Si ne doit pas etre visible // Si ne doit pas etre visible
else else
@ -557,26 +543,8 @@ if( section.remove.element != null ){
// On annule l'envoi de base (PHP) // On annule l'envoi de base (PHP)
e.preventDefault(); e.preventDefault();
// Si l'id n'est pas defini -> abort // Si l'id est defini
if( section.remove.input.search.id.value == '' ) if( section.remove.input.search.id.value != '' ){
return;
/* (1) Create popup */
var PopupManager = new Popup();
var confirm_content = {
title: "Suppression d'utilisateur",
content: "L'utilisateur <b>"+section.remove.input.username.value+"</b> sera définitivement supprimé de la plateforme. Cette opération ne peut être annulée.",
type: "invalid",
action: "Supprimer"
};
/* (2) Ask for confirmation */
PopupManager.ask(confirm_content, function(is_confirmed){
// {2.1} If cancelled -> abort //
if( !is_confirmed )
return;
/* (2) On supprime l'utilisateur */ /* (2) On supprime l'utilisateur */
var request = { var request = {
@ -621,7 +589,7 @@ if( section.remove.element != null ){
}); });
}); }
}, false); }, false);
} }

View File

@ -12,7 +12,7 @@
<!-- Dépendences CSS --> <!-- Dépendences CSS -->
<link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers --> <link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers -->
<link type='text/css' rel='stylesheet' href='/css/min/font.css' /> <!-- Positionnement global des pages --> <link type='text/css' rel='stylesheet' href='/css/min/fonts.css' /> <!-- Positionnement global des pages -->
<link type='text/css' rel='stylesheet' href='/css/min/layout.css' /> <!-- Positionnement global des pages --> <link type='text/css' rel='stylesheet' href='/css/min/layout.css' /> <!-- Positionnement global des pages -->
<link type='text/css' rel='stylesheet' href='/css/min/header.css' /> <!-- Gestion du header --> <link type='text/css' rel='stylesheet' href='/css/min/header.css' /> <!-- Gestion du header -->
<link type='text/css' rel='stylesheet' href='/css/min/menu-side.css' /> <!-- Gestion du menu --> <link type='text/css' rel='stylesheet' href='/css/min/menu-side.css' /> <!-- Gestion du menu -->
@ -28,7 +28,6 @@
<!-- Dépendences Javascript --> <!-- Dépendences Javascript -->
<script type='text/javascript' src='/js/lib/min/input-checker.js' ></script> <!-- Gestion dynamique des saisies --> <script type='text/javascript' src='/js/lib/min/input-checker.js' ></script> <!-- Gestion dynamique des saisies -->
<script type='text/javascript' src='/js/lib/min/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) --> <script type='text/javascript' src='/js/lib/min/reset.js' ></script> <!-- Corrections Javascript natif (ajouts) -->
<script type='text/javascript' src='/js/lib/min/popup.js' ></script> <!-- Gestion du pop-up gloabl -->
<script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur --> <script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
<script type='text/javascript' src='/js/lib/min/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL --> <script type='text/javascript' src='/js/lib/min/page-manager.js' ></script> <!-- Gestion réseau/chargement/liens/URL -->
<script type='text/javascript' src='/js/lib/min/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) --> <script type='text/javascript' src='/js/lib/min/form-deflater.js' ></script> <!-- Gestion des formulaires (Object) -->
@ -51,24 +50,17 @@
<!-- MENU DE LA PAGE --> <!-- MENU DE LA PAGE -->
<nav id='MENU-SIDE'> <nav id='MENU-SIDE'>
<span data-link='profile' data-desc='Profil' class='mb' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/profile.svg'); ?></span> <span data-link='profile' data-desc='Profil' class='mb' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/profile.svg'); ?></span>
<span data-link='history' data-desc='Journal des accès' class='apart' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/history.svg'); ?></span> <span data-link='history' data-desc='Journal des accès' class='apart' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/history.svg'); ?></span>
<span data-link='machines' data-desc='Systèmes' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/device.svg'); ?></span> <span data-link='machines' data-desc='Systèmes' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/device.svg'); ?></span>
<span data-link='users' data-desc='Utilisateurs' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/users.svg'); ?></span> <span data-link='users' data-desc='Utilisateurs' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/users.svg'); ?></span>
<span data-link='groups' data-desc='Gestion des groupes' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/groups.svg'); ?></span> <span data-link='groups' data-desc='Gestion des groupes' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/groups.svg'); ?></span>
<span data-link='options' data-desc='Options' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/options.svg'); ?></span>
<span data-link='options' data-desc='Options' class='mt' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/options.svg'); ?></span> <span data-link='settings' data-desc='Paramètres' class='mt' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/settings.svg'); ?></span>
<span data-link='settings' data-desc='Paramètres' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/settings.svg'); ?></span>
</nav> </nav>
<!-- POPUP WINDOW -->
<div id='POPUP'>
<div class='header'></div>
<div class='body'></div>
<div class='footer'></div>
</div>
<div id='POPUP-BG'></div>
<!-- CONTENEUR DE LA PAGE --> <!-- CONTENEUR DE LA PAGE -->
<div id='CONTAINER'></div> <div id='CONTAINER'></div>

View File

@ -10,7 +10,7 @@
<meta name='desctiption' content="Système de gestion des véhicules pour STEF."> <meta name='desctiption' content="Système de gestion des véhicules pour STEF.">
<!-- Dépendences CSS --> <!-- Dépendences CSS -->
<link type='text/css' rel='stylesheet' href='/css/min/font.css' /> <!-- Chargement des fonts --> <link type='text/css' rel='stylesheet' href='/css/min/fonts.css' /> <!-- Chargement des fonts -->
<link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers --> <link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers -->
<!-- Icone --> <!-- Icone -->
@ -22,8 +22,6 @@
<script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur --> <script type='text/javascript' src='/js/lib/min/api.js' ></script> <!-- Gestion des transactions avec le serveur -->
<script type='text/javascript' src='/js/lib/min/page-manager.js' ></script> <!-- Gestion des transactions avec le serveur --> <script type='text/javascript' src='/js/lib/min/page-manager.js' ></script> <!-- Gestion des transactions avec le serveur -->
<script type='text/javascript' src='/serverinfo.js' ></script> <!-- Gestion dynamique des info server -->
</head> </head>
<style type='text/css'> <style type='text/css'>
body{ body{

View File

@ -67,9 +67,9 @@
allow('file_exists')->toBeCalled()->andReturn(true); allow('file_exists')->toBeCalled()->andReturn(true);
// normally the 'module' module is always here for testing purposes // normally the 'module' module is always here for testing purposes
$err = ModuleFactory::getModule('documentationDefault'); $err = ModuleFactory::getModule('module');
expect($err)->not->toBeAnInstanceOf("\\error\\core\\Error"); expect($err)->not->toBeAnInstanceOf('\\error\\core\\Error');
}); });

View File

@ -274,7 +274,7 @@
it('fail when unknown method', function(){ it('fail when unknown method', function(){
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'mo-du_leA' => [ 'me-th_odA' => [] ], 'mo-du_leA' => [ 'POST::me-th_odA' => [] ],
'moduleB' => [] 'moduleB' => []
]); ]);
@ -299,7 +299,7 @@
allow(Request::class)->toReceive('buildOptions')->andReturn(true); allow(Request::class)->toReceive('buildOptions')->andReturn(true);
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'mo-du_leA' => [ 'me-th_odA' => [] ], 'mo-du_leA' => [ 'POST::me-th_odA' => [] ],
'moduleB' => [] 'moduleB' => []
]); ]);
@ -320,7 +320,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [] 'POST::methodA' => []
] ]
]); ]);
@ -338,7 +338,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [ 'POST::methodA' => [
'permissions' => 23.2 'permissions' => 23.2
] ]
] ]
@ -358,7 +358,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [ 'POST::methodA' => [
'permissions' => [] 'permissions' => []
] ]
] ]
@ -381,7 +381,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [ 'POST::methodA' => [
'permissions' => ['a'] 'permissions' => ['a']
] ]
] ]
@ -400,7 +400,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [ 'POST::methodA' => [
'permissions' => ['a'] 'permissions' => ['a']
] ]
] ]
@ -420,7 +420,7 @@
allow('json_decode')->toBeCalled()->andReturn([ allow('json_decode')->toBeCalled()->andReturn([
'moduleA' => [ 'moduleA' => [
'methodA' => [ 'POST::methodA' => [
'permissions' => ['a'] 'permissions' => ['a']
] ]
] ]
@ -466,7 +466,7 @@
$this->json = [ $this->json = [
'moduleA' => [ 'moduleA' => [
'methodA' => [] 'POST::methodA' => []
] ]
]; ];
@ -499,7 +499,7 @@
it('fail if \'parameters\' has no <string> name', function(){ it('fail if \'parameters\' has no <string> name', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
1 => [] 1 => []
]; ];
allow('json_decode')->toBeCalled()->andReturn($this->json); allow('json_decode')->toBeCalled()->andReturn($this->json);
@ -511,7 +511,7 @@
it('fail if \'parameters\' has no <array> specification', function(){ it('fail if \'parameters\' has no <array> specification', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => 1 'paramName' => 1
]; ];
allow('json_decode')->toBeCalled()->andReturn($this->json); allow('json_decode')->toBeCalled()->andReturn($this->json);
@ -523,7 +523,7 @@
it('fail if one \'parameters\' have no \'type\' clause', function(){ it('fail if one \'parameters\' have no \'type\' clause', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => false 'optional' => false
] ]
@ -537,7 +537,7 @@
it('fail if one \'parameters\' have incorrect \'type\' clause', function(){ it('fail if one \'parameters\' have incorrect \'type\' clause', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => false, 'optional' => false,
'type' => 12 'type' => 12
@ -556,7 +556,7 @@
it('pass if missing optional parameter -> set to null by default', function(){ it('pass if missing optional parameter -> set to null by default', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => true, 'optional' => true,
'type' => 'text' 'type' => 'text'
@ -576,7 +576,7 @@
it('fail if optional param wrong type ', function(){ it('fail if optional param wrong type ', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => true, 'optional' => true,
'type' => 'id' 'type' => 'id'
@ -592,7 +592,7 @@
it('pass if optional param matching type ', function(){ it('pass if optional param matching type ', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => true, 'optional' => true,
'type' => 'id' 'type' => 'id'
@ -608,7 +608,7 @@
it('fail if required param missing ', function(){ it('fail if required param missing ', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => false, 'optional' => false,
'type' => 'id' 'type' => 'id'
@ -623,7 +623,7 @@
it('fail if required param wrong type ', function(){ it('fail if required param wrong type ', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => false, 'optional' => false,
'type' => 'id' 'type' => 'id'
@ -639,7 +639,7 @@
it('pass if required param matching type ', function(){ it('pass if required param matching type ', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => false, 'optional' => false,
'type' => 'id' 'type' => 'id'
@ -659,7 +659,7 @@
it('fail if FILE param required + file does not exist', function(){ it('fail if FILE param required + file does not exist', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'type' => 'FILE' 'type' => 'FILE'
] ]
@ -674,7 +674,7 @@
it('pass if FILE param required + file exists -> create ref', function(){ it('pass if FILE param required + file exists -> create ref', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'type' => 'FILE' 'type' => 'FILE'
] ]
@ -694,7 +694,7 @@
it('pass if FILE optional param missing -> null', function(){ it('pass if FILE optional param missing -> null', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => true, 'optional' => true,
'type' => 'FILE' 'type' => 'FILE'
@ -715,7 +715,7 @@
it('pass if FILE optional param + file exists -> create ref', function(){ it('pass if FILE optional param + file exists -> create ref', function(){
$this->json['moduleA']['methodA']['parameters'] = [ $this->json['moduleA']['POST::methodA']['parameters'] = [
'paramName' => [ 'paramName' => [
'optional' => true, 'optional' => true,
'type' => 'FILE' 'type' => 'FILE'