Files
server/usr/share/psa-pear/pear/php/Horde/Alarm/Object.php
2026-01-07 20:52:11 +01:00

299 lines
8.2 KiB
PHP

<?php
/**
* Copyright 2010-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL-2.1
* @package Alarm
*/
/**
* The Horde_Alarm_Object class is a Horde_Alarm storage implementation using
* an object instance.
*
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @copyright 2010-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL-2.1
* @package Alarm
*/
class Horde_Alarm_Object extends Horde_Alarm
{
protected $_alarms = array();
/**
* Returns a certain alarm.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
* @param string $instanceid An optional instanceid to match.
*
*
* @return array An alarm hash.
*/
protected function &_findAlarm($id, $user, $instanceid = null)
{
foreach ($this->_alarms as &$alarm) {
if ($alarm['id'] == $id && $alarm['user'] === $user) {
if (empty($instanceid) || (!empty($instanceid) && $alarm['instanceid'] == $instanceid)) {
return $alarm;
}
}
}
$result = null;
return $result;
}
/**
* Sorts a number of alarms in chronological order.
*/
protected function _sortAlarms($a, $b)
{
$cmp = $a['start']->compareDateTime($b['start']);
if ($cmp) {
return $cmp;
}
if (empty($a['end'])) {
return -1;
}
if (empty($b['end'])) {
return 1;
}
return $a['end']->compareDateTime($b['end']);
}
/**
* Returns a list of alarms from the backend.
*
* @param Horde_Date $time The time when the alarms should be active.
* @param string $user Return alarms for this user, all users if
* null, or global alarms if empty.
*
* @return array A list of alarm hashes.
* @throws Horde_Alarm_Exception
*/
protected function _list($user, Horde_Date $time)
{
$alarms = array();
foreach ($this->_alarms as $alarm) {
if (empty($alarm['dismissed']) &&
((empty($alarm['snooze']) && $alarm['start']->compareDateTime($time) <= 0) ||
$alarm['snooze']->compareDateTime($time) <= 0) &&
(empty($alarm['end']) || $alarm['end']->compareDateTime($time) >= 0) &&
(is_null($user) || empty($alarm['uid']) || $alarm['uid'] = $user)) {
$alarms[] = $alarm;
}
}
usort($alarms, array($this, '_sortAlarms'));
return $alarms;
}
/**
* Returns a list of all global alarms from the backend.
*
* @return array A list of alarm hashes.
*/
protected function _global()
{
return array();
}
/**
* Returns an alarm hash from the backend.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user.
*
* @return array An alarm hash.
* @throws Horde_Alarm_Exception
*/
protected function _get($id, $user)
{
$alarm = $this->_findAlarm($id, $user);
if (!$alarm) {
throw new Horde_Alarm_Exception('Alarm not found');
}
return $alarm;
}
/**
* Adds an alarm hash to the backend.
*
* @param array $alarm An alarm hash.
*/
protected function _add(array $alarm)
{
$alarm = array_merge(
array('user' => '',
'end' => null,
'text' => null,
'snooze' => null,
'internal' => null),
$alarm);
$this->_alarms[] = $alarm;
}
/**
* Updates an alarm hash in the backend.
*
* @param array $alarm An alarm hash.
* @param boolean $keepsnooze Whether to keep the snooze value unchanged.
*/
protected function _update(array $alarm, $keepsnooze = false)
{
$user = isset($alarm['user']) ? $alarm['user'] : null;
$al = &$this->_findAlarm($alarm['id'], $user);
foreach (array('start', 'end', 'methods', 'params', 'title', 'text') as $property) {
$al[$property] = isset($alarm[$property]) ? $alarm[$property] : null;
}
if (!$keepsnooze) {
$al['snooze'] = null;
}
}
/**
* Updates internal alarm properties, i.e. properties not determined by
* the application setting the alarm.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
* @param array $internal A hash with the internal data.
*
* @throws Horde_Alarm_Exception
*/
public function internal($id, $user, array $internal)
{
$alarm = &$this->_findAlarm($id, $user);
$alarm['internal'] = $internal;
}
/**
* Returns whether an alarm with the given id exists already.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
* @param string $instanceid An optional instanceid to match.
*
* @return boolean True if the specified alarm exists.
* @throws Horde_Alarm_Exception
*/
protected function _exists($id, $user, $instanceid = null)
{
return (bool)$this->_findAlarm($id, $user, $instanceid);
}
/**
* Delays (snoozes) an alarm for a certain period.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
* @param Horde_Date $snooze The snooze time.
*
* @throws Horde_Alarm_Exception
*/
protected function _snooze($id, $user, Horde_Date $snooze)
{
$alarm = &$this->_findAlarm($id, $user);
$alarm['snooze'] = $snooze;
}
/**
* Returns whether an alarm is snoozed.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
* @param Horde_Date $time The time when the alarm may be snoozed.
*
* @return boolean True if the alarm is snoozed.
* @throws Horde_Alarm_Exception
*/
protected function _isSnoozed($id, $user, Horde_Date $time)
{
$alarm = $this->_findAlarm($id, $user);
return !empty($alarm['dismissed']) ||
(isset($alarm['snooze']) &&
$alarm['snooze']->compareDateTime($time) >= 0);
}
/**
* Dismisses an alarm.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
*
* @throws Horde_Alarm_Exception
*/
protected function _dismiss($id, $user)
{
$alarm = &$this->_findAlarm($id, $user);
$alarm['dismissed'] = true;
}
/**
* Deletes an alarm from the backend.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user. All users' alarms if null.
*
* @throws Horde_Alarm_Exception
*/
protected function _delete($id, $user = null)
{
$newAlarms = array();
foreach ($this->_alarms as &$alarm) {
if ($alarm['id'] != $id ||
(!is_null($user) && $alarm['user'] != $user)) {
$newAlarms[] = $alarm;
}
}
$this->_alarms = $newAlarms;
}
/**
* Garbage collects old alarms in the backend.
*
* @throws Horde_Alarm_Exception
*/
protected function _gc()
{
}
/**
* Attempts to initialize the backend.
*
* @throws Horde_Alarm_Exception
*/
public function initialize()
{
}
/**
* Converts a value from the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
protected function _fromDriver($value)
{
return $value;
}
/**
* Converts a value to the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
protected function _toDriver($value)
{
return $value;
}
}