浏览代码

[Uploadable] Added ability to set a default FileInfo class on the listener

comfortablynumb 13 年之前
父节点
当前提交
9a1134ff97

+ 29 - 2
lib/Gedmo/Uploadable/UploadableListener.php

@@ -39,6 +39,7 @@ class UploadableListener extends MappedEventSubscriber
     const ACTION_UPDATE = 'UPDATE';
 
     private $defaultPath;
+    private $defaultFileInfoClass = 'Gedmo\Uploadable\FileInfo\FileInfoArray';
 
     /**
      * {@inheritdoc}
@@ -122,7 +123,9 @@ class UploadableListener extends MappedEventSubscriber
             return;
         }
 
-        $fileInfo = is_array($fileInfo) ? new FileInfoArray($fileInfo) : $fileInfo;
+        $fileInfoClass = $this->getDefaultFileInfoClass();
+        $fileInfo = is_array($fileInfo) ? new $fileInfoClass($fileInfo) : $fileInfo;
+        $fileInfoProp->setValue($object, $fileInfo);
 
         $filePathField = $refl->getProperty($config['filePathField']);
         $filePathField->setAccessible(true);
@@ -203,7 +206,9 @@ class UploadableListener extends MappedEventSubscriber
         }
 
         $uow->scheduleExtraUpdate($object, $changes);
-        $ea->setOriginalObjectProperty($uow, spl_object_hash($object), $config['filePathField'], $info['filePath']);
+
+        $oid = spl_object_hash($object);
+        $ea->setOriginalObjectProperty($uow, $oid, $config['filePathField'], $info['filePath']);
     }
 
     /**
@@ -400,6 +405,28 @@ class UploadableListener extends MappedEventSubscriber
         return $this->defaultPath;
     }
 
+    /**
+     * Sets file info default class
+     *
+     * @param string
+     *
+     * @return void
+     */
+    public function setDefaultFileInfoClass($defaultFileInfoClass)
+    {
+        $this->defaultFileInfoClass = $defaultFileInfoClass;
+    }
+
+    /**
+     * Returns file info default class
+     *
+     * @return string
+     */
+    public function getDefaultFileInfoClass()
+    {
+        return $this->defaultFileInfoClass;
+    }
+
     /**
      * {@inheritDoc}
      */

+ 10 - 0
tests/Gedmo/Uploadable/Stub/FileInfoStub.php

@@ -0,0 +1,10 @@
+<?php
+
+namespace Gedmo\Uploadable\Stub;
+
+use Gedmo\Uploadable\FileInfo\FileInfoArray;
+
+class FileInfoStub extends FileInfoArray
+{
+
+}

+ 0 - 9
tests/Gedmo/Uploadable/Stub/UploadableListenerStub.php

@@ -4,15 +4,6 @@ namespace Gedmo\Uploadable\Stub;
 
 use Gedmo\Uploadable\UploadableListener;
 
-/**
- * UploadableListenerStub
- *
- * @author Gustavo Falco <comfortablynumb84@gmail.com>
- * @author Gediminas Morkevicius <gediminas.morkevicius@gmail.com>
- * @package Gedmo.Uploadable.Stub
- * @link http://www.gediminasm.org
- * @license MIT License (http://www.opensource.org/licenses/mit-license.php)
- */
 
 class UploadableListenerStub extends UploadableListener
 {

+ 21 - 0
tests/Gedmo/Uploadable/UploadableEntityTest.php

@@ -233,6 +233,27 @@ class UploadableEntityTest extends BaseTestCaseORM
         $this->em->flush();
     }
 
+    public function testSettingAnotherDefaultFileInfoClass()
+    {
+        $fileInfoStubClass = 'Gedmo\Uploadable\Stub\FileInfoStub';
+
+        $this->listener->setDefaultFileInfoClass($fileInfoStubClass);
+
+        $file = new File();
+        $fileInfo = $this->generateUploadedFile();
+
+        $file->setFileInfo($fileInfo);
+
+        $this->em->persist($file);
+        $this->em->flush();
+
+        $this->em->refresh($file);
+
+        $this->assertInstanceOf($fileInfoStubClass, $file->getFileInfo());
+    }
+
+
+
     // Data Providers
 
     public function uploadExceptionsProvider()