File "today_rooms_occupancy.php"
Full Path: /home/romayxjt/public_html/wp-content/plugins/vikbooking/admin/helpers/widgets/today_rooms_occupancy.php
File size: 10.86 KB
MIME-type: text/x-php
Charset: utf-8
<?php
/**
* @package VikBooking
* @subpackage com_vikbooking
* @author Alessio Gaggii - e4j - Extensionsforjoomla.com
* @copyright Copyright (C) 2018 e4j - Extensionsforjoomla.com. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @link https://vikwp.com
*/
defined('ABSPATH') or die('No script kiddies please!');
/**
* Class handler for admin widget "today rooms occupancy".
*
* @since 1.4.0
*/
class VikBookingAdminWidgetTodayRoomsOccupancy extends VikBookingAdminWidget
{
/**
* Class constructor will define the widget name and identifier.
*/
public function __construct()
{
// call parent constructor
parent::__construct();
$this->widgetName = JText::translate('VBDASHTODROCC');
$this->widgetDescr = JText::translate('VBO_W_TODROCC_DESCR');
$this->widgetId = basename(__FILE__, '.php');
/**
* Define widget and icon and style name.
*
* @since 1.15.0 (J) - 1.5.0 (WP)
*/
$this->widgetIcon = '<i class="' . VikBookingIcons::i('users') . '"></i>';
$this->widgetStyleName = 'green';
}
public function render(?VBOMultitaskData $data = null)
{
$vbo_auth_bookings = JFactory::getUser()->authorise('core.vbo.bookings', 'com_vikbooking');
$busy = VikBooking::getAdminWidgetsInstance()->loadBusyRecordsUnclosed();
$info_rooms = array(
'unpublished_rooms' => VikBooking::getAdminWidgetsInstance()->getRoomsData('unpublished_rooms'),
'tot_rooms_units' => VikBooking::getAdminWidgetsInstance()->getRoomsData('tot_rooms_units'),
'all_rooms_ids' => VikBooking::getAdminWidgetsInstance()->getRoomsData('all_rooms_ids'),
'all_rooms_units' => VikBooking::getAdminWidgetsInstance()->getRoomsData('all_rooms_units'),
'all_rooms_features' => VikBooking::getAdminWidgetsInstance()->getRoomsData('all_rooms_features'),
);
$today_tot_occupancy = 0;
$today_end_ts = mktime(23, 59, 59, date("n"), date("j"), date("Y"));
$today_info = getdate($today_end_ts);
$tot_booked_today = 0;
if (count($busy)) {
foreach ($busy as $idroom => $rbusy) {
if (in_array($idroom, $info_rooms['unpublished_rooms'])) {
continue;
}
foreach ($rbusy as $b) {
$tmpone = getdate($b['checkin']);
$ritts = mktime(0, 0, 0, $tmpone['mon'], $tmpone['mday'], $tmpone['year']);
$tmptwo = getdate($b['checkout']);
$conts = mktime(0, 0, 0, $tmptwo['mon'], $tmptwo['mday'], $tmptwo['year']);
if ($today_end_ts >= $ritts && $today_end_ts < $conts) {
$tot_booked_today++;
}
}
}
}
$today_tot_occupancy = $tot_booked_today;
if ($today_tot_occupancy <= 0) {
// no contents to be displayed
return;
}
// render the necessary PHP/JS code for the modal window only once
if (!defined('VBO_JMODAL_CHECKIN_BOOKING')) {
define('VBO_JMODAL_CHECKIN_BOOKING', 1);
?>
<script type="text/javascript">
function vboJModalShowCallback() {
if (typeof vbo_t_on == "undefined") {
return;
}
// simulate STOP click
if (vbo_t_on) {
vbo_t_on = false;
clearTimeout(vbo_t);
jQuery(".vbo-dashboard-refresh-play").fadeIn();
}
}
function vboJModalHideCallback() {
if (typeof vbo_t_on == "undefined") {
return;
}
// simulate PLAY click
if (!vbo_t_on) {
vboStartTimer();
jQuery(".vbo-dashboard-refresh-play").fadeOut();
}
}
</script>
<?php
echo $this->vbo_app->getJmodalScript('', 'vboJModalHideCallback();', 'vboJModalShowCallback();');
echo $this->vbo_app->getJmodalHtml('vbo-checkin-booking', JText::translate('VBOMANAGECHECKSINOUT'));
}
//
$today_rbookmap = array();
$today_bidbookmap = array();
foreach ($busy as $idroom => $rbusy) {
foreach ($rbusy as $b) {
$tmpone = getdate($b['checkin']);
$ritts = mktime(0, 0, 0, $tmpone['mon'], $tmpone['mday'], $tmpone['year']);
$tmptwo = getdate($b['checkout']);
$conts = mktime(0, 0, 0, $tmptwo['mon'], $tmptwo['mday'], $tmptwo['year']);
if ($today_end_ts >= $ritts && $today_end_ts < $conts) {
if (isset($today_rbookmap[$b['idroom']])) {
$today_rbookmap[$b['idroom']]++;
$today_bidbookmap[$b['idroom']][] = $b['id'];
} else {
$today_rbookmap[$b['idroom']] = 1;
$today_bidbookmap[$b['idroom']] = array($b['id']);
}
}
}
}
?>
<div class="vbo-admin-widget-wrapper">
<div class="vbo-admin-widget-head vbo-dashboard-today-occ-head">
<h4><?php echo $this->widgetIcon; ?> <span><?php echo $this->widgetName; ?></span></h4>
<div class="btn-toolbar pull-right vbo-dashboard-search-today-occ">
<div class="btn-wrapper input-append">
<input type="text" class="today-search form-control" placeholder="<?php echo JText::translate('VBODASHSEARCHKEYS'); ?>">
<button type="button" class="btn" onclick="jQuery('.today-search').val('').trigger('keyup');"><i class="icon-remove"></i></button>
</div>
</div>
</div>
<div class="vbo-dashboard-today-occ-listcont">
<?php
foreach ($today_rbookmap as $idr => $rbked) {
$room_bookings_det = VikBooking::getRoomBookingsFromBusyIds($idr, $today_bidbookmap[$idr]);
if ((count($room_bookings_det) == 1 && $room_bookings_det[0]['closure'] == 1) || !count($room_bookings_det)) {
// skip rooms with just a closure, or with no real bookings (shared calendars)
continue;
}
// calculate color for percentage of occupancy
$tot_rooms_units = $info_rooms['all_rooms_units'][$idr];
$tot_rooms_units = $tot_rooms_units < 1 ? 1 : $tot_rooms_units;
$percentage_booked = round((100 * $rbked / $tot_rooms_units), 2);
$occupancy_cls = 'vbo-roomocc-units-free';
if ($percentage_booked > 33 && $percentage_booked <= 66) {
$occupancy_cls = 'vbo-roomocc-units-half';
} elseif ($percentage_booked > 66 && $percentage_booked < 100) {
$occupancy_cls = 'vbo-roomocc-units-threefourth';
} elseif ($percentage_booked >= 100) {
$occupancy_cls = 'vbo-roomocc-units-full';
}
?>
<div class="vbo-dashboard-today-roomocc">
<div class="vbo-dashboard-today-roomocc-det">
<h5>
<span class="vbo-dashboard-today-roomocc-det-rname"><?php echo $info_rooms['all_rooms_ids'][$idr]; ?></span>
<span class="vbo-dashboard-roomocc-units-fromto <?php echo $occupancy_cls; ?>">
<span class="vbo-dashboard-roomocc-units-from"><?php echo $rbked; ?></span> / <span><?php echo $info_rooms['all_rooms_units'][$idr]; ?></span>
</span>
</h5>
<div class="vbo-dashboard-today-roomocc-customers table-responsive">
<table class="table vbo-table-search-today">
<thead>
<tr class="vbo-dashboard-today-roomocc-firstrow">
<th class="left"><?php echo JText::translate('VBCUSTOMERNOMINATIVE'); ?></th>
<th class="center"> </th>
<th class="right"><?php echo JText::translate('VBDASHUPRESFOUR'); ?></th>
</tr>
<tr class="warning no-results">
<td colspan="7"><i class="vboicn-warning"></i> <?php echo JText::translate('VBONORESULTS'); ?></td>
</tr>
</thead>
<tbody>
<?php
foreach ($room_bookings_det as $rbind => $room_booking) {
$nominative = strlen($room_booking['nominative']) > 1 ? $room_booking['nominative'] : VikBooking::getFirstCustDataField($room_booking['custdata']);
$country_flag = '';
if (file_exists(VBO_ADMIN_PATH.DS.'resources'.DS.'countries'.DS.$room_booking['country'].'.png')) {
$country_flag = '<img src="'.VBO_ADMIN_URI.'resources/countries/'.$room_booking['country'].'.png'.'" title="'.$room_booking['country'].'" class="vbo-country-flag vbo-country-flag-left"/>';
}
//Room specific unit
$room_first_feature = ' ';
if (!empty($room_booking['roomindex']) && array_key_exists($idr, $info_rooms['all_rooms_features']) && count($info_rooms['all_rooms_features'][$idr]) > 0) {
foreach ($info_rooms['all_rooms_features'][$idr] as $rind => $rfeatures) {
if ($rind != $room_booking['roomindex']) {
continue;
}
foreach ($rfeatures as $fname => $fval) {
if (strlen($fval)) {
$room_first_feature = '#'.$rind.' - '.JText::translate($fname).': '.$fval;
break 2;
}
}
}
}
//
$act_status = '';
if ($vbo_auth_bookings && $room_booking['closure'] != 1 && $room_booking['checked'] != 0) {
$act_status = '<button type="button" class="btn btn-small btn-primary pull-right pro-feature" onclick="vboOpenJModal(\'vbo-checkin-booking\', \'index.php?option=com_vikbooking&task=bookingcheckin&cid[]='.$room_booking['idorder'].'&tmpl=component\');"><i class="vboicn-users icn-nomargin"></i></button>';
}
?>
<tr class="vbo-dashboard-today-roomocc-rows">
<td class="searchable left"><?php echo $country_flag.'<a href="index.php?option=com_vikbooking&task=editorder&cid[]='.$room_booking['idorder'].'" target="_blank">'.$nominative.'</a>'; ?></td>
<td class="searchable center"><?php echo $room_first_feature; ?></td>
<td class="searchable right">
<div class="vbo-dashboard-today-roomocc-row-checkout">
<span class="vbo-dashboard-today-roomocc-checkout-dt"><?php echo date(str_replace("/", $this->datesep, $this->df).' H:i', $room_booking['checkout']); ?></span>
<?php
if (!empty($act_status)) {
?>
<span class="vbo-dashboard-today-roomocc-checkout-do"><?php echo $act_status; ?></span>
<?php
}
?>
</div>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
<?php
}
?>
</div>
</div>
<script type="text/javascript">
jQuery(function() {
/* Attempt to append the modal container to the body for the multitask panel */
let modal_container = jQuery('[id*="vbo-checkin-booking"][class*="modal"]');
if (modal_container.length) {
modal_container.first().appendTo('body');
}
/* Today Search */
jQuery(".today-search").keyup(function () {
var inp_elem = jQuery(this);
var instance_elem = inp_elem.closest('.vbo-admin-widget-wrapper');
var searchTerm = inp_elem.val();
var searchSplit = searchTerm.replace(/ /g, "'):containsi('");
jQuery.extend(jQuery.expr[':'], {'containsi':
function(elem, i, match, array) {
return (elem.textContent || elem.innerText || '').toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
instance_elem.find(".vbo-table-search-today tbody tr td.searchable").not(":containsi('" + searchSplit + "')").each(function(e) {
jQuery(this).parent('tr').attr('visible', 'false');
});
instance_elem.find(".vbo-table-search-today tbody tr td.searchable:containsi('" + searchSplit + "')").each(function(e) {
jQuery(this).parent('tr').attr('visible', 'true');
});
instance_elem.find('.vbo-table-search-today').each(function(k, v) {
var jobCount = parseInt(jQuery(this).find('tbody tr[visible="true"]').length);
if (jobCount > 0) {
jQuery(this).find('.no-results').hide();
} else {
jQuery(this).find('.no-results').show();
}
});
});
});
</script>
<?php
}
}