Implémentation de la suppression de sujet

This commit is contained in:
xdrm-brackets 2016-05-09 11:01:43 +02:00
parent 67ed2c12de
commit 7c1ab5e1cf
10 changed files with 88 additions and 145 deletions

View File

@ -181,6 +181,15 @@
"id_source": { "description": "UID de l'utilisateur doublon", "type": "id" }, "id_source": { "description": "UID de l'utilisateur doublon", "type": "id" },
"id_target": { "description": "UID de l'utilisateur déjà existant", "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.", "description": "Enregistre les données d'une enquête téléphonique.",
"permissions": ["admin"], "permissions": ["admin"],
"parameters": { "parameters": {
"subject": { "description": "Données sur le sujet 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<array>" }, "contacts": { "description": "Données des contacts de l'enquête.", "type": "array<array>" },
"mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" }, "mini": { "description": "Mini fiches relations sur les contacts de l'enquête.", "type": "array<array>" },
"fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" } "fiches": { "description": "Fiches relation sur les plus proches contacts de l'enquête.", "type": "array<array>" },
"matrice": { "description": "Matrice contenant les relations entre les plus proches contacts", "type": "array<array>" }
} }
} }

View File

@ -13,7 +13,8 @@
"getById", "getById",
"getAll", "getAll",
"create", "create",
"merge" "merge",
"remove"
], ],
"Personnes": [ "Personnes": [

4
js/lib/api-min.js vendored
View File

@ -1,3 +1,3 @@
function APIClass(b){this.target=b} 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<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var f=this;this.xhr[a].onreadystatechange=function(){if(4==f.xhr[a].readyState)if(-1<[0,200].indexOf(f.xhr[a].status))try{d(JSON.parse(f.xhr[a].responseText))}catch(b){d({ModuleError:-1, APIClass.prototype={xhr:[],buffer:null,send:function(b,e,g){b.hasOwnProperty("path")||e({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var d=this;this.xhr[a].onreadystatechange=function(){if(4==d.xhr[a].readyState)if(d.buffer=d.xhr[a].responseText,
ErrorDescription:"Erreur au niveau de api.js"})}else d({ModuleError:3})};var e=new FormData,c;for(c in b)"path"==c?e.append(c,b[c]):b[c]instanceof File?e.append(c,b[c]):e.append(c,JSON.stringify(b[c]));this.xhr[a].open("POST",this.target,!0);null!=g&&this.xhr[a].setRequestHeader("Authorization","Digest "+g);this.xhr[a].send(e)}}; -1<[0,200].indexOf(d.xhr[a].status))try{e(JSON.parse(d.xhr[a].responseText))}catch(b){e({ModuleError:-1,ErrorDescription:"Erreur au niveau de api.js"})}else e({ModuleError:3})};var f=new FormData,c;for(c in b)"path"==c?f.append(c,b[c]):b[c]instanceof File?f.append(c,b[c]):f.append(c,JSON.stringify(b[c]));this.xhr[a].open("POST",this.target,!0);null!=g&&this.xhr[a].setRequestHeader("Authorization","Digest "+g);this.xhr[a].send(f)}};

View File

@ -4,6 +4,7 @@ function APIClass(target){ this.target = target; }
APIClass.prototype = { APIClass.prototype = {
xhr: [], // tableau d'objets pour les requêtes ajax xhr: [], // tableau d'objets pour les requêtes ajax
buffer: null,
/* transaction avec le serveur (http://host/api/) /* transaction avec le serveur (http://host/api/)
* *
@ -54,6 +55,7 @@ APIClass.prototype = {
this.xhr[i].onreadystatechange = function(){ this.xhr[i].onreadystatechange = function(){
if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée if( ptrAPI.xhr[i].readyState == 4 ){ // si la requête est terminée
ptrAPI.buffer = ptrAPI.xhr[i].responseText;
/* DEBUG : affiche la réponse BRUTE de http://host/api/ */ /* DEBUG : affiche la réponse BRUTE de http://host/api/ */
// console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText); // console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText);
// console.log( JSON.parse(ptrAPI.xhr[i].responseText) ); // console.log( JSON.parse(ptrAPI.xhr[i].responseText) );

View File

@ -175,136 +175,6 @@
/* DESERIALISATION D'UN JOURNAL D'APPEL
*
* @content<String> Le contenu du journal d'appel a deserialiser
*
* @return sms<Array> Retourne un tableau associatif contenant les sms triees
* @return call<Array> Retourne un tableau associatif contenant les appels triees
* @return contact<Array> 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
);
}
} }

View File

@ -46,8 +46,58 @@
$subject_id = $create_subject_response->get('id_subject'); $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 !! // TODO : Here !!
@ -56,7 +106,9 @@
=========================================================*/ =========================================================*/
return array( return array(
'ModuleError' => ManagerError::Success, 'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id 'subject_id' => $subject_id,
'contacts' => $closest,
'created' => $closest_id
); );
} }

View File

@ -126,6 +126,10 @@
$remove = new Repo('subject/remove', array($id_subject)); $remove = new Repo('subject/remove', array($id_subject));
$remove_status = $remove->answer(); $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 /* [3] On verifie que le sujet est bien supprime
=========================================================*/ =========================================================*/

View File

@ -24,7 +24,11 @@
$getSubject = Database::getPDO()->prepare("SELECT idSujet, pseudo, prenom, nom, id_facebook, telephone $getSubject = Database::getPDO()->prepare("SELECT idSujet, pseudo, prenom, nom, id_facebook, telephone
FROM sujets FROM sujets
WHERE idSujet = :id_subject"); 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 /* [2] On recupere le resultat de la requete
@ -157,12 +161,11 @@
* @id_subject<int> UID du sujet en question * @id_subject<int> UID du sujet en question
* *
*/ */
// TODO: Finir l'implémentation
public static function remove($id_subject){ public static function remove($id_subject){
/* [1] On effectue la suppression /* [1] On effectue la suppression
=========================================================*/ =========================================================*/
$getSubject = Database::getPDO()->prepare("DELETE FROM subjects WHERE id_subject = :id_subject"); $delSubject = Database::getPDO()->prepare("DELETE FROM sujets WHERE idSujet = :id_subject");
$getSubject->execute(array( ':id_subject' => $id_subject )); return $delSubject->execute(array( ':id_subject' => $id_subject ));
} }
} }

View File

@ -10,4 +10,4 @@ d[0]:"",lastname:1<d.length?d.splice(1).join(" "):"",countsms:a.directory[g[c]].
dynamicUpdate(!0)}})},!1);$("#clear-all").addEventListener("click",function(a){lsi.clear("subject");lsi.clear("contacts");lsi.clear("mini-fiches");lsi.clear("fiches");lsi.clear("matrice");subjectManager.storageToFields();contactManager.storageToFields();miniManager.storageToFields();ficheManager.storageToFields();matriceManager.storageToFields()},!1);$("#export-all").addEventListener("click",function(a){a={subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"), dynamicUpdate(!0)}})},!1);$("#clear-all").addEventListener("click",function(a){lsi.clear("subject");lsi.clear("contacts");lsi.clear("mini-fiches");lsi.clear("fiches");lsi.clear("matrice");subjectManager.storageToFields();contactManager.storageToFields();miniManager.storageToFields();ficheManager.storageToFields();matriceManager.storageToFields()},!1);$("#export-all").addEventListener("click",function(a){a={subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),
fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};var f=$("#download-target");f.download="local-data.json";f.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a));f.click()},!1);$("#import-all").addEventListener("click",function(a){$("#local-upload").click()},!1);$("#local-upload").addEventListener("click",function(a){a.target.value=null},!1);$("#local-upload").addEventListener("change",function(a){a={path:"upload/local_data",file:$("#local-upload").files[0]}; fiches:lsi["export"]("fiches"),matrice:lsi["export"]("matrice")[0]};var f=$("#download-target");f.download="local-data.json";f.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a));f.click()},!1);$("#import-all").addEventListener("click",function(a){$("#local-upload").click()},!1);$("#local-upload").addEventListener("click",function(a){a.target.value=null},!1);$("#local-upload").addEventListener("change",function(a){a={path:"upload/local_data",file:$("#local-upload").files[0]};
api.send(a,function(a){console.log(a);if(0!=a.ModuleError)return!1;console.log(a.local_data.matrice);lsi.set("subject",0,a.local_data.subject);lsi["import"]("contacts",a.local_data.contacts);lsi["import"]("mini-fiches",a.local_data.mini);lsi["import"]("fiches",a.local_data.fiches);lsi.set("matrice",0,a.local_data.matrice);subjectManager.storageToFields();contactManager.storageToFields();matriceManager.storageToFields();dynamicUpdate(!0)})},!1);$("#submit-all").addEventListener("click",function(a){console.log("> GATHERING ALL DATA"); api.send(a,function(a){console.log(a);if(0!=a.ModuleError)return!1;console.log(a.local_data.matrice);lsi.set("subject",0,a.local_data.subject);lsi["import"]("contacts",a.local_data.contacts);lsi["import"]("mini-fiches",a.local_data.mini);lsi["import"]("fiches",a.local_data.fiches);lsi.set("matrice",0,a.local_data.matrice);subjectManager.storageToFields();contactManager.storageToFields();matriceManager.storageToFields();dynamicUpdate(!0)})},!1);$("#submit-all").addEventListener("click",function(a){console.log("> 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)})})})})});

View File

@ -476,7 +476,8 @@ include('/js/includes/input-phone-matrice.js', function(){
subject: lsi.export('subject')[0], subject: lsi.export('subject')[0],
contacts: lsi.export('contacts'), contacts: lsi.export('contacts'),
mini: lsi.export('mini-fiches'), 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 */ /* (3) On envoie la requête et traite la réponse */