Aleksander Machniak
2013-12-25 c97625e02a95ebd995af8a06c27229581a071ddd
CS fixes
16 files modified
359 ■■■■■ changed files
program/steps/addressbook/edit.inc 39 ●●●● patch | view | raw | blame | history
program/steps/addressbook/func.inc 2 ●●● patch | view | raw | blame | history
program/steps/addressbook/groups.inc 47 ●●●● patch | view | raw | blame | history
program/steps/addressbook/import.inc 19 ●●●●● patch | view | raw | blame | history
program/steps/addressbook/mailto.inc patch | view | raw | blame | history
program/steps/addressbook/save.inc 29 ●●●●● patch | view | raw | blame | history
program/steps/mail/addcontact.inc 27 ●●●●● patch | view | raw | blame | history
program/steps/mail/attachments.inc 54 ●●●●● patch | view | raw | blame | history
program/steps/mail/autocomplete.inc 37 ●●●●● patch | view | raw | blame | history
program/steps/mail/copy.inc 5 ●●●●● patch | view | raw | blame | history
program/steps/mail/folders.inc 5 ●●●●● patch | view | raw | blame | history
program/steps/mail/get.inc 57 ●●●●● patch | view | raw | blame | history
program/steps/mail/getunread.inc 5 ●●●●● patch | view | raw | blame | history
program/steps/mail/headers.inc 5 ●●●● patch | view | raw | blame | history
program/steps/mail/import.inc 6 ●●●●● patch | view | raw | blame | history
program/steps/utils/error.inc 22 ●●●● patch | view | raw | blame | history
program/steps/addressbook/edit.inc
@@ -5,7 +5,7 @@
 | program/steps/addressbook/edit.inc                                    |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2007, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -177,28 +177,47 @@
  // find max filesize value
  $max_filesize = parse_bytes(ini_get('upload_max_filesize'));
  $max_postsize = parse_bytes(ini_get('post_max_size'));
  if ($max_postsize && $max_postsize < $max_filesize)
    if ($max_postsize && $max_postsize < $max_filesize) {
    $max_filesize = $max_postsize;
    }
  $max_filesize = $RCMAIL->show_bytes($max_filesize);
  $hidden = new html_hiddenfield(array('name' => '_cid', 'value' => $GLOBALS['cid']));
  $input = new html_inputfield(array('type' => 'file', 'name' => '_photo', 'size' => $attrib['size']));
  $button = new html_inputfield(array('type' => 'button'));
    $content = $hidden->show() . html::div(null, $input->show())
        . html::div('hint', $RCMAIL->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize))));
    if (rcube_utils::get_boolean($attrib['buttons'])) {
        $content .= html::div('buttons',
            $button->show($RCMAIL->gettext('close'), array(
                'class'   => 'button',
                'onclick' => "$('#$attrib[id]').hide()"
            ))
            . ' ' .
            $button->show($RCMAIL->gettext('upload'), array(
                'class'   => 'button mainaction',
                'onclick' => rcmail_output::JS_OBJECT_NAME . ".command('upload-photo', this.form)"
            ))
        );
    }
  $out = html::div($attrib,
    $OUTPUT->form_tag(array('id' => $attrib['id'].'Frm', 'name' => 'uploadform', 'method' => 'post', 'enctype' => 'multipart/form-data'),
      $hidden->show() .
      html::div(null, $input->show()) .
      html::div('hint', $RCMAIL->gettext(array('name' => 'maxuploadsize', 'vars' => array('size' => $max_filesize)))) .
      (rcube_utils::get_boolean($attrib['buttons']) ? html::div('buttons',
        $button->show($RCMAIL->gettext('close'), array('class' => 'button', 'onclick' => "$('#$attrib[id]').hide()")) . ' ' .
        $button->show($RCMAIL->gettext('upload'), array('class' => 'button mainaction', 'onclick' => rcmail_output::JS_OBJECT_NAME . ".command('upload-photo', this.form)"))
      ) : '')
        $OUTPUT->form_tag(array(
                'id'      => $attrib['id'] . 'Frm',
                'name'    => 'uploadform',
                'method'  => 'post',
                'enctype' => 'multipart/form-data'
            ),
            $content
    )
  );
  $OUTPUT->add_label('addphoto','replacephoto');
  $OUTPUT->add_gui_object('uploadform', $attrib['id'].'Frm');
  return $out;
}
program/steps/addressbook/func.inc
@@ -5,7 +5,7 @@
 | program/steps/addressbook/func.inc                                    |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
