2016-04-30 10:19:51 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace manager\module;
|
|
|
|
use \manager\sessionManager;
|
|
|
|
use \manager\Database;
|
|
|
|
use \manager\ManagerError;
|
|
|
|
use \manager\ModuleRequest;
|
|
|
|
use \manager\Repo;
|
|
|
|
|
|
|
|
class input{
|
|
|
|
|
|
|
|
|
2016-05-12 19:47:52 +00:00
|
|
|
/* AFFICHE UN NOM EXPLICITE A PARTIR DE @u username, @f firstname, et @l lastname
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
private static function readableName($u, $f, $l){
|
|
|
|
/* (1) On calcule les tailles des chaines */
|
|
|
|
$ul = strlen($u);
|
|
|
|
$fl = strlen($f);
|
|
|
|
$ll = strlen($l);
|
|
|
|
|
|
|
|
/* (2) Si @username n'est pas vide */
|
|
|
|
if( $ul > 0 ){
|
|
|
|
|
|
|
|
/* (3) Si @username+(@firstname et/ou @lastname) -> username (firstname lastname) */
|
|
|
|
if( $fl+$ll > 0 )
|
|
|
|
return $u.' ('.trim($f.' '.$l).')';
|
|
|
|
|
|
|
|
/* (4) Si @username uniquement -> username */
|
|
|
|
else
|
|
|
|
return $u;
|
|
|
|
|
|
|
|
/* (5) Si pas @username */
|
|
|
|
}else{
|
|
|
|
|
|
|
|
/* (6) Si @firstname et/ou @lastname -> firstname lastname*/
|
|
|
|
if( $fl+$ll > 0 )
|
2016-05-13 16:26:30 +00:00
|
|
|
return trim($f.' '.$l);
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
/* (7) Si rien -> Inconnu */
|
|
|
|
else
|
|
|
|
return 'Inconnu';
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-04-30 10:19:51 +00:00
|
|
|
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE
|
|
|
|
*
|
2016-04-30 14:13:37 +00:00
|
|
|
* @subject<Array> Tableau contenant les données du sujet
|
|
|
|
* @contacts<Array> Tableau contenant les données des contacts
|
|
|
|
* @mini<Array> Tableau contenant les données des mini fiches relation
|
|
|
|
* @fiches<Array> Tableau contenant les données des fiches relation
|
2016-04-30 10:19:51 +00:00
|
|
|
*
|
|
|
|
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function phone($params){
|
|
|
|
extract($params);
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
// TODO: Tout enregistrer dans le .json et non dans la bdd
|
2016-04-30 10:19:51 +00:00
|
|
|
/* [1] On crée le sujet de l'enquête
|
|
|
|
=========================================================*/
|
|
|
|
/* (1) On rédige la requête */
|
2016-05-13 16:26:30 +00:00
|
|
|
// $create_subject_request = new ModuleRequest('subject/create', array(
|
|
|
|
// 'username' => $subject['username'],
|
|
|
|
// 'firstname' => $subject['firstname'],
|
|
|
|
// 'lastname' => $subject['lastname'],
|
|
|
|
// 'number' => $subject['number']
|
|
|
|
// ));
|
|
|
|
//
|
|
|
|
// /* (2) On exécute la requête (création) */
|
|
|
|
// $create_subject_response = $create_subject_request->dispatch();
|
|
|
|
//
|
|
|
|
// /* (3) Gestion de l'erreur, si erreur de création */
|
|
|
|
// if( $create_subject_response->error != ManagerError::Success )
|
|
|
|
// return array( 'ModuleError' => $create_subject_response->error );
|
|
|
|
//
|
|
|
|
// /* (4) On récupère l'id du sujet */
|
|
|
|
// $subject_id = $create_subject_response->get('id_subject');
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// /* [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
|
|
|
|
// =========================================================*/
|
|
|
|
// /* (1) Relation de type _CALL_ */
|
|
|
|
// if( in_array('CALL', $relations) ){
|
|
|
|
// $call_rel_request = new Repo('subject/link', array( $subject_id, $closest_id[$contact], '_CALL_' ));
|
|
|
|
//
|
|
|
|
// $call_rel_response = $call_rel_request->answer();
|
|
|
|
//
|
|
|
|
// // Si erreur de création de relation
|
|
|
|
// if( $call_rel_response === false )
|
|
|
|
// return array( 'ModuleError' => ManagerError::ModuleError );
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// /* (2) Relation de type _SMS_ */
|
|
|
|
// if( in_array('SMS', $relations) ){
|
|
|
|
// $sms_rel_request = new Repo('subject/link', array( $subject_id, $closest_id[$contact], '_SMS_' ));
|
|
|
|
//
|
|
|
|
// $sms_rel_response = $sms_rel_request->answer();
|
|
|
|
//
|
|
|
|
// // Si erreur de création de relation
|
|
|
|
// if( $sms_rel_response === false )
|
|
|
|
// return array( 'ModuleError' => ManagerError::ModuleError );
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// /* [4] Ajout des relations de la matrice
|
|
|
|
// =========================================================*/
|
|
|
|
// // Pour chacun des top 10*2 plus proches
|
|
|
|
// foreach($closest as $A=>$rels){
|
|
|
|
//
|
|
|
|
// // Pour chaque relation avec le contact actuel (s'il y en a)
|
|
|
|
// if( isset($matrice[$A]) && is_array($matrice[$A]) ){
|
|
|
|
// foreach($matrice[$A] as $B){
|
|
|
|
// $relation_request = new Repo('subject/link', array( $closest_id[$A], $closest_id[$B], '' ));
|
|
|
|
//
|
|
|
|
// $relation_response = $relation_request->answer();
|
|
|
|
//
|
|
|
|
// // Si erreur de création de relation
|
|
|
|
// if( $relation_response === false )
|
|
|
|
// return array( 'ModuleError' => ManagerError::ModuleError );
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// }
|
|
|
|
$subject_id = '200';
|
|
|
|
|
|
|
|
// on hash son id
|
|
|
|
$subject_id = sessionManager::sha1($subject_id);
|
2016-04-30 10:19:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-09 09:01:43 +00:00
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [5] Enregistrement des données des FICHES dans la base de données
|
2016-05-02 08:29:11 +00:00
|
|
|
=========================================================*/
|
2016-05-13 16:26:30 +00:00
|
|
|
// TODO: Enregistrer les données des fiches dans la base de données
|
2016-05-09 09:01:43 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-09 09:46:12 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [0] On récupère les logs s'ils existent
|
|
|
|
=========================================================*/
|
|
|
|
// Contiendra le contenu du fichier
|
|
|
|
$file = array( 'logs' => array() );
|
2016-05-09 09:46:12 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* (1) Si on a déja crée le fichier avec le journal d'appel dedans, on le récupère */
|
|
|
|
$storage_already = is_string($subject['tmp_id']) && strlen($subject['tmp_id']) == 40;
|
2016-05-09 09:46:12 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* (2) On définit les 2 fichiers utiles */
|
|
|
|
$filename = array(
|
|
|
|
'old' => __ROOT__.'/tmp/phone_storage_'.$subject['tmp_id'].'.json',
|
|
|
|
'new' => __ROOT__.'/src/upload/phone_storage/'.$subject_id.'.json'
|
|
|
|
);
|
2016-05-09 09:46:12 +00:00
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* (3) Si on a déja crée le fichier, on essaie de récupérer son contenu */
|
|
|
|
if( $storage_already ){
|
|
|
|
$file = json_decode( file_get_contents($filename['old']), true );
|
2016-05-09 09:46:12 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
// erreur
|
|
|
|
if( $file == null )
|
|
|
|
return array( 'ModuleRequest' => ManagerError::ParsingFailed );
|
|
|
|
}
|
2016-05-09 09:46:12 +00:00
|
|
|
|
2016-05-09 09:01:43 +00:00
|
|
|
|
2016-05-09 12:12:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [1] On enregistre les données du sujet
|
2016-05-09 12:12:02 +00:00
|
|
|
=========================================================*/
|
2016-05-13 16:26:30 +00:00
|
|
|
$file['subject'] = array(
|
|
|
|
'id' => $subject_id,
|
|
|
|
'number' => $subject['number'],
|
|
|
|
'name' => self::readableName($subject['username'], $subject['firstname'], $subject['lastname'])
|
|
|
|
);
|
2016-05-09 12:12:02 +00:00
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [2] On enregistre les contacts des MINI
|
|
|
|
=========================================================*/
|
|
|
|
$file['contacts'] = array();
|
2016-05-09 12:12:02 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
foreach($mini as $miniData){
|
|
|
|
// On récupère les données du contact associé
|
|
|
|
$contact = $contacts[ $miniData['uid'] ];
|
2016-05-09 12:12:02 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
|
|
array_push($file['contacts'], array(
|
|
|
|
'id' => $miniData['uid'],
|
|
|
|
'number' => $contact['number'],
|
|
|
|
'name' => self::readableName($contact['username'], $contact['firstname'], $contact['lastname']),
|
|
|
|
'sexe' => $miniData['sexe'],
|
|
|
|
'age' => $miniData['age'],
|
|
|
|
'studies1' => $miniData['studies'],
|
|
|
|
'reltype' => ($miniData['reltype']==10) ? $miniData['reltypeSpecial'] : $miniData['reltype'], // si 'autre' -> valeur, sinon le code
|
|
|
|
'dist' => $miniData['loc']
|
|
|
|
));
|
2016-05-09 12:12:02 +00:00
|
|
|
|
2016-05-09 09:01:43 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [3] On enregistre les contacts des FICHES
|
2016-05-09 17:02:57 +00:00
|
|
|
=========================================================*/
|
2016-05-13 16:26:30 +00:00
|
|
|
foreach($fiches as $ficheData){
|
|
|
|
// On récupère les données du contact associé
|
|
|
|
$contact = $contacts[ $ficheData['uid'] ];
|
2016-05-09 17:02:57 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
|
|
array_push($file['contacts'], array(
|
|
|
|
'id' => $ficheData['uid'],
|
|
|
|
'number' => $contact['number'],
|
|
|
|
'name' => self::readableName($contact['username'], $contact['firstname'], $contact['lastname']),
|
|
|
|
'sexe' => $ficheData['sexe'],
|
|
|
|
'age' => $ficheData['age'],
|
|
|
|
'studies2' => $ficheData['studies'],
|
|
|
|
'reltype' => ($ficheData['reltype']==10) ? $ficheData['reltypeSpecial'] : $ficheData['reltype'], // si 'autre' -> valeur, sinon le code
|
|
|
|
'dist' => $ficheData['loc'],
|
|
|
|
'job' => $ficheData['job'],
|
|
|
|
'famsit' => $ficheData['famsit'],
|
|
|
|
'city' => $ficheData['city'],
|
|
|
|
'cp' => $ficheData['cp'],
|
|
|
|
'duration' => $ficheData['duration'],
|
|
|
|
'context' => $ficheData['context'],
|
|
|
|
'contextExtra' => $ficheData['contextSpecial'],
|
|
|
|
'freq' => $ficheData['freq'],
|
|
|
|
'connect' => $ficheData['connect'],
|
|
|
|
'connectExtra' => $ficheData['connectSpecial']
|
|
|
|
));
|
2016-05-09 17:02:57 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
}
|
2016-05-09 17:02:57 +00:00
|
|
|
|
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
/* [4] On enregistre les relations de la MATRICE
|
2016-05-09 17:02:57 +00:00
|
|
|
=========================================================*/
|
2016-05-13 16:26:30 +00:00
|
|
|
$file['relations'] = array();
|
2016-05-12 19:47:52 +00:00
|
|
|
|
2016-05-13 16:26:30 +00:00
|
|
|
foreach($matrice as $A=>$Bs)
|
|
|
|
foreach($Bs as $B)
|
|
|
|
array_push($file['relations'], array(
|
|
|
|
'idA' => $A,
|
|
|
|
'idB' => $B
|
|
|
|
));
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-09 17:02:57 +00:00
|
|
|
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* (5) On met le contenu en json */
|
2016-05-13 16:26:30 +00:00
|
|
|
$file = json_encode($file);
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
/* (6) On l'enregistre dans le fichier */
|
2016-05-13 16:26:30 +00:00
|
|
|
$written = file_put_contents( $filename['old'], $file);
|
2016-05-12 19:47:52 +00:00
|
|
|
|
|
|
|
// Si erreur d'écriture
|
|
|
|
if( $written === false )
|
|
|
|
return array( 'ModuleError' => ManagerError::ModuleError );
|
|
|
|
|
|
|
|
/* (7) On renomme le fichier avec le nouvel identifiant */
|
2016-05-13 16:26:30 +00:00
|
|
|
if( !rename($filename['old'], $filename['new']) )
|
2016-05-12 19:47:52 +00:00
|
|
|
return array( 'ModuleError' => ManagerError::ModuleError ); // si erreur -> erreur
|
2016-05-09 17:02:57 +00:00
|
|
|
|
|
|
|
|
2016-05-09 09:46:12 +00:00
|
|
|
/* [n] Gestion du retour
|
2016-04-30 10:19:51 +00:00
|
|
|
=========================================================*/
|
|
|
|
return array(
|
|
|
|
'ModuleError' => ManagerError::Success,
|
2016-05-13 16:26:30 +00:00
|
|
|
'subject_id' => $subject_id
|
2016-04-30 10:19:51 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
?>
|