2016-05-12 20:13:37 +00:00
|
|
|
<?php
|
|
|
|
|
2016-10-18 13:11:37 +00:00
|
|
|
namespace api\module;
|
2016-11-05 10:56:03 +00:00
|
|
|
use \database\core\DatabaseDriver;
|
2016-05-12 20:13:37 +00:00
|
|
|
use \manager\sessionManager;
|
2016-10-18 13:11:37 +00:00
|
|
|
use \api\core\ModuleRequest;
|
2016-05-12 20:13:37 +00:00
|
|
|
use \manager\ManagerError;
|
2016-10-18 13:11:37 +00:00
|
|
|
use \database\core\Repo;
|
|
|
|
use \lightdb\core\lightdb;
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
class download{
|
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* CONSTRUIT UN CONTENU CSV A PARTIR DES DONNEES @DATA ET DU DICTIONNAIRE @DICT
|
|
|
|
*
|
|
|
|
* @data<Array> Tableau contenant les valeurs
|
|
|
|
* @dict<Array> Tableau contenant le dictionnaire des valeurs
|
2016-05-20 17:08:58 +00:00
|
|
|
* @displayColumns<Boolean> VRAI s'il faut afficher les colonnes
|
2016-05-13 12:59:18 +00:00
|
|
|
*
|
|
|
|
* @return csvContent<String> Retourne le contenu CSV associé
|
|
|
|
*
|
|
|
|
*/
|
2016-05-20 17:08:58 +00:00
|
|
|
private static function parseCSV($data, $dict, $displayColumns=true){
|
2016-05-13 12:59:18 +00:00
|
|
|
$output = ''; // Contiendra le résultat
|
|
|
|
$dictKeys = array_keys($dict); // Contient les clés de @dict
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* [0] On récupère toutes les colonnes
|
|
|
|
=========================================================*/
|
2016-09-12 16:04:53 +00:00
|
|
|
$columns = []; // Contiendra les colonnes
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (1) Pour chaque set de @data */
|
|
|
|
foreach($data as $dataset){
|
2016-09-12 16:04:53 +00:00
|
|
|
$keys = [];
|
2016-05-13 09:14:41 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (2) Pour chaque champ de chaque set de @data, on ajoute les clés */
|
|
|
|
foreach($dataset as $key=>$value){
|
2016-05-13 09:14:41 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
// {1} Si c'est un tableau -> on ajoute les sous-clés //
|
|
|
|
if( is_array($value) )
|
|
|
|
foreach($value as $subIndex=>$subValue)
|
|
|
|
array_push( $keys, "${key}_$subIndex" );
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
// {2} Si c'est une valeur simple -> on ajoute la clé //
|
|
|
|
else
|
|
|
|
array_push( $keys, $key );
|
2016-05-13 09:14:41 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
}
|
2016-05-13 09:14:41 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (3) On ajoute à chaque fois les clés du set à la liste des colonnes */
|
|
|
|
$columns = array_unique( array_merge( $columns, $keys ) );
|
|
|
|
}
|
2016-05-13 09:14:41 +00:00
|
|
|
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* [1] On ajoute les colonnes à la sortie
|
|
|
|
=========================================================*/
|
2016-05-20 17:08:58 +00:00
|
|
|
if( $displayColumns )
|
|
|
|
foreach($columns as $i=>$column)
|
|
|
|
$output .= ($i < count($columns)-1) ? "\"$column\";" : "\"$column\"\r\n";
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* [2] On récupère les valeurs et on les ajoute à la sortie
|
|
|
|
=========================================================*/
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (1) Pour chaque set de @data */
|
|
|
|
foreach($data as $dataset){
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (2) Pour chaque colonne */
|
|
|
|
foreach($columns as $c=>$column){
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (3) On décompose la colonne (ne change que si elle l'est) */
|
|
|
|
$col = explode('_', $column);
|
|
|
|
$composed = true;
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
// Si il n'existe pas une 2me partie numérique, on annule la décomposition
|
|
|
|
if( !isset($col[1]) || !is_numeric($col[1]) ){
|
2016-09-12 16:04:53 +00:00
|
|
|
$col = [ $column ];
|
2016-05-13 12:59:18 +00:00
|
|
|
$composed = false;
|
|
|
|
}
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
/* (4) Si la colonne existe dans le set actuel */
|
|
|
|
if( isset($dataset[$col[0]]) ){
|
|
|
|
|
|
|
|
/* (5) Si c'est une valeur composée, on récupère la valeur */
|
|
|
|
if( $composed && isset($dataset[$col[0]][$col[1]]) )
|
|
|
|
|
|
|
|
// {1} Si valeur dans le dictionnaire, on fait modulo le nombre de choix possibles //
|
|
|
|
if( isset($dict[$col[0]]) )
|
|
|
|
$output .= "\"".( $dataset[$col[0]][$col[1]] % count($dict[$col[0]]) )."\"";
|
|
|
|
// {2} Si pas dans le dictionnaire, on laisse la valeur //
|
|
|
|
else
|
|
|
|
$output .= "\"".$dataset[$col[0]][$col[1]]."\"";
|
|
|
|
|
2016-05-27 08:39:39 +00:00
|
|
|
/* (6) Si la valeur n'est pas composée, on récupère la valeur */
|
|
|
|
elseif( !$composed && !is_array($dataset[$col[0]]) )
|
2016-05-13 12:59:18 +00:00
|
|
|
$output .= "\"".$dataset[$col[0]]."\"";
|
|
|
|
}
|
|
|
|
|
|
|
|
// On ajoute une virgule sauf à la dernière valeur
|
2016-05-13 14:06:04 +00:00
|
|
|
$output .= ($c < count($columns)-1) ? ";" : "";
|
2016-05-13 12:59:18 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$output .= "\r\n";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return $output;
|
|
|
|
}
|
2016-05-12 20:13:37 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-21 16:27:10 +00:00
|
|
|
/* DOWNLOAD D'UN FICHIER CONTENANT LES DONNEES SELECTIONNEES
|
|
|
|
*
|
|
|
|
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
|
|
|
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
|
|
|
*
|
|
|
|
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
|
|
|
*
|
|
|
|
*/
|
2016-05-20 17:43:37 +00:00
|
|
|
public static function multiple($params){
|
2016-05-17 14:51:24 +00:00
|
|
|
extract($params);
|
2016-05-13 12:59:18 +00:00
|
|
|
|
2016-05-21 13:42:08 +00:00
|
|
|
/* (0) Gestion du formattage des paramètres */
|
2016-11-22 10:06:03 +00:00
|
|
|
$subjects = !is_array($subjects) ? [] : $subjects;
|
|
|
|
$all = !is_bool($all) ? false : $all;
|
2016-05-13 12:59:18 +00:00
|
|
|
|
2016-05-18 08:08:34 +00:00
|
|
|
/* [0] On récupère le dictionnaire
|
|
|
|
=========================================================*/
|
2016-11-22 10:06:03 +00:00
|
|
|
$dict = file_get_contents(__BUILD__.'/lightdb/storage/dictionary.json');
|
2016-05-13 12:59:18 +00:00
|
|
|
|
2016-05-18 14:04:17 +00:00
|
|
|
/* (2) Si une erreur pour le fichier de conf */
|
|
|
|
if( $dict === false )
|
2016-09-12 16:04:53 +00:00
|
|
|
return [ 'ModuleError' => ManagerError::UnreachableResource ];
|
2016-05-18 14:04:17 +00:00
|
|
|
|
|
|
|
/* (3) On récupère la config sous forme de tableau */
|
|
|
|
$dict = json_decode( $dict, true );
|
|
|
|
|
|
|
|
/* (4) Si erreur de PARSAGE */
|
|
|
|
if( !is_array($dict) )
|
2016-09-12 16:04:53 +00:00
|
|
|
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* [1] Initialisation
|
2016-05-20 17:29:18 +00:00
|
|
|
=========================================================*/
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (1) Fichiers de sortie */
|
2016-09-12 16:04:53 +00:00
|
|
|
$output = [
|
2016-11-23 16:53:24 +00:00
|
|
|
'contacts.fiche' => '', // contiendra les contacts et leurs données fiches
|
|
|
|
'contacts.mini' => '', // contiendra les contacts et leurs données mini
|
|
|
|
'relations' => '', // contiendra les relations
|
|
|
|
'dict' => '' // contiendra le dictionnaire de valeurs
|
2016-09-12 16:04:53 +00:00
|
|
|
];
|
2016-05-20 17:29:18 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (2) Base de données */
|
|
|
|
$subjectdb = new lightdb('subject');
|
|
|
|
$contactdb = new lightdb('contact');
|
2016-05-20 17:29:18 +00:00
|
|
|
|
2016-05-13 12:59:18 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* [2] On construit la liste des sujets
|
2016-11-22 10:06:03 +00:00
|
|
|
=========================================================*/
|
2016-11-23 16:53:24 +00:00
|
|
|
$subjectindexes = array_keys($subjectdb->index());
|
|
|
|
$subjectids = [];
|
2016-11-22 10:06:03 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (1) On récupère tous les sujets si c'est spécifié */
|
|
|
|
if( $all )
|
2016-11-22 10:06:03 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
$subjectids = $subjectindexes;
|
2016-11-22 10:06:03 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (2) Sinon on retire les ids incorrects */
|
|
|
|
else
|
2016-11-22 10:06:03 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
foreach($subjects as $i=>$id)
|
|
|
|
if( in_array($id, $subjectindexes) )
|
|
|
|
$subjectids[] = intval($id);
|
2016-11-22 10:06:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (3) Si aucun sujet restant -> error */
|
|
|
|
if( count($subjectids) === 0 )
|
|
|
|
return ['ModuleError' => ManagerError::ParamError];
|
2016-11-22 10:06:03 +00:00
|
|
|
|
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* [3] Export contacts/relations des sujets selectionnés
|
2016-05-17 14:51:24 +00:00
|
|
|
=========================================================*/
|
2016-11-23 16:53:24 +00:00
|
|
|
foreach($subjectids as $subid){
|
2016-05-18 08:08:34 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (1) On récupère les données du sujet */
|
|
|
|
$subject = $subjectdb->fetch($subid);
|
2016-05-18 08:08:34 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
// si pas trouvé -> suivant
|
|
|
|
if( $subject === false )
|
|
|
|
continue;
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (2) Si aucun contact -> suivant */
|
|
|
|
if( !isset($subject['contacts']) || !is_array($subject['contacts']) )
|
|
|
|
continue;
|
2016-05-21 13:42:08 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (3) Pour chaque contact */
|
|
|
|
foreach($subject['contacts'] as $c=>$contactid){
|
2016-05-21 13:42:08 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
// {3.1} On récupère le contact //
|
|
|
|
$contact = $contactdb->fetch($contactid);
|
2016-05-21 13:42:08 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
// si pas trouvé -> suivant
|
|
|
|
if( $contact === false )
|
2016-05-21 16:27:10 +00:00
|
|
|
continue;
|
2016-05-21 13:42:08 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
// {3.2} On ajoute le contact au fichier des FICHES //
|
|
|
|
if( array_key_exists('studies2', $contact) )
|
|
|
|
// On affiche les colonnes pour le premier contact uniquement
|
|
|
|
$output['contacts.fiche'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['contacts.fiche']) == 0 );
|
2016-05-21 13:42:08 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
// {3.3} On ajoute le contact au fichier des MINI //
|
|
|
|
if( array_key_exists('studies1', $contact) )
|
|
|
|
// On affiche les colonnes pour le premier contact uniquement
|
|
|
|
$output['contacts.mini'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['contacts.mini']) == 0 );
|
2016-05-21 16:27:10 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (4) Si aucune relation -> suivant */
|
|
|
|
if( !isset($subject['relations']) || !is_array($subject['relations']) )
|
|
|
|
continue;
|
2016-05-21 16:27:10 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
/* (5) On ajoute les relations */
|
|
|
|
$output['relations'] .= self::parseCSV($subject['relations'], [], strlen($output['relations']) == 0 );
|
2016-05-21 13:42:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-21 16:27:10 +00:00
|
|
|
}
|
2016-05-21 13:42:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* [5] On ajoute le dictionnaire
|
2016-05-20 17:08:58 +00:00
|
|
|
=========================================================*/
|
2016-11-23 16:53:24 +00:00
|
|
|
$output['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
2016-05-20 17:08:58 +00:00
|
|
|
foreach($dict as $ds=>$dataset)
|
|
|
|
foreach($dataset as $f=>$field)
|
|
|
|
foreach($field as $key=>$value)
|
2016-11-23 16:53:24 +00:00
|
|
|
$output['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
2016-05-20 17:08:58 +00:00
|
|
|
|
|
|
|
|
2016-05-21 13:42:08 +00:00
|
|
|
/* [6] Création de l'archive
|
2016-05-17 14:51:24 +00:00
|
|
|
=========================================================*/
|
|
|
|
$zip = new \ZipArchive();
|
2016-11-22 10:06:03 +00:00
|
|
|
$fname = __TMP__.'/'.time().'.zip';
|
2016-05-17 14:51:24 +00:00
|
|
|
$zip->open($fname, \ZipArchive::CREATE);
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-18 08:08:34 +00:00
|
|
|
|
2016-11-23 16:53:24 +00:00
|
|
|
foreach($output as $file=>$content)
|
|
|
|
if( strlen($content) > 0 )
|
|
|
|
$zip->addFromString($file.'.csv', $content);
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-17 14:51:24 +00:00
|
|
|
$zip->close();
|
2016-05-12 20:13:37 +00:00
|
|
|
|
2016-05-12 21:29:25 +00:00
|
|
|
|
2016-05-17 14:51:24 +00:00
|
|
|
/* [5] On lance le téléchargement
|
|
|
|
=========================================================*/
|
2016-09-12 16:04:53 +00:00
|
|
|
return [
|
2016-05-12 21:29:25 +00:00
|
|
|
'ModuleError' => ManagerError::Success,
|
2016-09-12 16:04:53 +00:00
|
|
|
'headers' => [
|
2016-05-13 14:06:04 +00:00
|
|
|
'Content-Type' => 'application/zip; charset=utf-8',
|
2016-06-08 19:56:12 +00:00
|
|
|
'Content-Disposition' => 'attachment; filename=export'.date('_d_m_Y', time()).'.zip',
|
2016-05-18 14:29:02 +00:00
|
|
|
'Pragma' => 'no-cache',
|
|
|
|
'Expires' => '0'
|
2016-09-12 16:04:53 +00:00
|
|
|
],
|
2016-05-18 14:29:02 +00:00
|
|
|
'body' => file_get_contents($fname)
|
2016-09-12 16:04:53 +00:00
|
|
|
];
|
2016-05-18 14:29:02 +00:00
|
|
|
}
|
|
|
|
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* EXPORT POUR GEPHI OU AUTRE LOGICIEL SUR LE PRINCIPE NODES+EDGES
|
|
|
|
*
|
|
|
|
* @subjects<Array> Liste des identifiants des sujets à prendre en compte
|
|
|
|
* @all<Boolean> Si TRUE, prend en compte tous les sujets (annule @subjects)
|
|
|
|
*
|
|
|
|
* @return data<File> Retourne une archive .zip contenant toutes les données sélectionnées
|
|
|
|
*/
|
|
|
|
public static function chart($params){
|
|
|
|
extract($params);
|
|
|
|
|
|
|
|
/* (0) Gestion du formattage des paramètres */
|
2016-11-24 16:21:32 +00:00
|
|
|
$subjects = !is_array($subjects) ? [] : $subjects;
|
|
|
|
$all = !is_bool($all) ? false : $all;
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
/* [0] On récupère le dictionnaire
|
|
|
|
=========================================================*/
|
2016-11-24 16:21:32 +00:00
|
|
|
$dict = file_get_contents(__BUILD__.'/lightdb/storage/dictionary.json');
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
/* (2) Si une erreur pour le fichier de conf */
|
|
|
|
if( $dict === false )
|
2016-09-12 16:04:53 +00:00
|
|
|
return [ 'ModuleError' => ManagerError::UnreachableResource ];
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
/* (3) On récupère la config sous forme de tableau */
|
|
|
|
$dict = json_decode( $dict, true );
|
|
|
|
|
|
|
|
/* (4) Si erreur de PARSAGE */
|
|
|
|
if( !is_array($dict) )
|
2016-09-12 16:04:53 +00:00
|
|
|
return [ 'ModuleError' => ManagerError::ParsingFailed ];
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* [1] Initialisation
|
2016-06-01 15:06:18 +00:00
|
|
|
=========================================================*/
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (1) Fichiers de sortie */
|
2016-09-12 16:04:53 +00:00
|
|
|
$output = [
|
2016-11-24 16:21:32 +00:00
|
|
|
'gephi.nodes' => '', // contiendra les contacts et leurs données
|
|
|
|
'gephi.edges' => '', // contiendra les relations
|
|
|
|
'dict' => '' // contiendra le dictionnaire de valeurs
|
2016-09-12 16:04:53 +00:00
|
|
|
];
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (2) Base de données */
|
|
|
|
$subjectdb = new lightdb('subject');
|
|
|
|
$contactdb = new lightdb('contact');
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* [2] On construit la liste des sujets
|
2016-06-01 15:06:18 +00:00
|
|
|
=========================================================*/
|
2016-11-24 16:21:32 +00:00
|
|
|
$subjectindexes = array_keys($subjectdb->index());
|
|
|
|
$subjectids = [];
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (1) On récupère tous les sujets si c'est spécifié */
|
|
|
|
if( $all )
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
$subjectids = $subjectindexes;
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (2) Sinon on retire les ids incorrects */
|
|
|
|
else
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
foreach($subjects as $i=>$id)
|
|
|
|
if( in_array($id, $subjectindexes) )
|
|
|
|
$subjectids[] = intval($id);
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (3) Si aucun sujet restant -> error */
|
|
|
|
if( count($subjectids) === 0 )
|
|
|
|
return ['ModuleError' => ManagerError::ParamError];
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* [3] Export contacts/relations des sujets selectionnés
|
2016-06-01 15:06:18 +00:00
|
|
|
=========================================================*/
|
2016-11-24 16:21:32 +00:00
|
|
|
foreach($subjectids as $subid){
|
|
|
|
|
|
|
|
/* (1) On récupère les données du sujet */
|
|
|
|
$subject = $subjectdb->fetch($subid);
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
// si pas trouvé -> suivant
|
|
|
|
if( $subject === false )
|
|
|
|
continue;
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (2) Si aucun contact -> suivant */
|
|
|
|
if( !isset($subject['contacts']) || !is_array($subject['contacts']) )
|
|
|
|
continue;
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (3) Pour chaque contact */
|
|
|
|
foreach($subject['contacts'] as $c=>$contactid){
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
// {3.1} On récupère le contact //
|
|
|
|
$contact = $contactdb->fetch($contactid);
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
// si pas trouvé -> suivant
|
|
|
|
if( $contact === false )
|
2016-06-01 15:06:18 +00:00
|
|
|
continue;
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
// {3.2} On ajoute le contact au fichier des FICHES //
|
|
|
|
if( array_key_exists('studies2', $contact) ){
|
|
|
|
// On affiche les colonnes pour le premier contact uniquement
|
|
|
|
$contact['type'] = 'fiche';
|
|
|
|
$output['gephi.nodes'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['gephi.nodes']) == 0 );
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
// {3.3} On ajoute le contact au fichier des MINI //
|
|
|
|
}elseif( array_key_exists('studies1', $contact) ){
|
|
|
|
// On affiche les colonnes pour le premier contact uniquement
|
|
|
|
$contact['type'] = 'mini';
|
|
|
|
$output['gephi.nodes'] .= self::parseCSV([$contact], $dict['contacts'], strlen($output['gephi.nodes']) == 0 );
|
|
|
|
}
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (4) Si aucune relation -> suivant */
|
|
|
|
if( !isset($subject['relations']) || !is_array($subject['relations']) )
|
|
|
|
continue;
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
/* (5) On ajoute les relations */
|
|
|
|
foreach($subject['relations'] as $r=>$rel)
|
2016-06-01 15:06:18 +00:00
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
$output['gephi.edges'] .= self::parseCSV(
|
|
|
|
[[
|
|
|
|
'source' => $rel['idA'],
|
|
|
|
'target' => $rel['idB'],
|
|
|
|
'weight' => ($rel['idA']==$subid) ? .5 : 1,
|
|
|
|
'type' => 'Undirected'
|
|
|
|
]],
|
|
|
|
[],
|
|
|
|
strlen($output['gephi.edges']) == 0
|
|
|
|
);
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] On ajoute le dictionnaire
|
|
|
|
=========================================================*/
|
2016-11-24 16:21:32 +00:00
|
|
|
$output['dict'] .= "\"sheet\";\"field\";\"key\";\"value\"\r\n";
|
2016-06-01 15:06:18 +00:00
|
|
|
foreach($dict as $ds=>$dataset)
|
|
|
|
foreach($dataset as $f=>$field)
|
|
|
|
foreach($field as $key=>$value)
|
2016-11-24 16:21:32 +00:00
|
|
|
$output['dict'] .= "\"$ds\";\"$f\";\"$key\";\"$value\"\r\n";
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
|
|
|
|
/* [6] Création de l'archive
|
|
|
|
=========================================================*/
|
|
|
|
$zip = new \ZipArchive();
|
2016-11-22 10:06:03 +00:00
|
|
|
$fname = __TMP__.'/'.time().'.zip';
|
2016-06-01 15:06:18 +00:00
|
|
|
$zip->open($fname, \ZipArchive::CREATE);
|
|
|
|
|
|
|
|
|
2016-11-24 16:21:32 +00:00
|
|
|
foreach($output as $file=>$content)
|
|
|
|
if( strlen($content) > 0 )
|
|
|
|
$zip->addFromString($file.'.csv', $content);
|
2016-06-01 15:06:18 +00:00
|
|
|
|
|
|
|
$zip->close();
|
|
|
|
|
|
|
|
|
|
|
|
/* [5] On lance le téléchargement
|
|
|
|
=========================================================*/
|
2016-09-12 16:04:53 +00:00
|
|
|
return [
|
2016-06-01 15:06:18 +00:00
|
|
|
'ModuleError' => ManagerError::Success,
|
2016-09-12 16:04:53 +00:00
|
|
|
'headers' => [
|
2016-06-01 15:06:18 +00:00
|
|
|
'Content-Type' => 'application/zip; charset=utf-8',
|
2016-06-08 19:56:12 +00:00
|
|
|
'Content-Disposition' => 'attachment; filename=graphics'.date('_d_m_Y', time()).'.zip',
|
2016-06-01 15:06:18 +00:00
|
|
|
'Pragma' => 'no-cache',
|
|
|
|
'Expires' => '0'
|
2016-09-12 16:04:53 +00:00
|
|
|
],
|
2016-06-01 15:06:18 +00:00
|
|
|
'body' => file_get_contents($fname)
|
2016-09-12 16:04:53 +00:00
|
|
|
];
|
2016-06-01 15:06:18 +00:00
|
|
|
}
|
|
|
|
|
2016-09-11 10:06:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* RENVOIE LE CONTENU DU MENU
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public static function menu($params){
|
|
|
|
extract($params);
|
|
|
|
|
2016-10-18 13:11:37 +00:00
|
|
|
$menu_json = json_decode( file_get_contents(__CONFIG__.'/menu.json'), true );
|
2016-09-11 10:06:40 +00:00
|
|
|
|
|
|
|
// si erreur
|
|
|
|
if( $menu_json == null )
|
|
|
|
return ['ModuleError' => ManagerError::ParsingFailed];
|
|
|
|
|
|
|
|
// si tout bon
|
|
|
|
return [
|
|
|
|
'ModuleError' => ManagerError::Success,
|
|
|
|
'menu' => $menu_json
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2016-05-12 20:13:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
?>
|