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 @@ +