Update + refactor storage en cours
This commit is contained in:
parent
fd724ece9d
commit
93112cdd44
|
@ -1,3 +1,5 @@
|
||||||
.ftpconfig
|
.ftpconfig
|
||||||
sftp-config.json
|
sftp-config.json
|
||||||
phpunit/coverage/
|
phpunit/coverage/
|
||||||
|
*/tmp/*
|
||||||
|
/build/lightdb/storage/*/data
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
/* [1] On definit les chemins absolus si c'est pas deja fait
|
/* [1] On definit les chemins absolus si c'est pas deja fait
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( !defined('__ROOT__') ) define('__ROOT__', dirname(__FILE__) );
|
if( !defined('__ROOT__') ) define('__ROOT__', dirname(__FILE__) );
|
||||||
if( !defined('__CONFIG__') ) define('__CONFIG__', __ROOT__.'/config' );
|
if( !defined('__CONFIG__') ) define('__CONFIG__', __ROOT__.'/config' );
|
||||||
if( !defined('__BUILD__') ) define('__BUILD__', __ROOT__.'/build' );
|
if( !defined('__BUILD__') ) define('__BUILD__', __ROOT__.'/build' );
|
||||||
if( !defined('__PUBLIC__') ) define('__PUBLIC__', __ROOT__.'/public_html' );
|
if( !defined('__PUBLIC__') ) define('__PUBLIC__', __ROOT__.'/public_html' );
|
||||||
if( !defined('__TMP__') ) define('__TMP__', __ROOT__.'/public_html/tmp' );
|
if( !defined('__TMP__') ) define('__TMP__', __ROOT__.'/public_html/tmp' );
|
||||||
|
|
||||||
|
|
||||||
/* ACTIVE LE DEBUGGAGE (WARNING + EXCEPTION)
|
/* ACTIVE LE DEBUGGAGE (WARNING + EXCEPTION)
|
||||||
|
|
|
@ -193,12 +193,12 @@
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( $fromAjax ){
|
if( $fromAjax ){
|
||||||
|
|
||||||
|
$tmpfname = 'download_'.uniqid().'.php';
|
||||||
$tmpfname = '/tmp/download_'.uniqid().'.php';
|
$link = '/tmp/'.$tmpfname;
|
||||||
$bodyfname = __BUILD__.'/tmp/content_'.uniqid().'.php';
|
$bodyfname = __TMP__.'/content_'.uniqid().'.php';
|
||||||
|
|
||||||
/* (1) On crée le fichier temporaire */
|
/* (1) On crée le fichier temporaire */
|
||||||
$tmpfnameroot = __BUILD__.$tmpfname;
|
$tmpfnameroot = __TMP__.'/'.$tmpfname;
|
||||||
$tmpfile = fopen($tmpfnameroot, 'w');
|
$tmpfile = fopen($tmpfnameroot, 'w');
|
||||||
|
|
||||||
fwrite($tmpfile, '<?php'.PHP_EOL);
|
fwrite($tmpfile, '<?php'.PHP_EOL);
|
||||||
|
@ -227,7 +227,7 @@
|
||||||
chmod($tmpfnameroot, 0775);
|
chmod($tmpfnameroot, 0775);
|
||||||
|
|
||||||
$response = new ModuleResponse(ManagerError::Success);
|
$response = new ModuleResponse(ManagerError::Success);
|
||||||
$response->append('link', $tmpfname);
|
$response->append('link', $link);
|
||||||
|
|
||||||
return $response;
|
return $response;
|
||||||
|
|
||||||
|
|
|
@ -142,15 +142,15 @@
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
/* (0) Gestion du formattage des paramètres */
|
/* (0) Gestion du formattage des paramètres */
|
||||||
$subjects = !is_array($subjects) ? [] : $subjects;
|
$subjects = !is_array($subjects) ? [] : $subjects;
|
||||||
$phone = !is_bool($phone) ? false : $phone;
|
$phone = !is_bool($phone) ? false : $phone;
|
||||||
$facebook = !is_bool($facebook) ? false : $facebook;
|
$facebook = !is_bool($facebook) ? false : $facebook;
|
||||||
$survey = !is_bool($survey) ? false : $survey;
|
$survey = !is_bool($survey) ? false : $survey;
|
||||||
$all = !is_bool($all) ? false : $all;
|
$all = !is_bool($all) ? false : $all;
|
||||||
|
|
||||||
/* [0] On récupère le dictionnaire
|
/* [0] On récupère le dictionnaire
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$dict = file_get_contents(__BUILD__.'/src/dynamic/dictionary.json');
|
$dict = file_get_contents(__BUILD__.'/lightdb/storage/dictionary.json');
|
||||||
|
|
||||||
/* (2) Si une erreur pour le fichier de conf */
|
/* (2) Si une erreur pour le fichier de conf */
|
||||||
if( $dict === false )
|
if( $dict === false )
|
||||||
|
@ -176,6 +176,143 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [2] Export contacts/relations des sujets selectionnés
|
||||||
|
=========================================================*/
|
||||||
|
$contacts = [];
|
||||||
|
$relations = [];
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) Contacts exportés de `survey_db`
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$db = new lightdb('survey_db');
|
||||||
|
|
||||||
|
/* (1) On selectionne les clés des sujets à extraire */
|
||||||
|
if( $all )
|
||||||
|
$subjectIds = array_keys( $db->index() );
|
||||||
|
|
||||||
|
/* (2) Pour chaque sujet */
|
||||||
|
foreach($subjectIds as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (3) On récupère les données du sujet */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// si erreur -> suivant
|
||||||
|
if( $subjectData === false ) continue;
|
||||||
|
|
||||||
|
/* (4) On complète les contacts */
|
||||||
|
if( isset($subjectData['contacts']) ){
|
||||||
|
|
||||||
|
foreach($subjectData['contacts'] as $c=>$contact){
|
||||||
|
|
||||||
|
/* (5) Si le contact à déja été saisi de manière plus compléte -> suivant */
|
||||||
|
// déja saisi
|
||||||
|
$alreadyStored = isset($contacts[ intval($contact['id']) ]);
|
||||||
|
// si mini saisie et qu'on a la fiche -> on doit compléter
|
||||||
|
$moreData = $alreadyStored && isset($contacts[ intval($contact['id']) ]['studies1']) && isset($contact['studies2']);
|
||||||
|
|
||||||
|
// si on NE doit PAS saisir/compléter
|
||||||
|
if( $alreadyStored && !$moreData )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (6) On saisit/complète */
|
||||||
|
$contacts[ intval($contact['id']) ] = $contact;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) Contacts exportés de `phone_db`
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$db = new lightdb('phone_db');
|
||||||
|
|
||||||
|
/* (1) On selectionne les clés des sujets à extraire */
|
||||||
|
if( $all )
|
||||||
|
$subjectIds = array_keys( $db->index() );
|
||||||
|
|
||||||
|
/* (2) Pour chaque sujet */
|
||||||
|
foreach($subjectIds as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (3) On récupère les données du sujet */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// si erreur -> suivant
|
||||||
|
if( $subjectData === false ) continue;
|
||||||
|
|
||||||
|
/* (4) On complète les contacts */
|
||||||
|
if( isset($subjectData['contacts']) ){
|
||||||
|
|
||||||
|
foreach($subjectData['contacts'] as $c=>$contact){
|
||||||
|
|
||||||
|
/* (5) Si le contact à déja été saisi de manière plus compléte -> suivant */
|
||||||
|
// déja saisi
|
||||||
|
$alreadyStored = isset($contacts[ intval($contact['id']) ]);
|
||||||
|
// si mini saisie et qu'on a la fiche -> on doit compléter
|
||||||
|
$moreData = $alreadyStored && isset($contacts[ intval($contact['id']) ]['studies1']) && isset($contact['studies2']);
|
||||||
|
|
||||||
|
// si on NE doit PAS saisir/compléter
|
||||||
|
if( $alreadyStored && !$moreData )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (6) On saisit/complète */
|
||||||
|
$contacts[ intval($contact['id']) ] = $contact;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (3) Contacts exportés de `facebook_db`
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$db = new lightdb('facebook_db');
|
||||||
|
|
||||||
|
/* (1) On selectionne les clés des sujets à extraire */
|
||||||
|
if( $all )
|
||||||
|
$subjectIds = array_keys( $db->index() );
|
||||||
|
|
||||||
|
/* (2) Pour chaque sujet */
|
||||||
|
foreach($subjectIds as $s=>$subjectId){
|
||||||
|
|
||||||
|
/* (3) On récupère les données du sujet */
|
||||||
|
$subjectData = $db->fetch($subjectId);
|
||||||
|
|
||||||
|
// si erreur -> suivant
|
||||||
|
if( $subjectData === false ) continue;
|
||||||
|
|
||||||
|
/* (4) On complète les contacts */
|
||||||
|
if( isset($subjectData['contacts']) ){
|
||||||
|
|
||||||
|
foreach($subjectData['contacts'] as $c=>$contact){
|
||||||
|
|
||||||
|
/* (5) Si le contact à déja été saisi de manière plus compléte -> suivant */
|
||||||
|
// déja saisi
|
||||||
|
$alreadyStored = isset($contacts[ intval($contact['id']) ]);
|
||||||
|
// si mini saisie et qu'on a la fiche -> on doit compléter
|
||||||
|
$moreData = $alreadyStored && isset($contacts[ intval($contact['id']) ]['studies1']) && isset($contact['studies2']);
|
||||||
|
|
||||||
|
// si on NE doit PAS saisir/compléter
|
||||||
|
if( $alreadyStored && !$moreData )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (6) On saisit/complète */
|
||||||
|
$contacts[ intval($contact['id']) ] = $contact;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var_dump($contacts);
|
||||||
|
exit();
|
||||||
|
|
||||||
|
|
||||||
/* [2] On construit les fichiers de chaque sujet DE TELEPHONE
|
/* [2] On construit les fichiers de chaque sujet DE TELEPHONE
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
if( $phone ){ // Si @phone vaut TRUE
|
if( $phone ){ // Si @phone vaut TRUE
|
||||||
|
@ -198,10 +335,12 @@
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* (3) On complète les relations */
|
/* (3) On complète les relations */
|
||||||
$output['common_']['relations'] .= self::parseCSV($subjectData['relations'], [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
if( isset($subjectData['relations']) )
|
||||||
|
$output['common_']['relations'] .= self::parseCSV($subjectData['relations'], [], strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
/* (4) On ajoute les contacts à la liste */
|
/* (4) On ajoute les contacts à la liste */
|
||||||
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
if( isset($subjectData['contacts']) )
|
||||||
|
$output['common_']['contacts'] .= self::parseCSV($subjectData['contacts'], $dict['contacts'], strlen($output['common_']['contacts']) == 0 ); // On affiche les colonnes pour la première fois uniquement
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +446,7 @@
|
||||||
/* [6] Création de l'archive
|
/* [6] Création de l'archive
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$zip = new \ZipArchive();
|
$zip = new \ZipArchive();
|
||||||
$fname = '/tmp/'.time().'.zip';
|
$fname = __TMP__.'/'.time().'.zip';
|
||||||
$zip->open($fname, \ZipArchive::CREATE);
|
$zip->open($fname, \ZipArchive::CREATE);
|
||||||
|
|
||||||
foreach($output as $folder=>$files){
|
foreach($output as $folder=>$files){
|
||||||
|
@ -565,7 +704,7 @@
|
||||||
/* [6] Création de l'archive
|
/* [6] Création de l'archive
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$zip = new \ZipArchive();
|
$zip = new \ZipArchive();
|
||||||
$fname = '/tmp/'.time().'.zip';
|
$fname = __TMP__.'/'.time().'.zip';
|
||||||
$zip->open($fname, \ZipArchive::CREATE);
|
$zip->open($fname, \ZipArchive::CREATE);
|
||||||
|
|
||||||
foreach($output as $folder=>$files){
|
foreach($output as $folder=>$files){
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function phone($params){
|
public static function xphone($params){
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
/* [0] On récupère l'id unique actuel
|
/* [0] On récupère l'id unique actuel
|
||||||
|
@ -45,40 +45,13 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// /* [1] On récupère les logs s'ils existent
|
/* [1] On initialise nos storages
|
||||||
// =========================================================*/
|
=========================================================*/
|
||||||
// // Contiendra le contenu du fichier
|
|
||||||
$file = [
|
$file = [
|
||||||
"subject" => "",
|
"subject" => "",
|
||||||
"contacts" => [],
|
"contacts" => [],
|
||||||
"relations" => []
|
"relations" => []
|
||||||
];
|
];
|
||||||
// $file = [ 'logs' => [] ];
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /* (1) On définit les 2 fichiers utiles */
|
|
||||||
// $tmpfile = __BUILD__.'/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 [ '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'];
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -377,43 +350,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE TÉLÉPHONIQUE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* TRAITE LES DONNÉES D'UN FORMULAIRE DE TYPE FACEBOOK
|
|
||||||
*
|
*
|
||||||
* @subject<Array> Tableau contenant les données du sujet
|
* @subject<Array> Tableau contenant les données du sujet
|
||||||
* @contacts<Array> Tableau contenant les données des contacts
|
* @contacts<Array> Tableau contenant les données des contacts
|
||||||
|
@ -423,7 +360,7 @@
|
||||||
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
* @return subject_id<int> Retourne l'id sujet de l'enquête
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function facebook($params){
|
public static function xphone($params){
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
/* [0] On récupère l'id unique actuel
|
/* [0] On récupère l'id unique actuel
|
||||||
|
@ -455,32 +392,347 @@
|
||||||
"contacts" => [],
|
"contacts" => [],
|
||||||
"relations" => []
|
"relations" => []
|
||||||
];
|
];
|
||||||
// $file = [ 'logs' => [] ];
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// /* (1) On définit les 2 fichiers utiles */
|
|
||||||
// $tmpfile = __BUILD__.'/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 */
|
/* [2] On enregistre les données du sujet
|
||||||
// $storage_already = is_string($subject['tmp_id']) && strlen($subject['tmp_id']) == 40 && file_exists($tmpfile);
|
=========================================================*/
|
||||||
//
|
/* (1) On crée le sujet */
|
||||||
//
|
$file['subject'] = [ 'id' => $subject_id ];
|
||||||
// /* (3) Si on a déja crée le fichier, on essaie de récupérer son contenu */
|
|
||||||
// if( $storage_already ){
|
/* (2) On récupère ses contacts facebook */
|
||||||
// $file = json_decode( file_get_contents($tmpfile), true );
|
// {2.1} On récupère les données du sujet //
|
||||||
//
|
$lfacebook = new lightdb('facebook_db');
|
||||||
// // erreur
|
$lfacebook = $lfacebook->fetch($subject_id);
|
||||||
// if( $file == null )
|
|
||||||
// return [ 'ModuleRequest' => ManagerError::ParsingFailed ];
|
// {2.2} si n'existe pas, on a un tableau vide //
|
||||||
//
|
if( $lfacebook === false )
|
||||||
// // On incrémente tous les ids de l'offset
|
$lfacebook = [ 'contacts' => [] ];
|
||||||
// foreach($file['logs'] as $i=>$log){
|
|
||||||
// $file['logs'][$i]['id'] = $offset + $log['id'];
|
if( !isset($lfacebook['contacts']) )
|
||||||
//
|
$lfacebook['contacts'] = [];
|
||||||
// if( $log['id'] > $maxId )
|
|
||||||
// $maxId = (int) $log['id'];
|
|
||||||
// }
|
/* (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']
|
||||||
|
];
|
||||||
|
|
||||||
|
// 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']]) )
|
||||||
|
break;
|
||||||
|
|
||||||
|
$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']) )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* (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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (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']);
|
||||||
|
|
||||||
|
/* (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]) );
|
||||||
|
|
||||||
|
array_push($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('phone_db');
|
||||||
|
$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, $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 [
|
||||||
|
'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 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" => []
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -70,8 +70,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||||
*
|
*
|
||||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||||
|
@ -125,20 +123,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
||||||
*
|
*
|
||||||
* @file<FILE> Pointeur vers $_FILES['']
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
@ -291,31 +275,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
[]
|
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"3":{"line":0,"hash":"e9aff02e50eb56a848c3580c8a119a5cbe0ec64b"}}
|
{"3":{"line":0,"hash":"e9aff02e50eb56a848c3580c8a119a5cbe0ec64b"},"1":{"line":1,"hash":"99e868e35cdf0e36df88a54a7f03f6eff8966cf0"}}
|
|
@ -0,0 +1 @@
|
||||||
|
[]
|
|
@ -1 +1 @@
|
||||||
3901
|
3903
|
|
@ -0,0 +1,26 @@
|
||||||
|
### Notation
|
||||||
|
|
||||||
|
> lightdb `a` take the value `c` at key `b`
|
||||||
|
> "aL:b -> c"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### I. New subject survey
|
||||||
|
|
||||||
|
INPUT: id_subject, contacts[], relations[]
|
||||||
|
LIGHTDB: subjectL, contactL,
|
||||||
|
BEGIN
|
||||||
|
```
|
||||||
|
|
||||||
|
// initialisation des données du sujet (contact par name)
|
||||||
|
subjectL:id_subject -> [ ]
|
||||||
|
|
||||||
|
// On enregistre chaque contact
|
||||||
|
foreach contacts[] as i=>contact
|
||||||
|
contactL:uniqid -> contact[i]
|
||||||
|
subjectL:id_subject[contact[i].name] = uniqid++;
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
END
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?php define('__ROOT__', dirname(__DIR__));
|
||||||
|
|
||||||
|
require_once __ROOT__.'/autoloader.php';
|
||||||
|
|
||||||
|
use \lightdb\core\lightdb;
|
||||||
|
|
||||||
|
$sl = new lightdb('subject');
|
||||||
|
$cl = new lightdb('contact');
|
||||||
|
|
||||||
|
echo "New subject survey\nT";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
|
@ -24,8 +24,8 @@ $pers = $request->answer();
|
||||||
<h4>Exporter les données au format .csv</h4>
|
<h4>Exporter les données au format .csv</h4>
|
||||||
|
|
||||||
<strong>Choix des sujets</strong>
|
<strong>Choix des sujets</strong>
|
||||||
<br><input type='radio' name='export_subject-group' data-name='group' id='export_group_0' value='all' ><label for='export_group_0'>Tous les sujets</label>
|
<br><input type='radio' name='export_subject-group' data-name='group' id='export_group_0' value='all' checked><label for='export_group_0'>Tous les sujets</label>
|
||||||
<br><input type='radio' name='export_subject-group' data-name='group' id='export_group_1' value='sel' checked><label for='export_group_1'>Les sujets selectionnés uniquement</label>
|
<br><input type='radio' name='export_subject-group' data-name='group' id='export_group_1' value='sel' ><label for='export_group_1'>Les sujets selectionnés uniquement</label>
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<article style='display: inline;' id='export_subject-list'>
|
<article style='display: inline;' id='export_subject-list'>
|
||||||
|
@ -34,9 +34,9 @@ $pers = $request->answer();
|
||||||
<input type='button' id='export_add-subject' class='primary' value='+' style='padding:.2em .6em; margin: .5em 0'>
|
<input type='button' id='export_add-subject' class='primary' value='+' style='padding:.2em .6em; margin: .5em 0'>
|
||||||
|
|
||||||
<br><br><br><strong>Types de données</strong>
|
<br><br><br><strong>Types de données</strong>
|
||||||
<br><br><input type='checkbox' data-name='phone' value='1' id='export_phone_0' ><label for='export_phone_0'>Données cellulaires</label>
|
<br><br><input type='checkbox' data-name='phone' value='1' id='export_phone_0' checked><label for='export_phone_0'>Données cellulaires</label>
|
||||||
<br><br><input type='checkbox' data-name='facebook' value='1' id='export_facebook_0'><label for='export_facebook_0'>Données Facebook</label>
|
<br><br><input type='checkbox' data-name='facebook' value='1' id='export_facebook_0' checked><label for='export_facebook_0'>Données Facebook</label>
|
||||||
<br><br><input type='checkbox' data-name='restic' value='1' id='export_restic_0' ><label for='export_restic_0'>Données <i>Lab Surveys</i></label>
|
<br><br><input type='checkbox' data-name='restic' value='1' id='export_restic_0' checked><label for='export_restic_0'>Données <i>Lab Surveys</i></label>
|
||||||
|
|
||||||
<br><br><input type='submit' class='primary hover' style='padding:.5em 2em;' value='Télécharger' id='export_export-all'>
|
<br><br><input type='submit' class='primary hover' style='padding:.5em 2em;' value='Télécharger' id='export_export-all'>
|
||||||
</section>
|
</section>
|
||||||
|
|
Loading…
Reference in New Issue