From 7c1ab5e1cfffa79b09eabcd708faafe56589b708 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Mon, 9 May 2016 11:01:43 +0200 Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20de=20la=20suppression=20d?= =?UTF-8?q?e=20sujet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/modules.json | 18 +++-- config/repositories.json | 3 +- js/lib/api-min.js | 4 +- js/lib/api.js | 2 + manager/module/call_log.php | 130 ------------------------------------ manager/module/input.php | 56 +++++++++++++++- manager/module/subject.php | 4 ++ manager/repo/subject.php | 11 +-- view/js/input-min.js | 2 +- view/js/input.js | 3 +- 10 files changed, 88 insertions(+), 145 deletions(-) diff --git a/config/modules.json b/config/modules.json index 741b1d8..800dae4 100755 --- a/config/modules.json +++ b/config/modules.json @@ -181,6 +181,15 @@ "id_source": { "description": "UID de l'utilisateur doublon", "type": "id" }, "id_target": { "description": "UID de l'utilisateur déjà existant", "type": "id" } } + }, + + + "remove": { + "description": "Suppression d'un sujet d'id donné.", + "permissions": ["admin"], + "parameters": { + "id_subject": { "description": "UID du sujet à supprimer.", "type": "id" } + } } }, @@ -191,10 +200,11 @@ "description": "Enregistre les données d'une enquête téléphonique.", "permissions": ["admin"], "parameters": { - "subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" }, - "contacts": { "description": "Données des contacts de l'enquête.", "type": "array" }, - "mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array" }, - "fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array" } + "subject": { "description": "Données sur le sujet de l'enquête.", "type": "array" }, + "contacts": { "description": "Données des contacts de l'enquête.", "type": "array" }, + "mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array" }, + "fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array" }, + "matrice": { "description": "Matrice contenant les relations entre les plus proches contacts", "type": "array" } } } diff --git a/config/repositories.json b/config/repositories.json index 4d0ea8f..1577f5d 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -13,7 +13,8 @@ "getById", "getAll", "create", - "merge" + "merge", + "remove" ], "Personnes": [ diff --git a/js/lib/api-min.js b/js/lib/api-min.js index 6106b13..5b3f503 100644 --- a/js/lib/api-min.js +++ b/js/lib/api-min.js @@ -1,3 +1,3 @@ function APIClass(b){this.target=b} -APIClass.prototype={xhr:[],send:function(b,d,g){b.hasOwnProperty("path")||d({ModuleError:4});for(var a=0;a '+ptrAPI.xhr[i].responseText); // console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); diff --git a/manager/module/call_log.php b/manager/module/call_log.php index f373d08..c0651b7 100644 --- a/manager/module/call_log.php +++ b/manager/module/call_log.php @@ -175,136 +175,6 @@ - - - - - - - - - - - - - - - - /* DESERIALISATION D'UN JOURNAL D'APPEL - * - * @content Le contenu du journal d'appel a deserialiser - * - * @return sms Retourne un tableau associatif contenant les sms triees - * @return call Retourne un tableau associatif contenant les appels triees - * @return contact Retourne un tableau associatif contenant les correspondances numero/nom de contact - * - */ - private static function unserializeOld($params){ - $filecontent = null; - extract($params); - - /* [2] On recupere le xml - =========================================================*/ - $xml = simplexml_load_string($filecontent); - - // Si le format XML n'est pas bon, on retourne une erreur - if( $xml === false ) - return array('ModuleError' => ManagerError::ParsingFailed); - - return array( 'ModuleError' => ManagerError::Success, 'xml' => $xml ); - - - /* [3] Initialisation des variables - =========================================================*/ - $names = array(); // Contiendra les correspondances numero/contact - $msms = array(); // Contiendra les personnes utilisant SMS/MMS - $call = array(); // Contiendra les personnes utilisant CALL - - - /* [4] On traite les donnees pour chaque champ du xml - =========================================================*/ - foreach($xml->Item as $log){ - // On recupere le numero en string - $num = (string) $log['Number']; - - // On formatte le numero - if( preg_match("/^(?:\+33|33|0)(.+)/", $num, $m) ) - $num = '0'.$m[1]; - // Si pas un numero, on sort de la boucle - else - continue; - - - /* (1) Si le type est MMS ou SMS */ - if( $log['Type'] == 'SMS' || $log['Type'] == 'MMS' ){ - - // Si la personne n'est pas referencee, on l'ajoute - // Sinon on incremente son nombre d'apparition - if( isset($msms[$num]) ) - $msms[$num]+= 1; - else - $msms[$num] = 1; - - // On enregistre le nom si c'est pas fait - if( !isset($names[$num]) ) $names[$num] = $log['Name']; - - - /* (2) Si le type est PHONE */ - }else if( $log['Type'] == 'PHONE' ){ - - // Si la personne n'est pas referencee, on l'ajoute - // Sinon on incremente son nombre d'apparition - if( isset($call[$num]) ) - $call[$num]+= 1; - else - $call[$num] = 1; - - // On enregistre le nom si c'est pas fait - if( !isset($names[$num]) ) $names[$num] = $log['Name']; - - } - } - - - /* [4] On trie par nombre d'interactions (sms/appel) - =========================================================*/ - $tmp = $msms; - /* (1) Tri des SMS/MMS */ - $sortedMSMS = array(); - // On fait le tri pour les 10 premiers elements sauf s'il en a moins - for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){ - $maxval = max($tmp); - $maxkey = array_search($maxval, $tmp); - array_push( $sortedMSMS, array($maxkey, $maxval) ); - unset($tmp[$maxkey]); - } - - - $tmp = $call; - /* (2) Tri des appels */ - $sortedCALL = array(); - // On fait le tri pour les 10 premiers elements sauf s'il en a moins - for( $i = 0 ; $i < 10 && $i < count($tmp) ; $i++ ){ - $maxval = max($tmp); - $maxkey = array_search($maxval, $tmp); - array_push( $sortedCALL, array($maxkey, $maxval) ); - unset($tmp[$maxkey]); - } - - - /* [5] Gestion du retour - =========================================================*/ - return array( - 'ModuleError' => ManagerError::Success, - 'sms' => $sortedMSMS, - 'call' => $sortedCALL, - 'contact' => $names - ); - } - - - - } diff --git a/manager/module/input.php b/manager/module/input.php index 2b7c36e..34b2d9b 100644 --- a/manager/module/input.php +++ b/manager/module/input.php @@ -46,8 +46,58 @@ $subject_id = $create_subject_response->get('id_subject'); - /* [2] Pour chaque contact, on crée le sujet + les relations + + /* [2] On extrait les contacts des 2 top 10 (sans duplication) =========================================================*/ + $closest = array(); + + foreach($fiches as $i=>$fiche){ + /* (1) Si le contact n'est pas déja enregistré, on l'enregistre */ + if( !array_key_exists($fiche['contact'], $closest) ) + $closest[ $fiche['contact'] ] = array(); + + /* (2) Si c'est un lien par CALL, on l'ajoute */ + if( $i < 10 ) + array_push( $closest[ $fiche['contact'] ], 'CALL' ); + /* (3) Si c'est un lien par SMS, on l'ajoute */ + else + array_push( $closest[ $fiche['contact'] ], 'SMS' ); + } + + + + /* [3] On crée les contacts les plus proches + =========================================================*/ + $closest_id = array(); + // Pour chacun des top 10*2 plus proches + foreach($closest as $contact=>$relations){ + + /* (1) On rédige la requête de création de sujet*/ + $create_contact_request = new ModuleRequest('subject/create', array( + 'username' => $contacts[$contact]['username'], + 'firstname' => $contacts[$contact]['firstname'], + 'lastname' => $contacts[$contact]['lastname'], + 'number' => $contacts[$contact]['number'] + )); + + /* (2) On exécute la requête (création) */ + $create_contact_response = $create_contact_request->dispatch(); + + /* (3) Gestion de l'erreur, si erreur de création */ + if( $create_contact_response->error != ManagerError::Success ) + return array( 'ModuleError' => $create_contact_response->error ); + + /* (4) On récupère l'id du sujet */ + $closest_id[$contact] = $create_contact_response->get('id_subject'); + + + /* [4] On crée les relations avec le sujet de l'enquête + =========================================================*/ + + + } + + // TODO : Here !! @@ -56,7 +106,9 @@ =========================================================*/ return array( 'ModuleError' => ManagerError::Success, - 'subject_id' => $subject_id + 'subject_id' => $subject_id, + 'contacts' => $closest, + 'created' => $closest_id ); } diff --git a/manager/module/subject.php b/manager/module/subject.php index ce94c1a..795dc99 100644 --- a/manager/module/subject.php +++ b/manager/module/subject.php @@ -126,6 +126,10 @@ $remove = new Repo('subject/remove', array($id_subject)); $remove_status = $remove->answer(); + // Si erreur lors de la requête + if( $remove_status === false ) + return array( 'ModuleError' => ManagerError::ModuleError ); + /* [3] On verifie que le sujet est bien supprime =========================================================*/ diff --git a/manager/repo/subject.php b/manager/repo/subject.php index 61fa77d..a5f00f4 100644 --- a/manager/repo/subject.php +++ b/manager/repo/subject.php @@ -24,7 +24,11 @@ $getSubject = Database::getPDO()->prepare("SELECT idSujet, pseudo, prenom, nom, id_facebook, telephone FROM sujets WHERE idSujet = :id_subject"); - $getSubject->execute(array( ':id_subject' => $id_subject )); + $get_status = $getSubject->execute(array( ':id_subject' => $id_subject )); + + // Si erreur de requête + if( $get_status === false ) + return false; /* [2] On recupere le resultat de la requete @@ -157,12 +161,11 @@ * @id_subject UID du sujet en question * */ - // TODO: Finir l'implémentation public static function remove($id_subject){ /* [1] On effectue la suppression =========================================================*/ - $getSubject = Database::getPDO()->prepare("DELETE FROM subjects WHERE id_subject = :id_subject"); - $getSubject->execute(array( ':id_subject' => $id_subject )); + $delSubject = Database::getPDO()->prepare("DELETE FROM sujets WHERE idSujet = :id_subject"); + return $delSubject->execute(array( ':id_subject' => $id_subject )); } } diff --git a/view/js/input-min.js b/view/js/input-min.js index 058fd2c..c516488 100644 --- a/view/js/input-min.js +++ b/view/js/input-min.js @@ -10,4 +10,4 @@ d[0]:"",lastname:1 GATHERING ALL DATA"); -subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})})}); +subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};api.send(a,function(a){console.log(a)},!1)},!1)})})})})}); diff --git a/view/js/input.js b/view/js/input.js index e2310ca..abae756 100644 --- a/view/js/input.js +++ b/view/js/input.js @@ -476,7 +476,8 @@ include('/js/includes/input-phone-matrice.js', function(){ subject: lsi.export('subject')[0], contacts: lsi.export('contacts'), mini: lsi.export('mini-fiches'), - fiches: lsi.export('fiches') + fiches: lsi.export('fiches'), + matrice: lsi.export('matrice')[0] }; /* (3) On envoie la requête et traite la réponse */