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

117 lines
3.4 KiB
PHP

<?php
/**
* Copyright 2012-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.
*
* @category Horde
* @copyright 2012-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
/**
* Common code dealing with quota UI display.
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2012-2017 Horde LLC
* @license http://www.horde.org/licenses/gpl GPL
* @package IMP
*/
class IMP_Quota_Ui
{
/** Session key for interval data. */
const SESSION_INTERVAL_KEY = 'quota_interval';
/**
* Returns data needed to output quota.
*
* @param string $mailbox Mailbox to query.
* @param boolean $force If true, ignore 'interval' config option and
* force quota display.
*
* @return array|boolean Array with these keys: class, message, percent.
* Returns false if no updated quota information.
*/
public function quota($mailbox = null, $force = true)
{
global $injector, $session;
$qconfig = $injector->getInstance('IMP_Factory_Imap')->create()->config->quota;
if (!$qconfig) {
return false;
}
$qlist = array();
if (!is_null($mailbox)) {
$mailbox = IMP_Mailbox::get($mailbox);
if ($mailbox->nonimap) {
return false;
}
if (!$force) {
$qlist = $session->get(
'imp',
self::SESSION_INTERVAL_KEY,
$session::TYPE_ARRAY
);
if (isset($qlist[strval($mailbox)]) &&
(time() < $qlist[strval($mailbox)])) {
return false;
}
}
}
try {
$quotaDriver = $injector->getInstance('IMP_Quota');
$quota = $quotaDriver->getQuota($mailbox);
} catch (IMP_Exception $e) {
Horde::log($e, 'ERR');
return false;
}
$qlist[strval($mailbox)] = $qconfig['params']['interval'] + time();
$session->set('imp', self::SESSION_INTERVAL_KEY, $qlist);
if (empty($quota)) {
return false;
}
$strings = $quotaDriver->getMessages();
list($calc, $unit) = $quotaDriver->getUnit();
$ret = array(
'class' => '',
'percent' => 0
);
if ($quota['limit'] != 0) {
$quota['usage'] = $quota['usage'] / $calc;
$quota['limit'] = $quota['limit'] / $calc;
$ret['percent'] = ($quota['usage'] * 100) / $quota['limit'];
if ($ret['percent'] >= 90) {
$ret['class'] = 'quotaalert';
} elseif ($ret['percent'] >= 75) {
$ret['class'] = 'quotawarn';
}
$ret['message'] = sprintf($strings['short'], $ret['percent'], $quota['limit'], $unit);
$ret['percent'] = sprintf("%.2f", $ret['percent']);
} elseif ($quotaDriver->isHiddenWhenUnlimited()) {
return false;
} elseif ($quota['usage'] != 0) {
$quota['usage'] = $quota['usage'] / $calc;
$ret['message'] = sprintf($strings['nolimit_short'], $quota['usage'], $unit);
} else {
$ret['message'] = _("No limit");
}
return $ret;
}
}