✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ server366.web-hosting.com ​🇻​♯➤ 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2025

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 67.223.118.204 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.243
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /home/builxejc/public_html/wp-content/plugins/motopress-hotel-booking/includes//linked-rooms.php
<?php

namespace MPHB;

use MPHB\Utils\BookingUtils;
use MPHB\Utils\DateUtils;
use DateTime;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * @since 4.10.0
 */
class LinkedRooms {

	/**
	 * @var array [
	 *     room_type_id (int) => [
	 *         linked_room_id (int) => room_ids (int[]),
	 *         'all' => all_linked_room_ids (int[])
	 *     ]
	 * ]
	 */
	protected static $cachedLinkedRoomsByRoomType = array();

	protected $comment = '';

	public function __construct() {
		$this->comment = esc_html__( 'Blocked because the linked accommodation is booked', 'motopress-hotel-booking' );

		$this->addFilters();
	}

	protected function addFilters() {
		add_filter( 'mphb_has_not_stay_in_rules', array( $this, 'checkForLinkedBookings' ) );
		add_filter( 'mphb_get_booking_rules_for_date', array( $this, 'extendBookingRulesForDate' ), 10, 3 );
		add_filter( 'mphb_get_admin_blocks_for_export', array( $this, 'extendAdminBlocksForExport' ), 10, 3 );
		add_filter( 'mphb_get_calendar_comments_for_room_type', array( $this, 'extendBookingCalendarBlocks' ), 10, 4 );
	}

	/**
	 * @access protected
	 *
	 * @param bool $hasNotStayInRules
	 * @return bool
	 */
	public function checkForLinkedBookings( $hasNotStayInRules ) {
		if ( ! $hasNotStayInRules ) {
			$hasNotStayInRules = static::hasBookingsForLinkedRooms();
		}

		return $hasNotStayInRules;
	}

	/**
	 * @access protected
	 *
	 * @see Core\BookingRulesData::getBookingRulesForDate()
	 *
	 * @param array $bookingRules
	 * @param int $roomTypeId
	 * @param DateTime $date
	 * @return array Extended booking rules.
	 */
	public function extendBookingRulesForDate( $bookingRules, $roomTypeId, $date ) {
		$linkedRoomIds = static::getLinkedRoomsForRoomType( $roomTypeId );

		if ( empty( $linkedRoomIds['all'] ) ) {
			return $bookingRules;
		}

		$linkedBookings = static::findLinkedBookingsForRoomType( $date, $date, $roomTypeId );
		$linkedBlocks   = BookingUtils::convertToBlocks( $linkedBookings, $this->comment );

		foreach ( $linkedBlocks as $block ) {
			foreach ( $block['room_ids'] as $linkedRoomId ) {
				if ( in_array( $linkedRoomId, $linkedRoomIds['all'] ) ) {
					foreach ( $linkedRoomIds[ $linkedRoomId ] as $roomId ) {
						$bookingRules['custom_rules_for_room_id'][ $roomId ]['not_stay_in'] = true;

						if ( empty( $bookingRules['custom_rules_for_room_id'][ $roomId ]['custom_rule_comment'] ) ) {
							$bookingRules['custom_rules_for_room_id'][ $roomId ]['custom_rule_comment'] = $block['comment'];
						} else {
							$bookingRules['custom_rules_for_room_id'][ $roomId ]['custom_rule_comment'] .= ', ' . $block['comment'];
						}
					}
				}
			}
		}

		return $bookingRules;
	}

	/**
	 * @access protected
	 *
	 * @param array $adminBlocks
	 * @param int $roomTypeId
	 * @param int $roomId
	 * @return array [
	 *     [
	 *         'roomTypeId' => int,
	 *         'roomId'     => int,
	 *         'startDate'  => DateTime,
	 *         'endDate'    => DateTime,
	 *         'comment'    => string,
	 *     ],
	 *     ...
	 * ]
	 */
	public function extendAdminBlocksForExport( $adminBlocks, $roomTypeId, $roomId ) {
		$linkedRoomIds = MPHB()->getRoomRepository()->getLinkedRoomIds( $roomId );

		if ( empty( $linkedRoomIds ) ) {
			return $adminBlocks;
		}

		$linkedBookings = MPHB()->getBookingRepository()->findAll( array(
			'room_locked' => true,
			'rooms'       => $linkedRoomIds,
		) );

		$linkedBlocks = BookingUtils::convertToBlocks( $linkedBookings, $this->comment );

		foreach ( $linkedBlocks as $block ) {
			$adminBlocks[] = array(
				'roomTypeId' => $roomTypeId,
				'roomId'     => $roomId,
				'startDate'  => $block['date_from'],
				'endDate'    => $block['date_to'],
				'comment'    => $block['comment'],
			);
		}

		return $adminBlocks;
	}

