[Wiki] changed: AltQuota
Wiki Guest <[email protected]>
| Newsgroups | gmane.comp.horde.cvs |
|---|---|
| Message-ID | <[email protected]> |
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 <[email protected]> - * Functions getQuota getMessages - * Updated 2010 February 28 - * - * ------------------- - * @author Mike Cochrane <[email protected]> - * @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. - */ -@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 <[email protected]> - * Functions quota, quotaData - * Updated 2010 February 28 - * - * ------------------- - * @author Chuck Hagenbuch <[email protected]> - * @author Jon Parise <[email protected]> - * @author Michael Slusarz <[email protected]> - * @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 <[email protected]> * 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> +---- + -- To unsubscribe, mail: [email protected]