Compare commits

..

43 Commits

Author SHA1 Message Date
xdrm-brackets 55b379cd8c fix 2018-11-05 10:18:35 +01:00
xdrm-brackets 6712b33841 [build.generic.view.*group*.twig] fixed block clause that blocks counters to check if has no result 2018-04-17 16:41:44 +02:00
xdrm-brackets 73be58df63 [public.css.container] fixed card layout #rev.2 2018-04-17 16:31:27 +02:00
xdrm-brackets 7af0fefdc1 [public.css.container] fixed card layout 2018-04-17 16:28:47 +02:00
xdrm-brackets ee9f7871e4 [public.css.*.css] updated css builds 2018-04-17 15:42:09 +02:00
xdrm-brackets bba94f5630 [public.css.layout] fixed popup footer out-of-flow 2018-04-17 15:40:21 +02:00
xdrm-brackets ec3560beb5 [build.generic.view.settings.admin.create.main.twig] now 'generated password' when creating admin is selectable (copiable) 2018-04-17 15:39:25 +02:00
xdrm-brackets 3b2c707618 upd: fixed page-manager (dependencies' file content was downloaded in Ajax but never used, only checks if the file exists, so now <script> or <style> tags are filled with the downloaded content -> so more efficient) 2018-02-08 11:39:06 +01:00
xdrm-brackets 0c0f34c7d4 fix: http.core.HttpRequest (now manages both Apache/nginx, especially php-fpm because the function 'getallheaders()' is not available, so gess it from (solution from http://php.net/manual/en/function.getallheaders.php\#84262)) 2018-02-07 14:52:21 +01:00
xdrm-brackets f1c338853f fix: router.core.router (now manages URI with beginning slash '/' (removes it)) 2018-02-07 14:50:36 +01:00
xdrm-brackets eb604f2299 upd: composer.lock 2018-02-07 14:50:04 +01:00
xdrm-brackets 2709a109c7 fixed build.api.module.machineDefault (added argument id_warehouse to machine.state (in view machine.listAll)) 2018-01-29 22:26:22 +01:00
xdrm-brackets 1f91f4feb1 Fix header icon -1px (border-bottom of header) 2017-11-13 16:42:28 +01:00
xdrm-brackets d5a0cf7977 Update database backup 2017-11-13 14:20:05 +01:00
xdrm-brackets b38822e506 Fix history.archive layout 2017-11-13 13:49:32 +01:00
xdrm-brackets ea66003d27 Created TreeTokenNull to disable the 'TreeToken' build at will + use it in index 2017-11-13 13:43:14 +01:00
xdrm-brackets d064e304ee When no history.search.value -> display all 2017-11-13 13:37:50 +01:00
xdrm-brackets f99d1a8435 Update repo machine/search to match any keywords (space-separated) with a OR condition + minfix user 2017-11-13 13:34:38 +01:00
xdrm-brackets b745c9ef08 Update repo user/search to match any keywords (space-separated) with a OR condition + if no search input -> display all 2017-11-13 13:28:18 +01:00
xdrm-brackets d30ec35636 Now history.view.search searches through users+machines (as on its views) + TODO: manage space separated keywords 2017-11-13 12:17:26 +01:00
xdrm-brackets ad4143771c Make LIKE sql WHERE clause lower case 2017-11-13 11:51:25 +01:00
xdrm-brackets 061d473cad Reversed history.timeline order (DESC) 2017-11-13 11:42:08 +01:00
xdrm-brackets 3c642732b2 Now scroll to timeline.event when loading sub-section 2017-11-13 11:40:13 +01:00
xdrm-brackets 9d49c7fd10 Now on click on timeline.event -> load this event entry 2017-11-12 18:34:52 +01:00
xdrm-brackets 545d99d212 Added dates + hours to events history.timeline 2017-11-12 18:09:57 +01:00
xdrm-brackets 067f12cc1a Removed infobox popup js 2017-11-12 17:24:25 +01:00
xdrm-brackets 20baf93bf3 Now history.timeline is vertical 2017-11-12 17:22:35 +01:00
xdrm-brackets 57d7abb7b6 Updated css 2017-11-12 15:10:40 +01:00
xdrm-brackets 6616916013 Fix fonts.css -> font.css 2017-11-12 15:09:06 +01:00
xdrm-brackets 0390bdf7ad Now a little circle 'below' the event circle when same user 2017-11-12 14:53:33 +01:00
xdrm-brackets bc1df78120 History details.timeline ASC order (not reverse as history.view) 2017-11-12 14:53:06 +01:00
xdrm-brackets 43e626d32d Added module historyDefault/getById to check current user in history.details.view + Refactor css + added info in svg tags + javascript began management (only launch event, implementation TODO) 2017-11-12 13:01:29 +01:00
xdrm-brackets b0f9cfae1e session timeout management in views: warehouse, admin + if no response, logout just .5min after the session timeout 2017-11-12 11:45:47 +01:00
xdrm-brackets 0faaee0040 serverinfo.js now shows a popup when session time out + api.js reset the timeout when an API call have an error=0 + if no answer to popup in 5min logout 2017-11-12 11:29:52 +01:00
xdrm-brackets 172f1e5935 Updated container.scss to be a 'pointer' on timeline events 2017-11-11 18:50:01 +01:00
xdrm-brackets b73f71c652 Svg generation + historyDefault/get_timeline + repo history/getByIdMachine + container.scss to generate machine timeline 2017-11-11 18:46:43 +01:00
xdrm-brackets 34ffdae4fe Fix tests according to branch 'api-refactor' 2017-11-11 13:09:30 +01:00
xdrm-brackets 6b9bd03d9e Pop-Up manages 'background.click' to send FALSE to the 'handler' + hide (equivalent to CANCEL action) 2017-11-11 13:03:30 +01:00
xdrm-brackets a2d575e94f Added confirmation Pop-Up for: 1. history.archive 2. machine.delete 3. user.delete 2017-11-11 12:56:46 +01:00
xdrm-brackets db71c0400d Removed 'POST::' in the config file 2017-11-10 13:38:15 +01:00
xdrm-brackets dfdb84e8a0 Dispatched 'Request::remote' to 'Loader::remote' as a builder adapter 2017-11-09 12:56:00 +01:00
xdrm-brackets 0fed2ee61e Fixed css (added grey buttons) + Created js PopUp lib + use in admin list to remove one admin 2017-11-09 12:38:00 +01:00
xdrm-brackets 4213d8b132 Migrated admin methods from 'authenticationDefault' to new 'adminDefault' module 2017-11-09 12:37:27 +01:00
77 changed files with 4034 additions and 3759 deletions

96
build/api/core/Loader.php Normal file
View File

@ -0,0 +1,96 @@
<?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,7 +6,6 @@
use \api\core\ModuleFactory;
use \error\core\Error;
use \error\core\Err;
use \http\core\HttpRequest;
class Request{
@ -335,88 +334,6 @@
}
/* 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
*
* @path<String> String correspondant au chemin de delegation ("module/methode")
@ -432,7 +349,7 @@
// On recupere les données de la regex
$module = $matches[1];
$method = $this->http_method.'::'.$matches[2];
$method = $matches[2];
/* [2] Verification de l'existence du module (conf)

View File

@ -0,0 +1,211 @@
<?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,116 +121,6 @@
/* 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
*
* @old<String> Ancien code d'accès (actuel)
@ -296,69 +186,6 @@
}
/* 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,6 +150,88 @@
];
}
/* (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
=========================================================*/
/* (1) Write request */
$history_req = new Repo('history/getByIdMachine', [$id_machine]);
$history_req = new Repo('history/getByIdMachine', [$_SESSION['WAREHOUSE']['id'], $id_machine]);
/* (2) Manage error */
if( $history_req->error->get() != Err::Success )

View File

@ -131,15 +131,17 @@
/* SUPPRIME UN ENTREPOT DONNE
*
* @id_warehouse<int> UID de l'entrepôt 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
*
*/
public static function delete($id_admin){
public static function delete($id_warehouse, $id_admin){
/* [1] On redige/execute la requete
=========================================================*/
$deleted = Table::get('admin')
->whereIdWarehouse($id_warehouse)
->whereId($id_admin)
->delete();

View File

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

View File

@ -66,22 +66,82 @@
*
*/
public static function search($id_warehouse, $keyword){
// On recupere les donnees
$searchusers = DatabaseDriver::getPDO()->prepare("SELECT * FROM user
/* (1) Format keyword
---------------------------------------------------------*/ {
/* (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 */
$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 ( code LIKE '%".$keyword."%'
OR username LIKE '%".$keyword."%'
OR firstname LIKE '%".$keyword."%'
OR lastname LIKE '%".$keyword."%'
OR mail LIKE '%".$keyword."%'
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."%'
)
");
$searchusers->execute([
':id_warehouse' => $id_warehouse
]);
// {2.2} Inject params //
$searchusers->execute([ ':id_warehouse' => $id_warehouse ]);
return DatabaseDriver::delNumeric( $searchusers->fetchAll() );
// {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 %}
{% set noresult = true %}
{% set count = 0 %}
{% block user_cluster_list %}
{# {% block user_cluster_list %} #}
{% for user_cluster in core.get_clusters(0) %}
{% set noresult = false %}
{% set count = count + 1 %}
{% set id_user_cluster = 'u' ~ user_cluster.id_user_cluster %}
{% set memlen = core.get_members(user_cluster.id_user_cluster,0) | length %}
@ -58,15 +58,16 @@
{% endfor %}
{% endblock %}
{# {% endblock %} #}
{% block machines_cluster_list %}
{# {% block machines_cluster_list %} #}
{% for machine_cluster in core.get_clusters(1) %}
{% set noresult = false %}
{% set count = count + 1 %}
{% set id_machine_cluster = 'm' ~ machine_cluster.id_machine_cluster %}
{% set memlen = core.get_members(machine_cluster.id_machine_cluster,1) | length %}
@ -132,16 +133,16 @@
{% endfor %}
{% endblock %}
{# {% endblock %} #}
{# if no result #}
{% if noresult %}
{% if count <= 0 %}
{% block no_result %}
<article class='inline-box'>
<span>Aucun groupe trouvé</span>
<span>Aucun résultat {{ count }}</span>
</article>
{% endblock %}

View File

@ -10,11 +10,247 @@
class main extends i_view{
public $id_history;
public $timeline = [];
public $entry = [];
/* (1) Constructor
*
* @id_history<id> UID of the history entry
*
---------------------------------------------------------*/
public function __construct($id_history){
/* (1) Set attributes
---------------------------------------------------------*/
$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 +1,6 @@
<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 %}
<article class='inline-box'>
<span>Aucun groupe trouvé.</span>
<span>Aucun groupe machine trouvé.</span>
</article>
{% endblock %}

View File

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

View File

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

View File

@ -4,7 +4,7 @@
{% 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 %}

View File

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

View File

@ -42,7 +42,7 @@
/* [2] Define headers
=========================================================*/
$this->headers = \getallheaders();
$this->headers = self::getallheaders_adapter();
/* [3] Define default datasets (GET, POST)
@ -201,4 +201,30 @@
public function HEADERS(){ return $this->headers; }
public function METHOD(){ return $this->method; }
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
=========================================================*/
$defaultWhere = $this->where;
$inCond = count($args[0]) > 1 && is_array($args[0][0]) && $args[0][1] == self::COND_IN;
$inCond = is_array($args[0]) && count($args[0]) > 1 && is_array($args[0][0]) && $args[0][1] == self::COND_IN;
// erreur
if( is_array($args[0][0]) && !$inCond )

View File

@ -132,6 +132,9 @@
/* [1] On construit la requête
=========================================================*/
/* (1) Chamo */
if( $value[1] == Rows::COND_LIKE ) // make LIKE lowercase
$sql .= 'LOWER('.$field[0].'.'.$field[1].') ';
else
$sql .= $field[0].'.'.$field[1].' ';
/* (2) Opérateur */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -13,10 +13,11 @@
// @active + .list
& > section.active{
display: flex;
flex-direction: row;
align-items: flex-start;
flex-flow: row wrap;
justify-content: flex-start;
flex-wrap: wrap;
align-items: stretch;
align-content: flex-start;
&.contain-check-table{
flex-direction: column;
@ -25,11 +26,13 @@
}
.inline-box{
flex: 0 0 1;
flex: 1 1 20%;
height: auto;
min-height: 10em;
}
.inline-row{
flex: 3em 0 0;
flex: 0 0 2.3em;
}
// Barre de recherche
@ -62,7 +65,7 @@
.error, .in-dev{
display: inline-block;
position: relative;
width: calc( 100% - 2*1em - 2*1em );
// width: calc( 100% - 2*1em - 2*1em );
height: 1em;
margin: 1em;
padding: 1em;
@ -96,6 +99,7 @@
position: relative;
// width: calc( 50% - 2*1em - 2*1em );
flex: calc( 50% - 2*1em - 2*1em );
height: auto;
margin: 1em;
padding: 1em;
@ -369,6 +373,7 @@
&.list{
float: none;
margin-left: 50%;
-webkit-transform: translateX(-50%);
transform: translateX(-50%);
}
@ -456,320 +461,12 @@
/* [3] Formulaires
/* [4] Tableau à cocher
=========================================================*/
& > 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{
article.check-table{
display: flex;
@ -840,4 +537,133 @@ article.check-table{
}
}
/* [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-x: auto;
svg.timeline{
/* (1) svg circles -> set right transform-origin */
& circle.timeline{
-webkit-transform-origin: 50% 50% 0;
transform-origin: 50% 50% 0;
transition: transform .2s ease-in-out;
/* (2) Set cursor to pointer */
&.around{
cursor: pointer;
/* (3) Dispatch event to next nodes */
&:hover + .center{ // center node
-webkit-transform: scale(1.2);
transform: scale(1.2);
}
&: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; }
}
/* (7) Avoid icons inside center circles to block :hover */
image{
-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

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

View File

@ -1,619 +0,0 @@
@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

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

View File

@ -1,31 +0,0 @@
/* 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

@ -1,62 +0,0 @@
/* 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

@ -1,54 +0,0 @@
/* 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

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

View File

@ -68,7 +68,114 @@
flex-direction: row;
justify-content: space-between;
overflow-x: none;
overflow: hidden;
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,6 +87,7 @@
box-shadow: inset 0 0 .5em #eee;
&:hover:after{
-webkit-transform: scaleX(1);
transform: scaleX(1);
color: #fff;
}

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

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,37 +0,0 @@
@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 Executable file → Normal file
View File

@ -1,3 +1,275 @@
/* No CSS */
/* COULEUR DU THEME */
/* 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; }
/*# sourceMappingURL= global.css.map */
/* (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; }
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 */

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

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

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

@ -18,9 +18,9 @@
==========================================*/
/* [3] Container de la page
==========================================*/
}
#WRAPPER > #HEADER {
/* [4] Popup background - window
==========================================*/ }
#WRAPPER > #HEADER {
display: block;
position: absolute;
top: 0;
@ -29,10 +29,8 @@
height: calc( 4em - 1px);
border-bottom: 1px solid #c23f05;
background-color: #f44f06;
z-index: 10;
}
#WRAPPER > #MENU-SIDE {
z-index: 10; }
#WRAPPER > #MENU-SIDE {
display: block;
position: absolute;
top: 4em;
@ -42,10 +40,8 @@
box-shadow: 2px 1px 3px #ddd;
background-color: #fff;
transition: all .3s;
z-index: 9;
}
#WRAPPER > #CONTAINER {
z-index: 9; }
#WRAPPER > #CONTAINER {
display: flex;
position: absolute;
top: 4em;
@ -55,9 +51,69 @@
padding: 1em;
flex-direction: row;
justify-content: space-between;
overflow-x: none;
overflow-y: auto;
}
/*# sourceMappingURL= layout.css.map */
overflow: hidden;
overflow-y: auto; }
#WRAPPER > #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, 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 */

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

@ -15,33 +15,21 @@
color: #a2a2a2;
line-height: calc( 4em - 2*.7em - 2*.55em - 2*.01em);
transition: color .3s, border .3s;
cursor: pointer;
}
#WRAPPER > #MENU-SIDE > span[data-link].mt {
margin-top: 3em;
}
#WRAPPER > #MENU-SIDE > span[data-link].mb {
margin-bottom: 3em;
}
#WRAPPER > #MENU-SIDE > span[data-link] svg, #WRAPPER > #MENU-SIDE > span[data-link] svg * {
cursor: pointer; }
#WRAPPER > #MENU-SIDE > span[data-link].mt {
margin-top: 3em; }
#WRAPPER > #MENU-SIDE > span[data-link].mb {
margin-bottom: 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);
transition: fill .3s, stroke .3s;
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 #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stroke-stylisable {
stroke: #a2a2a2 !important;
}
#WRAPPER > #MENU-SIDE > span[data-link][data-desc]:after {
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 #stroke-stylisable, #WRAPPER > #MENU-SIDE > span[data-link] svg * #stroke-stylisable {
stroke: #a2a2a2 !important; }
#WRAPPER > #MENU-SIDE > span[data-link][data-desc]:after {
content: attr(data-desc);
display: block;
position: absolute;
@ -56,27 +44,17 @@
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0);
transform: scaleX(0);
}
#WRAPPER > #MENU-SIDE > span[data-link]:hover, #WRAPPER > #MENU-SIDE > span[data-link].active {
transform: scaleX(0); }
#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 {
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 {
-webkit-transform: scaleX(1);
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 */
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 Executable file → Normal file
View File

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

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

@ -5,10 +5,8 @@
/* GESTION DES LONGUEURS */
#CONTAINER > .sub-menu-side {
display: block;
position: relative;
}
#CONTAINER > .sub-menu-side > span[data-sublink] {
position: relative; }
#CONTAINER > .sub-menu-side > span[data-sublink] {
display: block;
position: relative;
width: 7.5em;
@ -20,36 +18,24 @@
white-space: nowrap;
transition: all .2s;
cursor: pointer;
overflow: hidden;
}
#CONTAINER > .sub-menu-side > span[data-sublink] > .svg > svg {
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 {
-webkit-transform: translateY(-50%);
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= submenu-side.css.map */
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]{
display: block;
position: relative;
width: 7.5em;
width: $sub-menu-side-width;
padding: .3em 1em .3em 2em;
margin: 1em;
@ -36,6 +36,7 @@
width: 1em;
height: 1em;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
// Coloration pour tous les elements du svg

View File

@ -3,16 +3,16 @@
require_once '../vendor/autoload.php';
use \router\core\Router;
use \api\core\Loader;
use \api\core\Request;
use \api\core\Response;
use \database\core\DatabaseDriver;
use \api\core\AuthSystemDefault;
use \token\core\TreeToken;
use \token\core\TreeTokenNull;
use \log\core\Log;
$page_log = Log::get('router');
$session_guard = new TreeToken(1000);
$session_guard = new TreeTokenNull(1000);
/*******************************************/
@ -89,6 +89,9 @@
global $auth;
// session timeout warning
$session_warn = 5; // 5 minutes before expiration
// {1} Disable cache //
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
@ -114,8 +117,41 @@
}
}
// 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";
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();
@ -203,7 +239,7 @@
if( !$GLOBALS['session_guard']->init_child() )
die(json_encode([ 'error' => 100, 'ErrorDescription' => 'session_guard.child error' ]));
$request = Request::remote($url[0]);
$request = Loader::remote($url[0]);
$answer = $request->dispatch();
// Si c'est une réponse (et non un download)

