PageRenderTime 549ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/pkg/vtiger/modules/MailManager/modules/MailManager/MailManager.js

https://bitbucket.org/thomashii/vtigercrm-6-for-postgresql
JavaScript | 1750 lines | 1447 code | 208 blank | 95 comment | 224 complexity | 2d6de1f363f241469005632cc40e3f48 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0, LGPL-2.1, GPL-2.0, GPL-3.0

Large files files are truncated, but you can click here to view the full file

  1. /*+**********************************************************************************
  2. * The contents of this file are subject to the vtiger CRM Public License Version 1.1
  3. * ("License"); You may not use this file except in compliance with the License
  4. * The Original Code is: vtiger CRM Open Source
  5. * The Initial Developer of the Original Code is vtiger.
  6. * Portions created by vtiger are Copyright (C) vtiger.
  7. * All Rights Reserved.
  8. ************************************************************************************/
  9. if (typeof(MailManager) == 'undefined') {
  10. /*
  11. * Namespaced javascript class for MailManager
  12. */
  13. MailManager = {
  14. MailManagerUploadLimit : 6,
  15. /*
  16. * Utility function
  17. * Usage:
  18. * var output = MailManager.sprintf("String format %s, Number format %s", "VALUE", 10);
  19. */
  20. sprintf: function(){
  21. var printString = arguments[0];
  22. for (var i = 1; i < arguments.length; ++i) {
  23. // Replace any %s, %d, %c with the variables.
  24. // TODO Format the argument w.r.t to format specifier
  25. printString = printString.replace(/(%[a-z]+)/, arguments[i]);
  26. }
  27. return printString;
  28. },
  29. /*
  30. * Progress indicator handlers.
  31. */
  32. progress_show: function(msg, suffix){
  33. if (typeof(suffix) == 'undefined')
  34. suffix = '';
  35. VtigerJS_DialogBox.block();
  36. if (typeof(msg) != 'undefined')
  37. jQuery('#_progressmsg_').html(msg + suffix.toString());
  38. jQuery('#_progress_').show();
  39. },
  40. progress_hide: function(){
  41. VtigerJS_DialogBox.unblock();
  42. jQuery('#_progressmsg_').html('');
  43. jQuery('#_progress_').hide();
  44. },
  45. /* Show error message */
  46. show_error: function(message){
  47. var errordiv = jQuery('#_messagediv_');
  48. if (message == '') {
  49. errordiv.text('').hide();
  50. } else {
  51. errordiv.html('<p>' + message + '</p>').css('display','block').addClass('mm_error').removeClass('mm_message');
  52. MailManager.placeAtCenter(errordiv);
  53. }
  54. MailManager.hide_error();
  55. },
  56. hide_error: function() {
  57. setTimeout( function() {
  58. jQuery('#_messagediv_').hide();
  59. }, 5000);
  60. },
  61. show_message: function(message){
  62. var errordiv = jQuery('#_messagediv_');
  63. if (message == '') {
  64. errordiv.text('').hide();
  65. } else {
  66. errordiv.html('<p>' + message + '</p>').css('display','block').removeClass('mm_error').addClass('mm_message');
  67. MailManager.placeAtCenter(errordiv);
  68. }
  69. MailManager.hide_error();
  70. },
  71. /* Base url for any ajax actions */
  72. _baseurl: function(){
  73. return "module=MailManager&action=MailManagerAjax&file=index&mode=ajax&";
  74. },
  75. /* Translation support */
  76. i18n: function(key){
  77. if (typeof(MailManageri18nInfo) != 'undefined')
  78. return MailManageri18nInfo[key];
  79. if (typeof(alert_arr) != 'undefined' && alert_arr[key])
  80. return alert_arr[key];
  81. return key;
  82. },
  83. /* Build the main ui */
  84. mainui: function(){
  85. MailManager.openCurrentFolder();
  86. setTimeout(function() {
  87. jQuery("#_folderprogress_").show();
  88. MailManager.mail_open_meta = {};
  89. if (MailManager.mail_reply_rteinstance) {
  90. MailManager.mail_reply_rteinstance.destroy();
  91. MailManager.mail_reply_rteinstance = false;
  92. }
  93. MailManager.progress_show(MailManager.i18n('JSLBL_Loading_Please_Wait'), '...');
  94. new Ajax.Request('index.php', {
  95. method: 'post',
  96. postBody: MailManager._baseurl() + "_operation=mainui",
  97. onComplete: function(transport){
  98. var response = MailManager.removeHidElement(transport.responseText);
  99. response = JSON.parse(response);
  100. MailManager._mainui_callback(response);
  101. jQuery("#_folderprogress_").hide();
  102. var timeOut = jQuery("#refresh_timeout").val();
  103. if(timeOut != "" && timeOut !=0) {
  104. setInterval(MailManager.updateMailFolders, timeOut);
  105. }
  106. // Update the seleted folders to highlight them.
  107. var folderName = jQuery('#mm_selected_folder').val();
  108. MailManager.updateSelectedFolder(folderName);
  109. }
  110. });
  111. }, 400);
  112. },
  113. openCurrentFolder : function() {
  114. if(jQuery("#mailbox_folder")) {
  115. var currentFolder = jQuery("#mailbox_folder").val();
  116. // This is added as we will be settings mailbox_folder with the current selected folder.
  117. // By this time we would have lost the last mailbox folder also
  118. if(currentFolder == 'mm_drafts') currentFolder = 'INBOX';
  119. if(currentFolder) {
  120. MailManager.folder_open(currentFolder);
  121. }else {
  122. MailManager.folder_open('INBOX');
  123. }
  124. } else {
  125. MailManager.folder_open('INBOX');
  126. }
  127. },
  128. updateMailFolders : function() {
  129. new Ajax.Request('index.php', {
  130. method: 'post',
  131. postBody: MailManager._baseurl() + "_operation=mainui",
  132. onComplete: function(transport){
  133. var response = MailManager.removeHidElement(transport.responseText);
  134. response = JSON.parse(response);
  135. jQuery('#_mainfolderdiv_').html(response['result']['ui']);
  136. MailManager.refreshCurrentFolder(); // this is used to refresh the mails in the folders
  137. var folderName = jQuery('#mm_selected_folder').val();
  138. MailManager.updateSelectedFolder(folderName);
  139. MailManager.triggerUI5Resize();
  140. }
  141. });
  142. },
  143. quicklinks_update: function() {
  144. new Ajax.Request('index.php', {
  145. method: 'post',
  146. postBody: MailManager._baseurl() + "_operation=mainui&_operationarg=_quicklinks",
  147. onComplete: function(transport){
  148. var response = MailManager.removeHidElement(transport.responseText);
  149. response = JSON.parse(response);
  150. jQuery("#_quicklinks_mainuidiv_").html(response['result']['ui']);
  151. }
  152. });
  153. },
  154. /* Intermedidate call back to build main ui */
  155. _mainui_callback: function(responseJSON){
  156. MailManager.progress_hide();
  157. jQuery('#_mainfolderdiv_').html(responseJSON['result']['ui']);
  158. if (!responseJSON['result']['mailbox']) {
  159. MailManager.open_settings();
  160. }
  161. MailManager.triggerUI5Resize();
  162. },
  163. moveMail : function(element) {
  164. function execute() {
  165. var temp = new Array();
  166. function getCheckedMails() {
  167. var cb_elements = jQuery('[name="mc_box"]');
  168. for (var i = 0; i < cb_elements.length; i++) {
  169. if (cb_elements[i].checked) {
  170. temp.push(cb_elements[i].value);
  171. }
  172. }
  173. }
  174. function validate() {
  175. getCheckedMails(); // Check the selected mails
  176. if(temp.length < 1) {
  177. MailManager.show_error(MailManager.i18n('JSLBL_PLEASE_SELECT_ATLEAST_ONE_MAIL'));
  178. MailManager.resetFolderDropDown();
  179. return false;
  180. }
  181. return true;
  182. }
  183. function callbackFunction(response) {
  184. for(var i = 0; i<temp.length; i++){
  185. jQuery("#_mailrow_"+temp[i]).fadeOut(1500,function() {
  186. jQuery("#_mailrow_"+temp[i]).remove();
  187. });
  188. }
  189. }
  190. if(validate()) {
  191. MailManager.progress_show(MailManager.i18n('JSLBL_MOVING'), '...');
  192. VtigerJS_DialogBox.block();
  193. var moveToFolderName = jQuery("#moveFolderList").val();
  194. var currentFolderName = jQuery("#mailbox_folder").val();
  195. var params = {
  196. '_operation': 'mail',
  197. '_operationarg' : 'move',
  198. '_msgno' : encodeURIComponent(temp),
  199. '_folder' : encodeURIComponent(currentFolderName),
  200. '_moveFolder' : moveToFolderName.replace('�','')
  201. };
  202. MailManager.Request('index.php?'+MailManager._baseurl() , params, callbackFunction).
  203. then( function () {
  204. MailManager.folder_open(currentFolderName);
  205. MailManager.progress_hide();
  206. MailManager.show_error(MailManager.i18n('JSLBL_MAIL_MOVED'));
  207. });
  208. }
  209. }
  210. execute();
  211. },
  212. /* Refresh the main ui */
  213. reload_now: function(){
  214. MailManager.mainui();
  215. },
  216. /* Close all the div */
  217. close_all: function(){
  218. if (jQuery('#_contentdiv_')) jQuery('#_contentdiv_').hide();
  219. if (jQuery('#_contentdiv2_')) jQuery('#_contentdiv2_').hide();
  220. if (jQuery('#_messagediv_')) jQuery('#_messagediv_').hide();
  221. if (jQuery('#_settingsdiv_')) jQuery('#_settingsdiv_').hide();
  222. if (jQuery('#_replydiv_')) jQuery('#_replydiv_').hide();
  223. },
  224. /* Open settings page */
  225. open_settings: function(){
  226. MailManager.progress_show(MailManager.i18n('JSLBL_Settings')+ '...');
  227. new Ajax.Request('index.php', {
  228. method: 'post',
  229. postBody: MailManager._baseurl() + "_operation=settings&_operationarg=edit",
  230. onComplete: function(transport){
  231. MailManager.progress_hide();
  232. MailManager.close_all();
  233. jQuery('#_settingsdiv_').show();
  234. var response = MailManager.removeHidElement(transport.responseText);
  235. jQuery('#_settingsdiv_').html(response);
  236. // Update the seleted folders to highlight them.
  237. MailManager.updateSelectedFolder('mm_settings');
  238. jQuery('#mm_selected_folder').val('mm_settings');
  239. MailManager.triggerUI5Resize();
  240. }
  241. });
  242. },
  243. handle_settings_confighelper: function(selectBox){
  244. var form = selectBox.form;
  245. var useServer = '', useProtocol = '', useSSLType = '', useCert = '';
  246. if (selectBox.value == 'gmail' || selectBox.value == 'yahoo') {
  247. useServer = 'imap.gmail.com';
  248. if(selectBox.value == 'yahoo') {
  249. useServer = 'imap.mail.yahoo.com';
  250. }
  251. useProtocol = 'IMAP4';
  252. useSSLType = 'ssl';
  253. useCert = 'novalidate-cert';
  254. jQuery('#settings_details').show();
  255. jQuery('#additional_settings').hide();
  256. } else if (selectBox.value == 'fastmail') {
  257. useServer = 'mail.messagingengine.com';
  258. useProtocol = 'IMAP2';
  259. useSSLType = 'tls';
  260. useCert = 'novalidate-cert';
  261. jQuery('#settings_details').show();
  262. jQuery('#additional_settings').hide();
  263. } else if (selectBox.value == 'other') {
  264. useServer = '';
  265. useProtocol = 'IMAP4';
  266. useSSLType = 'ssl';
  267. useCert = 'novalidate-cert';
  268. jQuery('#settings_details').show();
  269. jQuery('#additional_settings').show();
  270. } else {
  271. jQuery('#settings_details').hide();
  272. }
  273. // Clear the User Name and Password field
  274. jQuery('#_mbox_user').val('');
  275. jQuery('#_mbox_pwd').val('');
  276. if (useProtocol != '') {
  277. form._mbox_server.value = useServer;
  278. $A(form._mbox_protocol).each(function(node){
  279. node.checked = (node.value == useProtocol);
  280. });
  281. $A(form._mbox_ssltype).each(function(node){
  282. node.checked = (node.value == useSSLType);
  283. });
  284. $A(form._mbox_certvalidate).each(function(node){
  285. node.checked = (node.value == useCert);
  286. });
  287. }
  288. },
  289. /* Save the settings */
  290. save_settings: function(form){
  291. if(form._mbox_server.value == "") {
  292. MailManager.show_error(MailManager.i18n('JSLBL_SERVERNAME_CANNOT_BE_EMPTY'));
  293. return false;
  294. }
  295. if(form._mbox_user.value == "") {
  296. MailManager.show_error(MailManager.i18n('JSLBL_USERNAME_CANNOT_BE_EMPTY'));
  297. return false;
  298. }
  299. if(form._mbox_pwd.value == "") {
  300. MailManager.show_error(MailManager.i18n('JSLBL_PASSWORD_CANNOT_BE_EMPTY'));
  301. return false;
  302. }
  303. MailManager.progress_show(MailManager.i18n('JSLBL_Saving_And_Verifying'), '...');
  304. new Ajax.Request('index.php', {
  305. method: 'post',
  306. postBody: MailManager._baseurl() + "_operation=settings&_operationarg=save&" + Form.serialize(form),
  307. onComplete: function(transport){
  308. MailManager.progress_hide();
  309. var response = MailManager.removeHidElement(transport.responseText);
  310. var responseJSON = JSON.parse(response);
  311. if (responseJSON['success']) {
  312. MailManager.quicklinks_update();
  313. MailManager.folder_open('INBOX');
  314. MailManager.mainui();
  315. } else {
  316. MailManager.show_error(responseJSON['error']['message']);
  317. }
  318. }
  319. });
  320. },
  321. /* Remove the settings */
  322. remove_settings: function(form){
  323. MailManager.progress_show(MailManager.i18n('JSLBL_Removing'), '...');
  324. new Ajax.Request('index.php', {
  325. method: 'post',
  326. postBody: MailManager._baseurl() + "_operation=settings&_operationarg=remove&" + Form.serialize(form),
  327. onComplete: function(transport){
  328. MailManager.progress_hide();
  329. MailManager.close_all();
  330. var response = MailManager.removeHidElement(transport.responseText);
  331. var responseJSON = JSON.parse(response);
  332. if (responseJSON['success']) {
  333. MailManager.reload_now();
  334. } else {
  335. MailManager.show_error(responseJSON['error']['message']);
  336. }
  337. }
  338. });
  339. },
  340. /* Close the settings */
  341. close_settings: function(){
  342. MailManager.close_all();
  343. jQuery('#_contentdiv_').show();
  344. // Toggle highlighting previous folder and current folder selection
  345. var folderName = jQuery('#mailbox_folder').val();
  346. MailManager.updateSelectedFolder(folderName);
  347. jQuery('#mm_selected_folder').val(folderName);
  348. },
  349. /* Open the folder listing */
  350. folder_open: function(name, page){
  351. if (typeof(page) == 'undefined')
  352. page = 0;
  353. var query = "";
  354. // Consider search string too
  355. if(jQuery('#search_txt').val()) {
  356. query = "&q=" +encodeURIComponent(jQuery('#search_txt').val());
  357. }
  358. if(jQuery('#search_type').val()) {
  359. query += "&type=" + encodeURIComponent(jQuery('#search_type').val());
  360. }
  361. MailManager.progress_show(MailManager.i18n('JSLBL_Loading'), ' ' + name + '...');
  362. new Ajax.Request('index.php', {
  363. method: 'post',
  364. postBody: MailManager._baseurl() + "_operation=folder&_operationarg=open&_folder=" + encodeURIComponent(name) +
  365. "&_page=" + encodeURIComponent(page) + query,
  366. onComplete: function(transport){
  367. MailManager.progress_hide();
  368. // Toggle highlighting previous folder and current folder selection
  369. MailManager.updateSelectedFolder(name);
  370. // Update the selected MailBox folder name
  371. jQuery('#mailbox_folder').val(name);
  372. // Update the current selected folder, which will be used to highlight the selected folder
  373. jQuery('#mm_selected_folder').val(name);
  374. MailManager.mail_close();
  375. var response = MailManager.removeHidElement(transport.responseText);
  376. jQuery('#_contentdiv_').html(response);
  377. // Clear last open mail
  378. jQuery('#_contentdiv2_').html('');
  379. // Updates the drop down used for move emails
  380. MailManager.updateMoveFolderList();
  381. // Bind "Enter" key for search on the Search text box
  382. MailManager.bindEnterKeyForSearch();
  383. var type = jQuery('#search_type').val();
  384. var dateformat = jQuery('#jscal_dateformat').val();
  385. if(type == 'ON') {
  386. if(jQuery('#search_txt').length != 0) {
  387. jQuery('#jscal_trigger_fval').show();
  388. Calendar.setup ({
  389. inputField : 'search_txt',
  390. ifFormat : dateformat,
  391. button : "jscal_trigger_fval",
  392. singleClick : true,
  393. step : 1
  394. });
  395. }
  396. }
  397. MailManager.triggerUI5Resize();
  398. }
  399. });
  400. },
  401. updateSelectedFolder : function(currentSelectedFolder) {
  402. var prevFolderName = jQuery('#mm_selected_folder').val();
  403. if (jQuery('[id="_mailfolder_' + prevFolderName +'"]') && prevFolderName != currentSelectedFolder) {
  404. jQuery('[id="_mailfolder_' + prevFolderName +'"]').removeClass('mm_folder_selected');
  405. jQuery('[id="_mailfolder_' + prevFolderName +'"]').parent().removeClass('mm_folder_selected_background');
  406. }
  407. jQuery('[id="_mailfolder_'+ currentSelectedFolder +'"]').addClass('mm_folder_selected');
  408. jQuery('[id="_mailfolder_'+ currentSelectedFolder +'"]').parent().addClass('mm_folder_selected_background');
  409. },
  410. bindEnterKeyForSearch : function() {
  411. jQuery("#search_txt").keyup(function (event) {
  412. if(event.keyCode == 13){
  413. jQuery("#mm_search").click();
  414. }
  415. });
  416. },
  417. updateMoveFolderList : function() {
  418. if(jQuery('#mailbox_folder') && jQuery('#moveFolderList')) {
  419. var currentFolder = jQuery('#mailbox_folder').val();
  420. jQuery('#moveFolderList').find("option[value='"+currentFolder+"']").remove();
  421. }
  422. },
  423. refreshCurrentFolder: function(){
  424. var selectedFolder = jQuery('#mm_selected_folder').val();
  425. var currentFolderName = jQuery("#mailbox_folder").val();
  426. //check if the mail is open
  427. var mail = jQuery('#_contentdiv2_').css('display');
  428. if(selectedFolder == currentFolderName && currentFolderName !='mm_drafts' && mail != 'block') {
  429. MailManager.folder_open(currentFolderName, 0);
  430. }
  431. },
  432. /* Update count of unread mails on folder */
  433. folder_updateCount: function(folder, count){
  434. if (jQuery('#_mailfolder_' + folder)) {
  435. if (count) {
  436. jQuery('#_mailfolder_' + folder).addClass('mm_folder_selected').html(MailManager.sprintf("<b>%s (%s)</b>", folder, count));
  437. } else {
  438. jQuery('#_mailfolder_' + folder).addClass('mm_folder_selected').html(MailManager.sprintf("%s", folder));
  439. }
  440. }
  441. },
  442. /* Basic search for folder emails */
  443. search_basic: function(form){
  444. var frmparams = Form.serialize(form);
  445. MailManager.progress_show(MailManager.i18n('JSLBL_Searching'), ' ...');
  446. new Ajax.Request('index.php', {
  447. method: 'post',
  448. postBody: MailManager._baseurl() + "_operation=folder&_operationarg=open&" + frmparams,
  449. onComplete: function(transport){
  450. MailManager.progress_hide();
  451. MailManager.mail_close();
  452. var response = MailManager.removeHidElement(transport.responseText);
  453. jQuery('#_contentdiv_').html(response);
  454. MailManager.triggerUI5Resize();
  455. }
  456. });
  457. return false;
  458. },
  459. // Meta information of currently opened mail
  460. mail_open_meta: {},
  461. /* Open email */
  462. mail_open: function(folder, msgno){
  463. MailManager.progress_show(MailManager.i18n('JSLBL_Opening'), ' ...');
  464. jQuery('#_mailrow_' + msgno).removeClass('mm_bold');
  465. jQuery('#_mailrow_' + msgno).addClass('mm_normal');
  466. new Ajax.Request('index.php', {
  467. method: 'post',
  468. postBody: MailManager._baseurl() + "_operation=mail&_operationarg=open&_folder=" + encodeURIComponent(folder) + "&_msgno=" + encodeURIComponent(msgno),
  469. onComplete: function(transport){
  470. MailManager.progress_hide();
  471. var response = MailManager.removeHidElement(transport.responseText);
  472. var responseJSON = JSON.parse(response);
  473. var resultJSON = responseJSON['result'];
  474. if (!resultJSON['ui']) {
  475. MailManager.show_error(MailManager.i18n('JSLBL_Failed_To_Open_Email'));
  476. return;
  477. }
  478. MailManager.close_all();
  479. jQuery('#_contentdiv2_').show();
  480. jQuery('#_contentdiv2_').html(resultJSON['ui']);
  481. MailManager.mail_open_meta = resultJSON['meta'];
  482. var folderName = resultJSON['folder'];
  483. // Update folder count on UI
  484. MailManager.folder_updateCount(folderName, resultJSON['unread']);
  485. MailManager.mail_find_relationship();
  486. }
  487. });
  488. },
  489. /* Close email */
  490. mail_close: function(){
  491. MailManager.close_all();
  492. jQuery('#_contentdiv_').show();
  493. MailManager.mail_open_meta = {};
  494. },
  495. /* Mark mail as read */
  496. mail_mark_unread: function(folder, msgno){
  497. MailManager.progress_show(MailManager.i18n('JSLBL_Updating'), ' ...');
  498. new Ajax.Request('index.php', {
  499. method: 'post',
  500. postBody: MailManager._baseurl() + "_operation=mail&_operationarg=mark&_markas=unread&_folder=" + encodeURIComponent(folder) + "&_msgno=" + encodeURIComponent(msgno),
  501. onComplete: function(transport){
  502. MailManager.progress_hide();
  503. var response = MailManager.removeHidElement(transport.responseText);
  504. var responseJSON = JSON.parse(response);
  505. var resultJSON = responseJSON['result'];
  506. if (responseJSON && resultJSON['status']) {
  507. MailManager.mail_close();
  508. var msgno = resultJSON['msgno'];
  509. jQuery('#_mailrow_' + msgno).removeClass('mm_normal');
  510. jQuery('#_mailrow_' + msgno).addClass('mm_bold');
  511. MailManager.folder_updateCount(resultJSON['folder'], resultJSON['unread']);
  512. }
  513. }
  514. });
  515. },
  516. /*Print email */
  517. mail_print: function(){
  518. var subject = jQuery('#_mailopen_subject').html();
  519. var from = jQuery('#_mailopen_from').html();
  520. var to = jQuery('#_mailopen_to').html();
  521. var cc = jQuery('#_mailopen_cc') ? jQuery('#_mailopen_cc').html() : '';
  522. var date = jQuery('#_mailopen_date').html();
  523. var body = jQuery('#_mailopen_body').html();
  524. var content = window.open();
  525. content.document.write("<b>"+subject+"</b><br>");
  526. content.document.write("<br>From :" +from +"<br>");
  527. content.document.write("To :" +to+"<br>");
  528. cc == null ? '' : content.document.write("CC :" +cc+"<br>");
  529. content.document.write("Date :" + date+"<br>");
  530. content.document.write("<br>"+body +"<br>");
  531. content.print();
  532. },
  533. /* Lookup for mail relations in CRM */
  534. mail_find_relationship: function(){
  535. jQuery('#_mailrecord_findrel_btn_').html(MailManager.i18n('JSLBL_Finding_Relation') + '...');
  536. jQuery("#_mailrecord_findrel_btn_").attr('disabled', true);
  537. var meta = MailManager.mail_open_meta;
  538. new Ajax.Request('index.php', {
  539. method: 'post',
  540. postBody: MailManager._baseurl() + "_operation=relation&_operationarg=find&_mfrom=" + encodeURIComponent(meta['from']) +
  541. '&_folder=' +
  542. encodeURIComponent(meta['folder']) +
  543. '&_msgno=' +
  544. encodeURIComponent(meta['msgno']) +
  545. '&_msguid=' +
  546. encodeURIComponent(meta['msguid'].replace('<', '&lt;').replace('>', '&gt;')),
  547. onComplete: function(transport){
  548. jQuery('#_mailrecord_findrel_btn_').html(MailManager.i18n('JSLBL_Find_Relation_Now'));
  549. jQuery("#_mailrecord_findrel_btn_").attr('disabled', false);
  550. jQuery('#_mailrecord_findrel_btn_').hide();
  551. var response = MailManager.removeHidElement(transport.responseText);
  552. var responseJSON = JSON.parse(response);
  553. var resultJSON = responseJSON['result'];
  554. jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
  555. MailManager.triggerUI5Resize();
  556. }
  557. });
  558. },
  559. /* Associate email to CRM record */
  560. mail_associate: function(form){
  561. var frmparams = Form.serialize(form);
  562. // No record is selected for linking?
  563. if (frmparams.indexOf('_mlinkto') == -1)
  564. return;
  565. MailManager.progress_show(MailManager.i18n('JSLBL_Associating'), ' ...');
  566. new Ajax.Request('index.php', {
  567. method: 'post',
  568. postBody: MailManager._baseurl() + "_operation=relation&_operationarg=link&" + frmparams,
  569. onComplete: function(transport){
  570. MailManager.progress_hide();
  571. var response = MailManager.removeHidElement(transport.responseText);
  572. var responseJSON = JSON.parse(response);
  573. var resultJSON = responseJSON['result'];
  574. if (resultJSON['ui']) {
  575. jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
  576. }
  577. MailManager.triggerUI5Resize();
  578. }
  579. });
  580. },
  581. /* Extended support for creating and linking */
  582. mail_associate_create_wizard: function(form){
  583. if (form._mlinktotype.value == '') {
  584. MailManager.mail_associate_create_cancel();
  585. return;
  586. }
  587. var frmparams = Form.serialize(form);
  588. MailManager.progress_show(MailManager.i18n('JSLBL_Loading'), ' ...');
  589. new Ajax.Request('index.php', {
  590. method: 'post',
  591. postBody: MailManager._baseurl() + "_operation=relation&_operationarg=create_wizard&" + frmparams,
  592. onComplete: function(transport){
  593. MailManager.progress_hide();
  594. var response = MailManager.removeHidElement(transport.responseText);
  595. jQuery('#_relationpopupdiv_').get(0).innerHTML = (response);
  596. var scriptTags = $("_relationpopupdiv_").getElementsByTagName("script");
  597. for(var i = 0; i< scriptTags.length; i++){
  598. var scriptTag = scriptTags[i];
  599. eval(scriptTag.innerHTML);
  600. }
  601. // Place the popup at center
  602. MailManager.placeAtCenter(jQuery('#_relationpopupdiv_'));
  603. jQuery('#_relationpopupdiv_').css('visibility', '').show();
  604. //Make it Dragable
  605. jQuery('#_relationpopupdiv_').draggable().css('cursor','move');
  606. }
  607. });
  608. },
  609. /* This will be used to perform actions on mails with an Linked record*/
  610. mail_associate_actions : function(form) {
  611. var selected = false;
  612. if(form._mlinkto.length != undefined) {
  613. for(i=0; i<form._mlinkto.length; i++) {
  614. if(form._mlinkto[i].checked) {
  615. selected = true;
  616. }
  617. }
  618. } else {
  619. if(form._mlinkto && form._mlinkto.checked) {
  620. selected = true;
  621. } else {
  622. form._mlinkto.checked = true;
  623. selected = true;
  624. }
  625. }
  626. // No record is selected for linking?
  627. if (selected == false) {
  628. MailManager.show_error(MailManager.i18n('JSLBL_PLEASE_SELECT_ATLEAST_ONE_RECORD'));
  629. MailManager.resetLinkToDropDown();
  630. return false;
  631. }
  632. if(form._mlinktotype.value == 'Emails') {
  633. MailManager.mail_associate(form);
  634. } else if(form._mlinktotype.value == 'ModComments') {
  635. MailManager.showCommentWidget(form);
  636. } else {
  637. MailManager.mail_associate_create_wizard(form);
  638. }
  639. },
  640. mail_associate_create_cancel: function(){
  641. jQuery('#_relationpopupdiv_').hide();
  642. MailManager.resetLinkToDropDown();
  643. },
  644. mail_associate_create: function(form){
  645. //this is needed as there will be additional module & action element in quickcreate form
  646. jQuery("form[name='QcEditView']").children("input[name='module']").remove();
  647. jQuery("form[name='QcEditView']").children("input[name='action']").remove();
  648. var frmparams = Form.serialize(form);
  649. MailManager.progress_show(MailManager.i18n('JSLBL_Associating'), ' ...');
  650. new Ajax.Request('index.php', {
  651. method: 'post',
  652. postBody: MailManager._baseurl() + "_operation=relation&_operationarg=create&" + frmparams,
  653. onComplete: function(transport){
  654. MailManager.progress_hide();
  655. var response = MailManager.removeHidElement(transport.responseText);
  656. var responseJSON = JSON.parse(response);
  657. var resultJSON = responseJSON['result'];
  658. if (resultJSON['ui']) {
  659. MailManager.mail_associate_create_cancel();
  660. jQuery('#_mailrecord_relationshipdiv_').html(resultJSON['ui']);
  661. MailManager.triggerUI5Resize();
  662. return true;
  663. }
  664. }
  665. });
  666. },
  667. // function to show the comment widget
  668. showCommentWidget : function(form) {
  669. var frmparams = Form.serialize(form);
  670. MailManager.progress_show();
  671. new Ajax.Request('index.php', {
  672. method: 'post',
  673. postBody: MailManager._baseurl() + "_operation=relation&_operationarg=commentwidget&" + frmparams,
  674. onComplete: function(transport){
  675. MailManager.progress_hide();
  676. var response = MailManager.removeHidElement(transport.responseText);
  677. MailManager.mail_associate_create_cancel();
  678. jQuery('#_relationpopupdiv_').html(response).css('visibility', '').show();
  679. // Place the popup at the center
  680. MailManager.placeAtCenter(jQuery('#_relationpopupdiv_'));
  681. // Make it draggable
  682. jQuery('#_relationpopupdiv_').draggable().css('cursor','move');
  683. MailManager.triggerUI5Resize();
  684. }
  685. });
  686. },
  687. addCommentValidate : function(form) {
  688. var comment = jQuery.trim(jQuery(form.commentcontent).val());
  689. if(comment == '') {
  690. MailManager.show_error(MailManager.i18n('JSLBL_CANNOT_ADD_EMPTY_COMMENT'));
  691. return false;
  692. }
  693. return true;
  694. },
  695. // Place an element at the center of the page
  696. placeAtCenter : function(element) {
  697. element.css("position","absolute");
  698. element.css("top", ((jQuery(window).height() - element.outerHeight()) / 2) + jQuery(window).scrollTop() + "px");
  699. element.css("left", ((jQuery(window).width() - element.outerWidth()) / 2) + jQuery(window).scrollLeft() + "px");
  700. },
  701. /* Compose new mail */
  702. mail_compose: function(){
  703. MailManager.close_all();
  704. jQuery('#_replydiv_').html(jQuery('#replycontentdiv').html());
  705. jQuery('#_replydiv_').show();
  706. jQuery("#_mail_replyfrm_to_").val('');
  707. jQuery("#_mail_replyfrm_cc_").val('');
  708. jQuery("#_mail_replyfrm_bcc_").val('');
  709. jQuery("#_mail_replyfrm_subject_").val('');
  710. jQuery("#emailid").val('');
  711. jQuery('.qq-upload-list').children().remove();
  712. jQuery('#attachments').children().remove();
  713. jQuery('#attachmentCount').val('');
  714. if (MailManager.mail_reply_rteinstance) {
  715. delete CKEDITOR.instances['_mail_replyfrm_body_'];
  716. MailManager.mail_reply_rteinstance = false;
  717. }
  718. MailManager.mail_reply_rteinit('');
  719. MailManager.createUploader();
  720. // Update the seleted folders to highlight them.
  721. MailManager.updateSelectedFolder('mm_compose');
  722. jQuery('#mm_selected_folder').val('mm_compose');
  723. MailManager.triggerUI5Resize();
  724. },
  725. createUploader : function (){
  726. var uploader = new qq.FileUploader({
  727. element: document.getElementById('file-uploader'),
  728. action : 'index.php?module=MailManager&action=MailManagerAjax&file=index&mode=ajax&_operation=relation&_operationarg=saveattachment',
  729. template: '<div class="qq-uploader">' +
  730. '<div class="qq-upload-drop-area"><span>'+MailManager.i18n('JSLBL_UPLOAD_DROPFILES')+'</span></div>' +
  731. '<div class="qq-upload-button">'+MailManager.i18n('JSLBL_UPLOAD_FILE')+'</div>' +
  732. '<ul class="qq-upload-list"></ul>' +
  733. '</div>',
  734. // template for one item in file list
  735. fileTemplate: '<li>' +
  736. '<span class="qq-upload-file small"></span>' +
  737. '<span class="qq-upload-spinner small"></span>' +
  738. '<span class="qq-upload-size small"></span>' +
  739. '<a class="qq-upload-cancel small" href="#">'+MailManager.i18n('JSLBL_UPLOAD_CANCEL')+'</a>' +
  740. '<a class="qq-upload-deleteupload small" href="#">\n\
  741. <img height="12" border="0" width="12" title='+MailManager.i18n('JSLBL_Delete')+' src="themes/images/no.gif"></a>' +
  742. '<span class="qq-upload-failed-text small">'+MailManager.i18n('JSLBL_UPLOAD_FAILED')+'</span>' +
  743. '</li>',
  744. multiple: false,
  745. classes: {
  746. // used to get elements from templates
  747. button: 'qq-upload-button',
  748. drop: 'qq-upload-drop-area',
  749. dropActive: 'qq-upload-drop-area-active',
  750. list: 'qq-upload-list',
  751. file: 'qq-upload-file',
  752. spinner: 'qq-upload-spinner',
  753. size: 'qq-upload-size',
  754. cancel: 'qq-upload-cancel',
  755. deleteupload: 'qq-upload-deleteupload',
  756. // added to list item when upload completes
  757. // used in css to hide progress spinner
  758. success: 'qq-upload-success',
  759. fail: 'qq-upload-fail'
  760. }
  761. });
  762. return uploader;
  763. },
  764. //draft
  765. mail_draft: function(id){
  766. MailManager.close_all();
  767. MailManager.progress_show(MailManager.i18n('JSLBL_Loading'), ' ...');
  768. new Ajax.Request('index.php', {
  769. method: 'post',
  770. postBody: MailManager._baseurl() + "_operation=mail&_operationarg=getdraftmail&id="+ encodeURIComponent(id),
  771. onComplete: function(response){
  772. jQuery('.qq-upload-list').children().remove();
  773. MailManager.progress_hide();
  774. jQuery('#_replydiv_').show();
  775. var responseJSON = JSON.parse(response.responseText);
  776. MailManager.mail_reply_rteinit(responseJSON['result'][0][0]['description']);
  777. jQuery("#_mail_replyfrm_to_").val(JSON.parse(responseJSON['result'][0][0]['saved_toid']));
  778. jQuery("#_mail_replyfrm_cc_").val(JSON.parse(responseJSON['result'][0][0]['ccmail']));
  779. jQuery("#_mail_replyfrm_bcc_").val(JSON.parse(responseJSON['result'][0][0]['bccmail']));
  780. jQuery("#_mail_replyfrm_subject_").val(responseJSON['result'][0][0]['subject']);
  781. jQuery("#emailid").val(responseJSON['result'][0][0]['id']);
  782. var attachments = responseJSON['result'][0]['attachments'];
  783. if(attachments != null) {
  784. var attachmentsHTML = "";
  785. for(i=0; i<attachments.length;i++) {
  786. attachmentsHTML += "<li class='qq-upload-success small'><span class='qq-upload-file small'>"+attachments[i]['name']+"</span>\n\
  787. <span class='qq-upload-size small' style='display: inline;'>"+attachments[i]['size']+"</span>\n\
  788. <a class='qq-upload-deleteupload small' onclick='MailManager.deleteAttachment(\""+ id +"\", \""+attachments[i]['docid']+"\", this);' href='#'>\n\
  789. <img height='12' border='0' width='12' title="+MailManager.i18n('JSLBL_Delete')+" src='themes/images/no.gif'></a></li>";
  790. }
  791. }
  792. jQuery('#attachmentCount').val(attachments.length);
  793. jQuery('.qq-upload-list').append(attachmentsHTML);
  794. jQuery('#upload_target').children().remove();
  795. // Updated to highlight selected folder
  796. MailManager.updateSelectedFolder("mm_compose");
  797. jQuery('#mm_selected_folder').val("mm_compose");
  798. }
  799. });
  800. },
  801. deleteAttachment : function(id, docid, ele) {
  802. MailManager.progress_show(MailManager.i18n('JSLBL_Loading'), ' ...');
  803. new Ajax.Request('index.php', {
  804. method: 'post',
  805. postBody: MailManager._baseurl() + "_operation=mail&_operationarg=deleteAttachment&emailid="+ encodeURIComponent(id)
  806. +"&docid="+ encodeURIComponent(docid),
  807. onComplete: function(response){
  808. MailManager.progress_hide();
  809. var responseJSON = JSON.parse(response.responseText);
  810. if(responseJSON.result.success == true) {
  811. MailManager.progress_hide();
  812. jQuery(ele).parent().fadeTo('slow', 0.0, function(){
  813. var count = jQuery('#attachmentCount').val();
  814. jQuery('#attachmentCount').val(--count);
  815. jQuery(ele).parent().remove();
  816. });
  817. } else {
  818. MailManager.show_error(MailManager.i18n('JSLBL_ATTACHMENT_NOT_DELETED'));
  819. }
  820. }
  821. });
  822. },
  823. /* Reply to mail */
  824. mail_reply: function(all){
  825. if (typeof(all) == 'undefined')
  826. all = true;
  827. var from = jQuery('#_mailopen_from').html();
  828. var cc = jQuery('#_mailopen_cc') ? jQuery('#_mailopen_cc').html() : '';
  829. var subject = jQuery('#_mailopen_subject').html();
  830. var body = jQuery('#_mailopen_body').html();
  831. var date = jQuery('#_mailopen_date').html();
  832. MailManager.close_all();
  833. jQuery('#_replydiv_').show();
  834. // TODO Strip invalid HTML?
  835. if (all)
  836. jQuery("#_mail_replyfrm_cc_").val(cc);
  837. else
  838. jQuery("#_mail_replyfrm_cc_").val('');
  839. jQuery("#_mail_replyfrm_to_").val(from);
  840. jQuery("#_mail_replyfrm_bcc_").val('');
  841. var replySubject = (subject.toUpperCase().indexOf('RE:') == 0) ? subject : 'Re: ' + subject;
  842. jQuery("#_mail_replyfrm_subject_").val(replySubject);
  843. var replyBody = MailManager.sprintf('<p></p><p style="margin:0;padding:0;">%s, %s, %s:</p><blockquote style="border:0;margin:0;border-left:1px solid gray;padding:0 0 0 2px;">%s</blockquote><br />', 'On ' + date, from, 'wrote', body);
  844. jQuery("#emailid").val('');
  845. jQuery("#attachmentCount").val('');
  846. MailManager.mail_reply_rteinit(replyBody);
  847. MailManager.createUploader();
  848. // Update the seleted folders to highlight them.
  849. MailManager.updateSelectedFolder('mm_compose');
  850. jQuery('#mm_selected_folder').val('mm_compose');
  851. MailManager.triggerUI5Resize();
  852. },
  853. /* Track and Initialize RTE instance for reply */
  854. mail_reply_rteinstance: false,
  855. mail_reply_rteinit: function(data){
  856. if (MailManager.mail_reply_rteinstance == false) {
  857. var textAreaName = '_mail_replyfrm_body_';
  858. CKEDITOR.replace(textAreaName, {
  859. toolbar: 'Full',
  860. extraPlugins: 'uicolor',
  861. uiColor: '#dfdff1'
  862. });
  863. MailManager.mail_reply_rteinstance = CKEDITOR.instances[textAreaName];
  864. }
  865. MailManager.mail_reply_rteinstance.setData(data, function(){
  866. });
  867. MailManager.mail_reply_rteinstance.focus();
  868. },
  869. /* Close reply UI */
  870. mail_reply_close: function(){
  871. jQuery('#_replydiv_').hide();
  872. if(jQuery('#mm_selected_folder').val()=='mm_settings'){
  873. MailManager.open_settings();
  874. }
  875. else{
  876. var contentDiv2 = jQuery('#_contentdiv2_').html();
  877. if (contentDiv2 == '') {
  878. jQuery('#_contentdiv_').show();
  879. } else {
  880. jQuery('#_contentdiv2_').show();
  881. }
  882. // Updated to highlight selected folder
  883. var currentSelectedFolder = jQuery('#mailbox_folder').val();
  884. MailManager.updateSelectedFolder(currentSelectedFolder);
  885. jQuery('#mm_selected_folder').val(currentSelectedFolder);
  886. }
  887. MailManager.triggerUI5Resize();
  888. },
  889. /* Forward email */
  890. mail_forward: function(messageId){
  891. // Update the seleted folders to highlight them.
  892. MailManager.updateSelectedFolder('mm_compose');
  893. jQuery('#mm_selected_folder').val('mm_compose');
  894. var from = jQuery('#_mailopen_from').html();
  895. var to = jQuery('#_mailopen_to').html();
  896. var cc = jQuery('#_mailopen_cc') ? jQuery('#_mailopen_cc').html() : '';
  897. var subject = jQuery('#_mailopen_subject').html();
  898. var body = jQuery('#_mailopen_body').html();
  899. var date = jQuery('#_mailopen_date').html();
  900. MailManager.close_all();
  901. jQuery('#_replydiv_').show();
  902. var replyfrm = $('_mail_replyfrm_');
  903. var fwdMsgMetaInfo = MailManager.i18n('JSLBL_FROM') + from + '<br/>'+MailManager.i18n('JSLBL_DATE') + date + '<br/>'+MailManager.i18n('JSLBL_SUBJECT') + subject;
  904. if (to != '' && to != null)
  905. fwdMsgMetaInfo += '<br/>'+MailManager.i18n('JSLBL_TO') + to;
  906. if (cc != '' && cc != null)
  907. fwdMsgMetaInfo += '<br/>'+MailManager.i18n('JSLBL_CC') + cc;
  908. fwdMsgMetaInfo += '<br/>';
  909. replyfrm.to.value = '';
  910. replyfrm.cc.value = '';
  911. replyfrm.bcc.value = '';
  912. replyfrm.subject.value = (subject.toUpperCase().indexOf('FWD:') == 0) ? subject : 'Fwd: ' + subject;
  913. replyfrm.body.value = MailManager.sprintf('<p></p><p>%s<br/>%s</p>%s', MailManager.i18n('JSLBL_FORWARD_MESSAGE_TEXT'), fwdMsgMetaInfo, body);
  914. replyfrm.emailid.value = '';
  915. replyfrm.attachmentCount.value = '';
  916. MailManager.mail_reply_rteinit(replyfrm.body.value);
  917. MailManager.createUploader();
  918. var folder = jQuery('input[name=_folder]').val();
  919. var attachmentCount = jQuery("#_mail_attachmentcount_").val();
  920. if(attachmentCount) {
  921. VtigerJS_DialogBox.block();
  922. new Ajax.Request('index.php', {
  923. method: 'post',
  924. postBody: MailManager._baseurl() + "_operation=mail&_operationarg=forward&messageid=" +
  925. encodeURIComponent(messageId) +"&folder=" + encodeURIComponent(folder) +"&subject=" + encodeURIComponent(replyfrm.subject.value),
  926. onComplete: function(transport){
  927. var response = MailManager.removeHidElement(transport.responseText);
  928. var responseJSON = JSON.parse(response);
  929. if (responseJSON['success']) {
  930. jQuery("#emailid").val(responseJSON['result']['emailid'])
  931. var attachments = responseJSON['result']['attachments'];
  932. if(attachments != '' && attachments != null) { //If attachments are present
  933. for(i=0; i<attachments.length; i++){
  934. MailManager.add_data_to_relatedlist(attachments[i]);
  935. }
  936. }
  937. }
  938. VtigerJS_DialogBox.unblock();
  939. }
  940. });
  941. }
  942. },
  943. /* Send reply to email */
  944. mail_reply_send: function(form){
  945. if (MailManager.mail_reply_rteinstance) {
  946. MailManager.mail_reply_rteinstance.updateElement();
  947. }
  948. var meta = MailManager.mail_open_meta;
  949. var msguid = encodeURIComponent(meta['msguid'] ? meta['msguid'].replace('<', '&lt;').replace('>', '&gt;') : '');
  950. if(!MailManager.validateEmailFields(form.to.value, form.cc.value, form.bcc.value)) {
  951. return false;
  952. }
  953. if (form.to.value == '') {
  954. MailManager.show_error(MailManager.i18n('JSLBL_Recepient_Cannot_Be_Empty'));
  955. return false;
  956. }
  957. if (form.subject.value == '') {
  958. MailManager.show_error(MailManager.i18n('JSLBL_Subject_Cannot_Be_Empty'));
  959. return false;
  960. }
  961. var bodyval = $('_mail_replyfrm_body_').value.trim();
  962. if (bodyval == '<br />' || bodyval == '') {
  963. MailManager.show_error(MailManager.i18n('JSLBL_Body_Cannot_Be_Empty'));
  964. return false;
  965. }
  966. MailManager.progress_show(MailManager.i18n('JSLBL_Sending'), ' ...');
  967. var params = {
  968. '_operation':'mail', '_operationarg':'send',
  969. '_msgid':msguid,
  970. 'to':encodeURIComponent(form.to.value),
  971. 'cc':encodeURIComponent(form.cc.value),
  972. 'bcc':encodeURIComponent(form.bcc.value),
  973. 'subject':encodeURIComponent(form.subject.value),
  974. 'body':encodeURIComponent(form.body.value),
  975. 'linkto':encodeURIComponent(form.linkto.value),
  976. 'emailid':encodeURIComponent(form.emailid.value)
  977. };
  978. var baseurl = MailManager._baseurl();
  979. MailManager.Request('index.php?'+baseurl, params, function(transport) {
  980. MailManager.progress_hide();
  981. var response = MailManager.removeHidElement(transport.responseText);
  982. var responseJSON = JSON.parse(response);
  983. if (responseJSON['success']) {
  984. MailManager.mail_reply_close();

Large files files are truncated, but you can click here to view the full file