Plugin Directory

Changeset 2636487


Ignore:
Timestamp:
11/28/2021 10:46:41 AM (4 years ago)
Author:
feryaz
Message:

Update to easyreservations-premium.6.0-alpha.22

Location:
easyreservations/trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • easyreservations/trunk/assets/js/frontend/date-selection.js

    r2514805 r2636487  
    3333            done = false,
    3434            slots = false,
    35             currentMonth = false,
     35            currentMonth = new Date().getMonth() + 1,
    3636            resourceQuantity = false,
    3737            arrival = false,
     
    328328                .datepicker(
    329329                    $.extend( {
    330                         minDate: arrival ? arrival : settings.minDate,
     330                        minDate: arrival ? arrival : ( settings.minDate ? settings.minDate : null ),
    331331                        maxDate: maxDate ? maxDate : null,
    332332                        dateFormat: dateFormat,
     
    335335                        onChangeMonthYear: function( year, month, inst ) {
    336336                            currentMonth = month;
    337                             if ( ! slots || ( ! arrivalTime && settings.time ) || ( arrival && ! settings.time ) ) {
     337                            if ( ! slots || ( ! arrivalTime && settings.time ) || ( arrival && ! settings.time ) || ! arrival ) {
    338338                                loadData( dateFormat.replace( 'dd', '01' ).replace( 'mm', month ).replace( 'yy', year ) );
    339339                            }
     
    467467                            const departureString = v.departure.split( ' ' );
    468468                            if ( departure === departureString[ 0 ] ) {
    469                                 const timeString = departureString.split( ':' );
     469                                const timeString = departureString[ 1 ].split( ':' );
    470470                                setDepartureTime( timeString[ 0 ], timeString[ 1 ] );
    471471                                return false;
     
    671671
    672672                    if ( data.hasOwnProperty( 'max' ) && data.max ) {
    673                         //TODO: reintroduce feature WEIRD BUG still present as of 02 2020
     673                        //TODO: reintroduce feature WEIRD BUG still present as of 08 2021
    674674                        //calendarContainer.datepicker('option', 'maxDate', data['max']);
     675
    675676                        calendarContainer.datepicker( 'refresh' );
     677
     678                        if( easyStringToDate( data.max ).getMonth() === currentMonth - 1 ){
     679                            calendarContainer.find( '.ui-datepicker-next' ).addClass( 'ui-state-disabled' ).unbind();
     680                        }
    676681                    } else {
    677682                        calendarContainer.datepicker( 'refresh' );
  • easyreservations/trunk/assets/js/frontend/date-selection.min.js

    r2514805 r2636487  
    1 (function(a){a.fn.isInViewport=function(){const c=a(this).offset().top;const e=c+a(this).outerHeight();const b=a(window).scrollTop();const d=b+a(window).height();return e>b&&c<d};a.fn.dateSelection=function(f){const u=a(this),i=u.find(".datepicker"),g=erDatepickerArgs(),n=[],v=a.extend({resource:0,arrivalHour:false,arrivalMinute:false,departureHour:false,departureMinute:false,minDate:g.minDate,init:true,departure:true,numberOfMonths:1,time:false,price:false},f);let pageLoad=true,data=false,lastRequest=false,done=false,slots=false,currentMonth=false,resourceQuantity=false,arrival=false,arrivalTime=false,frequency=false,departure=false,departureTime=false;if(v.resource===0){v.resource=a("*[name=resource]").val()}if(v.resource&&v.resource>0){frequency=er_both_params.resources[v.resource].frequency;resourceQuantity=er_both_params.resources[v.resource].quantity}u.find("div.arrival").on("click",function(){q()});u.find("div.departure").on("click",function(){if(arrival&&(arrivalTime||!v.time)){b();if(!i.hasClass("hasDatepicker")){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);c(arrival);t()}else{u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active");a(this).closest(".time-picker").remove()})}}});a("*[name=resource]").on("change",function(){s();b();v.resource=a(this).val();frequency=er_both_params.resources[v.resource].frequency;resourceQuantity=er_both_params.resources[v.resource].quantity;q()});if(v.init&&u.find("input[name=arrival]").val()===""&&v.resource&&v.resource>0){q()}function q(){u.find(".calendar").css("display","block");if(i.hasClass("hasDatepicker")){l(q)}else{u.find(".text .time").html("");data=false;slots=false;s();b();u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.wait);u.find("input[name=slot]").val(-1);c(arrival?arrival:0);t()}}function d(){if(!done){if(departure){if(departureTime||!v.time){l(o);done=true}else{h()}}else{if(arrival){if(arrivalTime!==false||!v.time){if(v.departure){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);t()}else{if(i.hasClass("hasDatepicker")){l(d)}else{if(slots){const x=data[arrival][arrivalTime][0].departure.split(" ");const e=x[1].split(":");k(x[0]);w(e[0],e[1])}o()}done=true}}else{h()}}}}}function h(){const x=a.datepicker.formatDate("DD, d M yy",i.datepicker("getDate"));u.find("a.ui-state-active").parent().parent().after('<tr class="time-picker"><td colspan="7"><div>'+x+'<div class="insert"></div></div></td></tr>');let timeOptions="";if(slots){if(arrivalTime!==false){a.each(data[arrival][arrivalTime],function(A,z){const C=z.departure.split(" ");if(C[0]!==departure){return}const B=C[1].split(":"),D=z.availability<1?"unavailable":(z.availability<resourceQuantity?"partially":"available");let label=easyFormatTime(B[0],B[1],er_both_params.time_format);if(z.price){label+='<span class="price">'+z.price+"</span>"}timeOptions+='<li class="easy-button '+D+'" data-hour="'+B[0]+'" data-minute="'+B[1]+'" data-id="'+z.key+'">'+label+"</li>"})}else{a.each(data[arrival],function(A,z){const B=A.split(":");a.each(z,function(D,C){const G=C.availability<1?"unavailable":(C.availability<resourceQuantity?"partially":"available");let label=easyFormatTime(B[0],B[1],er_both_params.time_format),attributes="";if(!v.departure){const F=C.departure.split(" ");const E=F[1].split(":");label+=" -";if(arrival!==F[0]){label+=" "+F[0]}label+=" "+easyFormatTime(E[0],E[1],er_both_params.time_format);if(C.price){label+='<span class="price">'+C.price+"</span>"}attributes+=' data-departure=" '+F[0]+'"';attributes+=' data-departure-hour=" '+E[0]+'"';attributes+=' data-departure-minute=" '+E[1]+'"'}timeOptions+='<li class="easy-button '+G+'" data-hour="'+B[0]+'" data-minute="'+B[1]+'" data-id="'+C.key+'" '+attributes+">"+label+"</li>";if(v.departure){return false}})})}if(timeOptions!==""){u.find(".time-picker .insert").html('<ul class="option-buttons">'+timeOptions+"</ul>");u.find(".time-picker > td > div").slideDown(350);u.find("ul.option-buttons li.available, ul.option-buttons li.partially").on("click",function(){if(arrivalTime!==false){u.find("input[name=slot]").val(a(this).attr("data-id"));w(a(this).attr("data-hour"),a(this).attr("data-minute"))}else{if(!v.departure){u.find("input[name=slot]").val(a(this).attr("data-id"));k(a(this).attr("data-departure"));w(a(this).attr("data-departure-hour"),a(this).attr("data-departure-minute"))}p(a(this).attr("data-hour"),a(this).attr("data-minute"))}l(d)})}}else{if(data[departure?departure:arrival].availability&&data[departure?departure:arrival].availability===parseInt(data[departure?departure:arrival].availability,10)){u.find("div.time-prototype").contents().clone(true).appendTo(u.find(".time-picker .insert")).attr("disabled");let minMax;if(departure){minMax=data[departure].time}else{minMax=data[arrival].time}const y=data.first_possible.split(" ");if(y[0]===(departure?departure:arrival)){const e=y[1].split(":");minMax[0]=parseInt(minMax[0],10)<e[0]?parseInt(e[0],10):minMax[0]}u.find(".time-picker select[name=time_hour] option").each(function(){const z=parseInt(a(this).val());if(z<minMax[0]||z>minMax[1]){a(this).attr("disabled",true).prop("selected",false).css("display","none")}else{a(this).attr("disabled",false).css("display","block")}});if(departure){if(v.departureHour&&v.departureHour>minMax[0]&&v.departureHour<minMax[1]){u.find(".time-picker select[name=time_hour]").val(v.departureHour)}}else{if(v.arrivalHour&&v.arrivalHour>minMax[0]&&v.arrivalHour<minMax[1]){u.find(".time-picker select[name=time_hour]").val(v.arrivalHour)}}u.find(".time-picker .apply-time").on("click",function(){const z=u.find(".time-picker select[name=time_hour]");if(z.length>0){const A=parseInt(u.find(".time-picker select[name=time_minute]").val());if(arrivalTime!==false){w(z.val(),A)}else{p(z.val(),A);if(v.departure){c(arrival)}}l(d)}})}else{a.each(data[departure?departure:arrival].availability,function(A,z){const B=A.split(" ");const C=B[0].split(":");const D=z<1?"unavailable":(z<resourceQuantity?"partially":"available");timeOptions+='<div class="time-option '+D+'" data-hour="'+C[0]+'" data-minute="'+C[1]+'">'+easyFormatTime(C[0],C[1])+"</div>"});u.find(".time-picker .insert").html('<div class="option-buttons">'+timeOptions+"</div>");u.find(".time-picker .time-option.available, .time-picker .time-option.partially").on("click",function(){if(arrivalTime!==false){w(a(this).attr("data-hour"),a(this).attr("data-minute"))}else{p(a(this).attr("data-hour"),a(this).attr("data-minute"));if(v.departure){c(arrival)}}l(d)})}u.find(".time-picker > td > div").slideDown(350)}}function t(x){let dateFormat="dd.mm.yy";if(er_both_params.date_format==="Y/m/d"){dateFormat="yy/mm/dd"}else{if(er_both_params.date_format==="m/d/Y"){dateFormat="mm/dd/yy"}else{if(er_both_params.date_format==="Y-m-d"){dateFormat="yy-mm-dd"}else{if(er_both_params.date_format==="d-m-Y"){dateFormat="dd-mm-yy"}}}}i.datepicker(a.extend({minDate:arrival?arrival:v.minDate,maxDate:x?x:null,dateFormat:dateFormat,numberOfMonths:v.numberOfMonths,beforeShowDay:j,onChangeMonthYear:function(y,A,z){currentMonth=A;if(!slots||(!arrivalTime&&v.time)||(arrival&&!v.time)){c(dateFormat.replace("dd","01").replace("mm",A).replace("yy",y))}u.find("div.time").slideUp(300);if(arrival&&(arrivalTime||!v.time)){b();u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait)}else{s();u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.wait)}},onSelect:m},g)).datepicker("setDate",null).slideDown("300");const e=i.parent().parent();if(!pageLoad&&resourceQuantity&&i.hasClass("hasDatepicker")&&!e.isInViewport()){a([document.documentElement,document.body]).animate({scrollTop:e.offset().top-30},500)}pageLoad=false;i.find(".ui-datepicker").removeClass("ui-datepicker").addClass("easy-datepicker");i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-hover").removeClass("ui-state-active");a.each(er_date_picker_params.datepicker,function(z,y){i.datepicker("option",z,JSON.parse(y))})}function s(){arrival=false;arrivalTime=false;u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.select);u.find(".arrival .text .time").html("");u.find("input[name=arrival]").val("");u.find("input[name=departure_hour]").val("");u.find("input[name=departure_minute]").val("")}function b(){departure=false;departureTime=false;done=false;if(arrival){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.select)}else{u.find(".departure .text .date").removeClass("important").html("&#8212;")}u.find(".departure .text .time").html("");u.find("input[name=departure]").val("");u.find("input[name=departure_hour]").val("");u.find("input[name=departure_minute]").val("");u.find(".departure").removeClass("active")}function r(e){arrival=e;u.find(".arrival .text .date").removeClass("important").html(e);u.find("input[name=arrival]").val(e);u.find("input[name=arrival_hour]").val("");u.find("input[name=arrival_minute]").val("")}function k(e){departure=e;u.find("input[name=departure]").val(e);u.find(".departure").addClass("active");u.find(".departure .text .date").removeClass("important").html(e)}function p(e,y,x){e=easyAddZero(e);y=easyAddZero(y);if(!x){x=easyFormatTime(e,y)}arrivalTime=e+":"+y;u.find("input[name=arrival_hour]").val(e);u.find("input[name=arrival_minute]").val(y);u.find(".arrival .text .time").html(x)}function w(e,y,x){e=easyAddZero(e);y=easyAddZero(y);if(!x){x=easyFormatTime(e,y)}departureTime=e+":"+y;u.find("input[name=departure_hour]").val(e);u.find("input[name=departure_minute]").val(y);u.find(".departure .text .time").html(x)}function m(z,e){if(arrival&&(arrivalTime!==false||!v.time)){if(departure===z){b();u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active")});return false}k(z);if(v.time){setTimeout(h,1)}else{if(slots){const x=false;a.each(data[arrival][arrivalTime],function(B,A){const D=A.departure.split(" ");if(departure===D[0]){const C=D.split(":");w(C[0],C[1]);return false}})}else{w(v.departureHour?v.departureHour:data[departure].time[0],v.departureMinute?v.departureMinute:0)}l(d)}}else{if(arrival===z){s();u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active")});return false}r(z);if(v.time){setTimeout(h,1)}else{let hour=12,minute=v.arrivalHour?v.arrivalMinute:0;if(slots){const y=Object.keys(data[arrival])[0].split(":");hour=y[0];minute=y[1]}else{hour=v.arrivalHour?v.arrivalHour:data[arrival].time[1]}p(hour,minute);if(v.departure){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);c(arrival)}l(d)}}}function l(e){i.slideUp(350,function(){a(this).datepicker("destroy").removeClass("hasDatepicker").removeAttr("id");if(e){e()}})}function j(x){let className="";if(data){const e=easyFormatDate(x,false);if(slots&&arrival&&arrivalTime!==false){if(easyStringToDate(arrival)>x){return[false,"past",""]}let toReturn=[false,"unavailable",""],iterate;if(arrivalTime!==false&&v.time){iterate=data[arrival][arrivalTime]}else{iterate=data[arrival][Object.keys(data[arrival])[0]]}a.each(iterate,function(z,y){const A=y.departure.split(" ");if(A[0]===e){toReturn=[true,"available",""];return true}});return toReturn}if(data.hasOwnProperty(e)){if(data[e].price){className="datepicker-content-"+data[e].price.hashCode();if(a.inArray(className,n)===-1){a("head").append("<style>.easy-date-selection td."+className+"  a:after {content: '"+data[e].price+"'}</style>");n.push(className)}}else{if(v.price&&!slots&&frequency===86400){className="price-placeholder"}}if(data[e].availability&&data[e].availability===parseInt(data[e].availability,10)){if(data[e].availability<0){return[false,"unavailable rule "+className,""]}if(data[e].availability<1){return[false,"unavailable "+className,""]}if(data[e].availability<resourceQuantity){return[true,"partially "+className,""]}}else{let amountAvailable=0,hasAvailableSlot=false,total;if(slots){total=data[e];a.each(total,function(z,y){if(y[0]&&y[0].availability>0){hasAvailableSlot=true;amountAvailable++}})}else{total=data[e].availability;a.each(total,function(z,y){if(y>0){hasAvailableSlot=true;amountAvailable++}})}if(!hasAvailableSlot){return[false,"unavailable "+className,""]}if(Object.keys(total).length>amountAvailable){return[true,"partially "+className,""]}}return[true,"available "+className,""]}}if(v.price&&!slots&&frequency===86400){className="price-placeholder"}return[false,"past "+className,""]}function c(x){const e=Date.now(),y={action:"easyreservations_calendar",date:x===0?0:x,arrival:arrival&&(arrivalTime!==false||!v.time)?arrival:0,arrivalTime:arrivalTime,months:v.numberOfMonths,adults:a("*[name=adults]").val(),children:a("*[name=children]").val(),resource:v.resource,price:v.price,minDate:v.minDate,security:u.find('input[name="easy-date-selection-nonce"]').val()};lastRequest=e;data=false;if(!y.resource){alert("no resource field in form, please fix");return}a.post(er_both_params.ajaxurl,y,function(A){if(lastRequest===e){if(arrival&&(arrivalTime||!v.time)){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.select)}else{u.find(".arrival .text .date").html(er_date_picker_params.select)}data=A;slots=data.hasOwnProperty("slots")&&data.slots;if(data.hasOwnProperty("first_possible")&&data.first_possible){const z=data.first_possible.split(" "),B=easyStringToDate(z[0]);if(arrival&&(!currentMonth||currentMonth===B.getMonth()+1)){i.datepicker("option","minDate",B)}}if(data.hasOwnProperty("max")&&data.max){i.datepicker("refresh")}else{i.datepicker("refresh")}i.find(".ui-datepicker-today a, .ui-datepicker-current-day a").removeClass("ui-state-highlight").removeClass("ui-state-hover").removeClass("ui-state-active")}})}function o(){u.find("input[name=arrival]").trigger("change")}}}(jQuery));Object.defineProperty(String.prototype,"hashCode",{value:function(){var c=0,a,b;for(a=0;a<this.length;a++){b=this.charCodeAt(a);c=((c<<5)-c)+b;c|=0}return c}});
     1(function(a){a.fn.isInViewport=function(){const c=a(this).offset().top;const e=c+a(this).outerHeight();const b=a(window).scrollTop();const d=b+a(window).height();return e>b&&c<d};a.fn.dateSelection=function(f){const u=a(this),i=u.find(".datepicker"),g=erDatepickerArgs(),n=[],v=a.extend({resource:0,arrivalHour:false,arrivalMinute:false,departureHour:false,departureMinute:false,minDate:g.minDate,init:true,departure:true,numberOfMonths:1,time:false,price:false},f);let pageLoad=true,data=false,lastRequest=false,done=false,slots=false,currentMonth=new Date().getMonth()+1,resourceQuantity=false,arrival=false,arrivalTime=false,frequency=false,departure=false,departureTime=false;if(v.resource===0){v.resource=a("*[name=resource]").val()}if(v.resource&&v.resource>0){frequency=er_both_params.resources[v.resource].frequency;resourceQuantity=er_both_params.resources[v.resource].quantity}u.find("div.arrival").on("click",function(){q()});u.find("div.departure").on("click",function(){if(arrival&&(arrivalTime||!v.time)){b();if(!i.hasClass("hasDatepicker")){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);c(arrival);t()}else{u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active");a(this).closest(".time-picker").remove()})}}});a("*[name=resource]").on("change",function(){s();b();v.resource=a(this).val();frequency=er_both_params.resources[v.resource].frequency;resourceQuantity=er_both_params.resources[v.resource].quantity;q()});if(v.init&&u.find("input[name=arrival]").val()===""&&v.resource&&v.resource>0){q()}function q(){u.find(".calendar").css("display","block");if(i.hasClass("hasDatepicker")){l(q)}else{u.find(".text .time").html("");data=false;slots=false;s();b();u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.wait);u.find("input[name=slot]").val(-1);c(arrival?arrival:0);t()}}function d(){if(!done){if(departure){if(departureTime||!v.time){l(o);done=true}else{h()}}else{if(arrival){if(arrivalTime!==false||!v.time){if(v.departure){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);t()}else{if(i.hasClass("hasDatepicker")){l(d)}else{if(slots){const x=data[arrival][arrivalTime][0].departure.split(" ");const e=x[1].split(":");k(x[0]);w(e[0],e[1])}o()}done=true}}else{h()}}}}}function h(){const x=a.datepicker.formatDate("DD, d M yy",i.datepicker("getDate"));u.find("a.ui-state-active").parent().parent().after('<tr class="time-picker"><td colspan="7"><div>'+x+'<div class="insert"></div></div></td></tr>');let timeOptions="";if(slots){if(arrivalTime!==false){a.each(data[arrival][arrivalTime],function(A,z){const C=z.departure.split(" ");if(C[0]!==departure){return}const B=C[1].split(":"),D=z.availability<1?"unavailable":(z.availability<resourceQuantity?"partially":"available");let label=easyFormatTime(B[0],B[1],er_both_params.time_format);if(z.price){label+='<span class="price">'+z.price+"</span>"}timeOptions+='<li class="easy-button '+D+'" data-hour="'+B[0]+'" data-minute="'+B[1]+'" data-id="'+z.key+'">'+label+"</li>"})}else{a.each(data[arrival],function(A,z){const B=A.split(":");a.each(z,function(D,C){const G=C.availability<1?"unavailable":(C.availability<resourceQuantity?"partially":"available");let label=easyFormatTime(B[0],B[1],er_both_params.time_format),attributes="";if(!v.departure){const F=C.departure.split(" ");const E=F[1].split(":");label+=" -";if(arrival!==F[0]){label+=" "+F[0]}label+=" "+easyFormatTime(E[0],E[1],er_both_params.time_format);if(C.price){label+='<span class="price">'+C.price+"</span>"}attributes+=' data-departure=" '+F[0]+'"';attributes+=' data-departure-hour=" '+E[0]+'"';attributes+=' data-departure-minute=" '+E[1]+'"'}timeOptions+='<li class="easy-button '+G+'" data-hour="'+B[0]+'" data-minute="'+B[1]+'" data-id="'+C.key+'" '+attributes+">"+label+"</li>";if(v.departure){return false}})})}if(timeOptions!==""){u.find(".time-picker .insert").html('<ul class="option-buttons">'+timeOptions+"</ul>");u.find(".time-picker > td > div").slideDown(350);u.find("ul.option-buttons li.available, ul.option-buttons li.partially").on("click",function(){if(arrivalTime!==false){u.find("input[name=slot]").val(a(this).attr("data-id"));w(a(this).attr("data-hour"),a(this).attr("data-minute"))}else{if(!v.departure){u.find("input[name=slot]").val(a(this).attr("data-id"));k(a(this).attr("data-departure"));w(a(this).attr("data-departure-hour"),a(this).attr("data-departure-minute"))}p(a(this).attr("data-hour"),a(this).attr("data-minute"))}l(d)})}}else{if(data[departure?departure:arrival].availability&&data[departure?departure:arrival].availability===parseInt(data[departure?departure:arrival].availability,10)){u.find("div.time-prototype").contents().clone(true).appendTo(u.find(".time-picker .insert")).attr("disabled");let minMax;if(departure){minMax=data[departure].time}else{minMax=data[arrival].time}const y=data.first_possible.split(" ");if(y[0]===(departure?departure:arrival)){const e=y[1].split(":");minMax[0]=parseInt(minMax[0],10)<e[0]?parseInt(e[0],10):minMax[0]}u.find(".time-picker select[name=time_hour] option").each(function(){const z=parseInt(a(this).val());if(z<minMax[0]||z>minMax[1]){a(this).attr("disabled",true).prop("selected",false).css("display","none")}else{a(this).attr("disabled",false).css("display","block")}});if(departure){if(v.departureHour&&v.departureHour>minMax[0]&&v.departureHour<minMax[1]){u.find(".time-picker select[name=time_hour]").val(v.departureHour)}}else{if(v.arrivalHour&&v.arrivalHour>minMax[0]&&v.arrivalHour<minMax[1]){u.find(".time-picker select[name=time_hour]").val(v.arrivalHour)}}u.find(".time-picker .apply-time").on("click",function(){const z=u.find(".time-picker select[name=time_hour]");if(z.length>0){const A=parseInt(u.find(".time-picker select[name=time_minute]").val());if(arrivalTime!==false){w(z.val(),A)}else{p(z.val(),A);if(v.departure){c(arrival)}}l(d)}})}else{a.each(data[departure?departure:arrival].availability,function(A,z){const B=A.split(" ");const C=B[0].split(":");const D=z<1?"unavailable":(z<resourceQuantity?"partially":"available");timeOptions+='<div class="time-option '+D+'" data-hour="'+C[0]+'" data-minute="'+C[1]+'">'+easyFormatTime(C[0],C[1])+"</div>"});u.find(".time-picker .insert").html('<div class="option-buttons">'+timeOptions+"</div>");u.find(".time-picker .time-option.available, .time-picker .time-option.partially").on("click",function(){if(arrivalTime!==false){w(a(this).attr("data-hour"),a(this).attr("data-minute"))}else{p(a(this).attr("data-hour"),a(this).attr("data-minute"));if(v.departure){c(arrival)}}l(d)})}u.find(".time-picker > td > div").slideDown(350)}}function t(x){let dateFormat="dd.mm.yy";if(er_both_params.date_format==="Y/m/d"){dateFormat="yy/mm/dd"}else{if(er_both_params.date_format==="m/d/Y"){dateFormat="mm/dd/yy"}else{if(er_both_params.date_format==="Y-m-d"){dateFormat="yy-mm-dd"}else{if(er_both_params.date_format==="d-m-Y"){dateFormat="dd-mm-yy"}}}}i.datepicker(a.extend({minDate:arrival?arrival:(v.minDate?v.minDate:null),maxDate:x?x:null,dateFormat:dateFormat,numberOfMonths:v.numberOfMonths,beforeShowDay:j,onChangeMonthYear:function(y,A,z){currentMonth=A;if(!slots||(!arrivalTime&&v.time)||(arrival&&!v.time)||!arrival){c(dateFormat.replace("dd","01").replace("mm",A).replace("yy",y))}u.find("div.time").slideUp(300);if(arrival&&(arrivalTime||!v.time)){b();u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait)}else{s();u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.wait)}},onSelect:m},g)).datepicker("setDate",null).slideDown("300");const e=i.parent().parent();if(!pageLoad&&resourceQuantity&&i.hasClass("hasDatepicker")&&!e.isInViewport()){a([document.documentElement,document.body]).animate({scrollTop:e.offset().top-30},500)}pageLoad=false;i.find(".ui-datepicker").removeClass("ui-datepicker").addClass("easy-datepicker");i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-hover").removeClass("ui-state-active");a.each(er_date_picker_params.datepicker,function(z,y){i.datepicker("option",z,JSON.parse(y))})}function s(){arrival=false;arrivalTime=false;u.find(".arrival .text .date").addClass("important").html(er_date_picker_params.select);u.find(".arrival .text .time").html("");u.find("input[name=arrival]").val("");u.find("input[name=departure_hour]").val("");u.find("input[name=departure_minute]").val("")}function b(){departure=false;departureTime=false;done=false;if(arrival){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.select)}else{u.find(".departure .text .date").removeClass("important").html("&#8212;")}u.find(".departure .text .time").html("");u.find("input[name=departure]").val("");u.find("input[name=departure_hour]").val("");u.find("input[name=departure_minute]").val("");u.find(".departure").removeClass("active")}function r(e){arrival=e;u.find(".arrival .text .date").removeClass("important").html(e);u.find("input[name=arrival]").val(e);u.find("input[name=arrival_hour]").val("");u.find("input[name=arrival_minute]").val("")}function k(e){departure=e;u.find("input[name=departure]").val(e);u.find(".departure").addClass("active");u.find(".departure .text .date").removeClass("important").html(e)}function p(e,y,x){e=easyAddZero(e);y=easyAddZero(y);if(!x){x=easyFormatTime(e,y)}arrivalTime=e+":"+y;u.find("input[name=arrival_hour]").val(e);u.find("input[name=arrival_minute]").val(y);u.find(".arrival .text .time").html(x)}function w(e,y,x){e=easyAddZero(e);y=easyAddZero(y);if(!x){x=easyFormatTime(e,y)}departureTime=e+":"+y;u.find("input[name=departure_hour]").val(e);u.find("input[name=departure_minute]").val(y);u.find(".departure .text .time").html(x)}function m(z,e){if(arrival&&(arrivalTime!==false||!v.time)){if(departure===z){b();u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active")});return false}k(z);if(v.time){setTimeout(h,1)}else{if(slots){const x=false;a.each(data[arrival][arrivalTime],function(B,A){const D=A.departure.split(" ");if(departure===D[0]){const C=D[1].split(":");w(C[0],C[1]);return false}})}else{w(v.departureHour?v.departureHour:data[departure].time[0],v.departureMinute?v.departureMinute:0)}l(d)}}else{if(arrival===z){s();u.find(".time-picker > td > div").slideUp(50,function(){i.find(".ui-state-active").removeClass("ui-state-highlight").removeClass("ui-state-active")});return false}r(z);if(v.time){setTimeout(h,1)}else{let hour=12,minute=v.arrivalHour?v.arrivalMinute:0;if(slots){const y=Object.keys(data[arrival])[0].split(":");hour=y[0];minute=y[1]}else{hour=v.arrivalHour?v.arrivalHour:data[arrival].time[1]}p(hour,minute);if(v.departure){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.wait);c(arrival)}l(d)}}}function l(e){i.slideUp(350,function(){a(this).datepicker("destroy").removeClass("hasDatepicker").removeAttr("id");if(e){e()}})}function j(x){let className="";if(data){const e=easyFormatDate(x,false);if(slots&&arrival&&arrivalTime!==false){if(easyStringToDate(arrival)>x){return[false,"past",""]}let toReturn=[false,"unavailable",""],iterate;if(arrivalTime!==false&&v.time){iterate=data[arrival][arrivalTime]}else{iterate=data[arrival][Object.keys(data[arrival])[0]]}a.each(iterate,function(z,y){const A=y.departure.split(" ");if(A[0]===e){toReturn=[true,"available",""];return true}});return toReturn}if(data.hasOwnProperty(e)){if(data[e].price){className="datepicker-content-"+data[e].price.hashCode();if(a.inArray(className,n)===-1){a("head").append("<style>.easy-date-selection td."+className+"  a:after {content: '"+data[e].price+"'}</style>");n.push(className)}}else{if(v.price&&!slots&&frequency===86400){className="price-placeholder"}}if(data[e].availability&&data[e].availability===parseInt(data[e].availability,10)){if(data[e].availability<0){return[false,"unavailable rule "+className,""]}if(data[e].availability<1){return[false,"unavailable "+className,""]}if(data[e].availability<resourceQuantity){return[true,"partially "+className,""]}}else{let amountAvailable=0,hasAvailableSlot=false,total;if(slots){total=data[e];a.each(total,function(z,y){if(y[0]&&y[0].availability>0){hasAvailableSlot=true;amountAvailable++}})}else{total=data[e].availability;a.each(total,function(z,y){if(y>0){hasAvailableSlot=true;amountAvailable++}})}if(!hasAvailableSlot){return[false,"unavailable "+className,""]}if(Object.keys(total).length>amountAvailable){return[true,"partially "+className,""]}}return[true,"available "+className,""]}}if(v.price&&!slots&&frequency===86400){className="price-placeholder"}return[false,"past "+className,""]}function c(x){const e=Date.now(),y={action:"easyreservations_calendar",date:x===0?0:x,arrival:arrival&&(arrivalTime!==false||!v.time)?arrival:0,arrivalTime:arrivalTime,months:v.numberOfMonths,adults:a("*[name=adults]").val(),children:a("*[name=children]").val(),resource:v.resource,price:v.price,minDate:v.minDate,security:u.find('input[name="easy-date-selection-nonce"]').val()};lastRequest=e;data=false;if(!y.resource){alert("no resource field in form, please fix");return}a.post(er_both_params.ajaxurl,y,function(A){if(lastRequest===e){if(arrival&&(arrivalTime||!v.time)){u.find(".departure .text .date").addClass("important").html(er_date_picker_params.select)}else{u.find(".arrival .text .date").html(er_date_picker_params.select)}data=A;slots=data.hasOwnProperty("slots")&&data.slots;if(data.hasOwnProperty("first_possible")&&data.first_possible){const z=data.first_possible.split(" "),B=easyStringToDate(z[0]);if(arrival&&(!currentMonth||currentMonth===B.getMonth()+1)){i.datepicker("option","minDate",B)}}if(data.hasOwnProperty("max")&&data.max){i.datepicker("refresh");if(easyStringToDate(data.max).getMonth()===currentMonth-1){i.find(".ui-datepicker-next").addClass("ui-state-disabled").unbind()}}else{i.datepicker("refresh")}i.find(".ui-datepicker-today a, .ui-datepicker-current-day a").removeClass("ui-state-highlight").removeClass("ui-state-hover").removeClass("ui-state-active")}})}function o(){u.find("input[name=arrival]").trigger("change")}}}(jQuery));Object.defineProperty(String.prototype,"hashCode",{value:function(){var c=0,a,b;for(a=0;a<this.length;a++){b=this.charCodeAt(a);c=((c<<5)-c)+b;c|=0}return c}});
  • easyreservations/trunk/easyReservations.php

    r2523284 r2636487  
    44 * Plugin URI: http://www.easyreservations.org
    55 * Description: This powerful property and reservation management plugin allows you to receive, schedule and handle your bookings easily!
    6  * Version: 6.0-alpha.22
     6 * Version: 6.0-alpha.23
    77 * Author: Feryaz Beer
    88 * Author URI: http://www.feryaz.de
  • easyreservations/trunk/includes/abstracts/abstract-er-form.php

    r2262833 r2636487  
    8383                    }
    8484
     85                    if( empty( $form_field ) ){
     86                        $form_field = do_shortcode( '[' . $field . ']' );
     87                    }
     88
    8589                    $form_template = str_replace( '[' . $field . ']', $form_field, $form_template );
     90
    8691                    break;
    8792            }
  • easyreservations/trunk/includes/admin/list-tables/class-er-admin-list-table-resources.php

    r2426503 r2636487  
    181181        $all_reservations = $wpdb->get_var(
    182182            $wpdb->prepare(
    183                 "SELECT COUNT(*) FROM {$wpdb->prefix}reservations WHERE status='yes' AND resource=%d", $this->object->get_id()
     183                "SELECT COUNT(*) FROM {$wpdb->prefix}reservations WHERE status IN ('" . implode( "', '", er_reservation_get_approved_statuses() ) . "') AND resource=%d", $this->object->get_id()
    184184            )
    185185        );
  • easyreservations/trunk/includes/admin/settings/class-er-settings-general.php

    r2464400 r2636487  
    298298[arrival]
    299299
    300 <b>Durartion</b>
     300<b>Duration</b>
    301301[billing_units]d
    302302
  • easyreservations/trunk/includes/class-easyreservations.php

    r2544378 r2636487  
    1919     * @var string
    2020     */
    21     public $version = '6.0-alpha.22';
     21    public $version = '6.0-alpha.23';
    2222
    2323    /**
  • easyreservations/trunk/includes/class-er-ajax.php

    r2544378 r2636487  
    179179            $date = clone $now;
    180180
    181             if ( ! empty( $_POST['minDate'] ) ) {
     181            if ( ! empty( $_POST['minDate'] ) && $_POST['minDate'] !== 'false'  ) {
    182182                if ( is_numeric( $_POST['minDate'] ) ) {
    183183                    $date->add( new DateInterval( 'PT' . intval( $_POST['minDate'] ) * 86400 . 'S' ) );
     
    467467
    468468                        if ( ! $was_unavailable && $latest_departure >= $earliest_possible_departure ) {
    469                             $avail = $availability->check_spaces( $resource->availability_by( 'unit' ) ? $arrival : $last_departure, $departure, 'departure' );
    470 
    471469                            if ( $display_price ) {
    472470                                $reservation = new ER_Reservation( 0 );
     
    483481                                $price = sprintf( er_get_price_format(), html_entity_decode( er_get_currency_symbol() ), intval( $reservation->get_total() ) );
    484482                            }
     483
     484                            $avail = $availability->check_spaces( $resource->availability_by( 'unit' ) ? $arrival : $last_departure, $departure, 'departure' );
    485485
    486486                            //If an availability filter is matched the check returns a numeric value instead
  • easyreservations/trunk/includes/data-stores/class-er-customer-data-store.php

    r2503176 r2636487  
    266266            $prop_key = substr( $prop, 8 );
    267267
    268             if ( ! isset( $changed_props['billing'] ) || ! array_key_exists( $prop_key, $changed_props['billing'] ) ) {
     268            if ( ! isset( $changed_props['address'] ) || ! array_key_exists( $prop_key, $changed_props['address'] ) ) {
    269269                continue;
    270270            }
  • easyreservations/trunk/includes/er-form-functions.php

    r2514805 r2636487  
    542542            $opt = array(
    543543                'resource'        => isset( $tag['resource'] ) ? intval( $tag['resource'] ) : 0,
     544                'minDate'        => isset( $tag['mindate'] ) ? sanitize_text_field( $tag['mindate'] ) : false,
    544545                'arrivalHour'     => isset( $tag['arrivalhour'] ) ? intval( $tag['arrivalhour'] ) : false,
    545546                'arrivalMinute'   => isset( $tag['arrivalminute'] ) ? intval( $tag['arrivalminute'] ) : 0,
     
    828829
    829830        default:
    830             return apply_filters( 'easyreservations_form_field', $tag, $form_hash );
     831            return '';
    831832            break;
    832833    }
  • easyreservations/trunk/includes/er-order-functions.php

    r2544378 r2636487  
    628628 *
    629629 * @return array List of orders ID.
    630  */
    631 function er_order_search( $term ) {
     630
     631*/
     632function er_search_orders( $term ) {
    632633    $data_store = ER_Data_Store::load( 'order' );
    633634
  • easyreservations/trunk/readme.txt

    r2523284 r2636487  
    5555== Changelog ==
    5656
    57 = 6.0-alpha.22 - 2020-04-29 =
     57= 6.0-alpha.23 - 2021-11-28 =
     58* Added - Calendar minDate attribute
     59* Enhancement - Forms can contain any shortcode now
     60* Enhancement - Calendar disable selecting next month if departure is impossible then
     61* Fix - Calendar slots departure selection
     62* Fix - User meta data
     63* Fix - Reservation count in resources table
     64* Fix - Paypal payment check uses amount due instead of total
     65
     66= 6.0-alpha.22 - 2021-04-29 =
    5867* Enhancement - Keep name field when option to hide address fields is enabled
    5968* Fix - Calendar departure day
     
    6271* Fix - PayPal live mode sometimes redirected to sandbox
    6372
    64 = 6.0-alpha.21 - 2020-04-14 =
     73= 6.0-alpha.21 - 2021-04-14 =
    6574* Added - Upcoming category in reservation table
    6675* Added - Check to prevent double bookings when adding a reservation as admin
     
    7887* Fix - Filter submit
    7988
    80 = 6.0-alpha.20 - 2020-03-25 =
     89= 6.0-alpha.20 - 2021-03-25 =
    8190* Added - Apple Pay and Payment Request button with stripe
    8291* Added - Credit notes for refunds
     
    99108* Dev - Added new actions and filters
    100109
    101 = 6.0-alpha.19 - 2020-02-26 =
     110= 6.0-alpha.19 - 2021-02-26 =
    102111* Enhancement - Setting order to processing or completed only possible if all reservations are approved
    103112* Enhancement - Added option to add a price display suffix in tax settings
     
    124133* Removed - Option to display custom field when adding reservations
    125134
    126 = 6.0-alpha.18 - 2020-01-28 =
     135= 6.0-alpha.18 - 2021-01-28 =
    127136* Enhancement - Stylesheets for twenty twentyone wordpress theme
    128137* Enhancement - Improved automatic order notes for changes in reservation
     
    138147* Fix - Miscellaneous stylesheet fixes
    139148
    140 = 6.0-alpha.17 - 2020-01-04 =
     149= 6.0-alpha.17 - 2021-01-04 =
    141150* Enhancement - Default arrival and departure time in date selection
    142151* Enhancement - Stylesheets for wordpress themes
Note: See TracChangeset for help on using the changeset viewer.