Skip to content

Commit 4a952b0

Browse files
authored
Fixed detect changes in custom options section (product edit) (#2444)
1 parent a5286c9 commit 4a952b0

File tree

8 files changed

+44
-8
lines changed

8 files changed

+44
-8
lines changed

app/design/adminhtml/default/default/template/bundle/product/edit/bundle/option/selection.phtml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,11 @@ Bundle.Selection.prototype = {
196196
}
197197
);
198198
}
199+
200+
var inputs = $$('#bundle_option_' + data.parentIndex + ' input');
201+
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
202+
var inputs = $$('#bundle_option_' + data.parentIndex + ' button.delete');
203+
inputs.each(function(el) { Event.observe(el, 'click', el.setHasChanges.bind(el)); } )
199204
},
200205

201206
bindScopeCheckbox : function(){

app/design/adminhtml/default/default/template/catalog/product/edit/options/option.phtml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ var productOption = {
117117
}
118118
<?php else: ?>
119119
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
120+
var inputs = $$('div.product-custom-options button');
121+
inputs.each(function(el) { Event.observe(el, 'click', el.setHasChanges.bind(el)); } )
120122
<?php endif ?>
121123
}
122124
}
@@ -316,8 +318,6 @@ if($('option_panel')){
316318
$('option_panel').remove();
317319
}
318320

