PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.6.8
VikBooking Hotel Booking Engine & PMS v1.6.8
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 / layouts / sidepanel / multitasking.php

multitasking.php in VikBooking Hotel Booking Engine & PMS 1.6.8, at admin/layouts/sidepanel/multitasking.php

339 lines 14.6 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 srl
6 * @copyright Copyright (C) 2022 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 defined('ABSPATH') or die('No script kiddies please!');
12
13 /**
14 * Obtain vars from arguments received in the layout file.
15 * This layout file should be called once at most per page.
16 *
17 * @var string $vbo_page the name of the current View in VBO.
18 * @var string $btn_trigger the CSS selector of the button that opens the panel.
19 */
20 extract($displayData);
21
22 // make sure the current page name is set and it's a string
23 $vbo_page = isset($vbo_page) ? htmlspecialchars($vbo_page, ENT_QUOTES) : '';
24
25 // get the current page and root URIs
26 $vbo_page_uri = htmlspecialchars((string) JUri::getInstance(), ENT_QUOTES);
27 $root_uri = htmlspecialchars(JUri::root(), ENT_QUOTES);
28
29 // get admin widgets helper
30 $widgets_helper = VikBooking::getAdminWidgetsInstance();
31
32 // get all widgets by preloading their assets (if any)
33 $admin_widgets = $widgets_helper->getWidgetNames($preload = true);
34
35 // load current widgets map for this page
36 $current_map = $widgets_helper->getMultitaskingMap($vbo_page);
37
38 // page active widgets list
39 $active_widgets = [];
40
41 // check if the notification audio file exists within VCM
42 $notif_audio_path = implode(DIRECTORY_SEPARATOR, [VCM_ADMIN_PATH, 'assets', 'css', 'audio', 'new_notification.mp3']);
43 $notif_audio_url = is_file($notif_audio_path) ? (VCM_ADMIN_URI . implode('/', ['assets', 'css', 'audio', 'new_notification.mp3'])) : null;
44
45 // theme color preferences
46 $color_scheme = VikBooking::getAppearancePref();
47 $scheme_name = JText::translate('VBO_APPEARANCE_PREF_AUTO');
48 $current_mode = 'magic';
49 if ($color_scheme == 'light') {
50 $scheme_name = JText::translate('VBO_APPEARANCE_PREF_LIGHT');
51 $current_mode = 'sun';
52 } elseif ($color_scheme == 'dark') {
53 $scheme_name = JText::translate('VBO_APPEARANCE_PREF_DARK');
54 $current_mode = 'moon';
55 }
56
57 // JS lang vars
58 JText::script('VBO_BROWSER_NOTIFS_ON');
59 JText::script('VBO_BROWSER_NOTIFS_OFF');
60 JText::script('VBO_BROWSER_NOTIFS_OFF_HELP');
61 JText::script('VBO_ADMIN_WIDGET');
62 JText::script('VBO_CONGRATS');
63 JText::script('VBO_APPEARANCE_PREF_AUTO');
64 JText::script('VBO_APPEARANCE_PREF_LIGHT');
65 JText::script('VBO_APPEARANCE_PREF_DARK');
66
67 ?>
68
69 <div class="vbo-sidepanel-wrapper vbo-sidepanel-right vbo-sidepanel-close">
70
71 <div class="vbo-sidepanel-container">
72
73 <div class="vbo-sidepanel-layouts">
74 <div class="vbo-sidepanel-dismiss">
75 <span class="vbo-sidepanel-dismiss-btn"><?php VikBookingIcons::e('times'); ?></span>
76 </div>
77 <div class="vbo-sidepanel-notifications">
78 <button type="button" class="vbo-sidepanel-notifications-btn"><?php VikBookingIcons::e('bell'); ?></button>
79 </div>
80 <div class="vbo-sidepanel-colorscheme">
81 <span class="vbo-tooltip vbo-tooltip-bottom vbo-sidepanel-colorscheme-current" data-tooltiptext="<?php echo JHtml::fetch('esc_attr', $scheme_name); ?>"><?php VikBookingIcons::e($current_mode); ?></span>
82 <div class="vbo-sidepanel-colorscheme-list">
83 <div class="vbo-sidepanel-colorscheme-option<?php echo $color_scheme == 'auto' ? ' vbo-sidepanel-colorscheme-option-active' : ''; ?>" data-scheme="auto">
84 <span><?php VikBookingIcons::e('magic'); ?> <?php echo JText::translate('VBO_APPEARANCE_PREF_AUTO'); ?></span>
85 </div>
86 <div class="vbo-sidepanel-colorscheme-option<?php echo $color_scheme == 'light' ? ' vbo-sidepanel-colorscheme-option-active' : ''; ?>" data-scheme="light">
87 <span><?php VikBookingIcons::e('sun'); ?> <?php echo JText::translate('VBO_APPEARANCE_PREF_LIGHT'); ?></span>
88 </div>
89 <div class="vbo-sidepanel-colorscheme-option<?php echo $color_scheme == 'dark' ? ' vbo-sidepanel-colorscheme-option-active' : ''; ?>" data-scheme="dark">
90 <span><?php VikBookingIcons::e('moon'); ?> <?php echo JText::translate('VBO_APPEARANCE_PREF_DARK'); ?></span>
91 </div>
92 </div>
93 </div>
94 <div class="vbo-sidepanel-layout-type">
95 <span class="vbo-sidepanel-layout-large">
96 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96.75 75.3"><defs></defs><path d="M87.68,8.65a3.23,3.23,0,0,1,3.23,3.22V66.53a3.23,3.23,0,0,1-3.23,3.23H11.57a3.23,3.23,0,0,1-3.22-3.23V11.87a3.22,3.22,0,0,1,3.22-3.22H87.68m0-7.1H11.57A10.32,10.32,0,0,0,1.25,11.87V66.53A10.32,10.32,0,0,0,11.57,76.85H87.68A10.32,10.32,0,0,0,98,66.53V11.87A10.32,10.32,0,0,0,87.68,1.55Z" transform="translate(-1.25 -1.55)"/><rect id="wide" x="10.15" y="10" width="77.22" height="55.25" rx="4.94"/></svg>
97 </span>
98 <span class="vbo-sidepanel-layout-small">
99 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96.75 75.3"><defs></defs><path d="M87.68,8.65a3.23,3.23,0,0,1,3.23,3.22V66.53a3.23,3.23,0,0,1-3.23,3.23H11.57a3.23,3.23,0,0,1-3.22-3.23V11.87a3.22,3.22,0,0,1,3.22-3.22H87.68m0-7.1H11.57A10.32,10.32,0,0,0,1.25,11.87V66.53A10.32,10.32,0,0,0,11.57,76.85H87.68A10.32,10.32,0,0,0,98,66.53V11.87A10.32,10.32,0,0,0,87.68,1.55Z" transform="translate(-1.25 -1.55)"/><rect id="right" x="48.1" y="12.42" width="35.75" height="50.93" rx="3.23"/></svg>
100 </span>
101 </div>
102 </div>
103
104 <div class="vbo-sidepanel-body-top">
105
106 <div class="vbo-sidepanel-search">
107 <?php VikBookingIcons::e('search', 'vbo-sidepanel-search-input-icn'); ?>
108 <input id="vbo-sidepanel-search-input" type="text" placeholder="<?php echo htmlspecialchars(JText::translate('VBO_SEARCH_ADMIN_WIDGETS')); ?>" value="" autocomplete="off" />
109 </div>
110
111 <div class="vbo-sidepanel-add-widgets">
112 <?php
113 foreach ($admin_widgets as $k => $admin_widget) {
114 /**
115 * Add widget container must be focusable with "tabindex=-1" so that via JS we will
116 * have the "relatedTarget" event property set to this element when blurring on search field.
117 */
118 ?>
119 <div class="vbo-sidepanel-add-widget" data-vbowidgetid="<?php echo $admin_widget->id; ?>" tabindex="-1">
120 <div class="vbo-sidepanel-widget-info">
121 <div class="vbo-sidepanel-widget-info-det">
122 <span class="vbo-sidepanel-widget-icn vbo-admin-widget-style-<?php echo $admin_widget->style; ?>"><?php echo $admin_widget->icon; ?></span>
123 <span class="vbo-sidepanel-widget-name"><?php echo $admin_widget->name; ?></span>
124 </div>
125 <div class="vbo-sidepanel-widget-add">
126 <span class="vbo-widget-render-modal"><?php echo VikBookingIcons::e('far fa-window-restore'); ?></span>
127 <span class="vbo-widget-render-regular"><?php echo VikBookingIcons::e('plus-circle'); ?></span>
128 </div>
129 </div>
130 <div class="vbo-sidepanel-widget-tags" style="display: none;"><?php echo strtolower($admin_widget->name . ' ' . $admin_widget->descr); ?></div>
131 </div>
132 <?php
133 }
134 ?>
135 <div class="vbo-sidepanel-add-widgets-nores" style="display: none;">
136 <span><?php echo JText::translate('VBONORESULTS'); ?></span>
137 </div>
138 </div>
139
140 </div>
141
142 <div class="vbo-sidepanel-active-widgets">
143 <?php
144 // get multitask data object
145 $multitask_data = VBOMultitaskParser::getInstance($vbo_page, $vbo_page_uri)->getData();
146 foreach ($current_map as $widget_id) {
147 $widget_instance = $widgets_helper->getWidget($widget_id);
148 if (!$widget_instance) {
149 continue;
150 }
151 // turn on multitask flag
152 $widget_instance->setInMultitask(true);
153 // build widget info object
154 $widget_info = new stdClass;
155 $widget_info->id = $widget_instance->getIdentifier();
156 $widget_info->name = $widget_instance->getName();
157 // push widget info object to list
158 $active_widgets[] = $widget_info;
159 ?>
160 <div class="vbo-admin-widgets-widget-output vbo-admin-widgets-container-small" data-vbowidgetid="<?php echo $widget_info->id; ?>">
161 <div class="vbo-admin-widgets-widget-detach"><?php VikBookingIcons::e('window-restore'); ?></div>
162 <?php $widget_instance->render($multitask_data); ?>
163 </div>
164 <?php
165 }
166 ?>
167 </div>
168
169 <div class="vbo-sidepanel-edit-widgets">
170 <div class="vbo-sidepanel-edit-widgets-wrap">
171 <button class="btn btn-small vbo-sidepanel-edit-widgets-trig" style="<?php echo !count($active_widgets) ? 'display: none;' : ''; ?>"><?php echo JText::translate('VBO_WIDGETS_CUSTWIDGETS'); ?></button>
172 </div>
173 </div>
174
175 </div>
176
177 </div>
178
179 <script type="text/javascript">
180 jQuery(function() {
181
182 // inject core properties
183 VBOCore.setOptions({
184 is_vbo: true,
185 cms: "<?php echo VBOPlatformDetection::isWordPress() ? 'wordpress' : 'joomla'; ?>",
186 widget_ajax_uri: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=exec_admin_widget'); ?>",
187 assets_ajax_uri: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=widgets_get_assets'); ?>",
188 multitask_ajax_uri: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=exec_multitask_widgets'); ?>",
189 watchdata_ajax_uri: "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=widgets_watch_data'); ?>",
190 current_page: "<?php echo $vbo_page; ?>",
191 current_page_uri: "<?php echo $vbo_page_uri; ?>",
192 root_uri: "<?php echo $root_uri; ?>",
193 admin_widgets: <?php echo json_encode($active_widgets); ?>,
194 notif_audio_url: "<?php echo $notif_audio_url; ?>",
195 tn_texts: {
196 notifs_enabled: Joomla.JText._('VBO_BROWSER_NOTIFS_ON'),
197 notifs_disabled: Joomla.JText._('VBO_BROWSER_NOTIFS_OFF'),
198 notifs_disabled_help: Joomla.JText._('VBO_BROWSER_NOTIFS_OFF_HELP'),
199 admin_widget: Joomla.JText._('VBO_ADMIN_WIDGET'),
200 congrats: Joomla.JText._('VBO_CONGRATS'),
201 },
202 default_loading_body: '<?php VikBookingIcons::e('circle-notch', 'fa-spin fa-fw'); ?>',
203 service_worker_path: '<?php echo VBOWebappServiceworker::getUri(); ?>',
204 service_worker_scope: '<?php echo VBOWebappServiceworker::getScope(); ?>',
205 push: <?php echo json_encode(VBOWebappPush::getConfig()); ?>,
206 });
207
208 // initialize multitasking events
209 VBOCore.prepareMultitasking({
210 selector: ".vbo-sidepanel-wrapper",
211 sclass_l_small: "vbo-sidepanel-right",
212 sclass_l_large: "vbo-sidepanel-large",
213 btn_trigger: "<?php echo $btn_trigger; ?>",
214 search_selector: "#vbo-sidepanel-search-input",
215 search_nores: ".vbo-sidepanel-add-widgets-nores",
216 close_selector: ".vbo-sidepanel-dismiss-btn",
217 t_layout_small: ".vbo-sidepanel-layout-small",
218 t_layout_large: ".vbo-sidepanel-layout-large",
219 wclass_base_sel: ".vbo-admin-widgets-widget-output",
220 wclass_l_small: "vbo-admin-widgets-container-small",
221 wclass_l_large: "vbo-admin-widgets-container-large",
222 addws_selector: ".vbo-sidepanel-add-widgets",
223 addw_selector: ".vbo-sidepanel-add-widget",
224 addwfs_selector: ".vbo-sidepanel-add-widget-focussed",
225 wtags_selector: ".vbo-sidepanel-widget-tags",
226 addw_data_attr: "data-vbowidgetid",
227 actws_selector: ".vbo-sidepanel-active-widgets",
228 editw_selector: ".vbo-sidepanel-edit-widgets-trig",
229 editmode_class: "vbo-admin-widgets-widget-editing",
230 rmwidget_class: "vbo-admin-widgets-widget-remove",
231 rmwidget_icn: '<?php VikBookingIcons::e('times'); ?>',
232 dtcwidget_class: "vbo-admin-widgets-widget-detach",
233 dtctarget_class: "vbo-admin-widget-head",
234 dtcwidget_icn: '<?php VikBookingIcons::e('far fa-window-restore'); ?>',
235 notif_selector: ".vbo-sidepanel-notifications-btn",
236 notif_on_class: "vbo-sidepanel-notifications-on",
237 notif_off_class: "vbo-sidepanel-notifications-off",
238 });
239
240 // install Service Worker
241 VBOCore.installServiceWorker().then((registration) => {
242 VBOCore.handlePushSubscription(registration).then((subscription) => {
243 console.info('Push notifications are enabled');
244 }).catch((error) => {
245 console.warn(error);
246 });
247 }).catch((error) => {
248 console.warn(error);
249 });
250
251 // color scheme preferences
252 jQuery('.vbo-sidepanel-colorscheme-current').on('click', function() {
253 jQuery('.vbo-sidepanel-colorscheme-list').toggleClass('vbo-sidepanel-colorscheme-list-show');
254 });
255
256 // color scheme selection
257 jQuery('.vbo-sidepanel-colorscheme-option').on('click', function() {
258 let set_mode = jQuery(this).attr('data-scheme');
259
260 let vbo_css_base_uri = '<?php echo VBO_ADMIN_URI . (VBOPlatformDetection::isWordPress() ? 'resources/' : '') . 'vbo-appearance-%s.css'; ?>';
261 let vbo_css_base_id = 'vbo-css-appearance-';
262 let vbo_css_modes = {
263 auto: vbo_css_base_uri.replace('%s', 'auto'),
264 dark: vbo_css_base_uri.replace('%s', 'dark'),
265 light: null,
266 };
267 let vbo_mode_texts = {
268 auto: Joomla.JText._('VBO_APPEARANCE_PREF_AUTO'),
269 dark: Joomla.JText._('VBO_APPEARANCE_PREF_DARK'),
270 light: Joomla.JText._('VBO_APPEARANCE_PREF_LIGHT'),
271 };
272 let vbo_mode_icons = {
273 auto: '<?php VikBookingIcons::e('magic') ?>',
274 dark: '<?php VikBookingIcons::e('moon') ?>',
275 light: '<?php VikBookingIcons::e('sun') ?>',
276 };
277
278 if (!vbo_css_modes.hasOwnProperty(set_mode)) {
279 return false;
280 }
281
282 // toggle active class
283 jQuery('.vbo-sidepanel-colorscheme-option').removeClass('vbo-sidepanel-colorscheme-option-active');
284 jQuery(this).addClass('vbo-sidepanel-colorscheme-option-active');
285
286 // adjust current preference content
287 jQuery('.vbo-sidepanel-colorscheme-current')
288 .attr('data-tooltiptext', vbo_mode_texts[set_mode])
289 .html(vbo_mode_icons[set_mode]);
290
291 // set/unset CSS files from DOM
292 for (let app_mode in vbo_css_modes) {
293 if (!vbo_css_modes.hasOwnProperty(app_mode) || !vbo_css_modes[app_mode]) {
294 continue;
295 }
296 if (app_mode == set_mode) {
297 // set this CSS file
298 jQuery('head').append('<link rel="stylesheet" id="' + vbo_css_base_id + app_mode + '" href="' + vbo_css_modes[app_mode] + '" media="all">');
299 } else {
300 // unset this CSS file
301 if (jQuery('link#' + vbo_css_base_id + app_mode).length) {
302 jQuery('link#' + vbo_css_base_id + app_mode).remove();
303 } else if (jQuery('link#' + vbo_css_base_id + app_mode + '-css').length) {
304 // WP framework may add "-css" as suffix to the given ID
305 jQuery('link#' + vbo_css_base_id + app_mode + '-css').remove();
306 }
307 }
308 }
309
310 // close menu-list
311 jQuery('.vbo-sidepanel-colorscheme-list').removeClass('vbo-sidepanel-colorscheme-list-show');
312
313 // silently update configuration value
314 VBOCore.doAjax(
315 "<?php echo VikBooking::ajaxUrl('index.php?option=com_vikbooking&task=configuration.update'); ?>",
316 {
317 settings: {
318 appearance_pref: set_mode,
319 }
320 },
321 (success) => {
322 // do nothing
323 },
324 (error) => {
325 console.error(error);
326 }
327 );
328 });
329
330 // subscribe to the multitask-panel-close event to dismiss the color scheme selection menu
331 document.addEventListener(VBOCore.multitask_close_event, function() {
332 if (jQuery('.vbo-sidepanel-colorscheme-list-show').length) {
333 jQuery('.vbo-sidepanel-colorscheme-list-show').removeClass('vbo-sidepanel-colorscheme-list-show');
334 }
335 });
336
337 });
338 </script>
339