event-tickets-with-ticket-scanner
Last commit date
2.7.0
1 year ago
3rd
1 year ago
css
1 year ago
img
1 year ago
languages
1 year ago
ticket
1 year ago
vendors
1 year ago
SASO_EVENTTICKETS.php
1 year ago
backend.js
1 year ago
changelog.txt
1 year ago
db.php
1 year ago
index.php
1 year ago
init_file.php
1 year ago
js_seatingplan.js
1 year ago
order_details.js
1 year ago
readme.txt
1 year ago
saso-eventtickets-validator.js
1 year ago
sasoEventtickets_AdminSettings.php
1 year ago
sasoEventtickets_Authtoken.php
1 year ago
sasoEventtickets_Base.php
1 year ago
sasoEventtickets_Core.php
1 year ago
sasoEventtickets_Frontend.php
1 year ago
sasoEventtickets_Messenger.php
1 year ago
sasoEventtickets_Options.php
1 year ago
sasoEventtickets_PDF.php
1 year ago
sasoEventtickets_Ticket.php
1 year ago
sasoEventtickets_TicketBadge.php
1 year ago
sasoEventtickets_TicketDesigner.php
1 year ago
sasoEventtickets_TicketQR.php
1 year ago
ticket_events.js
1 year ago
ticket_scanner.js
1 year ago
validator.js
1 year ago
wc_backend.js
1 year ago
wc_frontend.js
1 year ago
woocommerce-hooks.php
1 year ago
wc_frontend.js
310 lines
| 1 | function SasoEventticketsValidator_WC_frontend($, phpObject) { |
| 2 | const { __, _x, _n, sprintf } = wp.i18n; |
| 3 | let _self = this; |
| 4 | let inputTypes = [phpObject.inputType, "text", "value"]; |
| 5 | |
| 6 | function init() { |
| 7 | _addHandlerToTheCodeFields(); |
| 8 | } |
| 9 | |
| 10 | function addStyleCode(content) { |
| 11 | let c = document.createElement('style'); |
| 12 | c.innerHTML = content; |
| 13 | document.getElementsByTagName("head")[0].appendChild(c); |
| 14 | } |
| 15 | |
| 16 | // fkt nicht bei cart updates, da dies nicht neu initialisiert wird |
| 17 | function _addHandlerToTheCodeFields() { |
| 18 | let isStoring = false; |
| 19 | let waitingTimeout = null; |
| 20 | let isChanged = false; |
| 21 | |
| 22 | function sendCode(elem, code, type) { |
| 23 | //clearWaitingTimeout(); |
| 24 | if (!isStoring) { |
| 25 | $('div[class="woocommerce"]').block({ |
| 26 | //message: '...loading...', |
| 27 | message: null, |
| 28 | overlayCSS: { |
| 29 | background: '#fff', |
| 30 | opacity: 0.6 |
| 31 | } |
| 32 | }); |
| 33 | isStoring = true; |
| 34 | let cart_item_id = elem.attr('data-cart-item-id'); |
| 35 | let cart_item_count = elem.attr('data-cart-item-count'); |
| 36 | //console.log('send code: '+code+' for cart item id: '+cart_item_id+' and count: '+cart_item_count); |
| 37 | let nonce = phpObject.nonce; |
| 38 | $.ajax( |
| 39 | { |
| 40 | type: 'POST', |
| 41 | url: phpObject.ajaxurl, |
| 42 | data: { |
| 43 | action: phpObject.action, |
| 44 | a: 'updateSerialCodeToCartItem', |
| 45 | security: nonce, |
| 46 | cart_item_id: cart_item_id, |
| 47 | cart_item_count: cart_item_count, |
| 48 | type: type, |
| 49 | code: code |
| 50 | }, |
| 51 | success: function( response ) { |
| 52 | $('div[class="woocommerce"]').unblock(); |
| 53 | $('.cart_totals').unblock(); |
| 54 | if (response.success) { |
| 55 | elem.val(response.code); |
| 56 | } else { |
| 57 | if (response.msg) alert(response.msg); |
| 58 | } |
| 59 | isStoring = false; |
| 60 | //window.location.reload(); |
| 61 | } |
| 62 | } |
| 63 | ) |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | function clearWaitingTimeout() { |
| 68 | clearTimeout(waitingTimeout); |
| 69 | } |
| 70 | function setWaitingTimeout(elem, code) { |
| 71 | clearWaitingTimeout(); |
| 72 | waitingTimeout = setTimeout(()=>{ |
| 73 | if (isChanged) { |
| 74 | isChanged = false; |
| 75 | sendCode(elem, code); |
| 76 | } |
| 77 | }, 2500); |
| 78 | } |
| 79 | |
| 80 | // finde die code text inputs |
| 81 | // eventcoderrestriction is no longer used, but still in the code |
| 82 | $('body').find('input[data-input-type="eventcoderestriction"][data-plugin="event"]') |
| 83 | .on('keyup',function(){ |
| 84 | /* |
| 85 | $('.cart_totals').block({ |
| 86 | message: null, |
| 87 | overlayCSS: { |
| 88 | background: '#fff', |
| 89 | opacity: 0.6 |
| 90 | } |
| 91 | }); |
| 92 | isStoring = false; |
| 93 | isChanged = true; |
| 94 | let elem = $(this); |
| 95 | let code = elem.val().trim(); |
| 96 | setWaitingTimeout(elem, code); |
| 97 | */ |
| 98 | }) |
| 99 | .on('paste', event=>{ |
| 100 | isStoring = false; |
| 101 | let elem = $(event.srcElement); |
| 102 | let code = (event.clipboardData || window.clipboardData).getData('text'); |
| 103 | if (typeof code == "string") { |
| 104 | code = code.trim(); |
| 105 | isChanged = true; |
| 106 | sendCode(elem, code, "saso_eventtickets_request_name_per_ticket"); |
| 107 | } else { alert("no text"); } |
| 108 | }) |
| 109 | .on('change',function(){ |
| 110 | let elem = $(this); |
| 111 | let code = elem.val().trim(); |
| 112 | //let cart_item_id = elem.data('cart-item-id'); |
| 113 | //let d = document.querySelector('input[data-cart-item-id="'+cart_item_id+'"]').value |
| 114 | isChanged = true; |
| 115 | sendCode(elem, code, "saso_eventtickets_request_name_per_ticket"); |
| 116 | }) |
| 117 | /* |
| 118 | .on('blur',function(){ |
| 119 | let elem = $(this); |
| 120 | let code = elem.val().trim(); |
| 121 | if (code != "" && isChanged) { |
| 122 | let cart_item_id = elem.data('cart-item-id'); |
| 123 | //let d = document.querySelector('input[data-cart-item-id="'+cart_item_id+'"]').value |
| 124 | sendCode(elem, code, "saso_eventtickets_request_name_per_ticket"); |
| 125 | } |
| 126 | }) |
| 127 | */ |
| 128 | .removeAttr('disabled'); |
| 129 | |
| 130 | $('body').find('input[data-input-type="text"][data-plugin="event"]') |
| 131 | .on('paste', event=>{ |
| 132 | isStoring = false; |
| 133 | let elem = $(event.srcElement); |
| 134 | let code = (event.clipboardData || window.clipboardData).getData('text'); |
| 135 | if (typeof code == "string") { |
| 136 | code = code.trim(); |
| 137 | isChanged = true; |
| 138 | sendCode(elem, code, "saso_eventtickets_request_name_per_ticket"); |
| 139 | } else { alert("no text"); } |
| 140 | }) |
| 141 | .on('change',function(){ |
| 142 | let elem = $(this); |
| 143 | let code = elem.val().trim(); |
| 144 | isChanged = true; |
| 145 | sendCode(elem, code, "saso_eventtickets_request_name_per_ticket"); |
| 146 | }) |
| 147 | .removeAttr('disabled'); |
| 148 | |
| 149 | $('body').find('input[data-input-type="value"][data-plugin="value"]') |
| 150 | .on('paste', event=>{ |
| 151 | isStoring = false; |
| 152 | let elem = $(event.srcElement); |
| 153 | let code = (event.clipboardData || window.clipboardData).getData('text'); |
| 154 | if (typeof code == "string") { |
| 155 | code = code.trim(); |
| 156 | isChanged = true; |
| 157 | sendCode(elem, code, "saso_eventtickets_request_value_per_ticket"); |
| 158 | } else { alert("no text"); } |
| 159 | }) |
| 160 | .on('change',function(){ |
| 161 | let elem = $(this); |
| 162 | let code = elem.val().trim(); |
| 163 | isChanged = true; |
| 164 | sendCode(elem, code, "saso_eventtickets_request_value_per_ticket"); |
| 165 | }) |
| 166 | .removeAttr('disabled'); |
| 167 | |
| 168 | $('body').find('input[data-input-type="daychooser"][data-plugin="event"]') |
| 169 | .each((idx, input) => { |
| 170 | let elem_intern = $(input); |
| 171 | let dateFormat = elem_intern.attr('placeholder'); |
| 172 | dateFormat = dateFormat != null ? dateFormat.trim() : ''; |
| 173 | dateFormat = dateFormat ? dateFormat : 'YYYY-MM-DD'; |
| 174 | dateFormat = 'YYYY-MM-DD'; |
| 175 | elem_intern.attr('placeholder', __(dateFormat)); |
| 176 | let data_offset_start = 0; |
| 177 | let data_offset_end = 0; |
| 178 | try { |
| 179 | data_offset_start = parseInt(elem_intern.attr('data-offset-start')); |
| 180 | } catch (error) { |
| 181 | //console.log(error); |
| 182 | } |
| 183 | if (elem_intern.attr('min') && elem_intern.attr('min').length > 0) { |
| 184 | data_offset_start = elem_intern.attr('min'); |
| 185 | } |
| 186 | try { |
| 187 | data_offset_end = parseInt(elem_intern.attr('data-offset-end')); |
| 188 | } catch (error) { |
| 189 | //console.log(error); |
| 190 | } |
| 191 | if (elem_intern.attr('max') && elem_intern.attr('max').length > 0) { |
| 192 | data_offset_end = elem_intern.attr('max'); |
| 193 | } |
| 194 | //let today = new Date(); |
| 195 | //let start = new Date(today.getFullYear(), today.getMonth(), today.getDate() + data_offset_start); |
| 196 | //let end = new Date(today.getFullYear(), today.getMonth(), today.getDate() + data_offset_end); |
| 197 | |
| 198 | elem_intern.datepicker({ |
| 199 | dateFormat: 'yy-mm-dd', |
| 200 | //dateFormat: dateFormat, |
| 201 | showWeek: true, |
| 202 | firstDay: 1, |
| 203 | hideIfNoPrevNext : true, |
| 204 | minDate: data_offset_start, |
| 205 | maxDate: data_offset_end, |
| 206 | beforeShow: function(input, options) { |
| 207 | this._sasoevent_input_field = $(input); |
| 208 | }, |
| 209 | beforeShowDay: function(date) { // https://api.jqueryui.com/datepicker/#option-beforeShow |
| 210 | let day = date.getDay(); |
| 211 | let data_exclude_wdays = this._sasoevent_input_field.attr('data-exclude-wdays'); |
| 212 | let selectable = true; |
| 213 | let cssClass = ''; |
| 214 | let toolTipp = ''; |
| 215 | if (data_exclude_wdays && data_exclude_wdays.length > 0) { |
| 216 | let excludedDays = data_exclude_wdays.split(','); |
| 217 | selectable = excludedDays.indexOf(day.toString()) == -1; |
| 218 | |
| 219 | cssClass = selectable ? '' : 'ui-datepicker-unselectable'; |
| 220 | toolTipp = selectable ? '' : __('This day is not selectable'); |
| 221 | } |
| 222 | if (selectable) { |
| 223 | // check if the date is in the past |
| 224 | let today = new Date(); |
| 225 | let y = date.getFullYear(); |
| 226 | let m = date.getMonth() + 1; |
| 227 | let d = date.getDate(); |
| 228 | let dateStr = y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d; |
| 229 | let todayStr = today.getFullYear() + '-' + (today.getMonth() + 1 < 10 ? '0' : '') + (today.getMonth() + 1) + '-' + (today.getDate() < 10 ? '0' : '') + today.getDate(); |
| 230 | if (dateStr < todayStr) { |
| 231 | selectable = false; |
| 232 | cssClass = 'ui-datepicker-unselectable'; |
| 233 | toolTipp = __('This day is not selectable'); |
| 234 | } |
| 235 | } |
| 236 | if (selectable) { |
| 237 | let data_exclude_dates = this._sasoevent_input_field.attr('data-exclude-dates'); |
| 238 | if (data_exclude_dates && data_exclude_dates.length > 0) { |
| 239 | let excludedDates = data_exclude_dates.split(','); |
| 240 | let y = date.getFullYear(); |
| 241 | let m = date.getMonth() + 1; |
| 242 | let d = date.getDate(); |
| 243 | let dateStr = y + '-' + (m < 10 ? '0' : '') + m + '-' + (d < 10 ? '0' : '') + d; |
| 244 | selectable = excludedDates.indexOf(dateStr) == -1; |
| 245 | |
| 246 | cssClass = selectable ? '' : 'ui-datepicker-unselectable'; |
| 247 | toolTipp = selectable ? '' : __('This day is not selectable'); |
| 248 | } |
| 249 | } |
| 250 | return [selectable, cssClass, toolTipp]; |
| 251 | //return [true, '']; |
| 252 | } |
| 253 | }); |
| 254 | }) |
| 255 | .on('change',event=>{ |
| 256 | let elem_intern = $(event.target); |
| 257 | //console.log('change datepicker', elem_intern.attr('id')); |
| 258 | let date_value = elem_intern.val().trim(); |
| 259 | if (elem_intern.attr('data-previous-value') == date_value) return; // no change |
| 260 | elem_intern.attr('data-previous-value', date_value); |
| 261 | if (date_value) { |
| 262 | sendCode(elem_intern, date_value, "saso_eventtickets_request_daychooser"); |
| 263 | isChanged = true; |
| 264 | let to_be_changed = []; |
| 265 | // update the other date pickers if no value is set to use this date |
| 266 | let data_cart_item_id = elem_intern.attr('data-cart-item-id'); |
| 267 | $('body').find('input[data-input-type="daychooser"][data-plugin="event"][id^="saso_eventtickets_request_daychooser['+data_cart_item_id+']"]').each((idx, input_to_update) => { |
| 268 | //console.log('update datepicker', input_to_update); |
| 269 | let input_elem = $(input_to_update); |
| 270 | let v = input_elem.val().trim(); |
| 271 | if (!v) { |
| 272 | //console.log(input_elem.attr("id")+' set value to: '+date_value); |
| 273 | input_elem.val(date_value); // is not working somehow, so skip this step for now. The value is shown and send to the server, but on the checkout the other fields are empty |
| 274 | to_be_changed.push(input_elem); |
| 275 | } |
| 276 | }); |
| 277 | |
| 278 | // remove the related error message on the cart |
| 279 | //let data_cart_item_count = elem.attr('data-cart-item-count'); |
| 280 | //$('li[data-cart-item-id="'+data_cart_item_id+'"][data-cart-item-count="'+data_cart_item_count+'"]').remove(); |
| 281 | // send data to the server |
| 282 | |
| 283 | wait = 0; |
| 284 | to_be_changed.forEach(input => { |
| 285 | //console.log(input.attr("id")+'send code: '+date_value); |
| 286 | //console.log(input); |
| 287 | window.setTimeout(()=>{ |
| 288 | sendCode(input, date_value, "saso_eventtickets_request_daychooser"); |
| 289 | }, wait); |
| 290 | if (wait == 0) wait = 250; |
| 291 | }); |
| 292 | } // end date_value |
| 293 | }) |
| 294 | .removeAttr('disabled'); |
| 295 | |
| 296 | //addStyleCode('#ui-datepicker-div > table {background-color: white;}'); |
| 297 | } |
| 298 | |
| 299 | init(); |
| 300 | |
| 301 | return { |
| 302 | _addHandlerToTheCodeFields: _addHandlerToTheCodeFields, |
| 303 | }; |
| 304 | } |
| 305 | |
| 306 | (function($){ |
| 307 | $(document).ready(function(){ |
| 308 | window.SasoEventticketsValidator_WC_frontend = SasoEventticketsValidator_WC_frontend($, SasoEventticketsValidator_phpObject); |
| 309 | }); |
| 310 | })(jQuery); |