diff --git a/controllers/front/ProductController.php b/controllers/front/ProductController.php
index 11511a1df..9d152c935 100644
--- a/controllers/front/ProductController.php
+++ b/controllers/front/ProductController.php
@@ -559,5 +559,22 @@ class ProductControllerCore extends FrontController
}
return $specific_prices;
}
+
+ public function postProcess()
+ {
+ if ($this->ajax)
+ {
+ if (Tools::isSubmit('submitCustomizedDatas'))
+ {
+ $this->pictureUpload($this->product, $this->context->cart);
+ $this->textRecord($this->product, $this->context->cart);
+ $this->formTargetFormat();
+ }
+ if (count($this->errors))
+ die(Tools::jsonEncode(array('hasErrors' => true, 'errors' => $this->errors)));
+ else
+ die(Tools::jsonEncode(array('hasErrors' => false, 'conf' => Tools::displayError('Customization saved successfully.'))));
+ }
+ }
}
diff --git a/js/tools.js b/js/tools.js
index 5038af989..f4be7c856 100644
--- a/js/tools.js
+++ b/js/tools.js
@@ -214,7 +214,13 @@ function checkCustomizations()
function emptyCustomizations()
{
if(typeof(customizationFields) == 'undefined') return;
-
+
+ $('.customization_block .success').fadeOut(function(){
+ $(this).remove();
+ });
+ $('.customization_block .error').fadeOut(function(){
+ $(this).remove();
+ });
for (var i = 0; i < customizationFields.length; i++)
{
$('#' + customizationFields[i][0]).html('');
diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js
index 5430737e5..38ad20d56 100644
--- a/modules/blockcart/ajax-cart.js
+++ b/modules/blockcart/ajax-cart.js
@@ -493,8 +493,10 @@ var ajaxCart = {
if (!hasAlreadyCustomizations)
{
- if (!product.hasAttributes) content += '
';
- content += '';
+ if (!product.hasAttributes)
+ content += '- ';
+ if ($('#customization_' + productId + '_' + productAttributeId).val() == undefined)
+ content += '
';
}
$(product.customizedDatas).each(function(){
@@ -502,7 +504,7 @@ var ajaxCart = {
customizationId = parseInt(this.customizationId);
productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination);
// If the customization is already displayed on the cart, no update's needed
- if($('#cart_block').find("div[id^=deleteCustomizableProduct_" + customizationId + "_]").length)
+ if ($("#deleteCustomizableProduct_" + customizationId + "_" + productId + "_" + productAttributeId).length)
return ('');
content += '- ' + parseInt(this.quantity) + 'x';
diff --git a/themes/default/css/global.css b/themes/default/css/global.css
index 880692e09..818916047 100644
--- a/themes/default/css/global.css
+++ b/themes/default/css/global.css
@@ -89,6 +89,13 @@ p {padding-bottom:20px}
font-size:13px;
background:#ffffe0
}
+.success {
+ margin:0 0 10px 0;
+ padding:10px;
+ border:1px solid #5cff74;
+ font-size:13px;
+ background: #d3ffab
+}
.error {
margin:0 0 10px 0;
padding:10px;
diff --git a/themes/default/js/product.js b/themes/default/js/product.js
index ffb1843d8..47ccc8cdb 100644
--- a/themes/default/js/product.js
+++ b/themes/default/js/product.js
@@ -30,6 +30,7 @@ var combinations = new Array();
var selectedCombination = new Array();
var globalQuantity = new Number;
var colors = new Array();
+var input_save_customized_datas = '';
//check if a function exists
function function_exists(function_name)
@@ -548,6 +549,7 @@ $(document).ready(function()
// Hide the customization submit button and display some message
$('p#customizedDatas input').click(function() {
+ input_save_customized_datas = $('p#customizedDatas').html();
$('p#customizedDatas input').hide();
$('#ajax-loader').fadeIn();
$('p#customizedDatas').append(uploading_in_progress);
@@ -578,8 +580,50 @@ function saveCustomization()
$('body select[id^="group_"]').each(function() {
customAction = customAction.replace(new RegExp(this.id + '=\\d+'), this.id +'='+this.value);
});
- $('#customizationForm').attr('action', customAction);
- $('#customizationForm').submit();
+
+ $.ajax({
+ type: 'POST',
+ url: customAction,
+ data: 'ajax=true&'+$('#customizationForm').serialize(),
+ dataType: 'json',
+ async : true,
+ success: function(data) {
+ $('#customizedDatas').fadeOut();
+ $('#customizedDatas').html(input_save_customized_datas);
+ $('#customizedDatas').fadeIn();
+ if (!data.hasErrors)
+ {
+ $('#customizationForm').find('.error').fadeOut(function(){
+ $(this).remove();
+ });
+ // display a confirmation message
+ if ($('#customizationForm').find('.success').val() == undefined)
+ $('#customizationForm').prepend("
"+data.conf+"
");
+ else
+ $('#customizationForm.success').html(""+data.conf+"
");
+ }
+ else
+ {
+ $('#customizationForm').find('.success').fadeOut(function(){
+ $(this).remove();
+ });
+ // display an error message
+ if ($('#customizationForm').find('.error').val() == undefined)
+ {
+ $('#customizationForm').prepend("");
+ for (var i = 0; i < data.errors.length; i++)
+ $('#customizationForm .error').html($('#customizationForm .error').html()+data.errors[i]+"
");
+ }
+ else
+ {
+ $('#customizationForm .error').html('');
+ for (var i = 0; i < data.errors.length; i++)
+ $('#customizationForm .error').html($('#customizationForm .error').html()+data.errors[i]+"
");
+ }
+ }
+ }
+ });
+ return false;
}
function submitPublishProduct(url, redirect)