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 ]); // 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){ // On recupere les donnees $search = Table::get('machine') ->whereIdWarehouse($id_warehouse) ->whereName(["%$keyword%", Rows::COND_LIKE]) ->select('id_machine') ->select('name') ->orderby('name', Rows::ORDER_ASC); return $search->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 Identifiant l'utilisateur * * @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']; } } ?>