Bonjour,

J'ai suivie le Tuto Upload Drag and drop jQuery et j'ai voulu ajouter la possibilité d'uploader des dossier (compresser en zip obligatoire :) ) ou des fichiers.

J'ai donc crée une class PHP qui permet de de définir certaine variable tel que le chmod des fichier et dossier, les fichiers autorisé etc..

J'aurais aimer avoir de l'aide sur le code car en effet je connais le PHP mais pas tous les racourci :).

Je m'explique, je souhaiterai lors de la vérification d'une fonction la faire comme ceci :

[code]
if(!ma_fonction){
instructions .....
}

[/code]

Pour cela j'ai ajouter dans chaque fonction :

[code]

if(condition){
instructions...
return true;
}else{
return false;
}

[/code]

Je suis sur qu'il y a plus propre a écrit et c'est pourquoi je demande de l'aide pour ceci mais également sur certain fonctions php que je ne connait pas et qui remplacerai peut être d'autre que j'ai utilisée :)

J'aimerai également si possible avoir votre avis sur ce qui est bien et pas bien mais également une idée a rajouter a se plugin que je compte améliorer car les évènement Drag and Drop sont vraiment intéressant et je remercie Grafikart pour ce Tuto :).

Je précise également que je n'est pas encore mi les variables en privée ainsi que les getter setter mais il seront intégrer une fois finaliser :)

code PHP :

[code]
<?php

class dropFile{

var $chmodDir = 0775;
var $chmodFile = 0775;
var $permsDir = Array('uploadFolder', 'texte', 'image');
var $permsImg = Array('image/png', 'image/gif', 'image/jpeg');
var $permsFile = Array('application/zip');
var $uploadFolder = 'uploadFolder/';
var $uploadExtract = true;
var $convertToUTF8 = true;
var $error = null;

/**

  • Function uploadImg
  • Permet d'uploader une image
  • @param $source source de l'image
  • @param $header header de la source
  • return $obj objet contenant le nom et l'image uploader si il n'y a eu aucune erreur
    **/
    public function uploadImg($source,$header){
    $obj = new stdClass();
    $this->uploadFolder = isset($header['x-param-folder']) ? $header['x-param-folder'].'/' : $this->uploadFolder;
    if (!$this->permissions($this->uploadFolder, $this->permsDir)) {
    $this->error = $obj->error = 'Le dossier n\'existe pas';
    return false;
    }else{
    //Si le dossier n'existe pas on le crée
    if (!is_dir($this->uploadFolder && (!in_array(needle, haystack)))) {
    umask(0000);
    mkdir($this->uploadFolder, $this->chmodDir);
    }
    //Vérification des autorisations
    if (!$this->permissions($header['x-file-type'],$this->permsImg)) {
    return false;
    }else{
    if(isset($header['x-param-value'])){
    unlink($this->uploadFolder.$header['x-param-value']);
    }
    $this->imageresize($source ,$this->uploadFolder.$header['x-file-name'],150,100,true);
    $obj->name = $header['x-file-name'];
    $obj->content = '<img src="'.$this->uploadFolder.$header['x-file-name'].'"/>';
    return $obj;
    }
    }
    }

    /**

  • Function uploadFile
  • Permet d'uploader un fichier
  • @param $source source du fichier
  • @param $header header de la source
  • @param $removeZip si true supprime le fichier zip après extraction
  • return $obj objet contenant le nom et le type du fichier uploader si il n'y a eu aucune erreur
    **/
    public function uploadFile($source, $header, $removeZip=false){
    //Vérification de l'autorisation
    if (!$this->permissions($header['x-file-type'],$this->permsFile)){
    return false;
    }else{
    $this->uploadFolder = isset($header['x-param-folder']) ? $header['x-param-folder'].'/' : $this->uploadFolder;
    if (!$this->permissions($this->uploadFolder, $this->permsDir)) {
    $this->error = $obj->error = 'Le dossier n\'existe pas';
    return false;
    }else{
    $obj = new stdClass();
    file_put_contents($this->uploadFolder.$header['x-file-name'], $source);
    //Extrait le fichier si celui-ci est un fichier zip et si on a autorisée l'extraction
    if ($this->uploadExtract == true && $header['x-file-type'] == 'application/zip') {
    //arrête la fonction si il y a eu une erreur dans l'extraction du fichier
    if (!$this->extractZip($this->uploadFolder,$header['x-file-name'])) {
    return false;
    }else{
    //Si la suppression du fichier zip est vrai alors on le supprime
    if ($removeZip == true) {
    unlink($this->uploadFolder.$header['x-file-name']);
    }
    //Si la convertion en UTF-8 à été autorisée
    if ($this->convertToUTF8 == true){
    $NameFile = explode(".", $header['x-file-name']);
    //Si le fichier décompressé est un dossier on applique la récursivité
    if (is_dir($this->uploadFolder.$NameFile[0].'/')) {
    if (!$this->dirToUTF8($this->uploadFolder.$NameFile[0].'/')) {
    $this->error = 'Un problème est survenue lors de la convertion en UTF-8 du dossier '.$NewFolder[0].'/';
    return false;
    }
    }else{
    //Sinon on convertie le fichier
    if (!toUTF8($src, $this->chmodFile)){
    $obj->error = 'Un problème est survenue lors de la convertion en UTF-8 du fichier '.$NewFolder[0];
    return false;
    }
    }
    }
    $obj->name = $NameFile;
    return $obj;
    }
    }else{
    $obj->name = $header['x-file-name'];
    return $obj;
    }
    }
    }
    }

    /**

  • Function permissions
  • Permet de vérifier les extensions autorisées selon le type de permissions
  • @param $header header de la source
  • @param $permsType type d'upload à vérifier
    **/
    public function permissions($header,$permsType){
    if(!in_array($header,$permsType)){
    $this->error = 'Format non autorisé';
    return false;
    }else{
    return true;
    }
    }

    /**

  • Function extractZip
  • Permet d'extraire un fichier zip
  • @param $folder dossier contenant le fichier zip
  • @param $nameZip nom du fichier zip
    **/
    public function extractZip($folder,$nameZip){
    $zip = new ZipArchive;
    umask(0000);
    chmod($folder.$nameZip, $this->chmodFile);
    if ($zip->open($folder.$nameZip) === TRUE) {
    $zip->extractTo($folder);
    $zip->close();
    unset($zip);
    return true;
    }else{
    $this->error = 'Erreur lors de la décompression du fichier '.$nameZip;
    return false;
    }
    }

    /**

  • Function dirToUTF8
  • Permet de parcourir un dossier avec récursivité et de convertir tous les fichiers en UTF-8
  • @param $dir_src dossier source à parcourir
    **/
    public function dirToUTF8($dir_src){
    if (is_dir($dir_src)){
    if ($dir = opendir($dir_src)) {
    while (($file = readdir($dir)) !== false) {
    if(is_dir($dir_src.$file) && $file != '..' && $file != '.'){
    $this->dirToUTF8( $dir_src.$file.'/');
    }elseif($file != '..' && $file != '.'){
    if (!$this->toUTF8($dir_src.$file, $this->chmodFile)) {
    return false;
    }else{
    return true;
    }
    }
    }
    closedir($dir);
    }
    return true;
    }else{
    $this->error("Le dossier que vous essayez de convertir n\'existe pas : ".$dir_src);
    return false;
    }
    }

    /**

  • Function toUTF8
  • Permet de convertir un fichier en UTF-8
  • @param $src chemin du fichier à convertir
  • @param $chmod modifie le chmod du fichier
    **/
    public function toUTF8($src, $chmod){
    umask(0000);
    chmod($src, $chmod);
    $content = file_get_contents($src);
    $convert_utf8 = utf8_encode($content);
    if (!file_put_contents($src,$convert_utf8)) {
    return false;
    $this->error("Erreur lors de la convertion : ".$src);
    }else{
    return true;
    }
    }

    /**

  • Function imageresize
  • Permet de redimentionner une image
  • @param $source source de l'image
  • @param $destination destination de l'image
  • @param $width largeur de l'image
  • @param $height hauteur de l'image
  • @param $crop true si crop l'image
  • @param $quality qualiter du redimentionnement de l'image
    **/
    public function imageresize($source, $destination, $width = 0, $height = 0, $crop = false, $quality = 80) {
    //Fonction dans les sources de ce Tuto
    }
    }
    ?>

[/code]

Je n'est pas encor optimiser le code js :)

code Jquery :

[code]
$('.dropfile').dropfile({
clone : false,
complete: function(json){
console.log(json);
if (json.error) {
$('.alert').addClass('alert-error');
$('.alert h4').text('Erreur :').append(json.error);
$('.alert').hide().slideDown(500);
}else{
$('.alert').addClass('alert-success');
$('.alert h4').text('Succès : ').append(json.success);
$('.alert').hide().slideDown(500);
}

        }
   });

[/code]

le fichier php de l'utilisation de la class PHP :

[code]
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
header('content-type: application/json');

include('../../class/class_dropFile.php');

$source = file_get_contents('php://input');
$h = getallheaders();

$upload = new dropFile();
$result = $upload->uploadFile($source,$h,true);
if (!$result) {
echo json_encode($upload->error);
}else{
echo json_encode($result);
}

?>
[/code]

Je vous remercie d'avance de votre aide :)

WebMaster junior chez [url=http://www.123plantes.com]123plantes[/url]

Aucune réponse