Changeset 7228 for branches/2.4/expressoMail1_2/js/main.js
- Timestamp:
- 09/17/12 14:30:47 (12 years ago)
- Location:
- branches/2.4
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.4
- Property svn:mergeinfo changed
-
branches/2.4/expressoMail1_2/js/main.js
r7214 r7228 1 1 // Tempo do auto refresh (em milisegundos) 2 2 var time_refresh = 300000; 3 3 4 // tempo do auto save (em milisegundos) 4 5 // 20000 = 20 segundos … … 6 7 var results_search_messages = ""; 7 8 var cabecalho = '<h4>ExpressoLivre - ExpressoMail</h4>'; 8 // Variavel para controle de atualização das mensagens listadas na modal de alerta de filtro por remetente 9 var checkAlarmsFilter = false; 9 10 var auxNotificationCriteriaVetor = []; 11 var auxNotification; 12 13 var countNewMessage = 0; 14 var notifyNewMessageFilter = []; 10 15 11 16 var dynamicPersonalContacts = new Array(); 17 var dynamicPersonalGroups = new Array(); 12 18 var dynamicContacts = new Array(); 13 19 var topContact = 0; … … 20 26 } 21 27 } 22 23 24 28 25 29 function mount_url_folder(folders){ 26 30 return folders.join(cyrus_delimiter); … … 51 55 function updateDynamicPersonalContacts(){ 52 56 dynamicPersonalContacts = new Array(); 53 var contactsData = REST.get("/contacts").collection.itens;57 var contactsData = normalizeContacts(REST.get("/personalContact").collection.itens); 54 58 if(contactsData){ 55 59 $.each(contactsData, function(index, value){ 56 60 var contact = { 57 id : parseInt(value.data[0].value),58 name : value.data[1].value,59 email : value.data[2].value,60 value: value. data[1].value + " - " + value.data[2].value,61 id : parseInt(value.id), 62 name : value.name, 63 email: value.email, 64 value: value.name+ " - " + value.email, 61 65 type: "P" 62 66 }; … … 66 70 } 67 71 72 73 function updateDynamicPersonalGroups(){ 74 dynamicPersonalGroups = new Array(); 75 var contactsData = normalizeContacts(REST.get("/groups").collection.itens); 76 if(contactsData){ 77 $.each(contactsData, function(index, value){ 78 var contact = { 79 id : parseInt(value.id), 80 owner : value.owner, 81 name : value.name, 82 email: value.email, 83 type: "G" 84 }; 85 dynamicPersonalGroups.push(contact); 86 }); 87 } 88 } 89 90 68 91 function init(){ 69 92 if (!is_ie) … … 77 100 78 101 if(preferences.show_name_print_messages == "1") { 79 102 var getUserName = document.getElementById("user_info"); 80 103 var userName = getUserName.innerHTML; 81 104 var position = userName.indexOf("-"); … … 102 125 if (preferences.use_local_messages==1) { //O I.E 7 estava se atrapalhando caso esses loads fossem feitos após as chamadas ajax. Antes não apresentou problemas... 103 126 connector.loadScript('mail_sync'); 104 if (is_ie)105 connector.loadScript('TreeShow');106 127 setTimeout('auto_archiving()', 30000); 107 128 108 129 } 130 $.ajax({ 131 url: "controller.php?" + $.param( {action: "$this.imap_functions.get_range_msgs3", 132 folder: "INBOX", 133 msg_range_begin: "0", 134 msg_range_end: "0", 135 sort_box_type: "SORTARRIVAL", 136 search_box_type: "ALL", 137 sort_box_reverse: "1" 138 }), 139 success: function(data){ 140 data = connector.unserialize(data); 141 if(data){ 142 var _data = {}; 143 $.each(data,function(index,value){ 144 if (data[index] && data[index].msg_number){ 145 _data[data[index].msg_number] = data[index].msg_number; 146 } 147 }); 148 populateSelectedMsgs(_data); 149 _data = {}; 150 151 } 152 }, 153 beforeSend: function( jqXHR, settings ){ 154 connector.showProgressBar(); 155 }, 156 complete: function( jqXHR, settings ){ 157 connector.hideProgressBar(); 158 } 159 }); 109 160 //Substituido por padrão Jquery 110 161 cExecute ("$this.imap_functions.get_range_msgs2&folder=INBOX&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type=SORTARRIVAL&search_box_type=ALL&sort_box_reverse=1", handler_draw_box); … … 188 239 updateDynamicContact(); 189 240 updateDynamicPersonalContacts(); 241 updateDynamicPersonalGroups(); 190 242 }; 191 243 load_dynamics(); … … 507 559 var sort_type = sort_box_type; 508 560 sort_box_type = null; 509 sort_box('UNSEEN', sort_type); 561 sort_box('UNSEEN', sort_type,false); 562 delete selectedPagingMsgs[msg_info.msg_number]; 563 totalFolderMsgs--; 510 564 } 511 565 } … … 534 588 var confNotification = confirm(get_lang("The sender:\n%1\nwaits your notification of reading. Do you want to confirm this?",Base64.decode(msg_info.DispositionNotificationTo)), ""); 535 589 536 if (confNotification) 537 cExecute ("$this.imap_functions.send_notification¬ificationto="+msg_info.DispositionNotificationTo+"&date="+msg_info.udate+"&subject="+url_encode(msg_info.subject), handler_sendNotification); 590 if (confNotification) { 591 /* Adequação a nova funcionalidade. Agora, a confirmação de leitura é uma preferência do usuário. */ 592 if(preferences.confirm_read_message) { 593 $.Zebra_Dialog(get_lang("Would you like to send the read receipt?"), { 594 'type': 'question', 595 'title': get_lang('Read receipt'), 596 'buttons': [get_lang("Yes"), get_lang("No")], 597 'overlay_opacity' : 0.5, 598 'onClose': function(caption) { 599 if(caption == get_lang("Yes")) 600 cExecute ("$this.imap_functions.send_notification¬ificationto="+msg_info.DispositionNotificationTo+"&date="+msg_info.udate+"&subject="+url_encode(msg_info.subject), handler_sendNotification); 601 else 602 write_msg(get_lang("Confirmation message is not sent")); 603 } 604 }); 605 } 606 else 607 cExecute ("$this.imap_functions.send_notification¬ificationto="+msg_info.DispositionNotificationTo+"&date="+msg_info.udate+"&subject="+url_encode(msg_info.subject), handler_sendNotification); 608 } 609 538 610 } 539 611 //Change msg class to read. … … 551 623 552 624 function auto_refresh(){ 553 refresh(preferences.alert_new_msg );625 refresh(preferences.alert_new_msg, preferences.notifications); 554 626 setTimeout('auto_refresh()', time_refresh); 555 627 } … … 560 632 } 561 633 562 function refresh(alert_new_msg){ 634 function notificationFilter(data, notifyCriteria){ 635 636 if(parseInt(notifyCriteria) && data.length > 0 && !activePage ){ 637 638 var howManyCriteria = $('div.gray.filtersDeadline .message-list li').length; 639 var differenceOfNewCriteria = data.length - howManyCriteria; 640 641 if(differenceOfNewCriteria > 0){ 642 for(var i=data.length - differenceOfNewCriteria; i < data.length; i++){ 643 644 desktopNotification.sentNotification("",get_lang("Filter criteria"), truncate(new Date(data[i].udate).toString('dd/MM HH:mm') + ' - ' + data[i].from+' - '+data[i].subject, 75)); 645 desktopNotification.showNotification(false, function(){ 646 window.focus(); 647 this.cancel(); 648 }); 649 } 650 } 651 } 652 } 653 654 function refresh(alert_new_msg, notifyPermission){ 655 563 656 getFromAlertRules(); 564 657 var handler_refresh = function(data){ 565 if(checkAlarmsFilter){566 handlerMessageFilter = function (data) {567 568 }569 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */570 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter);571 }572 checkAlarmsFilter = true; 658 handlerMessageFilter = function (data) { 659 notificationFilter(data, notifyPermission); 660 alarmFollowupflagged('filtersAlarms', data); 661 662 } 663 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 664 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 665 573 666 if(data['msg_range_end']) 574 667 if(data['msg_range_end'] > 0) … … 582 675 showEmptyBoxMsg(box); 583 676 584 if (data.length > 0 ){677 if (data.length > 0 || countNewMessage > 0){ 585 678 for(var i=0;i< data.length;i++){ 586 679 if (!onceOpenedHeadersMessages[current_folder]) … … 588 681 onceOpenedHeadersMessages[current_folder][data[i].msg_number] = data[i]; 589 682 } 590 Element("table_message_header_box_ "+numBox).emptyBody = false;683 Element("table_message_header_box_0").emptyBody = false; 591 684 table_element = Element("table_box"); 592 685 var msg_info = document.getElementById('msg_info'); … … 617 710 if (data[0].msg_folder != current_folder) // Bad request 618 711 return false; 712 713 totalFolderMsgs += data.new_msgs; 714 619 715 for (var i=0; i<data.length; i++){ 620 716 var existent = document.getElementById(data[i].msg_number); 621 717 if (!existent) 622 718 { 719 selectedPagingMsgs[data[i].msg_number] = false; 720 updateSelectedMsgs(false,data[i].msg_number); 623 721 var new_msg = this.make_tr_message(data[i], current_folder, data.offsetToGMT); 624 722 $(new_msg).draggable({ … … 669 767 }, 670 768 helper: function(event){ 671 if($(this).find("input:checkbox").attr("checked") != "checked"){ 672 $(this).find("input:checkbox").trigger('click'); 673 $(this).addClass("selected_msg"); 674 } 675 if($("#table_box").find("tr input:checked").length > 1) 676 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($("#table_box").find("tr input:checked")).length+" mensagens selecionadas"), type: "messages"})+"</td></tr>"); 677 if( $(this).find(".td_msg_subject").text().length > 18 ) 678 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text().substring(0,18) + "...", type: "messages"})+"</td></tr>"); 679 else 680 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text(), type: "messages"})+"</td></tr>"); 769 $(this).addClass("selected_msg").find("input:checkbox").attr("checked", true); 770 updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id")); 771 if ( $("#tbody_box .selected_shortcut_msg").length > 1) { 772 $("#tbody_box .selected_shortcut_msg").addClass("selected_msg").find('.checkbox').attr('checked',true); 773 $.each( $(".selected_shortcut_msg"), function(index, value){ 774 updateSelectedMsgs($(value).find(":checkbox").is(':checked'),$(value).attr("id")); 775 }); 776 } 777 if(totalSelected() > 1) 778 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (totalSelected()+" mensagens selecionadas"), type: "messages"})+"</td></tr>"); 779 if( $(this).find(".td_msg_subject").text().length > 18 ) 780 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text().substring(0,18) + "...", type: "messages"})+"</td></tr>"); 781 else 782 return $("<tr><td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_subject").text(), type: "messages"})+"</td></tr>"); 681 783 }, 682 784 iframeFix: true, … … 686 788 containment: "#divAppbox" 687 789 }).bind("contextmenu", function(){ 688 if($(this).find("input:checkbox").attr("checked") != "checked"){ 689 $(this).find("input:checkbox").trigger('click'); 690 $(this).addClass("selected_msg"); 790 if (!(($(event.target).find('img').length > 0) && ($(event.target).hasClass('td-label')))){ 791 if($(this).find("input:checkbox").attr("checked") != "checked"){ 792 $(this).find("input:checkbox").trigger('click'); 793 $(this).addClass("selected_msg"); 794 } 795 updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id")); 691 796 } 692 797 }); … … 711 816 if(parseInt(preferences.use_shortcuts)) 712 817 select_msg("null","reload_msg","null"); 713 714 if(parseInt(alert_new_msg) && data.new_msgs > 0 )818 819 if(parseInt(alert_new_msg) && data.new_msgs > 0 && activePage) 715 820 alert(data['new_msgs'] > 1 ? get_lang("You have %1 new messages", data['new_msgs']) + "!" : get_lang("You have 1 new message") +"!"); 821 822 823 if(parseInt(notifyPermission) && (data.new_msgs > 0 || !!countNewMessage) && !activePage ){ 824 825 countNewMessage += data.length; 826 827 desktopNotificationAux = desktopNotification.sentNotification("",get_lang("Notification"), countNewMessage > 1 ? get_lang("You have %1 new messages", countNewMessage) + "!" : get_lang("You have 1 new message") + "!"); 828 829 if(auxNotification !== 'undefined') 830 desktopNotification.cancelByReference(auxNotification); 831 832 desktopNotification.showNotification(function(){ 833 countNewMessage = 0; 834 }, function(){ 835 window.focus(); 836 this.cancel(); 837 countNewMessage = 0; 838 }); 839 840 auxNotification = desktopNotificationAux; 841 } 716 842 build_quota(data['quota']); 717 843 } … … 811 937 812 938 if (!archive && (parseInt(preferences.save_deleted_msg)) && (folder != userTrashFolder)){ 813 move_msgs2(folder, msgs_number, border_ID, userTrashFolder,special_folders['Trash'],show_success_msg ); 939 if(currentTab == 0) 940 msgs_number = get_selected_messages(); 941 move_msgs2(folder, ""+msgs_number, border_ID, userTrashFolder,special_folders['Trash'],show_success_msg ); 814 942 return; 815 943 } … … 835 963 } 836 964 837 if(data.status == false){838 write_msg(get_lang("You don't have permission for this operation in this shared folder!")); 839 return false; 840 } 841 842 if (show_success_msg){ 843 if (data.msgs_number.length == 1) 844 write_msg(get_lang("The message was deleted.")); 845 else 846 write_msg(get_lang("The messages were deleted.")); 847 } 848 965 if(data.status == false){ 966 write_msg(get_lang("You don't have permission for this operation in this shared folder!")); 967 return false; 968 } 969 970 if (show_success_msg){ 971 if (data.msgs_number.length == 1) 972 write_msg(get_lang("The message was deleted.")); 973 else 974 write_msg(get_lang("The messages were deleted.")); 975 } 976 849 977 if (openTab.type[currentTab] > 1){ 850 978 var msg_to_delete = Element(msgs_number); … … 882 1010 if (msg_to_delete){ 883 1011 removeAll(msg_to_delete.id); 1012 delete selectedPagingMsgs[data.msgs_number[i]]; 884 1013 } 885 totalFolderMsgs = totalFolderMsgs - data.msgs_number.length;1014 totalFolderMsgs = totalFolderMsgs - data.msgs_number.length; 886 1015 } 887 1016 Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) - data.msgs_number.length; 888 1017 refresh(); 889 1018 } 890 891 if (msgs_number == 'selected')1019 1020 if(currentTab == 0 ) 892 1021 msgs_number = get_selected_messages(); 1022 893 1023 if (msgs_number.length > 0 || parseInt(msgs_number) > 0) 894 1024 cExecute ("$this.imap_functions.delete_msgs&folder="+folder+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&search_box_type="+search_box_type+"&sort_box_reverse="+sort_box_reverse, handler_delete_msgs); … … 1053 1183 params += "&new_folder="+url_encode(new_folder); 1054 1184 params += "&new_folder_name="+url_encode(new_folder_name); 1055 cExecute ("$this.imap_functions.move_search_messages", handler_move_search_msgs, params);1056 }1185 cExecute ("$this.imap_functions.move_search_messages", handler_move_search_msgs, params); 1186 } 1057 1187 } 1058 1188 else … … 1079 1209 var move_to_folder = data.match(/^(.*)Spam(.*)$/) ? "Spam" : special_folders['Trash']; 1080 1210 alert(get_lang('There is not %1 folder, Expresso is creating it for you... Please, repeat your request later.', folder_error)); 1081 connector.loadScript('TreeShow');1082 1211 ttree.FOLDER = 'root'; 1083 ttreeBox.new_past(move_to_folder);1212 create_new_folder(move_to_folder,"INBOX"); 1084 1213 return false; 1085 1214 }else{ 1086 data = data.split("/").reverse(); //Recupera o nome da pasta do array 1087 write_msg(get_lang('Error moving message.')+" "+get_lang('Permission denied to folder "%1".', data[0])); 1215 data = data.split("/").reverse(); //Recupera o nome da pasta do array 1216 write_msg(get_lang('Error moving message.')+" "+get_lang('Permission denied to folder "%1".', data[0])); 1088 1217 return false; 1089 1218 } … … 1227 1356 } catch (e) {} 1228 1357 1229 if (msgs_number == 'selected'){1358 if(currentTab == 0) 1230 1359 msgs_number = get_selected_messages(); 1231 }1232 1360 1233 1361 if(openTab.type[currentTab] == 1){ … … 1251 1379 url: 'controller.php?' + $.param( {action: '$this.imap_functions.move_messages', 1252 1380 folder: folder, 1253 msgs_number: msgs_number,1381 msgs_number: ""+msgs_number, 1254 1382 border_ID: border_ID, 1255 1383 sort_box_type: sort_box_type, … … 1264 1392 success: function( data ){ 1265 1393 data = connector.unserialize( data ); 1266 1394 $.each(msgs_number, function(index, value){ 1395 delete selectedPagingMsgs[value]; 1396 }); 1397 totalFolderMsgs -= msgs_number.split(",").length; 1398 1399 //TESTE 1400 selectAllFolderMsgs(); 1401 $('.select-link').unbind('click'); 1402 1267 1403 if( data ) 1268 1404 handler_move_msgs( data ); … … 1606 1742 } 1607 1743 1608 function get_selected_messages(){1744 /*function get_selected_messages(){ 1609 1745 var main; 1610 1746 try{ … … 1650 1786 1651 1787 1652 /* Verifica se está na tela de pesquisa. */ 1788 /* Verifica se está na tela de pesquisa. */ /* 1653 1789 if(selected_messages.indexOf("_") != -1) 1654 1790 { 1655 1791 results_search_messages = selected_messages; 1656 /* Retira a informação da aba */ 1792 /* Retira a informação da aba */ /* 1657 1793 selected_messages = selected_messages.substring(0,selected_messages.indexOf("_")); 1658 1794 } … … 1670 1806 return selected_messages_by_shortcuts; 1671 1807 }*/ 1672 /*Se houver mais de uma mensagem selecionada por atalho*/ 1808 /*Se houver mais de uma mensagem selecionada por atalho*//* 1673 1809 if (array_selected_messages_by_shortcuts.length > 1){ 1674 1810 if (selected_messages == "") … … 1682 1818 else 1683 1819 return selected_messages; 1820 }*/ 1821 function get_selected_messages(){ 1822 var selected = new Array(); 1823 $.each(selectedPagingMsgs, function(index, value){ 1824 if(value) 1825 selected.push(index); 1826 }); 1827 return ""+selected; 1684 1828 } 1685 1829 … … 1696 1840 } 1697 1841 1698 function new_message(type, border_ID, flagged){ 1842 function new_message(type, border_ID, flagged){ 1699 1843 if(RichTextEditor.editorReady === false) return false; 1700 1844 … … 1739 1883 { 1740 1884 RichTextEditor.editorReady = true; 1741 setTimeout('new_message(\''+type+'\',\''+border_ID+'\',\''+flagged+'\');',500); 1885 setTimeout('new_message(\''+type+'\',\''+border_ID+'\',\''+flagged+'\');',500); 1742 1886 return false; 1743 1887 } … … 1804 1948 if (document.getElementById("body_" + border_ID)) 1805 1949 data.body = document.getElementById("body_" + border_ID).innerHTML; 1950 if (document.getElementById("from_values_" + border_ID)) 1951 data.from = document.getElementById("from_values_"+border_ID).value; 1806 1952 if (Element('date_' + border_ID)){ 1807 1953 data.date = Element('date_' + border_ID).innerHTML; … … 1827 1973 var content = $("#content_id_"+new_border_ID); 1828 1974 1829 1830 1975 switch(type){ 1831 1976 case "reply_without_history": … … 1846 1991 break; 1847 1992 case "reply_with_history": 1848 1849 1993 RichTextEditor.replyController = true; //Seta o editor como modo reply 1850 1994 title = "Re: " + html_entities(data.subject); … … 1853 1997 1854 1998 draw_reply_boxes_by_field("to", data.to, content); 1855 1856 1999 content.find('[name="msg_reply_from"]').val($("#msg_number_" + border_ID).val()); 1857 1858 block_quoted_body = make_body_reply(data.body, data.to, data.date_day, data.date_hour); 2000 block_quoted_body = make_body_reply(data.body, data.from, data.date_day, data.date_hour); 1859 2001 1860 2002 useOriginalAttachments(new_border_ID,border_ID); … … 1956 2098 content.find(".subject").val("Re: " + data.subject); 1957 2099 1958 block_quoted_body = make_body_reply(data.body, data. to, data.date_day, data.date_hour);2100 block_quoted_body = make_body_reply(data.body, data.from, data.date_day, data.date_hour); 1959 2101 1960 2102 useOriginalAttachments(new_border_ID,border_ID); … … 2020 2162 break; 2021 2163 case "edit": 2164 2165 if(flagged == 'F') 2166 $(".important").addClass("expressomail-button-icon-ative"); 2022 2167 2023 if(flagged == 'F') 2024 $(".important").addClass("expressomail-button-icon-ative"); 2025 2168 openTab.imapBox[new_border_ID] = folder_message.value; 2026 2169 document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject; 2027 2170 title = "Edição: "+ html_entities(data.subject); … … 2099 2242 //DESENHA OS RETANGULOS PARA OS E-MAIL NA OPÇÃO REPLY 2100 2243 function draw_reply_boxes_by_field(field, value, context){ 2101 array = value.split(",");2244 array = break_comma(value); 2102 2245 $.each(array, function(index, value){ 2103 2246 draw_email_box(value, context.find("."+field).filter("textarea:first")); … … 2166 2309 var attach = {}; 2167 2310 attach.fileName = attachments[i].text.substring(0, attachments[i].text.lastIndexOf('(')); 2168 2169 if(attach.fileName.length > 45)2170 attach.fileName = attach.fileName.substr(0, 32) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length);2311 attach.fullFileName = attach.fileName; 2312 if(attach.fileName.length > 20) 2313 attach.fileName = attach.fileName.substr(0, 17) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length); 2171 2314 2172 2315 attach.fileSize = attachments[i].text.substring(( attachments[i].text.lastIndexOf('(')+1), attachments[i].text.lastIndexOf(')')); 2173 2316 2317 attach.error = false; 2318 fileUploadMSG.find(' .attachments-list').show(); 2174 2319 var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach})); 2175 upload.find('.status-upload').remove();2176 upload.find('.in-progress').remove();2177 2320 upload.append('<input type="hidden" name="fileId[]" value=\''+idATT+'\'/>'); 2178 upload.find('.button.close').button({ 2179 icons: { 2180 primary: "ui-icon-close" 2181 }, 2182 text: false 2183 2184 }).click(function(){ 2321 upload.find(".att-box-loading").remove(); 2322 upload.find('.att-box-delete').click(function(){ 2185 2323 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 2186 2324 var content_body = RichTextEditor.getData('body_'+new_border_ID); … … 2198 2336 fileUploadMSG.find('.attachments-list').find('input[value="'+idAttach+'"]'); 2199 2337 delAttachment(new_border_ID,idAttach); 2200 $(this).parent().remove(); 2338 $(this).parent().qtip("destroy"); 2339 $(this).parent().remove(); 2340 if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){ 2341 fileUploadMSG.find(' .attachments-list').hide(); 2342 } 2201 2343 }); 2202 2344 2203 2345 fileUploadMSG.find('.attachments-list').append(upload); 2346 fileUploadMSG.find('.attachments-list .att-box:last').qtip({ 2347 content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}), 2348 position: { 2349 corner: { 2350 tooltip: 'bottomMiddle', 2351 target: 'topMiddle' 2352 }, 2353 adjust: { 2354 resize: true, 2355 scroll: true, 2356 screen: true 2357 } 2358 }, 2359 show: { 2360 when: 'mouseover', // Don't specify a show event 2361 ready: false // Show the tooltip when ready 2362 }, 2363 hide: 'mouseout', // Don't specify a hide event 2364 style: { 2365 border: { 2366 width: 1, 2367 radius: 5 2368 }, 2369 width: { 2370 min: 75, 2371 max : 1000 2372 }, 2373 padding: 3, 2374 textAlign: 'left', 2375 tip: true, // Give it a speech bubble tip with automatic corner detection 2376 name: 'blue' // Style it according to the preset 'cream' style 2377 } 2378 }); 2204 2379 } 2205 2380 else … … 2224 2399 var attach = {}; 2225 2400 attach.fileName = arrayAttachmentsA[i].text.substring(0, arrayAttachmentsA[i].text.lastIndexOf('(')); 2226 2227 if(attach.fileName.length > 45)2228 attach.fileName = attach.fileName.substr(0, 32) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length);2401 attach.fullFileName = attach.fileName; 2402 if(attach.fileName.length > 20) 2403 attach.fileName = attach.fileName.substr(0, 17) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length); 2229 2404 2230 2405 attach.fileSize = arrayAttachmentsA[i].text.substring(( arrayAttachmentsA[i].text.lastIndexOf('(')+1), arrayAttachmentsA[i].text.lastIndexOf(')')); 2231 2406 attach.error = false; 2407 fileUploadMSG.find(' .attachments-list').show(); 2232 2408 var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach})); 2233 upload.find('.status-upload').remove(); 2234 upload.find('.in-progress').remove(); 2409 upload.find('.att-box-loading').remove(); 2235 2410 upload.append('<input type="hidden" name="fileId[]" value=\''+arrayAttachments[i]+'\'/>'); 2236 upload.find('.button.close').button({ 2237 icons: { 2238 primary: "ui-icon-close" 2239 }, 2240 text: false 2241 2242 }).click(function(){ 2243 var idAttach = $(this).parent().parent().find('input[name="fileId[]"]').val(); 2411 upload.find('.att-box-delete').click(function(){ 2412 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 2244 2413 var content_body = RichTextEditor.getData('body_'+new_border_ID); 2245 2414 var imagens = content_body.match(/<img[^>]*>/g); … … 2256 2425 fileUploadMSG.find('.attachments-list').find('input[value="'+idAttach+'"]'); 2257 2426 delAttachment(new_border_ID,idAttach); 2258 $(this).parent().remove(); 2427 $(this).parent().qtip("destroy"); 2428 $(this).parent().remove(); 2429 if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){ 2430 fileUploadMSG.find(' .attachments-list').hide(); 2431 } 2259 2432 }); 2260 2433 2261 2434 fileUploadMSG.find('.attachments-list').append(upload); 2262 2435 fileUploadMSG.find('.attachments-list .att-box:last').qtip({ 2436 content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}), 2437 position: { 2438 corner: { 2439 tooltip: 'bottomMiddle', 2440 target: 'topMiddle' 2441 }, 2442 adjust: { 2443 resize: true, 2444 scroll: true, 2445 screen: true 2446 } 2447 }, 2448 show: { 2449 when: 'mouseover', // Don't specify a show event 2450 ready: false // Show the tooltip when ready 2451 }, 2452 hide: 'mouseout', // Don't specify a hide event 2453 style: { 2454 border: { 2455 width: 1, 2456 radius: 5 2457 }, 2458 width: { 2459 min: 75, 2460 max : 1000 2461 }, 2462 padding: 3, 2463 textAlign: 'left', 2464 tip: true, // Give it a speech bubble tip with automatic corner detection 2465 name: 'blue' // Style it according to the preset 'cream' style 2466 } 2467 }); 2263 2468 } 2264 2469 … … 2278 2483 if((attachments[i].tagName=="SPAN") || (attachments[i].tagName=="IMG") || ((attachments[i].href.indexOf("javascript:download_local_attachment")==-1)&&(attachments[i].href.indexOf("javascript:download_attachments")==-1))) 2279 2484 continue; 2280 2485 fileUploadMSG.find(' .attachments-list').show(); 2281 2486 var arrayAtt = attachments[i].href.replace("javascript:download_attachments(", "").replace(")", "").split(','); 2282 2487 var att = new Object(); … … 2290 2495 2291 2496 var attach = {}; 2497 2292 2498 attach.fileName = attachments[i].text.substring(0, attachments[i].text.lastIndexOf('(')); 2293 2294 if(attach.fileName.length > 45) 2295 attach.fileName = attach.fileName.substr(0, 32) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length); 2499 attach.fullFileName = attach.fileName; 2500 2501 if(attach.fileName.length > 20) 2502 attach.fileName = attach.fileName.substr(0, 17) + " ... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length); 2296 2503 2297 2504 attach.fileSize = attachments[i].text.substring(( attachments[i].text.lastIndexOf('(')+1), attachments[i].text.lastIndexOf(')')); 2505 attach.error = false; 2298 2506 2299 2507 var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach})); 2300 upload.find('.status-upload').remove(); 2301 upload.find('.in-progress').remove(); 2302 upload.find('.button.close').button({ 2303 icons: { 2304 primary: "ui-icon-close" 2508 upload.find('.att-box-loading').remove(); 2509 upload.find('.att-box-delete').click(function(){ 2510 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 2511 var content_body = RichTextEditor.getData('body_'+new_border_ID); 2512 var imagens = content_body.match(/<img[^>]*>/g); 2513 var att = JSON.parse(idAttach); 2514 if(imagens != null) 2515 { 2516 for (var x = 0; x < imagens.length; x++) 2517 if(imagens[x].indexOf('src="./inc/get_archive.php?msgFolder='+att.folder+'&msgNumber='+att.uid+'&indexPart='+att.part) !== -1) 2518 content_body = content_body.replace(imagens[x],''); 2519 2520 RichTextEditor.setData('body_'+new_border_ID,content_body); 2521 } 2522 2523 fileUploadMSG.find(' .attachments-list').find('input[value="'+idAttach+'"]'); 2524 delAttachment(new_border_ID,idAttach); 2525 $(this).parent().qtip("destroy"); 2526 $(this).parent().remove(); 2527 if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){ 2528 fileUploadMSG.find(' .attachments-list').hide(); 2529 } 2530 }); 2531 2532 2533 upload.append('<input type="hidden" name="fileId[]" value=\''+idATT+'\'/>'); 2534 fileUploadMSG.find('.attachments-list').append(upload); 2535 fileUploadMSG.find('.attachments-list .att-box:last').qtip({ 2536 content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}), 2537 position: { 2538 corner: { 2539 tooltip: 'bottomMiddle', 2540 target: 'topMiddle' 2305 2541 }, 2306 text: false 2307 }).click(function(){ 2308 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 2309 var content_body = RichTextEditor.getData('body_'+new_border_ID); 2310 var imagens = content_body.match(/<img[^>]*>/g); 2311 var att = JSON.parse(idAttach); 2312 if(imagens != null) 2313 { 2314 for (var x = 0; x < imagens.length; x++) 2315 if(imagens[x].indexOf('src="./inc/get_archive.php?msgFolder='+att.folder+'&msgNumber='+att.uid+'&indexPart='+att.part) !== -1) 2316 content_body = content_body.replace(imagens[x],''); 2317 2318 RichTextEditor.setData('body_'+new_border_ID,content_body); 2319 } 2320 2321 fileUploadMSG.find(' .attachments-list').find('input[value="'+idAttach+'"]'); 2322 delAttachment(new_border_ID,idAttach); 2323 $(this).parent().remove(); 2324 }); 2325 2326 2327 upload.find("p").append('<input type="hidden" name="fileId[]" value=\''+idATT+'\'/>'); 2328 fileUploadMSG.find('.attachments-list').append(upload); 2542 adjust: { 2543 resize: true, 2544 scroll: true, 2545 screen: true 2546 } 2547 }, 2548 show: { 2549 when: 'mouseover', // Don't specify a show event 2550 ready: false // Show the tooltip when ready 2551 }, 2552 hide: 'mouseout', // Don't specify a hide event 2553 style: { 2554 border: { 2555 width: 1, 2556 radius: 5 2557 }, 2558 width: { 2559 min: 75, 2560 max : 1000 2561 }, 2562 padding: 3, 2563 textAlign: 'left', 2564 tip: true, // Give it a speech bubble tip with automatic corner detection 2565 name: 'blue' // Style it according to the preset 'cream' style 2566 } 2567 }); 2329 2568 2330 2569 } … … 2482 2721 } 2483 2722 }); 2723 $.each(dynamicPersonalGroups, function(x, valuex){ 2724 if(valuex.email == $(value).find("input").val().match(reComplexEmail)[1]){ 2725 stop = true; 2726 return false; 2727 } 2728 }); 2484 2729 if(!stop){ 2485 2730 var exist = 0; … … 2572 2817 2573 2818 function send_message(ID, folder, folder_name){ 2574 if(!zebraDiscardEventDialog && $('#fileupload_msg'+ID).find('.in-progress').length )2575 2576 2577 2578 $.Zebra_Dialog('Existem anexos sendo enviados para o servidor. Caso envie sua mensagem agora estes arquivos serão perdidos.', {2579 2580 2581 2582 2583 2584 if(clicked == 'Descartar anexos e enviar' )2585 send_valided_message(ID, folder, folder_name);2586 2587 window.setTimeout(function() {2588 zebraDiscardEventDialog = false;2589 }, 500);2819 if(!zebraDiscardEventDialog && $('#fileupload_msg'+ID).find('.att-box-loading').length ) 2820 { 2821 zebraDiscardEventDialog = true; 2822 window.setTimeout(function() { 2823 $.Zebra_Dialog('Existem anexos sendo enviados para o servidor. Caso envie sua mensagem agora estes arquivos serão perdidos.', { 2824 'type': 'question', 2825 'overlay_opacity': '0.5', 2826 'buttons': ['Descartar anexos e enviar', 'Continuar editando e esperar anexos'], 2827 'width' : 500, 2828 'onClose': function(clicked) { 2829 if(clicked == 'Descartar anexos e enviar' ){ 2830 $.each($('#fileupload_msg'+ID).find('.att-box'), function(index, value){ 2831 if($(value).find(".att-box-loading").length) 2832 $(value).find('.att-box-delete').trigger("click"); 2833 }); 2834 send_valided_message(ID, folder, folder_name); 2590 2835 } 2591 }) 2592 }, 300); 2593 2594 } 2595 else 2596 send_valided_message(ID, folder, folder_name); 2836 window.setTimeout(function() { 2837 zebraDiscardEventDialog = false; 2838 }, 500); 2839 } 2840 }) 2841 }, 300); 2842 }else 2843 send_valided_message(ID, folder, folder_name); 2597 2844 } 2598 2845 … … 2695 2942 } 2696 2943 //stringEmail = content.find('[name="input_to"]').val(); 2944 2945 var stringReply = ""; 2946 draw_email_box(content.find(".reply-to-tr").find("textarea:first").val(), content.find(".reply-to-tr").find("textarea:first")); 2947 content.find(".reply-to-tr").find("textarea:first").val(""); 2948 var array = content.find(".reply-to-tr").find(".box"); 2949 $.each(array, function(index, value){ 2950 stringReply += $(value).find("input").val() + ","; 2951 }); 2952 content.find('[name="input_reply_to"]').val(stringReply); 2953 2697 2954 var stringEmail = ""; 2698 2955 var stringToEmail = ""; 2699 draw_email_box(content.find(".to-tr").find("textarea:first").val(), content.find(".to-tr").find("textarea:first")); 2956 draw_email_box(content.find(".to-tr").find("textarea:first").val(), content.find(".to-tr").find("textarea:first")); 2700 2957 content.find(".to-tr").find("textarea:first").val(""); 2701 2958 var array = content.find(".to-tr").find(".box"); 2702 2959 $.each(array, function(index, value){ 2703 //stringEmail += $(value).find("input").val() + ","; 2704 2960 //stringEmail += $(value).find("input").val() + ","; 2961 stringToEmail += $(value).find("input").val() + ","; 2705 2962 }); 2706 content.find('[name="input_to"]').val(stringToEmail); 2707 stringEmail = stringToEmail; 2708 2963 content.find('[name="input_to"]').val(stringToEmail); 2964 stringEmail = stringToEmail; 2965 var stringCCoEmail = ""; 2709 2966 if ( content.find('[name="input_cco"]').length){ 2710 2967 if(content.find(".cco-tr").css("display") != "none"){ 2711 draw_email_box(content.find(".cco-tr").find("textarea:first").val(), content.find(".cco-tr").find("textarea:first")); 2968 draw_email_box(content.find(".cco-tr").find("textarea:first").val(), content.find(".cco-tr").find("textarea:first")); 2712 2969 content.find(".cco-tr").find("textarea:first").val(""); 2713 2970 var array = content.find(".cco-tr").find(".box"); 2714 2971 $.each(array, function(index, value){ 2715 //stringEmail += $(value).find("input").val() + ","; 2716 stringCCoEmail += $(value).find("input").val() + ","; 2972 //stringEmail += $(value).find("input").val() + ","; 2973 stringCCoEmail += $(value).find("input").val() + ","; 2717 2974 }); 2718 content.find('[name="input_cco"]').val(stringCCoEmail); 2719 }2720 } 2721 stringEmail += stringCCoEmail; 2975 content.find('[name="input_cco"]').val(stringCCoEmail); 2976 } 2977 } 2978 stringEmail += stringCCoEmail; 2722 2979 var stringCCEmail = ""; 2723 2980 if(content.find(".cc-tr").css("display") != "none") 2724 2981 { 2725 draw_email_box(content.find(".cc-tr").find("textarea:first").val(), content.find(".cc-tr").find("textarea:first")); 2982 draw_email_box(content.find(".cc-tr").find("textarea:first").val(), content.find(".cc-tr").find("textarea:first")); 2726 2983 content.find(".cc-tr").find("textarea:first").val(""); 2727 2984 var array = content.find(".cc-tr").find(".box"); 2728 2985 $.each(array, function(index, value){ 2729 //stringEmail += $(value).find("input").val() + ","; 2730 2986 //stringEmail += $(value).find("input").val() + ","; 2987 stringCCEmail += $(value).find("input").val() + ","; 2731 2988 }); 2732 content.find('[name="input_cc"]').val(stringCCEmail); 2733 } 2734 stringEmail += stringCCEmail; 2735 2989 content.find('[name="input_cc"]').val(stringCCEmail); 2990 } 2991 stringEmail += stringCCEmail; 2736 2992 if (expresso_offline) { 2737 2993 … … 2752 3008 else{ 2753 3009 if(stringEmail != ""){ 2754 $.ajax({ 2755 url: "controller.php?", 2756 success: function(data){ 2757 cExecuteForm("$this.imap_functions.send_mail", form, handler_send_message, ID); 2758 }, 2759 error: function(){ 2760 write_msg("Erro ao tentar enviar a mensagem. Nova tentativa em alguns segundos..."); 2761 var interval = setInterval(function(){ 2762 send_valided_message(ID,folder,folder_name); 2763 clearInterval(interval); 2764 },15000); 2765 return; 2766 } 2767 }); 3010 $.ajax({ 3011 url: "controller.php?", 3012 success: function(data){ 3013 cExecuteForm("$this.imap_functions.send_mail", form, handler_send_message, ID); 3014 }, 3015 error: function(){ 3016 write_msg("Erro ao tentar enviar a mensagem. Nova tentativa em alguns segundos..."); 3017 var interval = setInterval(function(){ 3018 send_valided_message(ID,folder,folder_name); 3019 clearInterval(interval); 3020 },15000); 3021 return; 3022 } 3023 }); 2768 3024 }else{ 2769 3025 write_msg(get_lang("message without receiver")); … … 2853 3109 var content = $("#content_id_"+border_id); 2854 3110 3111 3112 var array = content.find(".reply-to-tr").find(".box"); 3113 var stringReplyToEmail = ""; 3114 $.each(array, function(index, value){ 3115 stringReplyToEmail += $(value).find("input").val() + ","; 3116 }); 3117 content.find('[name="input_reply_to"]').val(stringReplyToEmail); 3118 2855 3119 var stringEmail = ""; 2856 3120 draw_email_box(content.find(".to-tr").find("textarea:first").val(), content.find(".to-tr").find("textarea:first")); … … 3106 3370 success: function( data ){ 3107 3371 data = connector.unserialize( data ); 3108 3372 3373 selectAllFolderMsgs(); 3374 $('.select-link').unbind('click'); 3375 3109 3376 if( data ) 3110 3377 handler_set_messages_flag( data ); … … 3206 3473 } 3207 3474 } 3208 3209 3475 3210 3476 var print_width = screen.width - 200; … … 3422 3688 } 3423 3689 3424 function empty_trash_imap(){ 3690 function empty_trash_imap(shared, button){ 3691 if(shared){ 3692 var folder_part = $(button).parents("li:first").attr("id").split(cyrus_delimiter); 3693 var folder = folder_part[0]+cyrus_delimiter+folder_part[1]; 3694 } 3695 3425 3696 var handler_empty_trash = function(data){ 3426 3697 Element('chk_box_select_all_messages').checked = false; … … 3433 3704 draw_tree_labels(); 3434 3705 if (data){ 3706 if(typeof(data) == "object"){ 3707 if(data[1] == "Permission denied"){ 3708 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 3709 return write_msg(get_lang("Permission denied")); 3710 } 3711 } 3435 3712 write_msg(get_lang('Your Trash folder was empty.')); 3436 3713 if (get_current_folder() == mount_url_folder(["INBOX",special_folders["Trash"]])){ … … 3452 3729 'onClose': function(caption) { 3453 3730 if(caption == get_lang("Yes")){ 3454 cExecute ("$this.imap_functions.empty_folder&clean_folder="+"imapDefaultTrashFolder" , handler_empty_trash);3731 cExecute ("$this.imap_functions.empty_folder&clean_folder="+"imapDefaultTrashFolder"+(shared ? "&shared="+folder : ""), handler_empty_trash); 3455 3732 } 3456 3733 } … … 3458 3735 } 3459 3736 3460 function empty_spam_imap(){ 3737 function empty_spam_imap(shared, button){ 3738 if(shared){ 3739 var folder_part = $(button).parents("li:first").attr("id").split(cyrus_delimiter); 3740 var folder = folder_part[0]+cyrus_delimiter+folder_part[1]; 3741 } 3461 3742 var handler_empty_spam = function(data){ 3462 3743 Element('chk_box_select_all_messages').checked = false; … … 3472 3753 draw_tree_labels(); 3473 3754 update_quota(get_current_folder()); 3474 if (data) 3475 write_msg(get_lang('Your Spam folder was empty.')); 3755 if (data){ 3756 if(typeof(data) == "object"){ 3757 if(data[1] == "Permission denied"){ 3758 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 3759 return write_msg(get_lang("Permission denied")); 3760 }else{ 3761 write_msg(get_lang('Your Spam folder was empty.')); 3762 } 3763 }else{ 3764 write_msg(get_lang('Your Spam folder was empty.')); 3765 } 3766 } 3476 3767 else 3477 3768 write_msg(get_lang('ERROR emptying your Spam folder.')); … … 3485 3776 'onClose': function(caption) { 3486 3777 if(caption == get_lang("Yes")){ 3487 cExecute ("$this.imap_functions.empty_folder&clean_folder="+"imapDefaultSpamFolder" , handler_empty_spam);3778 cExecute ("$this.imap_functions.empty_folder&clean_folder="+"imapDefaultSpamFolder"+(shared ? "&shared="+folder : ""), handler_empty_spam); 3488 3779 } 3489 3780 } … … 3524 3815 else{ 3525 3816 var filename = 'mensagens.zip'; 3526 if (data .match(/\.eml$/gi)) {3527 filename = 'fonte_da_mensagem.eml';3817 if (data[0].match(/\.eml$/gi)) { 3818 filename = data[1]+'.eml'; 3528 3819 } 3529 download_attachments(null, null, data , null,null,filename);3820 download_attachments(null, null, data[0], null,null,filename); 3530 3821 } 3531 3822 } … … 3621 3912 msgs_number = get_selected_messages(); 3622 3913 3914 //TODO: REFATORAR O CÓDIGO PARA EVITAR recodificação 3915 if(currentTab == 0) 3916 msgs_number = get_selected_messages(); 3917 3623 3918 if (parseInt(msgs_number) > 0 || msgs_number.length > 0) 3624 3919 cExecute ("$this.imap_functions.spam&folder="+folder+"&spam=false"+"&msgs_number="+msgs_number+"&border_ID="+border_ID+"&sort_box_type="+sort_box_type+"&sort_box_reverse="+sort_box_reverse+"&reuse_border="+border_ID+"&new_folder="+new_folder+"&new_folder_name="+new_folder_name+"&get_previous_msg="+0+"&cyrus_delimiter="+cyrus_delimiter, handler_move_msgs); … … 3658 3953 return; 3659 3954 }else if(msgs_number == 'selected') 3955 msgs_number = get_selected_messages(); 3956 3957 //TODO: REFATORAR O CÓDIGO PARA EVITAR recodificação 3958 if(currentTab == 0) 3660 3959 msgs_number = get_selected_messages(); 3661 3960 … … 3733 4032 } 3734 4033 } 3735 ], 3736 open: function(event, ui)3737 { 3738 if(typeof(shortcut) != 'undefined') shortcut.disabled = true;3739 }, 3740 close: function(event, ui)3741 { 3742 if(typeof(shortcut) != 'undefined') shortcut.disabled = false;3743 } 4034 ], 4035 open: function(event, ui) 4036 { 4037 if(typeof(shortcut) != 'undefined') shortcut.disabled = true; 4038 }, 4039 close: function(event, ui) 4040 { 4041 if(typeof(shortcut) != 'undefined') shortcut.disabled = false; 4042 } 3744 4043 }); 3745 4044 … … 3855 4154 } 3856 4155 4156 //Normalização dos dados evita ter que reemplementar toda as funcionalidades do calendar 4157 function decodeCreateSchedulable(type, ID){ 4158 var startEvent = new Date(); 4159 if(startEvent.toString('mm') < 30) 4160 startEvent.add({minutes: (30 - parseInt(startEvent.toString('mm')))}); 4161 else 4162 startEvent.add({hours: 1, minutes: '-'+startEvent.toString('mm')}); 4163 var endEvent = function(date){ 4164 if(!!User.preferences.defaultCalendar){ 4165 return new Date(parseInt(date.getTime()) + 4166 (!!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 4167 (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000) : 4168 (User.preferences.defaultDuration * 60000) 4169 )); 4170 }else 4171 return new Date(parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000)); 4172 }; 4173 4174 var emails = $("#to_values_"+ID).val().split(','); 4175 4176 var schedulable = {}; 4177 4178 schedulable = { 4179 acl: {inviteGuests: true, organization: true ,participationRequired: false, read: true, write: true}, 4180 alarms: [], 4181 allDay: false, 4182 attachments: [], 4183 isAttendee: true, 4184 attendee: '',//TODOOOOOO, 4185 category: '', 4186 'class': '1', 4187 delegatedFrom: {}, 4188 endDate: startEvent.toString(User.preferences.dateFormat), 4189 startDate: endEvent(startEvent).toString(User.preferences.dateFormat), 4190 startHour: startEvent.toString(User.preferences.hourFormat), 4191 endHour: endEvent(startEvent).toString(User.preferences.hourFormat), 4192 timezone: User.preferences.defaultCalendar ? Calendar.signatureOf[User.preferences.defaultCalendar].calendar.timezone : User.preferences.timezone, 4193 summary : $("#subject_"+ID).text(), 4194 description : $("#body_" + ID).text(), 4195 startTime: startEvent.getTime(), 4196 endTime: endEvent(startEvent), 4197 timezones: Timezone.timezones, 4198 me: {name: User.me.name, mail: User.me.mail, acl: 'rowi', status: '1', delegatedFrom: '0', id: User.me.id}, 4199 organizer: {name: User.me.name, mail: User.me.mail, acl: 'rowi', status: '1', delegatedFrom: '0' , id: User.me.id}, 4200 statusParticipants: {accepted: 0, cancelled: 0, tentative: 0, unanswered:emails.length}, 4201 location: '', 4202 attendee: $.map(emails, function( mail ){ 4203 var contact = false; 4204 var decoded = Encoder.htmlDecode(mail); 4205 var newAttendeeName = ""; 4206 4207 var name = decoded.match(/"([^"]*)"/) ? decoded.match(/"([^"]*)"/)[1] : ''; 4208 var mail = decoded.match(/<([^<]*)>[\s]*$/) ? decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() : decoded; 4209 4210 4211 var user = DataLayer.get('user', ["=", "mail", mail], true); 4212 4213 if( $.type(user) == "array" ) 4214 user = user[0]; 4215 4216 if(user != ''){ 4217 //user = {name : name , mail : mail}; 4218 if(User.me.mail == user.mail) 4219 return(null); 4220 user.isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 4221 4222 return DataLayer.merge({ 4223 name: user.name, 4224 mail: user.mail, 4225 acl: 'r', 4226 delegatedFrom: '0', 4227 status: '4', 4228 isExternal: user.isExternal 4229 }, !!user.id ? {id : DataLayer.put('participant', {user: user.id, isExternal: user.isExternal})} : {id: DataLayer.put('participant', {user: user})}); 4230 }else if(mail.match(/[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])/)){ 4231 4232 var userId = DataLayer.put('user', { 4233 name: name, 4234 mail: mail, 4235 isExternal: '1' 4236 }); 4237 var newAttendeeId = DataLayer.put('participant', { 4238 user: userId, 4239 isExternal: '1' 4240 }); 4241 4242 return { 4243 id: newAttendeeId, 4244 name: name, 4245 mail: mail, 4246 acl: 'r', 4247 delegatedFrom: '0', 4248 status: '4', 4249 isExternal: '1' 4250 }; 4251 4252 }else 4253 return (null); 4254 }) 4255 }; 4256 4257 schedulable = DataLayer.merge(schedulable, 4258 type == 'event' ? 4259 {calendar: User.preferences.defaultCalendar ? User.preferences.defaultCalendar : Calendar.calendars[0], calendars: Calendar.calendars} 4260 : {group: Calendar.groups[0].id, groups: Calendar.groups, percentage: 0, isOrganizer: true} 4261 ); 4262 4263 return schedulable; 4264 4265 4266 } 4267 3857 4268 function import_implements_calendar(){ 3858 4269 … … 3868 4279 $.ajax({url: "../prototype/modules/calendar/js/map.disponibility.js", async: false, beforeSend: function( xhr ) {xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 3869 4280 $.ajax({url: "../prototype/modules/calendar/js/helpers.js", async: false, beforeSend: function( xhr ) {xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 4281 $.ajax({url: "../prototype/modules/calendar/js/task.helpers.js", async: false, beforeSend: function( xhr ) {xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 3870 4282 //$.ajax({ url: "../prototype/modules/calendar/js/timezone.js", async: false}); 3871 4283 //$.ajax({ url: "../prototype/modules/calendar/js/calendar.codecs.js", async: false}); 3872 4284 $.ajax({url: "../prototype/plugins/encoder/encoder.js", async: false, beforeSend: function( xhr ) {xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 4285 $.ajax({url: "../prototype/plugins/jquery.spinner/jquery.spinner.min.js", async: false, beforeSend: function( xhr ) {xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 3873 4286 //$.ajax({url: "../prototype/plugins/dateFormat/dateFormat.js", async: false, beforeSend: function( xhr ) { xhr.overrideMimeType('text/javascript; charset=ISO-8859-1')}}); 3874 4287 … … 3910 4323 wfolders.makeWindow('null','import'); 3911 4324 } 3912 function import_calendar(data){3913 var import_url = '$this.db_functions.import_vcard&msg_folder='+data;3914 var logUser;3915 var up;3916 var owner;3917 3918 4325 //Verifica o contexto de importação 3919 var decodeOwner = function(){ 3920 4326 function decodeOwner(){ 3921 4327 owner = User.me.id; 3922 4328 var imapBox = openTab.imapBox[currentTab].split(cyrus_delimiter); … … 3924 4330 var user = DataLayer.get('user', {filter: ['=','uid',imapBox[1]]}); 3925 4331 owner = $.isArray(user) ? user[0].id : user.id; 3926 } 3927 4332 } 3928 4333 return owner; 3929 4334 } 4335 4336 function import_calendar(data){ 4337 var import_url = '$this.db_functions.import_vcard&msg_folder='+data; 4338 var logUser; 4339 var up; 4340 var owner; 4341 4342 function handler_import_calendar(data){ 4343 if(data === true){ 4344 write_msg(get_lang("The event was imported successfully.")); 4345 } 4346 else if( data['url'] ) 4347 { 4348 var form = document.createElement( "form" ); 4349 4350 form.setAttribute( "action", DEFAULT_URL + data['url'] + '&isPost=true' ); 4351 form.setAttribute( "method", "POST" ); 4352 4353 document.body.appendChild( form ); 4354 4355 form.submit(); 4356 } 4357 else 4358 write_msg(get_lang(data)); 4359 } 4360 if(defaultCalendar == "expressoCalendar" && $("#expressoCalendarid")[0]){ 4361 import_implements_calendar(); 4362 $( "#import-dialog" ).dialog({ 4363 autoOpen: false, 4364 height: 220, 4365 modal: true, 4366 resizable : false, 4367 open: function(event, ui) { 4368 if(typeof(shortcut) != 'undefined') shortcut.disabled = true; 4369 }, 4370 close: function(event, ui){ 4371 event.stopPropagation(); 4372 if(typeof(shortcut) != 'undefined') shortcut.disabled = false; 4373 }, 4374 closeOnEscape: true 4375 }); 4376 4377 $.ajax({ 4378 url: "controller.php?action="+import_url+'&from_ajax=true&id_user='+User.me.id+'&readable=true&cirus_delimiter='+cyrus_delimiter+'&analize=true&uidAccount='+decodeOwner(), 4379 async: false, 4380 success: function(data){ 4381 data = connector.unserialize(data); 4382 var createDialog = function(typeImport, propaget){ 4383 4384 if(typeof(typeImport) == "object"){ 4385 var calendarIds = !!typeImport.calendar ? typeImport.calendar : Calendar[typeImport.type]; 4386 typeImport = typeImport.action; 4387 } 4388 4389 switch(parseInt(typeImport)){ 4390 case 1: 4391 case 7: 4392 case 10: 4393 $("#select-agenda").html(''); 4394 4395 var options = ''; 4396 4397 if(calendarIds){ 4398 for(var i = 0; i < calendarIds.length; i++) 4399 options += '<option value="'+calendarIds[i]+'">'+Calendar.signatureOf[calendarIds[i]].calendar.name+'</option>' 4400 } 4401 4402 $("#select-agenda").append(options); 4403 $("#select-agenda").css("display", "block"); 4404 4405 $("#import-dialog" ).dialog({ 4406 buttons: { 4407 Cancel: function() { 4408 $( this ).dialog( "close" ); 4409 }, 4410 "Importar" : function(){ 4411 $.ajax({ 4412 url: "controller.php?action="+import_url+'&from_ajax=true&selected='+$("#select-agenda option:selected").val()+'&status='+$("#select-status option:selected").val()+'&uidAccount='+decodeOwner()+'&cirus_delimiter='+cyrus_delimiter, 4413 success: function(msg){ 4414 var alt = ( (msg = connector.unserialize(msg)) == "ok") ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento/tarefa para a agenda "; 4415 alert( alt + $("#select-agenda option:selected").text() ); 4416 } 4417 }); 4418 $( this ).dialog( "close" ); 4419 } 4420 } 4421 }); 3930 4422 3931 function handler_import_calendar(data){ 3932 if(data === true){ 3933 write_msg(get_lang("The event was imported successfully.")); 3934 } 3935 else if( data['url'] ) 3936 { 3937 var form = document.createElement( "form" ); 3938 3939 form.setAttribute( "action", DEFAULT_URL + data['url'] + '&isPost=true' ); 3940 form.setAttribute( "method", "POST" ); 3941 3942 document.body.appendChild( form ); 3943 3944 form.submit(); 3945 } 3946 else 3947 write_msg(get_lang(data)); 3948 } 3949 if(defaultCalendar == "expressoCalendar" && $("#expressoCalendarid")[0]){ 3950 import_implements_calendar(); 3951 $( "#import-dialog" ).dialog({ 3952 autoOpen: false, 3953 height: 220, 3954 modal: true, 3955 resizable : false, 3956 open: function(event, ui) 3957 { 3958 if(typeof(shortcut) != 'undefined') shortcut.disabled = true; 3959 }, 3960 close: function(event, ui) 3961 { 3962 event.stopPropagation(); 3963 if(typeof(shortcut) != 'undefined') shortcut.disabled = false; 3964 }, 3965 closeOnEscape: true 3966 }); 3967 3968 $.ajax({ 3969 url: "controller.php?action="+import_url+'&from_ajax=true&id_user='+User.me.id+'&readable=true&cirus_delimiter='+cyrus_delimiter+'&analize=true&uidAccount='+decodeOwner(), 3970 async: false, 3971 success: function(data){ 3972 data = connector.unserialize(data); 3973 3974 3975 var createDialog = function(typeImport, propaget){ 3976 3977 if(typeof(typeImport) == "object"){ 3978 var calendarPermission = typeImport.calendar; 3979 typeImport = typeImport.action; 4423 if(typeImport == 7){ 4424 $("#import-dialog").find('#select-status option[value=1]').attr('selected','selected').trigger('change'); 4425 $("#import-dialog").find('#select-status').attr('disabled','disabled'); 4426 } 4427 break; 4428 case 3: 4429 $.ajax({ 4430 url: "controller.php?action="+import_url+'&from_ajax=true&selected=true', 4431 success: function(msg){ 4432 alert( ( ( connector.unserialize(msg)) == "ok") ? "Seu evento/tarefa foi removido " : "Ocorreu um erro ao remover o evento/tarefa" ); 4433 } 4434 }); 4435 return; 4436 break; 4437 case 5: 4438 $.ajax({ 4439 url: 'controller.php?action='+import_url+'&from_ajax=true&selected=true&cirus_delimiter='+cyrus_delimiter, 4440 success: function(msg){ 4441 alert( ( ( connector.unserialize(msg)) == "ok") ? "Seu evento/tarefa foi Atualizado com sucesso" : "Ocorreu um erro ao atualizar evento/tarefa" ); 4442 } 4443 }); 4444 return; 4445 break; 4446 case 6: 4447 var acceptedSuggestion = confirm("Deseja atualizar o evento/tarefa de acordo com a sugestão ?"); 4448 $.ajax({ 4449 url: "controller.php?action="+import_url+'&from_ajax=true&id_user='+User.me.id+'&selected=true&cirus_delimiter='+cyrus_delimiter+'&acceptedSuggestion='+acceptedSuggestion+"&from="+document.getElementById('from_values_'+currentTab).value+'&uidAccount='+decodeOwner(), 4450 success: function(msg){ 4451 if(acceptedSuggestion) 4452 alert( ( ( connector.unserialize(msg)) == "ok") ? "Evento/tarefa atualizado com sucesso " : "Ocorreu um erro ao atualizar o evento" ); 3980 4453 } 3981 3982 switch(parseInt(typeImport)){ 3983 case 1: 3984 case 7: 3985 case 10: 3986 $("#select-agenda").html(''); 3987 3988 var options = ''; 3989 3990 if(typeImport == 10){ 3991 for(var i = 0; i < calendarPermission.length; i++) 3992 options += '<option value="'+calendarPermission[i]+'">'+Calendar.signatureOf[calendarPermission[i]].calendar.name+'</option>' 3993 }else{ 3994 for(var id in Calendar.signatures) 3995 options += parseInt(Calendar.signatures[id].isOwner) ? '<option value="'+Calendar.signatures[id].calendar.id+'">'+Calendar.signatures[id].calendar.name+'</option>' : ''; 4454 }); 4455 return; 4456 break; 4457 case 9: 4458 alert('Seu evento/tarefa não possui alterações!'); 4459 return; 4460 break; 4461 case 11: 4462 alert('Este evento/tarefa já fora importando por algum dos particpantes e já se encontra disponível em sua agenda compartilhada!'); 4463 return; 4464 break; 4465 default: 4466 up = true; 4467 $("#select-agenda").css("display", "none"); 4468 $("#import-dialog" ).children("p:first-child").css("display", "none"); 4469 $("#import-dialog" ).dialog({ 4470 height: 160, 4471 title: 'Atualizar Evento/Tarefa', 4472 buttons: { 4473 Cancel: function() { 4474 $( this ).dialog( "close" ); 4475 }, 4476 "Atualizar": function() { 4477 $.ajax({ 4478 url: "controller.php?action="+import_url+'&from_ajax=true&cirus_delimiter='+cyrus_delimiter+'&selected='+ (parseInt(typeImport) == 2 || parseInt(typeImport) == 4 ? 'true' : $("#select-agenda option:selected").val()) +'&status='+$("#select-status option:selected").val()+'&uidAccount='+decodeOwner(), 4479 success: function(msg){ 4480 alert( ( (msg = connector.unserialize(msg)) == "ok") ? "Atualizado com sucesso" : "Ocorreu um erro ao atualizar o evento" ); 4481 } 4482 }); 4483 $( this ).dialog( "close" ); 3996 4484 } 3997 3998 $("#select-agenda").append(options); 3999 $("#select-agenda").css("display", "block"); 4000 4001 $("#import-dialog" ).dialog({ 4002 buttons: { 4003 Cancel: function() { 4004 $( this ).dialog( "close" ); 4005 }, 4006 "Importar" : function(){ 4007 $.ajax({ 4008 url: "controller.php?action="+import_url+'&from_ajax=true&selected='+$("#select-agenda option:selected").val()+'&status='+$("#select-status option:selected").val()+'&uidAccount='+decodeOwner(), 4009 success: function(msg){ 4010 var alt = ( (msg = connector.unserialize(msg)) == "ok") ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento para a agenda "; 4011 alert( alt + $("#select-agenda option:selected").text() ); 4012 } 4013 }); 4014 $( this ).dialog( "close" ); 4015 } 4016 } 4017 }); 4018 4019 if(typeImport == 7){ 4020 $("#import-dialog").find('#select-status option[value=1]').attr('selected','selected').trigger('change'); 4021 $("#import-dialog").find('#select-status').attr('disabled','disabled'); 4022 } 4023 break; 4024 case 3: 4025 $.ajax({ 4026 url: "controller.php?action="+import_url+'&from_ajax=true&selected=true', 4027 success: function(msg){ 4028 alert( ( ( connector.unserialize(msg)) == "ok") ? "Seu evento foi removido " : "Ocorreu um erro ao remover o evento" ); 4029 } 4030 }); 4031 return; 4032 break; 4033 case 5: 4034 $.ajax({ 4035 url: "controller.php?action="+import_url+'&from_ajax=true&selected=true', 4036 success: function(msg){ 4037 alert( ( ( connector.unserialize(msg)) == "ok") ? "Seu evento foi Atualizado com sucesso" : "Ocorreu um erro ao atualizar evento" ); 4038 } 4039 }); 4040 return; 4041 break; 4042 case 6: 4043 var acceptedSuggestion = confirm("Deseja atualizar o evento de acordo com a sugestão ?"); 4044 $.ajax({ 4045 url: "controller.php?action="+import_url+'&from_ajax=true&id_user='+User.me.id+'&selected=true&cirus_delimiter='+cyrus_delimiter+'&acceptedSuggestion='+acceptedSuggestion+"&from="+document.getElementById('from_values_'+currentTab).value+'&uidAccount='+decodeOwner(), 4046 success: function(msg){ 4047 if(acceptedSuggestion) 4048 alert( ( ( connector.unserialize(msg)) == "ok") ? "Evento atualizado com sucesso " : "Ocorreu um erro ao atualizar o evento" ); 4049 } 4050 }); 4051 return; 4052 break; 4053 case 9: 4054 alert('Seu evento não possui alterações!'); 4055 return; 4056 break; 4057 case 11: 4058 alert('Este evento já fora importando por algum dos particpantes e já se encontra disponível em sua agenda compartilhada!'); 4059 return; 4060 break; 4061 default: 4062 up = true; 4063 $("#select-agenda").css("display", "none"); 4064 $("#import-dialog" ).children("p:first-child").css("display", "none"); 4065 $("#import-dialog" ).dialog({ 4066 height: 160, 4067 title: 'Atualizar Evento', 4068 buttons: { 4069 Cancel: function() { 4070 $( this ).dialog( "close" ); 4071 }, 4072 "Atualizar": function() { 4073 4074 $.ajax({ 4075 url: "controller.php?action="+import_url+'&from_ajax=true&cirus_delimiter='+cyrus_delimiter+'&selected='+ (parseInt(typeImport) == 2 || parseInt(typeImport) == 4 ? 'true' : $("#select-agenda option:selected").val()) +'&status='+$("#select-status option:selected").val()+'&uidAccount='+decodeOwner(), 4076 success: function(msg){ 4077 alert( ( (msg = connector.unserialize(msg)) == "ok") ? "Atualizado com sucesso para " : "Ocorreu um erro ao atualizar o evento" ); 4078 } 4079 }); 4080 $( this ).dialog( "close" ); 4081 } 4082 }, 4083 close:function(event, ui) 4084 { 4085 if(typeof(shortcut) != 'undefined') shortcut.disabled = false; 4086 }, 4087 open: function(event, ui) 4088 { 4089 if(typeof(shortcut) != 'undefined') shortcut.disabled = true; 4090 } 4091 }); 4092 $(".ui-dialog-buttonpane").find(".ui-button:last").children().html("Atualizar"); 4485 }, 4486 close:function(event, ui) 4487 { 4488 if(typeof(shortcut) != 'undefined') shortcut.disabled = false; 4489 }, 4490 open: function(event, ui) 4491 { 4492 if(typeof(shortcut) != 'undefined') shortcut.disabled = true; 4093 4493 } 4094 $( "#import-dialog" ).dialog( "open" ); 4095 4096 }; 4097 createDialog(data, true); 4098 4099 }, 4100 beforeSend: function( jqXHR, settings ){ 4101 connector.showProgressBar(); 4102 }, 4103 complete: function( jqXHR, settings ){ 4104 connector.hideProgressBar(); 4105 } 4106 }); 4107 4108 } 4109 else 4110 { 4111 if(confirm(get_lang("Do you confirm this import to your Calendar?"))){ 4112 cExecute( import_url + "&from_ajax=true", handler_import_calendar); 4113 } 4114 } 4115 } 4494 }); 4495 $(".ui-dialog-buttonpane").find(".ui-button:last").children().html("Atualizar"); 4496 } 4497 $( "#import-dialog" ).dialog( "open" ); 4498 4499 }; 4500 createDialog(data, true); 4501 4502 }, 4503 beforeSend: function( jqXHR, settings ){ 4504 connector.showProgressBar(); 4505 }, 4506 complete: function( jqXHR, settings ){ 4507 connector.hideProgressBar(); 4508 } 4509 }); 4510 } 4511 else 4512 { 4513 if(confirm(get_lang("Do you confirm this import to your Calendar?"))){ 4514 cExecute( import_url + "&from_ajax=true", handler_import_calendar); 4515 } 4516 } 4517 } 4518 4116 4519 function open_msg_part(data){ 4117 4520 var handler_open_msg_part = function (data) … … 4193 4596 4194 4597 function create_new_folder(name_folder, base_path){ 4598 //Limit reached folders 4599 if(preferences.imap_max_folders){ 4600 if(cp_tree1.length == parseInt(preferences.imap_max_folders)){ 4601 $(".folders-loading").removeClass("folders-loading"); 4602 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 4603 return write_msg(get_lang("Limit reached folders")); 4604 } 4605 } 4606 4195 4607 $.ajax({ 4196 4608 url : "controller.php?action=$this.imap_functions.create_mailbox", … … 4202 4614 if(data == "Mailbox already exists"){ 4203 4615 write_msg(get_lang("Mailbox already exists")); 4616 }else if(data.substring(data.indexOf("Permission"), data.length) == "Permission denied"){ 4617 $(".folders-loading").removeClass("folders-loading"); 4618 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 4619 return write_msg(get_lang("Permission denied")); 4204 4620 } 4205 4621 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); … … 4336 4752 } 4337 4753 4754 /* 4755 * @author Marcos Luiz Wilhelm (marcoswilhelm@gmail.com) 4756 * @date 2012/07/17 4757 * @brief Break out emails only with comma out of quote marks 4758 */ 4759 function break_comma (originalText){ 4760 var quotesMarks = false; 4761 var completeString = ""; 4762 var brokenEmails = new Array(); 4763 originalText+=","; 4764 for(i=0; i<originalText.length; i++){ 4765 var character = originalText.substr(i,1); 4766 if(character == "\""){ 4767 quotesMarks = !quotesMarks; 4768 } 4769 if(!quotesMarks){ 4770 if(character == ","){ 4771 brokenEmails.push(completeString); 4772 completeString = ""; 4773 } 4774 else 4775 completeString+=character; 4776 } 4777 else 4778 completeString+=character; 4779 } 4780 return brokenEmails; 4781 } 4782 4338 4783 DataLayer.links('message'); 4339 4784 DataLayer.poll('message',30);
Note: See TracChangeset
for help on using the changeset viewer.