#13; Modification des paramètres et du fonctionnement de 'download/multiple' qui prends la liste des sujets (leurs identifiants) puis 4 booleans (3: 1 pour chaque type de données) + 1 pour dire qu'on veut tous les sujets + Correction de 'ModuleRequest' lors du décodage du json

This commit is contained in:
xdrm-brackets 2016-05-21 18:27:10 +02:00
parent 5d1fea3ba5
commit 1a3169f484
11 changed files with 159 additions and 94 deletions

View File

@ -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);

View File

@ -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<id>", "optional": true },
"facebook": { "description": "Identifiants des sujets d'enquêtes téléphoniques à intégrer.", "type": "array<id>", "optional": true },
"survey": { "description": "Identifiants des sujets d'enquêtes téléphoniques à intégrer.", "type": "array<id>", "optional": true }
"subjects": { "description": "Identifiants des sujets d'enquêtes à intégrer.", "type": "array<id>", "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 }
}
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -118,14 +118,36 @@
/* 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
*
*/
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,12 +178,19 @@
/* [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/');
/* [2] On construit les fichiers de chaque sujet DE TELEPHONE
=========================================================*/
foreach($phone_subjects as $s=>$subjectId){
// 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);
@ -184,6 +213,7 @@
// On ferme l'instance de la base de données
$db->close();
}
@ -191,12 +221,20 @@
/* [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/');
/* [3] On construit les fichiers de chaque sujet DE FACEBOOK
=========================================================*/
foreach($facebook_subjects as $s=>$subjectId){
// 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);
@ -216,6 +254,7 @@
// On ferme l'instance de la base de données
$db->close();
}
@ -223,12 +262,20 @@
/* [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/');
/* [4] On construit les fichiers de chaque sujet DE FORMULAIRE
=========================================================*/
foreach($facebook_subjects as $s=>$subjectId){
// 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);
@ -248,6 +295,8 @@
// On ferme l'instance de la base de données
$db->close();
}

Binary file not shown.

View File

@ -0,0 +1,9 @@
<?php
header("Content-Type: application/zip; charset=utf-8");
header("Content-Disposition: attachment; filename=export_21_05_2016_.zip");
header("Pragma: no-cache");
header("Expires: 0");
readfile('/var/www/socioview/tmp/content_574082c3eb3eb.php');
unlink('/var/www/socioview/tmp/content_574082c3eb3eb.php');
unlink(__FILE__);
?>

View File

@ -1,3 +0,0 @@
/*#group_0:checked + #subject-list{
display: none;
}*/

View File

@ -24,8 +24,8 @@ $pers = $request->answer();
<h4>Exporter les données au format .csv</h4>
<strong>Choix des sujets</strong>
<br><input type='radio' name='subject-group' data-name='group' id='group_0' value='sel' ><label for='group_0'>Tous les sujets</label>
<br><input type='radio' name='subject-group' data-name='group' id='group_1' value='all' checked><label for='group_1'>Les sujets selectionnés uniquement</label>
<br><input type='radio' name='subject-group' data-name='group' id='group_0' value='all' ><label for='group_0'>Tous les sujets</label>
<br><input type='radio' name='subject-group' data-name='group' id='group_1' value='sel' checked><label for='group_1'>Les sujets selectionnés uniquement</label>
<br><br>
<article style='display: inline;' id='subject-list'>

6
view/js/data-min.js vendored
View File

@ -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<b.length;c++)0<b[c].length&&!isNaN(b[c])&&a.push(b[c]);b=exportDeflater.deflate();c={path:"download/multiple"};"1"==b.phone&&(c.phone=a);"1"==b.facebook&&(c.facebook=a);"1"==b.survey&&(c.survey=a);api.send(c,function(a){if(0!=a.ModuleError)return!1;document.location=a.link;Notification.success("OK","Lancement du t\u00e9l\u00e9chargement..")})},
!1);
var subjectList=$("#subject-list"),subjectAdd=$("#add-subject"),exportDeflater=new FormDeflater(document.getElementById("export-form"),["input"],["data-name"]);subjectAdd.addEventListener("click",function(b){b=document.createElement("input");b.type="number";b.dataset.name="subjects";b.placeholder="Sujet";b.style="width: 5em; display: block;";subjectList.appendChild(b)},!1);
$("#export-form #export-all").addEventListener("click",function(b){var a=(new FormDeflater(subjectList,["input"],["data-name"])).deflate().subjects;b=[];a instanceof Array||(a=[a]);for(var c=0;c<a.length;c++)0<a[c].length&&!isNaN(a[c])&&b.push(a[c]);a=exportDeflater.deflate();a={path:"download/multiple",phone:"1"==a.phone,facebook:"1"==a.facebook,survey:"1"==a.survey,all:"all"==a.group};console.warn(b);0<b.length&&(a.subjects=b);api.send(a,function(a){if(0!=a.ModuleError)return!1;document.location=
a.link;Notification.success("OK","Lancement du t\u00e9l\u00e9chargement..")})},!1);

View File

@ -49,19 +49,18 @@ $('#export-form #export-all').addEventListener('click', function(e){
/* (4) On construit la requête */
var request = { path: 'download/multiple' };
var request = {
path: 'download/multiple',
phone: deflated.phone == '1', // VRAI si on veut les données téléphoniques
facebook: deflated.facebook == '1', // VRAI si on veut les données facebook
survey: deflated.survey == '1', // VRAI si on veut les données ResTIC
all: deflated.group == 'all' // VRAI si on veut TOUS les sujets
};
// Si données CELLULAIRES
if( deflated.phone == '1' )
request.phone = subjects;
// Si données FACEBOOK
if( deflated.facebook == '1' )
request.facebook = subjects;
// Si données QUESTIONNAIRES
if( deflated.survey == '1' )
request.survey = subjects;
// On ajoute les sujets s'il y en a
console.warn(subjects);
if( subjects.length > 0 )
request.subjects = subjects;
/* (5) On lance la requête */