Préfixe (dossier parent) du fichier * @extension Extension du fichier * @file Pointeur vers $_FILES[''] * @tester Fonction qui renvoie TRUE si le format est correct (en prenant le contenu du fichier en paramètre) * * @return error Retourne l'erreur attestant de l'état de l'upload * */ private static function simpleFile($prefix, $extension, $file, $tester){ // Si on est pas connecté, on retourne une erreur -> impossible via token if( !connected() ) return 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) 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; /* [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; /* [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 */ $path = __ROOT__.$uploadAuth['root'].'/'.$prefix.'/'; /* (2) On crée le dossier s'il n'existe pas */ if ( !file_exists($path) ) mkdir($path, 0775, true); /* (3) On construit le nom du fichier */ $fileName = $_SESSION['username'].'.'.$extension; /* (4) On se place dans le dossier */ chdir( $path ); /* [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) ){ // on modifie les droits du fichier chmod($path.$fileName, 0774); return ManagerError::Success; /* (2) Si une erreur occure -> 'UploadError' */ }else return ManagerError::UploadError; } /* IMPORT D'UN JOURNAL D'APPEL * * @file Pointeur vers $_FILES[''] * */ public static function call_log($params){ extract($params); return array( '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 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; } ) ); } } ?>