Skip to content

Commit 72f1ee6

Browse files
committed
Update as of 10/09/2012
* Performance Testing Framework improvements: * Added ability to specify fixtures per scenario * Implemented Magento application cleanup between scenarios * Implemented support of PHP scenarios. The framework distinguishes type of the scenario by its extension: `jmx` or `php` * Added ability to skip warm-up for a certain scenario * JMeter scenarios are run with `jmeter` command instead of `java -jar ApacheJmeter.jar`. It's impossible to specify path to JMeter tool now, it should be accessible from command line as `jmeter` * Implemented fixture for Performance Tests with 80k products distributed among 200 categories * Tax rule management UI simplified: * Added `Jeditable` jQuery library * Added multiselect fields for customer tax class, product tax class and tax rate * Added ability to add/edit Tax Rate directly from Tax Rule page * Simplified product creation workflow: * Added product types dropdown to "Add Product" button. Default attribute set is used for product creation * "Add Product" button opens form for Simple product with Default attribute set * Attribute set can be changed from product creation form * Implemented auto-generation of product SKU and meta fields. The templates can be configured in `System -> Configuration -> Catalog -> Catalog -> Product Fields Auto-Generation` * Added ability to unassign system attribute from an attribute set, if it's not "Minimal" one * Specified UI IDs for base Backend elements. UI ID is represented as HTML "id" attribute intended to identify certain HTML element * Refactored `Catalog_Model_Product_Indexer_Flat::matchEvent()` method - reduced cyclomatic complexity * Updated DB structure to make possible to store Themes' and Widgets' layout updates * Migration to jQuery: * Replaced Ajax, Dialog and Template mechanisms with jQuery analogs * Added jQuery loader for translation process * Migrated Inline-Translator to jQuery * JavaScript improvements: * Implemented `editTrigger` jQuery widget intended to display "Edit" button for elements it is attached to * Fixes: * Incorrect title for "Currency Symbols" page on Backend * References to website, store and store view aren't displayed on Backend, if Single Store mode is disabled * "Store" column and dropdown are displayed on `System -> Import/Export -> DataFlow-Profiles` page, when Single Store mode is enabled * Options are absent for `'tax_class_id'` product attribute * No exception/error message is produced, when attempting to commit/rollback asymmetric DB transaction * Links are not copied during downloadable product duplication * PayPal tab is absent in `System -> Configuration -> Sales` section * "Edit" link in wishlist opens Product View page instead of "Configure Product" page * Default value for a product attribute is not saved * Escaped HTML blocks with `Mage_Core_Helper_Data::jsonEncode`, where necessary * Impossible to add new Dataflow profile * Impossible to specify default option for new product attribute with "dropdown" type * Unable to send the email when creating new invoice/shipment/credit memo * "Segmentation Fault" in Integration tests * GitHub requests: * [#36](#36) -- added ability to force set of "Include Tax" option for catalog prices * [#63](#63) -- removed obsolete "args" node in event subscribers * [#64](#64) -- fixed EAV text attribute validation for "0" value * [#72](#72) -- fixed collecting shipping totals for case, when previous invoice value is 0
1 parent 215c077 commit 72f1ee6

File tree

803 files changed

+81551
-73699
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

803 files changed

+81551
-73699
lines changed

CHANGELOG.markdown

