Skip to content

Commit 6dc8cc0

Browse files
Added content versioning for CMS pages, CMS blocks, and blog posts (#555)
1 parent 3e92381 commit 6dc8cc0

File tree

35 files changed

+1550
-248
lines changed

35 files changed

+1550
-248
lines changed

.phpstorm.meta.php/blocks.meta.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@
151151
'adminhtml/cms_block' => \Mage_Adminhtml_Block_Cms_Block::class,
152152
'adminhtml/cms_block_edit' => \Mage_Adminhtml_Block_Cms_Block_Edit::class,
153153
'adminhtml/cms_block_edit_form' => \Mage_Adminhtml_Block_Cms_Block_Edit_Form::class,
154+
'adminhtml/cms_block_edit_tab_content' => \Mage_Adminhtml_Block_Cms_Block_Edit_Tab_Content::class,
155+
'adminhtml/cms_block_edit_tabs' => \Mage_Adminhtml_Block_Cms_Block_Edit_Tabs::class,
154156
'adminhtml/cms_block_grid' => \Mage_Adminhtml_Block_Cms_Block_Grid::class,
155157
'adminhtml/cms_block_widget_chooser' => \Mage_Adminhtml_Block_Cms_Block_Widget_Chooser::class,
156158
'adminhtml/cms_page' => \Mage_Adminhtml_Block_Cms_Page::class,
@@ -772,6 +774,9 @@
772774
'blog/adminhtml_post' => \Maho_Blog_Block_Adminhtml_Post::class,
773775
'blog/adminhtml_post_edit' => \Maho_Blog_Block_Adminhtml_Post_Edit::class,
774776
'blog/adminhtml_post_edit_form' => \Maho_Blog_Block_Adminhtml_Post_Edit_Form::class,
777+
'blog/adminhtml_post_edit_tab_content' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tab_Content::class,
778+
'blog/adminhtml_post_edit_tab_meta' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tab_Meta::class,
779+
'blog/adminhtml_post_edit_tabs' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tabs::class,
775780
'blog/adminhtml_post_grid' => \Maho_Blog_Block_Adminhtml_Post_Grid::class,
776781
'blog/adminhtml_post_grid_renderer_image' => \Maho_Blog_Block_Adminhtml_Post_Grid_Renderer_Image::class,
777782
'blog/autocomplete' => \Maho_Blog_Block_Autocomplete::class,
@@ -939,6 +944,8 @@
939944
'configurableswatches/catalog_media_js_product' => \Mage_ConfigurableSwatches_Block_Catalog_Media_Js_Product::class,
940945
'configurableswatches/catalog_product_list_price' => \Mage_ConfigurableSwatches_Block_Catalog_Product_List_Price::class,
941946
'configurableswatches/catalog_product_view_type_configurable_swatches' => \Mage_ConfigurableSwatches_Block_Catalog_Product_View_Type_Configurable_Swatches::class,
947+
'contentversion/adminhtml_version_grid' => \Maho_ContentVersion_Block_Adminhtml_Version_Grid::class,
948+
'contentversion/adminhtml_version_tab' => \Maho_ContentVersion_Block_Adminhtml_Version_Tab::class,
942949
'core/abstract' => \Mage_Core_Block_Abstract::class,
943950
'core/flush' => \Mage_Core_Block_Flush::class,
944951
'core/html_date' => \Mage_Core_Block_Html_Date::class,
@@ -1529,6 +1536,8 @@
15291536
'adminhtml/cms_block' => \Mage_Adminhtml_Block_Cms_Block::class,
15301537
'adminhtml/cms_block_edit' => \Mage_Adminhtml_Block_Cms_Block_Edit::class,
15311538
'adminhtml/cms_block_edit_form' => \Mage_Adminhtml_Block_Cms_Block_Edit_Form::class,
1539+
'adminhtml/cms_block_edit_tab_content' => \Mage_Adminhtml_Block_Cms_Block_Edit_Tab_Content::class,
1540+
'adminhtml/cms_block_edit_tabs' => \Mage_Adminhtml_Block_Cms_Block_Edit_Tabs::class,
15321541
'adminhtml/cms_block_grid' => \Mage_Adminhtml_Block_Cms_Block_Grid::class,
15331542
'adminhtml/cms_block_widget_chooser' => \Mage_Adminhtml_Block_Cms_Block_Widget_Chooser::class,
15341543
'adminhtml/cms_page' => \Mage_Adminhtml_Block_Cms_Page::class,
@@ -2150,6 +2159,9 @@
21502159
'blog/adminhtml_post' => \Maho_Blog_Block_Adminhtml_Post::class,
21512160
'blog/adminhtml_post_edit' => \Maho_Blog_Block_Adminhtml_Post_Edit::class,
21522161
'blog/adminhtml_post_edit_form' => \Maho_Blog_Block_Adminhtml_Post_Edit_Form::class,
2162+
'blog/adminhtml_post_edit_tab_content' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tab_Content::class,
2163+
'blog/adminhtml_post_edit_tab_meta' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tab_Meta::class,
2164+
'blog/adminhtml_post_edit_tabs' => \Maho_Blog_Block_Adminhtml_Post_Edit_Tabs::class,
21532165
'blog/adminhtml_post_grid' => \Maho_Blog_Block_Adminhtml_Post_Grid::class,
21542166
'blog/adminhtml_post_grid_renderer_image' => \Maho_Blog_Block_Adminhtml_Post_Grid_Renderer_Image::class,
21552167
'blog/autocomplete' => \Maho_Blog_Block_Autocomplete::class,
@@ -2317,6 +2329,8 @@
23172329
'configurableswatches/catalog_media_js_product' => \Mage_ConfigurableSwatches_Block_Catalog_Media_Js_Product::class,
23182330
'configurableswatches/catalog_product_list_price' => \Mage_ConfigurableSwatches_Block_Catalog_Product_List_Price::class,
23192331
'configurableswatches/catalog_product_view_type_configurable_swatches' => \Mage_ConfigurableSwatches_Block_Catalog_Product_View_Type_Configurable_Swatches::class,
2332+
'contentversion/adminhtml_version_grid' => \Maho_ContentVersion_Block_Adminhtml_Version_Grid::class,
2333+
'contentversion/adminhtml_version_tab' => \Maho_ContentVersion_Block_Adminhtml_Version_Tab::class,
23202334
'core/abstract' => \Mage_Core_Block_Abstract::class,
23212335
'core/flush' => \Mage_Core_Block_Flush::class,
23222336
'core/html_date' => \Mage_Core_Block_Html_Date::class,

.phpstorm.meta.php/helpers.meta.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
'configurableswatches/productimg' => \Mage_ConfigurableSwatches_Helper_Productimg::class,
3939
'configurableswatches/productlist' => \Mage_ConfigurableSwatches_Helper_Productlist::class,
4040
'configurableswatches/swatchdimensions' => \Mage_ConfigurableSwatches_Helper_Swatchdimensions::class,
41+
'contentversion/data' => \Maho_ContentVersion_Helper_Data::class,
4142
'currencysymbol/data' => \Mage_CurrencySymbol_Helper_Data::class,
4243
'customersegmentation/coupon' => \Maho_CustomerSegmentation_Helper_Coupon::class,
4344
'customersegmentation/data' => \Maho_CustomerSegmentation_Helper_Data::class,

.phpstorm.meta.php/models.meta.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,12 @@
866866
'configurableswatches_resource/catalog_product_attribute_super_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Attribute_Super_Collection::class,
867867
'configurableswatches_resource/catalog_product_type_configurable' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable::class,
868868
'configurableswatches_resource/catalog_product_type_configurable_product_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable_Product_Collection::class,
869+
'contentversion/observer' => \Maho_ContentVersion_Model_Observer::class,
870+
'contentversion/resource_version' => \Maho_ContentVersion_Model_Resource_Version::class,
871+
'contentversion/resource_version_collection' => \Maho_ContentVersion_Model_Resource_Version_Collection::class,
872+
'contentversion/version' => \Maho_ContentVersion_Model_Version::class,
873+
'contentversion_resource/version' => \Maho_ContentVersion_Model_Resource_Version::class,
874+
'contentversion_resource/version_collection' => \Maho_ContentVersion_Model_Resource_Version_Collection::class,
869875
'core/abstract' => \Mage_Core_Model_Abstract::class,
870876
'core/app' => \Mage_Core_Model_App::class,
871877
'core/app_area' => \Mage_Core_Model_App_Area::class,
@@ -3587,6 +3593,12 @@
35873593
'configurableswatches_resource/catalog_product_attribute_super_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Attribute_Super_Collection::class,
35883594
'configurableswatches_resource/catalog_product_type_configurable' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable::class,
35893595
'configurableswatches_resource/catalog_product_type_configurable_product_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable_Product_Collection::class,
3596+
'contentversion/observer' => \Maho_ContentVersion_Model_Observer::class,
3597+
'contentversion/resource_version' => \Maho_ContentVersion_Model_Resource_Version::class,
3598+
'contentversion/resource_version_collection' => \Maho_ContentVersion_Model_Resource_Version_Collection::class,
3599+
'contentversion/version' => \Maho_ContentVersion_Model_Version::class,
3600+
'contentversion_resource/version' => \Maho_ContentVersion_Model_Resource_Version::class,
3601+
'contentversion_resource/version_collection' => \Maho_ContentVersion_Model_Resource_Version_Collection::class,
35903602
'core/abstract' => \Mage_Core_Model_Abstract::class,
35913603
'core/app' => \Mage_Core_Model_App::class,
35923604
'core/app_area' => \Mage_Core_Model_App_Area::class,

.phpstorm.meta.php/registry.meta.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
cms_block,
1212
cms_page,
1313
config_system_email_template,
14+
contentversion_preview,
1415
controller,
1516
currency,
1617
current_activity,

.phpstorm.meta.php/resource_models.meta.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@
178178
'configurableswatches_resource/catalog_product_attribute_super_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Attribute_Super_Collection::class,
179179
'configurableswatches_resource/catalog_product_type_configurable' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable::class,
180180
'configurableswatches_resource/catalog_product_type_configurable_product_collection' => \Mage_ConfigurableSwatches_Model_Resource_Catalog_Product_Type_Configurable_Product_Collection::class,
181+
'contentversion_resource/version' => \Maho_ContentVersion_Model_Resource_Version::class,
182+
'contentversion_resource/version_collection' => \Maho_ContentVersion_Model_Resource_Version_Collection::class,
181183
'core_resource/abstract' => \Mage_Core_Model_Resource_Abstract::class,
182184
'core_resource/cache' => \Mage_Core_Model_Resource_Cache::class,
183185
'core_resource/config' => \Mage_Core_Model_Resource_Config::class,
Lines changed: 3 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
/**
46
* Maho
57
*
@@ -9,114 +11,14 @@
911
* @copyright Copyright (c) 2024-2026 Maho (https://mahocommerce.com)
1012
* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
1113
*/
12-
1314
class Mage_Adminhtml_Block_Cms_Block_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
1415
{
15-
/**
16-
* Init form
17-
*/
18-
public function __construct()
19-
{
20-
parent::__construct();
21-
$this->setId('block_form');
22-
$this->setTitle(Mage::helper('cms')->__('Block Information'));
23-
}
24-
25-
/**
26-
* Load Wysiwyg on demand and Prepare layout
27-
*/
28-
#[\Override]
29-
protected function _prepareLayout()
30-
{
31-
parent::_prepareLayout();
32-
if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) {
33-
$this->getLayout()->getBlock('head')->setCanLoadWysiwyg(true);
34-
}
35-
return $this;
36-
}
37-
3816
#[\Override]
3917
protected function _prepareForm()
4018
{
41-
$model = Mage::registry('cms_block');
42-
43-
$form = new \Maho\Data\Form(
44-
['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post'],
45-
);
46-
47-
$form->setHtmlIdPrefix('block_');
48-
49-
$fieldset = $form->addFieldset('base_fieldset', ['legend' => Mage::helper('cms')->__('General Information'), 'class' => 'fieldset-wide']);
50-
51-
if ($model->getBlockId()) {
52-
$fieldset->addField('block_id', 'hidden', [
53-
'name' => 'block_id',
54-
]);
55-
}
56-
57-
$fieldset->addField('title', 'text', [
58-
'name' => 'title',
59-
'label' => Mage::helper('cms')->__('Block Title'),
60-
'title' => Mage::helper('cms')->__('Block Title'),
61-
'required' => true,
62-
]);
63-
64-
$fieldset->addField('identifier', 'text', [
65-
'name' => 'identifier',
66-
'label' => Mage::helper('cms')->__('Identifier'),
67-
'title' => Mage::helper('cms')->__('Identifier'),
68-
'required' => true,
69-
'class' => 'validate-xml-identifier',
70-
]);
71-
72-
/**
73-
* Check is single store mode
74-
*/
75-
if (!Mage::app()->isSingleStoreMode()) {
76-
$field = $fieldset->addField('store_id', 'multiselect', [
77-
'name' => 'stores[]',
78-
'label' => Mage::helper('cms')->__('Store View'),
79-
'title' => Mage::helper('cms')->__('Store View'),
80-
'required' => true,
81-
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
82-
]);
83-
$renderer = $this->getStoreSwitcherRenderer();
84-
$field->setRenderer($renderer);
85-
} else {
86-
$fieldset->addField('store_id', 'hidden', [
87-
'name' => 'stores[]',
88-
'value' => Mage::app()->getStore(true)->getId(),
89-
]);
90-
$model->setStoreId(Mage::app()->getStore(true)->getId());
91-
}
92-
93-
$fieldset->addField('is_active', 'select', [
94-
'label' => Mage::helper('cms')->__('Status'),
95-
'title' => Mage::helper('cms')->__('Status'),
96-
'name' => 'is_active',
97-
'required' => true,
98-
'options' => [
99-
'1' => Mage::helper('cms')->__('Enabled'),
100-
'0' => Mage::helper('cms')->__('Disabled'),
101-
],
102-
]);
103-
if (!$model->getId()) {
104-
$model->setData('is_active', '1');
105-
}
106-
107-
$fieldset->addField('content', 'editor', [
108-
'name' => 'content',
109-
'label' => Mage::helper('cms')->__('Content'),
110-
'title' => Mage::helper('cms')->__('Content'),
111-
'style' => 'height:36em',
112-
'required' => true,
113-
'config' => Mage::getSingleton('cms/wysiwyg_config')->getConfig(),
114-
]);
115-
116-
$form->setValues($model->getData());
19+
$form = new \Maho\Data\Form(['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']);
11720
$form->setUseContainer(true);
11821
$this->setForm($form);
119-
12022
return parent::_prepareForm();
12123
}
12224
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* Maho
7+
*
8+
* @package Mage_Adminhtml
9+
* @copyright Copyright (c) 2024-2026 Maho (https://mahocommerce.com)
10+
* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11+
*/
12+
13+
class Mage_Adminhtml_Block_Cms_Block_Edit_Tab_Content extends Mage_Adminhtml_Block_Widget_Form implements Mage_Adminhtml_Block_Widget_Tab_Interface
14+
{
15+
#[\Override]
16+
protected function _prepareLayout()
17+
{
18+
parent::_prepareLayout();
19+
if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) {
20+
$this->getLayout()->getBlock('head')->setCanLoadWysiwyg(true);
21+
}
22+
return $this;
23+
}
24+
25+
#[\Override]
26+
protected function _prepareForm()
27+
{
28+
$model = Mage::registry('cms_block');
29+
30+
$form = new \Maho\Data\Form();
31+
$form->setHtmlIdPrefix('block_');
32+
33+
$fieldset = $form->addFieldset('base_fieldset', [
34+
'legend' => Mage::helper('cms')->__('General Information'),
35+
'class' => 'fieldset-wide',
36+
]);
37+
38+
if ($model->getBlockId()) {
39+
$fieldset->addField('block_id', 'hidden', [
40+
'name' => 'block_id',
41+
]);
42+
}
43+
44+
$fieldset->addField('title', 'text', [
45+
'name' => 'title',
46+
'label' => Mage::helper('cms')->__('Block Title'),
47+
'title' => Mage::helper('cms')->__('Block Title'),
48+
'required' => true,
49+
]);
50+
51+
$fieldset->addField('identifier', 'text', [
52+
'name' => 'identifier',
53+
'label' => Mage::helper('cms')->__('Identifier'),
54+
'title' => Mage::helper('cms')->__('Identifier'),
55+
'required' => true,
56+
'class' => 'validate-xml-identifier',
57+
]);
58+
59+
if (!Mage::app()->isSingleStoreMode()) {
60+
$field = $fieldset->addField('store_id', 'multiselect', [
61+
'name' => 'stores[]',
62+
'label' => Mage::helper('cms')->__('Store View'),
63+
'title' => Mage::helper('cms')->__('Store View'),
64+
'required' => true,
65+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
66+
]);
67+
$renderer = $this->getStoreSwitcherRenderer();
68+
$field->setRenderer($renderer);
69+
} else {
70+
$fieldset->addField('store_id', 'hidden', [
71+
'name' => 'stores[]',
72+
'value' => Mage::app()->getStore(true)->getId(),
73+
]);
74+
$model->setStoreId(Mage::app()->getStore(true)->getId());
75+
}
76+
77+
$fieldset->addField('is_active', 'select', [
78+
'label' => Mage::helper('cms')->__('Status'),
79+
'title' => Mage::helper('cms')->__('Status'),
80+
'name' => 'is_active',
81+
'required' => true,
82+
'options' => [
83+
'1' => Mage::helper('cms')->__('Enabled'),
84+
'0' => Mage::helper('cms')->__('Disabled'),
85+
],
86+
]);
87+
if (!$model->getId()) {
88+
$model->setData('is_active', '1');
89+
}
90+
91+
$fieldset->addField('content', 'editor', [
92+
'name' => 'content',
93+
'label' => Mage::helper('cms')->__('Content'),
94+
'title' => Mage::helper('cms')->__('Content'),
95+
'style' => 'height:36em',
96+
'required' => true,
97+
'config' => Mage::getSingleton('cms/wysiwyg_config')->getConfig(),
98+
]);
99+
100+
$form->setValues($model->getData());
101+
$this->setForm($form);
102+
103+
return parent::_prepareForm();
104+
}
105+
106+
#[\Override]
107+
public function getTabLabel()
108+
{
109+
return Mage::helper('cms')->__('Content');
110+
}
111+
112+
#[\Override]
113+
public function getTabTitle()
114+
{
115+
return Mage::helper('cms')->__('Block Content');
116+
}
117+
118+
#[\Override]
119+
public function canShowTab()
120+
{
121+
return true;
122+
}
123+
124+
#[\Override]
125+
public function isHidden()
126+
{
127+
return false;
128+
}
129+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* Maho
7+
*
8+
* @package Mage_Adminhtml
9+
* @copyright Copyright (c) 2024-2026 Maho (https://mahocommerce.com)
10+
* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
11+
*/
12+
13+
class Mage_Adminhtml_Block_Cms_Block_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
14+
{
15+
public function __construct()
16+
{
17+
parent::__construct();
18+
$this->setId('block_tabs');
19+
$this->setDestElementId('edit_form');
20+
$this->setTitle(Mage::helper('cms')->__('Block Information'));
21+
}
22+
}

app/code/core/Mage/Cms/Model/Block.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class Mage_Cms_Model_Block extends Mage_Core_Model_Abstract
3535
{
3636
public const CACHE_TAG = 'cms_block';
3737
protected $_cacheTag = 'cms_block';
38+
protected $_eventPrefix = 'cms_block';
3839

3940
#[\Override]
4041
protected function _construct()

0 commit comments

Comments
 (0)