program/steps/addressbook/groups.inc
@@ -5,7 +5,7 @@
 | program/steps/addressbook/groups.inc                                  |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2010, The Roundcube Dev Team                            |
 | Copyright (C) 2010-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -29,7 +29,11 @@
if ($RCMAIL->action == 'group-addmembers') {
  if (($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_POST)) && ($ids = rcmail_get_cids($source))) {
    $plugin = $RCMAIL->plugins->exec_hook('group_addmembers', array('group_id' => $gid, 'ids' => $ids, 'source' => $source));
        $plugin = $RCMAIL->plugins->exec_hook('group_addmembers', array(
            'group_id' => $gid,
            'ids'      => $ids,
            'source'   => $source,
        ));
    $CONTACTS->set_group($gid);
    $num2add = count($plugin['ids']);
@@ -39,6 +43,7 @@
        $OUTPUT->show_message('maxgroupmembersreached', 'warning', array('max' => $maxnum));
        $OUTPUT->send();
      }
      $result = $CONTACTS->add_to_group($gid, $plugin['ids']);
    }
    else {
@@ -53,10 +58,13 @@
      $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'nogroupassignmentschanged');
  }
}
else if ($RCMAIL->action == 'group-delmembers') {
  if (($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_POST)) && ($ids = rcmail_get_cids($source))) {
    $plugin = $RCMAIL->plugins->exec_hook('group_delmembers', array('group_id' => $gid, 'ids' => $ids, 'source' => $source));
        $plugin = $RCMAIL->plugins->exec_hook('group_delmembers', array(
            'group_id' => $gid,
            'ids'      => $ids,
            'source'   => $source,
        ));
    if (!$plugin['abort'])
      $result = $CONTACTS->remove_from_group($gid, $plugin['ids']);
@@ -72,10 +80,12 @@
    }
  }
}
else if ($RCMAIL->action == 'group-create') {
  if ($name = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true))) {
    $plugin = $RCMAIL->plugins->exec_hook('group_create', array('name' => $name, 'source' => $source));
        $plugin = $RCMAIL->plugins->exec_hook('group_create', array(
            'name'   => $name,
            'source' => $source,
        ));
    if (!$plugin['abort'])
      $created = $CONTACTS->create_group($plugin['name']);
@@ -85,6 +95,7 @@
  if ($created && $OUTPUT->ajax_call) {
    $created['name'] = rcube::Q($created['name']);
    $OUTPUT->show_message('groupcreated', 'confirmation');
    $OUTPUT->command('insert_contact_group', array('source' => $source) + $created);
  }
@@ -92,10 +103,15 @@
    $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error');
  }
}
else if ($RCMAIL->action == 'group-rename') {
  if (($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_POST)) && ($name = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true)))) {
    $plugin = $RCMAIL->plugins->exec_hook('group_rename', array('group_id' => $gid, 'name' => $name, 'source' => $source));
    if (($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_POST))
        && ($name = trim(rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST, true)))
    ) {
        $plugin = $RCMAIL->plugins->exec_hook('group_rename', array(
            'group_id' => $gid,
            'name'     => $name,
            'source'   => $source,
        ));
    if (!$plugin['abort'])
      $newname = $CONTACTS->rename_group($gid, $plugin['name'], $newgid);
@@ -108,13 +124,16 @@
    $OUTPUT->command('update_contact_group', array(
      'source' => $source, 'id' => $gid, 'name' => rcube::Q($newname), 'newid' => $newgid));
  }
  else if (!$newname)
    else if (!$newname) {
    $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error');
}
}
else if ($RCMAIL->action == 'group-delete') {
  if ($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_POST)) {
    $plugin = $RCMAIL->plugins->exec_hook('group_delete', array('group_id' => $gid, 'source' => $source));
        $plugin = $RCMAIL->plugins->exec_hook('group_delete', array(
            'group_id' => $gid,
            'source'   => $source,
        ));
    if (!$plugin['abort'])
      $deleted = $CONTACTS->delete_group($gid);
@@ -126,10 +145,10 @@
    $OUTPUT->show_message('groupdeleted', 'confirmation');
    $OUTPUT->command('remove_group_item', array('source' => $source, 'id' => $gid));
  }
  else
    else {
    $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error');
    }
}
// send response
$OUTPUT->send();
program/steps/addressbook/import.inc
@@ -5,7 +5,7 @@
 | program/steps/addressbook/import.inc                                  |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2009, The Roundcube Dev Team                       |
 | Copyright (C) 2008-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -26,6 +26,7 @@
