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 / manageimport / tmpl / default.php
vikappointments / admin / views / manageimport / tmpl Last commit date
default.php 3 days ago index.html 3 days ago
default.php
296 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 JHtml::fetch('bootstrap.tooltip', '.hasTooltip');
15 JHtml::fetch('vaphtml.assets.select2');
16
17 $rows = $this->handler->getRecords();
18 $columns = $this->handler->getColumns();
19
20 $vik = VAPApplication::getInstance();
21
22 ?>
23
24 <form action="index.php?option=com_vikappointments" method="post" name="adminForm" id="adminForm">
25
26 <?php
27 if ($rows)
28 {
29 // create error box to inform the user that the configuration is not complete
30 $attrs = array();
31 $attrs['id'] = 'custom-error';
32 $attrs['style'] = 'display:none;';
33 echo $vik->alert(JText::translate('VAPMANAGECUSTOMERERR3'), 'error', false, $attrs);
34 ?>
35
36 <!-- ASSIGNMENTS TABLE -->
37
38 <?php echo $vik->openCard(); ?>
39
40 <div class="span12" style="margin-left: 0;">
41 <?php echo $vik->openEmptyFieldset(); ?>
42
43 <div class="scrollable-hor">
44 <table cellpadding="4" cellspacing="0" border="0" width="100%" class="<?php echo $vik->getAdminTableClass(); ?>">
45 <?php echo $vik->openTableHead(); ?>
46 <tr>
47 <?php for ($i = 0, $n = count($rows[0]); $i < $n; $i++) { ?>
48 <th class="<?php echo $vik->getAdminThClass(); ?>" width="<?php echo floor(100 / $n); ?>%" style="text-align: center;">
49
50 <select name="column[<?php echo $rows[0][$i]; ?>]" class="vap-column-sel" data-col-index="<?php echo $i; ?>">
51 <option></option>
52 <?php
53 foreach ($columns as $col)
54 {
55 $req = $col->required ? ' *' : '';
56
57 ?>
58 <option value="<?php echo $col->name; ?>" data-required="<?php echo $col->required; ?>">
59 <?php echo $col->label . $req; ?>
60 </option>
61 <?php
62 }
63 ?>
64 </select>
65
66 <br /><br />
67
68 <span class="col-import-title"><?php echo ucwords($rows[0][$i]); ?></span>
69
70 </th>
71 <?php } ?>
72 </tr>
73 <?php echo $vik->closeTableHead(); ?>
74
75 <?php
76 for ($i = 1, $n = count($rows); $i < $n; $i++)
77 {
78 ?>
79 <tr class="row<?php echo ($i % 2); ?>">
80
81 <?php
82 for ($j = 0; $j < count($rows[$i]); $j++)
83 {
84 ?>
85 <td style="text-align: center;" data-col-index="<?php echo $j; ?>">
86 <?php echo $rows[$i][$j]; ?>
87 </td>
88 <?php
89 }
90 ?>
91
92 </tr>
93 <?php
94 }
95 ?>
96
97 </table>
98 </div>
99
100 <div style="text-align: center;">
101 <small><?php echo JText::sprintf('VAPIMPORTTABLEFOOTER', count($rows) - 1); ?></small>
102 </div>
103
104 <?php echo $vik->closeEmptyFieldset(); ?>
105 </div>
106
107 <?php
108 echo $vik->closeCard();
109 }
110 else
111 {
112 echo $vik->alert(JText::translate('JGLOBAL_NO_MATCHING_RESULTS'));
113 }
114 ?>
115
116 <?php echo JHtml::fetch('form.token'); ?>
117
118 <?php
119 foreach ($this->args as $k => $v)
120 {
121 ?>
122 <input type="hidden" name="<?php echo $k; ?>" value="<?php echo $this->escape($v); ?>" />
123 <input type="hidden" name="import_args[<?php echo $k; ?>]" value="<?php echo $this->escape($v); ?>" />
124 <?php
125 }
126 ?>
127
128 <input type="hidden" name="boxchecked" value="0" />
129 <input type="hidden" name="task" value="" />
130 <input type="hidden" name="import_type" value="<?php echo $this->type; ?>" />
131
132 <?php echo JHtml::fetch('form.token'); ?>
133 </form>
134
135 <?php
136 JText::script('VAPPAYMENTPOSOPT1');
137 ?>
138
139 <script>
140
141 var COLUMNS_MAP = <?php echo json_encode($columns); ?>;
142
143 jQuery(function($) {
144
145 $('.vap-column-sel').select2({
146 placeholder: Joomla.JText._('VAPPAYMENTPOSOPT1').toLowerCase(),
147 allowClear: true,
148 width: '100%',
149 });
150
151 $('.vap-column-sel').on('change', function() {
152 var index = $(this).data('col-index');
153 var value = $(this).val();
154
155 var column = null;
156
157 if (COLUMNS_MAP.hasOwnProperty(value)) {
158 column = COLUMNS_MAP[value];
159 }
160
161 $('td[data-col-index="' + index + '"]').each(function() {
162 if ($(this).data('value') === undefined)
163 {
164 $(this).data('value', $(this).html().trim());
165 }
166
167 var value = $(this).data('value');
168
169 var style = '';
170 var title = '';
171
172 if (column != null)
173 {
174 if (value.length == 0)
175 {
176 value = column.default;
177 title = 'Default';
178 style += 'color:#2b3ce3;';
179 }
180
181 if (column.options.hasOwnProperty(value))
182 {
183 value = column.options[value];
184 style += 'font-style:italic;';
185 }
186
187 if (style.length || title.length)
188 {
189 value = '<span style="' + style + '" title="' + title + '">' + value + '</span>';
190 }
191 }
192
193 $(this).html(value);
194
195 if (title && value)
196 {
197 $(this).find('span').tooltip();
198 }
199
200 });
201
202 var old = $(this).data('old-value');
203 var val = $(this).val();
204
205 // disable this option on all the other select
206
207 if (val && val.length)
208 {
209 $('.vap-column-sel')
210 .not(this)
211 .find('option[value="' + val + '"]')
212 .attr('disabled', true);
213 }
214
215 // enable old option on all the other select
216
217 $('.vap-column-sel')
218 .not(this)
219 .find('option[value="' + old + '"]')
220 .attr('disabled', false);
221
222 $(this).data('old-value', val);
223 });
224
225 // try to auto-populate the assignments
226 $('.col-import-title').each(function() {
227 // find select before the column title
228 let select = $(this).prevAll('select');
229
230 // extract column title
231 let title = $(this).html().trim().toLowerCase();
232
233 // search for a compatible option
234 $(select).find('option:not(disabled)').each(function() {
235 // extract option name
236 let optionText = $(this).html().replace(/\*/g, '').trim().toLowerCase();
237
238 if (optionText == title) {
239 // matching option, auto-select it
240 $(select).select2('val', $(this).val()).trigger('change');
241 }
242 });
243 });
244
245 });
246
247 // validate
248
249 var validator = new VikFormValidator('#adminForm');
250
251 Joomla.submitbutton = function(task) {
252 if (task.indexOf('save') !== -1) {
253 if (validator.validate(customValidation)) {
254 Joomla.submitform(task, document.adminForm);
255 }
256 } else {
257 Joomla.submitform(task, document.adminForm);
258 }
259 }
260
261 function customValidation() {
262 var ok = true;
263
264 jQuery('select.vap-column-sel').first().find('option[data-required="1"]').each(function() {
265 var val = jQuery(this).val();
266
267 if (!hasRequiredValue(val)) {
268 ok = false;
269 return false;
270 }
271 });
272
273 if (!ok) {
274 jQuery('#custom-error').show();
275 } else {
276 jQuery('#custom-error').hide();
277 }
278
279 return ok;
280 }
281
282 function hasRequiredValue(val) {
283 var has = false;
284
285 jQuery('.vap-column-sel').each(function() {
286 if (jQuery(this).val() == val) {
287 has = true;
288 return false;
289 }
290 });
291
292 return has;
293 }
294
295 </script>
296