Uname: Linux webm005.cluster107.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
User: 6036 (villadal)
Group: 100 (users)
Disabled functions: NONE
Safe mode: On[ PHPinfo ]
//home/villadal/www/old///////booked/Presenters/      ( Reset | Go to )
File Name: SchedulePageBuilder.php
Edit
<?php
/**
Copyright 2011-2014 Nick Korbel

This file is part of Booked Scheduler.

Booked Scheduler is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Booked Scheduler is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Booked Scheduler.  If not, see <http://www.gnu.org/licenses/>.
 */


interface ISchedulePageBuilder
{
    
/**
     * @param ISchedulePage $page
     * @param array[int]ISchedule $schedules
     * @param ISchedule $currentSchedule
     */
    
public function BindSchedules(ISchedulePage $page$schedules$currentSchedule);

    
/**
     * @param ISchedulePage $page
     * @param ISchedule[] $schedules
     * @param UserSession $user
     * @return Schedule
     */
    
public function GetCurrentSchedule(ISchedulePage $page$schedulesUserSession $user);

    
/**
     * Returns range of dates to bind in UTC
     * @param UserSession $userSession
     * @param ISchedule $schedule
     * @param ISchedulePage $page
     * @return DateRange
     */
    
public function GetScheduleDates(UserSession $userSessionISchedule $scheduleISchedulePage $page);

    
/**
     * @param ISchedulePage $page
     * @param DateRange $dateRange display dates
     * @param UserSession $userSession
     * @param ISchedule $schedule
     */
    
public function BindDisplayDates(ISchedulePage $pageDateRange $dateRangeUserSession $userSession,
                                     
ISchedule $schedule);

    
/**
     * @param ISchedulePage $page
     * @param array[int]ResourceDto $resources
     * @param IDailyLayout $dailyLayout
     */
    
public function BindReservations(ISchedulePage $page$resourcesIDailyLayout $dailyLayout);

    
/**
     * @param ISchedulePage $page
     * @param ResourceGroupTree $resourceGroupTree
     */
    
public function BindResourceGroups(ISchedulePage $pageResourceGroupTree $resourceGroupTree);

    
/**
     * @param ISchedulePage $page
     * @param ResourceType[] $resourceTypes
     */
    
public function BindResourceTypes(ISchedulePage $page$resourceTypes);

    
/**
     * @param int $scheduleId
     * @param ISchedulePage $page
     * @return int
     */
    
public function GetGroupId($scheduleIdISchedulePage $page);

    
/**
     * @param int $scheduleId
     * @param ISchedulePage $page
     * @return int
     */
    
public function GetResourceId($scheduleIdISchedulePage $page);

    
/**
     * @param int $scheduleId
     * @param ISchedulePage $page
     * @return ScheduleResourceFilter
     */
    
public function GetResourceFilter($scheduleIdISchedulePage $page);

    
/**
     * @param ISchedulePage $page
     * @param ScheduleResourceFilter $filter
     * @param Attribute[] $resourceCustomAttributes
     * @param Attribute[] $resourceTypeCustomAttributes
     */
    
public function BindResourceFilter(ISchedulePage $pageScheduleResourceFilter $filter$resourceCustomAttributes,
                                       
$resourceTypeCustomAttributes);
}