function rcmail_import_form($attrib)
{
  global $RCMAIL, $OUTPUT;
  $target = rcube_utils::get_input_value('_target', rcube_utils::INPUT_GPC);
  $attrib += array('id' => "rcmImportForm");
@@ -46,8 +47,9 @@
  if (count($writable_books) > 1) {
    $select = new html_select(array('name' => '_target', 'id' => 'rcmimporttarget', 'is_escaped' => true));
    foreach ($writable_books as $book)
        foreach ($writable_books as $book) {
        $select->add($book['name'], $book['id']);
        }
    $table->add('title', html::label('rcmimporttarget', $RCMAIL->gettext('importtarget')));
    $table->add(null, $select->show($target));
@@ -79,9 +81,8 @@
  $OUTPUT->add_label('selectimportfile','importwait');
  $OUTPUT->add_gui_object('importform', $attrib['id']);
  $out = html::p(null, rcube::Q($RCMAIL->gettext('importdesc'), 'show'));
  $out .= $OUTPUT->form_tag(array(
    $out = html::p(null, rcube::Q($RCMAIL->gettext('importdesc'), 'show'))
        . $OUTPUT->form_tag(array(
      'action' => $RCMAIL->url('import'),
      'method' => 'post',
      'enctype' => 'multipart/form-data') + $attrib,
@@ -107,16 +108,17 @@
      'vars' => $vars,
    )) . ($IMPORT_STATS->names ? ':' : '.'));
  if ($IMPORT_STATS->names)
    if ($IMPORT_STATS->names) {
    $content .= html::p('em', join(', ', array_map('Q', $IMPORT_STATS->names)));
    }
  if ($IMPORT_STATS->skipped) {
      $content .= html::p(null, $RCMAIL->gettext(array(
          'name' => 'importconfirmskipped',
          'nr' => $IMPORT_STATS->skipped,
          'vars' => $vars,
        )) . ':');
      $content .= html::p('em', join(', ', array_map('Q', $IMPORT_STATS->skipped_names)));
            )) . ':')
            . html::p('em', join(', ', array_map('Q', $IMPORT_STATS->skipped_names)));
  }
  return html::div($attrib, $content);