	/**
	 * @access protected
	 *
	 * @see \MPHB\Core\Data\BookingRulesData::getNotStayInComments()
	 *
	 * @param array $blockComments
	 * @param int $roomTypeId
	 * @param int[] $roomIds
	 * @param ?array $period
	 * @return array [
	 *     room_id (int) => [
	 *         date (string, 'Y-m-d') => 'Comment 1, Comment 2, ...'
	 *     ]
	 * ]
	 */
	public function extendBookingCalendarBlocks( $blockComments, $roomTypeId, $roomIds, $period ) {
		// Skip requests without period
		if ( empty( $period ) ) {
			return $blockComments;
		}

		list( $dateFrom, $dateTo ) = DateUtils::getPeriodRangeDates( $period );

		$linkedRoomIds  = MPHB()->getRoomRepository()->getLinkedRoomIds( $roomIds, 'reverse', true );
		$linkedBookings = static::findLinkedBookingsForRoomType( $dateFrom, $dateTo, $roomTypeId );
		$linkedBlocks   = BookingUtils::convertToBlocks( $linkedBookings, $this->comment );

		foreach ( $linkedBlocks as $block ) {
			$blockLinkedRoomIds = array_intersect( $linkedRoomIds['all'], $block['room_ids'] );
			$periodDates = array_keys( DateUtils::getPeriodDates( $block['date_period'], true ) ); // 'Y-m-d'[]

			foreach ( $blockLinkedRoomIds as $linkedRoomId ) {
				foreach ( $linkedRoomIds[ $linkedRoomId ] as $roomId ) {
					foreach ( $periodDates as $date ) {

						if ( empty( $blockComments[ $roomId ][ $date ] ) ) {
							$blockComments[ $roomId ][ $date ] = $block['comment'];
						} else {
							$blockComments[ $roomId ][ $date ] .= ', ' . $block['comment'];
						}

					}
				}
			}

		}

		return $blockComments;
	}

	/**
	 * @global \wpdb $wpdb
	 *
	 * @return bool
	 */
	public static function hasBookingsForLinkedRooms() {
		global $wpdb;

		// The answer isn't 100% accurate because the query doesn't look for
		// distinct values, but that doesn't matter here - we need at least 1
		$linkedRoomsBooked = (int) $wpdb->get_var( "SELECT COUNT(*) FROM `{$wpdb->posts}` AS `reserved_room` INNER JOIN `{$wpdb->postmeta}` AS `postmeta` ON `postmeta`.`meta_value` = `reserved_room`.`ID` WHERE `postmeta`.`meta_key` = 'mphb_linked_room'" );

		return $linkedRoomsBooked > 0;
	}

	/**
	 * @param DateTime|string $dateFrom
	 * @param DateTime|string $dateTo
	 * @param int $roomTypeId
	 * @return Entities\Booking[]
	 */
	public static function findLinkedBookingsForRoomType( $dateFrom, $dateTo, $roomTypeId ) {
		$linkedRoomIds = static::getLinkedRoomsForRoomType( $roomTypeId );

		return MPHB()->getBookingRepository()->findAllInPeriod( $dateFrom, $dateTo, array(
			'room_locked'         => true,
			'rooms'               => $linkedRoomIds['all'],
			'period_edge_overlap' => array(
				'check_in'  => true,
				'check_out' => false, // Check-outs will create +1 blocked day
			),
		) );
	}

	/**
	 * @param int $roomTypeId
	 * @return array
	 */
	protected static function getLinkedRoomsForRoomType( $roomTypeId ) {
		if ( ! isset( static::$cachedLinkedRoomsByRoomType[ $roomTypeId ] ) ) {
			$roomIds = MPHB()->getRoomRepository()->findIds( array( 'room_type_id' => $roomTypeId ) );

			if ( ! empty( $roomIds ) ) {
				$linkedRoomIds = MPHB()->getRoomRepository()->getLinkedRoomIds( $roomIds, 'reverse', true );

				static::$cachedLinkedRoomsByRoomType[ $roomTypeId ] = $linkedRoomIds;
			} else {
				static::$cachedLinkedRoomsByRoomType[ $roomTypeId ] = array( 'all' => array() );
			}
		}

		return static::$cachedLinkedRoomsByRoomType[ $roomTypeId ];
	}

}


Current_dir [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
admin
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
advanced
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
ajax-api
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
bundles
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
core
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
crons
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
csv
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
emails
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
entities
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
exceptions
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
i-cal
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
libraries
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
payments
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
persistences
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
polyfills
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
post-types
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
reports
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
repositories
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
script-managers
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
settings
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
shortcodes
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
taxes-and-fees
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
upgrades
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
user-actions
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
users-and-roles
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
utils
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
views
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
widgets
--
28 Apr 2026 8.56 AM
builxejc / builxejc
0755
.htaccess
0.41 KB
28 Apr 2026 8.56 AM
builxejc / builxejc
0644
actions-handler.php
2.542 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
ajax.php
27.235 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
attribute-functions.php
6.333 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
autoloader.php
4.519 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
background-pausable-process.php
3.463 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
background-process.php
3.604 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
blocks-render.php
3.347 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
bookings-calendar.php
39.107 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
calendar-feed.php
0.439 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
custom-post-types.php
2.669 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
fixes.php
1.38 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
importer.php
8.159 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
license-notice.php
2.605 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
linked-rooms.php
6.978 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
notices.php
5.03 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
recommendation.php
8.391 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
reservation-request.php
3.533 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
search-parameters-storage.php
5.555 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
session.php
1.361 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
shortcodes.php
3.702 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
translation.php
15.041 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
upgrader.php
24.661 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644
wizard.php
7.841 KB
18 Nov 2024 1.16 PM
builxejc / builxejc
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF