[cvs] [Wiki] changed: AltQuota
Wiki Guest
wikiguest at horde.org
Tue Jun 29 01:45:25 UTC 2010
guest [189.106.174.94] Mon, 28 Jun 2010 21:45:25 -0400
Modified page: http://wiki.horde.org/AltQuota
New Revision: 1.1
Change log: Correcting buffer overflow on paste
@@ -310,56 +310,10 @@
> Alerts quota exceeded, grace time or expired;
> Alerts almost full;
> Normal quota information.
-Backup your original imp/lib/Quota.php and create a new Quota.php
with the following code:
+Backup your original imp/lib/Quota.php. Edit Quota.php and replace
functions "getQuota" and "getMessages" with the following code:
<code type="php">
-<?php
-/**
- * IMP_Quota:: provides an API for retrieving Quota details from a mail
- * server.
- *
- * $Horde: imp/lib/Quota.php,v 1.23.10.15 2009-01-06 15:24:04 jan Exp $
- *
- * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
- *
- * See the enclosed file COPYING for license information (GPL). If you
- * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
- *
- * -------------------
- * Modified by Mauricio Jose T. Tecles <mtecles at biof.ufrj.br>
- * Functions getQuota getMessages
- * Updated 2010 February 28
- *
- * -------------------
- * @author Mike Cochrane <mike at graftonhall.co.nz>
- * @package IMP_Quota
- */
-class IMP_Quota {
-
- /**
- * Hash containing connection parameters.
- *
- * @var array
- */
- var $_params = array();
-
- /**
- * Constructor.
- *
- * @param array $params Hash containing connection parameters.
- */
- function IMP_Quota($params = array())
- {
- $this->_params = $params;
-
- /* If 'password' exists in params, it has been encrypted in the
- * session so we need to decrypt. */
- if (isset($this->_params['password'])) {
- $this->_params['password'] =
Secret::read(Secret::getKey('imp'), $this->_params['password']);
- }
- }
-
/**
* Get quota information (used/allocated), in bytes.
*
* @return mixed An associative array.
@@ -442,63 +396,8 @@
'nolimit_shorti' =>
isset($this->_params['format']['nolimit_shorti'])
? $this->_params['format']['nolimit_shorti']
: _("Inbox: %.0f MB"));
}
-
- /**
- * Attempts to return a concrete Quota instance based on $driver.
- *
- * @param string $driver The type of concrete Quota subclass to return.
- * @param array $params A hash containing any additional
configuration or
- * connection parameters a subclass might need.
- *
- * @return mixed The newly created concrete Quota instance, or false
- * on error.
- */
- function &factory($driver, $params = array())
- {
- $driver = basename($driver);
- require_once dirname(__FILE__) . '/Quota/' . $driver . '.php';
- $class = 'IMP_Quota_' . $driver;
- if (class_exists($class)) {
- $quota = new $class($params);
- } else {
- $quota = false;
- }
-
- return $quota;
- }
-
- /**
- * Attempts to return a reference to a concrete Quota instance based on
- * $driver.
- *
- * It will only create a new instance if no Quota instance with the same
- * parameters currently exists.
- *
- * This should be used if multiple quota sources are required.
- *
- * This method must be invoked as: $var = &Quota::singleton()
- *
- * @param string $driver The type of concrete Quota subclass to return.
- * @param array $params A hash containing any additional
configuration or
- * connection parameters a subclass might need.
- *
- * @return mixed The created concrete Quota instance, or false on error.
- */
- function &singleton($driver, $params = array())
- {
- static $instances = array();
-
- $signature = serialize(array($driver, $params));
- if (!isset($instances[$signature])) {
- $instances[$signature] = &IMP_Quota::factory($driver, $params);
- }
-
- return $instances[$signature];
- }
-
-}
</code>
----
++++ IMP.php
* Function quotaData takes care of using one or two devices
(dev_inbx, dev_fldrs). New information scale:
@@ -507,985 +406,10 @@
> 75% <= quota < 90%, quotawarn;
> quota < 75%, control.
> To change the control and warn percentages just edit quotaData
function to the desired values.
-Backup your original imp/lib/IMP.php and create a new IMP.php with
the following code:
+Backup your original imp/lib/IMP.php. Edit IMP.php and replace
functions "quota" and "quotaData" with the following code:
<code type="php">
-<?php
-// Compose encryption options
-/**
- * Send Message w/no encryption.
- */
-define('IMP_ENCRYPT_NONE', 1);
-
-/**
- * Send Message - PGP Encrypt.
- */
-define('IMP_PGP_ENCRYPT', 2);
-
-/**
- * Send Message - PGP Sign.
- */
-define('IMP_PGP_SIGN', 3);
-
-/**
- * Send Message - PGP Sign/Encrypt.
- */
-define('IMP_PGP_SIGNENC', 4);
-
-/**
- * Send Message - S/MIME Encrypt.
- */
-define('IMP_SMIME_ENCRYPT', 5);
-
-/**
- * Send Message - S/MIME Sign.
- */
-define('IMP_SMIME_SIGN', 6);
-
-/**
- * Send Message - S/MIME Sign/Encrypt.
- */
-define('IMP_SMIME_SIGNENC', 7);
-
-/**
- * Send Message - PGP Encrypt with passphrase.
- */
-define('IMP_PGP_SYM_ENCRYPT', 8);
-
-/**
- * Send Message - PGP Sign/Encrypt with passphrase.
- */
-define('IMP_PGP_SYM_SIGNENC', 9);
-
-// IMAP Flags
-/**
- * Match all IMAP flags.
- */
-define('IMP_ALL', 0);
-
-/**
- * \\UNSEEN flag
-.*/
-define('IMP_UNSEEN', 1);
-
-/**
- * \\DELETED flag
-.*/
-define('IMP_DELETED', 2);
-
-/**
- * \\ANSWERED flag.
- */
-define('IMP_ANSWERED', 4);
-
-/**
- * \\FLAGGED flag.
- */
-define('IMP_FLAGGED', 8);
-
-/**
- * \\DRAFT flag.
- */
-define('IMP_DRAFT', 16);
-
-/**
- * An email is personal.
- */
-define('IMP_PERSONAL', 32);
-
-// IMAP Sorting Constant
-/**
- * Sort By Thread.
- */
- at define('SORTTHREAD', 161);
-
-// IMP Mailbox view constants
-/**
- * Start on the page with the first unseen message.
- */
-define('IMP_MAILBOXSTART_FIRSTUNSEEN', 1);
-
-/**
- * Start on the page with the last unseen message.
- */
-define('IMP_MAILBOXSTART_LASTUNSEEN', 2);
-
-/**
- * Start on the first page.
- */
-define('IMP_MAILBOXSTART_FIRSTPAGE', 3);
-
-/**
- * Start on the last page.
- */
-define('IMP_MAILBOXSTART_LASTPAGE', 4);
-
-// IMP mailbox labels
-/**
- * The mailbox name to use for search results.
- */
-define('IMP_SEARCH_MBOX', '**search_');
-
-// IMP internal indexing strings
-/**
- * String used to separate messages.
- */
-define('IMP_MSG_SEP', "\0");
-
-/**
- * String used to separate indexes.
- */
-define('IMP_IDX_SEP', "\1");
-
-/**
- * IMP Base Class.
- *
- * $Horde: imp/lib/IMP.php,v 1.449.4.128 2009-10-12 22:36:33 slusarz Exp $
- *
- * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
- *
- * See the enclosed file COPYING for license information (GPL). If you
- * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
- *
- * -------------------
- * Modified by Mauricio Jose T. Tecles <mtecles at biof.ufrj.br>
- * Functions quota, quotaData
- * Updated 2010 February 28
- *
- * -------------------
- * @author Chuck Hagenbuch <chuck at horde.org>
- * @author Jon Parise <jon at horde.org>
- * @author Michael Slusarz <slusarz at horde.org>
- * @package IMP
- */
-class IMP {
-
- /**
- * Returns the AutoLogin server key.
- *
- * @param boolean $first Return the first value?
- *
- * @return string The server key.
- */
- function getAutoLoginServer($first = false)
- {
- if (is_callable(array('Horde', 'loadConfiguration'))) {
- $result = Horde::loadConfiguration('servers.php',
array('servers'), 'imp');
- if (is_a($result, 'PEAR_Error')) {
- Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
- return false;
- }
- extract($result);
- } else {
- require IMP_BASE . '/config/servers.php';
- }
-
- $server_key = null;
- foreach ($servers as $key => $curServer) {
- if (is_null($server_key) && substr($key, 0, 1) != '_') {
- $server_key = $key;
- }
- if (IMP::isPreferredServer($curServer, ($first) ? $key : null)) {
- $server_key = $key;
- if ($first) {
- break;
- }
- }
- }
-
- return $server_key;
- }
-
- /**
- * Returns whether we can log in without a login screen for $server_key.
- *
- * @param string $server_key The server to check. Defaults to
- * IMP::getCurrentServer().
- * @param boolean $force If true, check $server_key even if there is
- * more than one server available.
- *
- * @return boolean True or false.
- */
- function canAutoLogin($server_key = null, $force = false)
- {
- if (is_callable(array('Horde', 'loadConfiguration'))) {
- $result = Horde::loadConfiguration('servers.php',
array('servers'), 'imp');
- if (is_a($result, 'PEAR_Error')) {
- Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
- return false;
- }
- extract($result);
- } else {
- require IMP_BASE . '/config/servers.php';
- }
-
- $auto_server = IMP::getAutoLoginServer();
- if (is_null($server_key)) {
- $server_key = $auto_server;
- }
-
- return ((!empty($auto_server) || $force) &&
- Auth::getAuth() &&
- !empty($servers[$server_key]['hordeauth']));
- }
-
- /**
- * Makes sure the user has been authenticated to view the page.
- *
- * @param boolean $return If this is true, return false instead of
- * exiting/redirecting if
authentication fails.
- * @param boolean $hordeauth Just check for Horde auth and don't bother
- * the IMAP server.
- *
- * @return boolean True on success, false on error.
- */
- function checkAuthentication($return = false, $hordeauth = false)
- {
- if ($hordeauth) {
- $reason = Auth::isAuthenticated();
- } else {
- $auth_imp = &Auth::singleton(array('imp', 'imp'));
- $reason = $auth_imp->authenticate(null, array(), false);
- }
-
- if ($reason !== true) {
- if ($return) {
- return false;
- }
-
- if (Util::getFormData('popup')) {
- Util::closeWindowJS();
- } else {
- $url = Auth::addLogoutParameters(IMP::logoutUrl());
- $url = Util::addParameter($url, 'url', Horde::selfUrl(true));
- header('Location: ' . $url);
- }
- exit;
- }
-
- return true;
- }
-
- /**
- * Determines if the given mail server is the "preferred" mail server for
- * this web server. This decision is based on the global 'SERVER_NAME'
- * and 'HTTP_HOST' server variables and the contents of the 'preferred'
- * either field in the server's definition. The 'preferred' field may
- * take a single value or an array of multiple values.
- *
- * @param string $server A complete server entry from the $servers hash.
- * @param TODO $key TODO
- *
- * @return boolean True if this entry is "preferred".
- */
- function isPreferredServer($server, $key = null)
- {
- static $urlServer;
-
- if (!isset($urlServer)) {
- $urlServer = Util::getFormData('server');
- }
-
- if (!empty($urlServer)) {
- return ($key == $urlServer);
- }
-
- if (!empty($server['preferred'])) {
- if (is_array($server['preferred'])) {
- if (in_array($_SERVER['SERVER_NAME'],
$server['preferred']) ||
- in_array($_SERVER['HTTP_HOST'], $server['preferred'])) {
- return true;
- }
- } elseif (($server['preferred'] == $_SERVER['SERVER_NAME']) ||
- ($server['preferred'] == $_SERVER['HTTP_HOST'])) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Generates a full c-client server specification string.
- *
- * @param string $mbox The mailbox to append to end of the
server string.
- *
- * @return string The full spec string.
- */
- function serverString($mbox = null, $protocol = null)
- {
- if (substr($mbox, 0, 1) == '{') {
- return $mbox;
- }
-
- $srvstr = '{' . $_SESSION['imp']['server'];
-
- /* If port is not specified, don't include it in the string. */
- if (!empty($_SESSION['imp']['port'])) {
- $srvstr .= ':' . $_SESSION['imp']['port'];
- }
-
- return $srvstr . '/' . $_SESSION['imp']['protocol'] . '}' . $mbox;
- }
-
- /**
- * Get a token for protecting a form.
- *
- * @since IMP 4.2
- */
- function getRequestToken($slug)
- {
- require_once 'Horde/Token.php';
- $token = Horde_Token::generateId($slug);
- $_SESSION['horde_form_secrets'][$token] = time();
- return $token;
- }
-
- /**
- * Check if a token for a form is valid.
- *
- * @since IMP 4.2
- */
- function checkRequestToken($slug, $token)
- {
- if (empty($_SESSION['horde_form_secrets'][$token])) {
- return PEAR::raiseError(_("We cannot verify that this
request was really sent by you. It could be a malicious request. If
you intended to perform this action, you can retry it now."));
- }
-
- if ($_SESSION['horde_form_secrets'][$token] +
$GLOBALS['conf']['server']['token_lifetime'] < time()) {
- return PEAR::raiseError(sprintf(_("This request cannot be
completed because the link you followed or the form you submitted was
only valid for %d minutes. Please try again now."),
round($GLOBALS['conf']['server']['token_lifetime'] / 60)));
- }
-
- return true;
- }
-
- /**
- * Returns the plain text label that is displayed for the current
mailbox,
- * replacing IMP_SEARCH_MBOX with an appropriate string and removing
- * namespace and folder prefix information from what is shown to
the user.
- *
- * @param string $mbox The mailbox to use for the label.
- *
- * @return string The plain text label.
- */
- function getLabel($mbox)
- {
- return ($GLOBALS['imp_search']->isSearchMbox($mbox))
- ? $GLOBALS['imp_search']->getLabel($mbox)
- : IMP::displayFolder($mbox);
- }
-
- /**
- * Returns the bare address.
- *
- * @param string $address The address string.
- * @param boolean $multiple Should we return multiple results?
- *
- * @return mixed See {@link MIME::bareAddress}.
- */
- function bareAddress($address, $multiple = false)
- {
- static $addresses;
-
- if (!isset($addresses[(string)$multiple][$address])) {
- require_once 'Horde/MIME.php';
- $addresses[(string)$multiple][$address] =
MIME::bareAddress($address, $_SESSION['imp']['maildomain'], $multiple);
- }
-
- return $addresses[(string)$multiple][$address];
- }
-
- /**
- * Adds a contact to the user defined address book.
- *
- * @param string $newAddress The contact's email address.
- * @param string $newName The contact's name.
- *
- * @return string A link or message to show in the notification area.
- */
- function addAddress($newAddress, $newName)
- {
- global $registry, $prefs;
-
- if (empty($newName)) {
- $newName = $newAddress;
- }
-
- $result = $registry->call('contacts/import',
- array(array('name' => $newName,
'email' => $newAddress),
- 'array',
$prefs->getValue('add_source')));
- if (is_a($result, 'PEAR_Error')) {
- return $result;
- } else {
- $contact_link = $registry->link('contacts/show',
array('uid' => $result, 'source' => $prefs->getValue('add_source')));
- if (!empty($contact_link) && !is_a($contact_link,
'PEAR_Error')) {
- $contact_link =
Horde::link(Horde::url($contact_link), sprintf(_("Go to address book
entry of \"%s\""), $newName)) . @htmlspecialchars($newName,
ENT_COMPAT, NLS::getCharset()) . '</a>';
- } else {
- $contact_link = @htmlspecialchars($newName,
ENT_COMPAT, NLS::getCharset());
- }
- return $contact_link;
- }
- }
-
- /**
- * Parses an address or address list into the address components.
- *
- * @param string $address An address or address list.
- * @param boolean $validate Validate the addresses?
- * @param boolean $domain Use the local default domain?
- *
- * @return array A list of address objects or a PEAR_Error object.
- */
- function parseAddressList($address, $validate = false, $domain = false)
- {
- static $parser;
-
- /* Don't use imap_rfc822_parse_adrlist() since it always expects MIME
- * encoded data (not-useful if $validate is false), doesn't return
- * data easy to parse to create a PEAR_Error object, and doesn't
- * handle lists properly. */
-
- if (!isset($parser)) {
- require_once 'Mail/RFC822.php';
- $parser = new Mail_RFC822();
- }
-
- return $parser->parseAddressList($address, ($domain) ?
$_SESSION['imp']['maildomain'] : '', null, $validate);
- }
-
- /**
- * Wrapper around IMP_Folder::flist() which generates the body of a
- * <select> form input from the generated folder list. The
- * <select> and </select> tags are NOT included in the output
- * of this function.
- *
- * @param string $heading The label for an empty-value option at
- * the top of the list.
- * @param boolean $abbrev If true, abbreviate long mailbox names
- * by replacing the middle of the
name with
- * '...'.
- * @param array $filter An array of mailboxes to ignore.
- * @param string $selected The mailbox to have selected by
default.
- * @param boolean $new_folder If true, display an option to create a
- * new folder.
- * @param boolean $inc_tasklists Should the user's editable tasklists be
- * included in the list?
- * @param boolean $inc_vfolder Should the user's virtual folders be
- * included in the list?
- * @param boolean $inc_tasklists Should the user's editable notepads be
- * included in the list?
- *
- * @return string A string containing <option> elements for each mailbox
- * in the list.
- */
- function flistSelect($heading = '', $abbrev = true, $filter = array(),
- $selected = null, $new_folder = false,
- $inc_tasklists = false, $inc_vfolder = false,
- $inc_notepads = false)
- {
- require_once 'Horde/Text.php';
- require_once IMP_BASE . '/lib/Folder.php';
-
- $imp_folder = &IMP_Folder::singleton();
-
- /* Don't filter here - since we are going to parse through every
- * member of the folder list below anyway, we can filter at
that time.
- * This allows us the have a single cached value for the folder list
- * rather than a cached value for each different mailbox we may
- * visit. */
- $mailboxes = $imp_folder->flist_IMP();
- $text = '';
-
- if (strlen($heading) > 0) {
- $text .= '<option value="">' . $heading . "</option>\n";
- }
-
- if ($new_folder &&
- (!empty($GLOBALS['conf']['hooks']['permsdenied']) ||
- (IMP::hasPermission('create_folders') &&
- IMP::hasPermission('max_folders')))) {
- $text .= '<option value="" disabled="disabled">- - - - -
- - - -</option>' . "\n";
- $text .= '<option value="*new*">' . _("New Folder") .
"</option>\n";
- $text .= '<option value="" disabled="disabled">- - - - -
- - - -</option>' . "\n";
- }
-
- /* Add the list of mailboxes to the lists. */
- $filter = array_flip($filter);
- foreach ($mailboxes as $mbox) {
- if (isset($filter[$mbox['val']])) {
- continue;
- }
-
- $val = isset($filter[$mbox['val']]) ? '' :
htmlspecialchars($mbox['val']);
- $sel = ($mbox['val'] && ($mbox['val'] === $selected)) ? '
selected="selected"' : '';
- $label = ($abbrev) ? $mbox['abbrev'] : $mbox['label'];
- $text .= sprintf('<option value="%s"%s>%s</option>%s',
$val, $sel, Text::htmlSpaces($label), "\n");
- }
-
- /* Add the list of virtual folders to the list. */
- if ($inc_vfolder) {
- $vfolders = $GLOBALS['imp_search']->listQueries(true);
- if (!empty($vfolders)) {
- $vfolder_sel = $GLOBALS['imp_search']->searchMboxID();
- $text .= '<option value="" disabled="disabled">- - -
- - - - - -</option>' . "\n";
- foreach ($vfolders as $id => $val) {
- $text .= sprintf('<option
value="%s"%s>%s</option>%s',
$GLOBALS['imp_search']->createSearchID($id), ($vfolder_sel == $id) ? '
selected="selected"' : '', Text::htmlSpaces($val), "\n");
- }
- }
- }
-
- /* Add the list of editable tasklists to the list. */
- if ($inc_tasklists && $_SESSION['imp']['tasklistavail']) {
- $tasklists = $GLOBALS['registry']->call('tasks/listTasklists',
- array(false,
PERMS_EDIT));
-
- if (!is_a($tasklists, 'PEAR_Error') && count($tasklists)) {
- $text .= '<option value=""
disabled="disabled"> </option><option value=""
disabled="disabled">- - ' . _("Task Lists") . ' - -</option>' . "\n";
-
- foreach ($tasklists as $id => $tasklist) {
- $text .= sprintf('<option value="%s">%s</option>%s',
- '_tasklist_' . $id,
-
Text::htmlSpaces($tasklist->get('name')),
- "\n");
- }
- }
- }
-
- /* Add the list of editable notepads to the list. */
- if ($inc_notepads && $_SESSION['imp']['notepadavail']) {
- $notepads = $GLOBALS['registry']->call('notes/listNotepads',
- array(false,
PERMS_EDIT));
-
- if (!is_a($notepads, 'PEAR_Error') && count($notepads)) {
- $text .= '<option value=""
disabled="disabled"> </option><option value=""
disabled="disabled">- - ' . _("Notepads") . ' - -</option>' . "\n";
-
- foreach ($notepads as $id => $notepad) {
- $text .= sprintf('<option value="%s">%s</option>%s',
- '_notepad_' . $id,
- Text::htmlSpaces($notepad->get('name')),
- "\n");
- }
- }
- }
-
- return $text;
- }
-
- /**
- * Checks for To:, Subject:, Cc:, and other compose window arguments and
- * pass back either a URI fragment or an associative array with any of
- * them which are present.
- *
- * @param string $format Either 'uri' or 'array'.
- *
- * @return string A URI fragment or an associative array with
any compose
- * arguments present.
- */
- function getComposeArgs()
- {
- $args = array();
- $fields = array('to', 'cc', 'bcc', 'message', 'body', 'subject');
-
- foreach ($fields as $val) {
- if (($$val = Util::getFormData($val))) {
- $args[$val] = $$val;
- }
- }
-
- /* Decode mailto: URLs. */
- if (isset($args['to']) && (strpos($args['to'], 'mailto:') === 0)) {
- $mailto = @parse_url($args['to']);
- if (is_array($mailto)) {
- $args['to'] = isset($mailto['path']) ? $mailto['path'] : '';
- if (!empty($mailto['query'])) {
- parse_str($mailto['query'], $vals);
- foreach ($fields as $val) {
- if (isset($vals[$val])) {
- $args[$val] = $vals[$val];
- }
- }
- }
- }
- }
-
- return $args;
- }
-
- /**
- * Open a compose window.
- */
- function openComposeWin($options = array())
- {
- global $prefs;
-
- if ($prefs->getValue('compose_popup')) {
- return true;
- } else {
- $options += IMP::getComposeArgs();
- $url =
Util::addParameter(Horde::applicationUrl('compose.php', true),
- $options, null, false);
- header('Location: ' . $url);
- return false;
- }
- }
-
- /**
- * Prepares the arguments to use for composeLink().
- *
- * @since IMP 4.2
- *
- * @param mixed $args List of arguments to pass to compose.php. If this
- * is passed in as a string, it will be parsed as a
- * toaddress?subject=foo&cc=ccaddress (mailto-style)
- * string.
- * @param array $extra Hash of extra, non-standard arguments to pass to
- * compose.php.
- *
- * @return array The array of args to use for composeLink().
- */
- function composeLinkArgs($args = array(), $extra = array())
- {
- if (is_string($args)) {
- $string = $args;
- $args = array();
- if (($pos = strpos($string, '?')) !== false) {
- parse_str(substr($string, $pos + 1), $args);
- $args['to'] = substr($string, 0, $pos);
- } else {
- $args['to'] = $string;
- }
- }
-
- /* Merge the two argument arrays. */
- if (is_array($extra) && !empty($extra)) {
- $args = array_merge($args, $extra);
- }
-
- return $args;
- }
-
- /**
- * Returns the appropriate link to call the message composition screen.
- *
- * @param mixed $args List of arguments to pass to compose.php. If this
- * is passed in as a string, it will be parsed as a
- * toaddress?subject=foo&cc=ccaddress (mailto-style)
- * string.
- * @param array $extra Hash of extra, non-standard arguments to pass to
- * compose.php.
- *
- * @return string The link to the message composition screen.
- */
- function composeLink($args = array(), $extra = array())
- {
- $args = IMP::composeLinkArgs($args, $extra);
-
- if ($GLOBALS['prefs']->getValue('compose_popup')
- && $GLOBALS['browser']->hasFeature('javascript')) {
- Horde::addScriptFile('prototype.js', 'imp', true);
- Horde::addScriptFile('popup.js', 'imp', true);
- if (isset($args['to'])) {
- $args['to'] = addcslashes($args['to'], '\\"');
- }
- return "javascript:" . IMP::popupIMPString('compose.php', $args);
- } else {
- return
Util::addParameter(Horde::applicationUrl('compose.php'), $args);
- }
- }
-
- /**
- * Generates an URL to the logout screen that includes any known
- * information, such as username, server, etc., that can be filled in on
- * the login form.
- *
- * @return string Logout URL with logout parameters added.
- */
- function logoutUrl()
- {
- $params = array(
- 'imapuser' => isset($_SESSION['imp']['user']) ?
- $_SESSION['imp']['user'] :
- Util::getFormData('imapuser'),
- 'server' => isset($_SESSION['imp']['server']) ?
- $_SESSION['imp']['server'] :
- Util::getFormData('server'),
- 'port' => isset($_SESSION['imp']['port']) ?
- $_SESSION['imp']['port'] :
- Util::getFormData('port'),
- 'protocol' => isset($_SESSION['imp']['protocol']) ?
- $_SESSION['imp']['protocol'] :
- Util::getFormData('protocol'),
- 'language' => isset($_SESSION['imp']['language']) ?
- $_SESSION['imp']['language'] :
- Util::getFormData('language'),
- 'smtphost' => isset($_SESSION['imp']['smtphost']) ?
- $_SESSION['imp']['smtphost'] :
- Util::getFormData('smtphost'),
- 'smtpport' => isset($_SESSION['imp']['smtpport']) ?
- $_SESSION['imp']['smtpport'] :
- Util::getFormData('smtpport'),
- );
-
- return
Util::addParameter($GLOBALS['registry']->get('webroot', 'imp') .
'/login.php', array_diff($params, array('')), null, false);
- }
-
- /**
- * If there is information available to tell us about a prefix in
front of
- * mailbox names that shouldn't be displayed to the user, then use it to
- * strip that prefix out.
- *
- * @param string $folder The folder name to display.
- * @param boolean $notranslate Do not translate the folder prefix.
- *
- * @return string The folder, with any prefix gone.
- */
- function displayFolder($folder, $notranslate = false)
- {
- static $cache = array();
-
- if (isset($cache[$folder])) {
- return $cache[$folder];
- }
-
- if ($folder == 'INBOX') {
- $out = _("Inbox");
- } else {
- $namespace_info = IMP::getNamespace($folder);
- if (($namespace_info !== null) &&
- !empty($namespace_info['name']) &&
- ($namespace_info['type'] == 'personal') &&
- substr($folder, 0, strlen($namespace_info['name']))
== $namespace_info['name']) {
- $out = substr($folder, strlen($namespace_info['name']));
- } elseif (!$notranslate &&
- !is_null($namespace_info) &&
- (strpos($folder, 'INBOX' .
$namespace_info['delimiter']) === 0)) {
- $out = _("Inbox") . substr($folder, 5);
- } else {
- $out = $folder;
- }
-
- $out = String::convertCharset($out, 'UTF7-IMAP');
- }
-
- if (!$notranslate) {
- $cache[$folder] = $out;
- }
-
- return $out;
- }
-
- /**
- * Filters a string, if requested.
- *
- * @param string $text The text to filter.
- *
- * @return string The filtered text (if requested).
- */
- function filterText($text)
- {
- global $conf, $prefs;
-
- if ($prefs->getValue('filtering') && strlen($text)) {
- require_once 'Horde/Text/Filter.php';
- $text = Text_Filter::filter($text, 'words',
array('words_file' => $conf['msgsettings']['filtering']['words'],
'replacement' => $conf['msgsettings']['filtering']['replacement']));
- }
-
- return $text;
- }
-
- /**
- * Returns the specified permission for the current user.
- *
- * @since IMP 4.1
- *
- * @param string $permission A permission.
- * @param boolean $value If true, the method returns the value of a
- * scalar permission, otherwise whether the
- * permission limit has been hit already.
- *
- * @return mixed The value of the specified permission.
- */
- function hasPermission($permission, $value = false)
- {
- global $perms;
-
- if (!$perms->exists('imp:' . $permission)) {
- return true;
- }
-
- $allowed = $perms->getPermissions('imp:' . $permission);
- if (is_array($allowed)) {
- switch ($permission) {
- case 'create_folders':
- $allowed = (bool)count(array_filter($allowed));
- break;
-
- case 'max_folders':
- case 'max_recipients':
- case 'max_timelimit':
- $allowed = max($allowed);
- break;
- }
- }
- if ($permission == 'max_folders' && !$value) {
- $folder = &IMP_Folder::singleton();
- $allowed = $allowed > count($folder->flist_IMP(array(), false));
- }
-
- return $allowed;
- }
-
- /**
- * Build IMP's list of menu items.
- *
- * @param string $returnType Either 'object' or 'string'.
- *
- * @return mixed Either a Horde_Menu object or the rendered menu text.
- */
- function getMenu($returnType = 'object')
- {
- global $conf, $prefs, $registry;
-
- require_once 'Horde/Menu.php';
-
- $menu_search_url = Horde::applicationUrl('search.php');
- $menu_mailbox_url = Horde::applicationUrl('mailbox.php');
-
- $spam_folder =
IMP::folderPref($prefs->getValue('spam_folder'), true);
-
- $menu = new Menu(HORDE_MENU_MASK_ALL & ~HORDE_MENU_MASK_LOGIN);
-
- $menu->add(IMP::generateIMPUrl($menu_mailbox_url, 'INBOX'),
_("_Inbox"), 'folders/inbox.png');
-
- if (($_SESSION['imp']['base_protocol'] != 'pop3') &&
- $prefs->getValue('use_trash') &&
- $prefs->getValue('empty_trash_menu')) {
- $mailbox = null;
- if ($prefs->getValue('use_vtrash')) {
- $mailbox =
$GLOBALS['imp_search']->createSearchID($prefs->getValue('vtrash_id'));
- } else {
- $trash_folder =
IMP::folderPref($prefs->getValue('trash_folder'), true);
- if (($trash_folder !== null)) {
- $mailbox = $trash_folder;
- }
- }
-
- if (!empty($mailbox)) {
- $menu_trash_url =
Util::addParameter(IMP::generateIMPUrl($menu_mailbox_url, $mailbox),
array('actionID' => 'empty_mailbox', 'mailbox_token' =>
IMP::getRequestToken('imp.mailbox')));
- $menu->add($menu_trash_url, _("Empty _Trash"),
'empty_trash.png', null, null, "return window.confirm('" .
addslashes(_("Are you sure you wish to empty your trash folder?")) .
"');", '__noselection');
- }
- }
-
- if (($_SESSION['imp']['base_protocol'] != 'pop3') &&
- !empty($spam_folder) &&
- $prefs->getValue('empty_spam_menu')) {
- $menu_spam_url =
Util::addParameter(IMP::generateIMPUrl($menu_mailbox_url,
$spam_folder), array('actionID' => 'empty_mailbox', 'mailbox_token' =>
IMP::getRequestToken('imp.mailbox')));
- $menu->add($menu_spam_url, _("Empty _Spam"),
'empty_spam.png', null, null, "return window.confirm('" .
addslashes(_("Are you sure you wish to empty your spam folder?")) .
"');", '__noselection');
- }
-
- $menu->add(IMP::composeLink(array('mailbox' =>
$GLOBALS['imp_mbox']['mailbox'])), _("_New Message"), 'compose.png');
-
- if ($conf['user']['allow_folders']) {
-
$menu->add(Util::nocacheUrl(Horde::applicationUrl('folders.php')),
_("_Folders"), 'folders/folder.png');
- }
- $menu->add($menu_search_url, _("_Search"), 'search.png',
$registry->getImageDir('horde'));
- if (($_SESSION['imp']['base_protocol'] != 'pop3') &&
$prefs->getValue('fetchmail_menu')) {
- if ($prefs->getValue('fetchmail_popup')) {
- $menu->add(Horde::applicationUrl('fetchmail.php'),
_("F_etch Mail"), 'fetchmail.png', null, 'fetchmail',
'window.open(this.href, \'fetchmail\',
\'toolbar=no,location=no,status=yes,scrollbars=yes,resizable=yes,width=300,height=450,left=100,top=100\'); return
false;');
- } else {
- $menu->add(Horde::applicationUrl('fetchmail.php'),
_("F_etch Mail"), 'fetchmail.png');
- }
- }
- if ($prefs->getValue('filter_menuitem')) {
- $menu->add(Horde::applicationUrl('filterprefs.php'),
_("Fi_lters"), 'filters.png');
- }
-
- /* Logout. If IMP can auto login or IMP is providing authentication,
- * then we only show the logout link if the sidebar isn't shown or if
- * the configuration says to always show the current user a logout
- * link. */
- $impAuth = Auth::getProvider() == 'imp';
- $impAutoLogin = IMP::canAutoLogin();
- if (!($impAuth || $impAutoLogin) ||
- !$prefs->getValue('show_sidebar') ||
- Horde::showService('logout')) {
-
- /* If IMP provides authentication and the sidebar isn't
always on,
- * target the main frame for logout to hide the sidebar while
- * logged out. */
- $logout_target = null;
- if ($impAuth || $impAutoLogin) {
- $logout_target = '_parent';
- }
-
- /* If IMP doesn't provide Horde authentication then we
need to use
- * IMP's logout screen since logging out should *not* end a Horde
- * session. */
- $logout_url = IMP::getLogoutUrl();
-
- $id = $menu->add($logout_url, _("_Log out"),
'logout.png', $registry->getImageDir('horde'), $logout_target);
- $menu->setPosition($id, HORDE_MENU_POS_LAST);
- }
-
- if ($returnType == 'object') {
- return $menu;
- } else {
- return $menu->render();
- }
- }
-
- /**
- * Outputs IMP's menu to the current output stream.
- *
- * @since IMP 4.2
- */
- function menu()
- {
- require_once IMP_BASE . '/lib/Template.php';
- $t = new IMP_Template();
- $t->set('forminput', Util::formInput());
- $t->set('webkit', $GLOBALS['browser']->isBrowser('konqueror'));
- $t->set('use_folders', ($_SESSION['imp']['base_protocol'] !=
'pop3') &&
-
$GLOBALS['conf']['user']['allow_folders'], true);
- if ($t->get('use_folders')) {
- $t->set('accesskey',
$GLOBALS['prefs']->getValue('widget_accesskey') ?
Horde::getAccessKey(_("Open Fo_lder")) : '', true);
- $t->set('flist', IMP::flistSelect('', true, array(),
$GLOBALS['imp_mbox']['mailbox'], false, false, true));
-
- $menu_view = $GLOBALS['prefs']->getValue('menu_view');
- $link = Horde::link('#', '', '', '', 'folderSubmit(true);
return false;');
- $t->set('flink', sprintf('<ul><li
class="rightFloat">%s%s<br />%s</a></li></ul>', $link, ($menu_view !=
'text') ? Horde::img('folders/folder_open.png', _("Open Folder"),
($menu_view == 'icon') ? array('title' => _("Open Folder")) : array())
: '', ($menu_view != 'icon') ? Horde::highlightAccessKey(_("Open
Fo_lder"), $t->get('accesskey')) : ''));
- }
- $t->set('menu_string', IMP::getMenu('string'));
-
- echo $t->fetch(IMP_TEMPLATES . '/menu.html');
- }
-
- /**
- * Outputs IMP's status/notification bar.
- */
- function status()
- {
- global $notification;
-
- $imp_imap = &IMP_IMAP::singleton();
-
- if ($imp_imap->stream()) {
- $alerts = imap_alerts();
- if (is_array($alerts)) {
- $alerts = str_replace('[ALERT] ', '', $alerts);
- foreach ($alerts as $alert) {
- $notification->push($alert, 'horde.warning');
- }
- }
- }
-
- /* BC check. */
- if (class_exists('Notification_Listener_audio')) {
- $notification->notify(array('listeners' =>
array('status', 'audio')));
- }
- }
-
/**
* Outputs IMP's quota information.
* Modified by Mauricio Jose T. Tecles <mtecles at biof.ufrj.br>
* Updated 2010 February 28
@@ -1630,5 +554,49 @@
}
} elseif ($ret['percent'] >= 90) {
$ret['classvar'] = 'quotaalert';
if ($long) {
- $ret['messagevar'] = sprintf($strings['longiaf'],
$quota['usagevar'
+ $ret['messagevar'] = sprintf($strings['longiaf'],
$quota['usagevar'], $quota['soflimitvar'], $ret['percent']);
+ } else {
+ $ret['messagevar'] = sprintf($strings['shortiaf'],
$ret['percent'], $quota['soflimitvar']);
+ }
+ } elseif ($ret['percent'] >= 75) {
+ $ret['classvar'] = 'quotawarn';
+ if ($long) {
+ $ret['messagevar'] = sprintf($strings['longi'],
$quota['usagevar'], $quota['soflimitvar'], $ret['percent']);
+ } else {
+ $ret['messagevar'] = sprintf($strings['shorti'],
$ret['percent'], $quota['soflimitvar']);
+ }
+ } else {
+ $ret['classvar'] = 'control';
+ if ($long) {
+ $ret['messagevar'] = sprintf($strings['longi'],
$quota['usagevar'], $quota['soflimitvar'], $ret['percent']);
+ } else {
+ $ret['messagevar'] = sprintf($strings['shorti'],
$ret['percent'], $quota['soflimitvar']);
+ }
+ }
+ } else {
+ // Hide unlimited quota message?
+ if
(!empty($_SESSION['imp']['quota']['params']['hide_quota_when_unlimited']))
{
+ return false;
+ }
+
+ $ret['classvar'] = 'control';
+ if ($quota['usagevar'] != 0) {
+ $quota['usagevar'] = $quota['usagevar'] / (1024 * 1024.0);
+ if ($long) {
+ $ret['messagevar'] = sprintf($strings['nolimit_longi'],
+ $quota['usagevar']);
+ } else {
+ $ret['messagevar'] = sprintf($strings['nolimit_shorti'],
+ $quota['usagevar']);
+ }
+ } else {
+ $ret['messagevar'] = sprintf(_("Inbox: NO LIMIT"));
+ }
+ }
+
+ return $ret;
+ }
+</code>
+----
+
More information about the cvs
mailing list