PageRenderTime 81ms CodeModel.GetById 42ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/MailManager/MailManager.js

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

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