class 
SchedulePageBuilder implements ISchedulePageBuilder
{
    
/**
     * @param ISchedulePage $page
     * @param array[int]ISchedule $schedules
     * @param ISchedule $currentSchedule
     */
    
public function BindSchedules(ISchedulePage $page$schedules$currentSchedule)
    {
        
$scheduleId $currentSchedule->GetId();
        
$page->SetSchedules($schedules);
        
$page->SetScheduleId($scheduleId);
        
$page->SetScheduleName($currentSchedule->GetName());
        
$page->SetFirstWeekday($currentSchedule->GetWeekdayStart());
        
$style $page->GetScheduleStyle($scheduleId);
        
$page->SetScheduleStyle($style);
        if (
$currentSchedule->GetIsCalendarSubscriptionAllowed())
        {
            
$page->SetSubscriptionUrl(new CalendarSubscriptionUrl(null$currentSchedule->GetPublicId(), null));
        }
    }

    
/**
     * @param ISchedulePage $page
     * @param ISchedule[] $schedules
     * @param UserSession $user
     * @return Schedule
     */
    
public function GetCurrentSchedule(ISchedulePage $page$schedulesUserSession $user)
    {
        
$requestedScheduleId $page->GetScheduleId();
        if (!empty(
$requestedScheduleId))
        {
            
$schedule $this->GetSchedule($schedules$page->GetScheduleId());
        }
        elseif (!empty(
$user->ScheduleId))
        {
            
$schedule $this->GetSchedule($schedules$user->ScheduleId);
            if (
$schedule->GetId() != $user->ScheduleId)
            {
                
$schedule $this->GetDefaultSchedule($schedules);
            }
        }
        else
        {
            
$schedule $this->GetDefaultSchedule($schedules);
        }

        return 
$schedule;
    }

    
/**
     * @see ISchedulePageBuilder::GetScheduleDates()
     */
    
public function GetScheduleDates(UserSession $userISchedule $scheduleISchedulePage $page)
    {
        
$userTimezone $user->Timezone;
        
$providedDate $page->GetSelectedDate();
        
$date = empty($providedDate) ? Date::Now() : new Date($providedDate$userTimezone);
        
$selectedDate $date
                        
->ToTimezone($userTimezone)
                        ->
GetDate();
        
$selectedWeekday $selectedDate->Weekday();

        
$scheduleLength $schedule->GetDaysVisible();

        if (
$page->GetShowFullWeek())
        {
            
$scheduleLength 7;
        }

        
/**
         *  Examples
         *
         *  if we are on 3 and we need to start on 6, we need to go back 4 days
         *  if we are on 3 and we need to start on 5, we need to go back 5 days
         *  if we are on 3 and we need to start on 4, we need to go back 6 days
         *  if we are on 3 and we need to start on 3, we need to go back 0 days
         *  if we are on 3 and we need to start on 2, we need to go back 1 days
         *  if we are on 3 and we need to start on 1, we need to go back 2 days
         *  if we are on 3 and we need to start on 0, we need to go back 3 days
         */

        
$startDay $schedule->GetWeekdayStart();

        if (
$startDay == Schedule::Today)
        {
            
$startDate $selectedDate;
        }
        else
        {
            
$adjustedDays = ($startDay $selectedWeekday);

            if (
$selectedWeekday $startDay)
            {
                
$adjustedDays $adjustedDays 7;
            }

            
$startDate $selectedDate->AddDays($adjustedDays);
        }

        
$applicableDates = new DateRange($startDate$startDate->AddDays($scheduleLength));

        return 
$applicableDates;
    }

    
/**
     * @see ISchedulePageBuilder::BindDisplayDates()
     */
    
public function BindDisplayDates(ISchedulePage $page,
                                     
DateRange $dateRange,
                                     
UserSession $userSession,
                                     
ISchedule $schedule)
    {
        
$scheduleLength $schedule->GetDaysVisible();
        if (
$page->GetShowFullWeek())
        {
            
$scheduleLength 7;
        }

        
// we don't want to display the last date in the range (it will be midnight of the last day)
        
$adjustedDateRange = new DateRange($dateRange
                                           
->GetBegin()
                                           ->
ToTimezone($userSession->Timezone), $dateRange
                                                                                 
->GetEnd()
                                                                                 ->
ToTimezone($userSession->Timezone)
                                                                                 ->
AddDays(-1));

        
$page->SetDisplayDates($adjustedDateRange);

        
$startDate $adjustedDateRange->GetBegin();

        
$startDay $schedule->GetWeekdayStart();

        if (
$startDay == Schedule::Today)
        {
            
$adjustment $scheduleLength;
            
$prevAdjustment $scheduleLength;
        }
        else
        {
            
$adjustment max($scheduleLength7);
            
$prevAdjustment floor($adjustment 7); // ie, if 10, we only want to go back 7 days so there is overlap
        
}

        
$page->SetPreviousNextDates($startDate->AddDays(-$prevAdjustment), $startDate->AddDays($adjustment));
        
$page->ShowFullWeekToggle($scheduleLength 7);
    }

    
/**
     * @see ISchedulePageBuilder::BindReservations()
     */
    
public function BindReservations(ISchedulePage $page$resourcesIDailyLayout $dailyLayout)
    {
        
$page->SetResources($resources);
        
$page->SetDailyLayout($dailyLayout);
    }

    
/**
     * @param array|Schedule[] $schedules
     * @return Schedule
     */
    
private function GetDefaultSchedule($schedules)
    {
        foreach (
$schedules as $schedule)
        {
            if (
$schedule->GetIsDefault())
            {
                return 
$schedule;
            }
        }

        return 
$schedules[0];
    }

    
/**
     * @param array|Schedule[] $schedules
     * @param int $scheduleId
     * @return Schedule
     */
    
private function GetSchedule($schedules$scheduleId)
    {
        foreach (
$schedules as $schedule)
        {
            
/** @var $schedule Schedule */
            
if ($schedule->GetId() == $scheduleId)
            {
                return 
$schedule;
            }
        }

        return 
$schedules[0];
    }

    public function 
BindResourceGroups(ISchedulePage $pageResourceGroupTree $resourceGroupTree)
    {
        
$page->SetResourceGroupTree($resourceGroupTree);
    }

    public function 
GetGroupId($scheduleIdISchedulePage $page)
    {
        
$groupId $page->GetGroupId();
        if (!empty(
$groupId))
        {
            return 
$groupId;
        }

        
$cookie $this->getTreeCookie($scheduleId);

        if (!empty(
$cookie))
        {
            if (
strpos($cookie'-') === false)
            {
                return 
$groupId;
            }
        }

        return 
null;
    }

    public function 
GetResourceId($scheduleIdISchedulePage $page)
    {
        
$resourceId $page->GetResourceId();

        if (!empty(
$resourceId))
        {
            return 
$resourceId;
        }

        
$cookie $this->getTreeCookie($scheduleId);

        if (!empty(
$cookie))
        {
            if (
strpos($cookie'-') !== false)
            {
                
$parts explode('-'$cookie);
                return 
$parts[2];
            }
        }

        return 
null;
    }

    private function 
getTreeCookie($scheduleId)
    {
        
$cookie ServiceLocator::GetServer()
                  ->
GetCookie('tree' $scheduleId);
        if (!empty(
$cookie))
        {
            
$val json_decode($cookietrue);
            return 
$val['selected_node'];
        }

        return 
null;
    }

    public function 
BindResourceTypes(ISchedulePage $page$resourceTypes)
    {
        
$page->SetResourceTypes($resourceTypes);
    }

    
/**
     * @param int $scheduleId
     * @param ISchedulePage $page
     * @return ScheduleResourceFilter
     */
    
public function GetResourceFilter($scheduleIdISchedulePage $page)
    {
        
$filter = new ScheduleResourceFilter();
        if (
$page->FilterSubmitted())
        {
            
$filter = new ScheduleResourceFilter($scheduleId,
                                                 
$page->GetResourceTypeId(),
                                                 
$page->GetMaxParticipants(),
                                                 
$this->AsAttributeValues($page->GetResourceAttributes()),
                                                 
$this->AsAttributeValues($page->GetResourceTypeAttributes()));
        }
        else
        {
            
$cookie ServiceLocator::GetServer()
                      ->
GetCookie('resource_filter' $scheduleId);
            if (!empty(
$cookie))
            {
                
$val json_decode($cookie);
                
$filter ScheduleResourceFilter::FromCookie($val);
            }
        }

        
$filter->ScheduleId $scheduleId;
        
$filter->ResourceId $this->GetResourceId($scheduleId$page);
        
$filter->GroupId $this->GetGroupId($scheduleId$page);

        return 
$filter;
    }

    public function 
BindResourceFilter(ISchedulePage $pageScheduleResourceFilter $filter$resourceCustomAttributes,
                                       
$resourceTypeCustomAttributes)
    {
        if (
$filter->ResourceAttributes != null)
        {
            foreach (
$filter->ResourceAttributes as $attributeFilter)
            {
                
$this->SetAttributeValue($attributeFilter$resourceCustomAttributes);
            }
        }

        if (
$filter->ResourceTypeAttributes != null)
        {
            foreach (
$filter->ResourceTypeAttributes as $attributeFilter)
            {
                
$this->SetAttributeValue($attributeFilter$resourceTypeCustomAttributes);
            }
        }

        
$page->SetResourceCustomAttributes($resourceCustomAttributes);
        
$page->SetResourceTypeCustomAttributes($resourceTypeCustomAttributes);

        
ServiceLocator::GetServer()
        ->
SetCookie(new Cookie('resource_filter' $filter->ScheduleIdjson_encode($filter)));
        
$page->SetFilter($filter);
    }

    
/**
     * @param $attributeFormElements AttributeFormElement[]
     * @return AttributeValue[]
     */
    
private function AsAttributeValues($attributeFormElements)
    {
        
$vals = array();
        foreach (
$attributeFormElements as $e)
        {
            if (!empty(
$e->Value))
            {
                
$vals[] = new AttributeValue($e->Id$e->Value);
            }
        }
        return 
$vals;
    }

    
/**
     * @param AttributeValue $attributeFilter
     * @param Attribute[] $attributes
     */
    
private function SetAttributeValue($attributeFilter$attributes) {

        foreach (
$attributes as $attribute)
        {
            if (
$attributeFilter->AttributeId == $attribute->Id())
            {
                
$attribute->SetValue($attributeFilter->Value);
                break;
            }
        }
    }
}

?>

All system for education purposes only. For more tools: Telegram @jackleet

Mr.X Private Shell

Logo
-
New File | New Folder
Command
SQL