Gestion de l'import par l'API + parsage après import

This commit is contained in:
xdrm-brackets 2016-04-20 15:21:01 +02:00
parent 2556448a9c
commit a6cb378a33
12 changed files with 1072 additions and 144 deletions

View File

@ -18,17 +18,11 @@
*
*/
function parseCallLog(){
/* [1] On recupere le journal d'appel
=========================================================*/
$file_content = file_get_contents('doc/sample.xml');
/* [2] On cree la requete
=========================================================*/
$request = new ModuleRequest('call_log/unserialize', array(
'file_content' => $file_content,
'phone_number' => '01 02 03 04 05'));
'phone_number' => '01 02 03 04 05'
));
$answer = $request->dispatch(); // on l'execute
/* [3] Si erreur
@ -50,7 +44,7 @@
echo $num.' <> '.$name.'<br>';
}
// parseCallLog();
parseCallLog();

View File

@ -89,10 +89,9 @@
"call_log": {
"unserialize": {
"description": "Recupere le contenu d'un fichier XML de journal d'appel.",
"description": "Recupere le contenu d'un fichier XML de journal d'appel s'il a été importé au préalable.",
"permissions": [],
"parameters": {
"file_content": { "description": "Contenu du fichier XML", "type": "text" },
"phone_number": { "description": "Numéro de téléphone de l'interrogé.", "type": "phone_number" }
}
}

View File

@ -1,5 +1,5 @@
{
"root": "/src/upload/",
"root": "/src/upload",
"directories": [
"call_log",
"spss",

5
js/lib/api-min.js vendored
View File

@ -1,4 +1,3 @@
function APIClass(b){this.target=b}
APIClass.prototype={xhr:[],send:function(b,d,e){b.hasOwnProperty("path")||d({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var c=this;this.xhr[a].onreadystatechange=function(){if(4==c.xhr[a].readyState)if(-1<[0,200].indexOf(c.xhr[a].status))try{d(JSON.parse(c.xhr[a].responseText))}catch(b){d({ModuleError:1})}else d({ModuleError:3})};
var g=new FormData,f;for(f in b)g.append(f,b[f]);this.xhr[a].open("POST",this.target,!0);null!=e&&this.xhr[a].setRequestHeader("Authorization","Digest "+e);this.xhr[a].send(g)}};
function fileUploader(b,d,e){var a=new FormData;a.append("prefix",d);a.append("file",b,b.name);var c=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");c.open("POST","/manager/uploader.php",!0);c.onreadystatechange=function(){4==c.readyState&&-1<[0,200].indexOf(c.status)&&e(c.responseText)};c.send(a)};
APIClass.prototype={xhr:[],send:function(b,c,f){b.hasOwnProperty("path")||c({ModuleError:4});for(var a=0;a<this.xhr.length;a++)4==this.xhr[a].readyState&&(this.xhr=this.xhr.slice(0,a-1).concat(this.xhr.slice(a,this.xhr.length-1)));this.xhr.push(null);a=this.xhr.length-1;this.xhr[a]=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject("Microsoft.XMLHttpRequest");console.log(b);var d=this;this.xhr[a].onreadystatechange=function(){if(4==d.xhr[a].readyState)if(-1<[0,200].indexOf(d.xhr[a].status))try{c(JSON.parse(d.xhr[a].responseText))}catch(b){c({ModuleError:1})}else c({ModuleError:3})};
var g=new FormData,e;for(e in b)g.append(e,b[e]);this.xhr[a].open("POST",this.target,!0);null!=f&&this.xhr[a].setRequestHeader("Authorization","Digest "+f);this.xhr[a].send(g)}};

View File

@ -91,47 +91,3 @@ APIClass.prototype = {
}
};
/* GESTION DE L'UPLOAD DE FICHIER, DE SON ENREGISTREMENT+FEEDBACK
*
* @file<File> Fichier en question (input.files[0])
* @prefix<String> Préfixe du futur nom du fichier
* @handler<Function> Fonction qui s'exécutera quand le fichier sera uploadé
*
*/
function fileUploader(file, prefix, handler){
/* [1] IMPORTATION DU FICHIER
=======================================*/
var postdata = new FormData();
postdata.append('prefix', prefix);
postdata.append('file', file, file.name);
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHttpRequest');
xhr.open('POST', '/manager/uploader.php', true);
xhr.onreadystatechange = function(){
if( xhr.readyState == 4 && [0, 200].indexOf(xhr.status) > -1 )
handler( xhr.responseText );
};
xhr.send(postdata);
}