@@ -129,6 +131,7 @@
function rcmail_import_buttons($attrib)
{
  global $IMPORT_STATS, $OUTPUT;
  $target = rcube_utils::get_input_value('_target', rcube_utils::INPUT_GPC);
  $attrib += array('type' => 'input');
program/steps/addressbook/mailto.inc
program/steps/addressbook/save.inc
@@ -5,7 +5,7 @@
 | program/steps/addressbook/save.inc                                    |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2011, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -39,22 +39,28 @@
// read POST values into hash array
$a_record = array();
foreach ($GLOBALS['CONTACT_COLTYPES'] as $col => $colprop) {
  $fname = '_'.$col;
  if ($colprop['composite'])
    if ($colprop['composite']) {
    continue;
    }
    $fname = '_'.$col;
  // gather form data of composite fields
  if ($colprop['childs']) {
    $values = array();
    foreach ($colprop['childs'] as $childcol => $cp) {
      $vals = rcube_utils::get_input_value('_'.$childcol, rcube_utils::INPUT_POST, true);
      foreach ((array)$vals as $i => $val)
            foreach ((array)$vals as $i => $val) {
        $values[$i][$childcol] = $val;
    }
        }
    $subtypes = isset($_REQUEST['_subtype_' . $col]) ? (array)rcube_utils::get_input_value('_subtype_' . $col, rcube_utils::INPUT_POST) : array('');
    foreach ($subtypes as $i => $subtype) {
      $suffix = $subtype ? ':'.$subtype : '';
      if ($values[$i])
            if ($values[$i]) {
        $a_record[$col.$suffix][] = $values[$i];
            }
     }
  }
  // assign values and subtypes
@@ -93,6 +99,7 @@
// Generate contact's display name (must be before validation)
if (empty($a_record['name'])) {
    $a_record['name'] = rcube_addressbook::compose_display_name($a_record, true);
    // Reset it if equals to email address (from compose_display_name())
    $email = rcube_addressbook::get_col_values('email', $a_record, true);
    if ($a_record['name'] == $email[0]) {
@@ -130,8 +137,7 @@
$source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC);
// update an existing contact
if (!empty($cid))
{
if (!empty($cid)) {
  $plugin = $RCMAIL->plugins->exec_hook('contact_update',
    array('id' => $cid, 'record' => $a_record, 'source' => $source));
  $a_record = $plugin['record'];
@@ -155,8 +161,9 @@
    $record['email'] = reset($CONTACTS->get_col_values('email', $record, true));
    $record['name']  = rcube_addressbook::compose_list_name($record);
    foreach (array('name') as $col)
        foreach (array('name') as $col) {
      $a_js_cols[] = rcube::Q((string)$record[$col]);
        }
    // update the changed col in list
    $OUTPUT->command('parent.update_contact_row', $cid, $a_js_cols, $newcid, $source, $record);
@@ -178,8 +185,9 @@
  // Name of the addressbook already selected on the list
  $orig_source = rcube_utils::get_input_value('_orig_source', rcube_utils::INPUT_GPC);
  if (!strlen($source))
    if (!strlen($source)) {
    $source = $orig_source;
    }
  // show notice if existing contacts with same e-mail are found
  foreach ($CONTACTS->get_col_values('email', $a_record, true) as $email) {
@@ -216,8 +224,9 @@
        $CONTACTS->add_to_group($plugin['group_id'], $plugin['ids']);
      }
    }
    else
        else {
      $counts = $CONTACTS->count();
        }
    if ((string)$source === (string)$orig_source) {
      // add contact row or jump to the page where it should appear
program/steps/mail/addcontact.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/addcontact.inc                                     |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -20,20 +20,21 @@
*/
// only process ajax requests
if (!$OUTPUT->ajax_call)
if (!$OUTPUT->ajax_call) {
  return;
}
// Get default addressbook
$CONTACTS = $RCMAIL->get_address_book(-1, true);
if (!empty($_POST['_address']) && is_object($CONTACTS))
{
  $contact_arr = rcube_mime::decode_address_list(rcube_utils::get_input_value('_address', rcube_utils::INPUT_POST, true), 1, false);
if (!empty($_POST['_address']) && is_object($CONTACTS)) {
    $address = rcube_utils::get_input_value('_address', rcube_utils::INPUT_POST, true);
    $contact_arr = rcube_mime::decode_address_list($address, 1, false);
  if (!empty($contact_arr[1]['mailto'])) {
    $contact = array(
      'email' => $contact_arr[1]['mailto'],
      'name' => $contact_arr[1]['name']
            'name'  => $contact_arr[1]['name'],
    );
    // Validity checks
@@ -49,10 +50,12 @@
    }
    $contact['email'] = rcube_utils::idn_to_utf8($contact['email']);
    $contact = $RCMAIL->plugins->exec_hook('contact_displayname', $contact);
    if (empty($contact['firstname']) || empty($contact['surname']))
        if (empty($contact['firstname']) || empty($contact['surname'])) {
      $contact['name'] = rcube_addressbook::compose_display_name($contact);
        }
    // validate contact record
    if (!$CONTACTS->validate($contact, true)) {
@@ -67,22 +70,24 @@
    // check for existing contacts
    $existing = $CONTACTS->search('email', $contact['email'], 1, false);
    if ($done = $existing->count)
        if ($done = $existing->count) {
      $OUTPUT->show_message('contactexists', 'warning');
        }
    else {
      $plugin = $RCMAIL->plugins->exec_hook('contact_create', array('record' => $contact, 'source' => null));
      $contact = $plugin['record'];
      $done = !$plugin['abort'] ? $CONTACTS->insert($contact) : $plugin['result'];
      if ($done)
            if ($done) {
        $OUTPUT->show_message('addedsuccessfully', 'confirmation');
    }
  }
}
}
if (!$done)
if (!$done) {
  $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsavingcontact', 'error');
}
$OUTPUT->send();
program/steps/mail/attachments.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/attachments.inc                                    |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -38,13 +38,17 @@
// remove an attachment
if ($RCMAIL->action=='remove-attachment')
{
if ($RCMAIL->action=='remove-attachment') {
  $id = 'undefined';
  if (preg_match('/^rcmfile(\w+)$/', $_POST['_file'], $regs))
    if (preg_match('/^rcmfile(\w+)$/', $_POST['_file'], $regs)) {
    $id = $regs[1];
  if ($attachment = $COMPOSE['attachments'][$id])
    }
    if ($attachment = $COMPOSE['attachments'][$id]) {
    $attachment = $RCMAIL->plugins->exec_hook('attachment_delete', $attachment);
    }
  if ($attachment['status']) {
    if (is_array($COMPOSE['attachments'][$id])) {
      $RCMAIL->session->remove($SESSION_KEY.'.attachments.'.$id);
@@ -56,26 +60,33 @@
  exit;
}
if ($RCMAIL->action=='display-attachment')
{
if ($RCMAIL->action=='display-attachment') {
  $id = 'undefined';
  if (preg_match('/^rcmfile(\w+)$/', $_GET['_file'], $regs))
    if (preg_match('/^rcmfile(\w+)$/', $_GET['_file'], $regs)) {
    $id = $regs[1];
  if ($attachment = $COMPOSE['attachments'][$id])
    }
    if ($attachment = $COMPOSE['attachments'][$id]) {
    $attachment = $RCMAIL->plugins->exec_hook('attachment_display', $attachment);
    }
  if ($attachment['status']) {
    if (empty($attachment['size']))
        if (empty($attachment['size'])) {
      $attachment['size'] = $attachment['data'] ? strlen($attachment['data']) : @filesize($attachment['path']);
        }
    header('Content-Type: ' . $attachment['mimetype']);
    header('Content-Length: ' . $attachment['size']);
    if ($attachment['data'])
        if ($attachment['data']) {
      echo $attachment['data'];
    else if ($attachment['path'])
        }
        else if ($attachment['path']) {
      readfile($attachment['path']);
  }
    }
  exit;
}
@@ -94,15 +105,13 @@
    $err = $_FILES['_attachments']['error'][$i];
    if (!$err) {
      $attachment = array(
            $attachment = $RCMAIL->plugins->exec_hook('attachment_upload', array(
        'path' => $filepath,
        'size' => $_FILES['_attachments']['size'][$i],
        'name' => $_FILES['_attachments']['name'][$i],
        'mimetype' => rcube_mime::file_content_type($filepath, $_FILES['_attachments']['name'][$i], $_FILES['_attachments']['type'][$i]),
        'group' => $COMPOSE_ID,
      );
      $attachment = $RCMAIL->plugins->exec_hook('attachment_upload', $attachment);
            ));
    }
    if (!$err && $attachment['status'] && !$attachment['abort']) {
@@ -163,10 +172,16 @@
else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  // if filesize exceeds post_max_size then $_FILES array is empty,
  // show filesizeerror instead of fileuploaderror
  if ($maxsize = ini_get('post_max_size'))
    $msg = $RCMAIL->gettext(array('name' => 'filesizeerror', 'vars' => array('size' => $RCMAIL->show_bytes(parse_bytes($maxsize)))));
  else
    if ($maxsize = ini_get('post_max_size')) {
        $msg = $RCMAIL->gettext(array(
            'name' => 'filesizeerror',
            'vars' => array('size' => $RCMAIL->show_bytes(parse_bytes($maxsize)))
        ));
    }
    else {
    $msg = $RCMAIL->gettext('fileuploaderror');
    }
  $OUTPUT->command('display_message', $msg, 'error');
  $OUTPUT->command('remove_from_attachment_list', $uploadid);
}
@@ -174,4 +189,3 @@
// send html page with JS calls as response
$OUTPUT->command('auto_save_start', false);
$OUTPUT->send('iframe');
program/steps/mail/autocomplete.inc
@@ -5,8 +5,8 @@
 | program/steps/mail/autocomplete.inc                                   |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2008-2011, Roundcube Dev Team                           |
 | Copyright (C) 2011, Kolab Systems AG                                  |
 | Copyright (C) 2008-2013, Roundcube Dev Team                           |
 | Copyright (C) 2011-2013, Kolab Systems AG                             |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -23,10 +23,13 @@
if ($RCMAIL->action == 'group-expand') {
  $abook = $RCMAIL->get_address_book(rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC));
  if ($gid = rcube_utils::get_input_value('_gid', rcube_utils::INPUT_GPC)) {
    $members = array();
    $abook->set_group($gid);
    $abook->set_pagesize(1000);  // TODO: limit number of group members by config
        $separator = trim($RCMAIL->config->get('recipients_separator', ',')) . ' ';
    $result = $abook->list_records($RCMAIL->config->get('contactlist_fields'));
        $members   = array();
    while ($result && ($sql_arr = $result->iterate())) {
      $emails = (array) $abook->get_col_values('email', $sql_arr, true);
      if (!empty($emails) && ($email = array_shift($emails))) {
@@ -34,7 +37,6 @@
      }
    }
    $separator = trim($RCMAIL->config->get('recipients_separator', ',')) . ' ';
    $OUTPUT->command('replace_group_recipients', $gid, join($separator, array_unique($members)));
  }
@@ -49,10 +51,12 @@
$source = rcube_utils::get_input_value('_source', rcube_utils::INPUT_GPC);
$sid    = rcube_utils::get_input_value('_id', rcube_utils::INPUT_GPC);
if (strlen($source))
if (strlen($source)) {
  $book_types = array($source);
else
}
else {
  $book_types = (array) $RCMAIL->config->get('autocomplete_addressbooks', 'sql');
}
if (!empty($book_types) && strlen($search)) {
  $contacts  = array();
@@ -70,13 +74,14 @@
        $email_arr = (array)$abook->get_col_values('email', $sql_arr, true);
        $email_cnt = count($email_arr);
        $idx = 0;
        foreach ($email_arr as $email) {
          if (empty($email)) {
            continue;
          }
          $sql_arr['name'] = rcube_addressbook::compose_list_name($sql_arr);
          $contact = format_email_recipient($email, $sql_arr['name']);
                    $name    = rcube_addressbook::compose_list_name($sql_arr);
                    $contact = format_email_recipient($email, $name);
          // skip entries that don't match
          if ($email_cnt > 1 && strpos(mb_strtolower($contact), $search_lc) === false) {
@@ -88,8 +93,9 @@
            $contacts[]  = $contact;
            $sort_keys[] = sprintf('%s %03d', $sql_arr['name'] , $idx++);
            if (count($contacts) >= $MAXNUM)
                        if (count($contacts) >= $MAXNUM) {
              break 2;
                        }
          }
          // skip redundant entries (show only first email address)
@@ -105,6 +111,7 @@
      foreach ($abook->list_groups($search, $mode) as $group) {
        $abook->reset();
        $abook->set_group($group['ID']);
        $group_prop = $abook->get_group($group['ID']);
        // group (distribution list) with email address(es)
@@ -114,21 +121,27 @@
                $contacts[]  = format_email_recipient($email, $group['name']);
                $sort_keys[] = sprintf('%s %03d', $group['name'] , $idx++);
                if (count($contacts) >= $MAXNUM)
                        if (count($contacts) >= $MAXNUM) {
                  break 2;
                        }
            }
        }
        // show group with count
        else if (($result = $abook->count()) && $result->count) {
          $contacts[]  = array('name' => $group['name'] . ' (' . intval($result->count) . ')', 'id' => $group['ID'], 'source' => $id);
          $sort_keys[] = $group['name'];
                    $contacts[]  = array(
                        'name'   => $group['name'] . ' (' . intval($result->count) . ')',
                        'id'     => $group['ID'],
                        'source' => $id
                    );
          if (count($contacts) >= $MAXNUM)
                    if (count($contacts) >= $MAXNUM) {
            break;
        }
      }
    }
  }
    }
  if (count($contacts)) {
    // sort contacts index
program/steps/mail/copy.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/copy.inc                                           |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2010, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -20,8 +20,9 @@
*/
// only process ajax requests
if (!$OUTPUT->ajax_call)
if (!$OUTPUT->ajax_call) {
  return;
}
// move messages
if (!empty($_POST['_uid']) && strlen($_POST['_target_mbox'])) {
program/steps/mail/folders.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/folders.inc                                        |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -20,8 +20,9 @@
*/
// only process ajax requests
if (!$OUTPUT->ajax_call)
if (!$OUTPUT->ajax_call) {
    return;
}
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true);
program/steps/mail/get.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/get.inc                                            |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2011, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -113,19 +113,25 @@
    $mimetype = rcmail_fix_mimetype($part->mimetype);
    // allow post-processing of the message body
    $plugin = $RCMAIL->plugins->exec_hook('message_part_get',
      array('uid' => $MESSAGE->uid, 'id' => $part->mime_id, 'mimetype' => $mimetype, 'part' => $part, 'download' => !empty($_GET['_download'])));
        $plugin = $RCMAIL->plugins->exec_hook('message_part_get', array(
            'uid'      => $MESSAGE->uid,
            'id'       => $part->mime_id,
            'mimetype' => $mimetype,
            'part'     => $part,
            'download' => !empty($_GET['_download'])
        ));
    if ($plugin['abort'])
        if ($plugin['abort']) {
      exit;
        }
    // overwrite modified vars from plugin
    $mimetype   = $plugin['mimetype'];
    $extensions = rcube_mime::get_mime_extensions($mimetype);
    if ($plugin['body'])
        if ($plugin['body']) {
      $part->body = $plugin['body'];
        }
    // compare file mimetype with the stated content-type headers and file extension to avoid malicious operations
    if (!empty($_REQUEST['_embed']) && empty($_REQUEST['_nocheck'])) {
@@ -148,24 +154,28 @@
        list($real_ctype_primary, $real_ctype_secondary) = explode('/', $real_mimetype);
        // accept text/plain with any extension
        if ($real_mimetype == 'text/plain' && $real_mimetype == $mimetype)
                if ($real_mimetype == 'text/plain' && $real_mimetype == $mimetype) {
          $file_extension = 'txt';
                }
        // ignore differences in text/* mimetypes. Filetype detection isn't very reliable here
        if ($real_ctype_primary == 'text' && strpos($mimetype, $real_ctype_primary) === 0)
                if ($real_ctype_primary == 'text' && strpos($mimetype, $real_ctype_primary) === 0) {
          $real_mimetype = $mimetype;
                }
        // get valid file extensions
        $extensions = rcube_mime::get_mime_extensions($real_mimetype);
        $valid_extension = (!$file_extension || in_array($file_extension, (array)$extensions));
        // ignore filename extension if mimeclass matches (#1489029)
        if (!empty($_REQUEST['_mimeclass']) && $real_ctype_primary == $_REQUEST['_mimeclass'])
                if (!empty($_REQUEST['_mimeclass']) && $real_ctype_primary == $_REQUEST['_mimeclass']) {
          $valid_extension = true;
                }
        // fix mimetype for images wrongly declared as octet-stream
        if ($mimetype == 'application/octet-stream' && strpos($real_mimetype, 'image/') === 0 && $valid_extension)
                if ($mimetype == 'application/octet-stream' && strpos($real_mimetype, 'image/') === 0 && $valid_extension) {
          $mimetype = $real_mimetype;
                }
        $valid = ($real_mimetype == $mimetype && $valid_extension);
      }
@@ -193,14 +203,16 @@
                  'expected' => $mimetype . ($file_extension ? " (.$file_extension)" : ''),
                  'detected' => $real_mimetype . ($extensions[0] ? " (.$extensions[0])" : ''),
                )
              )) .
              html::p(array('class' => 'rcmail-inline-buttons'),
                html::tag('button',
                  array('onclick' => "location.href='" . $RCMAIL->url(array_merge($_GET, array('_nocheck' => 1))) . "'"),
                  $RCMAIL->gettext('showanyway')))
                            ))
                            . html::p(array('class' => 'rcmail-inline-buttons'),
                                html::tag('button', array(
                                    'onclick' => "location.href='" . $RCMAIL->url(array_merge($_GET, array('_nocheck' => 1))) . "'"
                                ),
                                $RCMAIL->gettext('showanyway'))
              )
          )));
                        ))));
        }
        exit;
      }
    }
