#13; Fusion de 'download/phone' et 'download/facebook' en 'download/multiple'

This commit is contained in:
xdrm-brackets 2016-05-20 19:43:37 +02:00
parent 7187cab4f6
commit 4562652a12
5 changed files with 9 additions and 144 deletions

View File

@ -93,7 +93,7 @@
/* [4] Test download via AJAX
=========================================================*/
// $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest';
$req = new ModuleRequest('download/phone', array('subjects'=>array(1, 273, 341)));
$req = new ModuleRequest('download/multiple', array('subjects'=>array(1, 273, 341)));
$res = $req->download();

View File

@ -249,17 +249,8 @@
"download": {
"phone": {
"description": "Download des données relatives à une enquête téléphonique.",
"permissions": ["admin"],
"options": { "download": true },
"parameters": {
"subjects": { "description": "Identifiants des sujets à intégrer.", "type": "array<id>" }
}
},
"facebook": {
"description": "Download des données relatives à une enquête facebook.",
"multiple": {
"description": "Download des données relatives aux sujets donnés.",
"permissions": ["admin"],
"options": { "download": true },
"parameters": {

View File

@ -118,7 +118,7 @@
public static function phone($params){
public static function multiple($params){
extract($params);
@ -211,113 +211,7 @@
'ModuleError' => ManagerError::Success,
'headers' => array(
'Content-Type' => 'application/zip; charset=utf-8',
'Content-Disposition' => 'attachment; filename=phone_data.zip',
'Pragma' => 'no-cache',
'Expires' => '0'
),
'body' => file_get_contents($fname)
);
}
public static function facebook($params){
extract($params);
/* [0] On récupère le dictionnaire
=========================================================*/
$dict = ResourceDispatcher::getResource('f/json/dictionary/dy/facebook');
/* (2) Si une erreur pour le fichier de conf */
if( $dict === false )
return array( 'ModuleError' => ManagerError::UnreachableResource );
/* (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) )
return array( 'ModuleError' => ManagerError::ParsingFailed );
/* [1] On construit l'arborescence des données
=========================================================*/
$output = array(
'common_' => array(
'contacts' => '',
'relations' => '',
'dict' => ''
)
);
// On ouvre une instance de la base de données
$db = new lightdb('facebook_db', __ROOT__.'/src/dynamic/');
/* [2] On construit les fichiers de 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 */
$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();
/* [3] 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";
/* [4] 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
=========================================================*/
return array(
'ModuleError' => ManagerError::Success,
'headers' => array(
'Content-Type' => 'application/zip; charset=utf-8',
'Content-Disposition' => 'attachment; filename=facebook_data.zip',
'Content-Disposition' => 'attachment; filename=export'.date('_d_m_Y_', time()).'.zip',
'Pragma' => 'no-cache',
'Expires' => '0'
),

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

@ -1,3 +1,2 @@
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=[];for(var c=0;c<b.length;c++)0<b[c].length&&!isNaN(b[c])&&a.push(b[c]);b=exportDeflater.deflate();"1"==b.phone&&api.send({path:"download/phone",subjects:a},function(a){if(0!=a.ModuleError)return!1;document.location=a.link;Notification.success("OK","Lancement du t\u00e9l\u00e9chargement..")});"1"==b.facebook&&api.send({path:"download/facebook",subjects:a},
function(a){if(0!=a.ModuleError)return!1;document.location=a.link;Notification.success("OK","Lancement du t\u00e9l\u00e9chargement..")})},!1);
$("#export-form #export-all").addEventListener("click",function(a){var b=(new FormDeflater(subjectList,["input"],["data-name"])).deflate().subjects;a=[];for(var c=0;c<b.length;c++)0<b[c].length&&!isNaN(b[c])&&a.push(b[c]);b=exportDeflater.deflate();"1"!=b.phone&&"1"!=b.facebook||api.send({path:"download/multiple",subjects:a},function(a){if(0!=a.ModuleError)return!1;document.location=a.link;Notification.success("OK","Lancement du t\u00e9l\u00e9chargement..")})},!1);

View File

@ -44,11 +44,11 @@ $('#export-form #export-all').addEventListener('click', function(e){
// {3} On récupère les types de données que l'on veut //
var deflated = exportDeflater.deflate();
// {4} Si téléchargement de données cellulaires //
if( deflated.phone == '1' ){
// {4} Si téléchargement de données //
if( deflated.phone == '1' || deflated.facebook == '1' ){
api.send({ 'path': 'download/phone', 'subjects': subjects }, function(res){
api.send({ 'path': 'download/multiple', 'subjects': subjects }, function(res){
// Si erreur
if( res.ModuleError != 0 )
@ -61,23 +61,4 @@ $('#export-form #export-all').addEventListener('click', function(e){
});
}
// {5} Si téléchargement de données Facebook //
if( deflated.facebook == '1' ){
api.send({ 'path': 'download/facebook', 'subjects': subjects }, function(res){
// Si erreur
if( res.ModuleError != 0 )
return false;
// Sinon on lance le téléchargement
document.location = res.link;
Notification.success('OK', 'Lancement du téléchargement..');
});
}
}, false);