⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.50
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-horde
/
kronolith
/
lib
/
Resource
/
Edit File: Base.php
<?php /** * Base class for Kronolith resources. Partially presents a Horde_Share_Object * interface. * * Copyright 2009-2017 Horde LLC (http://www.horde.org/) * * See the enclosed file COPYING for license information (GPL). If you * did not receive this file, see http://www.horde.org/licenses/gpl. * * @author Michael J Rubinsky <mrubinsk@horde.org> * @package Kronolith */ abstract class Kronolith_Resource_Base { /** * Instance copy of parameters * Contains: *<pre> * -:name - Display name of resource. * -:calendar - The calendar associated with this resource. * -:description - Resource description. * -:email - An email address for the resource. (Currently not used) * -:members - Member resources, if this is a group. * -:response_type - A RESPONSETYPE_* constant *</pre> * @var array */ protected $_params = array(); /** * Resource's internal id * * @var integer */ protected $_id = ''; /** * Const'r * * @param array $params * * @return Kronolith_Resource_Base */ public function __construct(array $params = array()) { if (!empty($params['id'])) { // Existing resource $this->_id = $params['id']; } // Names are required. if (empty($params['name'])) { throw new BadMethodCallException('Required \'name\' attribute missing from resource calendar'); } $this->_params = array_merge( array('description' => '', 'response_type' => Kronolith_Resource::RESPONSETYPE_MANUAL, 'members' => '', 'calendar' => '', 'email' => '' ), $params ); } /** * Obtain the resource's internal identifier. * * @return string The id. */ public function getId() { return $this->_id; } /** * Allow setting of properties * * @param string $property The property to set * @param mixed $value The value to set to * * @return void */ public function set($property, $value) { $this->_params[$property] = $value; } /** * Return permission for the specified user for this Resource. * * @param string $user The user to check for. * @param integer $permission The permission to check. * @param $restrict * * @return boolean */ public function hasPermission($user, $permission = Horde_Perms::READ, $restrict = null) { if (($permission & (Horde_Perms::EDIT | Horde_Perms::DELETE)) && !$GLOBALS['registry']->isAdmin() && !$GLOBALS['injector']->getInstance('Horde_Core_Perms')->hasAppPermission('resource_management')) { return false; } return true; } /** * Implemented to stand in as a share object. * * @param string $property The property to get * * @return mixed The value of $property */ public function get($property) { $property = str_replace('resource_', '', $property); if ($property == 'type' && empty($this->_params['type'])) { return ($this instanceof Kronolith_Resource_Single) ? 'Single' : 'Group'; } if (!array_key_exists($property, $this->_params)) { throw new LogicException(sprintf('The property \'%s\' does not exist', $property)); } return $this->_params[$property]; } /** * Save resource to storage. * * @return Kronolith_Resource_Base */ public function save() { return $this->getDriver()->save($this); } /** * Get a storage driver instance for the resource. * * @return Kronolith_Driver_Resource_* object. */ public function getDriver() { if (!$this->get('calendar')) { return Kronolith::getDriver('Resource'); } else { return Kronolith::getDriver('Resource', $this->get('calendar')); } } /** * Check availability and return an appropriate Kronolith response code. * * @param Kronolith_Event $event The event to check on * * @return integer Kronolith::RESPONSE* constant */ public function getResponse(Kronolith_Event $event) { switch($this->getResponseType()) { case Kronolith_Resource::RESPONSETYPE_ALWAYS_ACCEPT: return Kronolith::RESPONSE_ACCEPTED; case Kronolith_Resource::RESPONSETYPE_AUTO: if ($this->isFree($event)) { return Kronolith::RESPONSE_ACCEPTED; } else { return Kronolith::RESPONSE_DECLINED; } case Kronolith_Resource::RESPONSETYPE_ALWAYS_DECLINE: return Kronolith::RESPONSE_DECLINED; case Kronolith_Resource::RESPONSETYPE_NONE: case Kronolith_Resource::RESPONSETYPE_MANUAL: return Kronolith::RESPONSE_NONE; } } /** * Return this resource's parameters in a hash. * * @return array A hash suitable for JSON encoding. */ public function toJson() { return $this->_params; } /** * Determine if event is free for specified time * * @param Kronolith_Event $event The event we want to check the * resource's availability for. * * @return boolean True if the resource is free, false if not. */ abstract public function isFree(Kronolith_Event $event); /** * Adds $event to this resource's calendar - thus blocking the time * for any other event. * * @param Kronolith_Event $event The event to add to this resource's * calendar, thus blocking it's availability. * * @throws Kronolith_Exception */ abstract public function addEvent(Kronolith_Event $event); /** * Remove this event from resource's calendar * * @param Kronolith_Event $event The event to remove from the resource's * calendar. */ abstract public function removeEvent(Kronolith_Event $event); /** * Obtain the freebusy information for this resource. Takes into account * if this is a group of resources or not. (Returns the cumulative FB info * for all the resources in the group. * * @param integer $startstamp The starting timestamp of the fb interval. * @param integer $endstamp The ending timestamp of the fb interval. * @param boolean $asObject Return the fb info as an object? * @param boolean $json Return the fb info as JSON? * * @return mixed string|Horde_Icalendar_Vfreebusy The Freebusy object or * the iCalendar text. */ abstract public function getFreeBusy($startstamp = null, $endstamp = null, $asObject = false, $json = false); /** * Sets the current resource's id. Must not be an existing resource. * * @param integer $id The id for this resource * * @throws Kronolith_Exception */ abstract public function setId($id); /** * Get ResponseType for this resource. * * @return integer The response type for this resource. A * Kronolith_Resource::RESPONSE_TYPE_* constant. */ abstract public function getResponseType(); }
Simpan