UID de l'entrepot * @name Nom de la machine * * @return id_machine Renvoie l'UID de la machine cree * Renvoie FALSE si une erreur occure * */ public static function create($id_warehouse, $name){ /* [1] Creation de la machine =========================================================*/ $inserted = Table::get('machine')->insert([ 'id_machine' => Rows::INSERT_DEFAULT, 'id_warehouse' => $id_warehouse, 'name' => $name, 'token' => null, 'unlock_code' => null, 'ap' => Rows::INSERT_DEFAULT, 'ip' => Rows::INSERT_DEFAULT ]); // Si erreur (car name doit être unique) if( !$inserted ) return false; /* [2] On retourne l'id_machine ou FALSE si erreur =========================================================*/ $check_machine = self::getByName($id_warehouse, $name); // Si n'existe pas on retourne FALSE if( $check_machine === false ) return false; // Sinon, on retourne son id return $check_machine['id_machine']; } /* RENVOIE UNE LISTE DE MACHINE EN FONCTION D'UN MOT CLE * * @id_warehouse UID de l'entrepot * @keyword Element de recherche * * @return machines Retourne les machines trouvees * */ public static function search($id_warehouse, $keyword){ /* (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(["%$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') ->whereId([array_keys($mac_id_list), Rows::COND_IN]); /* (2) Return result */ return $join_rq->fetch(); } /* RENVOIE LES GROUPES AUQUEL APPARTIENT UNE MACHINE DONNEE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine en question * * @return clusters Retourne la liste des groupes auquel appartient la machine * */ public static function getClusters($id_warehouse, $id_machine){ /* [1] On redige/execute la requete =========================================================*/ $cluster = Table::get('machine_cluster') ->whereIdWarehouse($id_warehouse) ->orderby('name', Rows::ORDER_ASC) ->select('*'); $cluster_merge = Table::get('machine_cluster_merge') ->whereIdMachine($id_machine) ->join('id_machine_cluster', $cluster); /* [2] On retourne la liste des groupes =========================================================*/ return $cluster_merge->fetch(); } /* MODIFICATION D'UNE MACHINE DONNEE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine * @name Nouveau nom de machine * * @return status Renvoie si oui ou non tout s'est bien passe * */ public static function edit($id_warehouse, $id_machine=null, $name=null){ /* [1] Modification de la machine =========================================================*/ $edited = Table::get('machine') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->edit([ 'name' => $name ]); // On retourne l'etat de la modification return $edited; } /* SUPPRIME UNE MACHINE DONNE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine en question * * @return status Retourne si oui ou non la machine a bien ete supprime * */ public static function delete($id_warehouse, $id_machine){ /* [1] On redige/execute la requete =========================================================*/ $deleted = Table::get('machine') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->delete(); /* [2] On verifie que la machine est bien supprimée =========================================================*/ return $deleted; } /* RETOURNE UNE MACHINE SPECIFIQUE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine * * @return machine Données de la machine * FALSE si aucun résultat * */ public static function getById($id_warehouse, $id_machine){ /* [1] On récupère la machine =========================================================*/ /* (1) Write request */ $machine = Table::get('machine') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->select('id_machine') ->select('name') ->select('token') ->select('unlock_code') ->select('ap') ->select('ip') ->orderby('id_machine', Rows::ORDER_ASC) ->unique() ->fetch(); /* (2) Manage error */ if( $machine === false ) return false; /* (3) On remplace les valeurs 'unlock_code' et 'token' */ $machine['token'] = strlen($machine['token']) > 0; $machine['unlock_code'] = strlen($machine['unlock_code']) > 0; /* (4) On retourne la réponse */ return $machine; } /* RETOURNE UNE MACHINE SPECIFIQUE * * @id_warehouse UID de l'entrepot * @name Nom de la machine * * @return machine Données de la machine * FALSE si aucun résultat * */ public static function getByName($id_warehouse, $name){ /* [1] On récupère la machine =========================================================*/ /* (1) Write request */ $machine = Table::get('machine') ->whereName($name) ->whereIdWarehouse($id_warehouse) ->select('id_machine') ->select('name') ->select('token') ->select('unlock_code') ->select('ap') ->select('ip') ->orderby('name', Rows::ORDER_ASC) ->unique() ->fetch(); /* (2) Manage error */ if( $machine === false ) return false; /* (3) On remplace les valeurs 'unlock_code' et 'token' */ $machine['token'] = strlen($machine['token']) > 0; $machine['unlock_code'] = strlen($machine['unlock_code']) > 0; /* (4) On retourne la réponse */ return $machine; } /* RETOURNE UNE MACHINE SPECIFIQUE * * @id_warehouse UID de l'entrepot * @token Token de la machine * * @return machine Données de la machine * FALSE si aucun résultat * */ public static function getByToken($id_warehouse, $token){ /* [1] On récupère la machine =========================================================*/ /* (1) Write request */ $machine = Table::get('machine') ->whereToken($token) ->whereIdWarehouse($id_warehouse) ->select('id_machine') ->select('name') ->select('token') ->select('unlock_code') ->select('ap') ->select('ip') ->orderby('name', Rows::ORDER_ASC) ->unique() ->fetch(); /* (2) Manage error */ if( $machine === false ) return false; /* (3) On remplace les valeurs 'unlock_code' et 'token' */ $machine['token'] = strlen($machine['token']) > 0; $machine['unlock_code'] = strlen($machine['unlock_code']) > 0; /* (4) On retourne la réponse */ return $machine; } /* RETOURNE TOUTES LES MACHINES DE L'ENTREPOT * * @id_warehouse UID de l'entrepot * * @return machines Données des la machine * */ public static function getAll($id_warehouse){ /* [1] On rédige/execute la requête =========================================================*/ $machine = Table::get('machine') ->whereIdWarehouse($id_warehouse) ->select('id_machine') ->select('ap') ->select('ip') ->orderby('name', Rows::ORDER_ASC) ->select('name'); return $machine->fetch(); } /* DEBLOQUE UNE MACHINE (PREMIER TOKEN) AVEC UN CODE DE DEBLOCAGE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine * @unlock_code Code de déblocage * @first_token Premier token de hashage cyclique * * @return unlocked TRUE si débloqué, sinon FALSE * */ public static function unlock($id_warehouse, $id_machine, $unlock_code, $first_token){ /* [1] On vérifie le code déblocage =========================================================*/ /* (1) On effectue la requête */ $machine = Table::get('machine') ->select('id_machine') ->select('name') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->whereUnlockCode($unlock_code) ->fetch(); /* (2) On vérifie si on a bien le bon code */ if( count($machine) < 1 ) return false; /* [2] Si le code est bon, on le supprime et on met le token =========================================================*/ /* (1) Update (edit) machine */ $updated = Table::get('machine') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->edit([ 'unlock_code' => null, 'token' => $first_token ]); /* (2) Manage edition error */ return $updated; } /* VERIFIE MET A JOUR LE TOKEN DE SYNCHRONISATION * * @id_warehouse UID de l'entrepot * @token Token de synchronisation * @newToken Nouveau token de synchronisation (optionnel, uniquement quand on arrive à la fin du cycle de la hashChain) * * @return machine_id ID de la machine si correct, sinon FALSE * */ public static function checkToken($id_warehouse, $token, $newToken=null){ /* [1] On vérifie le token =========================================================*/ $hash = hash('sha512', $token); $byToken = self::getByToken($id_warehouse, $hash); // Si aucun résultat, erreur if( $byToken == false ) return false; /* [2] On met à jour le token =========================================================*/ $updated = Table::get('machine') ->whereId($byToken['id_machine']) ->edit([ 'token' => Checker::run('hash', $newToken) ? $newToken : $token, 'id_machine' => $byToken['id_machine'] ]); /* [3] On retourne que tout s'est bien déroulé =========================================================*/ if( !$updated ) return false; return $byToken['id_machine']; } /* MODIFICATION DE L'IDENTITE RESEAU D'UNE MACHINE DONNEE * * @id_warehouse UID de l'entrepot * @id_machine UID de la machine * @ap Identifiant de l'AP (Access Point) * @ip Ip * * @return status Renvoie si oui ou non tout s'est bien passe * */ public static function updateNetworkIdentity($id_warehouse=null, $id_machine=null, $ap=null, $ip=null){ /* [1] Mise à jour des identifiants =========================================================*/ $edited = Table::get('machine') ->whereId($id_machine) ->whereIdWarehouse($id_warehouse) ->edit([ 'ap' => $ap, 'ip' => $ip ]); // On retourne l'etat de la modification return $edited; } } ?>