View File

@ -3,6 +3,7 @@
namespace manager\module;
use \manager\Database;
use \manager\sessionManager;
use \manager\ResourceDispatcher;
use \manager\ManagerError;
use \manager\Repo;
@ -11,23 +12,50 @@
/* DESERIALISATION D'UN JOURNAL D'APPEL
*
* @content<String> Le contenu du journal d'appel a deserialiser
* @number<String> Numéro de téléphone du propriétaire du journal d'appel
*
* @return sms<Array> Retourne un tableau associatif contenant les sms triees
* @return call<Array> Retourne un tableau associatif contenant les appels triees
* @return contact<Array> Retourne un tableau associatif contenant les correspondances numero/nom de contact
* @return logs<Array> Retourne un tableau associatif les logs
* @return directory<Array> Retourne un tableau associatif contenant l'annuaire des contacts
*
*/
public static function unserialize($params){
$file_content = null;
extract($params);
// On formatte le numéro de téléphone
$phone_number = Database::formatNumber($phone_number);
/* [0] On récupère dans la config le chemin du fichier
=========================================================*/
/* (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;
/* (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;
/* (5) On construit le chemin du fichier */
$prefix = 'call_log'; $extension = 'xml';
$path = __ROOT__.$uploadAuth['root']."/$prefix/".$_SESSION['username'].".$extension";
/* [1] On parse/récupère le xml
=========================================================*/
$xml = simplexml_load_string($file_content);
// Si le fichier n'existe pas, on quitte
if( !file_exists($path) )
return array('ModuleError' => ManagerError::UnreachableResource);
$file_content = file_get_contents($path);
if( $file_content === false )
return array('ModuleError' => ManagerError::UnreachableResource);
$xml = simplexml_load_string( $file_content );
// Si le format XML n'est pas bon, on retourne une erreur
if( $xml === false )

View File

@ -12,12 +12,13 @@
/* EFFECTUE UN UPLOAD D'UN fichier
*
* @prefix<String> Préfixe (dossier parent) du fichier
* @extension<String> Extension du fichier
* @file<FILE> Pointeur vers $_FILES['']
*
* @return error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
*
*/
private static function simpleFile($prefix, $file){
private static function simpleFile($prefix, $extension, $file){
/* [0] On formatte les entrées
=========================================================*/
$prefix = htmlspecialchars($prefix);
@ -30,17 +31,17 @@
/* [1] Chargement du fichier de config
=========================================================*/
/* (1) On récupère le fichier */
$uploadAuthResource = new ResourceDispatcher('f/json/upload-auth/conf');
$uploadAuth = ResourceDispatcher::getResource('f/json/upload-auth/conf');
/* (2) Si une erreur pour le fichier de conf */
if( $uploadAuthResource->error != ManagerError::Success )
return $uploadAuthResource->error;
if( $uploadAuth === false )
return ManagerError::UnreachableResource;
/* (3) On récupère la config sous forme de tableau */
$uploadAuth = json_decode( $uploadAuthResource->getContent(), true );
$uploadAuth = json_decode( $uploadAuth, true );
/* (4) Si erreur de PARSAGE */
if( $uploadAuth == null )
if( !is_array($uploadAuth) )
return ManagerError::ParsingFailed;
/* [2] Vérification du préfixe
@ -59,8 +60,7 @@
if ( !file_exists($path) ) mkdir($path, 0775, true);
/* (3) On construit le nom du fichier */
$fileName = $_SESSION['username'].'.'; // Nom
$fileName .= pathinfo($file['name'], PATHINFO_EXTENSION); // Extension
$fileName = $_SESSION['username'].'.'.$extension;
/* (4) On se place dans le dossier */
chdir( $path );
@ -91,10 +91,11 @@
extract($params);
return array(
'ModuleError' => self::simpleFile('call_log', $file)
'ModuleError' => self::simpleFile('call_log', 'xml', $file)
);
}
}

View File

@ -1,67 +0,0 @@
<?php define('__ROOT__', dirname(dirname(__FILE__)) ); require_once __ROOT__.'/manager/autoloader.php';
use \manager\ResourceDispatcher;
use \manager\ManagerError;
/* [0] On formatte les entrées
=========================================================*/
// Si un des params manque, on retourne une erreur
if( !isset($_FILES['file']) || !isset($_POST['prefix']) ){
echo ManagerError::ParamError;
exit();
}
$prefix = htmlspecialchars($_POST['prefix']);
// Si $prefix n'est pas au bon format
if( !preg_match('/^[a-z0-9_-]+$/', $prefix) ){ echo ManagerError::UploadError; exit(); }
/* [1] Chargement du fichier de config
=========================================================*/
/* (1) On récupère le fichier */
$uploadAuthResource = new ResourceDispatcher('f/json/upload-auth/conf');
/* (2) Si une erreur pour le fichier de conf */
if( $uploadAuthResource->error != ManagerError::Success ){ echo $uploadAuthResource->error; exit(); }
/* (3) On récupère la config sous forme de tableau */
$uploadAuth = json_decode( $uploadAuthResource->getContent(), true );
/* (4) Si erreur de PARSAGE */
if( $uploadAuth == null ){ echo ManagerError::ParsingFailed; exit(); }
/* [2] Vérification du préfixe
=========================================================*/
// Si le préfixe n'est pas dans la config -> erreur
if( !in_array($prefix, $uploadAuth['directories']) ){ echo ManagerError::UploadError; exit(); }
/* [3] Construction du chemin
=========================================================*/
/* (1) On construit le chemin */
$path = __ROOT__.$uploadAuth['root'].'/'.$_POST['prefix'].'/';
/* (2) On crée le dossier s'il n'existe pas */
if ( !file_exists($path) ) mkdir($path, 0777, true);
/* (3) On construit le nom du fichier */
$fileName = $_SESSION['username'].'.'; // Nom
$fileName .= pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); // Extension
/* (4) On se place dans le dossier */
chdir( $path );
/* [4] Création du fichier (temporaire->permanent)
=========================================================*/
if( move_uploaded_file($_FILES['file']['tmp_name'], $path.$fileName) ){
// on modifie les droits du fichier
chmod($path.$fileName, 0774);
echo ManagerError::Success;
}
else
echo ManagerError::UploadError;
?>

