NxTIC/manager/module/input.php

271 lines
8.1 KiB
PHP
Raw Normal View History

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{
/* 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 )
return trim($f.' '.l);
/* (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
*
* @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-04-30 10:19:51 +00:00
/* [1] On crée le sujet de l'enquête
=========================================================*/
/* (1) On rédige la requête */
$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
2016-05-02 08:29:11 +00:00
=========================================================*/
$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 );
}
}
}
2016-05-02 08:29:11 +00:00
2016-04-30 10:19:51 +00:00
/* [5] Enregistrement des données des FICHES dans la base de données
=========================================================*/
// TODO: Enregistrer les données des fiches dans la base de données
/* [6] Enregistrement des mini-fiches dans un fichier '.json'
=========================================================*/
// Contiendra le contenu du fichier
$file = array( 'logs' => array() );
/* (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;
/* (2) 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('/tmp/phone_storage_'.$subject['tmp_id'].'.json'), true );
/* (3) On enregistre les contacts */
$file['contacts'] = array();
foreach($mini as $miniData){
// On récupère les données du contact associé
$contact = $contacts[ $miniData['contact'] ];
// On remplit les données qui iront dans le fichier pour ce contact
array_push($file['contacts'], array(
'id' => $miniData['contact'],
'number' => $contact['number'],
'name' => self::readableName($contact['username'], $contact['firstname'], $contact['lastname']),
'sexe' => $miniData['sexe'],
'age' => $miniData['age'],
'studies' => $miniData['studies'],
'reltype' => $miniData['reltype'],
'dist' => $miniData['loc']
));
}
/* (4) On ajoute les données du sujet */
$file['subject'] = array(
'number' => $subject['number'],
'name' => self::readableName($subject['username'], $subject['firstname'], $subject['lastname'])
);
// on cržée un id unique pour cet utilisateur à partir de son numéro
$subject_id = (string) $subject_id;
/* (5) On met le contenu en json */
$file = json_encode($file, JSON_PRETTY_PRINT);
/* (6) On l'enregistre dans le fichier */
$written = file_put_contents( __ROOT__.'/tmp/phone_storage_'.$subject['tmp_id'].'.json', $file);
// Si erreur d'écriture
if( $written === false )
return array( 'ModuleError' => ManagerError::ModuleError );
/* (7) On renomme le fichier avec le nouvel identifiant */
if( !rename('/tmp/phone_storage_'.$subject['tmp_id'].'.json', '/tmp/phone_storage_'.$subject_id.'.json') )
return array( 'ModuleError' => ManagerError::ModuleError ); // si erreur -> erreur
/* [n] Gestion du retour
2016-04-30 10:19:51 +00:00
=========================================================*/
return array(
'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id,
'created' => $closest_id
2016-04-30 10:19:51 +00:00
);
}
}
?>