From 1a3169f484c4fc318456f5cec92f5ef6cb7665af Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Sat, 21 May 2016 18:27:10 +0200 Subject: [PATCH] =?UTF-8?q?#13;=20Modification=20des=20param=C3=A8tres=20e?= =?UTF-8?q?t=20du=20fonctionnement=20de=20'download/multiple'=20qui=20pren?= =?UTF-8?q?ds=20la=20liste=20des=20sujets=20(leurs=20identifiants)=20puis?= =?UTF-8?q?=204=20booleans=20(3:=201=20pour=20chaque=20type=20de=20donn?= =?UTF-8?q?=C3=A9es)=20+=201=20pour=20dire=20qu'on=20veut=20tous=20les=20s?= =?UTF-8?q?ujets=20+=20Correction=20de=20'ModuleRequest'=20lors=20du=20d?= =?UTF-8?q?=C3=A9codage=20du=20json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- automate.php | 16 ++-- config/modules.json | 8 +- manager/Database.php | 19 ++-- manager/ModuleRequest.php | 6 +- manager/module/download.php | 157 +++++++++++++++++++++------------ tmp/content_574082c3eb3eb.php | Bin 0 -> 2387 bytes tmp/download_574082c3eb36e.php | 9 ++ view/css/data.css | 3 - view/data.php | 4 +- view/js/data-min.js | 6 +- view/js/data.js | 25 +++--- 11 files changed, 159 insertions(+), 94 deletions(-) create mode 100644 tmp/content_574082c3eb3eb.php create mode 100644 tmp/download_574082c3eb36e.php 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 0000000000000000000000000000000000000000..20210685c305e1a571fa3efdb56178c8f17942d6 GIT binary patch literal 2387 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 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;