1001
src/upload/call_log/xdrm.xml Executable file

File diff suppressed because it is too large Load Diff

View File

@ -30,14 +30,13 @@
<?php /* [3] ADMIN -> Donnees du Telephone
=========================================================*/
?><section data-sublink='phone'> <!-- IMPORT -->
?><section data-sublink='phone'> <!-- IMPORT ou SAISIE -->
<h6 class='center'>Importer un journal d'appel</h6><br>
<br>
<input type='file' value='test'>
</section>
<section data-sublink='phone'> <!-- SAISIE -->
<h6 class='center'>Saisie manuelle</h6><br>
<!-- [1] Panel d'ajout/suppression de numero -->

1
view/js/input-min.js vendored Normal file
View File

@ -0,0 +1 @@
var fileInput=document.querySelector("input[type=file]");fileInput.addEventListener("change",function(b){api.send({path:"upload/call_log",file:fileInput.files[0]},function(a){console.log(a)})},!1);

View File

@ -0,0 +1,17 @@
var fileInput = document.querySelector('input[type=file]');
fileInput.addEventListener('change', function(e){
/* (1) On rédige la requête */
var request = {
path: 'upload/call_log',
file: fileInput.files[0]
};
/* (2) On effectue l'upload (import) */
api.send(request, function(response){
console.log( response );
});
}, false);