Gestion complète de l'import de sauvegarde de formulaires locaux.
This commit is contained in:
parent
97e7d5425b
commit
dc511fba1f
|
@ -10,29 +10,18 @@
|
||||||
|
|
||||||
class upload{
|
class upload{
|
||||||
|
|
||||||
/* EFFECTUE UN UPLOAD D'UN fichier
|
|
||||||
|
/* RENVOIE LE CHEMIN D'UN fichier
|
||||||
*
|
*
|
||||||
* @prefix<String> Préfixe (dossier parent) du fichier
|
* @prefix<String> Préfixe (dossier parent) du fichier
|
||||||
* @extension<String> Extension 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
|
* @return response<Array> Renvoie le chemin du fichier, ainsi qu'une erreur de 'ManagerError'
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static function simpleFile($prefix, $extension, $file, $tester){
|
private static function getPath($prefix, $extension){
|
||||||
// Si on est pas connecté, on retourne une erreur -> impossible via token
|
// 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
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
@ -41,36 +30,23 @@
|
||||||
|
|
||||||
/* (2) Si une erreur pour le fichier de conf */
|
/* (2) Si une erreur pour le fichier de conf */
|
||||||
if( $uploadAuth === false )
|
if( $uploadAuth === false )
|
||||||
return ManagerError::UnreachableResource;
|
return array( 'error' => ManagerError::UnreachableResource );
|
||||||
|
|
||||||
/* (3) On récupère la config sous forme de tableau */
|
/* (3) On récupère la config sous forme de tableau */
|
||||||
$uploadAuth = json_decode( $uploadAuth, true );
|
$uploadAuth = json_decode( $uploadAuth, true );
|
||||||
|
|
||||||
/* (4) Si erreur de PARSAGE */
|
/* (4) Si erreur de PARSAGE */
|
||||||
if( !is_array($uploadAuth) )
|
if( !is_array($uploadAuth) )
|
||||||
return ManagerError::ParsingFailed;
|
return array( 'error' => ManagerError::ParsingFailed );
|
||||||
|
|
||||||
|
|
||||||
/* [2] Vérification du préfixe
|
/* [2] Vérification du préfixe
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
// Si le préfixe n'est pas dans la config -> erreur
|
// Si le préfixe n'est pas dans la config -> erreur
|
||||||
if( !in_array($prefix, $uploadAuth['directories']) )
|
if( !in_array($prefix, $uploadAuth['directories']) )
|
||||||
returnManagerError::UploadError;
|
return array( 'error' => ManagerError::UploadError );
|
||||||
|
|
||||||
|
/* [3] Construction du chemin
|
||||||
/* [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
|
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
/* (1) On construit le chemin */
|
/* (1) On construit le chemin */
|
||||||
$path = __ROOT__.$uploadAuth['root'].'/'.$prefix.'/';
|
$path = __ROOT__.$uploadAuth['root'].'/'.$prefix.'/';
|
||||||
|
@ -85,12 +61,58 @@
|
||||||
chdir( $path );
|
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 */
|
/* (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
|
// on modifie les droits du fichier
|
||||||
chmod($path.$fileName, 0774);
|
chmod($pathResponse['path'], 0774);
|
||||||
return ManagerError::Success;
|
return ManagerError::Success;
|
||||||
|
|
||||||
/* (2) Si une erreur occure -> 'UploadError' */
|
/* (2) Si une erreur occure -> 'UploadError' */
|
||||||
|
@ -292,8 +314,27 @@
|
||||||
|
|
||||||
/* [2] Renvoi du contenu du fichier
|
/* [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]};
|
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",
|
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]};
|
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);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (6) Gestion de l'effacement des données locales
|
/* (6) Gestion de l'effacement des données locales
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
clearAllButton.addEventListener('click', function(e){
|
clearAllButton.addEventListener('click', function(e){
|
||||||
|
@ -262,6 +263,7 @@ include('/js/includes/input-phone-fiche.js', function(){
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (7) Gestion de l'export des données locales
|
/* (7) Gestion de l'export des données locales
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
$('#export-all').addEventListener('click', function(e){
|
$('#export-all').addEventListener('click', function(e){
|
||||||
|
@ -282,6 +284,8 @@ include('/js/includes/input-phone-fiche.js', function(){
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (8) Gestion de l'import des données locales
|
/* (8) Gestion de l'import des données locales
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
// Le bouton lance l'<input> file
|
// 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
|
// Gestion de l'upload d'une sauvegarde de formulaire local
|
||||||
$('#local-upload').addEventListener('change', function(e){
|
$('#local-upload').addEventListener('change', function(e){
|
||||||
/* (1) Rédaction de la requête d'upload */
|
/* (1) Rédaction de la requête d'upload */
|
||||||
var uploadRequest = {
|
var request = {
|
||||||
path: 'upload/local_data',
|
path: 'upload/local_data',
|
||||||
file: $('#local-upload').files[0]
|
file: $('#local-upload').files[0]
|
||||||
};
|
};
|
||||||
|
|
||||||
/* (2) Upload et réponse */
|
/* (2) Upload et réponse */
|
||||||
api.send(uploadRequest, function(uploadResponse){
|
api.send(request, function(response){
|
||||||
console.log(uploadResponse);
|
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);
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* (9) Gestion de la validation et de l'envoi des données
|
/* (9) Gestion de la validation et de l'envoi des données
|
||||||
---------------------------------------------------------*/
|
---------------------------------------------------------*/
|
||||||
submitAllButton.addEventListener('click', function(e){
|
submitAllButton.addEventListener('click', function(e){
|
||||||
|
|
Loading…
Reference in New Issue