PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.6.4
VikBooking Hotel Booking Engine & PMS v1.6.4
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
vikbooking / admin / helpers / vikbooking.php

vikbooking.php in VikBooking Hotel Booking Engine & PMS 1.6.4, at admin/helpers/vikbooking.php

1,047 lines 39.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package VikBooking
4 * @subpackage com_vikbooking
5 * @author Alessio Gaggii - e4j - Extensionsforjoomla.com
6 * @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
7 * @license GNU General Public License version 2 or later; see LICENSE
8 * @link https://vikwp.com
9 */
10
11 // No direct access to this file
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 class VikBookingHelper
15 {
16 public static function printHeader($highlight = "")
17 {
18 $app = JFactory::getApplication();
19 $cookie = $app->input->cookie;
20 $tmpl = VikRequest::getVar('tmpl');
21 $view = VikRequest::getVar('view');
22
23 if ($tmpl == 'component') {
24 return;
25 }
26
27 // check platform
28 $platform = defined('ABSPATH') && function_exists('wp_die') ? 'wp' : 'j';
29
30 if ($platform == 'wp') {
31 /**
32 * @wponly Hide menu for Pro-update views
33 */
34 if (in_array($view, ['getpro'])) {
35 return;
36 }
37 }
38
39 // JS lang def
40 JText::script('VBOGUESTREVSVCMREQ');
41 JText::script('VBO_QUICK_ACTIONS');
42
43 $session = JFactory::getSession();
44 $admin_user = JFactory::getUser();
45
46 $has_vcm = is_file(VCM_SITE_PATH.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'lib.vikchannelmanager.php');
47 $backlogo = VikBooking::getBackendLogo();
48 $vbo_auth_global = $admin_user->authorise('core.vbo.global', 'com_vikbooking');
49 $vbo_auth_rateplans = $admin_user->authorise('core.vbo.rateplans', 'com_vikbooking');
50 $vbo_auth_rooms = $admin_user->authorise('core.vbo.rooms', 'com_vikbooking');
51 $vbo_auth_pricing = $admin_user->authorise('core.vbo.pricing', 'com_vikbooking');
52 $vbo_auth_bookings = $admin_user->authorise('core.vbo.bookings', 'com_vikbooking');
53 $vbo_auth_availability = $admin_user->authorise('core.vbo.availability', 'com_vikbooking');
54 $vbo_auth_management = $admin_user->authorise('core.vbo.management', 'com_vikbooking');
55 $vbo_auth_pms = $admin_user->authorise('core.vbo.pms', 'com_vikbooking');
56 $reviews_dld = 0;
57
58 // check for stored quick actions only once
59 $admin_menu_actions_checked = $session->get('admin_menu.actions.check', null, 'vikbooking');
60 if (!$admin_menu_actions_checked) {
61 $session->set('admin_menu.actions.check', 1, 'vikbooking');
62 }
63
64 /**
65 * Check VCM subscription status.
66 *
67 * @since 1.15.0 (J) - 1.5.0 (WP)
68 */
69 $vcm_expiration_reminder = VikBooking::getVCMSubscriptionStatus();
70
71 /**
72 * New back-end menu structure would support sub-titles for menu entries.
73 *
74 * <span class="vbo-submenu-item">
75 * <span class="vbo-submenu-item-txt vbo-submenu-item-title">Entry Title</span>
76 * <span class="vbo-submenu-item-help">I am the entry sub-text.</span>
77 * </span>
78 *
79 * @since 1.16.0 (J) - 1.6.0 (WP)
80 */
81 ?>
82 <div class="vbo-menu-container<?php echo $view == 'dashboard' ? ' vbo-menu-container-closer' : ''; ?>">
83 <div class="vbo-menu-left">
84 <a href="index.php?option=com_vikbooking"><img src="<?php echo VBO_ADMIN_URI.(!empty($backlogo) ? 'resources/'.$backlogo : 'vikbooking.png'); ?>" alt="VikBooking Logo" /></a>
85 </div>
86 <div class="vbo-menu-right">
87 <ul class="vbo-menu-ul">
88 <?php
89 if ($vbo_auth_global || $vbo_auth_management) {
90 ?><li class="vbo-menu-parent-li">
91 <span><?php VikBookingIcons::e('cogs'); ?><a><?php echo JText::translate('VBMENUFOUR'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
92 <div class="vbo-submenu-wrap">
93 <ul class="vbo-submenu-ul" data-menu-scope="global">
94 <?php if ($vbo_auth_global) : ?>
95 <li>
96 <div class="<?php echo ($highlight == "14" ? "vmenulinkactive" : "vmenulink"); ?>">
97 <a href="index.php?option=com_vikbooking&amp;task=payments">
98 <?php VikBookingIcons::e('credit-card'); ?>
99 <span class="vbo-submenu-item">
100 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENEIGHT'); ?></span>
101 </span>
102 </a>
103 </div>
104 </li>
105 <?php endif; ?>
106 <?php if ($vbo_auth_global) : ?>
107 <li>
108 <div class="<?php echo ($highlight == "16" || $highlight == 'states' || $highlight == 'managestate' ? "vmenulinkactive" : "vmenulink"); ?>">
109 <a href="index.php?option=com_vikbooking&amp;task=customf">
110 <?php VikBookingIcons::e('address-card'); ?>
111 <span class="vbo-submenu-item">
112 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENTEN'); ?></span>
113 </span>
114 </a>
115 </div>
116 </li>
117 <?php endif; ?>
118 <?php if ($vbo_auth_management) : ?>
119 <li>
120 <div class="<?php echo ($highlight == "21" ? "vmenulinkactive" : "vmenulink"); ?>">
121 <a href="index.php?option=com_vikbooking&amp;task=translations">
122 <?php VikBookingIcons::e('language'); ?>
123 <span class="vbo-submenu-item">
124 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTRANSLATIONS'); ?></span>
125 </span>
126 </a>
127 </div>
128 </li>
129 <?php endif; ?>
130 <?php if ($vbo_auth_global) : ?>
131 <li>
132 <div class="<?php echo ($highlight == "11" || $highlight == 'backups' ? "vmenulinkactive" : "vmenulink"); ?>">
133 <a href="index.php?option=com_vikbooking&amp;task=config">
134 <?php VikBookingIcons::e('cogs'); ?>
135 <span class="vbo-submenu-item">
136 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTWELVE'); ?></span>
137 </span>
138 </a>
139 </div>
140 </li>
141 <?php endif; ?>
142 </ul>
143 </div>
144 </li><?php
145 }
146 if ($vbo_auth_rateplans) {
147 ?><li class="vbo-menu-parent-li">
148 <span><?php VikBookingIcons::e('briefcase'); ?><a><?php echo JText::translate('VBMENURATEPLANS'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
149 <div class="vbo-submenu-wrap">
150 <ul class="vbo-submenu-ul" data-menu-scope="rateplans">
151 <li>
152 <div class="<?php echo ($highlight == "2" ? "vmenulinkactive" : "vmenulink"); ?>">
153 <a href="index.php?option=com_vikbooking&amp;task=iva">
154 <?php VikBookingIcons::e('percent'); ?>
155 <span class="vbo-submenu-item">
156 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUNINE'); ?></span>
157 </span>
158 </a>
159 </div>
160 </li>
161 <li>
162 <div class="<?php echo ($highlight == "1" ? "vmenulinkactive" : "vmenulink"); ?>">
163 <a href="index.php?option=com_vikbooking&amp;task=prices">
164 <?php VikBookingIcons::e('tags'); ?>
165 <span class="vbo-submenu-item">
166 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUFIVE'); ?></span>
167 </span>
168 </a>
169 </div>
170 </li>
171 <li>
172 <div class="<?php echo ($highlight == "17" ? "vmenulinkactive" : "vmenulink"); ?>">
173 <a href="index.php?option=com_vikbooking&amp;task=coupons">
174 <?php VikBookingIcons::e('user-tag'); ?>
175 <span class="vbo-submenu-item">
176 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUCOUPONS'); ?></span>
177 </span>
178 </a>
179 </div>
180 </li>
181 <li>
182 <div class="<?php echo ($highlight == "packages" ? "vmenulinkactive" : "vmenulink"); ?>">
183 <a href="index.php?option=com_vikbooking&amp;task=packages">
184 <?php VikBookingIcons::e('box'); ?>
185 <span class="vbo-submenu-item">
186 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUPACKAGES'); ?></span>
187 </span>
188 </a>
189 </div>
190 </li>
191 </ul>
192 </div>
193 </li><?php
194 }
195 if ($vbo_auth_rooms || $vbo_auth_pricing) {
196 ?><li class="vbo-menu-parent-li">
197 <span><?php VikBookingIcons::e('bed'); ?><a><?php echo JText::translate('VBMENUTWO'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
198 <div class="vbo-submenu-wrap">
199 <ul class="vbo-submenu-ul" data-menu-scope="rooms">
200 <?php if ($vbo_auth_rooms) : ?>
201 <li>
202 <div class="<?php echo ($highlight == "4" ? "vmenulinkactive" : "vmenulink"); ?>">
203 <a href="index.php?option=com_vikbooking&amp;task=categories">
204 <?php VikBookingIcons::e('filter'); ?>
205 <span class="vbo-submenu-item">
206 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUSIX'); ?></span>
207 </span>
208 </a>
209 </div>
210 </li>
211 <?php endif; ?>
212 <?php if ($vbo_auth_rooms) : ?>
213 <li>
214 <div class="<?php echo ($highlight == "5" ? "vmenulinkactive" : "vmenulink"); ?>">
215 <a href="index.php?option=com_vikbooking&amp;task=carat">
216 <?php VikBookingIcons::e('icons'); ?>
217 <span class="vbo-submenu-item">
218 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENFOUR'); ?></span>
219 </span>
220 </a>
221 </div>
222 </li>
223 <?php endif; ?>
224 <?php if ($vbo_auth_pricing) : ?>
225 <li>
226 <div class="<?php echo ($highlight == "6" ? "vmenulinkactive" : "vmenulink"); ?>">
227 <a href="index.php?option=com_vikbooking&amp;task=optionals">
228 <?php VikBookingIcons::e('couch'); ?>
229 <span class="vbo-submenu-item">
230 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENFIVE'); ?></span>
231 </span>
232 </a>
233 </div>
234 </li>
235 <?php endif; ?>
236 <?php if ($vbo_auth_rooms) : ?>
237 <li>
238 <div class="<?php echo ($highlight == "7" ? "vmenulinkactive" : "vmenulink"); ?>">
239 <a href="index.php?option=com_vikbooking&amp;task=rooms">
240 <?php VikBookingIcons::e('bed'); ?>
241 <span class="vbo-submenu-item">
242 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTEN'); ?></span>
243 </span>
244 </a>
245 </div>
246 </li>
247 <?php endif; ?>
248 </ul>
249 </div>
250 </li><?php
251 }
252 if ($vbo_auth_pricing) {
253 ?><li class="vbo-menu-parent-li">
254 <span><i class="vboicn-calculator"></i><a><?php echo JText::translate('VBMENUFARES'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
255 <div class="vbo-submenu-wrap">
256 <ul class="vbo-submenu-ul" data-menu-scope="pricing">
257 <li>
258 <div class="<?php echo ($highlight == "fares" ? "vmenulinkactive" : "vmenulink"); ?>">
259 <a href="index.php?option=com_vikbooking&amp;task=tariffs">
260 <?php VikBookingIcons::e('toolbox'); ?>
261 <span class="vbo-submenu-item">
262 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUPRICESTABLE'); ?></span>
263 </span>
264 </a>
265 </div>
266 </li>
267 <li>
268 <div class="<?php echo ($highlight == "13" ? "vmenulinkactive" : "vmenulink"); ?>">
269 <a href="index.php?option=com_vikbooking&amp;task=seasons">
270 <?php VikBookingIcons::e('seedling'); ?>
271 <span class="vbo-submenu-item">
272 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENSEVEN'); ?></span>
273 </span>
274 </a>
275 </div>
276 </li>
277 <li>
278 <div class="<?php echo ($highlight == "restrictions" ? "vmenulinkactive" : "vmenulink"); ?>">
279 <a href="index.php?option=com_vikbooking&amp;task=restrictions">
280 <?php VikBookingIcons::e('hand-paper'); ?>
281 <span class="vbo-submenu-item">
282 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENURESTRICTIONS'); ?></span>
283 </span>
284 </a>
285 </div>
286 </li>
287 <li>
288 <div class="<?php echo ($highlight == "20" ? "vmenulinkactive" : "vmenulink"); ?>">
289 <a href="index.php?option=com_vikbooking&amp;task=ratesoverv">
290 <?php VikBookingIcons::e('calculator'); ?>
291 <span class="vbo-submenu-item">
292 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENURATESOVERVIEW'); ?></span>
293 </span>
294 </a>
295 </div>
296 </li>
297 </ul>
298 </div>
299 </li><?php
300 }
301 ?><li class="vbo-menu-parent-li">
302 <span><?php VikBookingIcons::e('calendar-check'); ?><a><?php echo JText::translate('VBMENUTHREE'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
303 <div class="vbo-submenu-wrap">
304 <ul class="vbo-submenu-ul" data-menu-scope="bookings">
305 <li>
306 <div class="<?php echo (in_array($highlight, ['18', 'shortcodes', 'acl', 'gotopro']) ? "vmenulinkactive" : "vmenulink"); ?>">
307 <a href="index.php?option=com_vikbooking">
308 <?php VikBookingIcons::e('concierge-bell'); ?>
309 <span class="vbo-submenu-item">
310 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUDASHBOARD'); ?></span>
311 </span>
312 </a>
313 </div>
314 </li>
315 <?php if ($vbo_auth_availability || $vbo_auth_bookings) : ?>
316 <li>
317 <div class="<?php echo ($highlight == "19" ? "vmenulinkactive" : "vmenulink"); ?>">
318 <a href="index.php?option=com_vikbooking&amp;task=calendar">
319 <?php VikBookingIcons::e('calendar'); ?>
320 <span class="vbo-submenu-item">
321 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUQUICKRES'); ?></span>
322 </span>
323 </a>
324 </div>
325 </li>
326 <?php endif; ?>
327 <?php if ($vbo_auth_availability) : ?>
328 <li>
329 <div class="<?php echo ($highlight == "15" ? "vmenulinkactive" : "vmenulink"); ?>">
330 <a href="index.php?option=com_vikbooking&amp;task=overv">
331 <?php VikBookingIcons::e('calendar-check'); ?>
332 <span class="vbo-submenu-item">
333 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTENNINE'); ?></span>
334 </span>
335 </a>
336 </div>
337 </li>
338 <?php endif; ?>
339 <?php if ($vbo_auth_bookings) : ?>
340 <li>
341 <div class="<?php echo ($highlight == "8" ? "vmenulinkactive" : "vmenulink"); ?>">
342 <a href="index.php?option=com_vikbooking&amp;task=orders">
343 <?php VikBookingIcons::e('clipboard-list'); ?>
344 <span class="vbo-submenu-item">
345 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUSEVEN'); ?></span>
346 </span>
347 </a>
348 </div>
349 </li>
350 <?php endif; ?>
351 <?php if ($has_vcm && ($vbo_auth_availability || $vbo_auth_bookings)) : ?>
352 <li>
353 <div class="vmenulink">
354 <a href="index.php?option=com_vikchannelmanager" class="vbo-menu-vcmlink">
355 <?php VikBookingIcons::e('cloud'); ?>
356 <span class="vbo-submenu-item">
357 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUCHANNELMANAGER'); ?></span>
358 </span>
359 </a>
360 </div>
361 </li>
362 <?php endif; ?>
363 </ul>
364 </div>
365 </li><?php
366 if ($vbo_auth_management) {
367 ?><li class="vbo-menu-parent-li">
368 <span><?php VikBookingIcons::e('chart-pie'); ?><a><?php echo JText::translate('VBMENUMANAGEMENT'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
369 <div class="vbo-submenu-wrap">
370 <ul class="vbo-submenu-ul" data-menu-scope="management">
371 <li>
372 <div class="<?php echo ($highlight == "22" ? "vmenulinkactive" : "vmenulink"); ?>">
373 <a href="index.php?option=com_vikbooking&amp;task=customers">
374 <?php VikBookingIcons::e('users'); ?>
375 <span class="vbo-submenu-item">
376 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUCUSTOMERS'); ?></span>
377 </span>
378 </a>
379 </div>
380 </li>
381 <li>
382 <div class="<?php echo ($highlight == "invoices" ? "vmenulinkactive" : "vmenulink"); ?>">
383 <a href="index.php?option=com_vikbooking&amp;task=invoices">
384 <?php VikBookingIcons::e('file-invoice'); ?>
385 <span class="vbo-submenu-item">
386 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUINVOICES'); ?></span>
387 </span>
388 </a>
389 </div>
390 </li>
391 <li>
392 <div class="<?php echo ($highlight == "stats" ? "vmenulinkactive" : "vmenulink"); ?>">
393 <a href="index.php?option=com_vikbooking&amp;task=stats">
394 <?php VikBookingIcons::e('chart-line'); ?>
395 <span class="vbo-submenu-item">
396 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUSTATS'); ?></span>
397 </span>
398 </a>
399 </div>
400 </li>
401 <li>
402 <div class="<?php echo ($highlight == "trackings" ? "vmenulinkactive" : "vmenulink"); ?>">
403 <a href="index.php?option=com_vikbooking&amp;task=trackings">
404 <?php VikBookingIcons::e('compass'); ?>
405 <span class="vbo-submenu-item">
406 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTRACKINGS'); ?></span>
407 </span>
408 </a>
409 </div>
410 </li>
411 <li>
412 <div class="<?php echo (in_array($highlight, ["crons", "managecron"]) ? "vmenulinkactive" : "vmenulink"); ?>">
413 <a href="index.php?option=com_vikbooking&amp;view=crons">
414 <?php VikBookingIcons::e('stopwatch'); ?>
415 <span class="vbo-submenu-item">
416 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUCRONS'); ?></span>
417 </span>
418 </a>
419 </div>
420 </li>
421 </ul>
422 </div>
423 </li><?php
424 }
425 if ($vbo_auth_pms) {
426 ?><li class="vbo-menu-parent-li">
427 <span><?php VikBookingIcons::e('tasks'); ?><a><?php echo JText::translate('VBMENUPMS'); ?> <?php VikBookingIcons::e('chevron-down', 'vbo-submenu-chevron'); ?></a></span>
428 <div class="vbo-submenu-wrap">
429 <ul class="vbo-submenu-ul" data-menu-scope="pms">
430 <li>
431 <div class="<?php echo ($highlight == "operators" ? "vmenulinkactive" : "vmenulink"); ?>">
432 <a href="index.php?option=com_vikbooking&amp;task=operators">
433 <?php VikBookingIcons::e('user-tie'); ?>
434 <span class="vbo-submenu-item">
435 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUOPERATORS'); ?></span>
436 </span>
437 </a>
438 </div>
439 </li>
440 <li>
441 <div class="<?php echo ($highlight == "tableaux" ? "vmenulinkactive" : "vmenulink"); ?>">
442 <a href="index.php?option=com_vikbooking&amp;task=tableaux">
443 <?php VikBookingIcons::e('stream'); ?>
444 <span class="vbo-submenu-item">
445 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUTABLEAUX'); ?></span>
446 </span>
447 </a>
448 </div>
449 </li>
450 <li>
451 <div class="<?php echo ($highlight == "pmsreports" ? "vmenulinkactive" : "vmenulink"); ?>">
452 <a href="index.php?option=com_vikbooking&amp;task=pmsreports">
453 <?php VikBookingIcons::e('cash-register'); ?>
454 <span class="vbo-submenu-item">
455 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUPMSREPORTS'); ?></span>
456 </span>
457 </a>
458 </div>
459 </li>
460 <li>
461 <div class="<?php echo ($highlight == "einvoicing" ? "vmenulinkactive" : "vmenulink"); ?>">
462 <a href="index.php?option=com_vikbooking&amp;task=einvoicing">
463 <?php VikBookingIcons::e('laptop-code'); ?>
464 <span class="vbo-submenu-item">
465 <span class="vbo-submenu-item-txt"><?php echo JText::translate('VBMENUEINVOICING'); ?></span>
466 </span>
467 </a>
468 </div>
469 </li>
470 </ul>
471 </div>
472 </li><?php
473 }
474 ?>
475 </ul>
476 <div class="vbo-menu-updates">
477 <?php
478 if ($platform == 'wp') {
479 /**
480 * @wponly PRO Version
481 */
482 VikBookingLoader::import('update.license');
483 if (!VikBookingLicense::isPro()) {
484 ?>
485 <button type="button" class="vbo-gotopro" title="<?php echo addslashes(JText::translate('VBOGOTOPROBTN')); ?>" onclick="document.location.href='admin.php?option=com_vikbooking&view=gotopro';">
486 <?php VikBookingIcons::e('rocket'); ?>
487 <span><?php echo JText::translate('VBOGOTOPROBTN'); ?></span>
488 </button>
489 <?php
490 } else {
491 ?>
492 <button type="button" class="vbo-alreadypro" title="<?php echo addslashes(JText::translate('VBOISPROBTN')); ?>" onclick="document.location.href='admin.php?option=com_vikbooking&view=gotopro';">
493 <?php VikBookingIcons::e('trophy'); ?>
494 <span><?php echo JText::translate('VBOISPROBTN'); ?></span>
495 </button>
496 <?php
497 }
498 } else {
499 /**
500 * @joomlaonly
501 */
502 if (($highlight == '18' || $highlight == '11') && method_exists($app, 'triggerEvent')) {
503 // VikUpdater
504 JPluginHelper::importPlugin('e4j');
505 $callable = $app->triggerEvent('onUpdaterSupported');
506 if (count($callable) && $callable[0]) {
507 //Plugin enabled
508 $params = new stdClass;
509 $params->version = E4J_SOFTWARE_VERSION;
510 $params->alias = 'com_vikbooking';
511
512 $upd_btn_text = strrev('setadpU kcehC');
513 $ready_jsfun = '';
514 $result = $app->triggerEvent('onGetVersionContents', array(&$params));
515 if (count($result) && $result[0]) {
516 $upd_btn_text = $result[0]->response->shortTitle;
517 } else {
518 $ready_jsfun = 'jQuery("#vik-update-btn").trigger("click");';
519 }
520 ?>
521 <button type="button" id="vik-update-btn" onclick="<?php echo count($result) && $result[0] && $result[0]->response->compare == 1 ? 'document.location.href=\'index.php?option=com_vikbooking&task=updateprogram\'' : 'checkVersion(this);'; ?>">
522 <i class="vboicn-cloud"></i>
523 <span><?php echo $upd_btn_text; ?></span>
524 </button>
525 <script type="text/javascript">
526 function checkVersion(button) {
527 jQuery(button).find('span').text('Checking...');
528 jQuery.ajax({
529 type: 'POST',
530 url: 'index.php?option=com_vikbooking&task=checkversion&tmpl=component',
531 data: {}
532 }).done(function(resp) {
533 var obj = typeof resp === 'string' ? JSON.parse(resp) : resp;
534 console.log(obj);
535 if (obj.status == 1 && obj.response.status == 1) {
536 jQuery(button).find('span').text(obj.response.shortTitle);
537 if (obj.response.compare == 1) {
538 jQuery(button).attr('onclick', 'document.location.href="index.php?option=com_vikbooking&task=updateprogram"');
539 }
540 }
541 }).fail(function(resp) {
542 console.log(resp);
543 });
544 }
545 jQuery(function() {
546 <?php echo $ready_jsfun; ?>
547 });
548 </script>
549 <?php
550 } else {
551 /**
552 * When Vik Updater is not available or disabled, we now
553 * render a modal for the automated installation of the plugin.
554 *
555 * @since 1.15.1
556 */
557
558 $data = [
559 'hn' => getenv('HTTP_HOST'),
560 'sn' => getenv('SERVER_NAME'),
561 'app' => CREATIVIKAPP,
562 'ver' => VIKBOOKING_SOFTWARE_VERSION,
563 ];
564
565 $vikupdater_url = 'https://extensionsforjoomla.com/vikcheck/vikupdater.php?' . http_build_query($data);
566
567 echo JHtml::fetch(
568 'bootstrap.renderModal',
569 'jmodal-version-check',
570 array(
571 'title' => 'Install VikUpdater',
572 'closeButton' => true,
573 'keyboard' => true,
574 'bodyHeight' => 80,
575 'url' => $vikupdater_url,
576 'footer' => '<button type="button" class="btn btn-success" id="version-check-install">' . JText::translate('JTOOLBAR_INSTALL') . '</button>',
577 )
578 );
579 ?>
580 <button type="button" id="vik-update-btn">
581 <i class="vboicn-cloud"></i>
582 <span></span>
583 </button>
584
585 <?php echo VikBooking::getVboApplication()->getJmodalScript(); ?>
586
587 <script>
588 (function($) {
589 'use strict';
590
591 $(function() {
592 $('#vik-update-btn').on('click', () => {
593 vboOpenJModal('version-check');
594 });
595
596 $('#version-check-install').on('click', () => {
597 const form = $('<form action="index.php?option=com_installer&task=install.install" method="post"></form>');
598
599 form.append('<input type="hidden" name="installtype" value="url" />');
600 form.append('<input type="hidden" name="install_url" value="https://extensionsforjoomla.com/vikapi/?task=products.freedownload&sku=vup" />');
601 form.append('<input type="hidden" name="return" value="<?php echo base64_encode(JUri::getInstance()); ?>" />');
602 form.append('<?php echo JHtml::fetch('form.token'); ?>');
603
604 $('body').append(form);
605
606 form.submit();
607 });
608 });
609 })(jQuery);
610 </script>
611 <?php
612 }
613 }
614 }
615
616 if ($vbo_auth_management && in_array($highlight, array('18', '11', '8'))) {
617 // VCM Opportunities
618 $opp = VikBooking::getVcmOpportunityInstance();
619 if (!is_null($opp)) {
620 // download opportunities if it's time to do it
621 if ($opp->shouldRequestOpportunities()) {
622 $opp->downloadOpportunities();
623 }
624 // count opportunities
625 $opp_filters = array(
626 'status' => 0,
627 'action' => 0,
628 );
629 $new_opp_count = count($opp->loadOpportunities($opp_filters, null, null));
630 if ($new_opp_count > 0) {
631 ?>
632 <button type="button" class="vbo-opportunities-btnbadge" data-opportunity-count="<?php echo $new_opp_count; ?>" title="<?php echo htmlspecialchars(JText::translate('VBOGOTOOPPORTUNITIES')); ?>" onclick="document.location.href='<?php echo $platform == 'wp' ? 'admin' : 'index'; ?>.php?option=com_vikchannelmanager&task=opportunities';">
633 <?php VikBookingIcons::e('crown'); ?>
634 <span><?php echo JText::translate('VBOGOTOOPPORTUNITIES'); ?></span>
635 </button>
636 <?php
637 }
638 }
639
640 // Guest Reviews
641 $reviews_dld = VikBooking::shouldDownloadReviews();
642 $base_lnk = $platform == 'wp' ? 'admin' : 'index';
643 ?>
644 <button type="button" class="vbo-reviews-btnbadge" data-reviews-count="" title="<?php echo htmlspecialchars(JText::translate('VBOPANELREVIEWS')); ?>" onclick="<?php echo $reviews_dld >= 0 ? "window.open('$base_lnk.php?option=com_vikchannelmanager&task=reviews', '_blank'); jQuery(this).removeClass('vbo-reviews-btnbadge-alert').attr('data-reviews-count', '');" : "alert(Joomla.JText._('VBOGUESTREVSVCMREQ'));"; ?>">
645 <?php VikBookingIcons::e('star'); ?>
646 <span><?php echo JText::translate('VBOPANELREVIEWS'); ?></span>
647 </button>
648 <?php
649 }
650
651 /**
652 * Admin widgets multitasking side panel.
653 *
654 * @since 1.15.0 (J) - 1.5.0 (WP)
655 */
656 if ($view != 'dashboard') {
657 ?>
658 <button type="button" class="vbo-multitasking-apps" title="<?php echo htmlspecialchars(JText::translate('VBO_MULTITASK_PANEL'), ENT_QUOTES, 'UTF-8'); ?>">
659 <?php VikBookingIcons::e('th'); ?>
660 </button>
661
662 <?php
663 // prepare the layout data array
664 $layout_data = array(
665 'vbo_page' => (empty($view) ? VikRequest::getString('task', '') : $view),
666 'btn_trigger' => '.vbo-multitasking-apps',
667 );
668 echo JLayoutHelper::render('sidepanel.multitasking', $layout_data);
669 ?>
670 <?php
671 }
672 ?>
673 </div>
674 </div>
675 </div>
676
677 <script type="text/javascript">
678 jQuery(function() {
679 jQuery('.vbo-menu-parent-li').hover(
680 function() {
681 jQuery(this).addClass('vbo-menu-parent-li-opened');
682 jQuery(this).find('.vbo-submenu-wrap').addClass('vbo-submenu-wrap-active');
683 },function() {
684 jQuery(this).removeClass('vbo-menu-parent-li-opened');
685 jQuery(this).find('.vbo-submenu-wrap').removeClass('vbo-submenu-wrap-active');
686 }
687 );
688
689 if (jQuery('.vmenulinkactive').length) {
690 // set active class to current menu block
691 jQuery('.vmenulinkactive').closest('.vbo-submenu-wrap').parent('li').addClass('vbo-menu-parent-li-active');
692 }
693
694 if (<?php echo $reviews_dld; ?> > 0) {
695 // download new reviews
696 VBOCore.doAjax(
697 "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikchannelmanager&task=reviews_download'); ?>",
698 {
699 return: 1,
700 everywhere: 1,
701 tmpl: 'component'
702 },
703 (resp) => {
704 try {
705 if (resp.indexOf('e4j.ok') >= 0) {
706 var tot_reviews = resp.replace('e4j.ok.', '');
707 tot_reviews = parseInt(tot_reviews);
708 if (!isNaN(tot_reviews) && tot_reviews > 0) {
709 // update button badge
710 jQuery('.vbo-reviews-btnbadge').attr('data-reviews-count', tot_reviews).addClass('vbo-reviews-btnbadge-alert');
711 }
712 }
713 } catch(err) {
714 console.error('Error in decoding response', err, resp);
715 }
716 },
717 (err) => {
718 console.error('Could not download new reviews from Channel Manager', err);
719 }
720 );
721 }
722
723 // handle quick actions storage
724 jQuery('.vbo-menu-right').find('.vbo-submenu-ul').find('a').on('click', function(e) {
725 if (!jQuery(this).find('.vbo-submenu-item-txt').length) {
726 // nothing to do
727 return true;
728 }
729
730 // handle the clicked menu entry
731 e.preventDefault();
732
733 try {
734 // register clicked page
735 VBOCore.registerAdminMenuAction({
736 name: jQuery(this).find('.vbo-submenu-item-txt').text(),
737 href: jQuery(this).attr('href'),
738 });
739 } catch(e) {
740 console.error(e);
741 }
742
743 // proceed with the navigation
744 window.location.href = jQuery(this).attr('href');
745
746 return true;
747 });
748
749 // register event to populate quick actions sub-menu helpers
750 document.addEventListener('vbo-adminmenu-quickactions-create', () => {
751 jQuery('.vbo-submenu-ul[data-menu-scope]').each(function() {
752 let menu_ul = jQuery(this);
753 let scope = menu_ul.attr('data-menu-scope');
754 if (!scope) {
755 return;
756 }
757 let wrapper = menu_ul.closest('.vbo-submenu-wrap');
758 if (!wrapper || !wrapper.length || wrapper.hasClass('vbo-submenu-wrap-multi') || wrapper.find('.vbo-submenu-helper-ul').length) {
759 return;
760 }
761 let menu_scope_actions = VBOCore.getAdminMenuActions(scope);
762 if (!Array.isArray(menu_scope_actions) || !menu_scope_actions.length) {
763 return;
764 }
765 wrapper.addClass('vbo-submenu-wrap-multi');
766 let quick_actions = jQuery('<ul></ul>').addClass('vbo-submenu-helper-ul');
767 quick_actions.append('<li class="vbo-submenu-helper-lbl-li"><span class="vbo-submenu-helper-lbl-txt">' + Joomla.JText._('VBO_QUICK_ACTIONS') + '</span></li>');
768 menu_scope_actions.forEach((action, index) => {
769 let is_pinned = action.hasOwnProperty('pinned') && action['pinned'];
770 let quick_actions_entry = jQuery('<li></li>').addClass((is_pinned ? 'vbo-submenu-item-helper-pinned' : 'vbo-submenu-item-helper-unpinned'));
771 let quick_actions_div = jQuery('<div></div>').addClass('vmenulink');
772 let quick_action_link = jQuery('<a></a>').attr('href', action['href']).addClass('vbo-submenu-item-helper-link');
773 if (action.hasOwnProperty('target') && action['target']) {
774 quick_action_link.attr('target', action['target']);
775 }
776 if (action.hasOwnProperty('img') && action['img']) {
777 let quick_action_img = jQuery('<span></span>').addClass('vbo-submenu-item-helper-avatar');
778 quick_action_img.append('<img src="' + action['img'] + '" />');
779 quick_action_link.append(quick_action_img);
780 }
781 let quick_action_name = jQuery('<span></span>').addClass('vbo-submenu-item-helper-txt').text(action['name']);
782 quick_action_link.append(quick_action_name);
783 quick_actions_div.append(quick_action_link);
784 let quick_action_pin = jQuery('<span></span>').addClass('vbo-submenu-item-helper-setpin').on('click', function() {
785 // toggle pinned status and update admin menu action
786 if (!action.hasOwnProperty('pinned')) {
787 action['pinned'] = !is_pinned;
788 } else {
789 action['pinned'] = !action['pinned'];
790 }
791 try {
792 // update local storage
793 VBOCore.updateAdminMenuAction(action, scope);
794 // trigger event
795 VBOCore.emitEvent('vbo-adminmenu-quickactions-update');
796 } catch(e) {
797 console.error(e);
798 }
799 // update action status
800 if (action['pinned']) {
801 jQuery(this).closest('li').removeClass('vbo-submenu-item-helper-unpinned').addClass('vbo-submenu-item-helper-pinned');
802 } else {
803 jQuery(this).closest('li').removeClass('vbo-submenu-item-helper-pinned').addClass('vbo-submenu-item-helper-unpinned');
804 }
805 });
806 quick_action_pin.html('<?php VikBookingIcons::e('thumbtack'); ?>');
807 quick_actions_div.append(quick_action_pin);
808 quick_actions_entry.append(quick_actions_div);
809 quick_actions.append(quick_actions_entry);
810 });
811 wrapper.append(quick_actions);
812 });
813 });
814
815 // register event to update the pinned quick actions
816 document.addEventListener('vbo-adminmenu-quickactions-update', VBOCore.debounceEvent(() => {
817 let menu_scopes = [];
818 jQuery('.vbo-submenu-ul[data-menu-scope]').each(function() {
819 let menu_ul = jQuery(this);
820 let scope = menu_ul.attr('data-menu-scope');
821 if (!scope) {
822 scope = '';
823 }
824 if (menu_scopes.indexOf(scope) < 0) {
825 menu_scopes.push(scope);
826 }
827 });
828 let admin_menu_actions = [];
829 menu_scopes.forEach((scope) => {
830 let menu_actions = VBOCore.getAdminMenuActions(scope);
831 admin_menu_actions.push({
832 scope: scope,
833 actions: menu_actions,
834 });
835 });
836 VBOCore.doAjax(
837 "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=menuactions.update'); ?>",
838 {
839 actions: admin_menu_actions,
840 },
841 (resp) => {
842 // do nothing
843 },
844 (err) => {
845 // log the error
846 console.error(err.responseText);
847 }
848 );
849 }, 300));
850
851 // register shortcuts
852 window.addEventListener('keydown', (e) => {
853 e = e || window.event;
854 if (e.key && e.key === 'Enter' && e.metaKey) {
855 // toggle multitask panel
856 VBOCore.emitEvent(VBOCore.multitask_shortcut_event);
857 return;
858 }
859 if (VBOCore.side_panel_on && e.key && e.key === 'f' && e.metaKey) {
860 // focus search admin widget in multitask panel
861 VBOCore.emitEvent(VBOCore.multitask_searchfs_event);
862 e.preventDefault();
863 return;
864 }
865 }, true);
866
867 // populate quick actions sub-menu helpers on page load
868 VBOCore.emitEvent('vbo-adminmenu-quickactions-create');
869
870 // check (only once) if the quick actions should be imported from the db
871 if (<?php echo !$admin_menu_actions_checked ? 'true' : 'false'; ?>) {
872 setTimeout(() => {
873 // count admin menu actions populated from local storage
874 let tot_admin_menu_actions = 0;
875 jQuery('.vbo-submenu-ul[data-menu-scope]').each(function() {
876 let menu_ul = jQuery(this);
877 let scope = menu_ul.attr('data-menu-scope');
878 if (!scope) {
879 return;
880 }
881 let menu_scope_actions = VBOCore.getAdminMenuActions(scope);
882 if (!Array.isArray(menu_scope_actions) || !menu_scope_actions.length) {
883 return;
884 }
885 tot_admin_menu_actions++;
886 return false;
887 });
888
889 if (tot_admin_menu_actions) {
890 return;
891 }
892
893 // request for any previously stored quick actions for this admin
894 VBOCore.doAjax(
895 "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=menuactions.retrieve'); ?>",
896 {},
897 (resp) => {
898 // store to local storage the quick actions just retrieved
899 let obj_res = typeof resp === 'string' ? JSON.parse(resp) : resp;
900 if (Array.isArray(obj_res) && obj_res.length) {
901 obj_res.forEach((menu_actions) => {
902 let storage_scope_name = VBOCore.options.admin_menu_actions_nm;
903 if (menu_actions['scope']) {
904 storage_scope_name += '.' + menu_actions['scope'];
905 }
906 VBOCore.storageSetItem(storage_scope_name, menu_actions['actions']);
907 });
908 }
909 // trigger the event to populate the quick actions
910 VBOCore.emitEvent('vbo-adminmenu-quickactions-create');
911 },
912 (err) => {
913 // log the error
914 console.error(err.responseText);
915 }
916 );
917 }, 300);
918 }
919 });
920 </script>
921 <?php
922
923 // handle subscription expiration reminder modal
924 if (is_array($vcm_expiration_reminder) && $vcm_expiration_reminder['days_to_exp'] >= 0) {
925 // subscription is expiring, but it's not expired yet, display a modal-reminder
926 ?>
927 <div class="vbo-info-overlay-block vbo-info-overlay-expiration-reminder">
928 <div class="vbo-info-overlay-content">
929 <h3 style="color: var(--vbo-red-color);"><i class="vboicn-warning"></i> <?php echo JText::translate('VCM_EXPIRATION_REMINDERS'); ?></h3>
930 <div>
931 <h4><?php echo JText::sprintf('VCM_EXPIRATION_REMINDER_DAYS', $vcm_expiration_reminder['days_to_exp'], $vcm_expiration_reminder['expiration_ymd']); ?></h4>
932 </div>
933 <div class="vbo-info-overlay-footer">
934 <div class="vbo-info-overlay-footer-right">
935 <button type="button" class="btn btn-danger" onclick="jQuery('.vbo-info-overlay-expiration-reminder').fadeOut();"><?php echo JText::translate('VBOBTNKEEPREMIND'); ?></button>
936 </div>
937 </div>
938 </div>
939 </div>
940
941 <script type="text/javascript">
942 jQuery(function() {
943 jQuery('.vbo-info-overlay-expiration-reminder').fadeIn();
944 });
945 </script>
946 <?php
947 }
948 }
949
950 public static function printFooter()
951 {
952 $tmpl = VikRequest::getVar('tmpl');
953 if ($tmpl == 'component') return;
954 /**
955 * @wponly "Powered by" is VikWP.com
956 */
957 echo '<br clear="all" />' . '<div id="hmfooter">' . JText::sprintf('VBFOOTER', VIKBOOKING_SOFTWARE_VERSION) . ' <a href="https://vikwp.com/" target="_blank">VikWP - vikwp.com</a></div>';
958 }
959
960 public static function pUpdateProgram($version)
961 {
962 /**
963 * @wponly do nothing
964 */
965 }
966
967 /**
968 * Method to add parameters to the update extra query.
969 *
970 * @joomlaonly this class is automatically loaded by Joomla
971 * to invoke this method when updating the component.
972 *
973 * @param Update &$update An update definition
974 * @param JTable &$table The update instance from the database
975 *
976 * @return void
977 *
978 * @since 1.16.0 (J) - 1.6.0 (WP)
979 */
980 public static function prepareUpdate(&$update, &$table)
981 {
982 // get current domain
983 $server = JFactory::getApplication()->input->server;
984
985 // build query array
986 $query = [
987 'domain' => base64_encode($server->getString('HTTP_HOST')),
988 'ip' => $server->getString('REMOTE_ADDR'),
989 ];
990
991 // get license key
992 $license_key = VBOFactory::getConfig()->get('licensekey');
993 if ($license_key)
994 {
995 $query['key'] = $license_key;
996 }
997
998 // always refresh the extra query before an update
999 $update->set('extra_query', http_build_query($query, '', '&amp;'));
1000 }
1001
1002 /**
1003 * Returns the information about the first setup metrics and minimum requirements.
1004 *
1005 * @return array associative list of metrics.
1006 *
1007 * @since 1.16.4 (J) - 1.6.4 (WP)
1008 */
1009 public static function getFirstSetupMetrics()
1010 {
1011 $dbo = JFactory::getDbo();
1012
1013 $q = "SELECT COUNT(*) FROM `#__vikbooking_prices`;";
1014 $dbo->setQuery($q);
1015 $totprices = $dbo->loadResult();
1016
1017 $q = "SELECT COUNT(*) FROM `#__vikbooking_rooms`;";
1018 $dbo->setQuery($q);
1019 $totrooms = $dbo->loadResult();
1020
1021 $q = "SELECT COUNT(*) FROM `#__vikbooking_dispcost`;";
1022 $dbo->setQuery($q);
1023 $totdailyfares = $dbo->loadResult();
1024
1025 $metrics = [
1026 'totprices' => $totprices,
1027 'totrooms' => $totrooms,
1028 'totdailyfares' => $totdailyfares,
1029 'completed' => ($totprices && $totrooms && $totdailyfares),
1030 ];
1031
1032 // shortcodes (if platform-supported)
1033 if (VBOPlatformDetection::isWordPress()) {
1034 /**
1035 * @wponly - check if some shortcodes have been defined before showing the Dashboard
1036 */
1037 $model = JModel::getInstance('vikbooking', 'shortcodes');
1038 $metrics['shortcodes'] = $model->all('post_id');
1039
1040 // calculate again the completed status
1041 $metrics['completed'] = ($metrics['completed'] && $metrics['shortcodes']);
1042 }
1043
1044 return $metrics;
1045 }
1046 }
1047