Compose, save and sendmail cleanup
| | |
| | | return 'this.'.$command; |
| | | |
| | | else |
| | | $OUTPUT->add_script(sprintf("%s%s.%s", |
| | | $OUTPUT->add_script(sprintf("%s%s.%s\n", |
| | | $framed ? sprintf('if(parent.%s)parent.', $JS_OBJECT_NAME) : '', |
| | | $JS_OBJECT_NAME, |
| | | $command)); |
| | |
| | | } |
| | | |
| | | |
| | | // send correctly formatted response for a request posted to an iframe |
| | | function rcube_iframe_response($js_code='') |
| | | { |
| | | global $OUTPUT, $JS_OBJECT_NAME; |
| | | |
| | | if (!empty($js_code)) |
| | | $OUTPUT->add_script("if(parent.$JS_OBJECT_NAME){\n" . $js_code . "\n}"); |
| | | |
| | | $OUTPUT->write(); |
| | | exit; |
| | | } |
| | | |
| | | |
| | | // read directory program/localization/ and return a list of available languages |
| | | function rcube_list_languages() |
| | | { |
| | |
| | | foreach ($a as $key => $val) |
| | | { |
| | | $val = str_replace("\"<", "\" <", $val); |
| | | $sub_a = $this->_explode_quoted_string(' ', $val); |
| | | $sub_a = $this->_explode_quoted_string(' ', $this->decode_header($val)); |
| | | $result[$key]['name'] = ''; |
| | | |
| | | foreach ($sub_a as $k => $v) |
| | | { |
| | |
| | | |
| | | if (empty($result[$key]['name'])) |
| | | $result[$key]['name'] = $result[$key]['address']; |
| | | |
| | | $result[$key]['name'] = $this->decode_header($result[$key]['name']); |
| | | } |
| | | |
| | | return $result; |
| | |
| | | |
| | | var $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n"; |
| | | var $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n"; |
| | | var $default_template = "<html>\n<body></body>\n</html>"; |
| | | |
| | | var $title = ''; |
| | | var $header = ''; |
| | |
| | | } |
| | | |
| | | |
| | | function set_title() |
| | | function set_title($t) |
| | | { |
| | | |
| | | $this->title = $t; |
| | | } |
| | | |
| | | |
| | | function set_charset($charset) |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | function reset() |
| | | { |
| | | $this->css = new rcube_css(); |
| | | $this->script_files = array(); |
| | | $this->scripts = array(); |
| | | $this->title = ''; |
| | | } |
| | | |
| | | |
| | | function write($templ='', $base_path='') |
| | | { |
| | | $output = trim($templ); |
| | | $output = empty($templ) ? $this->default_template : trim($templ); |
| | | |
| | | // set default page title |
| | | if (!strlen($this->title)) |
| | |
| | | var CONTROL_KEY = 1; |
| | | var SHIFT_KEY = 2; |
| | | var CONTROL_SHIFT_KEY = 3; |
| | | var DRAFT_AUTOSAVE = 10; // Minutes |
| | | var DRAFT_AUTOSAVE = 5; // Minutes |
| | | |
| | | var rcube_webmail_client; |
| | | var rcube_save_timer; |
| | | |
| | | function rcube_webmail() |
| | | { |
| | |
| | | |
| | | // start the auto-save timer |
| | | this.auto_save_start(); |
| | | |
| | | }; |
| | | |
| | | this.init_address_input_events = function(obj) |
| | |
| | | location.href = this.env.comm_path+'&_action=compose&_draft_uid='+uid+'&_mbox='+escape(this.env.mailbox); |
| | | } |
| | | else |
| | | { |
| | | this.show_message(uid); |
| | | } |
| | | } |
| | | } |
| | | else if (this.task=='addressbook') |
| | |
| | | |
| | | case 'savedraft': |
| | | // Reset the auto-save timer |
| | | self.clearTimeout(rcube_save_timer); |
| | | self.clearTimeout(this.save_timer); |
| | | |
| | | if (!this.gui_objects.messageform) |
| | | break; |
| | |
| | | // all checks passed, send message |
| | | this.set_busy(true, 'sendingmessage'); |
| | | var form = this.gui_objects.messageform; |
| | | form.target = "savetarget"; |
| | | form._draft.value=''; |
| | | form.submit(); |
| | | break; |
| | |
| | | |
| | | case 'send-attachment': |
| | | // Reset the auto-save timer |
| | | self.clearTimeout(rcube_save_timer); |
| | | self.clearTimeout(this.save_timer); |
| | | |
| | | this.upload_file(props) |
| | | break; |
| | |
| | | return true; |
| | | }; |
| | | |
| | | |
| | | this.auto_save_start = function() |
| | | { |
| | | rcube_save_timer = self.setTimeout('rcmail.command("savedraft","",this)',DRAFT_AUTOSAVE * 60000); |
| | | } |
| | | this.save_timer = self.setTimeout('rcmail.command("savedraft","",this)', DRAFT_AUTOSAVE * 60000); |
| | | }; |
| | | |
| | | |
| | | this.compose_field_hash = function() |
| | | { |
| | |
| | | for (i=0;i<list.length;i++) |
| | | if (list[i].id == name) |
| | | this.gui_objects.attachmentlist.removeChild(list[i]); |
| | | } |
| | | }; |
| | | |
| | | this.remove_attachment = function(name) |
| | | { |
| | |
| | | this.http_request('remove-attachment', '_filename='+escape(name)); |
| | | |
| | | return true; |
| | | } |
| | | }; |
| | | |
| | | // send remote request to add a new contact |
| | | this.add_contact = function(value) |
| | |
| | | }; |
| | | |
| | | |
| | | this.sent_successfully = function(msg) |
| | | { |
| | | this.list_mailbox(); |
| | | this.display_message(msg, 'confirmation', true); |
| | | } |
| | | |
| | | |
| | | /*********************************************************/ |
| | | /********* keyboard live-search methods *********/ |
| | | /*********************************************************/ |
| | |
| | | $_SESSION['compose'] = array('id' => uniqid(rand())); |
| | | |
| | | // add some labels to client |
| | | rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'savingmessage', 'messagesaved'); |
| | | rcube_add_label('nosubject', 'norecipientwarning', 'nosubjectwarning', 'nobodywarning', 'notsentwarning', 'savingmessage', 'sendingmessage', 'messagesaved'); |
| | | |
| | | |
| | | if ($_GET['_reply_uid'] || $_GET['_forward_uid'] || $_GET['_draft_uid']) |
| | |
| | | rcube_add_label('checking'); |
| | | } |
| | | |
| | | $out .= '<iframe name="savetarget" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>'; |
| | | $out .= "\n".'<iframe name="savetarget" src="program/blank.gif" style="width:0;height:0;visibility:hidden;"></iframe>'; |
| | | |
| | | return $out; |
| | | } |
| | |
| | | |
| | | $OUTPUT->add_script(sprintf("$JS_OBJECT_NAME.set_env('contacts', %s);", array2js($a_contacts))); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | parse_template('compose'); |
| | |
| | | /****** message sending functions ********/ |
| | | |
| | | |
| | | |
| | | function rcmail_get_identity($id) |
| | | { |
| | | global $DB, $CHARSET, $OUTPUT; |
| | |
| | | return FALSE; |
| | | } |
| | | |
| | | |
| | | if (strlen($_POST['_draft_saveid']) > 3) |
| | | $olddraftmessageid = get_input_value('_draft_saveid', RCUBE_INPUT_POST); |
| | | |
| | | $message_id = sprintf('<%s@%s>', md5(uniqid('rcmail'.rand(),true)), $_SESSION['imap_host']); |
| | | |
| | | $savedraft = !empty($_POST['_draft']) ? TRUE : FALSE; |
| | | |
| | | // remove all scripts and act as called in frame |
| | | $OUTPUT->reset(); |
| | | $_framed = TRUE; |
| | | |
| | | |
| | | /****** check submission and compose message ********/ |
| | | |
| | |
| | | if (empty($_POST['_to']) && empty($_POST['_subject']) && $_POST['_message']) |
| | | { |
| | | show_message("sendingfailed", 'error'); |
| | | rcmail_overwrite_action('compose'); |
| | | //rcmail_overwrite_action('compose'); |
| | | rcube_iframe_response(); |
| | | return; |
| | | } |
| | | |
| | |
| | | if (!$sent) |
| | | { |
| | | show_message("sendingfailed", 'error'); |
| | | rcmail_overwrite_action('compose'); |
| | | rcube_iframe_response(); |
| | | return; |
| | | } |
| | | |
| | |
| | | $IMAP->set_flag($_SESSION['compose']['reply_uid'], 'ANSWERED'); |
| | | |
| | | } // End of SMTP Delivery Block |
| | | |
| | | |
| | | |
| | | // Determine which folder to save message |
| | | if ($savedraft) |
| | |
| | | // raise error if saving failed |
| | | if (!$saved) |
| | | { |
| | | // clear the "saving message" busy status, and display failure |
| | | $errorout = sprintf("parent.%s.display_message('%s', '%s');", |
| | | $JS_OBJECT_NAME, |
| | | addslashes(rep_specialchars_output(rcube_label(array('name' => 'errorsaving', 'vars' => NULL)))), |
| | | 'error'); |
| | | print "<html><script type=\"text/javascript\">$errorout</script></html>"; |
| | | raise_error(array('code' => 800, |
| | | 'type' => 'imap', |
| | | 'file' => __FILE__, |
| | | 'message' => "Could not save message in $CONFIG[$store_target]"), TRUE, FALSE); |
| | | exit; |
| | | |
| | | show_message('errorsaving', 'error'); |
| | | rcube_iframe_response($errorout); |
| | | } |
| | | |
| | | if ($olddraftmessageid) |
| | |
| | | if ($savedraft) |
| | | { |
| | | // clear the "saving message" busy status, and display success |
| | | $frameout = sprintf("parent.%s.display_message('%s', '%s');", |
| | | $JS_OBJECT_NAME, |
| | | addslashes(rep_specialchars_output(rcube_label(array('name' => 'messagesaved', 'vars' => NULL)))), |
| | | 'confirmation'); |
| | | show_message('messagesaved', 'confirmation'); |
| | | |
| | | // update "_draft_saveid" on the page, which is used to delete a previous draft |
| | | $frameout .= 'var foundid = parent.rcube_find_object("_draft_saveid",parent.document);'; |
| | | $frameout .= sprintf('foundid.value = "%s";',str_replace(array('<','>'),"",$message_id)); |
| | | $frameout = "var foundid = parent.rcube_find_object('_draft_saveid', parent.document);\n"; |
| | | $frameout .= sprintf("foundid.value = '%s';\n", str_replace(array('<','>'), "", $message_id)); |
| | | |
| | | // update the "cmp_hash" to prevent "Unsaved changes" warning |
| | | $frameout .= sprintf("parent.%s.cmp_hash = parent.%s.compose_field_hash();",$JS_OBJECT_NAME,$JS_OBJECT_NAME); |
| | | $frameout .= sprintf("parent.%s.cmp_hash = parent.%s.compose_field_hash();\n", $JS_OBJECT_NAME, $JS_OBJECT_NAME); |
| | | |
| | | // start the auto-save timer again |
| | | $frameout .= sprintf("parent.%s.auto_save_start();",$JS_OBJECT_NAME); |
| | | |
| | | // send html page with JS calls as response |
| | | print "<html><script type=\"text/javascript\">$frameout</script></html>"; |
| | | exit; |
| | | rcube_iframe_response($frameout); |
| | | } |
| | | else |
| | | { |
| | |
| | | fclose($fp); |
| | | } |
| | | } |
| | | show_message('messagesent', 'confirmation'); |
| | | |
| | | rcmail_compose_cleanup(); |
| | | rcube_iframe_response(sprintf("parent.$JS_OBJECT_NAME.sent_successfully('%s');", |
| | | rep_specialchars_output(rcube_label('messagesent'), 'js'))); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | // send html page with JS calls as response |
| | | print <<<EOF |
| | | <html> |
| | | <script type="text/javascript"> |
| | | if (parent.$JS_OBJECT_NAME) |
| | | { |
| | | $frameout = <<<EOF |
| | | $response |
| | | parent.$JS_OBJECT_NAME.show_attachment_form(false); |
| | | parent.$JS_OBJECT_NAME.auto_save_start(); |
| | | } |
| | | </script> |
| | | </html> |
| | | EOF; |
| | | exit; |
| | | |
| | | rcube_iframe_response($frameout); |
| | | |
| | | ?> |