View File

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

View File

@ -1,19 +1 @@
/***************************************/
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)}}
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)}};

View File

@ -0,0 +1 @@
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,26 +155,33 @@ pageManagerClass.prototype = {
// si le fichier css existe
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
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css)');
return;
}
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.href = this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css';
this.depCSS.innerHTML = e;
document.head.appendChild(this.depCSS);
}else
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.cssPath+'/'+this.page+'.css)');
}.bind(this));
}.bind(this), 'GET');
// si le fichier js existe
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
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js)');
return;
}
this.depJS = document.createElement('script');
this.depJS.type = 'text/javascript';
this.depJS.src = this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js';
// this.depJS.src = this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js';
this.depJS.innerHTML = e;
document.head.appendChild(this.depJS);
}else
console.warn('[loadDependencies_Error] - ('+this.root+this.path+'/'+this.jsPath+'/'+this.page+'.js)');
}.bind(this));
}.bind(this), 'GET');
},
/* =======================================================================

101
public_html/js/lib/popup.js Normal file
View File

@ -0,0 +1,101 @@
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,8 +105,6 @@ Element.prototype.anim = function(className, timeout){
};
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
*
*/

View File

@ -1,6 +0,0 @@
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

@ -0,0 +1,51 @@
<?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>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1,60 @@
<?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>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,48 @@
<?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>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,49 @@
<?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>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -0,0 +1,70 @@
<?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>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,70 @@
<?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>

