407 lines
11 KiB
PHP
407 lines
11 KiB
PHP
<?php
|
|
|
|
namespace manager\module;
|
|
use \manager\sessionManager;
|
|
use \manager\Database;
|
|
use \manager\ManagerError;
|
|
use \manager\ModuleRequest;
|
|
use \manager\Repo;
|
|
use \manager\lightdb;
|
|
|
|
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);
|
|
|
|
/* [0] On récupère l'id unique actuel
|
|
=========================================================*/
|
|
$funiq = fopen( __ROOT__.'/src/dynamic/phone/uniqid', 'r+' );
|
|
flock($funiq, LOCK_EX); // On verrouille le fichier
|
|
$uniqid = fgets( $funiq );
|
|
|
|
if( !is_numeric($uniqid) )
|
|
$uniqid = 0;
|
|
|
|
// Décalage à appliquer à tous les ids
|
|
$offset = intval($uniqid) + 2;
|
|
|
|
// on enregistre l'id du sujet
|
|
$subject_id = intval($uniqid) + 1;
|
|
|
|
// Contiendra la valeur de l'id maximum
|
|
$maxId = 0;
|
|
|
|
|
|
|
|
|
|
/* [1] On récupère les logs s'ils existent
|
|
=========================================================*/
|
|
// Contiendra le contenu du fichier
|
|
$file = array( 'logs' => array() );
|
|
|
|
|
|
/* (1) On définit les 2 fichiers utiles */
|
|
$tmpfile = __ROOT__.'/tmp/phone_'.$subject['tmp_id'].'.json';
|
|
|
|
/* (2) 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 && file_exists($tmpfile);
|
|
|
|
|
|
/* (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($tmpfile), true );
|
|
|
|
// erreur
|
|
if( $file == null )
|
|
return array( 'ModuleRequest' => ManagerError::ParsingFailed );
|
|
|
|
// On incrémente tous les ids de l'offset
|
|
foreach($file['logs'] as $i=>$log){
|
|
$file['logs'][$i]['id'] = $offset + $log['id'];
|
|
|
|
if( $log['id'] > $maxId )
|
|
$maxId = (int) $log['id'];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [2] On enregistre les données du sujet
|
|
=========================================================*/
|
|
$file['subject'] = array(
|
|
'id' => $offset + $subject_id,
|
|
'name' => self::readableName($subject['username'], $subject['firstname'], $subject['lastname'])
|
|
);
|
|
|
|
|
|
/* [3] On enregistre les contacts des MINI
|
|
=========================================================*/
|
|
$file['contacts'] = array();
|
|
|
|
foreach($mini as $miniData){
|
|
// On récupère les données du contact associé
|
|
$contact = $contacts[ $miniData['uid'] ];
|
|
|
|
if( $miniData['uid'] > $maxId )
|
|
$maxId = (int) $miniData['uid'];
|
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
array_push($file['contacts'], array(
|
|
'id' => $offset + $miniData['uid'],
|
|
'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']
|
|
));
|
|
|
|
}
|
|
|
|
|
|
/* [4] On enregistre les contacts des FICHES
|
|
=========================================================*/
|
|
foreach($fiches as $ficheData){
|
|
// On récupère les données du contact associé
|
|
$contact = $contacts[ $ficheData['uid'] ];
|
|
|
|
if( $ficheData['uid'] > $maxId )
|
|
$maxId = (int) $ficheData['uid'];
|
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
array_push($file['contacts'], array(
|
|
'id' => $offset + $ficheData['uid'],
|
|
'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']
|
|
));
|
|
|
|
}
|
|
|
|
|
|
/* [5] On enregistre les relations de la MATRICE
|
|
=========================================================*/
|
|
$file['relations'] = array();
|
|
|
|
foreach($matrice as $A=>$Bs)
|
|
foreach($Bs as $B)
|
|
array_push($file['relations'], array(
|
|
'idA' => $offset + $A,
|
|
'idB' => $offset + $B
|
|
));
|
|
|
|
|
|
/* [6] On enregistre tout dans 'lightdb'
|
|
=========================================================*/
|
|
$db = new lightdb('phone_db', __ROOT__.'/src/dynamic/');
|
|
$db->insert( $subject_id, $file );
|
|
$db->close();
|
|
|
|
/* [7] On met à jour le nouvel ID unique
|
|
=========================================================*/
|
|
// $maxId += $offset;
|
|
rewind($funiq); // On revient au début du fichier
|
|
fwrite($funiq, $offset+$maxId); // On écrit la nouvelle valeur (forcément plus grande)
|
|
flock($funiq, LOCK_UN); // On débloque le verrou
|
|
fclose($funiq);
|
|
|
|
/* [8] On supprime le fichier temporaire si existe
|
|
=========================================================*/
|
|
if( file_exists($tmpfile) )
|
|
unlink($tmpfile);
|
|
|
|
|
|
/* [9] Gestion du retour
|
|
=========================================================*/
|
|
return array(
|
|
'ModuleError' => ManagerError::Success,
|
|
'subject_id' => $subject_id
|
|
);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE FACEBOOK
|
|
*
|
|
* @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 facebook($params){
|
|
extract($params);
|
|
|
|
/* [0] On récupère l'id unique actuel
|
|
=========================================================*/
|
|
$funiq = fopen( __ROOT__.'/src/dynamic/facebook/uniqid', 'r+' );
|
|
flock($funiq, LOCK_EX); // On verrouille le fichier
|
|
$uniqid = fgets( $funiq );
|
|
|
|
if( !is_numeric($uniqid) )
|
|
$uniqid = 0;
|
|
|
|
// Décalage à appliquer à tous les ids
|
|
$offset = intval($uniqid) + 2;
|
|
|
|
// on enregistre l'id du sujet
|
|
$subject_id = intval($uniqid) + 1;
|
|
|
|
// Contiendra la valeur de l'id maximum
|
|
$maxId = 0;
|
|
|
|
|
|
|
|
/* [1] On enregistre les données du sujet
|
|
=========================================================*/
|
|
$file['subject'] = array(
|
|
'id' => $offset + $subject_id,
|
|
'name' => self::readableName($subject['username'], $subject['firstname'], $subject['lastname'])
|
|
);
|
|
|
|
|
|
/* [2] On enregistre les contacts des MINI
|
|
=========================================================*/
|
|
$file['contacts'] = array();
|
|
|
|
foreach($mini as $miniData){
|
|
// On récupère les données du contact associé
|
|
$contact = $contacts[ $miniData['uid'] ];
|
|
|
|
if( $miniData['uid'] > $maxId )
|
|
$maxId = (int) $miniData['uid'];
|
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
array_push($file['contacts'], array(
|
|
'id' => $offset + $miniData['uid'],
|
|
'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']
|
|
));
|
|
|
|
}
|
|
|
|
|
|
/* [3] On enregistre les contacts des FICHES
|
|
=========================================================*/
|
|
foreach($fiches as $ficheData){
|
|
// On récupère les données du contact associé
|
|
$contact = $contacts[ $ficheData['uid'] ];
|
|
|
|
if( $ficheData['uid'] > $maxId )
|
|
$maxId = (int) $ficheData['uid'];
|
|
|
|
// On remplit les données qui iront dans le fichier pour ce contact
|
|
array_push($file['contacts'], array(
|
|
'id' => $offset + $ficheData['uid'],
|
|
'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']
|
|
));
|
|
|
|
}
|
|
|
|
|
|
/* [4] On enregistre les relations de la MATRICE
|
|
=========================================================*/
|
|
$file['relations'] = array();
|
|
|
|
foreach($matrice as $A=>$Bs)
|
|
foreach($Bs as $B)
|
|
array_push($file['relations'], array(
|
|
'idA' => $offset + $A,
|
|
'idB' => $offset + $B
|
|
));
|
|
|
|
|
|
/* [5] On enregistre tout dans 'lightdb'
|
|
=========================================================*/
|
|
$db = new lightdb('facebook_db', __ROOT__.'/src/dynamic/');
|
|
$db->insert( $subject_id, $file );
|
|
$db->close();
|
|
|
|
/* [6] On met à jour le nouvel ID unique
|
|
=========================================================*/
|
|
// $maxId += $offset;
|
|
rewind($funiq); // On revient au début du fichier
|
|
fwrite($funiq, $offset+$maxId); // On écrit la nouvelle valeur (forcément plus grande)
|
|
flock($funiq, LOCK_UN); // On débloque le verrou
|
|
fclose($funiq);
|
|
|
|
|
|
/* [7] Gestion du retour
|
|
=========================================================*/
|
|
return array(
|
|
'ModuleError' => ManagerError::Success,
|
|
'subject_id' => $subject_id
|
|
);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|