NxTIC/manager/module/input.php

271 lines
8.1 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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';
}
}
/* 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
*
* @return subject_id<int> Retourne l'id sujet de l'enquête
*
*/
public static function phone($params){
extract($params);
/* [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
=========================================================*/
$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 );
}
}
}
/* [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
=========================================================*/
return array(
'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id,
'created' => $closest_id
);
}
}
?>