Skip to content

Commit 36bff7a

Browse files
author
Yaroslav Onischenko
committed
MAGETWO-47082: Category creation from product page fails if google experiments enabled
1 parent f329397 commit 36bff7a

File tree

4 files changed

+175
-11
lines changed

4 files changed

+175
-11
lines changed

app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,42 @@ define([
8383
var thisButton = $(e.currentTarget);
8484

8585
thisButton.prop('disabled', true);
86+
87+
var postData = {
88+
general: {
89+
name: $('#new_category_name').val(),
90+
is_active: 1,
91+
include_in_menu: 1
92+
},
93+
parent: $('#new_category_parent').val(),
94+
use_config: ['available_sort_by', 'default_sort_by'],
95+
form_key: FORM_KEY,
96+
return_session_messages_only: 1
97+
};
98+
99+
var fields = {};
100+
101+
$.each($(newCategoryForm).serializeArray(), function(_, field) {
102+
if (
103+
field.name &&
104+
field.name != 'new_category_name' &&
105+
field.name != 'new_category_parent'
106+
) {
107+
if (fields.hasOwnProperty(field.name)) {
108+
fields[field.name] = $.makeArray(fields[field.name]);
109+
fields[field.name].push(field.value);
110+
}
111+
else {
112+
fields[field.name] = field.value;
113+
}
114+
}
115+
});
116+
$.extend(postData, fields);
117+
86118
$.ajax({
87119
type: 'POST',
88120
url: widget.options.saveCategoryUrl,
89-
data: {
90-
general: {
91-
name: $('#new_category_name').val(),
92-
is_active: 1,
93-
include_in_menu: 1
94-
},
95-
parent: $('#new_category_parent').val(),
96-
use_config: ['available_sort_by', 'default_sort_by'],
97-
form_key: FORM_KEY,
98-
return_session_messages_only: 1
99-
},
121+
data: postData,
100122
dataType: 'json',
101123
context: $('body')
102124
}).success(function (data) {
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
// @codingStandardsIgnoreFile
8+
9+
namespace Magento\GoogleOptimizer\Observer\Block\Category;
10+
11+
use Magento\Framework\Event\Observer as EventObserver;
12+
use Magento\Framework\Event\ObserverInterface;
13+
14+
class AddGoogleExperimentFieldsObserver implements ObserverInterface
15+
{
16+
/**
17+
* @var \Magento\GoogleOptimizer\Helper\Data
18+
*/
19+
protected $dataHelper;
20+
21+
/**
22+
* @var \Magento\Framework\Registry
23+
*/
24+
protected $registry;
25+
26+
/**
27+
* @param \Magento\GoogleOptimizer\Helper\Data $dataHelper
28+
*/
29+
public function __construct(
30+
\Magento\GoogleOptimizer\Helper\Data $dataHelper
31+
) {
32+
$this->dataHelper = $dataHelper;
33+
}
34+
35+
/**
36+
* Adds Google Experiment fields to category creation form on product edit page
37+
*
38+
* @param EventObserver $observer
39+
* @return void
40+
*/
41+
public function execute(EventObserver $observer)
42+
{
43+
if ($this->dataHelper->isGoogleExperimentActive()) {
44+
$block = $observer->getEvent()->getBlock();
45+
if ($block->getForm() && $block->getForm()->getId() == 'new_category_form') {
46+
$fieldset = $block->getForm()->getElement('new_category_form_fieldset');
47+
$fieldset->addField(
48+
'experiment_script',
49+
'textarea',
50+
[
51+
'name' => 'google_experiment[experiment_script]',
52+
'label' => __('Experiment Code'),
53+
'value' => '',
54+
'class' => 'textarea googleoptimizer',
55+
'required' => false,
56+
'note' => __('Experiment code should be added to the original page only.')
57+
]
58+
);
59+
60+
$fieldset->addField(
61+
'code_id',
62+
'hidden',
63+
[
64+
'name' => 'google_experiment[code_id]',
65+
'value' => '',
66+
'required' => false
67+
]
68+
);
69+
}
70+
}
71+
}
72+
}

app/code/Magento/GoogleOptimizer/etc/events.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,7 @@
2727
<event name="adminhtml_catalog_category_tabs">
2828
<observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentTabObserver" />
2929
</event>
30+
<event name="adminhtml_block_html_before">
31+
<observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentFieldsObserver" />
32+
</event>
3033
</config>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\GoogleOptimizer\Observer\Block\Category;
8+
9+
/**
10+
* @magentoAppArea adminhtml
11+
*/
12+
class AddGoogleExperimentFieldsObserverTest extends \PHPUnit_Framework_TestCase
13+
{
14+
/**
15+
* @var \Magento\Config\Model\ResourceModel\Config
16+
*/
17+
protected $config;
18+
19+
/**
20+
* @var \Magento\TestFramework\ObjectManager
21+
*/
22+
protected $objectManager;
23+
24+
protected function setUp()
25+
{
26+
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
27+
$this->config = $this->objectManager->create(
28+
'Magento\Config\Model\ResourceModel\Config'
29+
);
30+
$this->config->saveConfig('google/analytics/active', 1, 'default', 0);
31+
$this->config->saveConfig('google/analytics/type', 'universal', 'default', 0);
32+
$this->config->saveConfig('google/analytics/experiments', 1, 'default', 0);
33+
$this->config->saveConfig('google/analytics/account', 1234567890, 'default', 0);
34+
$this->resetConfig();
35+
}
36+
37+
/**
38+
* @magentoAppIsolation enabled
39+
* @magentoDbIsolation enabled
40+
*/
41+
public function testExecute()
42+
{
43+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
44+
/** @var \Magento\Catalog\Block\Adminhtml\Product\Edit\NewCategory $newCategoryForm */
45+
$newCategoryForm = $objectManager->get('Magento\Catalog\Block\Adminhtml\Product\Edit\NewCategory');
46+
$html = $newCategoryForm->toHtml();
47+
$this->assertContains('name="google_experiment[code_id]"', $html);
48+
$this->assertContains('name="google_experiment[experiment_script]"', $html);
49+
}
50+
51+
protected function tearDown()
52+
{
53+
$this->config->deleteConfig('google/analytics/active', 'default', 0);
54+
$this->config->deleteConfig('google/analytics/type', 'default', 0);
55+
$this->config->deleteConfig('google/analytics/experiments', 'default', 0);
56+
$this->config->deleteConfig('google/analytics/account', 'default', 0);
57+
$this->resetConfig();
58+
}
59+
60+
/**
61+
* Clear config cache
62+
*/
63+
protected function resetConfig()
64+
{
65+
$this->objectManager->get('Magento\Framework\App\Config\ReinitableConfigInterface')->reinit();
66+
}
67+
}

0 commit comments

Comments
 (0)