Files
server/usr/share/psa-horde/ingo/lib/Ingo.php
2026-01-07 20:52:11 +01:00

211 lines
5.4 KiB
PHP

<?php
/**
* Copyright 2002-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/apache.
*
* @category Horde
* @copyright 2002-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
/**
* Ingo base class.
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @copyright 2002-2017 Horde LLC
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
class Ingo
{
/**
* String that can't be a valid folder name used to mark blacklisted email
* as deleted.
*/
const BLACKLIST_MARKER = '++DELETE++';
/**
* Define the key to use to indicate a user-defined header is requested.
*/
const USER_HEADER = '++USER_HEADER++';
/**
* Only filter unseen messages.
*/
const FILTER_UNSEEN = 1;
/**
* Only filter seen messages.
*/
const FILTER_SEEN = 2;
/**
* Constants for rule types.
*/
const RULE_ALL = 0;
const RULE_FILTER = 1;
const RULE_BLACKLIST = 2;
const RULE_WHITELIST = 3;
const RULE_VACATION = 4;
const RULE_FORWARD = 5;
const RULE_SPAM = 6;
/**
* Returns the user whose rules are currently being edited.
*
* @param boolean $full Always return the full user name with realm?
*
* @return string The current user.
*/
static public function getUser($full = true)
{
global $injector, $registry, $session;
if (!$injector->getInstance('Ingo_Shares')) {
return $registry->getAuth($full ? null : 'bare');
}
list(, $user) = explode(':', $session->get('ingo', 'current_share'), 2);
return $user;
}
/**
* Returns the domain name, if any of the user whose rules are currently
* being edited.
*
* @return string The current user's domain name.
*/
static public function getDomain()
{
$user = self::getUser(true);
$pos = strpos($user, '@');
return ($pos === false)
? false
: substr($user, $pos + 1);
}
/**
* Check share permissions.
*
* @param $integer $mask Permission mask.
*
* @return boolean True if user has permission.
*/
static public function hasSharePermission($mask = null)
{
global $injector, $registry, $session;
return ($share = $injector->getInstance('Ingo_Shares'))
? $share->getShare($session->get('ingo', 'current_share'))
->hasPermission($registry->getAuth(), $mask)
: true;
}
/**
* Updates a list (blacklist/whitelist) filter.
*
* @param mixed $addresses Addresses of the filter.
* @param integer $type Type of filter.
*
* @return Horde_Storage_Rule The filter object.
*/
static public function updateListFilter($addresses, $type)
{
global $injector;
$storage = $injector->getInstance('Ingo_Factory_Storage')->create();
$rule = $storage->retrieve($type);
switch ($type) {
case $storage::ACTION_BLACKLIST:
$rule->setBlacklist($addresses);
$addr = $rule->getBlacklist();
$rule2 = $storage->retrieve($storage::ACTION_WHITELIST);
$addr2 = $rule2->getWhitelist();
break;
case $storage::ACTION_WHITELIST:
$rule->setWhitelist($addresses);
$addr = $rule->getWhitelist();
$rule2 = $storage->retrieve($storage::ACTION_BLACKLIST);
$addr2 = $rule2->getBlacklist();
break;
}
/* Filter out the rule's addresses in the opposite filter. */
$ob = new Horde_Mail_Rfc822_List($addr2);
$ob->setIteratorFilter(0, $addr);
switch ($type) {
case $storage::ACTION_BLACKLIST:
$rule2->setWhitelist($ob->bare_addresses);
break;
case $storage::ACTION_WHITELIST:
$rule2->setBlacklist($ob->bare_addresses);
break;
}
$storage->store($rule);
$storage->store($rule2);
return $rule;
}
/**
* Loads the backends.php configuration file.
*
* @return array Configuration data.
* @throws Horde_Exception
*/
static public function loadBackends()
{
global $registry;
$config = $registry->loadConfigFile('backends.php', 'backends', 'ingo');
if (empty($config->config['backends']) ||
!is_array($config->config['backends'])) {
throw new Ingo_Exception(_("No backends configured in backends.php"));
}
$out = array();
foreach ($config->config['backends'] as $key => $val) {
if (empty($val['disabled'])) {
$out[$key] = $val;
}
}
return $out;
}
/**
* Return Ingo's initial page.
*
* @return Horde_Url URL object.
*/
static public function getInitialPage()
{
global $registry;
switch ($registry->getView()) {
case $registry::VIEW_SMARTMOBILE:
return Horde::url('smartmobile.php');
default:
if ($initial_page = $registry->get('initial_page')) {
return Horde::url($registry->get('webroot') . '/' . $initial_page);
}
return Ingo_Basic_Filters::url();
}
}
}