diff --git a/automate.php b/automate.php index 905ce83..61a48aa 100755 --- a/automate.php +++ b/automate.php @@ -89,18 +89,20 @@ - /* [4] Test download via AJAX =========================================================*/ // $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'; - $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); - var_dump( array_keys($db->index()) ); - $db->close(); + $req = new ModuleRequest('download/multiple', array( + 'phone' => true, + 'all' => false + )); + $res = $req->download(); - $db = new lightdb('facebook_db', __ROOT__.'/src/dynamic/'); - var_dump( array_keys($db->index()) ); - $db->close(); + if( $res->error != ManagerError::Success ) + var_dump( ManagerError::explicit($res->error) ); + + var_dump($res); // $start = microtime(true); diff --git a/config/modules.json b/config/modules.json index 1467a9f..8f472c6 100755 --- a/config/modules.json +++ b/config/modules.json @@ -254,9 +254,11 @@ "permissions": ["admin"], "options": { "download": true }, "parameters": { - "phone": { "description": "Identifiants des sujets d'enquêtes téléphoniques à intégrer.", "type": "array", "optional": true }, - "facebook": { "description": "Identifiants des sujets d'enquêtes téléphoniques à intégrer.", "type": "array", "optional": true }, - "survey": { "description": "Identifiants des sujets d'enquêtes téléphoniques à intégrer.", "type": "array", "optional": true } + "subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array", "optional": true }, + "phone": { "description": "Si vaut TRUE, renvoie les sujets cellulaires.", "type": "boolean", "optional": true }, + "facebook": { "description": "Si vaut TRUE, renvoie les sujet facebook.", "type": "boolean", "optional": true }, + "survey": { "description": "Si vaut TRUE, renvoie les sujets ResTIC.", "type": "boolean", "optional": true }, + "all": { "description": "Si vaut TRUE, renvoie tous les sujets enregistrés.", "type": "boolean", "optional": true } } } } diff --git a/manager/Database.php b/manager/Database.php index 4736f8f..995ecdf 100755 --- a/manager/Database.php +++ b/manager/Database.php @@ -165,12 +165,12 @@ //////////////////////////////////////////////////////////////// - // _ __ _ _ _ - // __ _____ _ __(_)/ _(_) ___ __ _| |_(_) ___ _ __ ___ - // \ \ / / _ \ '__| | |_| |/ __/ _` | __| |/ _ \| '_ \/ __| - // \ V / __/ | | | _| | (_| (_| | |_| | (_) | | | \__ \ - // \_/ \___|_| |_|_| |_|\___\__,_|\__|_|\___/|_| |_|___/ - // + // _ __ _ _ _ + // __ _____ _ __(_)/ _(_) ___ __ _| |_(_) ___ _ __ ___ + // \ \ / / _ \ '__| | |_| |/ __/ _` | __| |/ _ \| '_ \/ __| + // \ V / __/ | | | _| | (_| (_| | |_| | (_) | | | \__ \ + // \_/ \___|_| |_|_| |_|\___\__,_|\__|_|\___/|_| |_|___/ + // //////////////////////////////////////////////////////////////// @@ -207,10 +207,12 @@ /* [2] Si de type ARRAY(type_elements) =========================================================*/ if( preg_match('/^array<(.+)>$/', $type, $match) ){ + // Si c'est pas un tableau on retourne une erreur if( !is_array($value) ) return false; + $elements_type = $match[1]; // On verifie le type pour chaque element @@ -256,6 +258,11 @@ return $checker && is_array($value) && count($value) > 0; break; + // Boolean + case 'boolean': + return $checker && is_bool($value); + break; + // Objet non vide case 'object': return $checker && is_object($value) && count((array) $value) > 0; diff --git a/manager/ModuleRequest.php b/manager/ModuleRequest.php index f8b2a56..b565c3a 100755 --- a/manager/ModuleRequest.php +++ b/manager/ModuleRequest.php @@ -201,6 +201,7 @@ $tmpfname = '/tmp/download_'.uniqid().'.php'; + $bodyfname = __ROOT__.'/tmp/content_'.uniqid().'.php'; /* (1) On crée le fichier temporaire */ $tmpfnameroot = __ROOT__.$tmpfname; @@ -214,7 +215,6 @@ /* (3) Script qui écrira le contenu */ // 1) On écrit le contenu dans un fichier temporaire (et oui encore) - $bodyfname = __ROOT__.'/tmp/content_'.uniqid().'.php'; $bodyfile = fopen($bodyfname, 'w'); fwrite($bodyfile, $returned['body']); fclose($bodyfile); @@ -230,7 +230,7 @@ /* (5) On ferme le fichier */ fclose($tmpfile); - chmod($tmpfile, 0775); + chmod($tmpfnameroot, 0775); $response = new ModuleResponse(ManagerError::Success); $response->append('link', $tmpfname); @@ -319,7 +319,7 @@ foreach($params as $name=>$value){ $json = json_decode( $value, true ); // Si aucune erreur, on affecte la valeur - if( $json != null ) + if( !is_null($json) ) $params[$name] = $json; } diff --git a/manager/module/download.php b/manager/module/download.php index de6f780..b78a9d2 100644 --- a/manager/module/download.php +++ b/manager/module/download.php @@ -118,14 +118,36 @@ + + + + + + + + + + + /* DOWNLOAD D'UN FICHIER CONTENANT LES DONNEES SELECTIONNEES + * + * @subjects Liste des identifiants des sujets à prendre en compte + * @phone Si TRUE, prend en compte les données des questionnaires cellulaires + * @facebook Si TRUE, prend en compte les données des questionnaires facebook + * @survey Si TRUE, prend en compte les données des questionnaires ResTIC + * @all Si TRUE, prend en compte tous les sujets (annule @subjects) + * + * @return data Retourne une archive .zip contenant toutes les données sélectionnées + * + */ public static function multiple($params){ extract($params); /* (0) Gestion du formattage des paramètres */ - $phone_subjects = !is_array($phone) ? array() : $phone; - $facebook_subjects = !is_array($facebook) ? array() : $facebook; - $survey_subjects = !is_array($survey) ? array() : $survey; - + $subjects = !is_array($subjects) ? array() : $subjects; + $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 =========================================================*/ @@ -156,33 +178,43 @@ - // On ouvre une instance de la base de données - $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); - /* [2] On construit les fichiers de chaque sujet DE TELEPHONE =========================================================*/ - foreach($phone_subjects as $s=>$subjectId){ + if( $phone ){ // Si @phone vaut TRUE - /* (1) On récupère les données du sujet en cours */ - $subjectData = $db->fetch($subjectId); + // On ouvre une instance de la base de données + $db = new lightdb('phone_db', __ROOT__.'/src/dynamic/'); - // Si on ne trouve rien, on passe au suivant - if( $subjectData === false ) - continue; + // Si on doit prendre tous les sujets, on les récupère + if( $all ) + $subjects = array_keys( $db->index() ); - /* (2) On construit le log s'il existe */ - $output['logs/'][$subjectId] = self::parseCSV($subjectData['logs'], $dict['logs']); + // Pour chaque sujet + foreach($subjects as $s=>$subjectId){ - /* (3) On complète les relations */ - $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + /* (1) On récupère les données du sujet en cours */ + $subjectData = $db->fetch($subjectId); - /* (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 + // 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 */ + $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + + /* (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(); } - // On ferme l'instance de la base de données - $db->close(); @@ -190,31 +222,40 @@ - - // On ouvre une instance de la base de données - $db = new lightdb('facebook_db', __ROOT__.'/src/dynamic/'); - /* [3] On construit les fichiers de chaque sujet DE FACEBOOK =========================================================*/ - foreach($facebook_subjects as $s=>$subjectId){ + if( $facebook ){ // Si @facebook vaut TRUE - /* (1) On récupère les données du sujet en cours */ - $subjectData = $db->fetch($subjectId); + // On ouvre une instance de la base de données + $db = new lightdb('facebook_db', __ROOT__.'/src/dynamic/'); - // Si on ne trouve rien, on passe au suivant - if( $subjectData === false ) - continue; + // Si on doit prendre tous les sujets, on les récupère + if( $all ) + $subjects = array_keys( $db->index() ); - /* (2) On complète les relations */ - $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + // Pour chaque sujet + foreach($subjects as $s=>$subjectId){ - /* (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 + /* (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 */ + $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + + /* (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(); } - // On ferme l'instance de la base de données - $db->close(); @@ -222,32 +263,40 @@ - - // On ouvre une instance de la base de données - $db = new lightdb('survey_db', __ROOT__.'/src/dynamic/'); - /* [4] On construit les fichiers de chaque sujet DE FORMULAIRE =========================================================*/ - foreach($facebook_subjects as $s=>$subjectId){ + if( $survey ){ // Si @survey vaut TRUE - /* (1) On récupère les données du sujet en cours */ - $subjectData = $db->fetch($subjectId); + // On ouvre une instance de la base de données + $db = new lightdb('survey_db', __ROOT__.'/src/dynamic/'); - // Si on ne trouve rien, on passe au suivant - if( $subjectData === false ) - continue; + // Si on doit prendre tous les sujets, on les récupère + if( $all ) + $subjects = array_keys( $db->index() ); - /* (2) On complète les relations */ - $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + // Pour chaque sujet + foreach($subjects as $s=>$subjectId){ - /* (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 + /* (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 */ + $output['common_']['relations'] .= self::parseCSV($subjectData['relations'], array(), strlen($output['common_']['relations']) == 0 ); // On affiche les colonnes pour la première fois uniquement + + /* (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(); } - // On ferme l'instance de la base de données - $db->close(); - diff --git a/tmp/content_574082c3eb3eb.php b/tmp/content_574082c3eb3eb.php new file mode 100644 index 0000000..2021068 Binary files /dev/null and b/tmp/content_574082c3eb3eb.php differ diff --git a/tmp/download_574082c3eb36e.php b/tmp/download_574082c3eb36e.php new file mode 100644 index 0000000..9f78d8a --- /dev/null +++ b/tmp/download_574082c3eb36e.php @@ -0,0 +1,9 @@ + diff --git a/view/css/data.css b/view/css/data.css index 1357f06..e69de29 100644 --- a/view/css/data.css +++ b/view/css/data.css @@ -1,3 +0,0 @@ -/*#group_0:checked + #subject-list{ - display: none; -}*/ diff --git a/view/data.php b/view/data.php index cb81c89..d429258 100755 --- a/view/data.php +++ b/view/data.php @@ -24,8 +24,8 @@ $pers = $request->answer();

Exporter les données au format .csv

Choix des sujets -
-
+
+


diff --git a/view/js/data-min.js b/view/js/data-min.js index fd7ad63..60ad687 100644 --- a/view/js/data-min.js +++ b/view/js/data-min.js @@ -1,3 +1,3 @@ -var subjectList=$("#subject-list"),subjectAdd=$("#add-subject"),exportDeflater=new FormDeflater(document.getElementById("export-form"),["input"],["data-name"]);subjectAdd.addEventListener("click",function(a){a=document.createElement("input");a.type="number";a.dataset.name="subjects";a.placeholder="Sujet";a.style="width: 5em; display: block;";subjectList.appendChild(a)},!1); -$("#export-form #export-all").addEventListener("click",function(a){var b=(new FormDeflater(subjectList,["input"],["data-name"])).deflate().subjects;a=[];b instanceof Array||(b=[b]);for(var c=0;c 0 ) + request.subjects = subjects; /* (5) On lance la requête */ api.send(request, function(res){ - + // Si erreur if( res.ModuleError != 0 ) return false;