From 09cece55df47e308321930b35ef69ab12acac8f0 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 5 Mar 2014 13:50:12 +0100 Subject: [PATCH 1/2] Test case for #5912 - cloning of DateTimeSelectElement is corrupting state --- .../ZendTest/Form/Element/DateTimeSelectTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/ZendTest/Form/Element/DateTimeSelectTest.php b/tests/ZendTest/Form/Element/DateTimeSelectTest.php index 5c1b4fd5dc7..4a9095eb43b 100644 --- a/tests/ZendTest/Form/Element/DateTimeSelectTest.php +++ b/tests/ZendTest/Form/Element/DateTimeSelectTest.php @@ -114,4 +114,19 @@ public function testUseDefaultValueForSecondsIfNotProvided() $this->assertEquals('04', $element->getMinuteElement()->getValue()); $this->assertEquals('00', $element->getSecondElement()->getValue()); } + + public function testCloningPreservesCorrectValues() + { + $element = new DateTimeSelectElement(); + $element->setValue(new DateTime('2014-01-02 03:04:05')); + + $cloned = clone $element; + + $this->assertEquals('2014', $cloned->getYearElement()->getValue()); + $this->assertEquals('01', $cloned->getMonthElement()->getValue()); + $this->assertEquals('02', $cloned->getDayElement()->getValue()); + $this->assertEquals('03', $cloned->getHourElement()->getValue()); + $this->assertEquals('04', $cloned->getMinuteElement()->getValue()); + $this->assertEquals('05', $cloned->getSecondElement()->getValue()); + } } From 9fb120708ff4e54eb8caaddaff618ce5c3dcaf7c Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Wed, 5 Mar 2014 13:50:47 +0100 Subject: [PATCH 2/2] Hotfix for #5912 as suggested by @MeKeyCool --- library/Zend/Form/Element/DateTimeSelect.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/Zend/Form/Element/DateTimeSelect.php b/library/Zend/Form/Element/DateTimeSelect.php index 033b0e8fe74..8a91c63f711 100644 --- a/library/Zend/Form/Element/DateTimeSelect.php +++ b/library/Zend/Form/Element/DateTimeSelect.php @@ -319,7 +319,7 @@ public function __clone() $this->dayElement = clone $this->dayElement; $this->monthElement = clone $this->monthElement; $this->yearElement = clone $this->yearElement; - $this->hourElement = clone $this->monthElement; + $this->hourElement = clone $this->hourElement; $this->minuteElement = clone $this->minuteElement; $this->secondElement = clone $this->secondElement; }