PluginProbe ʕ •ᴥ•ʔ
Event Tickets with Ticket Scanner / 2.7.0
Event Tickets with Ticket Scanner v2.7.0
3.1.2 3.1.1 3.1.0 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.4 trunk 2.6.0 2.7.0 2.7.1 2.7.10 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.10 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.0 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 2.9.9 3.0.0 3.0.1 3.0.2 3.0.3
event-tickets-with-ticket-scanner / wc_frontend.js
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);