NxTIC/build/api/module/input.php

1002 lines
30 KiB
PHP
Raw Normal View History

2016-04-30 10:19:51 +00:00
<?php
namespace api\module;
2016-04-30 10:19:51 +00:00
use \manager\sessionManager;
use \database\core\DatabaseDriver;
2016-04-30 10:19:51 +00:00
use \manager\ManagerError;
use \api\core\ModuleRequest;
use \database\core\Repo;
use \lightdb\core\lightdb;
2016-04-30 10:19:51 +00:00
2016-06-20 05:54:40 +00:00
2016-04-30 10:19:51 +00:00
class input{
/* 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){
2016-04-30 10:19:51 +00:00
extract($params);
/* [1] On récupère l'id unique actuel
2016-04-30 10:19:51 +00:00
=========================================================*/
$funiq = fopen( __BUILD__.'/lightdb/storage/uniqid', 'r+' );
2016-05-17 15:05:32 +00:00
flock($funiq, LOCK_EX); // On verrouille le fichier
$uniqid = fgets( $funiq );
2016-05-17 14:51:24 +00:00
if( !is_numeric($uniqid) )
$uniqid = 0;
2016-05-17 14:51:24 +00:00
// Décalage à appliquer à tous les ids
$offset = intval($uniqid) + 1;
2016-05-18 08:08:34 +00:00
// on enregistre l'id du sujet
$subject_id = intval($subject['subject_id']);
2016-05-18 08:08:34 +00:00
2016-05-17 14:51:24 +00:00
// Contiendra la valeur de l'id maximum
$maxId = $offset;
2016-05-17 14:51:24 +00:00
/* [2] On initialise nos variables (lightdb + autres)
2016-11-22 10:06:03 +00:00
=========================================================*/
/* (1) Fichiers de sortie */
$file = [
"subject" => "",
"relations" => []
];
/* (2) Bases de données */
$subjectdb = new lightdb('subject');
$contactdb = new lightdb('contact');
/* [3] Données du sujet
=========================================================*/
$subject_set = $subjectdb->fetch($subject_id);
/* (1) Si le sujet n'existe pas -> ERROR */
if( $subject_set === false )
return ['ModuleError'=>ManagerError::UnreachableResource];
/* (2) Initialisation des contacts si vide */
if( !isset($subject_set['contacts']) )
$subject_set['contacts'] = [];
/* (3) Initialisation des relations si vide */
if( !isset($subject_set['relations']) )
$subject_set['relations'] = [];
/* (4) On récupère les noms des contacts */
$contactsById = []; // idContact -> nomContact
foreach($subject_set['contacts'] as $contactId){
$contactId = intval($contactId);
$contactData = $contactdb->fetch( $contactId );
$contactsById[$contactId] = $contactData['name'];
}
/* [4] On saisit les fiches + les contacts des fiches
=========================================================*/
$contactsDone = [
"existing" => [], // Contacts exportés déja enregistrés
"username" => [] // Nouveaux contacts déja enregistrés
];
$finalid = []; // id_contact -> id_final_contact (existant ou nouveau)
foreach($fiches as $f=>$ficheData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$ficheData['contact']]) )
break;
$contact = $contacts[ $ficheData['contact'] ];
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $contactsById[ intval($contact['existing']) ];
$existingData = $dbcontact->fetch( intval($contact['existing']) );
$finalid[ intval($contact['uid']) ] = $newId;
// S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte
if( is_array($existingData) && isset($existingData['studies2']) || in_array($contact['existing'], $contactsDone['existing']) )
break;
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$contact['uid']);
$uname = $contact['username'];
$finalid[ intval($contact['uid']) ] = $newId;
// S'il a déja été saisi, on quitte
if( in_array($contact['username'], $contactsDone['username']) )
break;
}
2016-05-17 14:51:24 +00:00
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
/* (5) On enregistre les données du contact */
$contactdb->insert($newId, [
'id' => $newId,
'name' => $uname,
'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'],
'quartier' => $ficheData['quartier'],
'duration' => $ficheData['duration'],
'context' => $ficheData['context'],
'contextExtra' => $ficheData['contextSpecial'],
'freq' => $ficheData['freq'],
'connect' => $ficheData['connect'],
'connectExtra' => $ficheData['connectSpecial']
] );
// On ajoute le contact dans la liste des contacts du sujet (si pas déja)
if( !in_array($newId, $subject_set['contacts']) )
$subject_set['contacts'][] = $newId;
// On enregistre la relation avec EGO
$subject_set['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms
];
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
}
/* [5] On enregistre les mini + les contacts des mini
=========================================================*/
foreach($mini as $miniData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$miniData['contact']]) )
break;
$contact = $contacts[ $miniData['contact'] ];
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $contactsById[ intval($contact['existing']) ];
$existingData = $dbcontact->fetch( intval($contact['existing']) );
$finalid[ intval($contact['uid']) ] = $newId;
// S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte
if( is_array($existingData) && isset($existingData['studies2']) || in_array($contact['existing'], $contactsDone['existing']) )
break;
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$miniData['uid']);
$uname = $contact['username'];
$finalid[ intval($contact['uid']) ] = $newId;
// S'il a déja été saisi, on quitte
if( in_array($contact['username'], $contactsDone['username']) )
break;
}
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
// On remplit les données qui iront dans le fichier pour ce contact
$contactdb->insert($newId, [
'id' => $newId,
'name' => $uname,
'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']
] );
// On ajoute le contact dans la liste des contacts du sujet (si pas déja)
if( !in_array($newId, $subject_set['contacts']) )
$subject_set['contacts'][] = $newId;
// On enregistre la relation avec EGO
$subject_set['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => 2 // relation cellulaire mineure
];
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
}
/* [6] On enregistre les relations de la MATRICE
=========================================================*/
$clen = count($finalid);
/* (1) On récupére les ids des contacts */
$cIdList = [];
foreach($finalid as $lastid=>$newid){
$id = (int) $lastid;
if( !in_array($id, $cIdList) )
$cIdList[$id] = null;
}
ksort($cIdList);
/* (2) On remplit les relations */
foreach($cIdList as $y=>$yNull){
foreach($cIdList as $x=>$xNull)
if( $x < $y ){ // On affiche que sous la diagonale
// Si relation alter-alter
$relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y])
|| ( isset($matrice[$x]) && in_array($y, $matrice[$x]) );
$subject_set['relations'][] = [
2016-11-22 13:34:05 +00:00
'idA' => $finalid[$x],
'idB' => $finalid[$y],
'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter
];
}
}
/* [6] On les données du sujet
2016-05-17 14:51:24 +00:00
=========================================================*/
$subjectdb->insert($subject_id, $subject_set);
/* [7] On enregistre les données des contacts
=========================================================*/
2016-11-22 13:34:05 +00:00
/* (1) On enregistre chaque contact */
foreach($file['contacts'] as $c=>$contactData)
$contactdb->insert($contactData['id'], $contactData);
/* [7] On met à jour le nouvel ID unique
=========================================================*/
rewind($funiq); // On revient au début du fichier
fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande)
flock($funiq, LOCK_UN); // On débloque le verrou
fclose($funiq);
/* [9] Gestion du retour
=========================================================*/
return [
'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id
];
}
2016-11-22 10:06:03 +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
*
* @return subject_id<int> Retourne l'id sujet de l'enquête
*
*/
public static function xphone($params){
extract($params);
/* [0] On récupère l'id unique actuel
=========================================================*/
$funiq = fopen( __BUILD__.'/lightdb/storage/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) + 1;
// on enregistre l'id du sujet
$subject_id = $subject['subject_id'];
// Contiendra la valeur de l'id maximum
$maxId = $offset;
// /* [1] On récupère les logs s'ils existent
// =========================================================*/
// // Contiendra le contenu du fichier
$file = [
"subject" => "",
"contacts" => [],
"relations" => []
];
/* [2] On enregistre les données du sujet
=========================================================*/
/* (1) On crée le sujet */
$file['subject'] = [ 'id' => $subject_id ];
/* (2) On récupère ses contacts facebook */
// {2.1} On récupère les données du sujet //
$lfacebook = new lightdb('facebook_db');
$lfacebook = $lfacebook->fetch($subject_id);
// {2.2} si n'existe pas, on a un tableau vide //
if( $lfacebook === false )
$lfacebook = [ 'contacts' => [] ];
if( !isset($lfacebook['contacts']) )
$lfacebook['contacts'] = [];
/* (3) On récupère ses contacts lab-surveys */
// {3.1} On récupère les données du sujet //
$lsurvey = new lightdb('survey_db');
$lsurvey = $lsurvey->fetch($subject_id);
// {3.2} si n'existe pas, on a un tableau vide //
if( $lsurvey === false )
$lsurvey = [ 'contacts' => [] ];
if( !isset($lsurvey['contacts']) )
$lsurvey['contacts'] = [];
/* (4) On récupère uniquement la liste des contacts avec le type de fiche qu'ils ont */
// {4.1} Contiendra les contacts exportés //
$exported = [
'fiche' => [],
'mini' => []
];
// {4.2} Contiendra les username des contacts exportés //
$exportedU = [];
// {4.3} On récupère les contacts facebook //
foreach($lfacebook['contacts'] as $c=>$data){
if( isset($data['studies2']) ){
$exported['fiche'][] = $data['id'];
$exportedU[$data['id']] = $data['name'];
}else
// S'il n'est pas déja dans les fiches
if( !in_array($data['id'], $exported['fiche']) ){
$exported['mini'][] = $data['id'];
$exportedU[$data['id']] = $data['name'];
}
}
// {4.4} On récupère les contacts lab-surveys //
foreach($lsurvey['contacts'] as $c=>$data){
if( isset($data['studies2']) )
// On ajoute le contact s'il n'y est pas déja
if( !in_array($data['id'], $exported['fiche']) ){
$exported['fiche'][] = $data['id'];
$exportedU['fiche'][] = $data['username'];
}
else
// On ajoute le contact s'il n'y est pas déja (ni dans mini ni dans fiche)
if( !in_array($data['id'], $exported['mini']) && !in_array($data['id'], $exported['fiche']) ){
$exported['mini'][] = $data['id'];
$exportedU['mini'][] = $data['username'];
}
}
/* [3] On enregistre les contacts des FICHES
=========================================================*/
$contactsDone = [
"existing" => [], // Contacts exportés déja enregistrés
"username" => [] // Nouveaux contacts déja enregistrés
];
foreach($fiches as $f=>$ficheData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$ficheData['uid']]) )
break;
$contact = $contacts[ $ficheData['uid'] ];
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $exportedU[intval($contact['existing'])];
// {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte //
if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) )
break;
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$ficheData['uid']);
$uname = $contact['username'];
// {3.1} S'il a déja été saisi, on quitte //
if( in_array($contact['username'], $contactsDone['username']) )
break;
}
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
// On remplit les données qui iront dans le fichier pour ce contact
$file['contacts'][] = [
'id' => $newId,
'name' => $uname,
'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'],
'quartier' => $ficheData['quartier'],
'duration' => $ficheData['duration'],
'context' => $ficheData['context'],
'contextExtra' => $ficheData['contextSpecial'],
'freq' => $ficheData['freq'],
'connect' => $ficheData['connect'],
'connectExtra' => $ficheData['connectSpecial']
];
2016-11-22 10:06:03 +00:00
// On enregistre la relation avec EGO
$file['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms
];
2016-11-22 10:06:03 +00:00
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
}
2016-11-22 10:06:03 +00:00
/* [4] On enregistre les contacts des MINI
=========================================================*/
foreach($mini as $miniData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$miniData['uid']]) )
break;
$contact = $contacts[ $miniData['uid'] ];
2016-11-22 10:06:03 +00:00
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $exportedU[intval($contact['existing'])];
// {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte //
if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) )
break;
2016-11-22 10:06:03 +00:00
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$miniData['uid']);
$uname = $contact['username'];
// {3.1} S'il a déja été saisi, on quitte //
if( in_array($contact['username'], $contactsDone['username']) )
break;
}
2016-11-22 10:06:03 +00:00
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
2016-11-22 10:06:03 +00:00
// On remplit les données qui iront dans le fichier pour ce contact
$file['contacts'][] = [
'id' => $newId,
'name' => $uname,
'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-11-22 10:06:03 +00:00
// On enregistre la relation avec EGO
$file['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => 2 // relation cellulaire mineure
];
2016-11-22 10:06:03 +00:00
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
2016-11-22 10:06:03 +00:00
}
2016-11-22 10:06:03 +00:00
/* [5] On enregistre les relations de la MATRICE
=========================================================*/
$clen = count($file['contacts']);
2016-11-22 10:06:03 +00:00
/* (1) On récupére les ids des contacts */
$cIdList = [];
foreach($file['contacts'] as $c=>$contact){
$id = (int) $c;
2016-11-22 10:06:03 +00:00
if( !in_array($id, $cIdList) )
$cIdList[$id] = null;
}
2016-11-22 10:06:03 +00:00
ksort($cIdList);
2016-11-22 10:06:03 +00:00
/* (2) On remplit les relations */
foreach($cIdList as $y=>$yNull){
foreach($cIdList as $x=>$xNull)
if( $x < $y ){ // On affiche que sous la diagonale
2016-11-22 10:06:03 +00:00
$idY = $file['contacts'][$y]['id'] - $offset;
$idX = $file['contacts'][$x]['id'] - $offset;
2016-11-22 10:06:03 +00:00
// Si relation alter-alter
$relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y])
|| ( isset($matrice[$x]) && in_array($y, $matrice[$x]) );
2016-11-22 10:06:03 +00:00
array_push($file['relations'], [
'idA' => $offset + $x,
'idB' => $offset + $y,
'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter
]);
2016-11-22 10:06:03 +00:00
}
}
2016-11-22 10:06:03 +00:00
/* [6] On enregistre tout dans 'lightdb'
=========================================================*/
$db = new lightdb('phone_db');
$db->insert( $subject_id, $file );
$db->close();
2016-11-22 10:06:03 +00:00
/* [7] On met à jour le nouvel ID unique
=========================================================*/
// $maxId += $offset;
rewind($funiq); // On revient au début du fichier
fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande)
flock($funiq, LOCK_UN); // On débloque le verrou
fclose($funiq);
2016-11-22 10:06:03 +00:00
// /* [8] On supprime le fichier temporaire si existe
// =========================================================*/
// if( file_exists($tmpfile) )
// unlink($tmpfile);
2016-11-22 10:06:03 +00:00
/* [9] Gestion du retour
=========================================================*/
return [
'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
*
*/
2016-11-22 10:06:03 +00:00
public static function xfacebook($params){
extract($params);
/* [0] On récupère l'id unique actuel
=========================================================*/
$funiq = fopen( __BUILD__.'/lightdb/storage/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) + 1;
// on enregistre l'id du sujet
$subject_id = $subject['subject_id'];
// Contiendra la valeur de l'id maximum
$maxId = $offset;
// /* [1] On récupère les logs s'ils existent
// =========================================================*/
// // Contiendra le contenu du fichier
$file = [
"subject" => "",
"contacts" => [],
"relations" => []
];
2016-11-22 10:06:03 +00:00
/* [2] On enregistre les données du sujet
=========================================================*/
/* (1) On crée le sujet */
$file['subject'] = [ 'id' => $subject_id ];
/* (2) On récupère ses contacts phone */
// {2.1} On récupère les données du sujet //
$lphone = new lightdb('phone_db');
$lphone = $lphone->fetch($subject_id);
// {2.2} si n'existe pas, on a un tableau vide //
if( $lphone === false )
$lphone = [ 'contacts' => [] ];
if( !isset($lphone['contacts']) )
$lphone['contacts'] = [];
/* (3) On récupère ses contacts lab-surveys */
// {3.1} On récupère les données du sujet //
$lsurvey = new lightdb('survey_db');
$lsurvey = $lsurvey->fetch($subject_id);
// {3.2} si n'existe pas, on a un tableau vide //
if( $lsurvey === false )
$lsurvey = [ 'contacts' => [] ];
if( !isset($lsurvey['contacts']) )
$lsurvey['contacts'] = [];
/* (4) On récupère uniquement la liste des contacts avec le type de fiche qu'ils ont */
// {4.1} Contiendra les contacts exportés //
$exported = [
'fiche' => [],
'mini' => []
];
// {4.2} Contiendra les username des contacts exportés //
$exportedU = [];
// {4.3} On récupère les contacts facebook //
foreach($lphone['contacts'] as $c=>$data){
if( isset($data['studies2']) ){
$exported['fiche'][] = $data['id'];
$exportedU[$data['id']] = $data['name'];
}else
// S'il n'est pas déja dans les fiches
if( !in_array($data['id'], $exported['fiche']) ){
$exported['mini'][] = $data['id'];
$exportedU[$data['id']] = $data['name'];
}
}
// {4.4} On récupère les contacts lab-surveys //
foreach($lsurvey['contacts'] as $c=>$data){
if( isset($data['studies2']) )
// On ajoute le contact s'il n'y est pas déja
if( !in_array($data['id'], $exported['fiche']) ){
$exported['fiche'][] = $data['id'];
$exportedU['fiche'][] = $data['username'];
}
else
// On ajoute le contact s'il n'y est pas déja (ni dans mini ni dans fiche)
if( !in_array($data['id'], $exported['mini']) && !in_array($data['id'], $exported['fiche']) ){
$exported['mini'][] = $data['id'];
$exportedU['mini'][] = $data['username'];
}
}
/* [3] On enregistre les contacts des FICHES
=========================================================*/
$contactsDone = [
"existing" => [], // Contacts exportés déja enregistrés
"username" => [] // Nouveaux contacts déja enregistrés
];
foreach($fiches as $f=>$ficheData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$ficheData['uid']]) )
continue;
$contact = $contacts[ $ficheData['uid'] ];
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $exportedU[intval($contact['existing'])];
// {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche, on quitte //
if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) )
continue;
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$ficheData['uid']);
$uname = $contact['username'];
// {3.1} S'il a déja été saisi, on quitte //
if( in_array($contact['username'], $contactsDone['username']) )
continue;
}
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
// On remplit les données qui iront dans le fichier pour ce contact
$file['contacts'][] = [
'id' => $newId,
'name' => $uname,
'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'],
'quartier' => $ficheData['quartier'],
'duration' => $ficheData['duration'],
'context' => $ficheData['context'],
'contextExtra' => $ficheData['contextSpecial'],
'freq' => $ficheData['freq'],
'connect' => $ficheData['connect'],
'connectExtra' => $ficheData['connectSpecial']
];
// On enregistre la relation avec EGO
$file['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => ($f<20) ? 4 : 5 // 4->appels 5->sms
];
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
}
/* [4] On enregistre les contacts des MINI
=========================================================*/
foreach($mini as $miniData){
/* (1) On récupère les données du contact associé */
if( !isset($contacts[$miniData['uid']]) )
continue;
$contact = $contacts[ $miniData['uid'] ];
/* (2) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) ){
$newId = (int) $contact['existing'];
$uname = $exportedU[intval($contact['existing'])];
// {2.1} S'il a déja une fiche ou qu'on a déja fait une fiche (ou mini), on quitte //
if( in_array(intval($contact['existing']), $exported['fiche']) || in_array($contact['existing'], $contactsDone['existing']) )
continue;
/* (3) Si nouveau contact */
}else{
$newId = (int) ($offset+$miniData['uid']);
$uname = $contact['username'];
// {3.1} S'il a déja été saisi, on quitte //
if( in_array($contact['username'], $contactsDone['username']) )
continue;
}
/* (4) Update du @maxId */
if( $newId > $maxId )
$maxId = (int) $newId;
// On remplit les données qui iront dans le fichier pour ce contact
$file['contacts'][] = [
'id' => $newId,
'name' => $uname,
'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']
];
// On enregistre la relation avec EGO
$file['relations'][] = [
'idA' => $subject_id,
'idB' => $newId,
'type' => 2 // relation cellulaire mineure
];
/* (x) Si le contact a été importé d'une autre enquête */
if( isset($contact['existing']) && is_numeric($contact['existing']) )
$contactsDone['existing'][] = $contact['existing'];
/* (x+1) Si nouveau contact */
else
$contactsDone['username'][] = $contact['username'];
}
/* [5] On enregistre les relations de la MATRICE
=========================================================*/
$clen = count($file['contacts']);
// var_dump($file['contacts']);
/* (1) On récupére les ids des contacts */
$cIdList = [];
foreach($file['contacts'] as $c=>$contact){
$id = (int) $c;
if( !in_array($id, $cIdList) )
$cIdList[$id] = null;
}
ksort($cIdList);
/* (2) On remplit les relations */
foreach($cIdList as $y=>$yNull){
foreach($cIdList as $x=>$xNull)
if( $x < $y ){ // On affiche que sous la diagonale
$idY = $file['contacts'][$y]['id'] - $offset;
$idX = $file['contacts'][$x]['id'] - $offset;
// Si relation alter-alter
$relationXY = isset($matrice[$y]) && in_array($x, $matrice[$y])
|| ( isset($matrice[$x]) && in_array($y, $matrice[$x]) );
$file['relations'][] = [
'idA' => $offset + $x,
'idB' => $offset + $y,
'type' => $relationXY ? 1 : 0 // 0->aucune relation 1->relation alter alter
];
}
}
/* [6] On enregistre tout dans 'lightdb'
=========================================================*/
$db = new lightdb('facebook_db');
2016-05-17 14:51:24 +00:00
$db->insert( $subject_id, $file );
$db->close();
/* [7] On met à jour le nouvel ID unique
2016-05-17 14:18:45 +00:00
=========================================================*/
2016-05-18 08:08:34 +00:00
// $maxId += $offset;
2016-05-17 15:05:32 +00:00
rewind($funiq); // On revient au début du fichier
fwrite($funiq, $maxId); // On écrit la nouvelle valeur (forcément plus grande)
2016-05-17 15:05:32 +00:00
flock($funiq, LOCK_UN); // On débloque le verrou
fclose($funiq);
2016-05-17 14:51:24 +00:00
// /* [8] On supprime le fichier temporaire si existe
// =========================================================*/
// if( file_exists($tmpfile) )
// unlink($tmpfile);
2016-05-17 14:18:45 +00:00
/* [9] Gestion du retour
2016-04-30 10:19:51 +00:00
=========================================================*/
return [
2016-04-30 10:19:51 +00:00
'ModuleError' => ManagerError::Success,
'subject_id' => $subject_id
];
2016-04-30 10:19:51 +00:00
}
}
?>