After

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.">
<!-- Dépendences CSS -->
<link type='text/css' rel='stylesheet' href='/css/min/fonts.css' /> <!-- Chargement des fonts -->
<link type='text/css' rel='stylesheet' href='/css/min/font.css' /> <!-- Chargement des fonts -->
<link type='text/css' rel='stylesheet' href='/css/min/reset.css' /> <!-- Reset du css natif des browsers -->
<!-- Icone -->
@ -22,6 +22,8 @@
<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='/serverinfo.js' ></script> <!-- Gestion dynamique des info server -->
</head>
<style type='text/css'>
body{

View File

@ -43,6 +43,22 @@ if( section.view.element != null ){
/* (2) Gestion de la recherche instantannee */
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 = {
path: 'historyDefault/search',
keywords: section.view.search.bar.value
@ -119,12 +135,31 @@ if( section.archive.element != null ){
e.preventDefault();
api.send({path: 'historyDefault/archive'}, function(result){
if( result.error == 0 ){
/* (2) Create popup */
var PopupManager = new Popup();
var confirm_content = {
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);
@ -132,3 +167,83 @@ 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,6 +66,20 @@ if( section.view.element != null ){
/* (3) Gestion de la recherche instantannee */
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 = {
path: 'machineDefault/search',
keywords: section.view.search.bar.value
@ -84,6 +98,7 @@ if( section.view.element != null ){
var machine_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
// Pour chaque machine
console.log(uid_list);
for( var i = 0 ; i < machine_list.length ; i++ ){
// Si doit etre visible
if( uid_list.indexOf(parseInt(machine_list[i].id)) > -1 )
@ -503,8 +518,26 @@ if( section.remove.element != null ){
// On annule l'envoi de base (PHP)
e.preventDefault();
// Si l'id est defini
if( section.remove.input.search.id.value != '' ){
// Si l'id n'est pas défini -> abort
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 */
var request = {
@ -548,7 +581,7 @@ if( section.remove.element != null ){
console.error('ModuleError::'+answer.error);
});
}
});
}, false);

View File

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

View File

@ -10,6 +10,11 @@ var section = {
element: document.querySelector('#CONTAINER > section[data-sublink="password"]')
},
admins: {
text: '#CONTAINER > section[data-sublink="admins"] ',
element: document.querySelector('#CONTAINER > section[data-sublink="admins"]')
},
admin: {
text: '#CONTAINER > section[data-sublink="admin"] ',
element: document.querySelector('#CONTAINER > section[data-sublink="admin"]')
@ -99,8 +104,94 @@ if( section.password.element != null ){
/* [3] admins -> Liste des administrateurs
=========================================================*/
if( section.admins.element != null ){
/* [3] admin -> Création d'administrateur
/* (1) Fetch the remove links
---------------------------------------------------------*/
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 ){
@ -129,7 +220,7 @@ if( section.admin.element != null ){
section.admin.errmsg.mail.innerHTML = '';
var request = {
path: 'authenticationDefault/create_admin', // On veut créer un nouvel admin
path: 'adminDefault/create', // On veut créer un nouvel admin
username: section.admin.input.username.value,
mail: section.admin.input.mail.value
};

View File

@ -71,6 +71,20 @@ if( section.view.element != null ){
/* (3) Gestion de la recherche instantannee */
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 = {
path: 'userDefault/search',
keywords: section.view.search.bar.value
@ -86,7 +100,7 @@ if( section.view.element != null ){
// On enregistre tous les UID dans un tableau
var uid_list = [];
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
var user_list = document.querySelectorAll(section.view.text + '> article.inline-box[id]');
@ -94,7 +108,7 @@ if( section.view.element != null ){
// Pour chaque utilisateur
for( var i = 0 ; i < user_list.length ; i++ ){
// Si doit etre visible
if( uid_list.indexOf(user_list[i].id) > -1 )
if( uid_list.indexOf(parseInt(user_list[i].id)) > -1 )
user_list[i].remClass('hidden');
// Si ne doit pas etre visible
else
@ -543,8 +557,26 @@ if( section.remove.element != null ){
// On annule l'envoi de base (PHP)
e.preventDefault();
// Si l'id est defini
if( section.remove.input.search.id.value != '' ){
// Si l'id n'est pas defini -> abort
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 */
var request = {
@ -589,7 +621,7 @@ if( section.remove.element != null ){
});
}
});
}, false);
}

View File

@ -12,7 +12,7 @@
<!-- 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/fonts.css' /> <!-- Positionnement global des pages -->
<link type='text/css' rel='stylesheet' href='/css/min/font.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/menu-side.css' /> <!-- Gestion du menu -->
@ -28,6 +28,7 @@
<!-- 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/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/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) -->
@ -56,11 +57,18 @@
<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='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='settings' data-desc='Paramètres' class='mt' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/settings.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' ><?= file_get_contents(__PUBLIC__.'/src/static/menu-side/settings.svg'); ?></span>
</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 -->
<div id='CONTAINER'></div>

View File

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

View File

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