var set_preference = (function($, window, jQuery) { /* Stop validator from firing on keyprss */ $.validator.setDefaults({ onkeyup: false }); let selectedCountryCode; var _vars_ = {}; return { "set_vars": function(options) { $.extend(_vars_, options || {}); }, "get_vars": function() { return _vars_; }, "form": { "validate": function(options) { $("#e_pref").text("").hide(); var custom_val = true; if (typeof options.custom_validation != "undefined") { custom_val = options.custom_validation(); } app._form._resetFormValidation(options.validation.form_id); var valOPtions = { ignore: options.validation.ignore, highlight: function(element) { $(element).closest('.form-group').addClass('has-error'); $(element).closest('.form-label-group').addClass('has-error'); }, unhighlight: function(element) { $(element).closest('.form-group').removeClass('has-error'); $(element).closest('.form-label-group').removeClass('has-error'); }, errorElement: 'span', errorClass: 'help-block', errorPlacement: function(error, element) { // if (element.hasClass("multi-checkbox")) { // error.insertAfter($(".event-pref label")).addClass("pull-right"); // } else if( element.attr("id") == "country"){ // $(".select2-container--default .select2-selection--single").css({"border-color" : "#a94442" }) // error.insertAfter('.with-country-custom-error').css({"color":"#a94442", "float":"right"}); // }else if( element.attr("id") == "Concert"){ // error.insertAfter('.with-event-preferences-custom-error').css({"color":"#a94442", "float":"left"}); // }else if( element.attr("name") == "civility" ){ // error.insertAfter('.with-civility-custom-error').css({"color":"#a94442"}); // } else { // error.insertAfter(element); // } if (element.hasClass("multi-checkbox")) { error.insertAfter('.with-event-preferences-custom-error').addClass('error-msg'); $('.with-event-preferences-custom-error').addClass('error-msg'); } else if (element.attr("id") == "country") { $(".select2-container--default .select2-selection--single").css({ "border-color": "#a94442 !important" }) error.insertAfter('.with-country-custom-error').addClass('error-msg'); $('.with-country-custom-error').addClass('error-msg'); } else if (element.attr("id") == "Concert") { error.insertAfter('.with-event-preferences-custom-error').addClass('error-msg'); } else if (element.attr("name") == "civility") { error.insertAfter('.with-civility-custom-error').addClass('error-msg'); $('.with-civility-custom-error').addClass('error-msg'); } else if (element.attr("name") == "first_name") { error.insertAfter('.with-fname-error').addClass('error-msg'); $('.with-fname-error').addClass('error-msg'); } else if (element.attr("name") == "last_name") { error.insertAfter('.with-lname-error').addClass('error-msg'); $('.with-lname-error').addClass('error-msg'); } else if (element.attr("name") == "birthday") { error.insertAfter('.with-birthday-error').addClass('error-msg'); $('.with-birthday-error').addClass('error-msg'); } else if (element.attr("name") == "address") { error.insertAfter('.with-address-error').addClass('error-msg'); $('.with-address-error').addClass('error-msg'); } else if (element.attr("name") == "additional_address") { error.insertAfter('.with-additionaladdress-error').addClass('error-msg'); $('.with-additionaladdress-error').addClass('error-msg'); } else if (element.attr("name") == "postal_code") { error.insertAfter('.with-postal_code-error').addClass('error-msg'); $('.with-postal_code-error').addClass('error-msg'); } else if (element.attr("name") == "city") { error.insertAfter('.with-city-error').addClass('error-msg'); $('.with-city-error').addClass('error-msg'); } else if (element.attr("name") == "mobile") { error.insertAfter('.with-mobile-error').addClass('error-msg'); $('.with-mobile-error').addClass('error-msg'); } else if (element.attr("name") == "phone") { error.insertAfter('.with-phone-error').addClass('error-msg'); $('.with-phone-error').addClass('error-msg'); } else { error.insertAfter(element); // app._notify("error", "Enregistrement impossible, merci de vérifier les informations complétées."); } }, submitHandler: function() { return false; } }; var form = $(options.validation.form_id); var rulesReset = form.data('validator'); if (typeof rulesReset != "undefined") { rulesReset.settings.rules = options.validation.rules; form.data('validator', rulesReset); valOPtions.rules = options.validation.rules; } else { valOPtions.rules = options.validation.rules; } try { //validate form form.validate(valOPtions); //put the bootbox dialog outside to prevent it from caching if (form.valid()) { if (custom_val) { // if(Helper._prefix($("#mobile").val()) < 9){ // app._form._populate_field_error("mobile", "Entrez au moins 9 chiffres.", 0); // }else if(Helper._prefix($("#phone").val()) < 9){ // app._form._populate_field_error("phone", "Entrez au moins 9 chiffres.", 0); // }else{ // } set_preference.update(); } }else{ app._notify("error", "Enregistrement impossible, merci de vérifier les informations complétées."); } } catch (e) { console.log(e); }; } }, "create_require_asteriks": function() { $.getJSON(app.get_vars().baseurl + "personalize/create_reg_form_rules", function(jsonData) { for (var i = 0; i < jsonData.length; i++) { if ("civility" == jsonData[i].name && jsonData[i].required != true) $('.civility').hide(); if ("first_name" == jsonData[i].name && jsonData[i].required != true) $('.first_name').hide(); if ("last_name" == jsonData[i].name && jsonData[i].required != true) $('.last_name').hide(); if ("birthday" == jsonData[i].name && jsonData[i].required != true) $('.birthday').hide(); if ("address" == jsonData[i].name && jsonData[i].required != true) $('.address').hide(); if ("additional_address" == jsonData[i].name && jsonData[i].required != true) $('.additional_address').hide(); if ("country" == jsonData[i].name && jsonData[i].required != true) $('.country_required').hide(); if ("postal_code" == jsonData[i].name && jsonData[i].required != true) $('.postal_code').hide(); if ("city" == jsonData[i].name && jsonData[i].required != true) $('.city').hide(); if ("mobile" == jsonData[i].name && jsonData[i].required != true) $('.mobile').hide(); if ("phone" == jsonData[i].name && jsonData[i].required != true) $('.phone').hide(); if ("event_preferences" == jsonData[i].name && jsonData[i].required != true) $('.event_preferences_error').hide(); // if( "event_preferences" == jsonData[i].name && jsonData[i].required == true) // $('span#event_preferences').append(' *'); // if( "civility" == jsonData[i].name && jsonData[i].required == true) // $('span#civility').append(' *'); // $('form#set_preferences_form label').each(function() { // $this = $(this) // if($this.attr('for') == jsonData[i].name && jsonData[i].required == true && "civility" != jsonData[i].name && "country" != jsonData[i].name && "first_name" != jsonData[i].name && "last_name" != jsonData[i].name && "birthday" != jsonData[i].name && "address" != jsonData[i].name && "additional_address" != jsonData[i].name && "postal_code" != jsonData[i].name && "city" != jsonData[i].name && "phone" != jsonData[i].name && "mobile" != jsonData[i].name ) // { // $('.error-sign').append(' *'); // } // }); } }); }, "validation": function() { // var validator = $( "#set_preferences_form" ).validate(); // $.validator.addMethod("checklengthmobile", function (value, element) { // return $("#mobile").val() != "+[33] X XX XX XX XX"; // }, "Entrez au moins 9 chiffres." ); // // // $.validator.addMethod("checklengthphone", function (value, element) { // return $("#phone").val() != "+[33] X XX XX XX XX"; // }, "Entrez au moins 9 chiffres." ); $.validator.addMethod("checkPostalCode", function(value, element) { var postalIsValid = false; $.ajax({ url: app.get_vars().baseurl + "setPreferences/validateFormat/postal?postal=" + value + "&countryCode=" + element.dataset.countryCode, async: false, success: function(response) { postalIsValid = response.isValid; } }); return postalIsValid; }, "Le code postal ne correspond pas au pays renseigné."); $.validator.addMethod("checkPhoneNumber", function(value, element) { var errorMsg = '',phoneIsValid = false; $.ajax({ url: app.get_vars().baseurl + "setPreferences/validateFormat/phone?phone=" + value + "&countryCode=" + element.dataset.countryCode, async: false, success: function(response) { if (response.isValid == "empty"){ errorMsg = 'Ce champ est obligatoire.'; phoneIsValid = false; }else if(response.isValid == "invalide"){ errorMsg = 'Numéro de téléphone invalide.'; phoneIsValid = false; }else if (response.isValid == false){ errorMsg = 'Le code indicatif téléphone ne correspond pas au pays renseigné.'; phoneIsValid = response.isValid; }else { phoneIsValid = true; } } }); $.validator.messages["checkPhoneNumber"] = errorMsg; return phoneIsValid; }, ''); $.getJSON(app.get_vars().baseurl + "personalize/create_reg_form_rules", function(jsonData) { var r_civility; var r_first_name; var r_last_name; var r_bday; var r_address; var r_additional_address; var r_country; var r_postal_code; var r_city; var r_email_address; var r_mobile; var r_phone; var r_preference; for (var i = 0; i < jsonData.length; i++) { switch (jsonData[i].name) { case "civility": r_civility = jsonData[i].required; break; case "first_name": r_first_name = jsonData[i].required; break; case "last_name": r_last_name = jsonData[i].required; break; case "birthday": r_bday = jsonData[i].required; break; case "address": r_address = jsonData[i].required; break; case "additional_address": r_additional_address = jsonData[i].required; break; case "country": r_country = jsonData[i].required; break; case "postal_code": r_postal_code = jsonData[i].required; break; case "city": r_city = jsonData[i].required; break; case "email_address": r_email_address = jsonData[i].required; break; case "mobile": r_mobile = jsonData[i].required; break; case "phone": r_phone = jsonData[i].required; break; case "event_preferences": r_preference = jsonData[i].required; break; } } var options = { //custom_validation : set_preference.custom_validation, validation: { // ignore : "[readonly]", form_id: "form#set_preferences_form", rules: { civility: { required: r_civility }, first_name: { required: r_first_name }, last_name: { required: r_last_name }, birthday: { required: r_bday }, address: { required: r_address }, additional_address: { required: r_additional_address }, country: { required: r_country }, postal_code: { // digits: true, required: r_postal_code, checkPostalCode: r_postal_code }, city: { required: r_city }, mobile: { required: r_mobile, // checklengthmobile: r_mobile checkPhoneNumber: r_mobile, }, phone: { required: r_phone, // checklengthphone: r_phone checkPhoneNumber: r_phone }, "preference[]": { minlength: 1, required: r_preference } } } }; set_preference.form.validate(options); }, 'json'); }, /*"custom_validation" : function() { var error = true; var telephone_no = $("#phone").val(); var mobile_no = $("#mobile").val() if(telephone_no == "+[33] X XX XX XX XX" || mobile_no == "+[33] X XX XX XX XX") { $(".err-phone").hide() } else { error = false; $(".err-phone").show() } if(mobile_no.length == 0 || mobile_no.length == 10) { $(".err-mobile").hide() } else { error = false; $(".err-mobile").show() } return error; },*/ "save_preferences_btn": function(btn, remove, duration) { $(btn).attr("disabled", true); if (remove) window.setTimeout(function() { $(btn).removeAttr("disabled") }, duration); }, "update": function() { //disabled button to prevent duplicate set_preference.save_preferences_btn("#save_preferences_btn", true, 5000); let formData = $("form#set_preferences_form").serializeArray(); //quick fix for telephone fixe that saves the placeholder instead an empty value let explode = (formData[11].value).trim().split(" "); if (formData[11].value.indexOf("X") != -1 || typeof explode[1] == "undefined" || (typeof explode[1] != "undefined" && explode[1].trim().length < 1)) { formData[11].value = ""; } $.ajax({ url: app.get_vars().baseurl + "profile/preferences/setPreferences", type: "POST", data: formData, success: function(result) { if (!result.nomessage) { if (result.message != null) { app._notify(result.mtype, result.message); } } if (result.mtype == "session_timeout") { window.setTimeout(function() { window.location.href = result.mdetail.path; }, result.mdetail.redirect); } else if (result.mtype == "success") { //disabled button to prevent duplicate set_preference.save_preferences_btn("#save_preferences_btn", false, 5000); //reload grid window.setTimeout(function() { window.location.href = app.get_vars().baseurl; }, 2000); } else { var x = 0; $.map(result.mdetail, function(input, i) { app._form._populate_field_error(input.field, input.message, x); x++; }); } } }); }, "prevent_page_load": function() { history.pushState(null, null, document.url); window.addEventListener('popstate', function() { //$.ajax({ // url : app.get_vars().baseurl+"is_alive/", // type : "POST", // data : { // action : 1 // }, // success : function(result){ // console.log(result) // if(result.redirect==1){ // //window.location.href = app.get_vars().baseurl+"login"; // } // } //}); var d = decodeURIComponent(set_preference.getCookie("_sdllmea")); if (d.indexOf("first_logged_in") <= -1) { window.location.href = app.get_vars().baseurl; } else { history.pushState(null, null, document.url); } }); }, "getCookie": function(name) { var value = "; " + document.cookie; var parts = value.split("; " + name + "="); if (parts.length == 2) return parts.pop().split(";").shift(); }, "postal_min_max": function() { // $("#postal_code").attr("readonly", true); $('#country').on('keypress, blur', function() { var values = $.trim($(this).val()); if (values.length > 0) $("#postal_code").removeAttr("readonly"); else $("#postal_code").attr("readonly", true); }); $('#country').on('change', function() { $("#postal_code").val(''); if (this.value.toLowerCase() === "france") { $("#postal_code").removeAttr("readonly"); $("#postal_code").attr("minlength", 5); $("#postal_code").attr("maxlength", 5); $("#postal_code").attr("onkeypress", "return Helper.validate_numbers(event)"); } else if (this.value.toLowerCase() !== "france") { $("#postal_code").removeAttr("readonly"); $("#postal_code").removeAttr("minlength"); $("#postal_code").removeAttr("maxlength"); $("#postal_code").removeAttr("onkeypress"); } }) }, "civility_option": function(civility_option) { $(civility_option).on('change', function() { $(civility_option).not(this).prop('checked', false); }); }, "country_list": function() { $("#country").select2({ // placeholder: { // id: "-1", // text: 'Pays' // } /*sorter: function(data) { return data.sort(function (a, b) { a = a.text.toLowerCase(); b = b.text.toLowerCase(); if (a > b) { if(a=="france" || b =="france") return -1 else return 1 } if (a < b) { return -1; } return 0; }); }*/ }); $('.country').addClass('country_selected'); $('#country').val('France'); // Select the option with a value of '1' $('#country').trigger('change'); // Notify any JS components that the value changed var selectedCountryCode = $('#country').children(":selected").attr("id"); $('#postal_code').attr('data-country-code', selectedCountryCode); $('#mobile').attr('data-country-code', selectedCountryCode); $('#phone').attr('data-country-code', selectedCountryCode); if ($('#country').val().toLowerCase() === "france") { $("#postal_code").removeAttr("readonly"); $("#postal_code").attr("minlength", 5); $("#postal_code").attr("maxlength", 5); $("#postal_code").attr("onkeypress", "return Helper.validate_numbers(event)"); } else if ($('#country').val().toLowerCase() !== "france") { $("#postal_code").removeAttr("readonly"); $("#postal_code").removeAttr("minlength"); $("#postal_code").removeAttr("maxlength"); $("#postal_code").removeAttr("onkeypress"); } $.ajax({ url: app.get_vars().baseurl + "setPreferences/getPhoneNumberFormat/" + selectedCountryCode, async: false, success: function(response) { $('#postal_code').removeAttr('readonly'); $('#mobile').removeAttr('readonly'); $('#phone').removeAttr('readonly'); $('#mobile').removeAttr('placeholder'); $('#phone').removeAttr('placeholder'); $('#mobile').val(''); $('#phone').val(''); $('#mobile').unmask(); $('#phone').unmask(); if (selectedCountryCode == 'FR') { $('#mobile').attr('placeholder', `+[33] X XX XX XX XX`); $('#phone').attr('placeholder', `+[33] X XX XX XX XX`); //create prefix // Helper._create_prefix("#phone"); // Helper._create_prefix("#mobile"); // Helper.mask_setpref("#phone", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`); Helper.mask_setpref("#mobile", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`); } else { $('#mobile').attr('placeholder', `+[${response.code}] ${response.format}`); $('#phone').attr('placeholder', `+[${response.code}] ${response.format}`); //create prefix // Helper._create_prefix("#phone", response.code, response.format); // Helper._create_prefix("#mobile", response.code, response.format); Helper.mask_setpref("#phone", `floooor ${response.format}`, `+[${response.code}] ${response.format}`); Helper.mask_setpref("#mobile", `floooor ${response.format}`, `+[${response.code}] ${response.format}`); } } }); } }; // Pass in jQuery. })(jQuery, this); $(function() { //focus first element $("#first_name").focus(); //create dropdown list of countries set_preference.country_list(); //hide first custom error message on mobile ang phone $(".err-mobile, .err-phone").hide(); //create datepicker for b-day then call validation onchange $('#birthday').datetimepicker({ format: 'DD/MM/YYYY', locale: 'fr', icons: { next: "fas fa-chevron-right fa-sm", previous: "fas fa-chevron-left fa-sm" } }).on('dp.change', function(e) { if ($(e.target).val().length > 0) { if ($(e.target).prop("name")) { $(e.target).closest('.form-group').removeClass('has-error').find("span.help-block").text('') } } }).on('dp.show', function(e) { if($(e.target).val().trim() != ""){ return $(e.target).data('DateTimePicker').date(null); } else { // return $(this).data('DateTimePicker').date(moment($(this).val(), "DD/MM/YYYY HH[h]mm", true)); } }).on('dp.hide', function() { $(this).blur(); }); //validate form on submit $('#save_preferences_btn').off('click').on('click', function(event) { event.preventDefault(); set_preference.validation(); }); //remove validation errors on keypress app._form._form_on_keypress("set_preferences_form", function() { set_preference.validation(); }); //remove validation errors on select for country $('select.s1').on('change', function(e) { if ($(e.target).val().length > 0) { if ($(e.target).prop("name")) { $(".select2-container--default .select2-selection--single").css({ "border-color": "#ccc" }) $(e.target).closest('.form-label-group').removeClass('has-error').find("span.help-block").text('') } } //remove error on telephone field $('#mobile').closest('.form-label-group').removeClass('has-error').find("span.help-block").text(''); }); $('.textboxes').on('keypress',function (e) { $(e.target).closest('.form-label-group').removeClass('has-error').find("span.help-block").text(''); }) //civility checkbox options set_preference.civility_option('input#civility'); //create asterisk for required fields accordingly set_preference.create_require_asteriks(); //chnage postal value lengt if france max 5 numbers else other countries greater than 5 set_preference.postal_min_max(); set_preference.prevent_page_load(); $.fn.setCursorPosition = function(pos) { this.each(function(index, elem) { if (elem.setSelectionRange) { elem.setSelectionRange(pos, pos); } else if (elem.createTextRange) { var range = elem.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }); return this; }; //mask phone and mobile //Helper.input_mask("#phone", "[~][~][~] X XX XX XX XX" ); //Helper.input_mask("#mobile", "[~][~][~] X XX XX XX XX" ); /*$('#phone').on('click',function(){ setTimeout(function(){ $('input[name=phone]').focus().setCursorPosition(1); }, 0); }); $('#mobile').on('click', function(){ setTimeout(function(){ $('input[name=mobile]').focus().setCursorPosition(1); }, 0); });*/ $(window).on('load', function() { // $('#firstPopUp').modal({ // backdrop: 'static', // keyboard: false // }); }); $('label.country').on('click', function (e) { $('#country').select2('open'); }); $('select#country').on("select2:select", function(e) { $('.country').addClass('country_selected'); var selectedCountryCode = e.params.data.element.id; $('#postal_code').attr('data-country-code', selectedCountryCode); $('#mobile').attr('data-country-code', selectedCountryCode); $('#phone').attr('data-country-code', selectedCountryCode); $.ajax({ url: app.get_vars().baseurl + "setPreferences/getPhoneNumberFormat/" + selectedCountryCode, async: false, success: function(response) { $('#postal_code').removeAttr('readonly'); $('#mobile').removeAttr('readonly'); $('#phone').removeAttr('readonly'); $('#mobile').removeAttr('placeholder'); $('#phone').removeAttr('placeholder'); $('#mobile').val(''); $('#phone').val(''); $('#mobile').unmask(); $('#phone').unmask(); if (selectedCountryCode == 'FR') { $('#mobile').attr('placeholder', `+[33] X XX XX XX XX`); $('#phone').attr('placeholder', `+[33] X XX XX XX XX`); //create prefix // Helper._create_prefix("#phone"); // Helper._create_prefix("#mobile"); Helper.mask_setpref("#phone", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`); Helper.mask_setpref("#mobile", `floooor X XX XX XX XX`, `+[33] X XX XX XX XX`); } else { $('#mobile').attr('placeholder', `+[${response.code}] ${response.format}`); $('#phone').attr('placeholder', `+[${response.code}] ${response.format}`); //create prefix // Helper._create_prefix("#phone", response.code, response.format); // Helper._create_prefix("#mobile", response.code, response.format); Helper.mask_setpref("#phone", `floooor ${response.format}`, `+[${response.code}] ${response.format}`); Helper.mask_setpref("#mobile", `floooor ${response.format}`, `+[${response.code}] ${response.format}`); } } }); }) });