diff --git a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/AbstractDate.php b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/AbstractDate.php
new file mode 100644
index 000000000000..0b1777a3a927
--- /dev/null
+++ b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/AbstractDate.php
@@ -0,0 +1,96 @@
+getFieldConfig();
+
+ $type = $element->getType();
+ if ($type !== 'date' && $type !== 'datetime' && $type !== 'text') {
+ Mage::throwException(
+ Mage::helper('adminhtml')->__(
+ 'Invalid frontend type for field "%s". Onyl "text", "date" and "datetime" are allowed.',
+ $field->descend('label')
+ )
+ );
+ }
+
+ $format = Mage_Core_Helper_Date::getDateFormatFromString($field->format->__toString());
+ $format = $this->getDateFormat($format);
+
+ if (empty($field->editable)) {
+ return $this->getLocale()
+ ->date((int)$element->getValue())
+ ->toString($format);
+ }
+
+ $date = $this->getDateClass();
+ $date->setData([
+ 'name' => $element->getName(),
+ 'html_id' => $element->getId(),
+ 'image' => $this->getSkinUrl('images/grid-cal.gif'),
+ 'time' => $this->isShowTime()
+ ]);
+ $date->setFormat($format);
+ $date->setValue($element->getValue());
+ $date->setForm($element->getForm());
+
+ return $date->getElementHtml();
+ }
+
+ /**
+ * @return Mage_Core_Model_Locale
+ */
+ public function getLocale()
+ {
+ return Mage::app()->getLocale();
+ }
+}
diff --git a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Date.php b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Date.php
index de3ac7bbec0e..02f25c443509 100644
--- a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Date.php
+++ b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Date.php
@@ -27,54 +27,31 @@
*
* @category Mage
* @package Mage_Adminhtml
- * @author Magento Core Team
*/
-class Mage_Adminhtml_Block_System_Config_Form_Field_Date extends Mage_Adminhtml_Block_System_Config_Form_Field
+class Mage_Adminhtml_Block_System_Config_Form_Field_Date extends Mage_Adminhtml_Block_System_Config_Form_Field_AbstractDate
{
/**
- * Output date with time
- * @var bool
+ * @return Varien_Data_Form_Element_Date
*/
- protected $showTime = false;
+ protected function getDateClass(): Varien_Data_Form_Element_Date
+ {
+ return new Varien_Data_Form_Element_Date();
+ }
/**
- * @param Varien_Data_Form_Element_Abstract $element
+ * @param string $format
* @return string
*/
- protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
+ protected function getDateFormat(string $format): string
{
- $field = $element->getFieldConfig();
- if (!empty($format = $field->format) && defined('Mage_Core_Model_Locale::' . $format)) {
- $format = constant('Mage_Core_Model_Locale::' . $format);
- } else {
- $format = Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM;
- }
-
- $locale = Mage::app()->getLocale();
-
- // original way: getDateTimeFormat with FORMAT_TYPE_MEDIUM and return
- $format = $this->showTime ? $locale->getDateTimeFormat($format) : $locale->getDateFormat($format);
- if (empty($field->editable)) {
- return $locale->date((int)$element->getValue())->toString($format);
- }
-
- $class = (!empty($field->frontend_type) && ($field->frontend_type != 'text')) ? 'Varien_Data_Form_Element_' . ucfirst(strtolower($field->frontend_type)) : '';
- if (class_exists($class)) {
- $date = new $class();
- } else {
- $date = $this->showTime ? new Varien_Data_Form_Element_Datetime() : new Varien_Data_Form_Element_Date();
- }
-
- $date->setData([
- 'name' => $element->getName(),
- 'html_id' => $element->getId(),
- 'image' => $this->getSkinUrl('images/grid-cal.gif'),
- 'time' => $this->showTime,
- ]);
- $date->setFormat($format);
- $date->setValue($element->getValue());
- $date->setForm($element->getForm());
+ return $this->getLocale()->getDateFormat($format);
+ }
- return $date->getElementHtml();
+ /**
+ * @return false
+ */
+ protected function isShowTime(): bool
+ {
+ return false;
}
}
diff --git a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Datetime.php b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Datetime.php
index e01d90707561..fe80f9e65ce2 100644
--- a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Datetime.php
+++ b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Datetime.php
@@ -24,9 +24,31 @@
*
* @category Mage
* @package Mage_Adminhtml
- * @author Magento Core Team
*/
-class Mage_Adminhtml_Block_System_Config_Form_Field_Datetime extends Mage_Adminhtml_Block_System_Config_Form_Field_Date
+class Mage_Adminhtml_Block_System_Config_Form_Field_Datetime extends Mage_Adminhtml_Block_System_Config_Form_Field_AbstractDate
{
- protected $showTime = true;
+ /**
+ * @return Varien_Data_Form_Element_Datetime
+ */
+ protected function getDateClass(): Varien_Data_Form_Element_Datetime
+ {
+ return new Varien_Data_Form_Element_Datetime();
+ }
+
+ /**
+ * @param string $format
+ * @return string
+ */
+ protected function getDateFormat(string $format): string
+ {
+ return $this->getLocale()->getDateTimeFormat($format);
+ }
+
+ /**
+ * @return true
+ */
+ protected function isShowTime(): bool
+ {
+ return true;
+ }
}
diff --git a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Label.php b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Label.php
index 0559231d411f..fb0b63e3b99a 100644
--- a/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Label.php
+++ b/app/code/core/Mage/Adminhtml/Block/System/Config/Form/Field/Label.php
@@ -38,15 +38,20 @@ class Mage_Adminhtml_Block_System_Config_Form_Field_Label extends Mage_Adminhtml
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
$field = $element->getFieldConfig();
- $class = (!empty($field->frontend_type) && ($field->frontend_type != 'text')) ? 'Varien_Data_Form_Element_' . ucfirst(strtolower($field->frontend_type)) : '';
- if (class_exists($class)) {
- $label = new $class();
- } else {
- $label = new Varien_Data_Form_Element_Label();
+
+ $type = $element->getType();
+ if ($type !== 'label' && $type !== 'text') {
+ Mage::throwException(
+ Mage::helper('adminhtml')->__(
+ 'Invalid frontend type for field "%s". Onyl "text" and "label" are allowed.',
+ $field->descend('label')
+ )
+ );
}
- $label->setValue($field->value);
- $label->setBold(!empty($field->bold));
+ $label = new Varien_Data_Form_Element_Label();
+ $label->setValue($field->descend('value'));
+ $label->setBold(!empty($field->descend('bold')));
return $label->getElementHtml();
}
diff --git a/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/AbstractDate.php b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/AbstractDate.php
new file mode 100644
index 000000000000..fa389f6838dc
--- /dev/null
+++ b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/AbstractDate.php
@@ -0,0 +1,92 @@
+getValue();
+ if ($value !== '') {
+ $this->setValue($this->getLocale()->date($value)->toString(Varien_Date::DATETIME_INTERNAL_FORMAT));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @return $this
+ */
+ protected function _beforeSave()
+ {
+ $value = (string)$this->getValue();
+ if ($value !== '') {
+ $this->setValue($this->filterDateTime($value));
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param string $date
+ * @return string
+ */
+ protected function filterDateTime(string $date): string
+ {
+ /** @var Mage_Core_Model_Config_Element $field */
+ $field = $this->getFieldConfig();
+
+ $format = Mage_Core_Helper_Date::getDateFormatFromString($field->format->__toString());
+ $format = $this->getDateFormat($format);
+
+ $filterInput = new Zend_Filter_LocalizedToNormalized([
+ 'date_format' => $format
+ ]);
+
+ $date = $filterInput->filter($date);
+
+ // convert to utc
+ return $this->getLocale()->utcDate(null, $date, true)->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
+ }
+
+ /**
+ * @return Mage_Core_Model_Locale
+ */
+ public function getLocale()
+ {
+ return Mage::app()->getLocale();
+ }
+}
diff --git a/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Date.php b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Date.php
index b92877e7d544..61621c48a349 100644
--- a/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Date.php
+++ b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Date.php
@@ -28,86 +28,14 @@
* @category Mage
* @package Mage_Adminhtml
*/
-class Mage_Adminhtml_Model_System_Config_Backend_Date extends Mage_Core_Model_Config_Data
+class Mage_Adminhtml_Model_System_Config_Backend_Date extends Mage_Adminhtml_Model_System_Config_Backend_AbstractDate
{
/**
- * Output date with time
- * @var bool
- */
- protected $showTime = false;
-
- /**
- * @return $this
- */
- protected function _afterLoad()
- {
- $value = (string)$this->getValue();
- if ($value !== '') {
- $this->setValue(Mage::app()->getLocale()->date($value)->toString(Varien_Date::DATETIME_INTERNAL_FORMAT));
- }
-
- return $this;
- }
-
- /**
- * @return $this
- */
- protected function _beforeSave()
- {
- $value = (string)$this->getValue();
- if ($value !== '') {
- $this->setValue($this->filterDateTime($value));
- }
-
- return $this;
- }
-
- /**
- * @param array|string $value
+ * @param string $format
* @return string
*/
- protected function filterDateTime($value): string
+ protected function getDateFormat(string $format): string
{
- $field = $this->getFieldConfig();
- if (!empty($format = $field->format) && defined('Mage_Core_Model_Locale::' . $format)) {
- $format = constant('Mage_Core_Model_Locale::' . $format);
- } else {
- $format = Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM;
- }
-
- $locale = Mage::app()->getLocale();
-
- // same logic as Mage_Core_Controller_Varien_Action::_filterDates
- $filterInput = new Zend_Filter_LocalizedToNormalized([
- 'date_format' => $this->showTime ? $locale->getDateTimeFormat($format) : $locale->getDateFormat($format)
- ]);
- $filterInternal = new Zend_Filter_NormalizedToLocalized([
- 'date_format' => Varien_Date::DATETIME_INTERNAL_FORMAT
- ]);
-
- $value = $filterInput->filter($value);
- $value = $filterInternal->filter($value);
-
- // convert to utc
- return $locale->utcDate(null, $value, true)->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
- }
-
- /**
- * @return int
- * @throws Mage_Core_Model_Store_Exception
- */
- protected function getStoreId(): int
- {
- $storeId = Mage::app()->getRequest()->getParam('store', null);
- if (!is_null($storeId)) {
- return (int)Mage::app()->getStore($storeId)->getId();
- }
-
- $websiteId = Mage::app()->getRequest()->getParam('website', null);
- if (!is_null($websiteId)) {
- return (int)Mage::getModel('core/website')->load($websiteId)->getDefaultStore()->getId();
- }
-
- return 0;
+ return $this->getLocale()->getDateFormat($format);
}
}
diff --git a/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Datetime.php b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Datetime.php
index 41c99e3b1d2d..99ddf2ea44bd 100644
--- a/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Datetime.php
+++ b/app/code/core/Mage/Adminhtml/Model/System/Config/Backend/Datetime.php
@@ -28,7 +28,14 @@
* @category Mage
* @package Mage_Adminhtml
*/
-class Mage_Adminhtml_Model_System_Config_Backend_Datetime extends Mage_Adminhtml_Model_System_Config_Backend_Date
+class Mage_Adminhtml_Model_System_Config_Backend_Datetime extends Mage_Adminhtml_Model_System_Config_Backend_AbstractDate
{
- protected $showTime = true;
+ /**
+ * @param string $format
+ * @return string
+ */
+ protected function getDateFormat(string $format): string
+ {
+ return $this->getLocale()->getDateTimeFormat($format);
+ }
}
diff --git a/app/code/core/Mage/Core/Helper/Date.php b/app/code/core/Mage/Core/Helper/Date.php
new file mode 100644
index 000000000000..45b0cf7633de
--- /dev/null
+++ b/app/code/core/Mage/Core/Helper/Date.php
@@ -0,0 +1,44 @@
+