| | |
| | | | 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. | |
| | |
| | | // 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 | |
| | | | | |
| | | | 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 | |
| | | | | |
| | | | 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. | |
| | |
| | | |
| | | 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']); |
| | |
| | | $OUTPUT->show_message('maxgroupmembersreached', 'warning', array('max' => $maxnum)); |
| | | $OUTPUT->send(); |
| | | } |
| | | |
| | | $result = $CONTACTS->add_to_group($gid, $plugin['ids']); |
| | | } |
| | | else { |
| | |
| | | $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']); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | 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']); |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | $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); |
| | |
| | | $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); |
| | |
| | | $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 | |
| | | | | |
| | | | 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. | |
| | |
| | | function rcmail_import_form($attrib) |
| | | { |
| | | global $RCMAIL, $OUTPUT; |
| | | |
| | | $target = rcube_utils::get_input_value('_target', rcube_utils::INPUT_GPC); |
| | | |
| | | $attrib += array('id' => "rcmImportForm"); |
| | |
| | | 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)); |
| | |
| | | $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, |
| | |
| | | '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); |
| | |
| | | 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/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. | |
| | |
| | | // 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 |
| | |
| | | // 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]) { |
| | |
| | | $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']; |
| | |
| | | $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); |
| | |
| | | // 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) { |
| | |
| | | $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 | |
| | | | | |
| | | | 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. | |
| | |
| | | */ |
| | | |
| | | // 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 |
| | |
| | | } |
| | | |
| | | $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)) { |
| | |
| | | // 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 | |
| | | | | |
| | | | 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. | |
| | |
| | | |
| | | |
| | | // 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); |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | $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']) { |
| | |
| | | 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); |
| | | } |
| | |
| | | // send html page with JS calls as response |
| | | $OUTPUT->command('auto_save_start', false); |
| | | $OUTPUT->send('iframe'); |
| | | |
| | |
| | | | 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. | |
| | |
| | | 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))) { |
| | |
| | | } |
| | | } |
| | | |
| | | $separator = trim($RCMAIL->config->get('recipients_separator', ',')) . ' '; |
| | | $OUTPUT->command('replace_group_recipients', $gid, join($separator, array_unique($members))); |
| | | } |
| | | |
| | |
| | | $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(); |
| | |
| | | $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) { |
| | |
| | | $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) |
| | |
| | | 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) |
| | |
| | | $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 | |
| | | | | |
| | | | 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. | |
| | |
| | | */ |
| | | |
| | | // 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 | |
| | | | | |
| | | | 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. | |
| | |
| | | */ |
| | | |
| | | // 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 | |
| | | | | |
| | | | 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. | |
| | |
| | | $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'])) { |
| | |
| | | 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); |
| | | } |
| | |
| | | '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; |
| | | } |
| | | } |
| | |
| | | } |
| | | 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); |
| | |
| | | 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')) . ' ' . |
| | | 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); |
| | | } |
| | | } |
| | | |
| | |
| | | exit; |
| | | } |
| | | } |
| | | |
| | | // print message |
| | | else { |
| | | // send correct headers for content type |
| | |
| | | | 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. | |
| | |
| | | |
| | | $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'); |
| | |
| | | +-----------------------------------------------------------------------+ |
| | | */ |
| | | |
| | | 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) { |
| | |
| | | } |
| | | |
| | | exit; |
| | | |
| | | |
| | |
| | | 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; |
| | |
| | | |
| | | // 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)) { |
| | |
| | | |
| | | // send html page with JS calls as response |
| | | $OUTPUT->send('iframe'); |
| | | |
| | |
| | | | 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. | |
| | |
| | | // 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. |
| | |
| | | } |
| | | |
| | | // 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!"; |
| | | } |
| | |
| | | $__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; |
| | |
| | | EOF; |
| | | |
| | | exit; |
| | | |