* 'db' - (Horde_Db_Adapter) [REQUIRED] The DB instance.
* 'table' - (string) The name of the alarm table in 'database'.
* DEFAULT: 'horde_alarms'
*
*
* @throws Horde_Alarm_Exception
*/
public function __construct(array $params = array())
{
if (!isset($params['db'])) {
throw new Horde_Alarm_Exception('Missing db parameter.');
}
$this->_db = $params['db'];
unset($params['db']);
$params = array_merge(array(
'table' => 'horde_alarms'
), $params);
parent::__construct($params);
}
/**
* Returns a list of alarms from the backend.
*
* @param string $user Return alarms for this user, all users if
* null, or global alarms if empty.
* @param Horde_Date $time The time when the alarms should be active.
*
* @return array A list of alarm hashes.
* @throws Horde_Alarm_Exception
*/
protected function _list($user, Horde_Date $time)
{
$query = sprintf('SELECT alarm_id, alarm_uid, alarm_start, alarm_end, alarm_methods, alarm_params, alarm_title, alarm_text, alarm_snooze, alarm_internal FROM %s WHERE alarm_dismissed = 0 AND ((alarm_snooze IS NULL AND alarm_start <= ?) OR alarm_snooze <= ?) AND (alarm_end IS NULL OR alarm_end >= ?)%s ORDER BY alarm_start, alarm_end',
$this->_params['table'],
is_null($user) ? '' : ' AND (alarm_uid IS NULL OR alarm_uid = ? OR alarm_uid = ?)');
$dt = $time->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT);
$values = array($dt, $dt, $dt);
if (!is_null($user)) {
$values[] = '';
$values[] = (string)$user;
}
$alarms = array();
try {
$result = $this->_db->select($query, $values);
foreach ($result as $val) {
$alarms[] = $this->_getHash($val);
}
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
return $alarms;
}
/**
* Returns a list of all global alarms from the backend.
*
* @return array A list of alarm hashes.
* @throws Horde_Alarm_Exception
*/
protected function _global()
{
$query = sprintf('SELECT alarm_id, alarm_uid, alarm_start, alarm_end, alarm_methods, alarm_params, alarm_title, alarm_text, alarm_snooze, alarm_internal FROM %s WHERE alarm_uid IS NULL OR alarm_uid = \'\' ORDER BY alarm_start, alarm_end',
$this->_params['table']);
try {
$result = $this->_db->select($query);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
$alarms = array();
foreach ($result as $val) {
$alarms[] = $this->_getHash($val);
}
return $alarms;
}
/**
*/
protected function _getHash(array $alarm)
{
foreach (array('params', 'text', 'internal') as $column) {
if (isset($alarm['alarm_' . $column])) {
$alarm['alarm_' . $column] = $this->_convertBinary(
'alarm_' . $column,
$alarm['alarm_' . $column]
);
}
}
$params = base64_decode($alarm['alarm_params']);
if (!strlen($params) && strlen($alarm['alarm_params'])) {
$params = $alarm['alarm_params'];
}
try {
$params = @unserialize($params);
} catch (Exception $e) {
$params = array();
}
$internal = null;
if (!empty($alarm['alarm_internal'])) {
try {
$internal = @unserialize($alarm['alarm_internal']);
} catch (Exception $e) {}
}
return array(
'id' => $alarm['alarm_id'],
'user' => $alarm['alarm_uid'],
'start' => new Horde_Date($alarm['alarm_start'], 'UTC'),
'end' => empty($alarm['alarm_end']) ? null : new Horde_Date($alarm['alarm_end'], 'UTC'),
'methods' => @unserialize($alarm['alarm_methods']),
'params' => $params,
'title' => $this->_fromDriver($alarm['alarm_title']),
'text' => $this->_fromDriver($alarm['alarm_text']),
'snooze' => empty($alarm['alarm_snooze']) ? null : new Horde_Date($alarm['alarm_snooze'], 'UTC'),
'internal' => $internal
);
}
/**
* 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)
{
$query = sprintf(
'SELECT alarm_id, alarm_uid, alarm_start, alarm_end, alarm_methods, alarm_params, alarm_title, alarm_text, alarm_snooze, alarm_internal FROM %s WHERE alarm_id = ? AND %s',
$this->_params['table'],
!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)'
);
try {
$alarm = $this->_db->selectOne($query, array($id, $user));
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
if (empty($alarm)) {
throw new Horde_Alarm_Exception('Alarm not found');
}
return $this->_getHash($alarm);
}
/**
* Adds an alarm hash to the backend.
*
* @param array $alarm An alarm hash.
*
* @throws Horde_Alarm_Exception
*/
protected function _add(array $alarm)
{
$values = array(
'alarm_id' => $alarm['id'],
'alarm_uid' => isset($alarm['user']) ? $alarm['user'] : '',
'alarm_start' => $alarm['start']->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT),
'alarm_end' => empty($alarm['end']) ? null : $alarm['end']->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT),
'alarm_methods' => serialize($alarm['methods']),
'alarm_params' => new Horde_Db_Value_Text(base64_encode(serialize($alarm['params']))),
'alarm_title' => $this->_toDriver($alarm['title']),
'alarm_text' => empty($alarm['text']) ? null : new Horde_Db_Value_Text($this->_toDriver($alarm['text'])),
'alarm_snooze' => null,
'alarm_instanceid' => empty($alarm['instanceid']) ? null : $alarm['instanceid']
);
try {
$this->_db->insertBlob($this->_params['table'], $values);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* Updates an alarm hash in the backend.
*
* @param array $alarm An alarm hash.
* @param boolean $keepsnooze Whether to keep the snooze value unchanged.
*
* @throws Horde_Alarm_Exception
*/
protected function _update(array $alarm, $keepsnooze = false)
{
$where = array(
sprintf(
'alarm_id = ? AND %s',
isset($alarm['user']) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)'
),
array(
$alarm['id'],
isset($alarm['user']) ? $alarm['user'] : ''
)
);
$values = array(
'alarm_start' => $alarm['start']->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT),
'alarm_end' => empty($alarm['end']) ? null : $alarm['end']->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT),
'alarm_methods' => serialize($alarm['methods']),
'alarm_params' => new Horde_Db_Value_Text(base64_encode(serialize($alarm['params']))),
'alarm_title' => $this->_toDriver($alarm['title']),
'alarm_instanceid' => empty($alarm['instanceid']) ? null : $alarm['instanceid'],
'alarm_text' => empty($alarm['text']) ? null : new Horde_Db_Value_Text($this->_toDriver($alarm['text']))
);
if (!$keepsnooze) {
$values['alarm_snooze'] = null;
$values['alarm_dismissed'] = 0;
}
try {
$this->_db->updateBlob($this->_params['table'], $values, $where);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('UPDATE %s set alarm_internal = ? WHERE alarm_id = ? AND %s',
$this->_params['table'],
!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)');
$values = array(new Horde_Db_Value_Text(serialize($internal)), $id, $user);
try {
$this->_db->update($query, $values);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('SELECT 1 FROM %s WHERE alarm_id = ? AND %s',
$this->_params['table'],
(!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)')
. (!empty($instanceid) ? ' AND alarm_instanceid = ?' : ''));
$params = array($id, $user);
if (!empty($instanceid)) {
$params[] = $instanceid;
}
try {
return ($this->_db->selectValue($query, $params) == 1);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('UPDATE %s set alarm_snooze = ? WHERE alarm_id = ? AND %s',
$this->_params['table'],
!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)');
$values = array($snooze->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT), $id, $user);
try {
$this->_db->update($query, $values);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('SELECT 1 FROM %s WHERE alarm_id = ? AND %s AND (alarm_dismissed = 1 OR (alarm_snooze IS NOT NULL AND alarm_snooze >= ?))',
$this->_params['table'],
!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)');
try {
return $this->_db->selectValue($query, array($id, $user, $time->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT)));
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('UPDATE %s set alarm_dismissed = 1 WHERE alarm_id = ? AND %s',
$this->_params['table'],
!empty($user) ? 'alarm_uid = ?' : '(alarm_uid = ? OR alarm_uid IS NULL)');
$values = array($id, $user);
try {
$this->_db->update($query, $values);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* 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)
{
$query = sprintf('DELETE FROM %s WHERE alarm_id = ?', $this->_params['table']);
$values = array($id);
if (!is_null($user)) {
$query .= empty($user)
? ' AND (alarm_uid IS NULL OR alarm_uid = ?)'
: ' AND alarm_uid = ?';
$values[] = $user;
}
try {
$this->_db->delete($query, $values);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
}
/**
* Garbage collects old alarms in the backend.
*/
protected function _gc()
{
$query = sprintf('DELETE FROM %s WHERE alarm_end IS NOT NULL AND alarm_end < ?', $this->_params['table']);
$end = new Horde_Date(time());
$this->_db->delete($query, array($end->setTimezone('UTC')->format(Horde_Date::DATE_DEFAULT)));
}
/**
* Initialization tasks.
*
* @throws Horde_Alarm_Exception
*/
public function initialize()
{
/* Handle any database specific initialization code to run. */
switch ($this->_db->adapterName()) {
case 'PDO_Oci':
$query = "ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'";
$this->_db->select($query);
break;
case 'PDO_PostgreSQL':
$query = "SET datestyle TO 'iso'";
$this->_db->select($query);
break;
}
}
/**
* Converts a value from the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
protected function _fromDriver($value)
{
return Horde_String::convertCharset($value, $this->_params['charset'], 'UTF-8');
}
/**
* Converts a value to the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
protected function _toDriver($value)
{
return Horde_String::convertCharset($value, 'UTF-8', $this->_params['charset']);
}
/**
* Converts results from TEXT columns to strings.
*
* @param string $column A column name.
* @param mixed $value A TEXT column value.
*
* @return string The column value as plain string.
*/
protected function _convertBinary($column, $value)
{
try {
$columns = $this->_db->columns($this->_params['table']);
} catch (Horde_Db_Exception $e) {
throw new Horde_Alarm_Exception(
Horde_Alarm_Translation::t("Server error when querying database.")
);
}
return $columns[$column]->binaryToString($value);
}
}
Horde_Alarm-2.2.10/lib/Horde/Alarm/Translation.php 0000664 0001750 0001750 00000001762 13113231033 017723 0 ustar jan jan
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL-2.1
* @package Alarm
*/
/**
* Horde_Alarm_Translation class is the translation wrapper class for
* Horde_Alarm.
*
* @author Jan Schneider
* 'logger' - (Horde_Log_Logger) A logger instance.
* 'ttl' - (integer) Time to live value, in seconds.
*
*/
public function __construct(array $params = array())
{
if (isset($params['logger'])) {
$this->_logger = $params['logger'];
unset($params['logger']);
}
if (isset($params['loader'])) {
$this->_loader = $params['loader'];
unset($params['loader']);
}
$this->_params = array_merge($this->_params, $params);
}
/**
* Returns a list of alarms from the backend.
*
* @param string $user Return alarms for this user, all users if
* null, or global alarms if empty.
* @param Horde_Date $time The time when the alarms should be active.
* Defaults to now.
* @param boolean $load Update active alarms from all applications?
* @param boolean $preload Preload alarms that go off within the next
* ttl time span?
*
* @return array A list of alarm hashes.
* @throws Horde_Alarm_Exception
*/
public function listAlarms($user = null, Horde_Date $time = null,
$load = false, $preload = true)
{
if (empty($time)) {
$time = new Horde_Date(time());
}
if ($load && is_callable($this->_loader)) {
call_user_func($this->_loader, $user, $preload);
}
$alarms = $this->_list($user, $time);
foreach (array_keys($alarms) as $alarm) {
if (isset($alarms[$alarm]['mail']['body'])) {
$alarms[$alarm]['mail']['body'] = $this->_fromDriver($alarms[$alarm]['mail']['body']);
}
}
return $alarms;
}
/**
* 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
*/
abstract protected function _list($user, Horde_Date $time);
/**
* Returns a list of all global alarms from the backend.
*
* @return array A list of alarm hashes.
* @throws Horde_Alarm_Exception
*/
public function globalAlarms()
{
$alarms = $this->_global();
foreach (array_keys($alarms) as $alarm) {
if (isset($alarms[$alarm]['mail']['body'])) {
$alarms[$alarm]['mail']['body'] = $this->_fromDriver($alarms[$alarm]['mail']['body']);
}
}
return $alarms;
}
/**
* Returns a list of all global alarms from the backend.
*
* @return array A list of alarm hashes.
*/
abstract protected function _global();
/**
* 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. Contains the following:
*
* id: Unique alarm id.
* user: The alarm's user. Empty if a global alarm.
* start: The alarm start as a Horde_Date.
* end: The alarm end as a Horde_Date.
* methods: The notification methods for this alarm.
* params: The paramters for the notification methods.
* title: The alarm title.
* text: An optional alarm description.
* snooze: The snooze time (next time) of the alarm as a Horde_Date.
* internal: Holds internally used data.
* instanceid: Holds an instance identifier for recurring alarms.
* (@since 2.2.0)
*
* @throws Horde_Alarm_Exception
*/
public function get($id, $user)
{
$alarm = $this->_get($id, $user);
if (isset($alarm['mail']['body'])) {
$alarm['mail']['body'] = $this->_fromDriver($alarm['mail']['body']);
}
return $alarm;
}
/**
* 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
*/
abstract protected function _get($id, $user);
/**
* Stores an alarm hash in the backend.
*
* The alarm will be added if it doesn't exist, and updated otherwise.
*
* @param array $alarm An alarm hash. See self::get() for format.
* @param boolean $keep Whether to keep the snooze value and notification
* status unchanged. If true, the alarm will get
* "un-snoozed", and notifications (like mails) are
* sent again.
*
* @throws Horde_Alarm_Exception
*/
public function set(array $alarm, $keep = false)
{
if (isset($alarm['mail']['body'])) {
$alarm['mail']['body'] = $this->_toDriver($alarm['mail']['body']);
}
// If this is a recurring alarm and we have a new instanceid,
// remove the previous entry regardless of the value of $keep.
// Otherwise, the alarm will never be reset. @since 2.2.0
if (!empty($alarm['instanceid']) &&
!$this->exists($alarm['id'], isset($alarm['user']) ? $alarm['user'] : '', !empty($alarm['instanceid']) ? $alarm['instanceid'] : null)) {
$this->delete($alarm['id'], isset($alarm['user']) ? $alarm['user'] : '');
}
if ($this->exists($alarm['id'], isset($alarm['user']) ? $alarm['user'] : '')) {
$this->_update($alarm, $keep);
if (!$keep) {
foreach ($this->_handlers as &$handler) {
$handler->reset($alarm);
}
}
} else {
$this->_add($alarm);
}
}
/**
* Adds an alarm hash to the backend.
*
* @param array $alarm An alarm hash.
*
* @throws Horde_Alarm_Exception
*/
abstract protected function _add(array $alarm);
/**
* Updates an alarm hash in the backend.
*
* @param array $alarm An alarm hash.
* @param boolean $keepsnooze Whether to keep the snooze value unchanged.
*
* @throws Horde_Alarm_Exception
*/
abstract protected function _update(array $alarm, $keepsnooze = false);
/**
* 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
*/
abstract public function internal($id, $user, array $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 check for.
* @since 2.2.0
*
* @return boolean True if the specified alarm exists.
*/
public function exists($id, $user, $instanceid = null)
{
try {
return $this->_exists($id, $user, $instanceid);
} catch (Horde_Alarm_Exception $e) {
return false;
}
}
/**
* 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
*/
abstract protected function _exists($id, $user, $instanceid = null);
/**
* Delays (snoozes) an alarm for a certain period.
*
* @param string $id The alarm's unique id.
* @param string $user The notified user.
* @param integer $minutes The delay in minutes. A negative value
* dismisses the alarm completely.
*
* @throws Horde_Alarm_Exception
*/
public function snooze($id, $user, $minutes)
{
if (empty($user)) {
throw new Horde_Alarm_Exception('This alarm cannot be snoozed.');
}
$alarm = $this->get($id, $user);
if ($alarm) {
if ($minutes > 0) {
$alarm['snooze'] = new Horde_Date(time());
$alarm['snooze']->min += $minutes;
$this->_snooze($id, $user, $alarm['snooze']);
return;
}
$this->_dismiss($id, $user);
}
}
/**
* 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
*/
abstract protected function _snooze($id, $user, Horde_Date $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.
* Defaults to now.
*
* @return boolean True if the alarm is snoozed.
*
* @throws Horde_Alarm_Exception
*/
public function isSnoozed($id, $user, Horde_Date $time = null)
{
if (is_null($time)) {
$time = new Horde_Date(time());
}
return (bool)$this->_isSnoozed($id, $user, $time);
}
/**
* 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
*/
abstract protected function _isSnoozed($id, $user, Horde_Date $time);
/**
* Dismisses an alarm.
*
* @param string $id The alarm's unique id.
* @param string $user The alarm's user
*
* @throws Horde_Alarm_Exception
*/
abstract protected function _dismiss($id, $user);
/**
* 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
*/
function delete($id, $user = null)
{
$this->_delete($id, $user);
}
/**
* 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
*/
abstract protected function _delete($id, $user = null);
/**
* Notifies the user about any active alarms.
*
* @param string $user Notify this user, all users if null, or guest
* users if empty.
* @param boolean $load Update active alarms from all applications?
* @param boolean $preload Preload alarms that go off within the next
* ttl time span?
* @param array $exclude Don't notify with these methods.
*
* @throws Horde_Alarm_Exception if loading of alarms fails, but not if
* notifying of individual alarms fails.
*/
public function notify($user = null, $load = true, $preload = true,
array $exclude = array())
{
try {
$alarms = $this->listAlarms($user, null, $load, $preload);
} catch (Horde_Alarm_Exception $e) {
if ($this->_logger) {
$this->_logger->log($e, 'ERR');
}
throw $e;
}
if (empty($alarms)) {
return;
}
$handlers = $this->handlers();
foreach ($alarms as $alarm) {
foreach ($alarm['methods'] as $key => $alarm_method) {
if (isset($handlers[$alarm_method]) &&
!in_array($alarm_method, $exclude)) {
try {
$handlers[$alarm_method]->notify($alarm);
} catch (Horde_Alarm_Exception $e) {
$this->_errors[$alarm['id'] . "\0" . $key] = $e;
}
}
}
}
}
/**
* Registers a notification handler.
*
* @param string $name A handler name.
* @param Horde_Alarm_Handler $handler A notification handler.
*/
public function addHandler($name, Horde_Alarm_Handler $handler)
{
$this->_handlers[$name] = $handler;
$handler->alarm = $this;
}
/**
* Returns a list of available notification handlers and parameters.
*
* The returned list is a hash with method names as the keys and
* optionally associated parameters as values. The parameters are hashes
* again with parameter names as keys and parameter information as
* values. The parameter information is hash with the following keys:
* 'desc' contains a parameter description; 'required' specifies whether
* this parameter is required.
*
* @return array List of methods and parameters.
*/
public function handlers()
{
if (!$this->_handlersLoaded) {
foreach (new DirectoryIterator(__DIR__ . '/Alarm/Handler') as $file) {
if (!$file->isFile() || substr($file->getFilename(), -4) != '.php') {
continue;
}
$handler = Horde_String::lower($file->getBasename('.php'));
if (isset($this->_handlers[$handler])) {
continue;
}
require_once $file->getPathname();
$class = 'Horde_Alarm_Handler_' . $file->getBasename('.php');
if (class_exists($class, false)) {
$this->addHandler($handler, new $class());
}
}
$this->_handlerLoaded = true;
}
return $this->_handlers;
}
/**
* Returns a list of errors, exceptions etc. that occured during notify()
* calls.
*
* @since Horde_Alarm 2.1.0
* @since Horde_Alarm 2.2.9 the keys consist of the alarm id concatenated
* with a NUL character and an alarm method key.
*
* @return array Error list.
*/
public function getErrors()
{
return $this->_errors;
}
/**
* Garbage collects old alarms in the backend.
*
* @param boolean $force Force garbace collection? If false, GC happens
* with a 1% chance.
*
* @throws Horde_Alarm_Exception
*/
public function gc($force = false)
{
/* A 1% chance we will run garbage collection during a call. */
if ($force || rand(0, 99) == 0) {
$this->_gc();
}
}
/**
* Garbage collects old alarms in the backend.
*
* @throws Horde_Alarm_Exception
*/
abstract protected function _gc();
/**
* Attempts to initialize the backend.
*
* @throws Horde_Alarm_Exception
*/
abstract public function initialize();
/**
* Converts a value from the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
abstract protected function _fromDriver($value);
/**
* Converts a value to the driver's charset.
*
* @param mixed $value Value to convert.
*
* @return mixed Converted value.
*/
abstract protected function _toDriver($value);
}
Horde_Alarm-2.2.10/locale/ar/LC_MESSAGES/Horde_Alarm.mo 0000664 0001750 0001750 00000000674 13113231033 020212 0 ustar jan jan , <