Index: /trunk/mobile/templates/default/body_email.tpl
===================================================================
--- /trunk/mobile/templates/default/body_email.tpl (revision 524)
+++ /trunk/mobile/templates/default/body_email.tpl (revision 670)
@@ -25,5 +25,6 @@
{varbuttom1} |
{varbuttom2} |
-{varbuttom3} |
+{varbuttom3} |
+{varbuttom4} |
Index: /trunk/expressoMail1_2/preferences.php
===================================================================
--- /trunk/expressoMail1_2/preferences.php (revision 500)
+++ /trunk/expressoMail1_2/preferences.php (revision 670)
@@ -133,4 +133,31 @@
else
$GLOBALS['phpgw']->template->set_var('font_size_option_11_selected','selected');
+ $c = CreateObject('phpgwapi.config','expressoMail1_2');
+ $c->read_repository();
+ $current_config = $c->config_data;
+
+ if($current_config['enable_local_messages']!='True') {
+ $GLOBALS['phpgw']->template->set_var('open_comment_local_messages_config',"");
+ }
+ else {
+ $GLOBALS['phpgw']->template->set_var('open_comment_local_messages_config'," ");
+ $GLOBALS['phpgw']->template->set_var('close_comment_local_messages_config'," ");
+ }
+
+ if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'])
+ $GLOBALS['phpgw']->template->set_var('use_local_messages_option_Yes_selected','selected');
+ else {
+ $GLOBALS['phpgw']->template->set_var('use_local_messages_option_No_selected','');
+ $GLOBALS['phpgw']->template->set_var('use_local_messages_option_Yes_selected','');
+ }
+
+ if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['keep_archived_messages'])
+ $GLOBALS['phpgw']->template->set_var('keep_archived_messages_option_Yes_selected','selected');
+ else {
+ $GLOBALS['phpgw']->template->set_var('keep_archived_messages_option_No_selected','');
+ $GLOBALS['phpgw']->template->set_var('keep_archived_messages_option_Yes_selected','');
+ }
+
}
else //Save Config
@@ -232,4 +259,13 @@
else
$GLOBALS['phpgw']->preferences->add('expressoMail','font_size',$_POST['font_size']);
+ if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'])
+ $GLOBALS['phpgw']->preferences->change('expressoMail','use_local_messages',$_POST['use_local_messages']);
+ else
+ $GLOBALS['phpgw']->preferences->add('expressoMail','use_local_messages',$_POST['use_local_messages']);
+
+ if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['keep_archived_messages'])
+ $GLOBALS['phpgw']->preferences->change('expressoMail','keep_archived_messages',$_POST['keep_archived_messages']);
+ else
+ $GLOBALS['phpgw']->preferences->add('expressoMail','keep_archived_messages',$_POST['keep_archived_messages']);
$GLOBALS['phpgw']->preferences->save_repository();
@@ -276,4 +312,8 @@
$GLOBALS['phpgw']->template->set_var('lang_type_signature',lang('Signature type'));
$GLOBALS['phpgw']->template->set_var('big',lang('Big'));
+ $GLOBALS['phpgw']->template->set_var('lang_Would_you_like_to_keep_archived_messages_?',lang('Would you like to keep archived messages?'));
+ $GLOBALS['phpgw']->template->set_var('lang_Yes',lang('Yes'));
+ $GLOBALS['phpgw']->template->set_var('lang_No',lang('No'));
+ $GLOBALS['phpgw']->template->set_var('lang_Would_you_like_to_use_local_messages_?',lang('Would you like to use local messages?'));
$GLOBALS['phpgw']->template->set_var('lang_use_signature',lang('Insert signature automatically in new messages?'));
Index: /trunk/expressoMail1_2/inc/class.imap_functions.inc.php
===================================================================
--- /trunk/expressoMail1_2/inc/class.imap_functions.inc.php (revision 660)
+++ /trunk/expressoMail1_2/inc/class.imap_functions.inc.php (revision 670)
@@ -10,4 +10,5 @@
'get_range_msgs' => True,
'get_info_msg' => True,
+ 'get_info_msgs' => True,
'get_folders_list' => True,
'import_msgs' => True
@@ -70,6 +71,4 @@
function get_range_msgs2($params)
{
- include("class.imap_attachment.inc.php");
- $imap_attachment = new imap_attachment();
$folder = $params['folder'];
$msg_range_begin = $params['msg_range_begin'];
@@ -85,74 +84,88 @@
if($num_msgs) {
for ($msg_range_begin; (($msg_range_begin <= $msg_range_end) && ($msg_range_begin <= $num_msgs)); $msg_range_begin++)
- {
- $msg_number = $sort_array_msg[$msg_range_begin-1];
-
- /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns
- * atributos do cabeçalho. Como eu preciso do atributo Importance
- * para saber se o email é importante ou não, uso abaixo a função
- * imap_fetchheader e busco o atributo importance nela para passar
- * para as funções ajax. Isso faz com que eu acesse o cabeçalho
- * duas vezes e de duas formas diferentes, mas em contrapartida, eu
- * não preciso reimplementar o método utilizando o fetchheader.
- * Como as mensagens são renderizadas em um número pequeno por vez,
- * não parece ter perda considerável de performance.
- */
- $flag = preg_match('/importance *: *(.*)\r/i',
+ {
+ $msg_number = $sort_array_msg[$msg_range_begin-1];
+ $temp = $this->get_info_head_msg($msg_number);
+ if(!$temp)
+ return false;
+
+ $return[$i] = $temp;
+ $i++;
+ }
+ }
+ $return['num_msgs'] = $num_msgs;
+
+ return $return;
+ }
+
+ function get_info_head_msg($msg_number) {
+ $head_array = array();
+ include_once("class.imap_attachment.inc.php");
+ $imap_attachment = new imap_attachment();
+
+ /*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns
+ * atributos do cabeçalho. Como eu preciso do atributo Importance
+ * para saber se o email é importante ou não, uso abaixo a função
+ * imap_fetchheader e busco o atributo importance nela para passar
+ * para as funções ajax. Isso faz com que eu acesse o cabeçalho
+ * duas vezes e de duas formas diferentes, mas em contrapartida, eu
+ * não preciso reimplementar o método utilizando o fetchheader.
+ * Como as mensagens são renderizadas de X em X, não parece ter
+ * perda considerável de performance.
+ */
+ $flag = preg_match('/importance *: *(.*)\r/i',
imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number))
,$importance);
- $return[$i]['Importance'] = $flag==0?"":$importance[1];
-
-
- $header = $this->get_header($msg_number);
+ $head_array['Importance'] = $flag==0?"Normal":$importance[1];
+
+
+ $header = $this->get_header($msg_number);
if (!is_object($header))
- return false;
-
- $return[$i]['Recent'] = $header->Recent;
- $return[$i]['Unseen'] = $header->Unseen;
- if($header->Answered =='A' && $header->Draft == 'X'){
- $return[$i]['Forwarded'] = 'F';
- }
- else {
- $return[$i]['Answered'] = $header->Answered;
- $return[$i]['Draft'] = $header->Draft;
- }
- $return[$i]['Deleted'] = $header->Deleted;
- $return[$i]['Flagged'] = $header->Flagged;
-
- $return[$i]['msg_number'] = $msg_number;
- //$return[$i]['msg_folder'] = $folder;
-
- $date_msg = gmdate("d/m/Y",$header->udate);
- if (gmdate("d/m/Y") == $date_msg)
- $return[$i]['udate'] = gmdate("H:i",$header->udate);
- else
- $return[$i]['udate'] = $date_msg;
-
- $from = $header->from;
- $return[$i]['from'] = array();
- $tmp = imap_mime_header_decode($from[0]->personal);
- $return[$i]['from']['name'] = $this->decode_string($tmp[0]->text);
- $return[$i]['from']['email'] = $this->decode_string($from[0]->mailbox) . "@" . $from[0]->host;
- if(!$return[$i]['from']['name'])
- $return[$i]['from']['name'] = $return[$i]['from']['email'];
- $to = $header->to;
- $return[$i]['to'] = array();
- $tmp = imap_mime_header_decode($to[0]->personal);
- $return[$i]['to']['name'] = $this->decode_string($this->decode_string($tmp[0]->text));
- $return[$i]['to']['email'] = $this->decode_string($to[0]->mailbox) . "@" . $to[0]->host;
- if(!$return[$i]['to']['name'])
- $return[$i]['to']['name'] = $return[$i]['to']['email'];
- $return[$i]['subject'] = $this->decode_string($header->fetchsubject);
-
- $return[$i]['Size'] = $header->Size;
-
- $return[$i]['attachment'] = array();
- $return[$i]['attachment'] = $imap_attachment->get_attachment_headerinfo($this->mbox, $msg_number);
- $i++;
- }
- }
- $return['num_msgs'] = $num_msgs;
-
- return $return;
+ return false;
+ $head_array['Recent'] = $header->Recent;
+ $head_array['Unseen'] = $header->Unseen;
+ if($header->Answered =='A' && $header->Draft == 'X'){
+ $head_array['Forwarded'] = 'F';
+ }
+ else {
+ $head_array['Answered'] = $header->Answered;
+ $head_array['Draft'] = $header->Draft;
+ }
+ $head_array['Deleted'] = $header->Deleted;
+ $head_array['Flagged'] = $header->Flagged;
+
+ $head_array['msg_number'] = $msg_number;
+ //$return[$i]['msg_folder'] = $folder;
+
+ $date_msg = date("d/m/Y",$header->udate);
+ if (date("d/m/Y") == $date_msg)
+ $head_array['udate'] = date("H:i",$header->udate);
+ else
+ $head_array['udate'] = $date_msg;
+
+ $head_array['aux_date'] = $date_msg; //Auxiliar apenas para mensagens locais.
+
+ $from = $header->from;
+ $head_array['from'] = array();
+ $tmp = imap_mime_header_decode($from[0]->personal);
+ $head_array['from']['name'] = $this->decode_string($tmp[0]->text);
+ $head_array['from']['email'] = $this->decode_string($from[0]->mailbox) . "@" . $from[0]->host;
+ if(!$head_array['from']['name'])
+ $head_array['from']['name'] = $head_array['from']['email'];
+ $to = $header->to;
+ $head_array['to'] = array();
+ $tmp = imap_mime_header_decode($to[0]->personal);
+ $head_array['to']['name'] = $this->decode_string($this->decode_string($tmp[0]->text));
+ $head_array['to']['email'] = $this->decode_string($to[0]->mailbox) . "@" . $to[0]->host;
+ if(!$head_array['to']['name'])
+ $head_array['to']['name'] = $head_array['to']['email'];
+ $head_array['subject'] = $this->decode_string($header->fetchsubject);
+
+ $head_array['Size'] = $header->Size;
+
+ $head_array['attachment'] = array();
+ $head_array['attachment'] = $imap_attachment->get_attachment_headerinfo($this->mbox, $msg_number);
+
+ return $head_array;
}
@@ -297,4 +310,40 @@
}
+/**
+ *
+ * @return
+ * @param $params Object
+ */
+ function get_info_msgs($params) {
+ include_once("class.exporteml.inc.php");
+ $return = array();
+ $new_params = array();
+ $attach_params = array();
+ $new_params["msg_folder"]=$params["folder"];
+ $attach_params["folder"] = $params["folder"];
+ $msgs = explode(",",$params["msgs_number"]);
+ $exporteml = new ExportEml();
+ foreach($msgs as $msg_number) {
+ $new_params["msg_number"] = $msg_number;
+ //ini_set("display_errors","1");
+ $msg_info = $this->get_info_msg($new_params);
+
+ $this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro.
+ $msg_info['header'] = $this->get_info_head_msg($msg_number);
+
+ $attach_params["num_msg"] = $msg_number;
+ $msg_info['array_attach'] = $exporteml->get_attachments_in_array($attach_params);
+ $msg_info['url_export_file'] = $exporteml->export_to_archive($msg_number,$params["folder"]);
+ imap_close($this->mbox);
+ $this->mbox=false;
+
+
+ array_push($return,serialize($msg_info));
+
+ }
+
+ return $return;
+ }
+
function get_info_msg($params)
{
@@ -317,5 +366,5 @@
//Substituição de links em email para abrir no próprio expresso
$body = ereg_replace("]*href=[\'\"]mailto:([^\"\']+)[\'\"]>([^<]+)","\\2",$return_get_body['body']);
-
+
$return['body'] = $body;
$return['attachments'] = $return_get_body['attachments'];
@@ -550,4 +599,10 @@
$return['Size'] = $header->Size;
$return['reply_toaddress'] = $header->reply_toaddress;
+
+ //All this is to help in local messages
+ $return['timestamp'] = $header->udate;
+ $return['login'] = $_SESSION['phpgw_info']['expressomail']['user']['account_id'];//$GLOBALS['phpgw_info']['user']['account_id'];
+ $return['reply_toaddress'] = $header->reply_toaddress;
+
return $return;
}
@@ -1017,5 +1072,5 @@
function refresh($params)
{
- include("class.imap_attachment.inc.php");
+ include_once("class.imap_attachment.inc.php");
$imap_attachment = new imap_attachment();
$folder = $params['folder'];
@@ -1097,5 +1152,5 @@
imap_fetchheader($this->mbox, imap_msgno($this->mbox, $msg_number))
,$importance);
- $return[$i]['Importance'] = $flag==0?"":$importance[1];
+ $return[$i]['Importance'] = $flag==0?"Normal":$importance[1];
$header = $this->get_header($msg_number);
@@ -1348,4 +1403,5 @@
$attachments = $params['FILES'];
$forwarding_attachments = $params['forwarding_attachments'];
+ $local_attachments = $params['local_attachments'];
$folder =$params['folder'];
@@ -1431,5 +1487,5 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
// Build Uploading Attachments!!!
- if (count($attachments))
+ if ((count($attachments)) && ($params['is_local_forward']!="1")) //Caso seja forward normal...
{
$total_uploaded_size = 0;
@@ -1443,4 +1499,20 @@
return $this->parse_error("message file too big");
}
+ else if(($params['is_local_forward']=="1") && (count($local_attachments))) { //Caso seja forward de mensagens locais
+
+ $total_uploaded_size = 0;
+ $upload_max_filesize = str_replace("M","",ini_get('upload_max_filesize')) * 1024 * 1024;
+ foreach($local_attachments as $local_attachment) {
+ $file_description = unserialize(rawurldecode($local_attachment));
+ $tmp = array_values($file_description);
+ foreach($file_description as $i => $descriptor){
+ $tmp[$i] = eregi_replace('\'*\'','',$descriptor);
+ }
+ $mail->AddAttachment($_FILES[$tmp[1]]['tmp_name'], $tmp[2], "base64", $this->get_file_type($tmp[2])); // optional name
+ $total_uploaded_size = $total_uploaded_size + $_FILES[$tmp[1]]['size'];
+ }
+ if( $total_uploaded_size > $upload_max_filesize)
+ return 'false';
+ }
////////////////////////////////////////////////////////////////////////////////////////////////////
// Build Forwarding Attachments!!!
@@ -2369,5 +2441,5 @@
function search($params)
{
- include("class.imap_attachment.inc.php");
+ include_once("class.imap_attachment.inc.php");
$imap_attachment = new imap_attachment();
$criteria = $params['criteria'];
@@ -2489,9 +2561,14 @@
$retorno = "";
$mbox_stream = "";
- $search = explode(",",$params['condition']);
+ if(strpos($params['condition'],"#")===false) { //local messages
+ $search=false;
+ }
+ else {
+ $search = explode(",",$params['condition']);
+ }
+
if($search){
$search_criteria = '';
- foreach($search as $tmp)
- {
+ foreach($search as $tmp){
$tmp1 = explode("##",$tmp);
$name_box = $tmp1[0];
@@ -2750,5 +2827,5 @@
$array_parts_attachments = array();
$array_parts_attachments['names'] = '';
- include("class.imap_attachment.inc.php");
+ include_once("class.imap_attachment.inc.php");
$imap_attachment = new imap_attachment();
Index: /trunk/expressoMail1_2/inc/class.exporteml.inc.php
===================================================================
--- /trunk/expressoMail1_2/inc/class.exporteml.inc.php (revision 601)
+++ /trunk/expressoMail1_2/inc/class.exporteml.inc.php (revision 670)
@@ -186,4 +186,29 @@
}
+ function export_to_archive($id_msg,$folder) {
+ $this->folder = $folder;
+ $this->folder = mb_convert_encoding($this->folder, "UTF7-IMAP","UTF-8");
+ $tempDir = $_SERVER["DOCUMENT_ROOT"]."tmpLclAtt";
+
+ $phpheader = "";
+
+ $this->connectImap();
+ $header = $this-> getHeader($id_msg);
+ $body = $this-> getBody($id_msg);
+
+ $file = "source_".md5(microtime()).".php";
+ $f = fopen($tempDir.'/'.$file,"w");
+ fputs($f,$phpheader.$header ."\r\n\r\n". $body);
+ fclose($f);
+ $urlPath = '../tmpLclAtt/'.$file;
+
+ imap_close($this->mbox_stream);
+ return $urlPath;
+ }
+
function remove_accents($string) {
/*
@@ -195,4 +220,162 @@
"áàâãäéèêëíìîïóòôõöúùûüç?\"!@#$%š&*()-=+Ž`[]{}~^,<>;:/?\\|¹²³£¢¬§ªº°ÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇ",
"aaaaaeeeeiiiiooooouuuuc__________________________________________AAAAAEEEEIIIIOOOOOUUUUC");
+ }
+
+ function get_attachments_in_array($params) {
+ $return_attachments = array();
+
+ $id_number = $params['num_msg'];
+ $attachments =unserialize(rawurldecode($params['s_attachments']));
+
+ $tempDir = $_SERVER["DOCUMENT_ROOT"]."tmpLclAtt";
+ $tempSubDir = md5(microtime());
+ exec('mkdir ' . $tempDir . '/'.$tempSubDir.'; cd ' . $tempDir . '/'.$tempSubDir);
+
+ $this-> folder = $params['folder'];
+ $this->folder = mb_convert_encoding($this->folder, "UTF7-IMAP","UTF-8");
+ $this->connectImap();
+
+ include_once("class.imap_attachment.inc.php");
+
+ $imap_attachment = new imap_attachment();
+ $attachments = $imap_attachment->download_attachment($this->mbox_stream, $id_number);
+
+
+
+ foreach($attachments as $i => $attachment){
+ if($i && $i == 'names')
+ continue;
+ $fileNameReal = $this->remove_accents($attachment['name']);
+ $ContentType = $this->getFileType($fileNameReal);
+ $fileName = $fileNameReal . ".php";
+ $f = fopen($tempDir . '/'.$tempSubDir.'/'.$fileName,"wb");
+ if(!$f)
+ return $tempDir . '/'.$tempSubDir.'/'.$fileName;
+
+ $fileContent = imap_fetchbody($this->mbox_stream, $id_number,$attachment['pid'], FT_UID);
+ $urlPath = '../tmpLclAtt/'.$tempSubDir.'/'.$fileName;
+
+ $headers = "";
+ fputs($f,$headers);
+
+ array_push($return_attachments,array('name' => $fileName,'url' => $urlPath,'pid' =>$attachment['pid']));
+ fclose($f);
+ }
+ imap_close($this->mbox_stream);
+ return $return_attachments;
+ }
+
+ private function getFileType($nameFile) {
+ $strFileType = strrev(substr(strrev(strtolower($nameFile)),0,4));
+ $ContentType = "application/octet-stream";
+ if ($strFileType == ".asf")
+ $ContentType = "video/x-ms-asf";
+ if ($strFileType == ".avi")
+ $ContentType = "video/avi";
+ if ($strFileType == ".doc")
+ $ContentType = "application/msword";
+ if ($strFileType == ".zip")
+ $ContentType = "application/zip";
+ if ($strFileType == ".xls")
+ $ContentType = "application/vnd.ms-excel";
+ if ($strFileType == ".gif")
+ $ContentType = "image/gif";
+ if ($strFileType == ".jpg" || $strFileType == "jpeg")
+ $ContentType = "image/jpeg";
+ if ($strFileType == ".wav")
+ $ContentType = "audio/wav";
+ if ($strFileType == ".mp3")
+ $ContentType = "audio/mpeg3";
+ if ($strFileType == ".mpg" || $strFileType == "mpeg")
+ $ContentType = "video/mpeg";
+ if ($strFileType == ".rtf")
+ $ContentType = "application/rtf";
+ if ($strFileType == ".htm" || $strFileType == "html")
+ $ContentType = "text/html";
+ if ($strFileType == ".xml")
+ $ContentType = "text/xml";
+ if ($strFileType == ".xsl")
+ $ContentType = "text/xsl";
+ if ($strFileType == ".css")
+ $ContentType = "text/css";
+ if ($strFileType == ".php")
+ $ContentType = "text/php";
+ if ($strFileType == ".asp")
+ $ContentType = "text/asp";
+ if ($strFileType == ".pdf")
+ $ContentType = "application/pdf";
+ if ($strFileType == ".txt")
+ $ContentType = "text/plain";
+ if ($strFileType == ".log")
+ $ContentType = "text/plain";
+ if ($strFileType == ".wmv")
+ $ContentType = "video/x-ms-wmv";
+ if ($strFileType == ".sxc")
+ $ContentType = "application/vnd.sun.xml.calc";
+ if ($strFileType == ".odt")
+ $ContentType = "application/vnd.oasis.opendocument.text";
+ if ($strFileType == ".stc")
+ $ContentType = "application/vnd.sun.xml.calc.template";
+ if ($strFileType == ".sxd")
+ $ContentType = "application/vnd.sun.xml.draw";
+ if ($strFileType == ".std")
+ $ContentType = "application/vnd.sun.xml.draw.template";
+ if ($strFileType == ".sxi")
+ $ContentType = "application/vnd.sun.xml.impress";
+ if ($strFileType == ".sti")
+ $ContentType = "application/vnd.sun.xml.impress.template";
+ if ($strFileType == ".sxm")
+ $ContentType = "application/vnd.sun.xml.math";
+ if ($strFileType == ".sxw")
+ $ContentType = "application/vnd.sun.xml.writer";
+ if ($strFileType == ".sxq")
+ $ContentType = "application/vnd.sun.xml.writer.global";
+ if ($strFileType == ".stw")
+ $ContentType = "application/vnd.sun.xml.writer.template";
+ if ($strFileType == ".ps")
+ $ContentType = "application/postscript";
+ if ($strFileType == ".pps")
+ $ContentType = "application/vnd.ms-powerpoint";
+ if ($strFileType == ".odt")
+ $ContentType = "application/vnd.oasis.opendocument.text";
+ if ($strFileType == ".ott")
+ $ContentType = "application/vnd.oasis.opendocument.text-template";
+ if ($strFileType == ".oth")
+ $ContentType = "application/vnd.oasis.opendocument.text-web";
+ if ($strFileType == ".odm")
+ $ContentType = "application/vnd.oasis.opendocument.text-master";
+ if ($strFileType == ".odg")
+ $ContentType = "application/vnd.oasis.opendocument.graphics";
+ if ($strFileType == ".otg")
+ $ContentType = "application/vnd.oasis.opendocument.graphics-template";
+ if ($strFileType == ".odp")
+ $ContentType = "application/vnd.oasis.opendocument.presentation";
+ if ($strFileType == ".otp")
+ $ContentType = "application/vnd.oasis.opendocument.presentation-template";
+ if ($strFileType == ".ods")
+ $ContentType = "application/vnd.oasis.opendocument.spreadsheet";
+ if ($strFileType == ".ots")
+ $ContentType = "application/vnd.oasis.opendocument.spreadsheet-template";
+ if ($strFileType == ".odc")
+ $ContentType = "application/vnd.oasis.opendocument.chart";
+ if ($strFileType == ".odf")
+ $ContentType = "application/vnd.oasis.opendocument.formula";
+ if ($strFileType == ".odi")
+ $ContentType = "application/vnd.oasis.opendocument.image";
+ if ($strFileType == ".ndl")
+ $ContentType = "application/vnd.lotus-notes";
+ return $ContentType;
}
Index: /trunk/expressoMail1_2/js/search.js
===================================================================
--- /trunk/expressoMail1_2/js/search.js (revision 667)
+++ /trunk/expressoMail1_2/js/search.js (revision 670)
@@ -101,5 +101,5 @@
""+
""+
- "" + get_lang('In all the folders') + " | "+
+ "" + get_lang('In all the folders') + " | "+
"
"+
""+
@@ -310,5 +310,5 @@
tr.id = uid_msg;
tr.name = mailbox;
-
+
for(var j=0 ; j <= 10 ; j++)
{
@@ -353,4 +353,7 @@
if(td1 == "INBOX"){
var td1 = get_lang("Inbox");
+ }
+ if(proxy_mensagens.is_local_folder(td1)) {
+ var td1 = this.aux_local_folder_display(td1);
}
}
@@ -494,5 +497,5 @@
if (span_options)
span_options.innerHTML = ''+get_lang("Delete")+' | '+
- ''+get_lang("Move")+'';
+ ''+get_lang("Move")+'';
div_scroll_result.appendChild(table);
content_search.appendChild(div_scroll_result);
@@ -505,9 +508,9 @@
if(Element("border_id_" + uid_msg + "_r")){alert(get_lang("This message is already opened!"));}
else{draw_message(data,create_border(url_decode(subject), uid_msg + "_r"));}
- //set_msg_as_read(msgs_to_set[i], false);
- }
- var args = "$this.imap_functions.get_info_msg";
- var params = "&msg_number=" + uid_msg + "&msg_folder=" + mailbox;
- cExecute(args+params,handler_get_msg);
+ }
+ proxy_mensagens.get_msg(uid_msg,mailbox,false,handler_get_msg);
+ /*var args = "$this.imap_functions.get_info_msg";
+ var params = "msg_number=" + uid_msg + "&msg_folder=" + mailbox;
+ cExecute(args,handler_get_msg,params);*/
}
@@ -516,12 +519,22 @@
searchE.prototype.add_mailboxes = function(){
var sel = Element("sel_search_nm_box1");
- var name_box = this.name_box_search.split(cyrus_delimiter);
- if(this.name_box_search == "")
- return false;
- var name_box_def = "";
- if(name_box.length != 1){
- name_box_def = name_box[(name_box.length-1)];
- }else{
- name_box_def = get_lang("Inbox");
+ if (!proxy_mensagens.is_local_folder(this.name_box_search)) {
+ var name_box = this.name_box_search.split(cyrus_delimiter);
+ if(this.name_box_search == "")
+ return false;
+ var name_box_def = "";
+ if(name_box.length != 1){
+ name_box_def = name_box[(name_box.length-1)];
+ }else{
+ name_box_def = get_lang("Inbox");
+ }
+ }
+ else {
+ if(this.name_box_search=='local_root')
+ return;
+ if(this.name_box_search=='local_Inbox')
+ name_box_def = get_lang("Inbox");
+ else
+ name_box_def = this.name_box_search.substr(6);//Retira o 'local_'
}
if( sel.length > 0){
@@ -593,9 +606,18 @@
return false;
}
+ var local_folders = new Array();
+ var temp;
if(Element("check_all_msg").checked){
+ this.all_mailboxes();
var nm_box = new Array;
for(var i=0; i < EsearchE.all_boxes.length; i++){
nm_box[i] = EsearchE.all_boxes[i] + fields;
+ }
+ if (preferences.use_local_messages == 1) {
+ temp = expresso_local_messages.list_local_folders();
+ for (var x in temp) {
+ local_folders.push(temp[x][0]);
+ }
}
}else{
@@ -612,12 +634,25 @@
for(var i=0; i < sel_combo.options.length; i++){
if(sel_combo.options[i].selected == true){
- nm_box[nm_box.length] = sel_combo.options[i].value + fields;
+ if(!proxy_mensagens.is_local_folder(sel_combo.options[i].value))
+ nm_box[nm_box.length] = sel_combo.options[i].value + fields;
+ else
+ local_folders.push(sel_combo.options[i].value.substr(6));
}
}
}
var handler = function(data){
- if(data == "none"){alert(get_lang("None result was found."));}
+ var tmp;
+ var countTmp= new Array();
+ if (local_folders.length > 0) {
+ tmp = expresso_local_messages.search(local_folders, fields);
+ if (tmp!=false) {
+ var tmp2 = tmp.substr(2, data.length - 4);
+ countTmp = tmp.split('####');
+ }
+ }
+ if((data == "none") && (countTmp.length==0)){alert(get_lang("None result was found."));}
+ else if(countTmp.length > 50){alert(get_lang("More than %1 results. Please, try to refine your search.",50));}
else if(data == "many results"){alert(get_lang("More than %1 results. Please, try to refine your search.",50));}
- else{EsearchE.mount_result(data);}
+ else{EsearchE.mount_result((data=='none')?tmp:(countTmp.length==0)?data:data+tmp);}
}
var args = "$this.imap_functions.search_msg";
@@ -679,4 +714,9 @@
win.open();
}
+
+ searchE.prototype.aux_local_folder_display = function(folder) {
+ return "(Local) " + lang_folder(folder.substr(6));
+ }
+
// Cria o objeto
var EsearchE;
Index: /trunk/expressoMail1_2/js/drag_area.js
===================================================================
--- /trunk/expressoMail1_2/js/drag_area.js (revision 331)
+++ /trunk/expressoMail1_2/js/drag_area.js (revision 670)
@@ -216,14 +216,13 @@
if(new_folder_name == 'INBOX')
new_folder_name = get_lang("Inbox");
-
- if(_dragArea.from_list)
- if (numBox != 0)
+ if (_dragArea.from_list) {
+ if (numBox != 0)
move_search_msgs("content_id_search_" + numBox, new_folder, new_folder_name);
- else
- move_msgs(_dragArea.folder, 'selected', 0, new_folder, new_folder_name);
-
- else{
- var msg_number = _dragArea.from_list ? _dragArea.msg_number : _dragArea.msg_number.replace('_r','');
- move_msgs(_dragArea.folder, msg_number, msg_number+"_r", new_folder, new_folder_name);
+ else
+ proxy_mensagens.proxy_move_messages("null", 'selected', 0, new_folder, new_folder_name);
+ }
+ else {
+ var msg_number = _dragArea.from_list ? _dragArea.msg_number : _dragArea.msg_number.replace('_r', '');
+ proxy_mensagens.proxy_move_messages("null", msg_number, msg_number + "_r", new_folder, new_folder_name);
}
}
Index: /trunk/expressoMail1_2/js/messages_proxy.js
===================================================================
--- /trunk/expressoMail1_2/js/messages_proxy.js (revision 670)
+++ /trunk/expressoMail1_2/js/messages_proxy.js (revision 670)
@@ -0,0 +1,253 @@
+/**
+ * @author diogenes
+ */
+
+ function messages_proxy() {
+
+ }
+/**
+ * Retorna os cabeçalhos das mensagens a serem desenhadas na caixa de email.
+ */
+ messages_proxy.prototype.messages_list = function(folder,msg_range_begin,emails_per_page,sort_box_type,search_box_type,sort_box_reverse,call_back) {
+ if(this.is_local_folder(folder)) {
+ var real_folder = folder.substr(6);
+ var msgs = expresso_local_messages.get_local_range_msgs(real_folder,msg_range_begin,emails_per_page,sort_box_type,sort_box_reverse,search_box_type);
+ eval('call_back(msgs)');
+ }else {
+ cExecute ("$this.imap_functions.get_range_msgs2&folder="+folder+"&msg_range_begin="+msg_range_begin+"&msg_range_end="+emails_per_page+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"", call_back);
+ }
+ }
+
+ messages_proxy.prototype.get_msg = function(msg_number,msg_folder,set_flag,call_back) {
+ if(this.is_local_folder(msg_folder)) {
+ if(set_flag)
+ expresso_local_messages.set_messages_flag(msg_number,"seen");
+ var data = expresso_local_messages.get_local_mail(msg_number);
+ eval("call_back(data)");
+ }else {
+ cExecute("$this.imap_functions.get_info_msg&msg_number="+ msg_number + "&msg_folder=" + msg_folder, call_back);
+ }
+ }
+
+ messages_proxy.prototype.delete_msgs = function(folder, msgs_number, border_ID) {
+
+ if (folder == 'null')
+ folder = get_current_folder();
+ if (msgs_number == 'selected')
+ msgs_number = get_selected_messages();
+
+ if (!this.is_local_folder(folder))
+ delete_msgs(folder, msgs_number, border_ID);
+ else
+ expresso_local_messages.delete_msgs(msgs_number,border_ID);
+ }
+
+ messages_proxy.prototype.link_anexo = function (info_msg,numero_ordem_anexo) {
+
+ if(info_msg.local_message==true) {
+ return "javascript:download_local_attachment('"+
+ expresso_local_messages.get_url_anexo(info_msg.msg_number,info_msg.attachments[numero_ordem_anexo].pid)+
+ "')";
+ }
+ else {
+ return "javascript:download_attachments('"+info_msg.msg_folder+"','"+info_msg.msg_number+"',"+numero_ordem_anexo+",'"+info_msg.attachments[numero_ordem_anexo].pid+"','"+info_msg.attachments[numero_ordem_anexo].encoding+"')";
+ }
+ }
+
+ messages_proxy.prototype.proxy_source_msg = function (id_msg,folder) {
+ if(!this.is_local_folder(folder)) {
+ source_msg(id_msg,folder);
+ }
+ else {
+ var num_msg = id_msg.substr(0,(id_msg.length - 2));
+ expresso_local_messages.get_source_msg(num_msg);
+ }
+ }
+
+ messages_proxy.prototype.proxy_set_messages_flag = function (flag,msg_number){
+ if(this.is_local_folder(get_current_folder())) {
+ expresso_local_messages.set_messages_flag(msg_number,flag);
+ }
+ else {
+ set_messages_flag(flag,msg_number);
+ }
+ }
+
+ messages_proxy.prototype.is_local_folder = function(folder) {
+ if(folder.indexOf("local_")==-1)
+ return false;
+ return true;
+ }
+
+
+ messages_proxy.prototype.proxy_rename_folder = function(){
+
+ if (ttree.FOLDER == 'local_Inbox') {
+ alert(get_lang("It's not possible rename the folder: ") + lang_folder(ttree.FOLDER.substr(6)));
+ return false;
+ }
+ if(ttree.FOLDER == 'local_root') {
+ alert(get_lang("It's not possible rename this folder!"));
+ return false;
+ }
+ if (this.is_local_folder(ttree.FOLDER)) {
+ folder = prompt(get_lang("Enter a name for the box"), "");
+ if(trim(folder) == "" || trim(folder) == null){
+ alert(get_lang("you have to enter the name of the new folder"));
+ return false;
+ }
+ var temp = expresso_local_messages.rename_folder(folder, ttree.FOLDER.substr(6));
+ if (!temp)
+ alert(get_lang("cannot rename folder. try other folder name"));
+ ttreeBox.update_folder();
+ }
+ else {
+ ttreeBox.validate("rename");
+ }
+
+ }
+
+ messages_proxy.prototype.proxy_create_folder = function() {
+ if (ttree.FOLDER == 'local_root') {
+
+ folder = prompt(get_lang('Enter the name of the new folder:'), "");
+
+ if(trim(folder) == "" || trim(folder) == null){
+ alert(get_lang("you have to enter the name of the new folder"));
+ return false;
+ }
+ var temp = expresso_local_messages.create_folder(folder);
+ if (!temp)
+ alert(get_lang("cannot create folder. try other folder name"));
+ ttreeBox.update_folder();
+ }
+ else
+ if (!this.is_local_folder(ttree.FOLDER))
+ ttreeBox.validate("newpast");
+
+ else
+ alert(get_lang("It's not possible create inside: ") + lang_folder(ttree.FOLDER.substr(6)));
+ }
+
+ messages_proxy.prototype.proxy_remove_folder = function() {
+ if (this.is_local_folder(ttree.FOLDER)) {
+ if(ttree.FOLDER == 'local_root') {
+ alert(get_lang("Select a folder!"));
+ return false;
+ }
+ if (ttree.FOLDER == 'local_Inbox') {
+ alert(get_lang("It's not possible delete the folder: ") + lang_folder(ttree.FOLDER.substr(6)));
+ return false;
+ }
+ var string_confirm = get_lang("Do you wish to exclude the folder ") + ttree.FOLDER.substr(6) + "?";
+
+ if (confirm(string_confirm)) {
+ expresso_local_messages.remove_folder(ttree.FOLDER.substr(6));
+ alert(get_lang("The folder %1 was successfully removed", ttree.FOLDER.substr(6)));
+ ttreeBox.update_folder();
+ }
+ }
+ else
+ ttreeBox.del();
+ }
+
+ messages_proxy.prototype.proxy_move_messages = function (folder, msgs_number, border_ID, new_folder, new_folder_name) {
+ if (! folder || folder == 'null')
+ folder = Element("input_folder_"+msgs_number+"_r") ? Element("input_folder_"+msgs_number+"_r").value : get_current_folder();
+
+ if ((this.is_local_folder(folder)) && (this.is_local_folder(new_folder))) { //Move entre pastas não locais...
+ if (folder == new_folder){
+ write_msg(get_lang('The origin folder and the destination folder are the same.'));
+ return;
+ }
+ if(msgs_number=='selected')
+ msgs_number = get_selected_messages();
+ if (new_folder == 'local_root')
+ alert(get_lang("Select a folder!"));
+ if (parseInt(msgs_number) > 0 || msgs_number.length > 0) {
+ expresso_local_messages.move_messages(new_folder.substr(6), msgs_number);
+ this.aux_interface_remove_mails(msgs_number, new_folder_name, border_ID);
+ }
+ else
+ write_msg(get_lang('No selected message.'));
+ }
+ else
+ if ((!this.is_local_folder(folder)) && (!this.is_local_folder(new_folder))) { //Move entre pastas locais...
+ move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
+ }
+ else if ((!this.is_local_folder(folder)) && (this.is_local_folder(new_folder))) {
+ if(msgs_number=='selected')
+ archive_msgs(folder,new_folder);
+ else
+ archive_msgs(folder,new_folder,msgs_number);
+ }
+ else {
+ write_msg(get_lang("you can't move mails from local to server folders"));
+ }
+
+
+ }
+
+ messages_proxy.prototype.proxy_move_search_messages = function(border_id, new_folder, new_folder_name) {
+
+
+ /*
+
+
+ if ((this.is_local_folder(folder)) && (this.is_local_folder(new_folder))) { //Move entre pastas não locais...
+ if (folder == new_folder){
+ write_msg(get_lang('The origin folder and the destination folder are the same.'));
+ return;
+ }
+ if(msgs_number=='selected')
+ msgs_number = get_selected_messages();
+ if (new_folder == 'local_root')
+ alert(get_lang("Select a folder!"));
+ if (parseInt(msgs_number) > 0 || msgs_number.length > 0) {
+ expresso_local_messages.move_messages(new_folder.substr(6), msgs_number);
+ this.aux_interface_remove_mails(msgs_number, new_folder_name, border_ID);
+ }
+ else
+ write_msg(get_lang('No selected message.'));
+ }
+ else
+ if ((!this.is_local_folder(folder)) && (!this.is_local_folder(new_folder))) { //Move entre pastas locais...
+ move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
+ }
+ else if ((!this.is_local_folder(folder)) && (this.is_local_folder(new_folder))) {
+ archive_msgs(folder,new_folder);
+ }
+ else {
+ write_msg(get_lang("you can't move mails from local to server folders"));
+ }*/
+ }
+
+ messages_proxy.prototype.aux_interface_remove_mails = function(msgs_number,new_folder_name,border_ID,previous_msg) {
+ Element('chk_box_select_all_messages').checked = false;
+ mail_msg = Element("tbody_box");
+ msgs_number = msgs_number.split(",");
+ var msg_to_delete;
+ for (var i=0; i";
+}
+
+function download_attachments(msg_folder, msg_number, idx_file, msg_part, encoding, new_file_name, show_iframe){
+ div_attachment = document.getElementById("id_div_attachment");
+ var params = '';
+
+ if (div_attachment == null){
+ var div_attachment = document.createElement("DIV");
+ div_attachment.id="id_div_attachment";
+ document.body.appendChild(div_attachment);
+ }
if(new_file_name)
params = "&newfilename="+new_file_name;
@@ -201,4 +210,78 @@
cExecute("$this.exporteml.download_all_attachments",handler_source,"folder="+msg_folder+"&num_msg="+msg_number);
}
+//ADD forwarded files
+function addForwardedFile(id_border,file_name,link){
+ divFiles = document.getElementById("divFiles_"+id_border);
+
+ if (! divFiles)
+ return false;
+
+ if (divFiles.lastChild)
+ var countDivFiles = parseInt(divFiles.lastChild.id.split('_')[2]) + 1;
+
+ if (! countDivFiles)
+ var countDivFiles = 1;
+
+ divFile = document.createElement('DIV');
+
+
+ if (!is_ie) {
+ var inputFile = document.createElement("INPUT");
+
+ var tmp_id_border = document.createAttribute('id_border');
+ tmp_id_border.value = id_border;
+
+ inputFile.setAttributeNode(tmp_id_border);
+ inputFile.id = "inputFile_" + id_border + "_" + countDivFiles;
+ inputFile.type = 'file';
+ inputFile.size = 50;
+ inputFile.maxLength = 255;
+ inputFile.name = 'file_' + countDivFiles;
+ inputFile.style.display = "none";
+ divFile.appendChild(inputFile);
+ }
+ else {
+ var inputFile = document.createElement("link");
+
+ var tmp_id_border = document.createAttribute('id_border');
+ tmp_id_border.value = id_border;
+
+ inputFile.setAttributeNode(tmp_id_border);
+ inputFile.id = "inputFile_" + id_border + "_" + countDivFiles;
+ inputFile.name = 'file_' + countDivFiles;
+
+
+ divFile.appendChild(inputFile);
+ }
+
+ var a_tmp = new Array();
+ a_tmp[0] = "local_";
+ a_tmp[1] = 'file_' + countDivFiles;
+ a_tmp[2] = file_name;
+ s_tmp = escape(connector.serialize(a_tmp));
+ var checkbox = document.createElement("INPUT");
+ checkbox.type = "checkbox";
+ checkbox.id = "checkbox_"+id_border+"_"+countDivFiles;
+ checkbox.name = "local_attachments[]";
+
+ checkbox.value = s_tmp;
+ divFile.appendChild(checkbox);
+
+ var link_attachment = document.createElement("A");
+ link_attachment.setAttribute("href", link);
+
+ link_attachment.innerHTML = file_name;
+ divFile.appendChild(link_attachment);
+
+ countDivFiles++;
+ divFile.id = "divFile_"+id_border+"_"+countDivFiles;
+ divFiles.appendChild(divFile);
+
+ divFile.id = "divFile_"+id_border+"_"+countDivFiles;
+ divFiles.appendChild(divFile);
+ checkbox.checked = true; //IncrÃvel, mas no Internet Explorer o checked só funciona efetivamente se o elemente já estiver renderizado... por isso só aqui eu seleciono ele...
+ return inputFile;
+}
+
// Add Input File Dynamically.
function addFile(id_border){
@@ -239,4 +322,6 @@
divFile.id = "divFile_"+id_border+"_"+countDivFiles;
divFiles.appendChild(divFile);
+
+ return inputFile;
}
// Remove Input File Dynamically.
@@ -677,8 +762,8 @@
function lang_folder(fn) {
- if (fn == "Inbox") return get_lang("Inbox");
+ if (fn.toUpperCase() == "INBOX") return get_lang("Inbox");
if (special_folders[fn] && typeof(special_folders[fn]) == 'string') {
return get_lang(special_folders[fn]);
- }
+ }
return fn;
}
Index: /trunk/expressoMail1_2/js/local_messages.js
===================================================================
--- /trunk/expressoMail1_2/js/local_messages.js (revision 670)
+++ /trunk/expressoMail1_2/js/local_messages.js (revision 670)
@@ -0,0 +1,563 @@
+/**
+ * @author diogenes
+ */
+
+ function local_messages() {
+ this.dbGears = null;
+ this.localServer = null;
+ this.store = null;
+ this.fileSubmitter = null;
+ }
+
+ local_messages.prototype.init_local_messages = function(){
+ if(this.dbGears == null)
+ this.dbGears = google.gears.factory.create('beta.database');
+ if(this.localServer==null)
+ this.localServer = google.gears.factory.create('beta.localserver');
+ if(this.store==null)
+ this.store = this.localServer.createStore('test-store');
+ if(this.fileSubmitter == null)
+ this.fileSubmitter = this.store.createFileSubmitter();
+
+ this.dbGears.open('database-test');
+ this.dbGears.execute('create table if not exists folder (folder text,uid_usuario int,unique(folder,uid_usuario))');
+ this.dbGears.execute('create table if not exists mail' +
+ ' (mail blob,original_id int,original_folder text,header blob,timestamp int,uid_usuario int,unseen int,id_folder int,' +
+ ' ffrom text, subject text, fto text, cc text, body text, size int,unique (original_id,original_folder,uid_usuario))');
+ this.dbGears.execute('create table if not exists anexo' +
+ ' (id_mail int,nome_anexo text,url text,pid int)');
+
+ //some people that used old version of local messages could not have the size column. If it's the first version
+ //with local messages you're using in expresso, this part of code can be removed
+ try {
+ this.dbGears.execute('alter table mail add column size int');
+ }catch(Exception) {
+
+ }
+ var rs = this.dbGears.execute('select rowid,header from mail where size is null');
+ while(rs.isValidRow()) {
+ var temp = connector.unserialize(rs.field(1));
+
+ this.dbGears.execute('update mail set size='+temp.Size+' where rowid='+rs.field(0));
+ rs.next();
+ }
+ //end of temporary code
+ }
+
+ local_messages.prototype.drop_tables = function() {
+ this.init_local_messages();
+ var rs = this.dbGears.execute('select url from anexo');
+ while(rs.isValidRow()) {
+ this.store.remove(rs.field(0));
+ rs.next();
+ }
+ this.dbGears.execute('drop table folder');
+ this.dbGears.execute('drop table mail');
+ this.dbGears.execute('drop table anexo');
+ this.finalize();
+ }
+
+ local_messages.prototype.insert_mail = function(msg_info,msg_header,anexos,folder) {
+
+ try {
+ this.init_local_messages();
+ var unseen = 0;
+ var login = msg_info.login;
+ var original_id = msg_info.msg_number;
+ var original_folder = msg_info.msg_folder;
+
+ //This fields needs to be separeted to search.
+ var from = connector.serialize(msg_info.from);
+ var subject = msg_info.subject;
+ var body = msg_info.body;
+ var to = connector.serialize(msg_info.toaddress2);
+ var cc = connector.serialize(msg_info.cc);
+ var size = msg_header.Size;
+
+ //do not duplicate this information
+ msg_info.from = null;
+ msg_info.subject = null;
+ msg_info.body = null;
+ msg_info.to = null;
+ msg_info.cc = null;
+ msg_header.Size=null;
+
+ //If the mail was archieved in the same date the user received it, the date cames with the time.
+ //here I solved it
+ if(msg_header.udate.indexOf(":")!=-1) {
+ msg_header.udate = msg_header.aux_date;
+ }
+
+ /**
+ * The importance attribute can be empty, and javascript consider as null causing nullpointer.
+ */
+ if((msg_header.Importance == null) || (msg_header.Importance == ""))
+ msg_header.Importance = "Normal";
+
+ msg_header.aux_date = null;
+
+ var mail = connector.serialize(msg_info);
+ var header = connector.serialize(msg_header);
+
+ var timestamp = msg_info.timestamp;
+ var id_folder;
+
+ if((folder==null) || (folder=="local_root"))
+ folder = "Inbox";
+ else
+ folder = folder.substr(6);//take off the word "local_"
+
+ var rs = this.dbGears.execute("select rowid from folder where folder=? and uid_usuario=?",[folder,account_id]);
+
+ if(rs.isValidRow())
+ id_folder=rs.field(0);
+ else {
+ this.dbGears.execute("insert into folder (folder,uid_usuario) values (?,?)",["Inbox",account_id]);
+ id_folder = this.dbGears.lastInsertRowId;
+ }
+
+ if(msg_info.Unseen=="U")
+ unseen = 1;
+ this.dbGears.execute("insert into mail (mail,original_id,original_folder,header,timestamp,uid_usuario,unseen,id_folder,ffrom,subject,fto,cc,body,size) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",[mail,original_id,original_folder,header,timestamp,login,unseen,id_folder,from,subject,to,cc,body,size]);
+ var call_back = function() {
+ }
+ this.store.capture(msg_info.url_export_file,call_back);
+ var id_mail = this.dbGears.lastInsertRowId;
+
+ this.insert_attachments(id_mail,anexos);
+ this.finalize();
+ return true;
+ } catch (error) {
+ this.finalize();
+ return false;
+ }
+
+
+ }
+
+ local_messages.prototype.get_local_mail = function(id_mail) {
+ this.init_local_messages();
+ var rs = this.dbGears.execute("select mail.rowid,mail.mail,mail.ffrom,mail.subject,mail.body,mail.fto,mail.cc,folder.folder from mail inner join folder on mail.id_folder=folder.rowid where mail.rowid="+id_mail);
+ var retorno = null;
+ if(rs.isValidRow()) {
+ retorno = rs.field(1);
+ }
+ retorno = connector.unserialize(retorno);
+
+ retorno['from'] = connector.unserialize(rs.field(2));
+ retorno['subject'] = rs.field(3);
+ retorno['body'] = rs.field(4);
+ retorno['to'] = connector.unserialize(rs.field(5));
+ retorno['cc'] = connector.unserialize(rs.field(6));
+
+ retorno['local_message'] = true;
+ retorno['msg_folder'] = "local_"+rs.field(7); //Now it's a local folder
+ retorno['msg_number'] = rs.field(0); //the message number is the rowid
+ this.finalize();
+ return retorno;
+ }
+
+ local_messages.prototype.insert_attachments = function(id_msg,anexos) {
+ //insert_mail already close and open gears.
+ for (var i = 0; i < anexos.length; i++) {
+ this.dbGears.execute("insert into anexo (id_mail,nome_anexo,url,pid) values (?,?,?,?)", [id_msg, anexos[i]['name'],anexos[i]['url'],anexos[i]['pid']]);
+ this.save_anexos(anexos[i]['url']);
+ }
+ }
+
+ local_messages.prototype.save_anexos = function (url) {
+ //insert_mail already close and open gears.
+ var call_back = function(url,success,captureId) {
+ //alert("Capturado: " + url);
+ }
+ //alert(url);
+ this.store.capture(url,call_back);
+ }
+
+ local_messages.prototype.get_local_range_msgs = function(folder,msg_range_begin,emails_per_page,sort,sort_reverse,search) {
+ this.init_local_messages();
+ var retorno = new Array();
+ msg_range_begin--;
+
+ filter = " ";
+ if(search=="FLAGGED") {
+ filter = "and (header like '%\"Flagged\";s:1:\"F%' or header like '%\"Importance\";s:5:\"High%') ";
+ }
+ if(search=="UNSEEN") {
+ filter = "and unseen = 1 ";
+ }
+ if(search=="SEEN") {
+ filter = "and unseen = 0 ";
+ }
+ if (search=="ANSWERED") {
+ filter = "and header like '%\"Answered\";s:1:\"A%' ";
+ }
+ sql = 'select rowid,header,size,timestamp,unseen from (';
+ sql += 'select mail.rowid as rowid,mail.header as header,mail.size as size,mail.timestamp as timestamp,mail.unseen as unseen,ltrim(ltrim(substr(UPPER(ffrom),21,length(ffrom)),\':\'),\'"\') as order_from,mail.subject from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=? and lower(mail.ffrom) not like lower(?) ';
+ sql += filter;
+ sql += 'union ';
+ sql += 'select mail.rowid as rowid,mail.header as header,mail.size as size,mail.timestamp as timestamp,mail.unseen as unseen,ltrim(ltrim(substr(UPPER(fto),7,length(fto)),\':\'),\'"\') as order_from,mail.subject from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=? and lower(mail.ffrom) like lower(?) ';
+ sql += filter;
+ sql += ') order by '
+
+ if(sort == 'SORTFROM') {
+ sql += 'order_from ';
+ }
+ if(sort == 'SORTARRIVAL') {
+ sql += 'timestamp ';
+ }
+ if(sort == 'SORTSIZE') {
+ sql += 'size ';
+ }
+ if(sort == 'SORTSUBJECT') {
+ sql += 'UPPER(subject) ';
+ }
+
+
+ sql+= sort_reverse==0?"ASC ":"DESC ";
+ sql +='limit ?,? ';
+
+
+ var rs = this.dbGears.execute(sql,[account_id,folder,'%'+Element("user_email").value+'%',account_id,folder,'%'+Element("user_email").value+'%',msg_range_begin,emails_per_page]);
+ var cont = 0;
+
+ var rs3 = this.dbGears.execute('select count(*) from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario=? and folder.folder=?'+filter,[account_id,folder]);
+
+ while (rs.isValidRow()) {
+ //var email = rs.field(1);
+ var head = rs.field(1);
+ var codigoMail = rs.field(0);
+ var rs2 = this.dbGears.execute('select count(*) from anexo where id_mail = '+codigoMail);
+ var head_unserialized = connector.unserialize(head);
+ head_unserialized.Size = rs.field(2);
+ if(rs.field(4)==1)
+ head_unserialized.Unseen = 'U';
+
+ //var email_unserialized = connector.unserialize(email);
+ retorno[cont] = head_unserialized;
+ retorno[cont]['msg_number'] = codigoMail;
+
+ cont++;
+ rs.next();
+ }
+ retorno['num_msgs'] = rs3.field(0);
+ rs3.close();
+ rs.close();
+ if(cont>0)
+ rs2.close();
+ this.finalize();
+ return retorno;
+ }
+
+ local_messages.prototype.get_url_anexo = function(msg_number,pid) {
+ this.init_local_messages();
+
+ var retorno;
+ var rs = this.dbGears.execute("select url from anexo where id_mail="+msg_number+" and pid = '"+pid+"'");
+ retorno = rs.field(0)
+ this.finalize();
+
+ return retorno;
+ }
+
+ local_messages.prototype.getInputFileFromAnexo = function (element,url) {
+ this.init_local_messages();
+ this.fileSubmitter.setFileInputElement(element,url);
+ this.finalize();
+ }
+
+ local_messages.prototype.finalize = function() {
+ this.dbGears.close();
+ this.dbGears = null;
+ }
+
+ local_messages.prototype.delete_msgs = function(msgs_number,border_ID) {
+ this.init_local_messages();
+ var rs = this.dbGears.execute("select url from anexo where id_mail in ("+msgs_number+")");
+ while(rs.isValidRow()) {
+ this.store.remove(rs.field(0));
+ rs.next();
+ }
+ this.dbGears.execute("delete from anexo where id_mail in ("+msgs_number+")");
+ this.dbGears.execute("delete from mail where rowid in ("+msgs_number+")");
+ this.finalize();
+ if (msgs_number.length == 1)
+ write_msg(get_lang("The message was deleted."));
+ else
+ write_msg(get_lang("The messages were deleted."));
+
+ mail_msg = Element("tbody_box");
+
+ try {
+ msgs_exploded = msgs_number.split(",");
+ }catch(error) {
+ msgs_exploded = new Array();
+ msgs_exploded[0] = msgs_number;
+ }
+ var msg_to_delete;
+ for (var i=0; i");
+ var friendly_filters = new Array();
+ if (filters[0].indexOf('ALL') != -1) { //all filters...
+ friendly_filters.push("SUBJECT");
+ friendly_filters.push(filters[1]);
+ friendly_filters.push("BODY");
+ friendly_filters.push(filters[1]);
+ friendly_filters.push("FROM");
+ friendly_filters.push(filters[1]);
+ friendly_filters.push("TO");
+ friendly_filters.push(filters[1]);
+ friendly_filters.push("CC");
+ friendly_filters.push(filters[1]);
+ }
+ else {
+ friendly_filters[0] = filters[0];
+ for (var i in filters) {
+ if (i != 0) {
+ var temp = filters[i].split(" ");
+ friendly_filters.push(temp[0]);
+ friendly_filters.push(temp[1]);
+ }
+ }
+ }
+ var sql = "select mail.header,folder.folder,mail.rowid,size from mail inner join folder on mail.id_folder=folder.rowid where mail.uid_usuario="+account_id + " and folder.folder in (";
+ for(var fnum in folders) {
+ sql+="'"+folders[fnum]+"'";
+ if(fnum= 1){
+ return tmp + " kb";
+ }else{
+ return size + " b";
+ }
+
+ }
+
+ local_messages.prototype.aux_convert_filter_field = function(filter) {
+ if((filter=="SUBJECT ") || (filter=="SUBJECT"))
+ return "subject";
+ else if((filter=="BODY ") || (filter=="BODY"))
+ return "body";
+ else if((filter=="FROM ") || (filter=="FROM"))
+ return "ffrom";
+ else if((filter=="TO ") || (filter=="TO"))
+ return "fto";
+ else if((filter=="CC ") || (filter=="CC"))
+ return "cc";
+ }
+
+ local_messages.prototype.has_local_mails = function() {
+ this.init_local_messages();
+ var rs = this.dbGears.execute("select rowid from folder limit 0,1");
+ var retorno;
+ if(rs.isValidRow())
+ retorno = true;
+ else
+ retorno = false;
+ this.finalize();
+ return retorno;
+ }
+
+ var expresso_local_messages;
+ expresso_local_messages = new local_messages();
Index: /trunk/expressoMail1_2/js/TreeS.js
===================================================================
--- /trunk/expressoMail1_2/js/TreeS.js (revision 320)
+++ /trunk/expressoMail1_2/js/TreeS.js (revision 670)
@@ -36,17 +36,17 @@
div_buttons.innerHTML = "";
tree.appendChild(div_buttons);
@@ -161,5 +161,30 @@
folders_tree.add(nn,data[i].folder_parent);
}
-
+ //Pastas locais
+ if (preferences.use_local_messages == 1) {
+ var n_root_local = new dNode({
+ id: 'local_root',
+ caption: get_lang("local messages"),
+ plusSign: true
+ });
+ folders_tree.add(n_root_local, 'root');
+
+ var local_folders = expresso_local_messages.list_local_folders();
+ for (var i in local_folders) { //Coloca as pastas locais.
+ if (local_folders[i][1] > 0)
+ var nodeLocal = new dNode({
+ id: "local_" + local_folders[i][0],
+ caption: lang_folder(local_folders[i][0]) + ' (' + local_folders[i][1] + ')',
+ plusSign: 0
+ });
+ else
+ var nodeLocal = new dNode({
+ id: "local_" + local_folders[i][0],
+ caption: lang_folder(local_folders[i][0]),
+ plusSign: 0
+ });
+ folders_tree.add(nodeLocal, "local_root");
+ }
+ }
folders_tree.draw(Element(destination));
n_root.changeState();
Index: /trunk/expressoMail1_2/js/main.js
===================================================================
--- /trunk/expressoMail1_2/js/main.js (revision 660)
+++ /trunk/expressoMail1_2/js/main.js (revision 670)
@@ -40,4 +40,8 @@
cExecute ("$this.functions.get_preferences", save_preferences);
setTimeout('auto_refresh()', time_refresh);
+}
+function disable_field(field,condition) {
+ var comando = "if ("+condition+") { document.getElementById('"+field.id+"').disabled=true;} else { document.getElementById('"+field.id+"').disabled=false; }";
+ eval(comando);
}
/*
@@ -236,11 +240,10 @@
}
-function delete_msgs(folder, msgs_number, border_ID)
-{
+function delete_msgs2(folder, msgs_number, border_ID, show_success_msg) {
if (folder == 'null')
folder = get_current_folder();
if ((parseInt(preferences.save_deleted_msg)) && (folder!='INBOX'+cyrus_delimiter+trashfolder)){
- move_msgs(folder, msgs_number, border_ID, 'INBOX'+cyrus_delimiter+trashfolder,trashfolder );
+ move_msgs2(folder, msgs_number, border_ID, 'INBOX'+cyrus_delimiter+trashfolder,trashfolder,show_success_msg );
return;
}
@@ -271,8 +274,10 @@
}
}
- if (data.msgs_number.length == 1)
- write_msg(get_lang("The message was deleted."));
- else
- write_msg(get_lang("The messages were deleted."));
+ if (show_success_msg) {
+ if (data.msgs_number.length == 1)
+ write_msg(get_lang("The message was deleted."));
+ else
+ write_msg(get_lang("The messages were deleted."));
+ }
if (data.border_ID != 'null'){
@@ -293,14 +298,25 @@
write_msg(get_lang('No selected message.'));
}
+function delete_msgs(folder, msgs_number, border_ID)
+{
+ delete_msgs2(folder, msgs_number, border_ID, true);
+}
+
function move_search_msgs(border_id, new_folder, new_folder_name){
var selected_messages = '';
+ var temp_msg;
var main_list = Element("tbody_resultsearch_"+border_id.substr(18)).childNodes;
for (j = 0; j < main_list.length; j++) {
var check_box = main_list[j].firstChild.firstChild;
if(check_box && check_box.checked) {
+ if (proxy_mensagens.is_local_folder(main_list[j].name)) {
+ alert(get_lang("You cant manipulate local messages on search"));
+ return;
+ }
selected_messages += main_list[j].id + ',';
}
}
+
selected_messages = selected_messages.substring(0,(selected_messages.length-1));
var handler_move_search_msgs = function(data){
@@ -334,5 +350,5 @@
for (i = 0; i < selected_msg_array.length; i++){
var tr = Element(selected_msg_array[i]);
- selected_param += ','+tr.name+';'+tr.id;
+ selected_param += ','+tr.name+';'+tr.id;
}
}
@@ -340,4 +356,5 @@
{
var tr=Element(selected_messages);
+ alert(tr.name);
selected_param=tr.name+';'+tr.id;
}
@@ -348,5 +365,4 @@
params = "&delete=true";
}
-
params += "&selected_messages="+url_encode(selected_param);
if(new_folder) {
@@ -354,4 +370,5 @@
params += "&new_folder_name="+url_encode(new_folder_name);
}
+
cExecute ("$this.imap_functions.move_search_messages", handler_move_search_msgs, params);
}
@@ -360,5 +377,6 @@
}
-function move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name){
+function move_msgs2(folder, msgs_number, border_ID, new_folder, new_folder_name,show_success_msg){
+
if (! folder || folder == 'null')
folder = Element("input_folder_"+msgs_number+"_r") ? Element("input_folder_"+msgs_number+"_r").value : get_current_folder();
@@ -424,9 +442,11 @@
}
-
- if (data.msgs_number.length == 1)
- write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name));
- else
- write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name));
+ if (show_success_msg) {
+ if (data.msgs_number.length == 1)
+ write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name));
+ else
+ write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name));
+ }
+
if (data.border_ID.indexOf('r') != -1){
if (parseInt(preferences.delete_and_show_previous_message) && folder == get_current_folder()){
@@ -455,4 +475,56 @@
write_msg(get_lang('No selected message.'));
+}
+
+function move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name) {
+ move_msgs2(folder, msgs_number, border_ID, new_folder, new_folder_name,true);
+}
+
+function archive_msgs(folder,folder_dest,id_msgs) {
+ if(proxy_mensagens.is_local_folder(folder)) {
+ write_msg(get_lang("You cant archive local mails"));
+ return;
+ }
+ var has_local_messages_before = expresso_local_messages.has_local_mails(); //vejo se já tinha mensagens locais
+ var handler_arquivar_mensagens = function(data) {
+ var sucess = true;
+ var temp;
+ var msgs_to_remove = new Array();
+ var update_tree;
+
+
+ for (var i = 0; i < data.length; i++) {
+ msg_info = connector.unserialize(data[i]);
+ temp = expresso_local_messages.insert_mail(msg_info, msg_info['header'],msg_info['array_attach'],folder_dest );
+ Element("check_box_message_" + msg_info.msg_number).checked = false;
+ if(!temp)
+ sucess = false;
+ else
+ msgs_to_remove.push(msg_info.msg_number);//As mensagens arquivadas devem ser removidas, caso o usuï¿œrio tenha isso configurado.
+ }
+
+ if (preferences.keep_archived_messages == 0) { //Remove as mensagens
+ delete_msgs2(folder,msgs_to_remove,'null',false);
+ }
+ update_tree=(!has_local_messages_before) && expresso_local_messages.has_local_mails();
+
+ Element('chk_box_select_all_messages').checked = false;
+ if(update_tree)
+ ttreeBox.update_folder();
+ else
+ update_menu();
+ if(sucess)
+ write_msg(get_lang("selected messages have been archived"));
+ else
+ write_msg(get_lang("at least, one of selected mails is already archived, expresso tried to archive the others, check them later"));
+
+ }
+ if(!id_msgs)
+ id_msgs = get_selected_messages();
+ if (parseInt(id_msgs) > 0 || id_msgs.length > 0)
+ cExecute("$this.imap_functions.get_info_msgs&folder=" + folder + "&msgs_number=" + id_msgs , handler_arquivar_mensagens);
+ else
+ write_msg(get_lang('No selected message.'));
+
}
@@ -501,4 +573,11 @@
else
return selected_messages;
+}
+
+function replaceAll(string, token, newtoken) {
+ while (string.indexOf(token) != -1) {
+ string = string.replace(token, newtoken);
+ }
+ return string;
}
@@ -720,4 +799,5 @@
break;
case "forward":
+ data.is_local_message = (document.getElementById("is_local_"+border_ID).value=="1")?true:false;
msg_forward_from = document.createElement('input');
msg_forward_from.id = "msg_forward_from_" + new_border_ID;
@@ -728,17 +808,41 @@
document.getElementById("subject_" + new_border_ID).value = "Fw: " + data.subject;
var divFiles = Element("divFiles_"+new_border_ID);
+ var campo_arquivo
if (Element("attachments_" + border_ID)){
var attachments = document.getElementById("attachments_" + border_ID).childNodes;
for (var i = (attachments.length > 1 ? 1 : 0); i < attachments.length; i++){
+ /*Anexos ics possuem um link ao seu lado para importar para calendário, que
+ não deve ser renderizado. Esse link não possui a string
+ javascript:download_attachments e vem com um span antes que é um espaço em branco,
+ que tb deve ser descartado*/
+ if((attachments[i].tagName=="SPAN") ||
+ ((attachments[i].href.indexOf("javascript:download_local_attachment")==-1)&&(attachments[i].href.indexOf("javascript:download_attachments")==-1)))
+ continue;
var link_attachment = document.createElement("A");
link_attachment.setAttribute("href", attachments[i].href);
link_attachment.innerHTML = attachments[i].innerHTML;
- var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", "");
- var a_tmp = tmp.split(',');
- tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("("));
- a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'";
- s_tmp = escape(connector.serialize(a_tmp));
- divFiles.innerHTML += "";
- divFiles.appendChild(link_attachment);
+ if (data.is_local_message) {//Local messages
+ document.getElementById("is_local_forward"+new_border_ID).value = "1";
+ var tmp = link_attachment.href.substring(link_attachment.href.indexOf("(") + 2);//Pula o parenteses e a aspas
+ tmp = tmp.substring(0, tmp.length - 2);//corta a aspas e o parenteses
+ tmp = replaceAll(tmp,"%20"," ");
+ var tempNomeArquivo = tmp.split("/");
+ var nomeArquivo = tempNomeArquivo[tempNomeArquivo.length-1];
+ nomeArquivo = nomeArquivo.substring(0,nomeArquivo.length - 4); //Anexos no gears são todos com extensão .php. tenho que tirar a extensão para ficar o nome real do arquivo.
+ campo_arquivo = addForwardedFile(new_border_ID,nomeArquivo,link_attachment.href);
+
+ expresso_local_messages.getInputFileFromAnexo(campo_arquivo, tmp);
+ }
+ else {
+ var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", "");
+ var a_tmp = tmp.split(',');
+ tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("("));
+ a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'";
+ s_tmp = escape(connector.serialize(a_tmp));
+
+ divFiles.innerHTML += "";
+ divFiles.innerHTML += "";
+ divFiles.appendChild(link_attachment);
+ }
}
}
@@ -1484,5 +1588,5 @@
else
set_message_flag(msgs_number, "unseen");
- move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
+ proxy_mensagens.proxy_move_messages(folder, msgs_number, border_ID, new_folder, new_folder_name);
}
@@ -1504,5 +1608,5 @@
// debug
// alert(data);
- move_msgs(folder, msgs_number, border_ID, new_folder, new_folder_name);
+ proxy_mensagens.proxy_move_messages(folder, msgs_number, border_ID, new_folder, new_folder_name);
}
if(msgs_number == 'selected')
Index: /trunk/expressoMail1_2/js/gears_init.js
===================================================================
--- /trunk/expressoMail1_2/js/gears_init.js (revision 670)
+++ /trunk/expressoMail1_2/js/gears_init.js (revision 670)
@@ -0,0 +1,86 @@
+// Copyright 2007, Google Inc.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+// 3. Neither the name of Google Inc. nor the names of its contributors may be
+// used to endorse or promote products derived from this software without
+// specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// Sets up google.gears.*, which is *the only* supported way to access Gears.
+//
+// Circumvent this file at your own risk!
+//
+// In the future, Gears may automatically define google.gears.* without this
+// file. Gears may use these objects to transparently fix bugs and compatibility
+// issues. Applications that use the code below will continue to work seamlessly
+// when that happens.
+
+(function() {
+ // We are already defined. Hooray!
+ if (window.google && google.gears) {
+ return;
+ }
+
+ var factory = null;
+
+ // Firefox
+ if (typeof GearsFactory != 'undefined') {
+ factory = new GearsFactory();
+ } else {
+ // IE
+ try {
+ factory = new ActiveXObject('Gears.Factory');
+ // privateSetGlobalObject is only required and supported on WinCE.
+ if (factory.getBuildInfo().indexOf('ie_mobile') != -1) {
+ factory.privateSetGlobalObject(this);
+ }
+ } catch (e) {
+ // Safari
+ if ((typeof navigator.mimeTypes != 'undefined')
+ && navigator.mimeTypes["application/x-googlegears"]) {
+ factory = document.createElement("object");
+ factory.style.display = "none";
+ factory.width = 0;
+ factory.height = 0;
+ factory.type = "application/x-googlegears";
+ document.documentElement.appendChild(factory);
+ }
+ }
+ }
+
+ // *Do not* define any objects if Gears is not installed. This mimics the
+ // behavior of Gears defining the objects in the future.
+ if (!factory) {
+ return;
+ }
+
+ // Now set up the objects, being careful not to overwrite anything.
+ //
+ // Note: In Internet Explorer for Windows Mobile, you can't add properties to
+ // the window object. However, global objects are automatically added as
+ // properties of the window object in all browsers.
+ if (!window.google) {
+ google = {};
+ }
+
+ if (!google.gears) {
+ google.gears = {factory: factory};
+ }
+})();
Index: /trunk/expressoMail1_2/js/filter.js
===================================================================
--- /trunk/expressoMail1_2/js/filter.js (revision 564)
+++ /trunk/expressoMail1_2/js/filter.js (revision 670)
@@ -128,8 +128,6 @@
}
}
- for(var i=0; i < nm_folders.length; i++)
- {
- if(nm_folders[i].id != "root")
- {
+ for(var i=0; i < nm_folders.length; i++){
+ if(nm_folders[i].id != "root" && !proxy_mensagens.is_local_folder(nm_folders[i].id)){
var opt = new Option(nm_folders[i].caption,nm_folders[i].id,false,true);
sel_nm[sel_nm.length] = opt;
Index: /trunk/expressoMail1_2/js/wfolders.js
===================================================================
--- /trunk/expressoMail1_2/js/wfolders.js (revision 660)
+++ /trunk/expressoMail1_2/js/wfolders.js (revision 670)
@@ -6,6 +6,6 @@
}
- cWFolders.prototype.makeWindow = function(border_id, type)
- {
+ cWFolders.prototype.makeWindowNew = function(border_id, type,from_search)
+ { //Infelizmente javascript não parece suportar o polimorfismo...
_this = this;
@@ -60,5 +60,5 @@
move_search_msgs(border_id, wfolders_tree._selected.id, wfolders_tree._selected.caption);
else{
- move_msgs('null', msg_number, border_id, wfolders_tree._selected.id, wfolders_tree._selected.caption);
+ proxy_mensagens.proxy_move_messages('null',msg_number, border_id, wfolders_tree._selected.id, wfolders_tree._selected.caption);
wfolders.alert = true;
}
@@ -87,22 +87,32 @@
el.appendChild(butt);
- if (!Element('dftree_wfolders_tree'))
+ wfolders_tree = new dFTree({name: 'wfolders_tree'});
+ var n_root = new dNode({id:'root', caption:get_lang("My Folders")});
+ wfolders_tree.add(n_root,'anything'); //Places the root; second argument can be anything.
+
+ var folders = tree_folders.getNodesList(cyrus_delimiter);
+ for (var i=1; i 0))
+ {
+ folder_unseen.innerHTML = local_folders[i][1];
+ has_changes = true;
+ }
+ else if (local_folders[i][1] > 0)
+ {
+ tree_folders.getNodeById("local_"+local_folders[i][0]).alter({caption:lang_folder(local_folders[i][0]) + ' ('+local_folders[i][1]+')'});
+ tree_folders.getNodeById("local_"+local_folders[i][0])._refresh();
+ has_changes = true;
+ }
+ else if (local_folders[i][1] <= 0)
+ {
+ tree_folders.getNodeById("local_"+local_folders[i][0]).alter({caption:lang_folder(local_folders[i][0])});
+ tree_folders.getNodeById("local_"+local_folders[i][0])._refresh();
+ has_changes = true;
+ }
+
+ if("local_"+local_folders[i][0] == get_current_folder()){
+ var old_new_m = isNaN(parseInt(Element('new_m').innerHTML)) ? parseInt(Element('new_m').firstChild.innerHTML) : parseInt(Element('new_m').innerHTML);
+ if(!isNaN(old_new_m) && old_new_m < local_folders[i][1]){
+ Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + (parseInt(local_folders[i][1])-old_new_m);
+ }
+ Element('new_m').innerHTML = local_folders[i][1] ? ''+local_folders[i][1]+'' : 0;
+ draw_paging(Element('tot_m').innerHTML);
+ has_changes = true;
+ }
+ }
+ if(has_changes)
+ tree_folders.getNodeById("local_root").open();
+
+ }
+
return;
}
@@ -83,4 +127,48 @@
tree_folders.add(nn,folders[i].folder_parent);
}
+ //tree_local_folders = new dFTree({name: 'tree_local_folders'});
+ /**
+ * Pastas locais
+ */
+ if (preferences.use_local_messages==1) {
+ if (!window.google || !google.gears) {
+ temp = confirm(get_lang("To use local messages you have to install google gears. Would you like to be redirected to gears installation page?"));
+ if (temp) {
+ location.href = "http://gears.google.com/?action=install&message="+
+ get_lang("To use local messages, install Google Gears")+"&return=" + document.location.href;
+ }
+ else {
+ preferences.use_local_messages=0;
+ }
+ }
+ else{
+ var root_local = new dNode({
+ id: "local_root",
+ caption: get_lang('local messages')
+ });
+ tree_folders.add(root_local, "root"); //coloca root local
+ var local_folders = expresso_local_messages.list_local_folders();
+ for (var i in local_folders) { //Coloca as pastas locais.
+ if (local_folders[i][1] > 0)
+ var nodeLocal = new dNode({
+ id: "local_" + local_folders[i][0],
+ caption: lang_folder(local_folders[i][0]) + ' (' + local_folders[i][1] + ')',
+ onClick: "change_folder('local_" + local_folders[i][0] + "','" + local_folders[i][0] + "')",
+ plusSign: 0
+ });
+ else
+ var nodeLocal = new dNode({
+ id: "local_" + local_folders[i][0],
+ caption: lang_folder(local_folders[i][0]),
+ onClick: "change_folder('local_" + local_folders[i][0] + "','" + local_folders[i][0] + "')",
+ plusSign: 0
+ });
+ tree_folders.add(nodeLocal, "local_root");
+ }
+ }
+ }
+
+
+
tree_folders.draw(Element('content_folders'));
n_root.changeState();
@@ -183,6 +271,8 @@
return true;
}
- cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box);
- } else
+ proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort_box_type,search_box_type,sort_box_reverse,handler_draw_box);
+// cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box);
+ }
+ else
alternate_border(0);
}
@@ -246,5 +336,5 @@
if(current_page != 1) {
lnk_page = document.createElement("A");
- lnk_page.setAttribute("href", "javascript:current_page=1;kill_current_box(); draw_paging("+num_msgs+"); cExecute ('$this.imap_functions.get_range_msgs2&folder='+get_current_folder()+'&msg_range_begin="+msg_range_begin+"&msg_range_end="+msg_range_end+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"', function handler(data){draw_box(data, get_current_folder());})");
+ lnk_page.setAttribute("href", "javascript:current_page=1;kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+",function handler(data){draw_box(data, get_current_folder());});");
}
else {
@@ -285,5 +375,5 @@
msg_range_begin = ((i*preferences.max_email_per_page)-(preferences.max_email_per_page-1));
msg_range_end = (i*preferences.max_email_per_page);
- lnk_page.setAttribute("href", "javascript:current_page="+i+";kill_current_box(); draw_paging("+num_msgs+"); cExecute ('$this.imap_functions.get_range_msgs2&folder='+get_current_folder()+'&msg_range_begin="+msg_range_begin+"&msg_range_end="+msg_range_end+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"', function handler(data){draw_box(data, get_current_folder());})");
+ lnk_page.setAttribute("href", "javascript:current_page="+i+";kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+",function handler(data){draw_box(data, get_current_folder());});");
}
@@ -302,5 +392,5 @@
msg_range_begin = ((total_pages*preferences.max_email_per_page)-(preferences.max_email_per_page-1));
msg_range_end = (total_pages*preferences.max_email_per_page);
- lnk_page.setAttribute("href", "javascript:current_page="+total_pages+";kill_current_box(); draw_paging("+num_msgs+"); cExecute ('$this.imap_functions.get_range_msgs2&folder='+get_current_folder()+'&msg_range_begin="+msg_range_begin+"&msg_range_end="+msg_range_end+"&sort_box_type="+sort_box_type+ "&search_box_type="+ search_box_type +"&sort_box_reverse="+sort_box_reverse+"', function handler(data){draw_box(data, get_current_folder());})");
+ lnk_page.setAttribute("href", "javascript:current_page="+total_pages+";kill_current_box(); draw_paging("+num_msgs+"); proxy_mensagens.messages_list(get_current_folder(),"+msg_range_begin+","+msg_range_end+",'"+sort_box_type+"','"+search_box_type+"',"+sort_box_reverse+",function handler(data){draw_box(data, get_current_folder());});");
}
else {
@@ -347,10 +437,10 @@
{
if ((window.event.keyCode) == 46)
- delete_msgs(get_current_folder(),'selected','null');
+ proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
}
else
{
if ((e.keyCode) == 46)
- delete_msgs(get_current_folder(),'selected','null');
+ proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
}
};
@@ -416,5 +506,5 @@
{
//delete_all_selected_msgs_imap();
- delete_msgs(get_current_folder(),'selected','null');
+ proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
}
}
@@ -424,5 +514,5 @@
{
//delete_all_selected_msgs_imap();
- delete_msgs(get_current_folder(),'selected','null');
+ proxy_mensagens.delete_msgs(get_current_folder(),'selected','null');
}
}
@@ -606,5 +696,5 @@
td_element3.id = "td_who_"+ headers_msgs.msg_number;
td_element3.setAttribute("width", "30%");
- var _onclick = function(){InfoContact.hide();cExecute("$this.imap_functions.get_info_msg&msg_number="+ headers_msgs.msg_number + "&msg_folder=" + msg_folder, show_msg);};
+ var _onclick = function(){InfoContact.hide();proxy_mensagens.get_msg(headers_msgs.msg_number, msg_folder,true, show_msg);};
td_element3.onclick = _onclick;
td_element3.innerHTML = ' ';
@@ -726,5 +816,6 @@
search_box_type = search;
- cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type="+sort+"&search_box_type="+search+"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box);
+ proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort,search,sort_box_reverse,handler_draw_box);
+// cExecute ("$this.imap_functions.get_range_msgs2&folder="+current_folder+"&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&search_box_type="+search+"&sort_box_type="+sort+"&sort_box_reverse="+sort_box_reverse+"", handler_draw_box);
current_page = 1;
//Comentado para nao sobrepor o numero de msgs nao lidas ao utilizar os filtros
@@ -952,5 +1043,5 @@
option_delete.id = 'msg_opt_delete_'+ID;
option_delete.className = 'message_options';
- option_delete.onclick = function(){delete_msgs(info_msg.msg_folder, info_msg.msg_number, ID);};
+ option_delete.onclick = function(){proxy_mensagens.delete_msgs(info_msg.msg_folder, info_msg.msg_number, ID);};
option_delete.innerHTML = get_lang('Delete');
options.appendChild(space3);
@@ -974,7 +1065,7 @@
var option_mark_as = ''+get_lang("Mark as")+': ';
- var option_mark_as_unseen = ''+get_lang("Unseen")+', ';
- var option_mark_as_important = ''+get_lang("Important")+', ';
- var option_mark_as_normal = ''+get_lang("Normal")+' | ';
+ var option_mark_as_unseen = ''+get_lang("Unseen")+', ';
+ var option_mark_as_important = ''+get_lang("Important")+', ';
+ var option_mark_as_normal = ''+get_lang("Normal")+' | ';
var option_move = ''+get_lang("Move")+' | ';
@@ -982,5 +1073,5 @@
var option_reply_without_history = ''+get_lang("Reply without history")+' | ';
var option_reply_to_all_without_history = ''+get_lang("Reply to all without history")+' | ';
- var option_source_msg = ''+get_lang("Message Font")+'';
+ var option_source_msg = ''+get_lang("Message Font")+'';
div_other_options.innerHTML = option_mark_as + option_mark_as_unseen + option_mark_as_important + option_mark_as_normal + option_move + option_reply_to_all + option_reply_without_history + option_reply_to_all_without_history + option_source_msg;
@@ -1011,5 +1102,5 @@
var option_edit = ''+get_lang('Edit')+' | ';
var option_print = ''+get_lang('Print')+' | ';
- var option_delete = ''+get_lang('Delete')+' | ';
+ var option_delete = ''+get_lang('Delete')+' | ';
var option_hide_more = document.createElement("SPAN");
option_hide_more.className = 'message_options';
@@ -1097,7 +1188,18 @@
from_values.type = "HIDDEN";
from_values.value = info_msg.from.full; //Veio do IMAP, sem images nem links.
+
+ var local_message = document.createElement("INPUT");
+ local_message.id = "is_local_"+ID;
+ local_message.name = "is_local";
+ local_message.type = "HIDDEN";
+ local_message.value = (info_msg.local_message)?"1":"0";
+
tr1.appendChild(td1);
tr1.appendChild(from);
tr1.appendChild(from_values);
+ tr1.appendChild(local_message);
+
+
+
if (info_msg.reply_to){
var tr11 = document.createElement("TR");
@@ -1318,5 +1420,6 @@
for (var i=0; i'+get_lang("Delete")+' | '+
+ ''+get_lang("Delete")+' | '+
''+get_lang("Move")+' | '+
''+get_lang("Print")+' | '+
''+get_lang("Export")+' | ' +
''+get_lang("Import")+'';
-
+ if(preferences.use_local_messages==1)
+ span_options.innerHTML += ' | '+get_lang("Archive")+'';
if (use_spam_filter) {
if ( get_current_folder() == 'INBOX'+cyrus_delimiter+'Spam' ) {
Index: /trunk/expressoMail1_2/js/doiMenuData.js
===================================================================
--- /trunk/expressoMail1_2/js/doiMenuData.js (revision 320)
+++ /trunk/expressoMail1_2/js/doiMenuData.js (revision 670)
@@ -152,11 +152,11 @@
var _sep = "
";
var optionsMenu = new Array(
- _tab + get_lang("Mark as")+" "+get_lang('seen')+'|'+"set_messages_flag('seen','get_selected_messages')",
- _tab + get_lang("Mark as")+" "+get_lang('unseen')+'|'+"set_messages_flag('unseen','get_selected_messages')",
- _tab + get_lang("Mark as")+" "+get_lang('important')+'|'+"set_messages_flag('flagged','get_selected_messages')",
- _tab + get_lang("Mark as")+" "+get_lang('normal')+'|'+"set_messages_flag('unflagged','get_selected_messages')",
+ _tab + get_lang("Mark as")+" "+get_lang('seen')+'|'+"proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages')",
+ _tab + get_lang("Mark as")+" "+get_lang('unseen')+'|'+"proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages')",
+ _tab + get_lang("Mark as")+" "+get_lang('important')+'|'+"proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages')",
+ _tab + get_lang("Mark as")+" "+get_lang('normal')+'|'+"proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages')",
_sep,
_tab + get_lang("Move to")+" ... |wfolders.makeWindow('', 'move_to')",
- _tab + get_lang("Delete")+"|"+"delete_msgs('null','selected','null')",
+ _tab + get_lang("Delete")+"|"+"proxy_mensagens.delete_msgs('null','selected','null')",
_tab + get_lang("Export")+"|"+"export_all_selected_msgs()"
);
Index: /trunk/expressoMail1_2/js/TreeShow.js
===================================================================
--- /trunk/expressoMail1_2/js/TreeShow.js (revision 345)
+++ /trunk/expressoMail1_2/js/TreeShow.js (revision 670)
@@ -98,4 +98,10 @@
if(func == "newpast"){
var button = prompt(get_lang('Enter the name of the new folder:'),"");
+
+ if (button.indexOf("local_") != -1 || button.toUpperCase() == "INBOX") {
+ alert(get_lang("cannot create folder. try other folder name"));
+ return false; //Não posso criar pastas contendo a string local_
+ }
+
if(trim(button) == "" || trim(button) == null){
return false;
@@ -114,4 +120,8 @@
}
var button1 = prompt(get_lang("Enter a name for the box"), "");
+ if (button1.indexOf("local_") != -1 || button1.toUpperCase() == "INBOX") {
+ alert(get_lang("cannot create folder. try other folder name"));
+ return false; //Não posso criar pastas contendo a string local_
+ }
if(trim(button1) == "" || trim(button1) == null){
return false;
Index: /trunk/expressoMail1_2/index.php
===================================================================
--- /trunk/expressoMail1_2/index.php (revision 653)
+++ /trunk/expressoMail1_2/index.php (revision 670)
@@ -58,4 +58,8 @@
}
+
+ //Local messages
+ $_SESSION['phpgw_info']['server']['expressomail']['enable_local_messages'] = $current_config['enable_local_messages'];
+
// Get Data from ldap_manager and emailadmin.
$ldap_manager = CreateObject('contactcenter.bo_ldap_manager');
@@ -73,5 +77,8 @@
$_SESSION['phpgw_info']['expressomail']['user']['email'] = $GLOBALS['phpgw']->preferences->values['email'];
-
+ if($current_config['enable_local_messages']!='True') {
+ $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'] = 0;
+ }
+
$_SESSION['phpgw_info']['user']['preferences']['expressoMail'] = array(
'voip_enabled' => $voip_enabled,
@@ -97,7 +104,7 @@
'number_of_contacts' => $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0",
'use_cache' => $current_config['expressoMail_enable_cache'],
- 'notification_domains' => $current_config['expressoMail_notification_domains']
-
-
+ 'notification_domains' => $current_config['expressoMail_notification_domains'],
+ 'use_local_messages' => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'] : "0",
+ 'keep_archived_messages' => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['keep_archived_messages'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['keep_archived_messages'] : "0"
);
@@ -160,4 +167,6 @@
// End Set Imap Folder names options
+ //User info
+ echo "";
$obj = createobject("expressoMail1_2.functions");
@@ -172,4 +181,7 @@
"js/InfoContact.js," .
"js/main.js," .
+ "js/gears_init.js," .
+ "js/local_messages.js," .
+ "js/messages_proxy.js," .
"js/rich_text_editor.js," .
"js/wfolders.js,",
Index: /trunk/expressoMail1_2/templates/default/preferences.tpl
===================================================================
--- /trunk/expressoMail1_2/templates/default/preferences.tpl (revision 413)
+++ /trunk/expressoMail1_2/templates/default/preferences.tpl (revision 670)
@@ -1,3 +1,3 @@
-
+
@@ -39,4 +39,24 @@
+ {open_comment_local_messages_config}
+
+ {lang_Would_you_like_to_use_local_messages_?} |
+
+
+ |
+
+
+ {lang_Would_you_like_to_keep_archived_messages_?} |
+
+
+ |
+
+ {close_comment_local_messages_config}
{lang_delete_and_show_previous_message} |
@@ -161,4 +181,5 @@