2016-05-12 20:13:37 +00:00
< ? php
namespace manager\module ;
use \manager\Database ;
use \manager\sessionManager ;
use \manager\ModuleRequest ;
use \manager\ManagerError ;
use \manager\Repo ;
2016-05-18 08:08:34 +00:00
use \manager\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
* @ phone < Boolean > Si TRUE , prend en compte les données des questionnaires cellulaires
* @ facebook < Boolean > Si TRUE , prend en compte les données des questionnaires facebook
* @ survey < Boolean > Si TRUE , prend en compte les données des questionnaires ResTIC
* @ 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-09-12 16:04:53 +00:00
$subjects = ! is_array ( $subjects ) ? [] : $subjects ;
2016-05-21 16:27:10 +00:00
$phone = ! is_bool ( $phone ) ? false : $phone ;
$facebook = ! is_bool ( $facebook ) ? false : $facebook ;
$survey = ! is_bool ( $survey ) ? false : $survey ;
$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-09-11 10:06:40 +00:00
$dict = file_get_contents ( __ROOT__ . '/src/dynamic/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-05-20 17:29:18 +00:00
/* [ 1 ] On construit l ' arborescence des données
=========================================================*/
2016-09-12 16:04:53 +00:00
$output = [
'common_' => [
2016-05-20 17:29:18 +00:00
'contacts' => '' ,
'relations' => '' ,
'dict' => ''
2016-09-12 16:04:53 +00:00
],
'logs/' => [] // Contiendra les journaux d'appels
];
2016-05-20 17:29:18 +00:00
2016-05-13 12:59:18 +00:00
2016-05-21 13:42:08 +00:00
/* [ 2 ] On construit les fichiers de chaque sujet DE TELEPHONE
2016-05-17 14:51:24 +00:00
=========================================================*/
2016-05-21 16:27:10 +00:00
if ( $phone ){ // Si @phone vaut TRUE
2016-05-18 08:08:34 +00:00
2016-05-21 16:27:10 +00:00
// On ouvre une instance de la base de données
$db = new lightdb ( 'phone_db' , __ROOT__ . '/src/dynamic/' );
2016-05-18 08:08:34 +00:00
2016-05-21 16:27:10 +00:00
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
2016-05-18 08:08:34 +00:00
2016-05-21 16:27:10 +00:00
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
2016-05-18 08:08:34 +00:00
2016-05-21 16:27:10 +00:00
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
2016-05-20 17:29:18 +00:00
2016-05-21 16:27:10 +00:00
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
2016-05-12 20:13:37 +00:00
2016-05-21 16:27:10 +00:00
/* (2) On construit le log s'il existe */
$output [ 'logs/' ][ $subjectId ] = self :: parseCSV ( $subjectData [ 'logs' ], $dict [ 'logs' ]);
2016-05-18 08:08:34 +00:00
2016-05-21 16:27:10 +00:00
/* (3) On complète les relations */
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $subjectData [ 'relations' ], [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-05-12 20:13:37 +00:00
2016-05-21 16:27:10 +00:00
/* (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
}
// On ferme l'instance de la base de données
$db -> close ();
}
2016-05-12 20:13:37 +00:00
2016-05-21 13:42:08 +00:00
/* [ 3 ] On construit les fichiers de chaque sujet DE FACEBOOK
=========================================================*/
2016-05-21 16:27:10 +00:00
if ( $facebook ){ // Si @facebook vaut TRUE
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// On ouvre une instance de la base de données
$db = new lightdb ( 'facebook_db' , __ROOT__ . '/src/dynamic/' );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
/* (2) On complète les relations */
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $subjectData [ 'relations' ], [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
/* (3) 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
}
// On ferme l'instance de la base de données
$db -> close ();
}
2016-05-21 13:42:08 +00:00
/* [ 4 ] On construit les fichiers de chaque sujet DE FORMULAIRE
=========================================================*/
2016-05-21 16:27:10 +00:00
if ( $survey ){ // Si @survey vaut TRUE
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// On ouvre une instance de la base de données
$db = new lightdb ( 'survey_db' , __ROOT__ . '/src/dynamic/' );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
/* (2) On complète les relations */
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $subjectData [ 'relations' ], [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-05-21 16:27:10 +00:00
/* (3) 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
2016-05-21 13:42:08 +00:00
2016-05-21 16:27:10 +00:00
}
// On ferme l'instance de la base de données
$db -> close ();
}
2016-05-21 13:42:08 +00:00
/* [ 5 ] On ajoute le dictionnaire
2016-05-20 17:08:58 +00:00
=========================================================*/
2016-05-20 17:29:18 +00:00
$output [ 'common_' ][ '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-05-20 17:29:18 +00:00
$output [ 'common_' ][ '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 ();
$fname = '/tmp/' . time () . '.zip' ;
$zip -> open ( $fname , \ZipArchive :: CREATE );
2016-05-12 20:13:37 +00:00
2016-05-20 17:29:18 +00:00
foreach ( $output as $folder => $files ){
2016-05-18 08:08:34 +00:00
foreach ( $files as $file => $content )
2016-05-18 14:21:42 +00:00
if ( strlen ( $content ) > 0 )
2016-05-20 17:29:18 +00:00
$zip -> addFromString ( $folder . $file . '.csv' , $content );
2016-05-18 08:08:34 +00:00
}
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
* @ phone < Boolean > Si TRUE , prend en compte les données des questionnaires cellulaires
* @ facebook < Boolean > Si TRUE , prend en compte les données des questionnaires facebook
* @ survey < Boolean > Si TRUE , prend en compte les données des questionnaires ResTIC
* @ 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-09-12 16:04:53 +00:00
$subjects = ! is_array ( $subjects ) ? [] : $subjects ;
2016-06-01 15:06:18 +00:00
$phone = ! is_bool ( $phone ) ? false : $phone ;
$facebook = ! is_bool ( $facebook ) ? false : $facebook ;
$survey = ! is_bool ( $survey ) ? false : $survey ;
$all = ! is_bool ( $all ) ? false : $all ;
/* [ 0 ] On récupère le dictionnaire
=========================================================*/
2016-09-11 10:06:40 +00:00
$dict = file_get_contents ( __ROOT__ . '/src/dynamic/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
/* [ 1 ] On construit l ' arborescence des données
=========================================================*/
2016-09-12 16:04:53 +00:00
$output = [
'common_' => [
2016-06-01 15:06:18 +00:00
'contacts' => '' ,
'relations' => '' ,
'dict' => ''
2016-09-12 16:04:53 +00:00
],
'logs/' => [] // Contiendra les journaux d'appels
];
2016-06-01 15:06:18 +00:00
/* [ 2 ] On construit les fichiers de chaque sujet DE TELEPHONE
=========================================================*/
if ( $phone ){ // Si @phone vaut TRUE
// On ouvre une instance de la base de données
$db = new lightdb ( 'phone_db' , __ROOT__ . '/src/dynamic/' );
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
/* (2) On construit le log s'il existe */
$output [ 'logs/' ][ $subjectId ] = self :: parseCSV ( $subjectData [ 'logs' ], $dict [ 'logs' ]);
/* (3) On complète les relations */
// {1} On retire les valeurs ou le type = 0 //
2016-09-12 16:04:53 +00:00
$formattedRelations = [];
2016-06-01 15:06:18 +00:00
foreach ( $subjectData [ 'relations' ] as $i => $relation )
if ( $relation [ 'type' ] != 0 )
2016-09-12 16:04:53 +00:00
array_push ( $formattedRelations , [
2016-06-01 15:06:18 +00:00
'source' => $relation [ 'idA' ],
'target' => $relation [ 'idB' ],
2016-06-02 16:52:12 +00:00
'weight' => ( $relation [ 'idA' ] == $subjectId ) ? . 1 : 1 , // plus de poids aux relations alter/alter
'type' => 'Undirected'
2016-09-12 16:04:53 +00:00
]);
2016-06-01 15:06:18 +00:00
// {2} On ajoute au contenu //
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $formattedRelations , [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-06-01 15:06:18 +00:00
/* (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
}
// On ferme l'instance de la base de données
$db -> close ();
}
/* [ 3 ] On construit les fichiers de chaque sujet DE FACEBOOK
=========================================================*/
if ( $facebook ){ // Si @facebook vaut TRUE
// On ouvre une instance de la base de données
$db = new lightdb ( 'facebook_db' , __ROOT__ . '/src/dynamic/' );
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
/* (2) On complète les relations */
// {1} On retire les valeurs ou le type = 0 //
2016-09-12 16:04:53 +00:00
$formattedRelations = [];
2016-06-01 15:06:18 +00:00
foreach ( $subjectData [ 'relations' ] as $i => $relation )
if ( $relation [ 'type' ] != 0 )
2016-09-12 16:04:53 +00:00
array_push ( $formattedRelations , [
2016-06-01 15:06:18 +00:00
'source' => $relation [ 'idA' ],
'target' => $relation [ 'idB' ],
2016-06-02 16:52:12 +00:00
'weight' => ( $relation [ 'idA' ] == $subjectId ) ? . 1 : 1 , // plus de poids aux relations alter/alter
'type' => 'Undirected'
2016-09-12 16:04:53 +00:00
]);
2016-06-01 15:06:18 +00:00
// {2} On ajoute au contenu //
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $formattedRelations , [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-06-01 15:06:18 +00:00
/* (3) 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
}
// On ferme l'instance de la base de données
$db -> close ();
}
/* [ 4 ] On construit les fichiers de chaque sujet DE FORMULAIRE
=========================================================*/
if ( $survey ){ // Si @survey vaut TRUE
// On ouvre une instance de la base de données
$db = new lightdb ( 'survey_db' , __ROOT__ . '/src/dynamic/' );
// Si on doit prendre tous les sujets, on les récupère
if ( $all )
$subjects = array_keys ( $db -> index () );
// Pour chaque sujet
foreach ( $subjects as $s => $subjectId ){
/* (1) On récupère les données du sujet en cours */
$subjectData = $db -> fetch ( $subjectId );
// Si on ne trouve rien, on passe au suivant
if ( $subjectData === false )
continue ;
/* (2) On complète les relations */
// {1} On retire les valeurs ou le type = 0 //
2016-09-12 16:04:53 +00:00
$formattedRelations = [];
2016-06-01 15:06:18 +00:00
foreach ( $subjectData [ 'relations' ] as $i => $relation )
if ( $relation [ 'type' ] != 0 ) // On retire les relations ego/alter
2016-09-12 16:04:53 +00:00
array_push ( $formattedRelations , [
2016-06-01 15:06:18 +00:00
'source' => $relation [ 'idA' ],
'target' => $relation [ 'idB' ],
2016-06-02 16:52:12 +00:00
'weight' => ( $relation [ 'idA' ] == $subjectId ) ? . 1 : 1 , // plus de poids aux relations alter/alter
'type' => 'Undirected'
2016-09-12 16:04:53 +00:00
]);
2016-06-01 15:06:18 +00:00
// {2} On ajoute au contenu //
2016-09-12 16:04:53 +00:00
$output [ 'common_' ][ 'relations' ] .= self :: parseCSV ( $formattedRelations , [], strlen ( $output [ 'common_' ][ 'relations' ]) == 0 ); // On affiche les colonnes pour la première fois uniquement
2016-06-01 15:06:18 +00:00
/* (3) 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
}
// On ferme l'instance de la base de données
$db -> close ();
}
/* [ 5 ] On ajoute le dictionnaire
=========================================================*/
$output [ 'common_' ][ 'dict' ] .= " \" sheet \" ; \" field \" ; \" key \" ; \" value \" \r \n " ;
foreach ( $dict as $ds => $dataset )
foreach ( $dataset as $f => $field )
foreach ( $field as $key => $value )
$output [ 'common_' ][ 'dict' ] .= " \" $ds\ " ; \ " $f\ " ; \ " $key\ " ; \ " $value\ " \r\n " ;
/* [ 6 ] Création de l ' archive
=========================================================*/
$zip = new \ZipArchive ();
$fname = '/tmp/' . time () . '.zip' ;
$zip -> open ( $fname , \ZipArchive :: CREATE );
foreach ( $output as $folder => $files ){
foreach ( $files as $file => $content )
if ( strlen ( $content ) > 0 )
$zip -> addFromString ( $folder . $file . '.csv' , $content );
}
$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 );
$menu_json = json_decode ( file_get_contents ( __ROOT__ . '/config/menu.json' ), true );
// 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
}
?>