Gestion complète de l'import de sauvegarde de formulaires locaux.
This commit is contained in:
parent
97e7d5425b
commit
dc511fba1f
|
@ -10,67 +10,43 @@
|
|||
|
||||
class upload{
|
||||
|
||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||
*
|
||||
|
||||
/* RENVOIE LE CHEMIN D'UN fichier
|
||||
*
|
||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||
* @extension<String> Extension du fichier
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
* @tester<Function> Fonction qui renvoie TRUE si le format est correct (en prenant le contenu du fichier en paramètre)
|
||||
*
|
||||
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||
*
|
||||
*/
|
||||
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||
*
|
||||
* @return response<Array> Renvoie le chemin du fichier, ainsi qu'une erreur de 'ManagerError'
|
||||
*
|
||||
*/
|
||||
private static function getPath($prefix, $extension){
|
||||
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
||||
if( !connected() ) return ManagerError::PermissionError;
|
||||
if( !connected() ) return array( 'error' => ManagerError::PermissionError );
|
||||
|
||||
|
||||
/* [0] On formatte les entrées
|
||||
=========================================================*/
|
||||
$prefix = htmlspecialchars($prefix);
|
||||
|
||||
// Si $prefix n'est pas au bon format
|
||||
if( !preg_match('/^[a-z0-9_-]+$/', $prefix) )
|
||||
return ManagerError::UploadError;
|
||||
|
||||
|
||||
/* [1] Chargement du fichier de config
|
||||
/* [1] Chargement du fichier de config
|
||||
=========================================================*/
|
||||
/* (1) On récupère le fichier */
|
||||
$uploadAuth = ResourceDispatcher::getResource('f/json/upload-auth/conf');
|
||||
|
||||
/* (2) Si une erreur pour le fichier de conf */
|
||||
if( $uploadAuth === false )
|
||||
return ManagerError::UnreachableResource;
|
||||
return array( 'error' => ManagerError::UnreachableResource );
|
||||
|
||||
/* (3) On récupère la config sous forme de tableau */
|
||||
$uploadAuth = json_decode( $uploadAuth, true );
|
||||
|
||||
/* (4) Si erreur de PARSAGE */
|
||||
if( !is_array($uploadAuth) )
|
||||
return ManagerError::ParsingFailed;
|
||||
return array( 'error' => ManagerError::ParsingFailed );
|
||||
|
||||
|
||||
/* [2] Vérification du préfixe
|
||||
=========================================================*/
|
||||
// Si le préfixe n'est pas dans la config -> erreur
|
||||
if( !in_array($prefix, $uploadAuth['directories']) )
|
||||
returnManagerError::UploadError;
|
||||
return array( 'error' => ManagerError::UploadError );
|
||||
|
||||
|
||||
/* [3] Vérification du format (via la fonction $tester)
|
||||
=========================================================*/
|
||||
/* (1) Si la fonction n'est pas une fonction, on considère que le format est bon */
|
||||
if( !is_callable($tester) ) return ManagerError::Success;
|
||||
|
||||
/* (2) Sinon, on vérifie le format */
|
||||
$file_content = file_get_contents($file['tmp_name']);
|
||||
|
||||
/* (3) On retourne 'FormatError' si erreur de format */
|
||||
if( !$tester($file_content) ) return ManagerError::FormatError;
|
||||
|
||||
|
||||
/* [4] Construction du chemin
|
||||
/* [3] Construction du chemin
|
||||
=========================================================*/
|
||||
/* (1) On construit le chemin */
|
||||
$path = __ROOT__.$uploadAuth['root'].'/'.$prefix.'/';
|
||||
|
@ -85,12 +61,58 @@
|
|||
chdir( $path );
|
||||
|
||||
|
||||
/* [5] Création du fichier (temporaire->permanent)
|
||||
/* [4] Gestion du retour
|
||||
=========================================================*/
|
||||
return array(
|
||||
'error' => ManagerError::Success,
|
||||
'path' => $path.$fileName
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
||||
*
|
||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||
* @extension<String> Extension du fichier
|
||||
* @file<FILE> Pointeur vers $_FILES['']
|
||||
* @tester<Function> Fonction qui renvoie TRUE si le format est correct (en prenant le contenu du fichier en paramètre)
|
||||
*
|
||||
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||
*
|
||||
*/
|
||||
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||
/* [1] On récupère le chemin du fichier à créer et vérifie le dossier
|
||||
=========================================================*/
|
||||
$pathResponse = self::getPath($prefix, $extension);
|
||||
|
||||
// Si une erreur est intervenue, on la retourne
|
||||
if( $pathResponse['error'] != ManagerError::Success )
|
||||
return $pathResponse['error'];
|
||||
|
||||
|
||||
/* [2] Vérification du format (via la fonction $tester)
|
||||
=========================================================*/
|
||||
/* (1) Si $tester est une fonction, on effectue le test */
|
||||
if( is_callable($tester) ){
|
||||
|
||||
/* (2) Sinon, on vérifie le format */
|
||||
$file_content = file_get_contents($file['tmp_name']);
|
||||
|
||||
/* (3) On retourne 'FormatError' si erreur de format */
|
||||
if( !$tester($file_content) ) return ManagerError::FormatError;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* [3] Création du fichier (temporaire->permanent)
|
||||
=========================================================*/
|
||||
/* (1) On déplace le fichier avec le nom formel */
|
||||
if( move_uploaded_file($file['tmp_name'], $path.$fileName) ){
|
||||
if( move_uploaded_file($file['tmp_name'], $pathResponse['path']) ){
|
||||
// on modifie les droits du fichier
|
||||
chmod($path.$fileName, 0774);
|
||||
chmod($pathResponse['path'], 0774);
|
||||
return ManagerError::Success;
|
||||
|
||||
/* (2) Si une erreur occure -> 'UploadError' */
|
||||
|
@ -129,7 +151,7 @@
|
|||
|
||||
// Vérification de tous les champs
|
||||
foreach($xml->Item as $log){
|
||||
$checkAttributes = isset($log['Id']);
|
||||
$checkAttributes = isset($log['Id']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Number']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Name']);
|
||||
$checkAttributes = $checkAttributes && isset($log['Date']);
|
||||
|
@ -292,8 +314,27 @@
|
|||
|
||||
/* [2] Renvoi du contenu du fichier
|
||||
=========================================================*/
|
||||
return array(
|
||||
/* (1) Si erreur d'upload, on la renvoie */
|
||||
if( $uploadError != ManagerError::Success )
|
||||
return array( 'ModuleError' => $uploadError );
|
||||
|
||||
/* (2) On récupère le fichier */
|
||||
$responsePath = self::getPath('local_data', 'json');
|
||||
// Si erreur, on la renvoie
|
||||
if( $responsePath['error'] != ManagerError::Success )
|
||||
return array( 'ModuleError' => $responsePath['error'] );
|
||||
|
||||
// On lit le fichier
|
||||
$json = json_decode( file_get_contents($responsePath['path']), true );
|
||||
|
||||
// Si erreur de parsage, on le retourne
|
||||
if( $json === false )
|
||||
return ManagerError::ParsingFailed;
|
||||
|
||||
/* (3) On renvoie le contenu du fichier */
|
||||
return array(
|
||||
'ModuleError' => ManagerError::Success,
|
||||
'local_data' => $json
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -6,4 +6,5 @@ include("/js/includes/input-phone-subject.js",function(){include("/js/includes/i
|
|||
subjectManager.attach();contactManager=new inputPhoneContact($("article.contact-panel"),$("#nav-contact"));contactManager.attach(dynamicUpdate);miniManager=new inputPhoneMini($("article.mini-relation-panel"),$("#nav-mini"));miniManager.attach(dynamicUpdate);ficheManager=new inputPhoneFiche($("article.relation-panel"),$("#nav-fiche"));ficheManager.attach(dynamicUpdate);importCallLog.addEventListener("change",function(a){a={path:"upload/call_log",phone_number:$("#subject_phone_number").value,file:importCallLog.files[0]};
|
||||
api.send(a,function(a){console.log(a);if(0==a.ModuleError){for(var b=0;b<a.directory.length;b++){var d=(null===a.directory[b].name?"":a.directory[b].name).split(" ");lsi.set("contacts",b,{uid:b,number:a.directory[b].number,username:1==d.length?d[0]:"",firstname:1<d.length?d[0]:"",lastname:1<d.length?d.splice(1).join(" "):""})}contactManager.storageToFields();dynamicUpdate(!0)}})},!1);clearAllButton.addEventListener("click",function(a){localStorage.clear();reload()},!1);$("#export-all").addEventListener("click",
|
||||
function(a){a={subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};var c=$("#download-target");c.download="local-data.json";c.href="data:application/octet-stream,"+encodeURIComponent(JSON.stringify(a));c.click()},!1);$("#import-all").addEventListener("click",function(a){$("#local-upload").click()},!1);$("#local-upload").addEventListener("change",function(a){a={path:"upload/local_data",file:$("#local-upload").files[0]};
|
||||
api.send(a,function(a){console.log(a)})},!1);submitAllButton.addEventListener("click",function(a){console.log("> GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})});
|
||||
api.send(a,function(a){console.log(a);if(0!=a.ModuleError)return!1;lsi["import"]("subject",a.local_data.subject);lsi["import"]("contacts",a.local_data.contacts);lsi["import"]("mini-fiches",a.local_data.mini);lsi["import"]("fiches",a.local_data.fiches);contactManager.storageToFields();dynamicUpdate(!0)})},!1);submitAllButton.addEventListener("click",function(a){console.log("> GATHERING ALL DATA");subjectManager.fieldsToStorage();contactManager.fieldsToStorage();miniManager.fieldsToStorage();ficheManager.fieldsToStorage();
|
||||
a={path:"input/phone",subject:lsi["export"]("subject")[0],contacts:lsi["export"]("contacts"),mini:lsi["export"]("mini-fiches"),fiches:lsi["export"]("fiches")};api.send(a,function(a){console.log(a)},!1)},!1)})})})});
|
||||
|
|
|
@ -254,6 +254,7 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
}, false);
|
||||
|
||||
|
||||
|
||||
/* (6) Gestion de l'effacement des données locales
|
||||
---------------------------------------------------------*/
|
||||
clearAllButton.addEventListener('click', function(e){
|
||||
|
@ -262,6 +263,7 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
}, false);
|
||||
|
||||
|
||||
|
||||
/* (7) Gestion de l'export des données locales
|
||||
---------------------------------------------------------*/
|
||||
$('#export-all').addEventListener('click', function(e){
|
||||
|
@ -282,6 +284,8 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
}, false);
|
||||
|
||||
|
||||
|
||||
|
||||
/* (8) Gestion de l'import des données locales
|
||||
---------------------------------------------------------*/
|
||||
// Le bouton lance l'<input> file
|
||||
|
@ -293,30 +297,36 @@ include('/js/includes/input-phone-fiche.js', function(){
|
|||
// Gestion de l'upload d'une sauvegarde de formulaire local
|
||||
$('#local-upload').addEventListener('change', function(e){
|
||||
/* (1) Rédaction de la requête d'upload */
|
||||
var uploadRequest = {
|
||||
var request = {
|
||||
path: 'upload/local_data',
|
||||
file: $('#local-upload').files[0]
|
||||
};
|
||||
|
||||
/* (2) Upload et réponse */
|
||||
api.send(uploadRequest, function(uploadResponse){
|
||||
console.log(uploadResponse);
|
||||
api.send(request, function(response){
|
||||
console.log(response);
|
||||
|
||||
// Si erreur, on quitte
|
||||
if( response.ModuleError != 0 )
|
||||
return false;
|
||||
|
||||
/* (3) On enregistre les données dans le 'localStorage' */
|
||||
lsi.import('subject', response.local_data.subject);
|
||||
lsi.import('contacts', response.local_data.contacts);
|
||||
lsi.import('mini-fiches', response.local_data.mini);
|
||||
lsi.import('fiches', response.local_data.fiches);
|
||||
|
||||
/* (3) On met à jour l'affichage */
|
||||
contactManager.storageToFields();
|
||||
dynamicUpdate(true);
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
// /* (2) On les met en forme */
|
||||
// var data = JSON.parse(json);
|
||||
//
|
||||
// /* (3) On met les données dans le 'localStorage' et on recharge la page */
|
||||
// console.log(data);
|
||||
// lsi.import('subject', data.subject);
|
||||
// lsi.import('contacts', data.contacts);
|
||||
// lsi.import('mini-fiches', data.mini);
|
||||
// lsi.import('fiches', data.fiches);
|
||||
}, false);
|
||||
|
||||
|
||||
|
||||
|
||||
/* (9) Gestion de la validation et de l'envoi des données
|
||||
---------------------------------------------------------*/
|
||||
submitAllButton.addEventListener('click', function(e){
|
||||
|
|
Loading…
Reference in New Issue