319-
productOption.bindRemoveButtons();
320-
321321
if($('<?php echo $this->getAddButtonId() ?>')){
322322
Event.observe('<?php echo $this->getAddButtonId() ?>', 'click', productOption.add.bind(productOption));
323323
}
@@ -337,6 +337,8 @@ Validation.addAllThese([
337337
productOptionType.addDataToValues(<?php echo $_value->toJson() ?>);
338338
<?php endforeach ?>
339339

340+
productOption.bindRemoveButtons();
341+
340342
//bind scope checkboxes
341343
productOptionScope.bindScopeCheckbox();
342344
//]]>

app/design/adminhtml/default/default/template/catalog/product/edit/options/type/select.phtml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ selectOptionType = {
6767
templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
6868
templateText : OptionTemplateSelectRow,
6969
add : function(data) {
70-
7170
this.template = new Template(this.templateText, this.templateSyntax);
7271

7372
if (data.target || data.srcElement) {//data is Event (work in IE and Firefox)
@@ -86,6 +85,11 @@ selectOptionType = {
8685

8786
Element.insert($(this.div+'_'+data.id), {'bottom':this.template.evaluate(data)});
8887

88+
var inputs = $$('#product_option_'+data.id+'_select_'+data.select_id+' input', '#product_option_'+data.id+'_select_'+data.select_id+' select', '#product_option_'+data.id+'_select_'+data.select_id+' textarea');
89+
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); });
90+
var inputs = $$('#product_option_'+data.id+'_select_'+data.select_id+' button');
91+
inputs.each(function(el) { Event.observe(el, 'click', el.setHasChanges.bind(el)); });
92+
8993
if (data.checkboxScopeTitle) {
9094
//set disabled
9195
if ($('product_option_'+data.id+'_select_'+data.select_id+'_title') && data.scopeTitleDisabled) {

app/design/adminhtml/default/default/template/catalog/product/edit/price/group.phtml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ var groupPriceControl = {
131131
$('<?php echo $_htmlId; ?>_container').select('input', 'select').each(function(element) {
132132
Event.observe(element, 'change', element.setHasChanges.bind(element));
133133
});
134+
$('<?php echo $_htmlId; ?>_container').select('button.delete').each(function(element) {
135+
Event.observe(element, 'click', element.setHasChanges.bind(element));
136+
});
134137
<?php endif ?>
135138
},
136139
disableElement: function(element) {

app/design/adminhtml/default/default/template/catalog/product/edit/price/tier.phtml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ var tierPriceControl = {
136136
$('<?php echo $_htmlId ?>_container').up('table').select('button').each(this.disableElement);
137137
<?php else: ?>
138138
$('<?php echo $_htmlId ?>_container').select('input', 'select').each(function(el){ Event.observe(el, 'change', el.setHasChanges.bind(el)); });
139+
$('<?php echo $_htmlId ?>_container').select('button.delete').each(function(el){ Event.observe(el, 'click', el.setHasChanges.bind(el)); });
139140
<?php endif ?>
140141
},
141142
disableElement: function(el) {

app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable/links.phtml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100

101101
<script type="text/javascript">
102102
//<![CDATA[
103-
var linkTemplate = '<tr>'+
103+
var linkTemplate = '<tr id="downloadable_link_{{id}}">'+
104104
'<td>'+
105105
'<input type="hidden" class="__delete__" name="downloadable[link][{{id}}][is_delete]" value="" />'+
106106
'<input type="hidden" name="downloadable[link][{{id}}][link_id]" value="{{link_id}}" />'+
@@ -310,6 +310,11 @@ var linkItems = {
310310
this.itemCount++;
311311
this.togglePriceFields();
312312
this.bindRemoveButtons();
313+
314+
var inputs = $$('#downloadable_link_' + data.id + ' input');
315+
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
316+
var inputs = $$('#downloadable_link_' + data.id + ' button.delete');
317+
inputs.each(function(el) { Event.observe(el, 'click', el.setHasChanges.bind(el)); } )
313318
},
314319
remove : function(event){
315320
var element = $(Event.findElement(event, 'tr'));

app/design/adminhtml/default/default/template/downloadable/product/edit/downloadable/samples.phtml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
</div>
7676
<script type="text/javascript">
7777
//<![CDATA[>
78-
var sampleTemplate = '<tr>'+
78+
var sampleTemplate = '<tr id="downloadable_sample_{{id}}">'+
7979
'<td>'+
8080
'<input type="hidden" class="__delete__" name="downloadable[sample][{{id}}][is_delete]" value="" />'+
8181
'<input type="hidden" name="downloadable[sample][{{id}}][sample_id]" value="{{sample_id}}" />'+
@@ -176,13 +176,20 @@ var sampleItems = {
176176

177177
this.itemCount++;
178178
this.bindRemoveButtons();
179+
180+
var inputs = $$('#downloadable_sample_' + data.id + ' input');
181+
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
182+
var inputs = $$('#downloadable_sample_' + data.id + ' button.delete');
183+
inputs.each(function(el) { Event.observe(el, 'click', el.setHasChanges.bind(el)); } )
179184
},
180185
remove : function(event){
181186
var element = $(Event.findElement(event, 'tr'));
182187
alertAlreadyDisplayed = false;
183188
if(element){
184189
element.down('input[type="hidden"].__delete__').value = '1';
185-
element.down('div.flex').remove();
190+
Element.select(element, 'div.flex').each(function(elm){
191+
elm.remove();
192+
});
186193
element.addClassName('no-display');
187194
element.addClassName('ignore-validate');
188195
element.hide();

js/mage/adminhtml/product.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -744,8 +744,17 @@ Product.Configurable.prototype = {
744744
this.updateSaveInput();
745745
},
746746
updateSaveInput : function() {
747-
$(this.idPrefix + 'save_attributes').value = Object.toJSON(this.attributes);
748-
$(this.idPrefix + 'save_links').value = Object.toJSON(this.links);
747+
var oldSaveAttributesValue = $(this.idPrefix + 'save_attributes').value;
748+
var oldSaveLinksValue = $(this.idPrefix + 'save_links').value;
749+
var newSaveAttributesValue = Object.toJSON(this.attributes);
750+
var newSaveLinksValue = Object.toJSON(this.links);
751+
$(this.idPrefix + 'save_attributes').value = newSaveAttributesValue;
752+
$(this.idPrefix + 'save_links').value = newSaveLinksValue;
753+
if (oldSaveAttributesValue != newSaveAttributesValue || oldSaveLinksValue != newSaveLinksValue) {
754+
try {
755+
document.getElementById('configurable_save_attributes').setHasChanges();
756+
} catch (e) {}
757+
}
749758
},
750759
initializeAdvicesForSimpleForm : function() {
751760
if ($(this.idPrefix + 'simple_form').advicesInited) {

0 commit comments

Comments
 (0)