浏览代码

merge r25092 to release-1.12

git-svn-id: http://framework.zend.com/svn/framework/standard/branches/release-1.12@25093 44c647ce-9c0f-0410-b52a-842ac1e357ba
rob 13 年之前
父节点
当前提交
b2907db1d3

+ 7 - 2
library/Zend/Form/Decorator/FormElements.php

@@ -82,8 +82,13 @@ class Zend_Form_Decorator_FormElements extends Zend_Form_Decorator_Abstract
         $items          = array();
         $view           = $form->getView();
         foreach ($form as $item) {
-            $item->setView($view)
-                 ->setTranslator($translator);
+            $item->setView($view);
+
+            // Set translator
+            if (!$item->hasTranslator()) {
+                $item->setTranslator($translator);
+            }
+
             if ($item instanceof Zend_Form_Element) {
                 foreach ($displayGroups as $group) {
                     $elementName = $item->getName();

+ 10 - 0
library/Zend/Form/DisplayGroup.php

@@ -977,6 +977,16 @@ class Zend_Form_DisplayGroup implements Iterator,Countable
     }
 
     /**
+     * Does this display group have its own specific translator?
+     *
+     * @return bool
+     */
+    public function hasTranslator()
+    {
+        return (bool) $this->getTranslator();
+    }
+
+    /**
      * Indicate whether or not translation should be disabled
      *
      * @param  bool $flag

+ 26 - 0
tests/Zend/Form/DisplayGroupTest.php

@@ -803,6 +803,32 @@ class Zend_Form_DisplayGroupTest extends PHPUnit_Framework_TestCase
         $t2 = $this->group->getDecorators();
         $this->assertEquals($t1, $t2);
     }
+
+    /**
+     * @group ZF-12375
+     */
+    public function testHasTranslatorWithDefaultValue()
+    {
+        $this->assertFalse($this->group->hasTranslator());
+    }
+
+    /**
+     * @group ZF-12375
+     */
+    public function testHasTranslatorWithTranslateObject()
+    {
+        $this->group->setTranslator(
+            new Zend_Translate(
+                array(
+                    'adapter' => 'array',
+                    'content' => array(
+                        'foo' => 'Foo',
+                    ),
+                )
+            )
+        );
+        $this->assertTrue($this->group->hasTranslator());
+    }
 }
 
 class Zend_Form_DisplayGroupTest_DisplayGroup extends Zend_Form_DisplayGroup

+ 42 - 0
tests/Zend/Form/FormTest.php

@@ -4336,6 +4336,48 @@ class Zend_Form_FormTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * @group ZF-12375
+     */
+    public function testElementTranslatorNotOveriddenbyFormTranslatorDuringRendering()
+    {
+        // Set translator for form
+        $this->form->setTranslator(
+            new Zend_Translate(
+                'array',
+                array(
+                    'labelText' => 'Foo',
+                )
+            )
+        );
+
+        // Add element with his own translator
+        $this->form->addElement(
+            'text',
+            'foo',
+            array(
+                 'label'      => 'labelText',
+                 'translator' => new Zend_Translate(
+                     'array',
+                     array(
+                         'labelText' => 'Bar',
+                     )
+                 ),
+                 'decorators' => array(
+                     'Label',
+                 ),
+            )
+        );
+
+        $this->form->setDecorators(array('FormElements'));
+
+        // Test
+        $this->assertSame(
+            PHP_EOL . '<label for="foo" class="optional">Bar</label>' . PHP_EOL,
+            $this->form->render(new Zend_View())
+        );
+    }
+
+    /**
      * Used by test methods susceptible to ZF-2794, marks a test as incomplete
      *
      * @link   http://framework.zend.com/issues/browse/ZF-2794