CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 06-04-2011 17:17:33

benjsno
Chouquette
Date d'inscription: 07-01-2011
Messages: 3

Media plugin et delete

Salut,
j'utilise Media plugin de David Persson pour gérer mes fichiers uploadés.
ce plugin me permet de faire plusieurs format d'image lors de l'ajout dans la BDD.
Mais mon problème est que quand je supprime un Média cela supprime bien l'entrée dans la BDD mais seulement le fichier de transfert (media/transfert/img) et pas les fichiers filtrés (media/filter/img).

Quelqu'un utilise ce plugin ?

Pour être plus précis, j'upload un fichier jpg en ajax avec uploadify et un composant cake Cuploadify.
Jusqu'ici tout va bien mon upload se fait.
Ensuite j'envoie un formulaire avec les champs cachés remplis à la fin de l'upload.
ce qui sauvegarde les données dans la BDD et fait different format de fichier.

donc j'ai une table mediafiles :

Code: php

  1. CREATE TABLE `mediafiles` (
  2.   `id` int(11) unsigned NOT NULL auto_increment,
  3.   `dirname` varchar(100) collate utf8_unicode_ci NOT NULL,
  4.   `basename` varchar(60) collate utf8_unicode_ci NOT NULL,
  5.   `model` varchar(20) collate utf8_unicode_ci NOT NULL,
  6.   `foreign_key` int(11) unsigned NOT NULL,
  7.   `size` int(11) NOT NULL,
  8.   `width` int(10) unsigned NOT NULL,
  9.   `height` int(10) unsigned NOT NULL,
  10.   `created` datetime NOT NULL,
  11.   `modified` datetime NOT NULL,
  12.   PRIMARY KEY  (`id`)
  13. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=19 ;

app/models/mediafile.php

Code: php

  1. class Mediafile extends AppModel{
  2.   var $name = "Mediafile";
  3.  
  4.   //media plugin behaviors
  5.   var $actsAs = array(
  6.     'Media.Coupler' => array(
  7.       'baseDirectory' => MEDIA_TRANSFER,
  8.       'filterDirectory' => MEDIA_FILTER
  9.     ),
  10.     'Media.Generator' => array(
  11.       'baseDirectory' => MEDIA_TRANSFER,
  12.       'filterDirectory' => MEDIA_FILTER,
  13.       'createDirectory' => true,
  14.     ),
  15.     'Media.Polymorphic'
  16.   );
  17.  
  18.   //file validation which only allowed jpeg and png to be uploaded
  19.   var $validate = array(
  20.     'file' => array(
  21.       'mimeType' => array(
  22.         'rule' => array('checkMimeType', false, array( 'image/jpeg', 'image/png'))
  23.       )
  24.     )
  25.   );
  26.  
  27. }

app/controllers/mediafiles_controller.php

Code: php

  1. class MediafilesController extends AppController {
  2.  
  3.   var $name = 'Mediafiles';
  4.   var $components = array('RequestHandler', 'Cuploadify.cuploadify');
  5.    
  6.   ...
  7.  
  8.   function upload_img() {
  9.     $this->cuploadify->upload();
  10.   }
  11.   
  12.   function add() {
  13.     $this->layout = "admin";
  14.     if (!empty($this->data)) {
  15.      
  16.       $this->data['Mediafile']['width']  = $this->Session->read('metadatawidth');
  17.       $this->data['Mediafile']['height'] = $this->Session->read('metadataheight');
  18.      
  19.       $this->data['Mediafile']['dirname'] = 'img';
  20.      
  21.      
  22.       // Thumb creation with Media Plugin
  23.       //$this->Mediafile->make($this->data['Mediafile']['dirname'] . DS . $this->data['Mediafile']['basename']);
  24.      
  25.      
  26.       if ($this->Mediafile->save($this->data)) {
  27.         //$result = '<div>success</div>';
  28.         //$result .= '<div>mediafile_id = '.$this->Mediafile->id.' </div>';
  29.         $this->Session->setFlash(__('The mediafile has been saved', true));
  30.         $this->redirect(array('action' => 'index'));
  31.       }else{
  32.         //$result = '<div id="output">failed</div>';
  33.         //$result .= '<div id="message">'. $this->Mediafile->validationErrors['file'] .'</div>';
  34.         $this->Session->setFlash(__('The mediafile could not be saved. Please, try again.', true));
  35.       }
  36.      
  37.       //$this->RequestHandler->renderAs($this, 'ajax');
  38.       //$this->set(compact('result'));
  39.       //$this->render('../elements/ajax');
  40.      
  41.     }
  42.    
  43.   }
  44.  
  45.   function delete($id = null) {
  46.     $this->layout = "admin";
  47.     if (!$id) {
  48.       $this->Session->setFlash(__('Invalid id for mediafile', true));
  49.       $this->redirect(array('action'=>'index'));
  50.     }
  51.     if ($this->Mediafile->delete($id)) {
  52.       $this->Session->setFlash(__('Mediafile deleted', true));
  53.       $this->redirect(array('action'=>'index'));
  54.     }
  55.     $this->Session->setFlash(__('Mediafile was not deleted', true));
  56.     $this->redirect(array('action' => 'index'));
  57.   }
  58.  
  59. }

app/views/mediafiles/add.ctp

Code: php

  1. <?php echo $this->Html->script('jquery1.5.1.min', array('inline'=>false)); ?>
  2. <?php echo $this->Html->css('uploadify', null, array('inline'=>false)); ?>
  3. <?php echo $this->Html->script('swfobject', array('inline'=>false)); ?>
  4. <?php echo $this->Html->script('jquery.uploadify.v2.1.4.min', array('inline'=>false)); ?>
  5.  
  6. <?php echo $this->Session->flash(); ?>   
  7.  
  8. <div class="mediafiles form">
  9.  
  10. <?php echo $this->Form->create('Mediafile', array('type'=>'file')); ?>
  11.   <fieldset>
  12.     <legend><?php __('Ajouter un média'); ?></legend>
  13.     <?php
  14.    
  15.     echo $this->element("uploadify", array(
  16.       "plugin" => "cuploadify",
  17.       "dom_id" => "file_upload",
  18.       "session_id" => $this->Session->id(),
  19.       "options" => array(
  20.         "script" => $this->Html->url(array("controller"=>"mediafiles", "action"=>"upload_img")),
  21.         "buttonText" => "Ajouter un JPG",
  22.         "uploader" => $this->Html->url('/files/uploadify.swf'),
  23.         "cancelImg" => $this->Html->url('/img/uploadify/cancel.png'),
  24.         "folder" => '/media/transfer/img',
  25.         "auto" => true,
  26.         "onComplete" => "UPLcompleted",
  27.         "onError" => "UPLerror"
  28.       )
  29.     ));
  30.    
  31.     echo '<div id="resultUpload">';
  32.     if (isset($result)) echo $result;
  33.     echo '</div>';
  34.    
  35.    
  36.     echo $this->Form->input('file_uploaded', array(
  37.       'type'=>'hidden',
  38.       'label'=> 'file_uploaded'
  39.     ));
  40.    
  41.     echo $this->Form->input('size', array(
  42.       'type'=>'hidden',
  43.       'label'=> 'size'
  44.     ));
  45.    
  46.     echo $this->Form->input('basename', array(
  47.       'type'=>'hidden',
  48.       'label'=> 'basename'
  49.     ));
  50.  
  51.     ?>
  52.   </fieldset>
  53.   <?php echo $this->Form->end(__('Submit', true));?>
  54. </div>
  55.  
  56.    
  57. <script type="text/javascript">
  58. $(function(){
  59.   $(".submit input").attr("disabled","disabled");
  60. });
  61.  
  62.   function concatObject(obj) {
  63.     str='';
  64.     for(prop in obj){
  65.       str+=prop + " value :"+ obj[prop]+"<br />";
  66.     }
  67.     return(str);
  68.   }
  69.  
  70.   function UPLcompleted(event, queueID, fileObj, reponse, data) {
  71.     $(".submit input").removeAttr("disabled");
  72.     //$('#resultUpload').html('DATA :<br/>'+concatObject(data)+'<br />'+'fileObj :<br/>'+concatObject(fileObj));
  73.     <?php $path = $this->Html->url('/media/transfer/img/'); ?>
  74.     $('#resultUpload').html('<img src="<?php echo $path; ?>'+fileObj.name+'" />');
  75.    
  76.     $('#MediafileFileUploaded').val(fileObj.filePath);
  77.     $('#MediafileSize').val(fileObj.size);
  78.     $('#MediafileBasename').val(fileObj.name);
  79.  
  80.     //document.getElementByID('MediafileAddForm').submit();
  81.   }
  82.  
  83.   function UPLerror(event, queueID, fileObj, reponse, data) {
  84.     alert ("error ! "+reponse.type+"::"+reponse.info);
  85.   }
  86.  
  87. </script>

voilà l'essentiel, j'ai déjà bien surchargé le post de code donc je m'arrête là mais si vous voulez d'autre sources dites le moi

merci! smile

Hors ligne

 

#2 11-04-2011 18:53:28

benjsno
Chouquette
Date d'inscription: 07-01-2011
Messages: 3

Re: Media plugin et delete

J'ai trouvé solution à mon problème en ajoutant une fonction beforeDelete dans le model
Pour ceux que ca intéresse :
app/models/mediafile.php

Code: php

  1. class Mediafile extends AppModel{
  2.   var $name = "Mediafile";
  3.  
  4.   //media plugin behaviors
  5.   var $actsAs = array(
  6.     'Media.Coupler' => array(
  7.       'baseDirectory' => MEDIA_TRANSFER,
  8.       'filterDirectory' => MEDIA_FILTER
  9.     ),
  10.     'Media.Generator' => array(
  11.       'baseDirectory' => MEDIA_TRANSFER,
  12.       'filterDirectory' => MEDIA_FILTER,
  13.       'createDirectory' => true,
  14.     ),
  15.     'Media.Polymorphic'
  16.   );
  17.  
  18.   //file validation which only allowed jpeg and png to be uploaded
  19.   var $validate = array(
  20.     'file' => array(
  21.       'mimeType' => array(
  22.         'rule' => array('checkMimeType', false, array( 'image/jpeg', 'image/png'))
  23.       )
  24.     )
  25.   );
  26.  
  27.   public function beforeDelete($cascade = true) {
  28.         if (!$cascade) {
  29.             return true;
  30.         }
  31.  
  32.         $result = $this->find('first', array(
  33.             'conditions' => array($this->primaryKey => $this->id),
  34.             'fields'     => array('dirname', 'basename'),
  35.             'recursive'  => -1
  36.         ));
  37.         if (empty($result)) {
  38.             return false;
  39.         }
  40.  
  41.         $pattern  = MEDIA_FILTER . "*/";
  42.         $pattern .= $result[$this->alias]['dirname'] . '/';
  43.         $pattern .= pathinfo($result[$this->alias]['basename'], PATHINFO_FILENAME);
  44.  
  45.         $files = glob("{$pattern}.*");
  46.  
  47.         $name = Mime_Type::guessName($result[$this->alias]['basename']);
  48.         $versions = array_keys(Configure::read('Media.filter.' . $name));
  49.  
  50.         if (count($files) > count($versions)) {
  51.             $message  = 'MediaFile::beforeDelete - ';
  52.             $message .= "Pattern `{$pattern}` matched more than number of versions. ";
  53.             $message .= "Failing deletion of versions and record for `Media@{$this->id}`.";
  54.             CakeLog::write('warning', $message);
  55.             return false;
  56.         }
  57.  
  58.         foreach ($files as $file) {
  59.             $File = new File($file);
  60.  
  61.             if (!$File->delete()) {
  62.                 return false;
  63.             }
  64.         }
  65.         return true;
  66.     }
  67. }

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr