Gestion de la vérification de format (avec function `callback`) au moment de l'upload.
This commit is contained in:
parent
827a8dd827
commit
256c7bf813
30
automate.php
30
automate.php
|
@ -44,11 +44,11 @@
|
||||||
echo $num.' <> '.$name.'<br>';
|
echo $num.' <> '.$name.'<br>';
|
||||||
}
|
}
|
||||||
|
|
||||||
parseCallLog();
|
// parseCallLog();
|
||||||
|
|
||||||
|
|
||||||
|
/* [1] Test du client de l'API generique
|
||||||
/* () Test du client de l'API generique */
|
=========================================================*/
|
||||||
// $api = new client();
|
// $api = new client();
|
||||||
|
|
||||||
// $response = $api->send('generate-network-chart-data', array(
|
// $response = $api->send('generate-network-chart-data', array(
|
||||||
|
@ -57,10 +57,32 @@
|
||||||
|
|
||||||
// var_dump($response);
|
// var_dump($response);
|
||||||
|
|
||||||
// var_dump( Database::delNumeric( Database::getPDO()->query("SHOW COLUMNS FROM users")->fetchAll() ) );
|
|
||||||
|
|
||||||
|
/* [2] Gestion du getter dynamique des Repos
|
||||||
|
=========================================================*/
|
||||||
// var_dump( \manager\repo\user::getById(1) );
|
// var_dump( \manager\repo\user::getById(1) );
|
||||||
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
// // var_dump( \manager\repo\user::getByLogin('xdrm') );
|
||||||
// // var_dump( \manager\repo\subject::getById(1) );
|
// // var_dump( \manager\repo\subject::getById(1) );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Test de la vérification du format de fichier pour l'upload
|
||||||
|
=========================================================*/
|
||||||
|
// ?>
|
||||||
|
<!-- <form action='' method='POST' enctype='multipart/form-data'> -->
|
||||||
|
<!-- <input type='file' name='file'> -->
|
||||||
|
<!-- <input type='submit' value='Upload'> -->
|
||||||
|
<!-- </form> -->
|
||||||
|
<!-- <?php
|
||||||
|
// var_dump($_FILES);
|
||||||
|
//
|
||||||
|
// if( isset($_FILES) ){
|
||||||
|
//
|
||||||
|
// $request = new ModuleRequest('upload/call_log', array() );
|
||||||
|
// $response = $request->dispatch();
|
||||||
|
// var_dump( ManagerError::explicit($response->error) );
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
"root": "/src/upload",
|
"root": "/src/upload",
|
||||||
"directories": [
|
"directories": [
|
||||||
"call_log",
|
"call_log",
|
||||||
|
"local_data",
|
||||||
"spss",
|
"spss",
|
||||||
"pspp"
|
"pspp"
|
||||||
]
|
]
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -69,6 +69,9 @@
|
||||||
/* Erreur d'UPLOAD */
|
/* Erreur d'UPLOAD */
|
||||||
const UploadError = 17;
|
const UploadError = 17;
|
||||||
|
|
||||||
|
// Mauvais format de fichier
|
||||||
|
const FormatError = 18;
|
||||||
|
|
||||||
|
|
||||||
/* EXPLICITE UN CODE D'ERREUR
|
/* EXPLICITE UN CODE D'ERREUR
|
||||||
*
|
*
|
||||||
|
@ -102,6 +105,7 @@
|
||||||
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
case self::TokenError: return "Le token de connection est absent, érroné ou expiré."; break;
|
||||||
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
case self::PermissionError: return "Vous n'avez pas la permission d'effectuer cette action."; break;
|
||||||
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
case self::UploadError: return "Une erreur d'upload est survenue."; break;
|
||||||
|
case self::FormatError: return "Le fichier n'est pas au bon format."; break;
|
||||||
|
|
||||||
// default: return "Erreur inconnue..."; break;
|
// default: return "Erreur inconnue..."; break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,15 +14,16 @@
|
||||||
* @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['']
|
* @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 error<ManagerError> Retourne l'erreur attestant de l'état de l'upload
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static function simpleFile($prefix, $extension, $file){
|
private static function simpleFile($prefix, $extension, $file, $tester){
|
||||||
|
|
||||||
// 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 ManagerError::PermissionError;
|
||||||
|
|
||||||
|
|
||||||
/* [0] On formatte les entrées
|
/* [0] On formatte les entrées
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$prefix = htmlspecialchars($prefix);
|
$prefix = htmlspecialchars($prefix);
|
||||||
|
@ -48,6 +49,7 @@
|
||||||
if( !is_array($uploadAuth) )
|
if( !is_array($uploadAuth) )
|
||||||
return ManagerError::ParsingFailed;
|
return 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
|
||||||
|
@ -55,7 +57,20 @@
|
||||||
returnManagerError::UploadError;
|
returnManagerError::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 'Success' si format ok, sinon 'FormatError' */
|
||||||
|
if( $tester($file_content) ) return ManagerError::Success;
|
||||||
|
else 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.'/';
|
||||||
|
@ -69,14 +84,16 @@
|
||||||
/* (4) On se place dans le dossier */
|
/* (4) On se place dans le dossier */
|
||||||
chdir( $path );
|
chdir( $path );
|
||||||
|
|
||||||
/* [4] Création du fichier (temporaire->permanent)
|
|
||||||
|
/* [5] 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'], $path.$fileName) ){
|
||||||
// on modifie les droits du fichier
|
// on modifie les droits du fichier
|
||||||
chmod($path.$fileName, 0774);
|
chmod($path.$fileName, 0774);
|
||||||
|
|
||||||
return ManagerError::Success;
|
return ManagerError::Success;
|
||||||
|
|
||||||
|
/* (2) Si une erreur occure -> 'UploadError' */
|
||||||
}else
|
}else
|
||||||
return ManagerError::UploadError;
|
return ManagerError::UploadError;
|
||||||
}
|
}
|
||||||
|
@ -95,7 +112,76 @@
|
||||||
extract($params);
|
extract($params);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'ModuleError' => self::simpleFile('call_log', 'xml', $file)
|
'ModuleError' => self::simpleFile(
|
||||||
|
'call_log', // nom du dossier d'upload
|
||||||
|
'xml', // format du fichier
|
||||||
|
$file, // Fichier lui-même
|
||||||
|
function($content){ // Vérification du format du fichier
|
||||||
|
/* (1) Vérification du format XML */
|
||||||
|
$xml = simplexml_load_string($content);
|
||||||
|
if( $xml === false ) return false; // Si erreur de parsage, on retourne une erreur
|
||||||
|
|
||||||
|
/* (2) Vérification du contenu (balises) */
|
||||||
|
// Doit avoir des Item(s)
|
||||||
|
if( !isset($xml->Item) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Vérification de tous les champs
|
||||||
|
foreach($xml->Item as $log){
|
||||||
|
$checkAttributes = isset($log['Id']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Number']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Name']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Date']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Duration']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Direction']);
|
||||||
|
$checkAttributes = $checkAttributes && isset($log['Type']);
|
||||||
|
|
||||||
|
// Si on a pas tout les champs, on retourne une erreur
|
||||||
|
if( !$checkAttributes )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (3) Si tout s'est bien passé, le format est bon */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* IMPORT D'UNE SAUVEGARDE DE FORMULAIRE LOCAL
|
||||||
|
*
|
||||||
|
* @file<FILE> Pointeur vers $_FILES['']
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static function call_log($params){
|
||||||
|
extract($params);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'ModuleError' => self::simpleFile(
|
||||||
|
'local_data', // nom du dossier d'upload
|
||||||
|
'json', // format du fichier
|
||||||
|
$file, // Fichier lui-même
|
||||||
|
function($content){ // Vérification du format du fichier
|
||||||
|
/* (1) Vérification du format JSON */
|
||||||
|
$json = json_decode($content, true);
|
||||||
|
if( $json == null )
|
||||||
|
return false; // Si erreur de parsage, on retourne une erreur
|
||||||
|
|
||||||
|
/* (2) Vérification du contenu de premier niveau */
|
||||||
|
$checkLevel0 = isset($json['subject']) && is_array($json['subject']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['contacts']) && is_array($json['contacts']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['mini']) && is_array($json['mini']);
|
||||||
|
$checkLevel0 = $checkLevel0 && isset($json['fiches']) && is_array($json['fiches']);
|
||||||
|
|
||||||
|
/* (3) Si tout s'est bien passé, le format est bon */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue