| | |
| | | | program/steps/mail/compose.inc | |
| | | | | |
| | | | This file is part of the RoundCube Webmail client | |
| | | | Copyright (C) 2005, RoundCube Dev. - Switzerland | |
| | | | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | | PURPOSE: | |
| | |
| | | |
| | | |
| | | // remove an attachment |
| | | if ($_action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_GET['_file'], $regs)) |
| | | if ($_action=='remove-attachment' && preg_match('/^rcmfile([0-9]+)$/', $_POST['_file'], $regs)) |
| | | { |
| | | $id = $regs[1]; |
| | | if (is_array($_SESSION['compose']['attachments'][$id])) |
| | | { |
| | | @unlink($_SESSION['compose']['attachments'][$id]['path']); |
| | | $_SESSION['compose']['attachments'][$id] = NULL; |
| | | $commands = sprintf("parent.%s.remove_from_attachment_list('rcmfile%d');\n", $JS_OBJECT_NAME, $id); |
| | | rcube_remote_response($commands); |
| | | $OUTPUT->command('remove_from_attachment_list', "rcmfile$id"); |
| | | $OUTPUT->send(); |
| | | exit; |
| | | } |
| | | } |
| | |
| | | rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved', 'converting'); |
| | | |
| | | // add config parameter to client script |
| | | $OUTPUT->add_script(sprintf("%s.set_env('draft_autosave', %d);", $JS_OBJECT_NAME, !empty($CONFIG['drafts_mbox']) ? $CONFIG['draft_autosave'] : 0)); |
| | | $OUTPUT->set_env('draft_autosave', !empty($CONFIG['drafts_mbox']) ? $CONFIG['draft_autosave'] : 0); |
| | | |
| | | |
| | | // get reference message and set compose mode |
| | |
| | | { |
| | | $_SESSION['compose']['reply_uid'] = $msg_uid; |
| | | $_SESSION['compose']['reply_msgid'] = $MESSAGE['headers']->messageID; |
| | | $_SESSION['compose']['references'] = $MESSAGE['headers']->reference; |
| | | $_SESSION['compose']['references'] .= !empty($MESSAGE['headers']->reference) ? ' ' : ''; |
| | | $_SESSION['compose']['references'] .= $MESSAGE['headers']->messageID; |
| | | $_SESSION['compose']['references'] = trim($MESSAGE['headers']->references . " " . $MESSAGE['headers']->messageID); |
| | | |
| | | if (!empty($_GET['_all'])) |
| | | $MESSAGE['reply_all'] = 1; |
| | |
| | | case 'to': |
| | | $fname = '_to'; |
| | | $header = 'to'; |
| | | |
| | | // we have contact id's as get parameters |
| | | if (!empty($_GET['_to']) && preg_match('/^[0-9]+(,[0-9]+)*$/', $_GET['_to'])) |
| | | { |
| | | $a_recipients = array(); |
| | | $sql_result = $DB->query("SELECT name, email |
| | | FROM ".get_table_name('contacts')." |
| | | WHERE user_id=? |
| | | AND del<>1 |
| | | AND contact_id IN (".$_GET['_to'].")", |
| | | $_SESSION['user_id']); |
| | | |
| | | while ($sql_arr = $DB->fetch_assoc($sql_result)) |
| | | $a_recipients[] = format_email_recipient($sql_arr['email'], $sql_arr['name']); |
| | | |
| | | if (sizeof($a_recipients)) |
| | | $fvalue = join(', ', $a_recipients); |
| | | } |
| | | |
| | | // we have a set of recipients stored is session |
| | | if (($mailto_id = get_input_value('_mailto', RCUBE_INPUT_GET)) && $_SESSION['mailto'][$mailto_id]) |
| | | $fvalue = $_SESSION['mailto'][$mailto_id]; |
| | | else if (!empty($_GET['_to'])) |
| | | $fvalue = get_input_value('_to', RCUBE_INPUT_GET); |
| | | |
| | |
| | | $header = 'bcc'; |
| | | } |
| | | |
| | | $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'wrap', 'tabindex'); |
| | | $allow_attrib = array('id', 'class', 'style', 'cols', 'rows', 'tabindex'); |
| | | $field_type = 'textarea'; |
| | | break; |
| | | |
| | |
| | | |
| | | function rcmail_compose_header_from($attrib) |
| | | { |
| | | global $IMAP, $MESSAGE, $DB, $OUTPUT, $JS_OBJECT_NAME, $compose_mode; |
| | | global $IMAP, $MESSAGE, $DB, $OUTPUT, $compose_mode; |
| | | |
| | | // pass the following attributes to the form class |
| | | $field_attrib = array('name' => '_from'); |
| | |
| | | $from_id = 0; |
| | | $a_signatures = array(); |
| | | |
| | | $field_attrib['onchange'] = "$JS_OBJECT_NAME.change_identity(this)"; |
| | | $field_attrib['onchange'] = JS_OBJECT_NAME.".change_identity(this)"; |
| | | $select_from = new select($field_attrib); |
| | | |
| | | while ($sql_arr = $DB->fetch_assoc($sql_result)) |
| | |
| | | $out = $select_from->show($from_id); |
| | | |
| | | // add signatures to client |
| | | $OUTPUT->add_script(sprintf("%s.set_env('signatures', %s);", $JS_OBJECT_NAME, array2js($a_signatures))); |
| | | $OUTPUT->set_env('signatures', $a_signatures); |
| | | } |
| | | else |
| | | { |
| | |
| | | |
| | | function rcmail_compose_body($attrib) |
| | | { |
| | | global $CONFIG, $OUTPUT, $MESSAGE, $JS_OBJECT_NAME, $compose_mode; |
| | | global $CONFIG, $OUTPUT, $MESSAGE, $compose_mode; |
| | | |
| | | list($form_start, $form_end) = get_form_tags($attrib); |
| | | unset($attrib['form']); |
| | |
| | | $lang_set, |
| | | substr($_SESSION['user_lang'], 0, 2), |
| | | $attrib['id'], |
| | | $JS_OBJECT_NAME), 'foot'); |
| | | JS_OBJECT_NAME), 'foot'); |
| | | |
| | | rcube_add_label('checking'); |
| | | } |
| | |
| | | |
| | | function rcmail_compose_attachment_list($attrib) |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME, $CONFIG; |
| | | global $OUTPUT, $CONFIG; |
| | | |
| | | // add ID if not given |
| | | if (!$attrib['id']) |
| | |
| | | foreach ($_SESSION['compose']['attachments'] as $id => $a_prop) |
| | | $out .= sprintf('<li id="rcmfile%d"><a href="#delete" onclick="return %s.command(\'remove-attachment\',\'rcmfile%d\', this)" title="%s">%s</a>%s</li>', |
| | | $id, |
| | | $JS_OBJECT_NAME, |
| | | JS_OBJECT_NAME, |
| | | $id, |
| | | Q(rcube_label('delete')), |
| | | $button, |
| | | Q($a_prop['name'])); |
| | | } |
| | | |
| | | $OUTPUT->add_script(sprintf("%s.gui_object('attachmentlist', '%s');", $JS_OBJECT_NAME, $attrib['id'])); |
| | | $OUTPUT->add_gui_object('attachmentlist', $attrib['id']); |
| | | |
| | | $out .= '</ul>'; |
| | | return $out; |
| | |
| | | |
| | | function rcmail_compose_attachment_form($attrib) |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME, $SESS_HIDDEN_FIELD; |
| | | global $OUTPUT, $SESS_HIDDEN_FIELD; |
| | | |
| | | // add ID if not given |
| | | if (!$attrib['id']) |
| | |
| | | $input_field = rcmail_compose_attachment_field(array()); |
| | | $label_send = rcube_label('upload'); |
| | | $label_close = rcube_label('close'); |
| | | $js_instance = JS_OBJECT_NAME; |
| | | |
| | | $out = <<<EOF |
| | | <div$attrib_str> |
| | |
| | | $SESS_HIDDEN_FIELD |
| | | $input_field<br /> |
| | | <input type="button" value="$label_close" class="button" onclick="document.getElementById('$attrib[id]').style.visibility='hidden'" /> |
| | | <input type="button" value="$label_send" class="button" onclick="$JS_OBJECT_NAME.command('send-attachment', this.form)" /> |
| | | <input type="button" value="$label_send" class="button" onclick="$js_instance.command('send-attachment', this.form)" /> |
| | | </form> |
| | | </div> |
| | | EOF; |
| | | |
| | | |
| | | $OUTPUT->add_script(sprintf("%s.gui_object('uploadbox', '%s');", $JS_OBJECT_NAME, $attrib['id'])); |
| | | $OUTPUT->add_gui_object('uploadbox', $attrib['id']); |
| | | return $out; |
| | | } |
| | | |
| | |
| | | |
| | | $attrib['id'] = '_' . $value; |
| | | $rb = new radiobutton($attrib); |
| | | $selector .= sprintf("<td>%s</td><td class=\"title\"><label for=\"%s\">%s</label></td>", |
| | | $selector .= sprintf("%s<label for=\"%s\">%s</label>", |
| | | $rb->show($value), |
| | | $attrib['id'], |
| | | rcube_label($text)); |
| | |
| | | |
| | | function get_form_tags($attrib) |
| | | { |
| | | global $CONFIG, $OUTPUT, $JS_OBJECT_NAME, $MESSAGE_FORM, $SESS_HIDDEN_FIELD; |
| | | global $CONFIG, $OUTPUT, $MESSAGE_FORM, $SESS_HIDDEN_FIELD; |
| | | |
| | | $form_start = ''; |
| | | if (!strlen($MESSAGE_FORM)) |
| | |
| | | $form_name = !empty($attrib['form']) ? $attrib['form'] : 'form'; |
| | | |
| | | if (!strlen($MESSAGE_FORM)) |
| | | $OUTPUT->add_script("$JS_OBJECT_NAME.gui_object('messageform', '$form_name');"); |
| | | $OUTPUT->add_gui_object('messageform', $form_name); |
| | | |
| | | $MESSAGE_FORM = $form_name; |
| | | |
| | |
| | | } |
| | | |
| | | |
| | | function format_email_recipient($email, $name='') |
| | | { |
| | | if ($name && $name != $email) |
| | | return sprintf('%s <%s>', strpos($name, ",") ? '"'.$name.'"' : $name, $email); |
| | | else |
| | | return $email; |
| | | } |
| | | |
| | | |
| | | function rcmail_charset_pulldown($selected='ISO-8859-1') |
| | | { |
| | | $select = new select(); |
| | | |
| | | |
| | | return $select->show($selected); |
| | | } |
| | | // register UI objects |
| | | $OUTPUT->add_handlers(array( |
| | | 'composeheaders' => 'rcmail_compose_headers', |
| | | 'composesubject' => 'rcmail_compose_subject', |
| | | 'composebody' => 'rcmail_compose_body', |
| | | 'composeattachmentlist' => 'rcmail_compose_attachment_list', |
| | | 'composeattachmentform' => 'rcmail_compose_attachment_form', |
| | | 'composeattachment' => 'rcmail_compose_attachment_field', |
| | | 'priorityselector' => 'rcmail_priority_selector', |
| | | 'editorselector' => 'rcmail_editor_selector', |
| | | 'receiptcheckbox' => 'rcmail_receipt_checkbox', |
| | | )); |
| | | |
| | | |
| | | /****** get contacts for this user and add them to client scripts ********/ |
| | | |
| | | $sql_result = $DB->query("SELECT name, email |
| | | FROM ".get_table_name('contacts')." WHERE user_id=? |
| | | AND del<>1",$_SESSION['user_id']); |
| | | require_once('include/rcube_contacts.inc'); |
| | | |
| | | $CONTACTS = new rcube_contacts($DB, $_SESSION['user_id']); |
| | | $CONTACTS->set_pagesize(1000); |
| | | |
| | | if ($DB->num_rows($sql_result)) |
| | | if ($result = $CONTACTS->list_records()) |
| | | { |
| | | $a_contacts = array(); |
| | | while ($sql_arr = $DB->fetch_assoc($sql_result)) |
| | | while ($sql_arr = $result->iterate()) |
| | | if ($sql_arr['email']) |
| | | $a_contacts[] = format_email_recipient($sql_arr['email'], JQ($sql_arr['name'])); |
| | | |
| | | $OUTPUT->add_script(sprintf("$JS_OBJECT_NAME.set_env('contacts', %s);", array2js($a_contacts))); |
| | | $OUTPUT->set_env('contacts', $a_contacts); |
| | | } |
| | | |
| | | |