Implémentation de la suppression de sujet
This commit is contained in:
parent
67ed2c12de
commit
7c1ab5e1cf
|
@ -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<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>" }
|
||||
"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>" },
|
||||
"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>" },
|
||||
"matrice": { "description": "Matrice contenant les relations entre les plus proches contacts", "type": "array<array>" }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
"getById",
|
||||
"getAll",
|
||||
"create",
|
||||
"merge"
|
||||
"merge",
|
||||
"remove"
|
||||
],
|
||||
|
||||
"Personnes": [
|
||||
|
|
|
@ -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<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,
|
||||
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)}};
|
||||
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,
|
||||
-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)}};
|
||||
|
|
|
@ -4,6 +4,7 @@ function APIClass(target){ this.target = target; }
|
|||
APIClass.prototype = {
|
||||
xhr: [], // tableau d'objets pour les requêtes ajax
|
||||
|
||||
buffer: null,
|
||||
|
||||
/* transaction avec le serveur (http://host/api/)
|
||||
*
|
||||
|
@ -54,6 +55,7 @@ APIClass.prototype = {
|
|||
this.xhr[i].onreadystatechange = function(){
|
||||
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/ */
|
||||
// console.log('http://host/api/ => '+ptrAPI.xhr[i].responseText);
|
||||
// console.log( JSON.parse(ptrAPI.xhr[i].responseText) );
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
=========================================================*/
|
||||
|
|
|
@ -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<int> 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 ));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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"),
|
||||
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");
|
||||
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)})})})})});
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue