2010-11-29 33 views
0

Je télécharge des fichiers et je veux dire à l'utilisateur s'il veut supprimer ou écraser son fichier précédent ... donc je veux afficher un popup à partir d'une action du contrôleur avant de supprimer donc si l'utilisateur dit oui le fichier sera écrasé, sinon il mettra un horodatage avant le nom de fichier précédent ...Comment ouvrir une popup à partir d'un contrôleur cakephp

Est-ce possible?

Voici mon code ...

<?php 

class AttachableBehavior extends ModelBehavior { 

    var $_defaults = array('label'   => 'attachment', 
          'location'  => 'files', 
          'errorMessages' => array('isUploaded' => 'Malicious file upload.', 
                'moveUploaded' => 'Error moving file upload.', 
                'isValidType' => 'Invalid file type. Please check your file type and try again.', 
                'isValidSize' => 'Invalid file size. Please check your file size and try again.' 
                ), 
          'thumbQuality' => 80, 
          'maxSize'  => '1048576', 
          'fields'  => array('attachmentLocation' => 'attachmentLocation', 
                'attachmentWidth' => 'attachmentWidth', 
                'attachmentHeight' => 'attachmentHeight', 
                'attachmentName'  => 'attachmentName', 
                'attachmentType'  => 'attachmentType', 
                'attachmentSize'  => 'attachmentSize'), 
         ); 

    var $_validThumbTypes = array('image/jpeg', 'image/pjpeg'); 
    var $_attachmentRoot = null; 
    var $_errorMsg = "Error uploading file"; 
    var $settings = array(); 
    var $model = null; 

    function setup(&$model, $config = array()) 
    { 
    $this->settings[$model->name] = array_merge($this->_defaults, $config); 
    $this->model = $model; 
    $this->_attachmentRoot = WWW_ROOT . str_replace(array('/', '\\'), array(DS,DS), $this->settings[$model->name]['location']) . DS; 
    } 

    function beforeSave(&$model) 
    { 
    extract($this->settings[$model->name]); 
    $attachment = $model->data[$model->name][$label]; 
    if (!empty($attachment['name'])) 
    { 
     $model->data[$model->name][$fields['attachmentName']] = ($this->_fileExists($this->_attachmentRoot . $attachment['name'])) ? time() . '_' . $attachment['name'] : $attachment['name']; 
     $model->data[$model->name][$fields['attachmentType']] = $attachment['type']; 
     $model->data[$model->name][$fields['attachmentSize']] = $attachment['size']; 
     $model->data[$model->name][$fields['attachmentLocation']] = $location; 
     if ($model->id > 0) 
     { 
     $record = $model->findById($model->id); 
     $this->_deleteAttachments($record[$model->name][$fields['attachmentName']]); 
     } 

     if (!$this->_isUploaded($attachment) || 
      !$this->_isValidSize($attachment['size']) || 
      !$this->_isValidType($attachment) || 
      !$this->_dirExists($this->_attachmentRoot) || 
      !$this->_moveUploaded($attachment['tmp_name'], $model->data[$model->name][$fields['attachmentName']]) 
     ) 
     { 
     $model->validationErrors[$label] = $this->_errorMsg; 
     return false; 
     } 
     if (in_array($attachment['type'], $this->_validThumbTypes)) 
     { 
     list($width, $height) = getimagesize($this->_attachmentRoot . $model->data[$model->name][$fields['attachmentName']]); 
     $model->data[$model->name][$fields['attachmentWidth']] = $width; 
     $model->data[$model->name][$fields['attachmentHeight']] = $height; 
     if (isset($this->settings[$model->name]['thumbnails'])) 
     { 
      foreach ($this->settings[$model->name]['thumbnails'] as $dir => $size) 
      { 
      list($width, $height) = explode('x', strtolower($size)); 
      if($this->_dirExists($this->_attachmentRoot . $dir)) 
      { 
       $this->_resizeToThumb($model->data[$model->name][$fields['attachmentName']], $dir, $width, $height); 
      } 
      }   
     } 
     }   
    } 
    else 
    { 
     $model->validationErrors[$label] = $this->_errorMsg; 
     return false; 
    } 
    // pr($attachment); 
    // exit(); 
    return true; 
    } 

    function beforeDelete(&$model) 
    { 
    $model->read(null, $model->id); 
    $this->_deleteAttachments($model->data[$model->name]['attachmentName']); 
    return true; 
    } 





    # protected methods 

    function _moveUploaded($tmpName, $attachmentName) 
    { 
    if (move_uploaded_file($tmpName, $this->_attachmentRoot . $attachmentName)) 
    { 
     return true; 
    } 
     $this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['moveUploaded']; 
     return false; 
    } 

    function _isUploaded($attachment) 
    { 
    if (isset($attachment['error']) && $attachment['error'] == 0 || !empty($attachment['tmp_name']) && $attachment['tmp_name'] != 'none') 
    { 
     return is_uploaded_file($attachment['tmp_name']); 
    } 
     $this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isUploaded']; 
     return false; 
    } 

    function _isValidType($attachment) 
    { 
    $ext = substr($attachment['name'], strrpos($attachment['name'], '.') + 1); 
    if (isset($this->settings[$this->model->name]['types'][$attachment['type']]) && 
     $ext == $this->settings[$this->model->name]['types'][$attachment['type']]) 
    { 
     return true; 
    } 
     $this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isValidType']; 
     return false;  
    } 

    function _isValidSize($size) 
    { 
    if($size == 0) return false; 

    if ($size <= $this->settings[$this->model->name]['maxSize']) 
    { 
     return true; 
    } 
    $this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isValidSize']; 
    return false; 
    } 

    function _dirExists($dir) 
    { 
    if (!file_exists($dir)) 
    { 
     trigger_error(__("AttachableBehavior Error - Please create '{$dir}' directory and set permissions for uploading.", true), E_USER_WARNING); 
     return false; 
    } 
    return true; 
    } 

    function _fileExists($file) 
    { 
    if (file_exists($file)) 
    { 
     return true; 
    } 
    return false; 
    } 

    function _deleteFile($file) 
    { 
    if (file_exists($file)) 
     { 
      return unlink($file); 
     } 
     return false; 
    } 

    function _deleteAttachments($attachment) 
    { 
    $this->_deleteFile($this->_attachmentRoot . $attachment); 
    if (isset($this->settings[$this->model->name]['thumbnails'])) 
    { 
     foreach ($this->settings[$this->model->name]['thumbnails'] as $dir => $size) 
     { 
     if ($this->_fileExists($this->_attachmentRoot . $dir . DS . $attachment) && !empty($attachment)) 
     { 

      $this->_deleteFile($this->_attachmentRoot . $dir . DS . $attachment); 
     } 
     } 
    } 
    } 

    function _resizeToThumb($imgName, $dir, $canvasWidth, $canvasHeight) 
    { 
    $img = $this->_attachmentRoot . $imgName; 
    list($imgWidth, $imgHeight) = getimagesize($img); 
    $ratioOrig = $imgWidth/$imgHeight; 
    if(($canvasWidth/$canvasHeight) > $ratioOrig) 
    { 
     $canvasWidth = $canvasHeight * $ratioOrig;  
    } 
    else 
    { 
     $canvasHeight = $canvasWidth/$ratioOrig; 
    } 
    $original = imagecreatefromjpeg($img); 
    $canvas = imagecreatetruecolor($canvasWidth, $canvasHeight); 
    imagecopyresampled($canvas, $original, 0, 0, 0, 0, $canvasWidth, $canvasHeight, $imgWidth, $imgHeight); 
    $createJpg = imagejpeg($canvas, $this->_attachmentRoot . $dir . DS . $imgName, $this->settings[$this->model->name]['thumbQuality']); 
    imagedestroy($canvas); 
    imagedestroy($original); 
    if($createJpg) 
    { 
     return true; 
    } 
    return false; 
    }  


} 
?> 

Répondre

1

... i de Nevermind il a réussi une autre manière ... je mets juste un horodatage Infront le nom du fichier et de laisser l'utilisateur pas d'autre choix que de télécharger le fichier. ..