@@ -239,8 +251,9 @@
      }
      else {
        // get part body if not available
        if (!$part->body)
                if (!$part->body) {
          $part->body = $MESSAGE->get_part_content($part->mime_id);
                }
        // show images?
        rcmail_check_safe($MESSAGE);
@@ -254,14 +267,15 @@
          if ($body_pos = strpos($out, '<body')) {
            $body_start = strpos($out, '>', $body_pos) + 1;
          }
          $out = substr($out, 0, $body_start) .
            html::div(array('class' => 'rcmail-inline-message rcmail-inline-warning'),
                    $out = substr($out, 0, $body_start)
                        . html::div(array('class' => 'rcmail-inline-message rcmail-inline-warning'),
              rcube::Q($RCMAIL->gettext('blockedimages')) . '&nbsp;' .
              html::tag('button',
                array('onclick' => "location.href='" . $RCMAIL->url(array_merge($_GET, array('_safe' => 1))) . "'"),
                rcube::Q($RCMAIL->gettext('showimages')))
            ) .
            substr($out, $body_start);
                        )
                        . substr($out, $body_start);
        }
      }
@@ -366,7 +380,6 @@
    exit;
  }
}
// print message
else {
  // send correct headers for content type
program/steps/mail/getunread.inc
@@ -5,7 +5,7 @@
 | program/steps/mail/getunread.inc                                      |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2009, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -21,8 +21,7 @@
$a_folders = $RCMAIL->storage->list_folders_subscribed('', '*', 'mail');
if (!empty($a_folders))
{
if (!empty($a_folders)) {
    $current   = $RCMAIL->storage->get_folder();
    $inbox     = ($current == 'INBOX');
    $trash     = $RCMAIL->config->get('trash_mbox');
program/steps/mail/headers.inc
@@ -19,8 +19,7 @@
 +-----------------------------------------------------------------------+
*/
if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST))
{
if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST)) {
    $source = $RCMAIL->storage->get_raw_headers($uid);
    if ($source !== false) {
@@ -48,5 +47,3 @@
}
exit;
program/steps/mail/import.inc
@@ -32,6 +32,7 @@
        if (!$err) {
            // check file content type first
            list($mtype_primary,) = explode('/', rcube_mime::file_content_type($filepath, $_FILES['_file']['name'][$i], $_FILES['_file']['type'][$i]));
            if (!in_array($mtype_primary, array('text','message'))) {
                $OUTPUT->show_message('importmessageerror', 'error');
                continue;
@@ -39,7 +40,9 @@
            // read the first few lines to detect header-like structure
            $fp = fopen($filepath, 'r');
            do { $line = fgets($fp); }
            do {
                $line = fgets($fp);
            }
            while ($line !== false && trim($line) == '');
            if (!preg_match('/^From\s+-/', $line) && !preg_match('/^[a-z-_]+:\s+.+/i', $line)) {
@@ -103,4 +106,3 @@
// send html page with JS calls as response
$OUTPUT->send('iframe');
program/steps/utils/error.inc
@@ -5,7 +5,7 @@
 | program/steps/utils/error.inc                                         |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) 2005-2012, The Roundcube Dev Team                       |
 | Copyright (C) 2005-2013, The Roundcube Dev Team                       |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
@@ -44,21 +44,21 @@
// authorization error
else if ($ERROR_CODE==401) {
  $__error_title = "AUTHORIZATION FAILED";
  $__error_text  = "Could not verify that you are authorized to access this service!<br />\n".
                   "Please contact your server-administrator.";
    $__error_text  = "Could not verify that you are authorized to access this service!<br />\n"
        . "Please contact your server-administrator.";
}
// forbidden due to request check
else if ($ERROR_CODE==403) {
  $__error_title = "REQUEST CHECK FAILED";
  $__error_text  = "Access to this service was denied due to failing security checks!<br />\n".
                   "Please contact your server-administrator.";
    $__error_text  = "Access to this service was denied due to failing security checks!<br />\n"
        . "Please contact your server-administrator.";
}
// failed request (wrong step in URL)
else if ($ERROR_CODE==404) {
  $__error_title = "REQUEST FAILED/FILE NOT FOUND";
  $request_url = htmlentities($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    $__error_title = "REQUEST FAILED/FILE NOT FOUND";
  $__error_text  = <<<EOF
The requested page was not found!<br />
Please contact your server-administrator.
@@ -69,8 +69,7 @@
}
// database connection error
else if ($ERROR_CODE==601)
{
else if ($ERROR_CODE == 601) {
  $__error_title = "CONFIGURATION ERROR";
  $__error_text  =  nl2br($ERROR_MESSAGE) . "<br />Please read the INSTALL instructions!";
}
@@ -86,10 +85,12 @@
  $__error_title = "SERVICE CURRENTLY NOT AVAILABLE!";
  $__error_text  = "Please contact your server-administrator.";
  if (($rcmail->config->get('debug_level') & 4) && $ERROR_MESSAGE)
    if (($rcmail->config->get('debug_level') & 4) && $ERROR_MESSAGE) {
    $__error_text = $ERROR_MESSAGE;
  else
    }
    else {
    $__error_text = sprintf('Error No. [%s]', $ERROR_CODE);
    }
}
$HTTP_ERR_CODE = $ERROR_CODE && $ERROR_CODE < 600 ? $ERROR_CODE : 500;
@@ -137,4 +138,3 @@
EOF;
exit;