Changeset 271


Ignore:
Timestamp:
04/30/08 17:11:15 (16 years ago)
Author:
niltonneto
Message:

Fechamento de versão: 1.2211
Tickets:

#50 Criar uma funcionalidade para inserir imagens embutidas no corpo da mensagem.
#174 Implementar rascunho com anexos
#182 Criar funcionalidade de salvar automaticamente os emails em rascunhos
#183 Funcionalidade de drag and drop na busca
#185 Adicionar tabela na edição de email
#186 Correção do problema com nomes de anexos com caracteres especiais
#188 Definir aspectos de QA do ExpressoMail?
#190 Problema ao salvar informações de filtros no IE

Location:
trunk/expressoMail1_2
Files:
1 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.imap_attachment.inc.php

    r2 r271  
    6363                        { 
    6464                                $array_parts_attachments[$i]['pid'] = $msg->pid[$msgno][$index]; 
    65                                 $array_parts_attachments[$i]['name'] = $this->flat_mime_decode($fname); 
     65                                $array_parts_attachments[$i]['name'] = $this->decode_mimeheader($fname); 
     66                                //$array_parts_attachments[$i]['name'] = $this->flat_mime_decode($fname); 
    6667                                $array_parts_attachments[$i]['name'] = $array_parts_attachments[$i]['name'] ? $array_parts_attachments[$i]['name'] : "attachment.bin"; 
    6768                                $array_parts_attachments[$i]['encoding'] = $msg->encoding[$msgno][$index]; 
     
    7576        } 
    7677         
     78        function decode_mimeheader($string) { 
     79        return mb_decode_mimeheader($string); 
     80    } 
    7781        function flat_mime_decode($string) { 
    7882                $array = imap_mime_header_decode($string); 
  • trunk/expressoMail1_2/inc/class.imap_functions.inc.php

    r205 r271  
    840840                 
    841841                $msg_to_insert  = array_diff($msgs_in_the_server, $msgs_in_the_client); 
    842                 //$msg_to_delete = array_diff($msgs_in_the_client, $msgs_in_the_server); 
     842                $msg_to_delete = array_diff($msgs_in_the_client, $msgs_in_the_server); 
    843843                 
    844844                $msgs_to_exec = array(); 
     
    867867                        } 
    868868                } 
    869                 /*if (count($msg_to_delete)) 
    870                 { 
    871                         foreach($msg_to_delete as $index => $msg_number) 
    872                         { 
    873                                 $msgs_to_exec[$msg_number] = 'Apagar mensage numero ' . $msg_number; 
    874                         } 
    875                 }*/ 
    876869                 
    877870                $return = array(); 
     
    930923                } 
    931924                $return['new_msgs'] = imap_num_recent($this->mbox); 
     925                $return['msgs_to_delete'] = $msg_to_delete; 
    932926                if($this->mbox) 
    933927                        imap_close($this->mbox); 
     
    10941088                $ccoaddress = implode(',',$db->getAddrs(explode(',',$params['input_cco']))); 
    10951089                $subject = $params['input_subject']; 
     1090                $msg_uid = $params['msg_id']; 
    10961091                $return_receipt = $params['input_return_receipt']; 
    10971092                $body = $params['body']; 
     
    11131108//////////////////////////////////////////////////////////////////////////////////////////////////// 
    11141109                $mail->SMTPDebug = false; 
    1115                  
    1116                 //$mail->SMTPAuth = true; 
    1117                 //$mail->Username = $_SESSION['phpgw_info']['expressomail']['user']['userid']; 
    1118                 //$mail->Password = $_SESSION['phpgw_info']['expressomail']['user']['passwd']; 
    11191110                                 
    11201111                $mail->IsSMTP(); 
     
    11361127                $mail->IsHTML(true); 
    11371128                $mail->Body = $params['body']; 
     1129 
     1130//////////////////////////////////////////////////////////////////////////////////////////////////// 
     1131                //      Build CID for embedded Images!!! 
     1132                $pattern = '/src="([^"]*?show_embedded_attach.php\?msg_folder=(.+)?&msg_num=(.+)?&msg_part=(.+)?)"/isU'; 
     1133                $cid_imgs = ''; 
     1134                $name_cid_files = array(); 
     1135                preg_match_all($pattern,$mail->Body,$cid_imgs,PREG_PATTERN_ORDER); 
     1136                $cid_array = array(); 
     1137                foreach($cid_imgs[4] as $j => $val){ 
     1138                                if ( !array_key_exists($cid_imgs[3][$j].$val, $cid_array) ) 
     1139                        { 
     1140                $cid_array[$cid_imgs[3][$j].$val] = base_convert(microtime(), 10, 36); 
     1141                        } 
     1142                        $cid = $cid_array[$cid_imgs[3][$j].$val];  
     1143                        $mail->Body = str_replace($cid_imgs[1][$j], "cid:".$cid, $mail->Body); 
     1144                         
     1145                                if ($msg_uid != $cid_imgs[3][$j]) // The image isn't in the same mail? 
     1146                                { 
     1147                                        $fileContent = $this->get_forwarding_attachment($cid_imgs[2][$j], $cid_imgs[3][$j], $cid_imgs[4][$j], 'base64'); 
     1148                                        $fileName = "image_".($j).".jpg"; 
     1149                                        $fileCode = "base64"; 
     1150                                        $fileType = "image/jpg"; 
     1151                                } 
     1152                                else 
     1153                                { 
     1154                                        $attach_img = $forwarding_attachments[$cid_imgs[4][$j]-2]; 
     1155                                        $file_description = unserialize(rawurldecode($attach_img)); 
     1156 
     1157                                        foreach($file_description as $i => $descriptor){                                 
     1158                                                $file_description[$i]  = eregi_replace('\'*\'','',$descriptor); 
     1159                                        } 
     1160                                        $fileContent = $this->get_forwarding_attachment($file_description[0], $msg_uid, $file_description[3], 'base64'); 
     1161                                        $fileName = $file_description[2]; 
     1162                                        $fileCode = $file_description[4]; 
     1163                                        $fileType = $this->get_file_type($file_description[2]); 
     1164                                        unset($forwarding_attachments[$cid_imgs[4][$j]-2]); 
     1165                                } 
     1166                                $tempDir = ini_get("session.save_path"); 
     1167                                $file = "cid_image_".base_convert(microtime(), 10, 36).".dat";                                   
     1168                                $f = fopen($tempDir.'/'.$file,"w"); 
     1169                                fputs($f,$fileContent); 
     1170                                fclose($f); 
     1171                                if ($fileContent) 
     1172                                        $mail->AddEmbeddedImage($tempDir.'/'.$file, $cid, $fileName, $fileCode, $fileType); 
     1173                                //else 
     1174                                //      return "Error loading image attachment content";                                                 
     1175 
     1176                } 
    11381177//////////////////////////////////////////////////////////////////////////////////////////////////// 
    11391178                //      Build Uploading Attachments!!! 
     
    11511190                }                        
    11521191//////////////////////////////////////////////////////////////////////////////////////////////////// 
    1153                 //      Build CID for embedded Images!!! 
    1154                 $pattern = '/show_embedded_attach.php\?msg_folder=INBOX&(.+)&(.+)">/isU'; 
    1155                 $cid_imgs = ''; 
    1156                 $name_cid_files = array(); 
    1157                 if(preg_match_all($pattern,$mail->Body,$cid_imgs,PREG_PATTERN_ORDER)){           
    1158                         include("class.imap_attachment.inc.php"); 
    1159                         $imap_attachment = new imap_attachment();                        
    1160                 } 
    1161                 for($i = 0; $i < count($cid_imgs);$i++){ 
    1162                         if($i == 1) { 
    1163                                 for($j = 0; $j < count($cid_imgs[$i]);$j++){ 
    1164                                         $cid = base_convert(microtime(), 10, 36); 
    1165                                         $msg_num = explode("=",$cid_imgs[$i][$j]);  
    1166                                         $msg_part = explode("=",$cid_imgs[$i+1][$j]); 
    1167                                         $fileContent = imap_base64(imap_fetchbody($this->open_mbox(), $msg_num[1], $msg_part[1], FT_UID)); 
    1168                                         $pattern = './inc/show_embedded_attach.php?msg_folder=INBOX&amp;msg_num='.$msg_num[1].'&amp;msg_part='.$msg_part[1]; 
    1169                                         $replace = "cid:".$cid; 
    1170                                         $mail->Body = str_replace($pattern,$replace,$mail->Body); 
    1171                                         $tempDir = ini_get("session.save_path"); 
    1172                                         $file = "cid_image_".base_convert(microtime(), 10, 36).".dat";                                   
    1173                                         $f = fopen($tempDir.'/'.$file,"w"); 
    1174                                         fputs($f,$fileContent); 
    1175                                         fclose($f);              
    1176                                         $name_cid_files[$j] = "image_".($j).".jpg";                      
    1177                                         $mail->AddEmbeddedImage("$tempDir/$file", $cid, "image_".($j).".jpg", "base64", "image/jpg"); 
    1178                                 } 
    1179                         }                
    1180                 } 
    1181 //////////////////////////////////////////////////////////////////////////////////////////////////// 
    1182                 //      Build Forwarding Attachments!!!          
     1192                //      Build Forwarding Attachments!!! 
    11831193                if (count($forwarding_attachments) > 0) 
    11841194                { 
     
    11911201                        foreach($forwarding_attachments as $forwarding_attachment) 
    11921202                        { 
    1193                                 $file_description = unserialize(rawurldecode($forwarding_attachment)); 
    1194                                 foreach($file_description as $i => $descriptor){                                 
    1195                                         $file_description[$i]  = eregi_replace('\'*\'','',$descriptor); 
    1196                                 } 
    1197                                 $fileContent = $this->get_forwarding_attachment($file_description[0], $file_description[1], $file_description[3],$file_description[4]); 
    1198                                 $fileName = $file_description[2]; 
    1199                                 if(!array_search(trim($fileName),$name_cid_files)) { 
    1200                                         $mail->AddStringAttachment($fileContent, $fileName, $file_description[4], $this->get_file_type($file_description[2])); 
     1203                                        $file_description = unserialize(rawurldecode($forwarding_attachment)); 
     1204                                        $tmp = array_values($file_description); 
     1205                                        foreach($file_description as $i => $descriptor){                                 
     1206                                                $tmp[$i]  = eregi_replace('\'*\'','',$descriptor); 
     1207                                        } 
     1208                                        $file_description = $tmp;                                        
     1209                                        $fileContent = $this->get_forwarding_attachment($file_description[0], $file_description[1], $file_description[3],$file_description[4]); 
     1210                                        $fileName = $file_description[2]; 
     1211                                        if(!array_search(trim($fileName),$name_cid_files)) { 
     1212                                                $mail->AddStringAttachment($fileContent, $fileName, $file_description[4], $this->get_file_type($file_description[2])); 
    12011213                                } 
    12021214                        } 
     
    14521464        function save_msg($params) 
    14531465        { 
    1454                 $folder_id = $params['folder_id']; 
    1455                 $folder_id =  mb_convert_encoding($folder_id, "UTF7-IMAP", "UTF-8"); 
    1456                 $folder_name = $params['folder_name']; 
    1457                 $folder_name =  mb_convert_encoding($folder_name, "ISO-8859-1", "UTF-8"); 
    1458                 $border_id = $params['border_id']; 
    1459                 $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 
    1460                 $mbox_stream = $this->open_mbox();               
    1461                  
    1462                 $from = '"' . $_SESSION['phpgw_info']['expressomail']['user']['fullname'] . '" <' . $_SESSION['phpgw_info']['expressomail']['user']['email'] . '>';                              
    1463                 $to = $params['to']; 
    1464                 $cc = $params['cc']; 
    1465                 $subject = $params['subject']; 
     1466                 
     1467                include_once("class.phpmailer.php"); 
     1468                $mail = new PHPMailer(); 
     1469                include_once("class.db_functions.inc.php"); 
     1470                $toaddress = $params['input_to']; 
     1471                $ccaddress = $params['input_cc']; 
     1472                $subject = $params['input_subject']; 
    14661473                $body = $params['body']; 
    14671474                $body = str_replace("%nbsp;","&nbsp;",$params['body']); 
    14681475                $body = preg_replace("/\n/"," ",$body); 
    14691476                $body = preg_replace("/\r/","",$body); 
    1470                  
    1471                 $header =       "From: " . $from . "\r\n" 
    1472                                         . "To: " . $to . "\r\n" 
    1473                                         . "Cc: " . $cc . "\r\n"; 
     1477                $forwarding_attachments = $params['forwarding_attachments']; 
     1478                $attachments = $params['FILES']; 
     1479                $return_files = $params['FILES']; 
     1480                  
     1481                $folder = $params['folder']; 
     1482                $folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO_8859-1");                
     1483                // Fix problem with cyrus delimiter changes. 
     1484                // Dots in names: enabled/disabled.                              
     1485                $folder = @eregi_replace("INBOX/", "INBOX".$this->imap_delimiter, $folder); 
     1486                $folder = @eregi_replace("INBOX.", "INBOX".$this->imap_delimiter, $folder); 
     1487                // End Fix. 
    14741488                                         
    1475                 $header =  mb_convert_encoding($header, "ISO-8859-1", "UTF-8"); 
    1476                 $header =       $header 
    1477                                         . "Subject: " . $subject . "\r\n" 
    1478                                         . "\r\n" 
    1479                                         . $body . "\r\n"; 
    1480                  
    1481                 $return = array(); 
    1482                 $return['append'] = imap_append($mbox_stream, "{".$this->imap_server.":".$this->imap_port."}".$folder_id, $header, "\\Seen \\Draft"); 
    1483                 $return['folder_name'] = $folder_name; 
    1484                 $return['border_id'] = $border_id; 
     1489                $mail->SaveMessageInFolder = $folder; 
     1490                $mail->SMTPDebug = false; 
     1491                                                 
     1492                $mail->IsSMTP(); 
     1493                $mail->Host = $_SESSION['phpgw_info']['expressomail']['email_server']['smtpServer']; 
     1494                $mail->Port = $_SESSION['phpgw_info']['expressomail']['email_server']['smtpPort']; 
     1495                $mail->From = $_SESSION['phpgw_info']['expressomail']['user']['email']; 
     1496                $mail->FromName = $_SESSION['phpgw_info']['expressomail']['user']['fullname']; 
     1497                 
     1498                $mail->Sender = $mail->From; 
     1499                $mail->SenderName = $mail->FromName; 
     1500                $mail->FromName = $_SESSION['phpgw_info']['expressomail']['user']['fullname']; 
     1501                $mail->From =  $_SESSION['phpgw_info']['expressomail']['user']['email']; 
     1502                                 
     1503                $this->add_recipients("to", $toaddress, &$mail); 
     1504                $this->add_recipients("cc", $ccaddress, &$mail); 
     1505                $mail->Subject = $subject; 
     1506                $mail->IsHTML(true); 
     1507                $mail->Body = $body; 
     1508                 
     1509         
     1510        //      Build Forwarding Attachments!!!          
     1511                if (count($forwarding_attachments) > 0) 
     1512                { 
     1513                        foreach($forwarding_attachments as $forwarding_attachment) 
     1514                        { 
     1515                                $file_description = unserialize(rawurldecode($forwarding_attachment)); 
     1516                                $tmp = array_values($file_description); 
     1517                                foreach($file_description as $i => $descriptor){                                 
     1518                                        $tmp[$i]  = eregi_replace('\'*\'','',$descriptor); 
     1519                                } 
     1520                                $file_description = $tmp; 
     1521                                 
     1522                                $fileContent = $this->get_forwarding_attachment($file_description[0], $file_description[1], $file_description[3],$file_description[4]); 
     1523                                $fileName = $file_description[2]; 
     1524                                 
     1525                                $file_description[5] = strlen($fileContent); //Size of file 
     1526                                $return_forward[] = $file_description; 
     1527                         
     1528                                        $mail->AddStringAttachment($fileContent, $fileName, $file_description[4], $this->get_file_type($file_description[2])); 
     1529                        } 
     1530                } 
     1531                 
     1532                if ((count($return_forward) > 0) && (count($return_files) > 0)) 
     1533                        $return_files = array_merge_recursive($return_forward,$return_files); 
     1534                else 
     1535                        if (count($return_files) < 1) 
     1536                                $return_files = $return_forward; 
     1537         
     1538                //      Build Uploading Attachments!!! 
     1539                if (count($attachments)) 
     1540                        foreach ($attachments as $attach) 
     1541                                $mail->AddAttachment($attach['tmp_name'], $attach['name'], "base64", $this->get_file_type($attach['name']));  // optional name                   
     1542         
     1543         
     1544                 
     1545                if(!empty($mail->AltBody)) 
     1546            $mail->ContentType = "multipart/alternative"; 
     1547 
     1548        $mail->error_count = 0; // reset errors 
     1549        $mail->SetMessageType(); 
     1550        $header = $mail->CreateHeader(); 
     1551        $body = $mail->CreateBody(); 
     1552         
     1553        if ($_SESSION['phpgw_info']['expressomail']['email_server']['imapTLSEncryption'] == 'yes') 
     1554                { 
     1555                        $imap_options = '/tls/novalidate-cert'; 
     1556                } 
     1557                else 
     1558                { 
     1559                        $imap_options = '/notls/novalidate-cert'; 
     1560                } 
     1561                $username = $_SESSION['phpgw_info']['expressomail']['user']['userid']; 
     1562                $password = $_SESSION['phpgw_info']['expressomail']['user']['passwd']; 
     1563                $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 
     1564                $imap_port      = $_SESSION['phpgw_info']['expressomail']['email_server']['imapPort']; 
     1565                $mbox_stream = imap_open("{".$imap_server.":".$imap_port.$imap_options."}".$folder, $username, $password); 
     1566         
     1567                $new_header = str_replace("\n", "\r\n", $header); 
     1568                $new_body = str_replace("\n", "\r\n", $body); 
     1569                 
     1570                $return['append'] = imap_append($mbox_stream, "{".$imap_server.":".$imap_port."}".$folder, $new_header . $new_body, "\\Seen \\Draft"); 
     1571                $status = imap_status($mbox_stream, "{".$this->imap_server.":".$this->imap_port."}".$folder, SA_UIDNEXT); 
     1572                $return['msg_no'] = $status->uidnext - 1; 
     1573                $return['folder_id'] = $folder; 
    14851574                 
    14861575                if($mbox_stream) 
    14871576                        imap_close($mbox_stream); 
    1488                  
     1577                                 
     1578                foreach ($return_files as $index => $_attachment) { 
     1579                        if (array_key_exists("name",$_attachment)){ 
     1580                                unset($return_files[$index]); 
     1581                                $return_files[$index] = $_attachment['name']."_SIZE_".$return_files[$index][1] = $_attachment['size']; 
     1582                        } 
     1583                        else 
     1584                        { 
     1585                                unset($return_files[$index]); 
     1586                                $return_files[$index] = $_attachment[2]."_SIZE_". $return_files[$index][1] = $_attachment[5]; 
     1587                        } 
     1588                } 
     1589                 
     1590                $return['files'] = serialize($return_files); 
     1591                                 
    14891592                if (!$return['append']) 
    14901593                        $return['append'] = imap_last_error(); 
    1491                 else 
    1492                         $return['header'] = $header; 
     1594                 
    14931595                return $return; 
    14941596        } 
     
    19162018        function search_msg($params = ''){ 
    19172019                $retorno = ""; 
     2020                $mbox_stream = ""; 
    19182021                $search = explode(",",$params['condition']); 
    19192022                if($search){ 
    19202023                        $search_criteria = ''; 
    1921                         foreach($search as $tmp){ 
     2024                        foreach($search as $tmp) 
     2025                        { 
    19222026                                $tmp1 = explode("##",$tmp); 
    19232027                                $name_box = $tmp1[0]; 
    19242028                                $criteria = explode("<=>",rawurldecode($tmp1[1]));                               
    19252029                                $criteria[1] = $this->remove_accents($criteria[1]); 
    1926                                 $mbox_stream = $this->open_mbox($name_box); 
     2030                                 
     2031                                if(!is_resource($mbox_stream)) 
     2032                                        $mbox_stream = $this->open_mbox(); 
     2033                                else 
     2034                                        imap_reopen($mbox_stream, "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$name_box); 
    19272035                                 
    19282036                                if($criteria[0] == "ALL ") {                                     
    1929                                         $all_criterias = array ("TO","SUBJECT","FROM","CC");                                                             
    1930                                         foreach($all_criterias as $criteria_fixed){                                              
    1931                                                 $search_criteria = imap_search($mbox_stream,$criteria_fixed." \"".$criteria[1]."\"", SE_UID); 
    1932                                                 if($search_criteria && count($search_criteria) < 50) { 
     2037                                        $all_criterias = array ("TO","SUBJECT","FROM","CC"); 
     2038                                        foreach($all_criterias as $criteria_fixed) 
     2039                                        { 
     2040                                                $filter = $criteria_fixed . ' "' . $criteria[1] . '"'; 
     2041                                                $search_criteria = imap_search($mbox_stream, $filter, SE_UID); 
     2042                                                 
     2043                                                if($search_criteria && count($search_criteria) < 50) 
     2044                                                { 
    19332045                                                        foreach($search_criteria as $new_search){ 
    1934                                                                 $m_token = trim("##".$name_box . "--" . $this->get_msg($new_search,$name_box) . "--".$new_search."##"."\n"); 
    1935                                                                 if(!strstr($retorno,$m_token)) 
     2046                                                                $m_token = trim("##".$name_box . "--" . $this->get_msg($new_search,$name_box,$mbox_stream) . "--".$new_search."##"."\n"); 
     2047                                                                if(!@strstr($retorno,$m_token)) 
    19362048                                                                        $retorno .= $m_token; 
    19372049                                                        } 
     
    19402052                                                        return "many results";                                           
    19412053                                        } 
    1942                                 }                                
     2054                                } 
    19432055                                else { 
    1944                                         $search_criteria = imap_search($mbox_stream,$criteria[0]."\"".$criteria[1]."\"", SE_UID);                                                
     2056                                        $filter = $criteria[0] . '"' . $criteria[1] . '"'; 
     2057                                        $search_criteria = imap_search($mbox_stream, $filter, SE_UID); 
     2058                                                                                         
    19452059                                        if($search_criteria) { 
    19462060                                                foreach($search_criteria as $new_search){ 
    1947                                                         $retorno .= trim("##".$name_box . "--" . $this->get_msg($new_search,$name_box) . "--".$new_search."##"."\n"); 
     2061                                                        $retorno .= trim("##".$name_box . "--" . $this->get_msg($new_search,$name_box,$mbox_stream) . "--".$new_search."##"."\n"); 
    19482062                                                } 
    19492063                                        } 
    19502064                                } 
    1951                                 if($mbox_stream) 
    1952                                         imap_close($mbox_stream);                
    1953                         } 
    1954                 }                
     2065                        } 
     2066                } 
     2067                if($mbox_stream) 
     2068                        imap_close($mbox_stream);                
     2069                                                 
    19552070                return $retorno ? $retorno : "none"; 
    19562071        } 
    19572072         
    1958         function get_msg($uid_msg,$name_box){            
    1959                 $mbox_stream = $this->open_mbox($name_box); 
    1960                 $header = @imap_headerinfo($mbox_stream, imap_msgno($mbox_stream, $uid_msg), 80, 255);           
     2073        function get_msg($uid_msg,$name_box, $mbox_stream ) 
     2074        { 
     2075                $header = @imap_headerinfo($mbox_stream, imap_msgno($mbox_stream, $uid_msg), 80, 255);          
    19612076                $subject = $this->decode_string($header->fetchsubject); 
    19622077                $from = $header->from[0]->mailbox; 
     
    19642079                        $from = $header->from[0]->personal; 
    19652080                $ret_msg = $this->decode_string($from) . "--" . $subject . "--". date("d/m/Y",$header ->udate)."--". $this->size_msg($header->Size); 
    1966                 return $ret_msg;                                         
    1967         } 
    1968  
     2081                return $ret_msg;                     
     2082        }        
     2083         
    19692084        function size_msg($size){ 
    19702085                $var = floor($size/1024); 
  • trunk/expressoMail1_2/inc/class.ldap_functions.inc.php

    r243 r271  
    7676                        if (($field != 'null') && ($ID != 'null')) 
    7777                        { 
    78                                 $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(cn=*$search_for*)(mail=$search_for*)))"; 
     78                                $filter="(& (|(phpgwAccountType=u)(phpgwAccountType=l)) (|(cn=*$search_for*)(mail=$search_for*)) (!(phpgwaccountvisible=-1)) )"; 
    7979                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid"); 
    8080                        } 
    8181                        else 
    8282                        { 
    83                                 $filter="(& (phpgwAccountType=u)(cn=*$search_for*) )"; 
     83                                $filter="(& (phpgwAccountType=u)(cn=*$search_for*) (!(phpgwaccountvisible=-1)) )"; 
    8484                                $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "jpegPhoto", "uid"); 
    8585                        } 
     
    8787                        $sr=ldap_search($this->ds, $this->ldap_context, $filter, $justthese); 
    8888                        $count_entries = ldap_count_entries($this->ds,$sr); 
    89                          
     89 
     90                        // Get user org dn.                      
     91                        $user_dn = $_SESSION['phpgw_info']['expressomail']['user']['account_dn']; 
     92                        $user_sector_dn = ldap_explode_dn ( $user_dn, false ); 
     93                        array_shift($user_sector_dn); 
     94                        array_shift($user_sector_dn); 
     95                        $user_sector_dn = implode(",", $user_sector_dn); 
     96                         
     97                        // New search only on user sector 
    9098                        if ($count_entries > 200) 
    9199                        { 
     
    96104                                $this->ldapRootConnect(true); 
    97105                                 
    98                                 $user_dn = $_SESSION['phpgw_info']['expressomail']['user']['account_dn']; 
    99                                 $user_sector_dn = ldap_explode_dn ( $user_dn, false ); 
    100                                 array_shift($user_sector_dn); 
    101                                 array_shift($user_sector_dn); 
    102                                 $user_sector_dn = implode(",", $user_sector_dn); 
    103                                  
    104                                 // New search only on user sector 
    105106                                $sr=ldap_search($this->ds, $user_sector_dn, $filter, $justthese); 
    106107                                $count_entries = ldap_count_entries($this->ds,$sr); 
     
    117118                                } 
    118119                        } 
     120                         
    119121                        $info = ldap_get_entries($this->ds, $sr); 
    120  
     122                         
    121123                        $tmp = array(); 
     124                        $tmp_users_from_user_org = array(); 
    122125                        for ($i=0; $i<$info["count"]; $i++) 
    123126                        { 
    124                                 if ($info[$i]["phpgwaccountvisible"][0] == '-1') 
    125                                         continue; 
    126                                 $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0]; 
    127                         } 
     127                                // Usuario sempre serao da minha org. 
     128                                if ($quickSearch_only_in_userSector) 
     129                                { 
     130                                        $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0]; 
     131                                } 
     132                                else 
     133                                { 
     134                                        if (preg_match("/$user_sector_dn/i", $info[$i]['dn'])) 
     135                                        { 
     136                                                $tmp_users_from_user_org[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0]; 
     137                                        } 
     138                                        else 
     139                                        { 
     140                                                $tmp[$info[$i]["mail"][0] . '%' . $info[$i]["telephonenumber"][0] . '%'. $info[$i]["mobile"][0] . '%' . $info[$i]["uid"][0] . '%' . $info[$i]["jpegphoto"]['count']] = $info[$i]["cn"][0]; 
     141                                        } 
     142                                } 
     143                        } 
     144                        natcasesort($tmp_users_from_user_org); 
    128145                        natcasesort($tmp); 
    129146                         
    130                         $i = 0; 
    131147                        if (($field != 'null') && ($ID != 'null')) 
    132148                        { 
     149                                $i = 0; 
     150                                 
     151                                $tmp = array_merge($tmp, $tmp_users_from_user_org); 
     152                                natcasesort($tmp); 
     153                                 
    133154                                foreach ($tmp as $info => $cn) 
    134155                                { 
     
    142163                        else 
    143164                        { 
     165                                $options_users_from_user_org = ''; 
    144166                                $options = ''; 
    145                                  
     167 
     168                                /* List of users from user org */ 
     169                                $i = 0; 
     170                                foreach ($tmp_users_from_user_org as $info => $cn) 
     171                                { 
     172                                        $contacts_result[$i] = array(); 
     173                                        $options_users_from_user_org .= $this->make_quicksearch_card($info, $cn); 
     174                                        $i++; 
     175                                } 
     176 
     177                                /* List of users from others org */ 
    146178                                foreach ($tmp as $info => $cn) 
    147179                                { 
    148180                                        $contacts_result[$i] = array(); 
    149                                         $contacts_result[$i]["cn"] = $cn; 
    150                                         list ($contacts_result[$i]["mail"], $contacts_result[$i]["phone"], $contacts_result[$i]["mobile"], $contacts_result[$i]["uid"], $contacts_result[$i]["jpegphoto"]) = split ('%', $info); 
    151                                          
    152                                         if ($contacts_result[$i]['jpegphoto']) 
    153                                                 $photo_link = '<img src="./inc/show_user_photo.php?mail='.$contacts_result[$i]['mail'].'">'; 
    154                                         else 
    155                                                 $photo_link = '<img src="./templates/default/images/photo.png">'; 
    156                                          
    157                                         // '<tr class="quicksearchcontacts_unselected" onClick="javascript:QuickSearchUser.select_cc(this)">' . 
    158                                         $phoneUser = $contacts_result[$i]['phone']; 
    159                                          
    160                                         if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) { 
    161                                                 $phoneUser = '<a title="'.$functions->getLang("Call to Comercial Number").'" href="#" onclick="InfoContact.connectVoip(\''.$phoneUser.'\',\'com\')">'.$phoneUser.'</a>'; 
    162                                                 if($contacts_result[$i]['mobile']){ 
    163                                                 $phoneUser .= ' / <a title="'.$functions->getLang("Call to Mobile Number").'" href="#" onclick="InfoContact.connectVoip(\''.$contacts_result[$i]['mobile'].'\',\'mob\')">'.$contacts_result[$i]['mobile'].'</a>'; 
    164                                                 } 
    165                                         } 
    166                                         $options .= 
    167                                                 '<tr class="quicksearchcontacts_unselected">' . 
    168                                                         '<td class="cc" width="1%">' . 
    169                                                                 '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result[$i]["cn"].'\', \''.$contacts_result[$i]["mail"].'\')">' . 
    170                                                                         $photo_link . 
    171                                                                 '</a>' . 
    172                                                         '</td>' . 
    173                                                         '<td class="cc">' . 
    174                                                                 '<span name="cn">' . $contacts_result[$i]['cn'] . '</span>' . '<br>' . 
    175                                                                 '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result[$i]["cn"].'\', \''.$contacts_result[$i]["mail"].'\')">' . 
    176                                                                         '<font color=blue>' . 
    177                                                                                 '<span name="mail">' . $contacts_result[$i]['mail'] . '</span>' . '<br>' . 
    178                                                                         '</font>' . 
    179                                                                 '</a>' . 
    180                                                                 $phoneUser . 
    181                                                         '</td>' . 
    182                                                 '</tr>'; 
     181                                        $options .= $this->make_quicksearch_card($info, $cn); 
    183182                                        $i++; 
    184183                                } 
    185                                 $contacts_result = $options; 
    186184                                 
    187185                                if ($quickSearch_only_in_userSector) 
    188186                                { 
    189                                         $head_option = 
    190                                                 '<tr class="quicksearchcontacts_unselected">' . 
    191                                                         '<td colspan="2" width="100%" align="center">' . 
    192                                                                 $functions->getLang('More than 200 results were found') . '.<br>' . 
    193                                                                 $functions->getLang('Showing only the results found in your organization') . '.'; 
    194                                                         '</td>' . 
    195                                                 '</tr>'; 
    196                                         $contacts_result = $head_option . $contacts_result; 
     187                                        if ($options != '') 
     188                                        { 
     189                                                $head_option = 
     190                                                        '<tr class="quicksearchcontacts_unselected">' . 
     191                                                                '<td colspan="2" width="100%" align="center">' . 
     192                                                                        $functions->getLang('More than 200 results were found') . '.<br>' . 
     193                                                                        $functions->getLang('Showing only the results found in your organization') . '.'; 
     194                                                                '</td>' . 
     195                                                        '</tr>'; 
     196                                                $contacts_result = $head_option . $options_users_from_user_org . $options; 
     197                                        } 
     198                                        else 
     199                                        { 
     200                                                $return = array(); 
     201                                                $return['status'] = false; 
     202                                                $return['error'] = "many results"; 
     203                                                return $return; 
     204                                        } 
     205                                } 
     206                                else 
     207                                { 
     208                                        if (($options_users_from_user_org != '') && ($options != '')) 
     209                                        { 
     210                                                $head_option0 = 
     211                                                        '<tr class="quicksearchcontacts_unselected">' . 
     212                                                                '<td colspan="2" width="100%" align="center" style="background:#EEEEEE"><B>' . 
     213                                                                        $functions->getLang('Users from your organization') . '.'; 
     214                                                                '</B></td>' . 
     215                                                        '</tr>'; 
     216 
     217                                                $head_option1 = 
     218                                                        '<tr class="quicksearchcontacts_unselected">' . 
     219                                                                '<td colspan="2" width="100%" align="center" style="background:#EEEEEE"><B>' . 
     220                                                                        $functions->getLang('Users from others organizations') . '.'; 
     221                                                                '</B></td>' . 
     222                                                        '</tr>'; 
     223                                        } 
     224                                        $contacts_result = $head_option0 . $options_users_from_user_org . $head_option1 . $options; 
    197225                                } 
    198226                        } 
     
    200228                ldap_close($this->ds); 
    201229                return $contacts_result; 
     230        } 
     231 
     232        function make_quicksearch_card($info, $cn) 
     233        { 
     234                include_once("class.functions.inc.php"); 
     235                $functions = new functions;                                              
     236                 
     237                $contacts_result = array(); 
     238                $contacts_result["cn"] = $cn; 
     239                list ($contacts_result["mail"], $contacts_result["phone"], $contacts_result["mobile"], $contacts_result["uid"], $contacts_result["jpegphoto"]) = split ('%', $info); 
     240                                         
     241                if ($contacts_result['jpegphoto']) 
     242                        $photo_link = '<img src="./inc/show_user_photo.php?mail='.$contacts_result['mail'].'">'; 
     243                else 
     244                        $photo_link = '<img src="./templates/default/images/photo.png">'; 
     245                                         
     246                $phoneUser = $contacts_result['phone']; 
     247                                         
     248                if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['voip_enabled'] && $phoneUser) { 
     249                        $phoneUser = '<a title="'.$functions->getLang("Call to Comercial Number").'" href="#" onclick="InfoContact.connectVoip(\''.$phoneUser.'\',\'com\')">'.$phoneUser.'</a>'; 
     250                        if($contacts_result['mobile']){ 
     251                                $phoneUser .= ' / <a title="'.$functions->getLang("Call to Mobile Number").'" href="#" onclick="InfoContact.connectVoip(\''.$contacts_result['mobile'].'\',\'mob\')">'.$contacts_result['mobile'].'</a>'; 
     252                        } 
     253                } 
     254                $option = 
     255                        '<tr class="quicksearchcontacts_unselected">' . 
     256                                '<td class="cc" width="1%">' . 
     257                                        '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' . 
     258                                                $photo_link . 
     259                                        '</a>' . 
     260                                '</td>' . 
     261                                '<td class="cc">' . 
     262                                        '<span name="cn">' . $contacts_result['cn'] . '</span>' . '<br>' . 
     263                                        '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' . 
     264                                                '<font color=blue>' . 
     265                                                        '<span name="mail">' . $contacts_result['mail'] . '</span>' . '<br>' . 
     266                                                '</font>' . 
     267                                        '</a>' . 
     268                                        $phoneUser . 
     269                                '</td>' . 
     270                        '</tr>'; 
     271                return $option; 
    202272        } 
    203273 
  • trunk/expressoMail1_2/index.php

    r242 r271  
    2828                'nonavbar' => False, 
    2929                'currentapp' => 'expressoMail1_2', 
    30                 'update_version'        => '1.2210', 
     30                'update_version'        => '1.2211', 
    3131                'enable_nextmatchs_class' => True 
    3232        ); 
     
    6666                'line_height'                                           => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['line_height'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['line_height'] : "30", 
    6767                'font_size'                                             => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['font_size'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['font_size'] : "11", 
    68                 'use_shortcuts'                                         => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts'] : "0" 
     68                'use_shortcuts'                                         => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts'] : "0", 
     69                'auto_save_draft'                                       => $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_save_draft'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_save_draft'] : "0" 
    6970                 
    7071        ); 
  • trunk/expressoMail1_2/js/QuickCatalogSearch.js

    r128 r271  
    1111                _this = this; 
    1212 
    13                 var title = get_lang('Select a name') + ':'; 
    1413                var el = document.createElement("DIV"); 
    1514                el.style.visibility = "hidden"; 
     
    2322                el.innerHTML = ""; 
    2423                 
    25                 if (data.quickSearch_only_in_userSector) 
    26                         title += "<font color='BLACK' nowrap> ("+get_lang('Showing only the results found in your organization')+".)</font>" 
    27                  
    28                 el.innerHTML = "&nbsp;&nbsp;<b><font color='BLUE' nowrap>"+title+"</font></b><br>&nbsp;&nbsp;"; 
    29                  
    3024                if (document.getElementById('select_QuickCatalogSearch') == null){ 
     25 
     26                        var title_innerHTML = get_lang('Select a name') + ':'; 
     27                        if (data.quickSearch_only_in_userSector) 
     28                                title_innerHTML += "<font color='BLACK' nowrap> ("+get_lang('Showing only the results found in your organization')+".)</font>" 
     29 
     30                        var title = document.createElement("SPAM"); 
     31                        title.id = 'window_QuickCatalogSearch_title'; 
     32                        title.innerHTML = "&nbsp;&nbsp;<b><font color='BLUE' nowrap>"+title_innerHTML+"</font></b><br>&nbsp;&nbsp;"; 
     33                        el.appendChild(title); 
     34                         
    3135                        var cmb = document.createElement("SELECT"); 
    3236                        cmb.id = "select_QuickCatalogSearch"; 
     
    8387                } 
    8488                else{ 
     89                        var title_innerHTML = get_lang('Select a name') + ':'; 
     90                        if (data.quickSearch_only_in_userSector) 
     91                                title_innerHTML += "<font color='BLACK' nowrap> ("+get_lang('Showing only the results found in your organization')+".)</font>" 
     92 
     93                        var title = Element('window_QuickCatalogSearch_title'); 
     94                        title.innerHTML = "&nbsp;&nbsp;<b><font color='BLUE' nowrap>"+title_innerHTML+"</font></b><br>&nbsp;&nbsp;"; 
     95                         
    8596                        var cmb = document.getElementById('select_QuickCatalogSearch'); 
    8697                        cmb.onkeypress = function (e) 
     
    109120                                } 
    110121                        }; 
    111                          
    112                          
     122 
    113123                        for (i=0; i<cmb.length; i++) 
    114124                                cmb.options[i--] = null; 
  • trunk/expressoMail1_2/js/abas.js

    r245 r271  
    6969        } 
    7070         
    71         /*var span_options = document.getElementById("span_options");    
    72         if (span_options){ 
    73                 span_options.parentNode.removeChild(span_options); 
    74                 var span_options = document.createElement("SPAN");       
    75                 span_options.setAttribute("id","span_options");  
    76         } 
    77                  
    78         if ((span_options) && (ID == 0)){ 
    79                 var span_D = Element("span_D"); 
    80                 span_options.innerHTML =  
    81                 '<span title="'+get_lang("Delete")+'" style="margin-left:8px;" class="message_options" onclick=delete_msgs(\'null\',\'selected\',\'null\')>'+get_lang("Delete")+'</span> | '+ 
    82                 '<span title="'+get_lang("Move")+'" class="message_options" onclick=wfolders.makeWindow(\"\",\"move_to\")>'+get_lang("Move")+'</span> | '+ 
    83                 '<span title="'+get_lang("Print")+'" class="message_options" onclick=print_all()>'+get_lang("Print")+'</span> | '+ 
    84                 '<span title="'+get_lang("Export")+'" class="message_options" onclick="export_all_selected_msgs()">'+get_lang("Export")+'</span>';       
    85                 span_options.setAttribute('style',"font-size:5px;"); 
    86                 span_D.parentNode.insertBefore(span_options,span_D);     
    87         } else 
    88                 if ((span_options) && (ID != 0)){                
    89                         span_options.innerHTML = '<span title="'+get_lang("Delete")+'" style="margin-left:8px" class="message_options" onclick=delete_search_msgs('+content.id+')>'+get_lang("Delete")+'</span> | '+ 
    90                                 '<span title="'+get_lang("Move")+'" class="message_options" onclick=wfolders.makeWindow(\"border_id_'+content.id.substr(11)+'\",\"move_to\")>'+get_lang("Move")+'</span>'; 
    91                 var span_D = Element("span_D");                          
    92                 span_D.parentNode.insertBefore(span_options,span_D);     
    93                 } 
    94         */ 
    9571        return ID; 
    9672} 
     
    10884        } 
    10985        Element("footer_menu").style.display = 'none'; 
    110         var ID = id_value ? id_value : parseInt(BordersArray[(BordersArray.length-1)].sequence) + 1; 
     86         
     87        if (! id_value) // Is new message? 
     88                var ID = parseInt(BordersArray[(BordersArray.length-1)].sequence) + 1; 
     89        else{ 
     90                var ID = id_value; 
     91                if (document.getElementById("border_id_"+id_value+"_r")) // Edit message? if yes treat like new 
     92                                        var id_value = null; 
     93        } 
    11194         
    11295        td = document.createElement("TD"); 
     
    204187        if(!ID) 
    205188                return false; 
     189         
    206190        if (msg_sent == 'false') 
    207191        { 
     
    211195                        try 
    212196                        { 
    213                                 if (body.contentWindow.document.designMode.toLowerCase() == 'on') 
     197                                var save_link = Element("save_message_options"); 
     198                                if ((body.contentWindow.document.designMode.toLowerCase() == 'on') && (save_link.onclick != '')) 
    214199                                { 
    215200                                        var discard_msg = confirm(get_lang("Your message has not been sent. Discard your message?"), ""); 
     
    220205                                        else 
    221206                                        { 
     207                                                if (! newMessageTab.toPreserve[ID]) 
     208                                                        cExecute ("$this.imap_functions.delete_msgs&folder="+newMessageTab.imapBox[ID]+"&msgs_number="+newMessageTab.imapUid[ID],function(data){ return }); 
    222209                                                Element('to_'+ID).focus(); 
    223210                                        } 
     
    229216                } 
    230217        } 
     218 
     219        newMessageTab.toPreserve[ID] = false; 
     220        newMessageTab.imapUid[ID] = 0; 
    231221 
    232222        hold_session = false; 
  • trunk/expressoMail1_2/js/common_functions.js

    r197 r271  
    4545// onUnload edit message 
    4646if(!is_ie) 
    47         window.onbeforeunload = unloadMess; 
     47{ 
     48        var beforeunload = window.onbeforeunload; 
     49        window.onbeforeunload = function() 
     50        { 
     51                if ( typeof beforeunload == 'function' ) 
     52                        beforeunload(); 
     53 
     54                return unloadMess(); 
     55        }; 
     56} 
    4857function unloadMess(){ 
    4958        var mess = get_lang("Your message has not been sent and will be discarted."); 
     
    154163} 
    155164 
    156 function download_attachments(msg_folder, msg_number, idx_file, msg_part, encoding, new_file_name){ 
     165function download_attachments(msg_folder, msg_number, idx_file, msg_part, encoding, new_file_name, show_iframe){ 
    157166        div_attachment = document.getElementById("id_div_attachment"); 
    158167        var params = ''; 
     
    167176        if(encoding) 
    168177                params += "&encoding="+encoding; 
     178 
    169179        div_attachment.innerHTML="<iframe style='display:none;width:0;height:0' name='attachment' src='inc/gotodownload.php?msg_folder="+msg_folder+"&msg_number="+msg_number+"&idx_file="+idx_file+"&msg_part="+msg_part+params+"'></iframe>"; 
    170180} 
     181 
    171182function download_all_attachments(msg_folder, msg_number){ 
    172183        var handler_source = function(data){             
     
    176187} 
    177188// Add Input File Dynamically. 
    178 var countFiles = 0; 
    179189function addFile(id_border){ 
    180190        divFiles = document.getElementById("divFiles_"+id_border); 
    181         countFiles++; 
     191         
     192        if (divFiles.lastChild) 
     193                var countDivFiles = parseInt(divFiles.lastChild.id.split('_')[2]) + 1; 
     194 
     195        if (! countDivFiles) 
     196                var countDivFiles = 1; 
     197         
    182198        divFile = document.createElement('DIV'); 
    183         inputFile = document.createElement("INPUT"); 
     199         
     200        var inputFile = document.createElement("INPUT"); 
    184201         
    185202        var tmp_id_border = document.createAttribute('id_border'); 
    186203        tmp_id_border.value = id_border; 
     204         
    187205        inputFile.setAttributeNode(tmp_id_border); 
    188         inputFile.id = "inputFile_"+id_border+countFiles; 
     206        inputFile.id = "inputFile_"+id_border+"_"+countDivFiles; 
    189207        inputFile.onchange = function () {validateFileExtension(this.value, this.id.replace("input","div"), this.getAttribute('id_border'));}; 
    190208        inputFile.type = 'file'; 
    191209        inputFile.size = 50; 
    192210        inputFile.maxLength = 255; 
    193         inputFile.name='file_'+countFiles; 
     211        inputFile.name='file_'+countDivFiles; 
     212         
    194213        divFile.appendChild(inputFile); 
    195         linkFile = document.createElement("A"); 
    196         linkFile.id = "linkFile_"+id_border+countFiles; 
     214         
     215        var linkFile = document.createElement("A"); 
     216        linkFile.id = "linkFile_"+id_border+"_"+countDivFiles; 
    197217        linkFile.href='javascript:void(0)'; 
    198218        linkFile.onclick=function () {removeFile(this.id.replace("link","div"));}; 
     
    200220        //divFile.innerHTML += "&nbsp;&nbsp;"; 
    201221        divFile.appendChild(linkFile); 
    202         divFile.id = "divFile_"+id_border+countFiles;    
     222        divFile.id = "divFile_"+id_border+"_"+countDivFiles;     
    203223        divFiles.appendChild(divFile); 
    204224} 
    205225//      Remove Input File Dynamically. 
    206226function removeFile(id){ 
     227        var border_id = id.substr(8,1); 
    207228        var el = Element(id); 
    208229        el.parentNode.removeChild(el); 
     
    210231 
    211232function validateFileExtension(fileName, id, id_border){ 
    212         var fileExtension = fileName.split("."); 
     233        var error_flag  = false; 
     234        if (fileName[0] != '/'){ // file name is windows format? 
     235                var file = fileName.substr(fileName.lastIndexOf('\\') + 1, fileName.length); 
     236                if ((fileName.indexOf(':\\') != 1) && (fileName.indexOf('\\\\') != 0)) // Is stored in partition or a network file? 
     237                        error_flag = true;       
     238        } 
     239        else // is nix 
     240                var file = fileName.substr(fileName.lastIndexOf('/') + 1, fileName.length);                                              
     241 
     242        var fileExtension = file.split("."); 
    213243        fileExtension = fileExtension[(fileExtension.length-1)]; 
    214          
    215244        for(var i=0; i<denyFileExtensions.length; i++) 
    216245        { 
    217246                if(denyFileExtensions[i] == fileExtension) 
    218247                { 
    219                         alert(get_lang('File extension forbidden') + '.'); 
    220                         removeFile(id); 
    221                         addFile(id_border); 
    222                 } 
    223         } 
     248                        error_flag = true; 
     249                        break; 
     250                } 
     251                         
     252        } 
     253 
     254        if (error_flag == true){ 
     255                alert(get_lang('File extension forbidden or invalid file') + '.'); 
     256                removeFile(id); 
     257                addFile(id_border); 
     258                return false; 
     259        } 
     260        return true; 
     261         
    224262} 
    225263 
  • trunk/expressoMail1_2/js/connector.js

    r197 r271  
    506506        //      url: 'module.class.method' 
    507507        //      form: form element (for upload files)    
    508         function cExecuteForm(url, form, handler){ 
     508        function cExecuteForm(url, form, handler,id){ 
    509509                connector.buildBar(); 
    510510                isExecuteForm = true;            
     
    526526                } 
    527527 
    528                 if(countFiles) {                         
     528                var divFiles = Element("divFiles_"+id);          
     529                if (divFiles.firstChild) { 
    529530                        el                      = document.createElement('input'); 
    530531                        el.type = 'hidden';      
    531532                        el.name = 'countFiles'; 
    532                         el.value        = countFiles; 
     533                        var countDivFiles = 0; 
     534                        try{ 
     535                                countDivFiles = parseInt(divFiles.lastChild.firstChild.id.split('_')[2]) + 1; // The id of last file  
     536                                } 
     537                        catch (e) { var countDivFiles = 0; }; 
     538                        el.value        = countDivFiles ; 
    533539                        form.appendChild(el);                                            
    534540                }                
  • trunk/expressoMail1_2/js/draw_api.js

    r252 r271  
    871871                var option_edit   = '<span class="message_options" onclick="new_message(\'edit\',\''+ID+'\');">'+get_lang('Edit')+'</span> | '; 
    872872                var option_print = '<span class="message_options" onclick="print_msg(\''+info_msg.msg_folder+'\',\''+info_msg.msg_number+'\',\''+ID+'\');">'+get_lang('Print')+'</span> | '; 
    873                 var option_delete = '<span class="message_options" onclick="delete_msgs(\''+info_msg.msg_folder+'\',\''+info_msg.msg_number+'\',\''+ID+'\');">'+get_lang('Delete')+'</span>'; 
     873                var option_delete = '<span class="message_options" onclick="delete_msgs(\''+info_msg.msg_folder+'\',\''+info_msg.msg_number+'\',\''+ID+'\');">'+get_lang('Delete')+'</span> | ';                 
     874                var option_hide_more = document.createElement("SPAN"); 
     875                option_hide_more.className = 'message_options'; 
     876                options.align = 'right'; 
     877                option_hide_more.value = 'more_options'; 
     878                option_hide_more.id = 'option_hide_more_'+ID; 
     879                option_hide_more.innerHTML = get_lang('Options'); 
     880                option_hide_more.onclick = function(){ 
     881                        var _height = Element("div_message_scroll_"+ID).style.height; 
     882                        _height = parseInt(_height.replace("px","")); 
     883                        var _offset = 35; 
     884                        if (this.value == 'more_options'){ 
     885                                this.innerHTML = "<b><u>"+get_lang('Options')+"</u></b>"; 
     886                                this.value = 'hide_options'; 
     887                                Element("div_message_scroll_"+ID).style.height = (_height - _offset)+"px"; 
     888                                Element('table_message_others_options_'+ID).style.display = ''; 
     889                        } 
     890                        else{ 
     891                                this.innerHTML = get_lang('Options'); 
     892                                this.value = 'more_options'; 
     893                                Element("div_message_scroll_"+ID).style.height = (_height + _offset)+"px"; 
     894                                Element('table_message_others_options_'+ID).style.display = 'none'; 
     895                        } 
     896                }; 
    874897                options.innerHTML = option_edit + option_print + option_delete; 
     898                options.appendChild(option_hide_more); 
    875899                tr.appendChild(td); 
    876900                tr.appendChild(options); 
     
    896920        var td1 = document.createElement("TD"); 
    897921        td1.innerHTML = get_lang("From: "); 
     922        td1.appendChild(deny_email(info_msg.from.email)); 
    898923        td1.width = "7%"; 
    899924         
     
    903928                var td111 = document.createElement("TD"); 
    904929                td111.innerHTML = get_lang("Sent by")+": "; 
     930                td111.appendChild(deny_email(info_msg.sender.email)); 
    905931                td111.setAttribute("noWrap","true"); 
    906932                var sender = document.createElement("TD"); 
     
    911937                sender_values.value = info_msg.sender.full; //Veio do IMAP, sem images nem links. 
    912938                sender.innerHTML += draw_plugin_cc(ID, info_msg.sender.full); 
    913                 sender.appendChild(deny_email(info_msg.sender.email));           
    914939                sender.className = "header_message_field"; 
    915940                tr111.appendChild(td111); 
     
    925950        if (info_msg.Draft != "X"){ 
    926951                from.innerHTML += draw_plugin_cc(ID, info_msg.from); 
    927                 from.appendChild(deny_email(info_msg.from.email)); 
    928952                tbody_message_others_options.appendChild(tr1); 
    929953        } 
     
    11971221} 
    11981222 
    1199 function draw_new_message(){ 
    1200         var ID = create_border(""); 
     1223function draw_new_message(border_ID){ 
     1224        var ID = create_border("",border_ID); 
    12011225        hold_session = true; 
    12021226///////////////////////////////////////////////////////////////////////////////////////////////////////// 
     
    12411265                wfolders.alert = true; 
    12421266        } 
    1243         var option_save                 = '<span class="message_options" onclick=wfolders.makeWindow("'+ID+'","save");>'+get_lang("Save")+'</span> | '; 
     1267//      var option_save_as              = '<span class="message_options" onclick=wfolders.makeWindow("'+ID+'","save");>'+get_lang("Save as")+'</span> | '; 
     1268        var option_save                 = '<span id="save_message_options" class="message_options" onclick="newMessageTab.toPreserve['+ID+'] = true; save_msg('+ID+');">'+get_lang("Save")+'</span> | '; 
    12441269        var option_search               = '<span class="message_options" onclick=openListUsers("'+ID+'");>'+get_lang("Search")+'</span>'; 
    12451270        td_menu_new_message.innerHTML = option_send + option_send_and_file + option_save + option_search; 
     
    20462071                dn_em.setAttribute("title",get_lang("Block Sender")); 
    20472072                dn_em.style.cursor = "pointer";          
    2048                 dn_em.innerHTML = "<img onclick=filter.new_rule('"+email+"') src='./templates/default/images/deny.gif'>"; 
     2073                dn_em.innerHTML = "<img align='top' onclick=filter.new_rule('"+email+"') src='./templates/default/images/deny.gif'>"; 
    20492074        return dn_em; 
    20502075         
  • trunk/expressoMail1_2/js/filter.js

    r246 r271  
    370370                                _this.out_officeF = false; 
    371371                                //Save outoffice in prefs: 
    372                                 if(!prefe) 
    373                                         connector.loadScript("preferences"); 
     372                                connector.loadScript("preferences"); 
    374373                                prefe.save("outoffice", _this.out_officeF); 
    375374                        } 
     
    530529                                _this.out_officeF = (aux[4].replace("\n","") == "off") ? false : true; 
    531530                                //Save outoffice in prefs: 
    532                                 if(!prefe) 
    533                                         connector.loadScript("preferences"); 
     531                                connector.loadScript("preferences"); 
    534532                                prefe.save("outoffice", _this.out_officeF); 
    535533                } 
  • trunk/expressoMail1_2/js/main.js

    r245 r271  
    11// Tempo do auto refresh (em milisegundos) 
    22var time_refresh = 300000; 
     3var autosave_time = 60000; 
     4 
    35function init(){ 
    46        if (!is_ie) 
     
    3840        setTimeout('auto_refresh()', time_refresh); 
    3941} 
     42 
     43var away = false; 
     44var away_timer; 
     45function setAway () 
     46{ 
     47        away_timer = setTimeout("setAway()", 5000); 
     48        away=true; 
     49} 
     50 
     51function auto_save_msg(border_id) 
     52{ 
     53        if (document.getElementById('border_id_'+border_id)) 
     54        {        
     55                var      keypress_handler = function stop_counting () 
     56                { 
     57                        clearTimeout(away_timer); 
     58                        away=false; 
     59                        away_timer = setTimeout('setAway()',5000); 
     60                }; 
     61                 
     62                var obj = document.getElementById('body_'+border_id).contentWindow.document; 
     63                if ( obj.addEventListener ) 
     64                                obj.addEventListener('keypress', keypress_handler, false); 
     65                else if ( obj.attachEvent ) 
     66                        obj.attachEvent('onkeypress', keypress_handler); 
     67 
     68                if (away) 
     69                        { 
     70                                var save_link = Element("save_message_options"); 
     71                                if (save_link.onclick !=  '') 
     72                                        save_msg(border_id); 
     73                                else 
     74                                        setTimeout('auto_save_msg('+border_id+')',autosave_time); 
     75                        } 
     76                        else 
     77                                setTimeout('auto_save_msg('+border_id+')',3000); 
     78        } 
     79} 
     80 
     81function watch_changes_in_msg(border_id) 
     82{ 
     83        if (document.getElementById('border_id_'+border_id)) 
     84        {        
     85                function keypress_handler () 
     86                { 
     87                        away=false; 
     88                        var save_link = Element("save_message_options"); 
     89                        save_link.onclick = function onclick(event) { newMessageTab.toPreserve[border_id] = true; save_msg(border_id); } ; 
     90                        save_link.style.color = '#0000ff'; 
     91                }; 
     92                 
     93                var obj = document.getElementById('body_'+border_id).contentWindow.document; 
     94                if ( obj.addEventListener ) 
     95                                obj.addEventListener('keypress', keypress_handler, false); 
     96                else if ( obj.attachEvent ) 
     97                        obj.attachEvent('onkeypress', keypress_handler); 
     98                         
     99                var subject_obj = document.getElementById('subject_'+border_id); 
     100                if ( subject_obj.addEventListener ) 
     101                                subject_obj.addEventListener('keypress', keypress_handler, false); 
     102                else if ( subject_obj.attachEvent ) 
     103                        subject_obj.attachEvent('onkeypress', keypress_handler); 
     104                         
     105                var to_obj = document.getElementById('to_'+border_id); 
     106                if ( to_obj.addEventListener ) 
     107                                to_obj.addEventListener('keypress', keypress_handler, false); 
     108                else if ( to_obj.attachEvent ) 
     109                        to_obj.attachEvent('onkeypress', keypress_handler); 
     110                 
     111        } 
     112} 
     113 
     114 
    40115 
    41116function show_msg(msg_info){ 
     
    105180                        var box = Element("tbody_box"); 
    106181                        table_element.appendChild(box); 
    107                         var len = data.length; 
    108                         for (var i=0; i<len; i++){ 
     182                        for (var i=0; i<data.length; i++){ 
    109183                                var new_msg = this.make_tr_message(data[i], current_folder); 
    110184                                _dragArea.makeDragged(new_msg, data[i].msg_number, data[i].subject, true); 
    111185                                eval(data[i].command); 
    112186                        } 
     187                         
     188                        for (var i=0; i<data.msgs_to_delete.length; i++){ 
     189                                var remove_msg = document.getElementById(data.msgs_to_delete[i]); 
     190                                if (remove_msg) 
     191                                        remove_msg.parentNode.removeChild(remove_msg); 
     192                        } 
    113193                        if(parseInt(alert_new_msg) && data.new_msgs > 0) 
    114194                                alert(get_lang("You have %1 new", data['new_msgs'])+" "+(data['new_msgs'] > 1 ? get_lang("messages") : get_lang("message")) +"!"); 
    115195                        if(data.new_msgs > 0){ 
    116                         Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + parseInt(data.new_msgs); 
     196                        Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) + parseInt(data.new_msgs); //refresh tab title 
    117197                        update_quota(); 
    118198                        } 
     
    368448 
    369449function new_message(type, border_ID){ 
    370         var new_border_ID = draw_new_message();  
     450 
     451        var new_border_ID = draw_new_message(parseInt(border_ID)); 
     452        if (preferences.auto_save_draft == 1) 
     453                setTimeout('auto_save_msg('+new_border_ID+')', autosave_time);           
     454         
    371455        // Salva a pasta da mensagem respondida ou encaminhada: 
    372456        var folder_message = Element("input_folder_"+border_ID); 
     
    596680                        break; 
    597681                case "edit": 
     682                        newMessageTab.imapBox[new_border_ID] = folder_message.value 
     683                        newMessageTab.imapUid[new_border_ID] = parseInt(border_ID.substr(0,border_ID.indexOf("_"))); 
     684                        document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject; 
    598685                        data.to = Element("to_values_" + border_ID).value; 
    599686                        data.to = data.to.replace(/&lt;/gi,"<"); 
     
    610697                        Element("subject_" + new_border_ID).value = data.subject; 
    611698                         
     699                        var divFiles = Element("divFiles_"+new_border_ID); 
     700                        if (Element("attachments_" + border_ID)){ 
     701                                var attachments = document.getElementById("attachments_" + border_ID).childNodes; 
     702                                for (var i = (attachments.length > 1 ? 1 : 0); i < attachments.length; i++){ 
     703                                        var link_attachment = document.createElement("A"); 
     704                                        link_attachment.setAttribute("href", attachments[i].href); 
     705                                        link_attachment.innerHTML = attachments[i].innerHTML; 
     706                                        var tmp = link_attachment.href.replace("javascript:download_attachments(", "").replace(")", ""); 
     707                                        var a_tmp = tmp.split(','); 
     708                                        tmp = link_attachment.innerHTML.substring(0,link_attachment.innerHTML.lastIndexOf("(")); 
     709                                        a_tmp[2] = "'"+tmp.substring(0,tmp.length-1)+"'"; 
     710                                        s_tmp = escape(connector.serialize(a_tmp)); 
     711                                        divFiles.innerHTML += "<input style='border:0' type='CHECKBOX' name='forwarding_attachments[]' checked value=\""+s_tmp+"\"/>"; 
     712                                        divFiles.appendChild(link_attachment); 
     713                                } 
     714                        } 
    612715                        var body = Element("body_" + new_border_ID); 
    613716                        body.contentWindow.document.open(); 
     
    682785                        set_message_flag(msg_number_forwarded.value, 'forwarded'); 
    683786                } 
    684                  
    685787                delete_border(ID,'true'); 
    686788                if(wfolders.alert){ 
     
    699801                        write_msg(data); 
    700802        } 
     803        if ((! newMessageTab.toPreserve[ID]) && (newMessageTab.imapUid[ID] != 0)) 
     804                cExecute ("$this.imap_functions.delete_msgs&folder="+newMessageTab.imapBox[ID]+"&msgs_number="+newMessageTab.imapUid[ID],function(data){ return }); 
    701805} 
    702806 
    703807function send_message(ID, folder, folder_name){ 
     808        var save_link = Element("save_message_options"); 
     809        save_link.onclick = ''; 
     810        save_link.style.color = '#999'; 
     811         
    704812        ID_tmp = ID; 
    705          
     813 
    706814        var handler_send_message = function(data){ 
    707                 send_message_return(data, this.ID_tmp); 
    708         } 
    709  
     815                send_message_return(data, this.ID_tmp); // this is a hack to escape quotation form connector bug 
     816        }; 
     817                 
    710818        var textArea = document.createElement("TEXTAREA"); 
    711819        textArea.style.display='none'; 
     
    719827        input_folder.name = "folder"; 
    720828        input_folder.value = folder; 
     829        var msg_id = document.createElement("INPUT"); 
     830        msg_id.style.display='none'; 
     831        msg_id.name = "msg_id"; 
     832        msg_id.value = newMessageTab.imapUid[ID]; 
    721833         
    722834        if (is_ie){ 
     
    730842        form.appendChild(textArea); 
    731843        form.appendChild(input_folder); 
     844        form.appendChild(msg_id); 
    732845 
    733846        var _subject = trim(Element("subject_"+ID).value); 
     
    736849                return; 
    737850        } 
    738  
    739         cExecuteForm ("$this.imap_functions.send_mail", form, handler_send_message); 
    740 } 
    741  
    742 function save_msg(border_id, folder_id, folder_name){ 
    743         var handler_save_msg = function(data){ 
    744                 if(!verify_session(data)) 
    745                         return; 
    746                 if (data.append){ 
    747                         write_msg(get_lang('Your message was save as draft in folder %1.', data.folder_name)); 
    748                         delete_border(data.border_id,'true'); 
    749                 } 
    750                 else 
    751                         write_msg('ERRO saving your message.'); 
    752         } 
    753          
    754         var msg_data = new Array(); 
    755         if (document.getElementById("to_" + border_id)) 
    756                 msg_data.to = Element("to_" + border_id).value; 
    757          
    758         if (document.getElementById("cc_" + border_id)) 
    759                 msg_data.cc = Element("cc_" + border_id).value; 
    760          
    761         if (document.getElementById("cco_" + border_id))         
    762                 msg_data.cco = Element("cco_" + border_id).value;        
    763          
    764         if (document.getElementById("subject_" + border_id))     
    765                 msg_data.subject = Element("subject_" + border_id).value; 
    766          
    767         if (document.getElementById("body_" + border_id))                
    768                 msg_data.body = Element("body_" + border_id).contentWindow.document.body.innerHTML; 
    769                  
    770         var args   = "$this.imap_functions.save_msg";    
    771         var body = msg_data.body.replace(/&nbspl/g, "%nbsp;"); 
    772         body = url_encode(msg_data.body); 
    773         msg_data.subject = url_encode(msg_data.subject); 
    774         var params = "folder_id="+folder_id+"&folder_name="+folder_name+"&border_id="+border_id+"&to="+msg_data.to+"&cc="+msg_data.cc+"&cco="+msg_data.cco+"&subject="+msg_data.subject+"&body="+body; 
    775         cExecute( args, handler_save_msg, params); 
    776 } 
     851         
     852        cExecuteForm ("$this.imap_functions.send_mail", form, handler_send_message, ID); 
     853} 
     854 
     855function return_save(data,border_id,folder_name,folder_id,message_id) 
     856{ 
     857        var handler_delete_msg = function(data){ refresh(preferences.alert_new_msg); }; 
     858        RichTextEditor.saveFlag = 1; 
     859 
     860        if (! data) 
     861                write_msg('ERROR saving your message.'); 
     862        else 
     863        { 
     864                newMessageTab.imapUid[border_id] = data.msg_no; 
     865                newMessageTab.imapBox[border_id] = data.folder_id; 
     866                 
     867                var newTitle = document.getElementById('subject_'+border_id).value; 
     868                if (newTitle.length > 18) 
     869                        newTitle = newTitle.substr(18) + '...'; 
     870                else if (newTitle == '') 
     871                                newTitle = get_lang("No subject"); 
     872                document.getElementById('font_border_id_'+border_id).innerHTML = newTitle; 
     873                 
     874                // Replace the embedded images for new uids 
     875                var mainField = document.getElementById('body_'+border_id).contentWindow; 
     876                var content_body =  mainField.document.getElementsByTagName('body').item(0).innerHTML; 
     877                var body_images = content_body.match(/msg_num=\d*/g); 
     878                if (body_images) 
     879                { 
     880                        for (var i=0; i<body_images.length; i++){ 
     881                                content_body =  content_body.replace(body_images[i],"msg_num="+newMessageTab.imapUid[border_id]); 
     882                        } 
     883                        mainField.document.getElementsByTagName('body').item(0).innerHTML = content_body; 
     884                        // This is not just stupid, it refresh screen to avoid broken images 
     885                        mainField.document.getElementsByTagName('body').item(0).innerHTML = mainField.document.getElementsByTagName('body').item(0).innerHTML;   
     886                }        
     887                                 
     888                //Replace all files to new files 
     889                var divFiles = Element("divFiles_"+border_id); 
     890                var divParent = divFiles.parentNode; 
     891                divParent.removeChild(divFiles); 
     892                divFiles = document.createElement('DIV'); 
     893                divFiles.id = "divFiles_"+border_id; 
     894                divParent.appendChild(divFiles); 
     895                 
     896                var attach_files = connector.unserialize(data.files); 
     897                if (attach_files != null) { 
     898                        newMessageTab.countFile[border_id] = attach_files.length; 
     899                for (att_index = 0; att_index < attach_files.length; att_index++){ 
     900         
     901                        var link_attachment = document.createElement("A"); 
     902                        var fileName = attach_files[att_index].substr(0,attach_files[att_index].indexOf('_SIZE_')); 
     903                        var fileSize = parseInt(attach_files[att_index].substr(attach_files[att_index].indexOf('_SIZE_')+6))/1024 
     904                        link_attachment.innerHTML = fileName + " ("+parseInt(fileSize)+" kb)"; 
     905 
     906                        var href = "'"+folder_id+"','"+data.msg_no+"','"+(att_index)+"','"+(att_index+2)+"','base64'"; 
     907 
     908                        link_attachment.setAttribute("href", "javascript:download_attachments("+href+")"); 
     909 
     910                        var a_tmp = href.split(','); 
     911                        a_tmp[2] = fileName; 
     912                        s_tmp = escape(connector.serialize(a_tmp)); 
     913                                         
     914                        var check_attachment = document.createElement("INPUT"); 
     915                        check_attachment.type = 'CHECKBOX'; 
     916                        check_attachment.name = 'forwarding_attachments[]'; 
     917                        check_attachment.value = s_tmp; 
     918 
     919                        divFiles.appendChild(check_attachment); 
     920                        divFiles.appendChild(link_attachment); 
     921                        divFiles.appendChild(document.createElement("BR")); 
     922 
     923                        check_attachment.checked = true; 
     924                } 
     925        } 
     926                if (message_id) 
     927                        cExecute ("$this.imap_functions.delete_msgs&folder="+newMessageTab.imapBox[border_id]+"&msgs_number="+message_id,handler_delete_msg); 
     928                 
     929                if (preferences.auto_save_draft == 1) 
     930                                setTimeout('auto_save_msg('+border_id+')', autosave_time);               
     931 
     932                var save_link = Element("save_message_options"); 
     933                save_link.onclick = ''; 
     934                save_link.style.color = '#999'; 
     935                watch_changes_in_msg(border_id); 
     936                 
     937                write_msg(get_lang('Your message was save as draft in folder %1.', folder_name)); 
     938        }                
     939} 
     940 
     941function save_msg(border_id){ 
     942        if (newMessageTab.imapBox[border_id]) //Gets the imap folder 
     943                var folder_id = newMessageTab.imapBox[border_id]; 
     944        else 
     945                var     folder_id = "INBOX/"+draftsfolder; 
     946 
     947        if (folder_id == 'INBOX') // and folder name from border 
     948                var folder_name = get_lang(folder_id); 
     949        else 
     950                var folder_name = folder_id.substr(6); 
     951                 
     952        // hack to avoid form connector bug,  escapes quotation. Please see #179 
     953        tmp_border_id=border_id; 
     954        tmp_folder_name=folder_name; 
     955        tmp_folder_id=folder_id; 
     956        message_id = newMessageTab.imapUid[border_id]; 
     957        var handler_save_msg = function(data){ return_save(data,this.tmp_border_id,this.tmp_folder_name,this.tmp_folder_id,this.message_id); } 
     958         
     959        var textArea = document.createElement("TEXTAREA"); 
     960        textArea.style.display='none'; 
     961        textArea.name = "body"; 
     962        body = document.getElementById("body_"+border_id); 
     963        textArea.value += '<body>\r\n'; 
     964        textArea.value += body.contentWindow.document.body.innerHTML; 
     965        textArea.value += '\r\n</body>'; 
     966        var input_folder = document.createElement("INPUT"); 
     967        input_folder.style.display='none'; 
     968        input_folder.name = "folder"; 
     969        input_folder.value = folder_id; 
     970         
     971        if (is_ie){ 
     972                var i = 0; 
     973                while (document.forms(i).name != "form_message_"+border_id){i++} 
     974                form = document.forms(i); 
     975        } 
     976        else 
     977                form = document.forms["form_message_"+border_id]; 
     978        form.appendChild(textArea); 
     979        form.appendChild(input_folder); 
     980 
     981        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id);        
     982} 
     983 
     984function return_saveas(data,border_id,folder_name) 
     985{ 
     986        if(!verify_session(data)) 
     987                return; 
     988        if (data.append) 
     989        { 
     990                delete_border(border_id,null); 
     991                write_msg(get_lang('Your message was save as draft in folder %1.', folder_name)); 
     992        } 
     993        else 
     994                write_msg('ERROR saving your message.');                                         
     995} 
     996 
     997 
     998function save_as_msg(border_id, folder_id, folder_name){ 
     999        // hack to avoid form connector bug,  escapes quotation. Please see #179 
     1000        tmp_border_id=border_id; 
     1001        tmp_folder_name=folder_name; 
     1002        var handler_save_msg = function(data){ return_saveas(data,this.tmp_border_id,this.tmp_folder_name); }    
     1003        var textArea = document.createElement("TEXTAREA"); 
     1004        textArea.style.display='none'; 
     1005        textArea.name = "body"; 
     1006        body = document.getElementById("body_"+border_id); 
     1007        textArea.value += '<body>\r\n'; 
     1008        textArea.value += body.contentWindow.document.body.innerHTML; 
     1009        textArea.value += '\r\n</body>'; 
     1010         
     1011        var input_folder = document.createElement("INPUT"); 
     1012        input_folder.style.display='none'; 
     1013        input_folder.name = "folder"; 
     1014        input_folder.value = folder_id; 
     1015         
     1016        if (is_ie){ 
     1017                var i = 0; 
     1018                while (document.forms(i).name != "form_message_"+border_id){i++} 
     1019                form = document.forms(i); 
     1020        } 
     1021        else 
     1022                form = document.forms["form_message_"+border_id]; 
     1023        form.appendChild(textArea); 
     1024        form.appendChild(input_folder); 
     1025         
     1026        cExecuteForm ("$this.imap_functions.save_msg", form, handler_save_msg,border_id); 
     1027} 
     1028 
    7771029 
    7781030// Get checked messages 
  • trunk/expressoMail1_2/js/preferences.js

    r244 r271  
    7373                                "<option value='15'>"+get_lang("Big")+"</option>"+ 
    7474                                "</select></td></tr>"+ 
     75                                "<tr><td> - " + get_lang("Auto save draft") + "?</td>"+ 
     76                                "<td><input type='checkBox' id='auto_save_draft' name='auto_save_draft'></td></tr>"+ 
    7577                                "<tr><td> - " + get_lang("Use shortcuts?") + "</td>"+ 
    7678                                "<td><input type='checkBox' id='use_shortcuts' name='use_shortcuts'></td></tr>"+ 
     
    131133                        txt_signature.value = preferences.signature; 
    132134                 
    133                 if( preferences.use_shortcuts == 1){Element("use_shortcuts").checked = true;} 
     135                if( preferences.use_shortcuts == 1) Element("use_shortcuts").checked = true; 
     136                if( preferences.auto_save_draft == 1) Element("auto_save_draft").checked = true; 
    134137        } 
    135138         
     
    152155                        reload_page = true; 
    153156            else if(preferences.use_shortcuts != Element("use_shortcuts").checked) 
     157                        reload_page = true; 
     158            else if(preferences.auto_save_draft != Element("auto_save_draft").checked) 
    154159                        reload_page = true; 
    155160                                 
     
    166171                preferences.signature = Element("txt_signature").value; 
    167172                preferences.use_shortcuts = Element("use_shortcuts").checked ? 1 : 0; 
     173                preferences.auto_save_draft = Element("auto_save_draft").checked ? 1 : 0; 
     174                 
    168175                var _this = this; 
    169176                 
     
    217224                 
    218225                if(! this.prefeW[div.id]) { 
    219                         div.style.height = is_ie ? "355px" : "365px"; 
     226                        div.style.height = is_ie ? "385px" : "370px"; 
    220227                        div.style.width = "510px"; 
    221228                        div.style.visibility = "hidden"; 
  • trunk/expressoMail1_2/js/rich_text_editor.js

    r163 r271  
     1var newMessageTab = { 
     2                'imapUid' : [], // Stores the imap email number of current tab 
     3                'countFile' : [0,0,0,0,0,0,0,0,0,0], // Stores the number of files attached in current tab 
     4                'imapBox' : [], // Stores the folder name 
     5                'toPreserve' : [] // Check if the message should be removed from draft after send 
     6                }; 
     7                 
     8var defaultDraftFolder = ''; 
     9 
    110function cRichTextEditor(){ 
     11        this.emwindow   = new Array; 
    212        this.editor; 
    313        this.table; 
    414        this.id; 
    515        this.buildEditor(); 
     16        this.saveFlag = 0; 
    617} 
    718 
     
    151162         
    152163        var buttons = ['bold', 'italic', 'underline', 'forecolor', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 
    153                                    'undo', 'redo', 'insertorderedlist', 'insertunorderedlist', 'outdent', 'indent', 'link', 'signature']; 
     164                                   'undo', 'redo', 'insertorderedlist', 'insertunorderedlist', 'outdent', 'indent', 'link', 'signature', 'image', 'table']; 
    154165 
    155166        for (var i=0; i<buttons.length; i++){ 
     
    166177                else if (buttons[i] == 'link') 
    167178                        img.onclick = function () {RichTextEditor.createLink();}; 
     179                else if (buttons[i] == 'image') 
     180                        img.onclick = function () {RichTextEditor.createImage();}; 
     181                else if (buttons[i] == 'table') 
     182                        img.onclick = function () {RichTextEditor.createTable();}; 
    168183                else 
    169184                        img.onclick = function () {RichTextEditor.editorCommand(this.id,'');}; 
     
    181196 
    182197cRichTextEditor.prototype.editorCommand = function(command, option) { 
    183         var mainField = document.getElementById(this.editor).contentWindow; 
    184198        try { 
     199                var mainField = document.getElementById(this.editor).contentWindow; 
    185200                mainField.focus(); 
    186201                if (command == 'signature'){ 
     
    198213                        } 
    199214                } 
    200                 else 
    201                         mainField.document.execCommand(command, false, option); 
     215                else if (command == 'CreateLink') 
     216                        mainField.document.execCommand('CreateLink', false, option); 
     217                else if (command == 'Table'){ 
     218                        if (is_ie){ 
     219                                var sel = document.selection; 
     220                                if (sel!=null) 
     221                                { 
     222                                    var rng = sel.createRange(); 
     223                                    if (rng!=null) 
     224                                rng.pasteHTML(option); 
     225                                } 
     226                        } 
     227                        else  
     228                                mainField.document.execCommand('inserthtml', false, option); 
     229                        } 
     230                else // command == Image 
     231                        mainField.document.execCommand('InsertImage', false, option); 
    202232                //mainField.focus(); 
    203     } catch (e) {} 
     233    } catch (e) { alert(e.description); } 
    204234} 
    205235 
     
    222252                this.editorCommand("CreateLink", szURL); 
    223253        } 
     254} 
     255 
     256// It include the image file in emails body 
     257// It saves and attach in drafts folder and open it 
     258cRichTextEditor.prototype.addInputFile = function() 
     259{ 
     260        var id = this.editor.substr(5); // border_id 
     261        divFiles = document.getElementById("divFiles_"+id); 
     262        var countDivFiles = divFiles.childNodes.length + 1; 
     263 
     264        var inputFile = document.getElementById('inputFile_img'); 
     265        var divFiles = document.getElementById('divFiles_'+id); 
     266        inputFile.id = 'inputFile_'+id +"_"+countDivFiles; 
     267        inputFile.name = 'file_'+countDivFiles; 
     268        divFile = document.createElement('DIV'); 
     269        divFile.appendChild(inputFile); 
     270        divFiles.appendChild(divFile); 
     271 
     272        var form_upload = document.getElementById('form_upload'); 
     273        form_upload.parentNode.removeChild(form_upload); 
     274        win.close(); 
     275         
     276        if (! validateFileExtension(inputFile.value, inputFile.id , id)) 
     277        return false; 
     278 
     279        RichTextEditor.saveFlag = 0; // See if save function finished 
     280        save_msg(id); 
     281        setTimeout("RichTextEditor.insertImgHtml("+id+")",1000); 
     282} 
     283 
     284cRichTextEditor.prototype.insertImgHtml = function (id){ 
     285        if (RichTextEditor.saveFlag == 0) 
     286                setTimeout("RichTextEditor.insertImgHtml("+id+")",500); 
     287        else 
     288                        this.editorCommand('Image', './inc/show_embedded_attach.php?msg_folder=INBOX/'+draftsfolder+'&msg_num='+newMessageTab.imapUid[id]+'&msg_part='+(newMessageTab.countFile[id]+1)); 
     289                        // this.editorCommand('Image', '.inc/gotodownload.php?msg_folder="+msg_folder+"&msg_number="+msg_number+"&idx_file="+idx_file+"&msg_part="+msg_part+params')); 
     290} 
     291 
     292cRichTextEditor.prototype.insertTableHtml = function (){ 
     293        var id = this.editor.substr(5); // border_id 
     294        var     rows = document.getElementById('rows').selectedIndex; 
     295        var     cols = document.getElementById('cols').selectedIndex; 
     296        var insertTable = '<table border="1px"><tbody>'; 
     297        for (var i = 0; i <= rows; i++){ 
     298                insertTable += "<tr>";   
     299                for (var j = 0; j <= cols; j++) 
     300                        insertTable += "<td>&nbsp;</td>";        
     301                insertTable += "</tr>"; 
     302        } 
     303        insertTable += "</tbody></table>"; 
     304        this.editorCommand('Table', insertTable); 
     305} 
     306 
     307cRichTextEditor.prototype.createTable = function(){ 
     308        var form = document.getElementById("table_window"); 
     309        if (form == null){ 
     310                form = document.createElement("DIV"); 
     311                form.id  = "table_window"; 
     312                form.style.visibility = "hidden"; 
     313                form.style.position = "absolute"; 
     314                form.style.background = "#eeeeee"; 
     315                form.style.left = "0px"; 
     316                form.style.top  = "0px";  
     317                form.style.width = "0px"; 
     318                form.style.height = "0px"; 
     319                document.body.appendChild(form); 
     320        } 
     321                 
     322                var form_table = document.createElement("DIV"); 
     323                form_table.id = "form_table"; 
     324                form_table.style.position = "absolute"; 
     325                form_table.style.top = "5px"; 
     326                form_table.style.left = "5px"; 
     327                form_table.style.width = "170px"; 
     328                form_table.style.height = "120px"; 
     329                form_table.name = get_lang("Insert Table"); 
     330                form_table.innerHTML = get_lang('Select the table size')+':<br><br>'+ 
     331                                                                get_lang('Rows')+':&nbsp;&nbsp;&nbsp;'+ get_lang('Cols')+':<br>'+ 
     332                                                                        '<select name="rows" id="rows"><option value="1">1</option>'+ 
     333                                                                        '<option value="2">2</option>'+ 
     334                                                                        '<option value="3">3</option>'+ 
     335                                                                        '<option value="4">4</option>'+ 
     336                                                                        '<option value="5">5</option>'+ 
     337                                                                        '<option value="6">6</option>'+ 
     338                                                                        '<option value="7">7</option>'+ 
     339                                                                        '<option value="8">8</option>'+ 
     340                                                                        '<option value="9">9</option></select>&nbsp;&nbsp;&nbsp;'+ 
     341                                                                        '<select name="cols" id="cols"><option value="1">1</option>'+ 
     342                                                                        '<option value="2">2</option>'+ 
     343                                                                        '<option value="3">3</option>'+ 
     344                                                                        '<option value="4">4</option>'+ 
     345                                                                        '<option value="5">5</option>'+ 
     346                                                                        '<option value="6">6</option>'+ 
     347                                                                        '<option value="7">7</option>'+ 
     348                                                                        '<option value="8">8</option>'+ 
     349                                                                        '<option value="9">9</option></select><br><br>'+ 
     350                                                                '<input title="Close"  value="' + get_lang('Close') + '" type="button" onclick="win.close()">&nbsp;'+ 
     351                                                                '<input title="Include"  value="' + get_lang('Include') + '" type="button" onclick="RichTextEditor.insertTableHtml();win.close();">'; 
     352                form.appendChild(form_table); 
     353                 
     354                this.showWindow(form); 
     355                } 
     356 
     357cRichTextEditor.prototype.createImage = function(){ 
     358        var form = document.getElementById("attachment_window"); 
     359        if (form == null){ 
     360                form = document.createElement("DIV"); 
     361                form.id  = "attachment_window"; 
     362                form.style.visibility = "hidden"; 
     363                form.style.position = "absolute"; 
     364                form.style.background = "#eeeeee"; 
     365                form.style.left = "0px"; 
     366                form.style.top  = "0px";  
     367                form.style.width = "0px"; 
     368                form.style.height = "0px"; 
     369                document.body.appendChild(form); 
     370        } 
     371                 
     372                var form_upload = document.createElement("DIV"); 
     373                form_upload.id = "form_upload"; 
     374                form_upload.style.position = "absolute"; 
     375                form_upload.style.top = "5px"; 
     376                form_upload.style.left = "5px"; 
     377                form_upload.name = get_lang("Upload File"); 
     378                form_upload.style.width = "450px"; 
     379                form_upload.style.height = "75px"; 
     380                form_upload.innerHTML = get_lang('Select the desired image file')+':<br>'+ 
     381                                                                '<input name="image_at" maxlength="255" size="50" id="inputFile_img" type="file"><br>' + 
     382                                                                '<input title="Include"  value="' + get_lang('Include') + '"' + 'type="button" onclick="RichTextEditor.addInputFile();">&nbsp;' + 
     383                                                                '<input title="Close"  value="' + get_lang('Close') + '"' + 
     384                                                                ' type="button" onclick="win.close()">'; 
     385                form.appendChild(form_upload); 
     386                 
     387                this.showWindow(form); 
     388} 
     389cRichTextEditor.prototype.showWindow = function (div){ 
     390 
     391                if(! div) { 
     392                        return; 
     393                } 
     394                 
     395                if(! this.emwindow[div.id]) { 
     396                        div.style.width  =  div.firstChild.style.width; 
     397                        div.style.height = div.firstChild.style.height; 
     398                        div.style.zIndex = "10000";                      
     399                        var title = div.firstChild.name; 
     400                        var wHeight = div.offsetHeight + "px"; 
     401                        var wWidth =  div.offsetWidth   + "px"; 
     402                        div.style.width = div.offsetWidth - 5; 
     403 
     404                        win = new dJSWin({ 
     405                                id: 'win_'+div.id, 
     406                                content_id: div.id, 
     407                                width: wWidth, 
     408                                height: wHeight, 
     409                                title_color: '#3978d6', 
     410                                bg_color: '#eee', 
     411                                title: title, 
     412                                title_text_color: 'white', 
     413                                button_x_img: '../phpgwapi/images/winclose.gif', 
     414                                border: true }); 
     415                         
     416                        this.emwindow[div.id] = win; 
     417                        win.draw(); 
     418                } 
     419                else 
     420                        win = this.emwindow[div.id]; 
     421                win.open();      
    224422} 
    225423 
  • trunk/expressoMail1_2/js/search.js

    r163 r271  
    266266                table.id    = "table_resultsearch_" + search_tabs; 
    267267                table.width = "100%"; 
     268                table.borderColorDark = "#bbbbbb"; 
     269                table.frame = "void"; 
     270                table.rules = "rows"; 
     271                table.cellPadding = "0"; 
     272                table.cellSpacing = "0"; 
    268273 
    269274                var tbody = document.createElement("TBODY"); 
     
    275280                for( var i=0; i < nw_array.length; i++){ 
    276281                        var tr = document.createElement("TR"); 
    277                 //var color = "#F0F0F0"; 
    278                         //tr.style.background  =  color; 
     282                        tr.style.height = "30px"; 
    279283                        tr.className = 'tr_msg_read'; 
    280284 
     
    326330                                        if( j == 3){ 
    327331                                                var subject_encode = url_encode(aux[2]); 
     332                                                if (! subject_encode) 
     333                                                        aux[2] = get_lang("no subject") + "..."; 
    328334                                                td.width = "30%";                                        
    329335                                                var td1  = '<div style="width:100%;overflow:hidden"><a href=javascript:void(0) onclick=EsearchE.open_msg(\"' + url_encode(mailbox) + '\",\"' + uid_msg + '\",\"' + subject_encode + '\")>' + aux[2] +'</a></div>'; 
     
    345351                                } 
    346352                        } 
    347                         aux.splice(0,(aux.length)); 
    348                         tbody.appendChild(tr); 
     353                        aux.splice(0,(aux.length));      
     354 
     355                subject = tr.firstChild; 
     356                subject = subject.nextSibling.nextSibling.nextSibling.firstChild.firstChild.innerHTML; 
     357//              _dragArea.makeDragged(tr, msg_number, subject, true); 
     358                _dragArea.makeDragged(tr, tr.firstChild.firstChild.id.substr(tr.firstChild.firstChild.id.indexOf(';')+1), subject, true); 
     359                tbody.appendChild(tr); 
    349360                } 
    350361                table.appendChild(tbody); 
     
    376387                var table_element = document.createElement("TABLE"); 
    377388                var tbody_element = document.createElement("TBODY"); 
    378                 table_element.border = 1; 
    379389                table_element.setAttribute("id", "table_message_header_box"); 
    380390                table_element.className = "table_message_header_box"; 
     
    447457                content_search.appendChild(div_scroll_result);   
    448458                if (span_options) 
    449                         content_search.appendChild(span_options);        
     459                        content_search.appendChild(span_options); 
    450460        } 
    451461 
  • trunk/expressoMail1_2/js/wfolders.js

    r197 r271  
    4747                        wfolders.arrayWin[el.id].close(); 
    4848                        if (type == 'save'){ 
    49                                 save_msg(border_id, wfolders_tree._selected.id, wfolders_tree._selected.caption); 
     49                                save_as_msg(border_id, wfolders_tree._selected.id, wfolders_tree._selected.caption,true); 
    5050                        } 
    5151                        else if (type == 'send_and_file'){ 
  • trunk/expressoMail1_2/preferences.php

    r197 r271  
    5353                        $GLOBALS['phpgw']->template->set_var('checked_shortcuts',''); 
    5454 
     55                if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_save_draft']) 
     56                        $GLOBALS['phpgw']->template->set_var('checked_auto_save_draft','checked'); 
     57                else 
     58                        $GLOBALS['phpgw']->template->set_var('checked_auto_save_draft',''); 
     59 
    5560                if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['signature']) 
    5661                        $GLOBALS['phpgw']->template->set_var('text_signature',$GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['signature']); 
     
    109114                else 
    110115                        $GLOBALS['phpgw']->preferences->add('expressoMail','use_shortcuts',$_POST['use_shortcuts']); 
     116                         
     117                if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_save_draft']) 
     118                        $GLOBALS['phpgw']->preferences->change('expressoMail','auto_save_draft',$_POST['auto_save_draft']); 
     119                else 
     120                        $GLOBALS['phpgw']->preferences->add('expressoMail','auto_save_draft',$_POST['auto_save_draft']);         
    111121 
    112122                if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['signature']) 
     
    161171        $GLOBALS['phpgw']->template->set_var('lang_font_size',lang('What the font size in the list of messages?')); 
    162172        $GLOBALS['phpgw']->template->set_var('lang_use_shortcuts',lang('Use shortcuts?')); 
     173        $GLOBALS['phpgw']->template->set_var('lang_auto_save_draft',lang('Auto save draft')); 
    163174        $GLOBALS['phpgw']->template->set_var('lang_signature',lang('Signature')); 
    164175        $GLOBALS['phpgw']->template->set_var('lang_none',lang('None')); 
  • trunk/expressoMail1_2/setup/setup.inc.php

    r197 r271  
    1212        $setup_info['expressoMail1_2']['name']          = 'expressoMail1_2'; 
    1313        $setup_info['expressoMail1_2']['title']         = 'ExpressoMail 1.2'; 
    14         $setup_info['expressoMail1_2']['version']       = '1.2210'; 
     14        $setup_info['expressoMail1_2']['version']       = '1.2211'; 
    1515        $setup_info['expressoMail1_2']['app_order']     = 2; 
    1616//      $setup_info['expressoMail1_2']['tables'][]      = 'phpgw_expressoMail1_2'; 
  • trunk/expressoMail1_2/templates/default/preferences.tpl

    r197 r271  
    9898                </td> 
    9999    </tr> 
     100     
     101    <tr bgcolor="{tr_color1}"> 
     102        <td> 
     103                        {lang_auto_save_draft} 
     104                </td> 
     105                <td align="center"> 
     106                        <input type="checkbox" name="auto_save_draft" value=1 {checked_auto_save_draft}> 
     107                </td> 
     108    </tr> 
    100109 
    101110    <tr bgcolor="{tr_color2}"> 
Note: See TracChangeset for help on using the changeset viewer.