--- /dev/null
+<?php
+
+ require_once('protected/required.php');
+
+ class PdoInstanceManager extends AbstractPdoManager implements InstanceManager {
+
+ public function createInstance($instance) {
+
+ $query = $this -> pdo -> prepare(
+ 'INSERT INTO instances (
+ nom,
+ exploitant,
+ reference,
+ version,
+ historique,
+ maintenu
+ ) VALUES (
+ :nom,
+ :exploitant,
+ :reference,
+ :version,
+ :historique,
+ :maintenu
+ )'
+ );
+ $query -> bindValue(':nom', $instance -> getNom());
+ $query -> bindValue(':exploitant', $instance -> getExploitant());
+ $query -> bindValue(':reference', $instance -> getReference());
+ $query -> bindValue(':version', $instance -> getVersion());
+ $query -> bindValue(':historique', $instance -> getHistorique());
+ $query -> bindValue(':maintenu', $instance -> estMaintenu());
+ $query -> execute();
+ $query -> closeCursor();
+
+ }
+
+ public function updateInstance($instance) {
+
+ $query = $this -> pdo -> prepare(
+ 'UPDATE instances
+ SET nom = :nom,
+ exploitant = :exploitant,
+ reference = :reference,
+ version = :version,
+ historique = :historique,
+ maintenu = :maintenu
+ WHERE id = :id'
+ );
+ $query -> bindValue(':id', $instance -> getId());
+ $query -> bindValue(':nom', $instance -> getNom());
+ $query -> bindValue(':exploitant', $instance -> getExploitant());
+ $query -> bindValue(':reference', $instance -> getReference());
+ $query -> bindValue(':version', $instance -> getVersion());
+ $query -> bindValue(':historique', $instance -> getHistorique());
+ $query -> bindValue(':maintenu', $instance -> estMaintenu());
+ $query -> execute();
+ $query -> closeCursor();
+ }
+
+ public function updateInstanceInfos($array) {
+ $instance = $this -> getInstanceByReference($array['reference']);
+ // LE INSTANCE EXISTE : MISE À JOUR DES INFORMATIONS DE VERSION
+ if($instance -> getId() > 0) {
+ // CAS EXPLOITANT
+ if($array['usager_type'] === "exploitant") {
+ // RECUPERATION DE L'EXPLOITANT DU INSTANCE
+ $exploitantManager = new PdoExploitantManager();
+ $exploitant = $exploitantManager -> getExploitantByReference($instance -> getExploitant());
+ // MISE À JOUR DE TOUS LES INSTANCES EN CHARGE DE L'EXPLOITANT
+ $array['usager_type'] = "client";
+ $instances_id = $exploitant -> getInstances();
+ foreach ($instances_id as $instance_id) {
+ $array['reference'] = $this -> getInstance($instance_id) -> getReference();
+ $this -> updateInstanceInfos($array);
+ }
+ // CAS CLIENT
+ } else if($array['usager_type'] === "client") {
+ // VERIFICATION DU NOM DE L'INSTANCE
+ if ($array['produit'] === $instance -> getNom()) {
+ // SI LA VERSION DIFFÈRE DE LA DB, CREATION D'UNE ALERTE
+ if($array['version'] != $instance -> getVersion()) {
+ // CREATION D'UNE NOUVELLE ALERTE
+ $alerteManager = new PdoAlerteManager();
+ // To-do : séparer patches des majs
+ $alerte = new Alerte(null, null, "version",
+ "Version declaree ".$array['version']." differente de l'actuelle : ".$instance -> getVersion());
+ $alerteManager -> createAlerte($alerte);
+ // RECUPERATION DE L'HISTORIQUE DU INSTANCE
+ $historiqueManager = new PdoHistoriqueManager();
+ $historique = $historiqueManager -> getHistorique($instance -> getHistorique());
+ // AJOUT DANS UN HISTORIQUE DEJÀ EXISTANT
+ if($historique -> getId() > 0) {
+ $alertes = $historique -> getAlertes();
+ if((array_search("", $alertes)) !== false) {
+ $alertes = array($alerteManager -> getLastAlerte() -> getId());
+ } else {
+ $alertes[] = $alerteManager -> getLastAlerte() -> getId();
+ }
+ $historique -> setAlertes($alertes);
+ $historiqueManager -> updateHistorique($historique);
+ // CREATION D'UN NOUVEL HISTORIQUE
+ } else {
+ $historique = new Historique(null, null, array($alerteManager -> getLastAlerte() -> getId()));
+ $historiqueManager -> createHistorique($historique);
+ $instance -> setHistorique($historiqueManager -> getLastHistorique() -> getId());
+ $this -> updateInstance($instance);
+ }
+ }
+ // MISE À JOUR DES INFOS DE L'INSTANCE
+ $query = $this -> pdo -> prepare(
+ 'UPDATE instances SET version = :version WHERE reference = :reference'
+ );
+ $query -> bindValue(':reference', $array['reference']);
+ $query -> bindValue(':version', $array['version']);
+ $query -> execute();
+ } else {
+ echo "Erreur de nom de l'instance";
+ }
+ }
+ // INSTANCE INEXISTANT
+ } else {
+ // CREATION D'UNE NOUVELLE ALERTE
+ $alerteManager = new PdoAlerteManager();
+ $alerte = new Alerte(null, null, "creation",
+ "Nouvelle instance declaree : ".$array['produit']." ; version : ".$array['version']);
+ $alerteManager -> createAlerte($alerte);
+ // CREATION D'UN NOUVEL HISTORIQUE
+ $historiqueManager = new PdoHistoriqueManager();
+ $historique = new Historique(null, null, array($alerteManager -> getLastAlerte() -> getId()));
+ $historiqueManager -> createHistorique($historique);
+ // CRÉATION D'UNE NOUVELLE INSTANCE
+ // To-do : gestion des comptes exploitants
+ $instance = new Instance(null, $array['produit'], null, $array['reference'], $array['version'], $historiqueManager -> getLastHistorique() -> getId(), true);
+ $this->createInstance($instance);
+ }
+
+
+ }
+
+ public function getInstance($id) {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM instances WHERE id = :id');
+ $query -> bindValue(':id', $id);
+ $query -> execute();
+
+ $result = $query -> fetch(PDO::FETCH_ASSOC);
+ $instance = new Instance(
+ $result['id'],
+ $result['nom'],
+ $result['exploitant'],
+ $result['reference'],
+ $result['version'],
+ $result['historique'],
+ $result['maintenu']
+ );
+
+ $query->closeCursor();
+
+ return $instance;
+ }
+
+ public function getInstanceByReference($reference) {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM instances WHERE reference = :reference');
+ $query -> bindValue(':reference', $reference);
+ $query -> execute();
+
+ $result = $query -> fetch(PDO::FETCH_ASSOC);
+ $instance = new Instance(
+ $result['id'],
+ $result['nom'],
+ $result['exploitant'],
+ $result['reference'],
+ $result['version'],
+ $result['historique'],
+ $result['maintenu']
+ );
+
+ $query->closeCursor();
+
+ return $instance;
+ }
+
+ public function getInstances() {
+
+ $query = $this -> pdo -> prepare('SELECT * FROM instances');
+ $query -> execute();
+
+ $results = $query -> fetchAll(PDO::FETCH_ASSOC);
+ $instances = array();
+ foreach ($results as $result) {
+ $instances[] = new Instance(
+ $result['id'],
+ $result['nom'],
+ $result['exploitant'],
+ $result['reference'],
+ $result['version'],
+ $result['historique'],
+ $result['maintenu']
+ );
+ }
+
+ $query->closeCursor();
+
+ return $instances;
+ }
+
+ public function removeInstance($instance) {
+
+ $query = $this -> pdo -> prepare('DELETE FROM instances WHERE id = :id');
+ $query -> bindValue('id', $instance -> getId());
+ $query -> execute();
+
+ }
+
+ }
+
+?>