Aleksander Machniak
2015-02-25 bbbd02bd6a43ae0e2ee00519be8d56fb21161dcd
Fix so "over quota" errors are displayed also in message compose page

This also fixes over quota responses on cyrus imap which uses "Over quota" string and no error identifier.
3 files modified
23 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/include/rcmail.php 17 ●●●● patch | view | raw | blame | history
program/steps/mail/sendmail.inc 5 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -13,6 +13,7 @@
- Fix missing or not up-to-date CATEGORIES entry in vCard export (#1490277)
- Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#1490280)
- Fix cursor position on reply below the quote in HTML mode (#1490263)
- Fix so "over quota" errors are displayed also in message compose page
RELEASE 1.1.0
-------------
program/include/rcmail.php
@@ -1791,8 +1791,9 @@
     * @param string $fallback       Fallback message label
     * @param array  $fallback_args  Fallback message label arguments
     * @param string $suffix         Message label suffix
     * @param array  $params         Additional parameters (type, prefix)
     */
    public function display_server_error($fallback = null, $fallback_args = null, $suffix = '')
    public function display_server_error($fallback = null, $fallback_args = null, $suffix = '', $params = array())
    {
        $err_code = $this->storage->get_error_code();
        $res_code = $this->storage->get_response_code();
@@ -1813,8 +1814,8 @@
                $error = 'errornoperm';
            }
            // try to detect full mailbox problem and display appropriate message
            // there can be e.g. "Quota exceeded" or "quotum would exceed"
            else if (stripos($err_str, 'quot') !== false && stripos($err_str, 'exceed') !== false) {
            // there can be e.g. "Quota exceeded" / "quotum would exceed" / "Over quota"
            else if (stripos($err_str, 'quot') !== false && preg_match('/exceed|over/i', $err_str)) {
                $error = 'erroroverquota';
            }
            else {
@@ -1828,13 +1829,21 @@
        else if ($fallback) {
            $error = $fallback;
            $args  = $fallback_args;
            $params['prefix'] = false;
        }
        if ($error) {
            if ($suffix && $this->text_exists($error . $suffix)) {
                $error .= $suffix;
            }
            $this->output->show_message($error, 'error', $args);
            $msg = $this->gettext(array('name' => $error, 'vars' => $args));
            if ($params['prefix'] && $fallback) {
                $msg = $this->gettext(array('name' => $fallback, 'vars' => $fallback_args)) . ' ' . $msg;
            }
            $this->output->show_message($msg, $params['type'] ?: 'error');
        }
    }
program/steps/mail/sendmail.inc
@@ -635,7 +635,8 @@
            'message' => "Could not save message in $store_target"), true, false);
        if ($savedraft) {
            $OUTPUT->show_message('errorsaving', 'error');
            $RCMAIL->display_server_error('errorsaving');
            // start the auto-save timer again
            $OUTPUT->command('auto_save_start');
            $OUTPUT->send('iframe');
@@ -699,7 +700,7 @@
    $OUTPUT->command('remove_compose_data', $COMPOSE_ID);
    if ($store_folder && !$saved) {
        $OUTPUT->command('sent_successfully', 'error', $RCMAIL->gettext('errorsavingsent'), $folders);
        $RCMAIL->display_server_error('errorsavingsent', null, null, array('prefix' => true));
    }
    else if ($store_folder) {
        $folders[] = $store_target;