PluginProbe ʕ •ᴥ•ʔ
VikAppointments Services Booking Calendar / 1.2.21
VikAppointments Services Booking Calendar v1.2.21
1.2.21 1.2.20 trunk 1.2.17 1.2.18 1.2.19
vikappointments / admin / views / managetax / tmpl / default_rules.php
vikappointments / admin / views / managetax / tmpl Last commit date
default.php 3 days ago default_rules.php 3 days ago default_rules_modal.php 3 days ago default_tax.php 3 days ago index.html 3 days ago
default_rules.php
234 lines
1 <?php
2 /**
3 * @package VikAppointments
4 * @subpackage core
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2021 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 $currency = VAPFactory::getCurrency();
15
16 $optLayout = new JLayoutFile('blocks.card');
17
18 ?>
19
20 <div class="vap-cards-container cards-tax-rules" id="cards-tax-rules">
21
22 <?php
23 foreach ($this->tax->rules as $i => $rule)
24 {
25 ?>
26 <div class="vap-card-fieldset up-to-1" id="tax-rule-fieldset-<?php echo $i; ?>">
27
28 <?php
29 $displayData = array();
30
31 // reduce card size
32 $displayData['class'] = 'compress';
33
34 // fetch primary text
35 $displayData['primary'] = $rule->name;
36
37 // fetch edit button
38 $displayData['edit'] = 'vapOpenTaxRuleCard(\'' . $i . '\');';
39
40 // render layout
41 echo $optLayout->render($displayData);
42 ?>
43
44 <input type="hidden" name="rule_json[]" value="<?php echo $this->escape(json_encode($rule)); ?>" />
45
46 </div>
47 <?php
48 }
49 ?>
50
51 <!-- ADD PLACEHOLDER -->
52
53 <div class="vap-card-fieldset up-to-1 add add-tax-rule">
54 <div class="vap-card compress">
55 <i class="fas fa-plus"></i>
56 </div>
57 </div>
58
59 </div>
60
61 <div style="display:none;" id="tax-rule-struct">
62
63 <?php
64 // create structure for records
65 $displayData = array();
66 $displayData['class'] = 'compress';
67 $displayData['primary'] = '';
68 $displayData['edit'] = true;
69
70 echo $optLayout->render($displayData);
71 ?>
72
73 </div>
74
75 <script>
76 var OPTIONS_COUNT = <?php echo count($this->tax->rules); ?>;
77 var SELECTED_OPTION = null;
78
79 jQuery(function($) {
80 // open inspector for new rules
81 $('.vap-card-fieldset.add-tax-rule').on('click', () => {
82 vapOpenTaxRuleCard();
83 });
84
85 $('#cards-tax-rules').sortable({
86 // exclude "add" boxes
87 items: '.vap-card-fieldset:not(.add)',
88 // hide "add" box when sorting starts
89 start: function() {
90 jQuery('.vap-card-fieldset.add-tax-rule').hide();
91 },
92 // show "add" box again when sorting stops
93 stop: function() {
94 jQuery('.vap-card-fieldset.add-tax-rule').show();
95 },
96 });
97
98 // fill the form before showing the inspector
99 $('#tax-rule-inspector').on('inspector.show', () => {
100 var json = [];
101
102 // fetch JSON data
103 if (SELECTED_OPTION) {
104 var fieldset = $('#' + SELECTED_OPTION);
105
106 json = fieldset.find('input[name="rule_json[]"]').val();
107
108 try {
109 json = JSON.parse(json);
110 } catch (err) {
111 json = {};
112 }
113 }
114
115 if (json.id === undefined) {
116 // creating new record, hide delete button
117 $('#tax-rule-inspector [data-role="delete"]').hide();
118 } else {
119 // editing existing record, show delete button
120 $('#tax-rule-inspector [data-role="delete"]').show();
121 }
122
123 fillTaxRuleForm(json);
124 });
125
126 // apply the changes
127 $('#tax-rule-inspector').on('inspector.save', function() {
128 // validate form
129 if (!ruleValidator.validate()) {
130 return false;
131 }
132
133 // get saved record
134 var data = getTaxRuleData();
135
136 var fieldset;
137
138 if (SELECTED_OPTION) {
139 fieldset = $('#' + SELECTED_OPTION);
140 } else {
141 fieldset = vapAddTaxRuleCard(data);
142 }
143
144 if (fieldset.length == 0) {
145 // an error occurred, abort
146 return false;
147 }
148
149 // save JSON data
150 fieldset.find('input[name="rule_json[]"]').val(JSON.stringify(data));
151
152 // refresh card details
153 vapRefreshTaxRuleCard(fieldset, data);
154
155 // auto-close on save
156 $(this).inspector('dismiss');
157 });
158
159 // delete the record
160 $('#tax-rule-inspector').on('inspector.delete', function() {
161 var fieldset = $('#' + SELECTED_OPTION);
162
163 if (fieldset.length == 0) {
164 // record not found
165 return false;
166 }
167
168 // get existing record
169 var json = fieldset.find('input[name="rule_json[]"]').val();
170
171 try {
172 json = JSON.parse(json);
173 } catch (err) {
174 json = {};
175 }
176
177 if (json.id) {
178 // commit record delete
179 $('#adminForm').append('<input type="hidden" name="rule_deleted[]" value="' + json.id + '" />');
180 }
181
182 // auto delete fieldset
183 fieldset.remove();
184
185 // auto-close on delete
186 $(this).inspector('dismiss');
187 });
188 });
189
190 function vapOpenTaxRuleCard(index) {
191 if (typeof index !== 'undefined') {
192 SELECTED_OPTION = 'tax-rule-fieldset-' + index;
193 } else {
194 SELECTED_OPTION = null;
195 }
196
197 // open inspector
198 vapOpenInspector('tax-rule-inspector');
199 }
200
201 function vapAddTaxRuleCard(data) {
202 let index = OPTIONS_COUNT++;
203
204 SELECTED_OPTION = 'tax-rule-fieldset-' + index;
205
206 var html = jQuery('#tax-rule-struct').clone().html();
207
208 html = html.replace(/{id}/, index);
209
210 jQuery(
211 '<div class="vap-card-fieldset up-to-1" id="tax-rule-fieldset-' + index + '">' + html + '</div>'
212 ).insertBefore(jQuery('.vap-card-fieldset.add-tax-rule').last());
213
214 // get created fieldset
215 let fieldset = jQuery('#' + SELECTED_OPTION);
216
217 fieldset.vapcard('edit', 'vapOpenTaxRuleCard(' + index + ')');
218
219 // create input to hold JSON data
220 let input = jQuery('<input type="hidden" name="rule_json[]" />').val(JSON.stringify(data));
221
222 // append input to fieldset
223 fieldset.append(input);
224
225 return fieldset;
226 }
227
228 function vapRefreshTaxRuleCard(elem, data) {
229 // update primary text
230 elem.vapcard('primary', data.name);
231 }
232
233 </script>
234