+49
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,52 @@
1+
Update as of 10/09/2012
2+
======================
3+
* Performance Testing Framework improvements:
4+
* Added ability to specify fixtures per scenario
5+
* Implemented Magento application cleanup between scenarios
6+
* Implemented support of PHP scenarios. The framework distinguishes type of the scenario by its extension: `jmx` or `php`
7+
* Added ability to skip warm-up for a certain scenario
8+
* JMeter scenarios are run with `jmeter` command instead of `java -jar ApacheJmeter.jar`. It's impossible to specify path to JMeter tool now, it should be accessible from command line as `jmeter`
9+
* Implemented fixture for Performance Tests with 80k products distributed among 200 categories
10+
* Tax rule management UI simplified:
11+
* Added `Jeditable` jQuery library
12+
* Added multiselect fields for customer tax class, product tax class and tax rate
13+
* Added ability to add/edit Tax Rate directly from Tax Rule page
14+
* Simplified product creation workflow:
15+
* Added product types dropdown to "Add Product" button. Default attribute set is used for product creation
16+
* "Add Product" button opens form for Simple product with Default attribute set
17+
* Attribute set can be changed from product creation form
18+
* Implemented auto-generation of product SKU and meta fields. The templates can be configured in `System -> Configuration -> Catalog -> Catalog -> Product Fields Auto-Generation`
19+
* Added ability to unassign system attribute from an attribute set, if it's not "Minimal" one
20+
* Specified UI IDs for base Backend elements. UI ID is represented as HTML "id" attribute intended to identify certain HTML element
21+
* Refactored `Catalog_Model_Product_Indexer_Flat::matchEvent()` method - reduced cyclomatic complexity
22+
* Updated DB structure to make possible to store Themes' and Widgets' layout updates
23+
* Migration to jQuery:
24+
* Replaced Ajax, Dialog and Template mechanisms with jQuery analogs
25+
* Added jQuery loader for translation process
26+
* Migrated Inline-Translator to jQuery
27+
* JavaScript improvements:
28+
* Implemented `editTrigger` jQuery widget intended to display "Edit" button for elements it is attached to
29+
* Fixes:
30+
* Incorrect title for "Currency Symbols" page on Backend
31+
* References to website, store and store view aren't displayed on Backend, if Single Store mode is disabled
32+
* "Store" column and dropdown are displayed on `System -> Import/Export -> DataFlow-Profiles` page, when Single Store mode is enabled
33+
* Options are absent for `'tax_class_id'` product attribute
34+
* No exception/error message is produced, when attempting to commit/rollback asymmetric DB transaction
35+
* Links are not copied during downloadable product duplication
36+
* PayPal tab is absent in `System -> Configuration -> Sales` section
37+
* "Edit" link in wishlist opens Product View page instead of "Configure Product" page
38+
* Default value for a product attribute is not saved
39+
* Escaped HTML blocks with `Mage_Core_Helper_Data::jsonEncode`, where necessary
40+
* Impossible to add new Dataflow profile
41+
* Impossible to specify default option for new product attribute with "dropdown" type
42+
* Unable to send the email when creating new invoice/shipment/credit memo
43+
* "Segmentation Fault" in Integration tests
44+
* GitHub requests:
45+
* [#36](https://github.com/magento/magento2/pull/36) -- added ability to force set of "Include Tax" option for catalog prices
46+
* [#63](https://github.com/magento/magento2/pull/63) -- removed obsolete "args" node in event subscribers
47+
* [#64](https://github.com/magento/magento2/pull/64) -- fixed EAV text attribute validation for "0" value
48+
* [#72](https://github.com/magento/magento2/pull/72) -- fixed collecting shipping totals for case, when previous invoice value is 0
49+
150
Update as of 9/27/2012
251
======================
352
* Refactoring Magento 2 to use jQuery instead of Prototype:

app/code/core/Mage/Adminhtml/Block/Abstract.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* @package Mage_Adminhtml
3030
* @author Magento Core Team <core@magentocommerce.com>
3131
* @deprecated Moved to module Mage_Backend
32-
*/
32+
*/
3333
class Mage_Adminhtml_Block_Abstract extends Mage_Backend_Block_Abstract
3434
{
3535

app/code/core/Mage/Adminhtml/Block/Api/Buttons.php

+19-31
Original file line numberDiff line numberDiff line change
@@ -35,40 +35,28 @@ public function __construct()
3535

3636
protected function _prepareLayout()
3737
{
38-
$this->setChild('backButton',
39-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
40-
->setData(array(
41-
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Back'),
42-
'onclick' => 'window.location.href=\''.$this->getUrl('*/*/').'\'',
43-
'class' => 'back'
44-
))
45-
);
38+
$this->addChild('backButton', 'Mage_Adminhtml_Block_Widget_Button', array(
39+
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Back'),
40+
'onclick' => 'window.location.href=\''.$this->getUrl('*/*/').'\'',
41+
'class' => 'back'
42+
));
4643

47-
$this->setChild('resetButton',
48-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
49-
->setData(array(
50-
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Reset'),
51-
'onclick' => 'window.location.reload()'
52-
))
53-
);
44+
$this->addChild('resetButton', 'Mage_Adminhtml_Block_Widget_Button', array(
45+
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Reset'),
46+
'onclick' => 'window.location.reload()'
47+
));
5448

55-
$this->setChild('saveButton',
56-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
57-
->setData(array(
58-
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Save Role'),
59-
'onclick' => 'roleForm.submit();return false;',
60-
'class' => 'save'
61-
))
62-
);
49+
$this->addChild('saveButton', 'Mage_Adminhtml_Block_Widget_Button', array(
50+
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Save Role'),
51+
'onclick' => 'roleForm.submit();return false;',
52+
'class' => 'save'
53+
));
6354

64-
$this->setChild('deleteButton',
65-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
66-
->setData(array(
67-
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Delete Role'),
68-
'onclick' => 'deleteConfirm(\'' . Mage::helper('Mage_Adminhtml_Helper_Data')->__('Are you sure you want to do this?') . '\', \'' . $this->getUrl('*/*/delete', array('rid' => $this->getRequest()->getParam('rid'))) . '\')',
69-
'class' => 'delete'
70-
))
71-
);
55+
$this->addChild('deleteButton', 'Mage_Adminhtml_Block_Widget_Button', array(
56+
'label' => Mage::helper('Mage_Adminhtml_Helper_Data')->__('Delete Role'),
57+
'onclick' => 'deleteConfirm(\'' . Mage::helper('Mage_Adminhtml_Helper_Data')->__('Are you sure you want to do this?') . '\', \'' . $this->getUrl('*/*/delete', array('rid' => $this->getRequest()->getParam('rid'))) . '\')',
58+
'class' => 'delete'
59+
));
7260
return parent::_prepareLayout();
7361
}
7462

app/code/core/Mage/Adminhtml/Block/Backup.php

+17-28
Original file line numberDiff line numberDiff line change
@@ -43,35 +43,24 @@ class Mage_Adminhtml_Block_Backup extends Mage_Adminhtml_Block_Template
4343
protected function _prepareLayout()
4444
{
4545
parent::_prepareLayout();
46-
$this->setChild('createButton',
47-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
48-
->setData(array(
49-
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('Database Backup'),
50-
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_DB . "')",
51-
'class' => 'task'
52-
))
53-
);
54-
$this->setChild('createSnapshotButton',
55-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
56-
->setData(array(
57-
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('System Backup'),
58-
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_SYSTEM_SNAPSHOT . "')",
59-
'class' => ''
60-
))
61-
);
62-
$this->setChild('createMediaBackupButton',
63-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
64-
->setData(array(
65-
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('Database and Media Backup'),
66-
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_MEDIA . "')",
67-
'class' => ''
68-
))
69-
);
70-
$this->setChild('backupsGrid',
71-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Backup_Grid')
72-
);
46+
$this->addChild('createButton', 'Mage_Adminhtml_Block_Widget_Button', array(
47+
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('Database Backup'),
48+
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_DB . "')",
49+
'class' => 'task'
50+
));
51+
$this->addChild('createSnapshotButton', 'Mage_Adminhtml_Block_Widget_Button', array(
52+
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('System Backup'),
53+
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_SYSTEM_SNAPSHOT . "')",
54+
'class' => ''
55+
));
56+
$this->addChild('createMediaBackupButton', 'Mage_Adminhtml_Block_Widget_Button', array(
57+
'label' => Mage::helper('Mage_Backup_Helper_Data')->__('Database and Media Backup'),
58+
'onclick' => "return backup.backup('" . Mage_Backup_Helper_Data::TYPE_MEDIA . "')",
59+
'class' => ''
60+
));
61+
$this->addChild('backupsGrid', 'Mage_Adminhtml_Block_Backup_Grid');
7362

74-
$this->setChild('dialogs', $this->getLayout()->createBlock('Mage_Adminhtml_Block_Backup_Dialogs'));
63+
$this->addChild('dialogs', 'Mage_Adminhtml_Block_Backup_Dialogs');
7564
}
7665

7766
public function getCreateButtonHtml()

app/code/core/Mage/Adminhtml/Block/Catalog/Category/Edit/Form.php

+14-23
Original file line numberDiff line numberDiff line change
@@ -57,38 +57,29 @@ protected function _prepareLayout()
5757

5858
// Save button
5959
if (!$category->isReadonly()) {
60-
$this->setChild('save_button',
61-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
62-
->setData(array(
63-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Save Category'),
64-
'onclick' => "categorySubmit('" . $this->getSaveUrl() . "', true)",
65-
'class' => 'save'
66-
))
67-
);
60+
$this->addChild('save_button', 'Mage_Adminhtml_Block_Widget_Button', array(
61+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Save Category'),
62+
'onclick' => "categorySubmit('" . $this->getSaveUrl() . "', true)",
63+
'class' => 'save'
64+
));
6865
}
6966

7067
// Delete button
7168
if (!in_array($categoryId, $this->getRootIds()) && $category->isDeleteable()) {
72-
$this->setChild('delete_button',
73-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
74-
->setData(array(
75-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Delete Category'),
76-
'onclick' => "categoryDelete('" . $this->getUrl('*/*/delete', array('_current' => true)) . "', true, {$categoryId})",
77-
'class' => 'delete'
78-
))
79-
);
69+
$this->addChild('delete_button', 'Mage_Adminhtml_Block_Widget_Button', array(
70+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Delete Category'),
71+
'onclick' => "categoryDelete('" . $this->getUrl('*/*/delete', array('_current' => true)) . "', true, {$categoryId})",
72+
'class' => 'delete'
73+
));
8074
}
8175

8276
// Reset button
8377
if (!$category->isReadonly()) {
8478
$resetPath = $categoryId ? '*/*/edit' : '*/*/add';
85-
$this->setChild('reset_button',
86-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
87-
->setData(array(
88-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Reset'),
89-
'onclick' => "categoryReset('".$this->getUrl($resetPath, array('_current'=>true))."',true)"
90-
))
91-
);
79+
$this->addChild('reset_button', 'Mage_Adminhtml_Block_Widget_Button', array(
80+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Reset'),
81+
'onclick' => "categoryReset('".$this->getUrl($resetPath, array('_current'=>true))."',true)"
82+
));
9283
}
9384

9485
return parent::_prepareLayout();

app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tabs.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ protected function _prepareLayout()
133133
}
134134

135135
$active = $defaultGroupId == $group->getId();
136-
$block = $this->getLayout()->createBlock($this->getAttributeTabBlock(), '')
136+
$block = $this->getLayout()->createBlock($this->getAttributeTabBlock(), $this->getNameInLayout() . '_tab_'
137+
. $group->getAttributeGroupName())
137138
->setGroup($group)
138139
->setAttributes($attributes)
139140
->setAddHiddenFields($active)

app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tree.php

+13-19
Original file line numberDiff line numberDiff line change
@@ -53,27 +53,21 @@ protected function _prepareLayout()
5353
'_query' => false
5454
));
5555

56-
$this->setChild('add_sub_button',
57-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
58-
->setData(array(
59-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Subcategory'),
60-
'onclick' => "addNew('".$addUrl."', false)",
61-
'class' => 'add',
62-
'id' => 'add_subcategory_button',
63-
'style' => $this->canAddSubCategory() ? '' : 'display: none;'
64-
))
65-
);
56+
$this->addChild('add_sub_button', 'Mage_Adminhtml_Block_Widget_Button', array(
57+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Subcategory'),
58+
'onclick' => "addNew('".$addUrl."', false)",
59+
'class' => 'add',
60+
'id' => 'add_subcategory_button',
61+
'style' => $this->canAddSubCategory() ? '' : 'display: none;'
62+
));
6663

6764
if ($this->canAddRootCategory()) {
68-
$this->setChild('add_root_button',
69-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Button')
70-
->setData(array(
71-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Root Category'),
72-
'onclick' => "addNew('".$addUrl."', true)",
73-
'class' => 'add',
74-
'id' => 'add_root_category_button'
75-
))
76-
);
65+
$this->addChild('add_root_button', 'Mage_Adminhtml_Block_Widget_Button', array(
66+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Root Category'),
67+
'onclick' => "addNew('".$addUrl."', true)",
68+
'class' => 'add',
69+
'id' => 'add_root_category_button'
70+
));
7771
}
7872

7973
$this->setChild('store_switcher',

app/code/core/Mage/Adminhtml/Block/Catalog/Form.php

+12-3
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,22 @@ class Mage_Adminhtml_Block_Catalog_Form extends Mage_Adminhtml_Block_Widget_Form
3636
protected function _prepareLayout()
3737
{
3838
Varien_Data_Form::setElementRenderer(
39-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Form_Renderer_Element')
39+
$this->getLayout()->createBlock(
40+
'Mage_Adminhtml_Block_Widget_Form_Renderer_Element',
41+
$this->getNameInLayout() . '_element'
42+
)
4043
);
4144
Varien_Data_Form::setFieldsetRenderer(
42-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset')
45+
$this->getLayout()->createBlock(
46+
'Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset',
47+
$this->getNameInLayout() . '_fieldset'
48+
)
4349
);
4450
Varien_Data_Form::setFieldsetElementRenderer(
45-
$this->getLayout()->createBlock('Mage_Adminhtml_Block_Catalog_Form_Renderer_Fieldset_Element')
51+
$this->getLayout()->createBlock(
52+
'Mage_Adminhtml_Block_Catalog_Form_Renderer_Fieldset_Element',
53+
$this->getNameInLayout() . '_fieldset_element'
54+
)
4655
);
4756
}
4857
}

app/code/core/Mage/Adminhtml/Block/Catalog/Product.php

+40-7
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,11 @@ public function __construct()
5050
protected function _prepareLayout()
5151
{
5252
$this->_addButton('add_new', array(
53-
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Product'),
54-
'onclick' => "setLocation('{$this->getUrl('*/*/new')}')",
55-
'class' => 'add'
53+
'id' => 'add_new_product',
54+
'label' => Mage::helper('Mage_Catalog_Helper_Data')->__('Add Product'),
55+
'class' => 'btn-add',
56+
'class_name' => 'Mage_Backend_Block_Widget_Button_Split',
57+
'options' => $this->_getAddProductButtonOptions()
5658
));
5759

5860
$this->setChild(
@@ -62,6 +64,40 @@ protected function _prepareLayout()
6264
return parent::_prepareLayout();
6365
}
6466

67+
/**
68+
* Retrieve options for 'Add Product' split button
69+
*
70+
* @return array
71+
*/
72+
protected function _getAddProductButtonOptions()
73+
{
74+
$splitButtonOptions = array();
75+
76+
foreach (Mage::getModel('Mage_Catalog_Model_Product_Type')->getOptionArray() as $key => $label) {
77+
$splitButtonOptions[$key] = array(
78+
'label' => $label,
79+
'onclick' => "setLocation('" . $this->_getProductCreateUrl($key) . "')",
80+
'default' => Mage_Catalog_Model_Product_Type::DEFAULT_TYPE == $key
81+
);
82+
}
83+
84+
return $splitButtonOptions;
85+
}
86+
87+
/**
88+
* Retrieve product create url by specified product type
89+
*
90+
* @param string $type
91+
* @return string
92+
*/
93+
protected function _getProductCreateUrl($type)
94+
{
95+
return $this->getUrl('*/*/new', array(
96+
'set' => Mage::getModel('Mage_Catalog_Model_Product')->getDefaultAttributeSetId(),
97+
'type' => $type
98+
));
99+
}
100+
65101
/**
66102
* Render grid
67103
*
@@ -79,9 +115,6 @@ public function getGridHtml()
79115
*/
80116
public function isSingleStoreMode()
81117
{
82-
if (!Mage::app()->isSingleStoreMode()) {
83-
return false;
84-
}
85-
return true;
118+
return Mage::app()->isSingleStoreMode();
86119
}
87120
}

app/code/core/Mage/Adminhtml/Block/Catalog/Product/Attribute/Edit/Tab/Options.php

+18
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,22 @@
3737
class Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Options
3838
extends Mage_Eav_Block_Adminhtml_Attribute_Edit_Options_Abstract
3939
{
40+
/**
41+
* Retrieve option values collection
42+
* It is represented by an array in case of system attribute
43+
*
44+
* @param Mage_Eav_Model_Entity_Attribute_Abstract $attribute
45+
* @return array|Mage_Eav_Model_Resource_Entity_Attribute_Option_Collection
46+
*/
47+
protected function _getOptionValuesCollection(Mage_Eav_Model_Entity_Attribute_Abstract $attribute)
48+
{
49+
if ($this->canManageOptionDefaultOnly()) {
50+
$options = Mage::getModel($attribute->getSourceModel())
51+
->setAttribute($attribute)
52+
->getAllOptions(true);
53+
return array_reverse($options);
54+
} else {
55+
return parent::_getOptionValuesCollection($attribute);
56+
}
57+
}
4058
}

0 commit comments

Comments
 (0)