Browse Source

[ZF-8693] Zend_File:

- allow overriding of file options

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20269 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 years ago
parent
commit
aded3bad0f

+ 9 - 7
library/Zend/File/Transfer/Adapter/Abstract.php

@@ -401,6 +401,7 @@ abstract class Zend_File_Transfer_Adapter_Abstract
                         $options   = $validatorInfo;
                         $this->addValidator($validator, $breakChainOnFailure, $options, $files);
                     } else {
+                        $file = $files;
                         switch (true) {
                             case (0 == $argc):
                                 break;
@@ -411,9 +412,11 @@ abstract class Zend_File_Transfer_Adapter_Abstract
                             case (3 <= $argc):
                                 $options = array_shift($validatorInfo);
                             case (4 <= $argc):
-                                $files = array_shift($validatorInfo);
+                                if (!empty($validatorInfo)) {
+                                    $file = array_shift($validatorInfo);
+                                }
                             default:
-                                $this->addValidator($validator, $breakChainOnFailure, $options, $files);
+                                $this->addValidator($validator, $breakChainOnFailure, $options, $file);
                                 break;
                         }
                     }
@@ -473,21 +476,20 @@ abstract class Zend_File_Transfer_Adapter_Abstract
      */
     public function getValidators($files = null)
     {
-        $files = $this->_getFiles($files, true, true);
-
-        if (empty($files)) {
+        if ($files == null) {
             return $this->_validators;
         }
 
+        $files      = $this->_getFiles($files, true, true);
         $validators = array();
         foreach ($files as $file) {
             if (!empty($this->_files[$file]['validators'])) {
                 $validators += $this->_files[$file]['validators'];
             }
         }
-        $validators = array_unique($validators);
 
-        $result = array();
+        $validators = array_unique($validators);
+        $result     = array();
         foreach ($validators as $validator) {
             $result[$validator] = $this->_validators[$validator];
         }

+ 36 - 0
tests/Zend/File/Transfer/Adapter/AbstractTest.php

@@ -802,6 +802,42 @@ class Zend_File_Transfer_Adapter_AbstractTest extends PHPUnit_Framework_TestCase
                 'bar' => array('magicFile' => 'test/file', 'ignoreNoFile' => false, 'useByteString' => true),
             ), $this->adapter->getOptions('bar'));
     }
+
+    /**
+     * @ZF-8693
+     */
+    public function testAdapterShouldAllowAddingMultipleValidatorsAtOnceUsingBothInstancesAndPluginLoaderForDifferentFiles()
+    {
+        $validators = array(
+            array('MimeType', true, array('image/jpeg')), // no files
+            array('FilesSize', true, array('max' => '1MB', 'messages' => 'файл больше 1MБ')), // no files
+            array('Count', true, array('min' => 1, 'max' => '1', 'messages' => 'файл не 1'), 'bar'), // 'bar' from config
+            array('MimeType', true, array('image/jpeg'), 'bar'), // 'bar' from config
+        );
+
+        $this->adapter->addValidators($validators, 'foo'); // set validators to 'foo'
+
+        $test = $this->adapter->getValidators();
+        $this->assertEquals(3, count($test));
+
+        //test files specific validators
+        $test = $this->adapter->getValidators('foo');
+        $this->assertEquals(2, count($test));
+        $mimeType = array_shift($test);
+        $this->assertTrue($mimeType instanceof Zend_Validate_File_MimeType);
+        $filesSize = array_shift($test);
+        $this->assertTrue($filesSize instanceof Zend_Validate_File_FilesSize);
+
+        $test = $this->adapter->getValidators('bar');
+        $this->assertEquals(2, count($test));
+        $filesSize = array_shift($test);
+        $this->assertTrue($filesSize instanceof Zend_Validate_File_Count);
+        $mimeType = array_shift($test);
+        $this->assertTrue($mimeType instanceof Zend_Validate_File_MimeType);
+
+        $test = $this->adapter->getValidators('baz');
+        $this->assertEquals(0, count($test));
+    }
 }
 
 class Zend_File_Transfer_Adapter_AbstractTest_MockAdapter extends Zend_File_Transfer_Adapter_Abstract