0
0
mirror of https://github.com/salesagility/SuiteCRM.git synced 2024-11-24 08:36:48 +00:00
salesagility_SuiteCRM/jssource/src_files/modules/EmailTemplates/EmailTemplate.js

563 lines
18 KiB
JavaScript
Executable File

/**
*
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
var focus_obj = false;
var label = SUGAR.language.get('app_strings', 'LBL_DEFAULT_LINK_TEXT');
function remember_place(obj) {
focus_obj = obj;
}
function showVariable(form) {
if(!form) {
form = 'EditView';
}
document[form].variable_text.value =
document[form].variable_name.options[document[form].variable_name.selectedIndex].value;
}
function addVariables(the_select,the_module, form) {
the_select.options.length = 0;
for(var i=0;i<field_defs[the_module].length;i++) {
var new_option = document.createElement("option");
new_option.value = "$"+field_defs[the_module][i].name;
new_option.text= field_defs[the_module][i].value;
the_select.options.add(new_option,i);
}
showVariable(form);
}
function toggle_text_only(firstRun) {
if (typeof(firstRun) == 'undefined')
firstRun = false;
var text_only = document.getElementById('text_only');
//Initialization of TinyMCE
//if(firstRun){
//setTimeout("tinyMCE.execCommand('mceAddControl', false, 'body_text');", 500);
//var tiny = tinyMCE.getInstanceById('body_text');
//}
//check to see if the toggle textonly flag is checked
if(document.getElementById('toggle_textonly').checked == true) {
//hide the html div (containing TinyMCE)
document.getElementById('body_text_div').style.display = 'none';
document.getElementById('toggle_textarea_option').style.display = 'none';
document.getElementById('text_div').style.display = 'block';
text_only.value = 1;
} else {
//display the html div (containing TinyMCE)
document.getElementById('body_text_div').style.display = 'inline';
document.getElementById('toggle_textarea_option').style.display = 'inline';
document.getElementById('text_div').style.display = 'none';
text_only.value = 0;
}
update_textarea_button();
}
function update_textarea_button()
{
if(document.getElementById('text_div').style.display == 'none') {
document.getElementById('toggle_textarea_elem').value = toggle_textarea_elem_values[0];
} else {
document.getElementById('toggle_textarea_elem').value = toggle_textarea_elem_values[1];
}
}
function toggle_textarea_edit(obj)
{
if(document.getElementById('text_div').style.display == 'none')
{
document.getElementById('text_div').style.display = 'block';
} else {
document.getElementById('text_div').style.display = 'none';
}
update_textarea_button();
}
//This function checks that tinyMCE is initilized before setting the text (IE bug)
function setTinyHTML(text) {
var tiny = tinyMCE.getInstanceById('body_text');
if (tiny.getContent() != null) {
tiny.setContent(text)
} else {
setTimeout(setTinyHTML(text), 1000);
}
}
function stripTags(str) {
var theText = new String(str);
if(theText != 'undefined') {
return theText.replace(/<\/?[^>]+>/gi, '');
}
}
/*
* this function will insert variables into text area
*/
function insert_variable_text(myField, myValue) {
//IE support
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = myValue;
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
myField.value = myField.value.substring(0, startPos)
+ myValue
+ myField.value.substring(endPos, myField.value.length);
} else {
myField.value += myValue;
}
}
/*
* This function inserts variables into a TinyMCE instance
*/
function insert_variable_html(text) {
SuiteEditor.insert(text);
}
function insert_variable_html_link(text, url) {
var thelink = "<a href='" +url + "' > "+text+" </a>";
insert_variable_html(thelink);
}
/*
* this function will check to see if text only flag has been checked.
* If so, the it will call the text insert function, if not, then it
* will call the html (tinyMCE eidtor) insert function
*/
function insert_variable(text, elemId, forceIntoSubject) {
if(typeof forceIntoSubject === 'undefined') {
forceIntoSubject = false;
}
if(elemId == 'template_subject' || forceIntoSubject) {
// insert into the subject instead of the body
var $subject = $('#'+elemId);
var value = $subject.val();
var caret = parseInt($subject.attr('data-caret-position'));
var before = value.substring(0, caret);
var after = value.substring(caret);
$subject.val(before + $('select[name=variable_name]').val() + after);
return;
}
if(!elemId) {
throw 'not element for insert variable';
}
//if text only flag is checked, then insert into text field
if (document.getElementById('toggle_textonly') && document.getElementById('toggle_textonly').checked == true) {
//use text version insert
insert_variable_text(document.getElementById('body_text_plain'), text);
} else {
//use html version insert
SuiteEditor.insert(text, elemId);
}
}
/*
** Returns the caret (cursor) position of the specified text field.
** Return value range is 0-oField.value.length.
*/
var doGetCaretPosition = function(oField) {
// Initialize
var iCaretPos = 0;
// IE Support
if (document.selection) {
// Set focus on the element
oField.focus();
// To get cursor position, get empty selection range
var oSel = document.selection.createRange();
// Move selection start to 0 position
oSel.moveStart('character', -oField.value.length);
// The caret position is selection length
iCaretPos = oSel.text.length;
}
// Firefox support
else if (oField.selectionStart || oField.selectionStart == '0')
iCaretPos = oField.selectionStart;
// Return results
return iCaretPos;
}
var onClickTemplateSubject = function(elem) {
$(elem).attr('data-caret-position', doGetCaretPosition(elem));
$('#insert_variable_to_subject_btn').show();
$('#insert_variable_to_body_btn').hide();
}
var onClickTemplateBody = function() {
$('#insert_variable_to_subject_btn').hide();
$('#insert_variable_to_body_btn').show();
}
var $templateManagerDialogX = 0;
var $templateManagerDialogY = 0;
var $templateManagerDialog = null;
function createTemplateManagerDialog (parent) {
$('#templateManagerDialog').dialog({
width: '50%',
position: { my: "left top", at: "left bottom", of: parent }
});
}
var showTemplateSaveMessages = function(msgs){
$('#template_messages').html('');
$.each(msgs, function(i, msg){
$('#template_messages').append(SUGAR.language.translate('Campaigns', msg) + '<br>');
});
setTimeout(function(){
$('#template_messages').hide(1000, function(){
$('#template_messages').html('');
$('#template_messages').show();
});
}, 3000);
};
function EmailTemplateController(action) {
var lastNameValue = $('#template_name').val();
var lastSubjectValue = $('#template_subject').val();
var revertValues = function() {
$('#template_name').val(lastNameValue);
$('#template_subject').val(lastSubjectValue);
window.parent.$('.ui-dialog-content:visible').dialog('close');
}
var save = function(update) {
if($('#template_name').val() == '') {
alert(SUGAR.language.translate('Campaigns', 'LBL_PROVIDE_WEB_TO_LEAD_FORM_FIELDS'));
$('#template_name').focus();
return;
}
//if($('#template_subject').val() == '') {
// if(!confirm(SUGAR.language.translate('Campaigns', 'LBL_EMPTY_SUBJECT'))) {
// $('#template_subject').focus();
// return;
// }
//}
//if($('#template_id').val() != '') {
// if(!confirm(SUGAR.language.translate('Campaigns', 'LBL_OVERWRITE_QUESTION'))) {
// return;
// }
//}
window.parent.$('.ui-dialog-content:visible').dialog('close');
var func = emailTemplateCopyId || $('input[name="update_exists_template"]').prop('checked') ? 'update': 'createCopy';
$('#template_messages').html(SUGAR.language.translate('Campaigns', 'LBL_TEMPLATE_SAVING'));
$.post('index.php?entryPoint=emailTemplateData&func=wizardUpdate&rand='+Math.random(), {
'func': func,
'emailTemplateId' : emailTemplateCopyId ? emailTemplateCopyId : $('#template_id').val(),
'body_html': SuiteEditor.getValue(),
'name': $('#template_name').val(),
'subject': $('#template_subject').val(),
}, function(resp){
// todo: hide preloader or loading message..
resp = JSON.parse(resp);
if(resp.error) {
// todo: show error
console.error(resp.error);
}
else {
if(!emailTemplateCopyId && func == 'createCopy') {
emailTemplateCopyId = resp.data.id;
$('option[value='+resp.data.id+']').html($('#template_name').val());
$('input[name="update_exists_template"]').prop('checked', true);
} else {
$('option[value='+resp.data.id+']').html($('#template_name').val());
}
$('#template_messages').html('');
if(resp.msgs.length) {
showTemplateSaveMessages(resp.msgs);
}
}
});
}
var create = function() {
if($('#template_name').val() == '') {
alert(SUGAR.language.translate('Campaigns', 'LBL_PROVIDE_WEB_TO_LEAD_FORM_FIELDS'));
return
}
//if($('#template_subject').val() == '') {
// if(!confirm(SUGAR.language.translate('Campaigns', 'LBL_EMPTY_SUBJECT'))) {
// return
// }
//}
window.parent.$('.ui-dialog-content:visible').dialog('close');
$('input[name="update_exists_template"]').prop('checked', false);
var func = emailTemplateCopyId || $('input[name="update_exists_template"]').prop('checked') ? 'update': 'createCopy';
$('#template_messages').html(SUGAR.language.translate('Campaigns', 'LBL_TEMPLATE_SAVING'));
$.post('index.php?entryPoint=emailTemplateData&rand='+Math.random(), {
'func': func,
'emailTemplateId' : emailTemplateCopyId ? emailTemplateCopyId : $('#template_id').val(),
'body_html': SuiteEditor.getValue(),
'name': $('#template_name').val(),
'subject': $('#template_subject').val(),
}, function(resp){
// todo: hide preloader or loading message..
resp = JSON.parse(resp);
if(resp.error) {
// todo: show error
console.error(resp.error);
}
else {
if(!emailTemplateCopyId && func == 'createCopy') {
emailTemplateCopyId = resp.data.id;
$('#template_id').append('<option value="' + resp.data.id + '">' + resp.data.name + '</option>');
$('#template_id').val(resp.data.id);
$('input[name="update_exists_template"]').prop('checked', true);
$('#LBL_SAVE_EMAIL_TEMPLATE_BTN').parent().removeClass('hidden');
$('#LBL_SAVE_EMAIL_TEMPLATE_BTN').parent().next().removeClass('hidden');
}
$('#template_messages').html('');
if(resp.msgs.length) {
showTemplateSaveMessages(resp.msgs);
}
$('#template_option_select').click();
}
});
}
switch (action) {
case "create":
create();
break;
case "save":
save();
break;
default:
break;
}
console.log('EmailTemplateController()', action)
}
function EmailTrackerController(action, campaignId) {
var _campaignId = campaignId;
var lastURLValue = $('#url_text').val();
var lastNameValue = $('#tracker_name').val();
var lastSubjectValue = $('#template_subject').val();
var revertValues = function() {
$('#url_text').val(lastURLValue);
$('#tracker_name').val(lastNameValue);
$('#template_subject').val(lastSubjectValue);
window.parent.$('.ui-dialog-content:visible').dialog('close');
}
var create = function () {
var trackerName = $('#url_text').val();
var trackerURL = $('#tracker_url_add').val();
if($('#url_text').val() == '' || $('#tracker_url_add').val() == '') {
alert(SUGAR.language.translate('Campaigns', 'LBL_PROVIDE_WEB_TO_LEAD_FORM_FIELDS'));
return;
}
if(!trackerName) {
errors.push({field: 'tracker_name', message: SUGAR.language.translate('Campaigns', 'ERR_REQUIRED_TRACKER_NAME')});
}
if(!trackerURL) {
errors.push({field: 'tracker_url', message: SUGAR.language.translate('Campaigns', 'ERR_REQUIRED_TRACKER_URL')});
}
hideFieldErrorMessages();
window.parent.$('.ui-dialog-content:visible').dialog('close');
$.post('index.php?entryPoint=campaignTrackerSave', {
module: 'CampaignTrackers',
record: '', // TODO .. campaign tracker ID on update
action: 'Save',
campaign_id: _campaignId,
tracker_name: trackerName,
tracker_url: trackerURL,
is_optout: $('#is_optout').prop('checked') ? 'on' : '',
response_json: true
}, function (resp) {
resp = JSON.parse(resp);
if (resp.data.id) {
// TODO do it only when user want to create a new one as "copy and save.." function
$('select[name="tracker_url"]').append('<option value="{' + trackerName + '}" data-id="'+resp.data.id+'" data-url="'+trackerURL+'">' + trackerName + ' : ' + trackerURL + '</option>');
$('select[name="tracker_url"]').val('{' + trackerName + '}');
$('#url_text').val('{' + trackerName + '}');
}
setTrackerUrlSelectVisibility();
});
}
var save = function () {
var trackerName = $('#url_text').val();
var trackerURL = $('#tracker_url_add').val();
if($('#url_text').val() == '' || $('#tracker_url_add').val() == '') {
alert(SUGAR.language.translate('Campaigns', 'LBL_PROVIDE_WEB_TO_LEAD_FORM_FIELDS'));
return;
}
if(!trackerName) {
errors.push({field: 'tracker_name', message: SUGAR.language.translate('Campaigns', 'ERR_REQUIRED_TRACKER_NAME')});
}
if(!trackerURL) {
errors.push({field: 'tracker_url', message: SUGAR.language.translate('Campaigns', 'ERR_REQUIRED_TRACKER_URL')});
}
hideFieldErrorMessages();
window.parent.$('.ui-dialog-content:visible').dialog('close');
$.post('index.php?entryPoint=campaignTrackerSave', {
module: 'CampaignTrackers',
record: $('select[name="tracker_url"] option:selected').attr('data-id'), // TODO .. campaign tracker ID on update
action: 'Save',
campaign_id: _campaignId,
tracker_name: trackerName,
tracker_url: trackerURL,
is_optout: $('#is_optout').prop('checked') ? 'on' : '',
response_json: true
}, function (resp) {
resp = JSON.parse(resp);
if (resp.data.id) {
// TODO do it only when user want to create a new one as "copy and save.." function
$('select[name="tracker_url"] option:selected').text(trackerName + ' : ' + trackerURL );
$('select[name="tracker_url"] option:selected').attr(trackerName + ' : ' + trackerURL );
$('select[name="tracker_url"] option:selected').val('{' + trackerName + '}');
}
setTrackerUrlSelectVisibility();
});
}
switch (action) {
case "create":
$('#url_text').val('');
$('#tracker_name').val('');
$('#tracker_url_add').val('');
$('#is_optout').attr('checked', false);
$('#tracker_url_add').removeAttr('disabled')
createTemplateManagerDialog($('#LBL_CREATE_TRACKER_BTN'));
$('#templateManagerActionOK').val($('#LBL_CREATE_TRACKER_BTN').val());
$('#templateManagerDialog').children('div').addClass('hidden');
$('#emailTrackerDialog').removeClass('hidden');
$('#templateManagerDialogActions').removeClass('hidden');
$('#templateManagerActionOK').val(SUGAR.language.translate('Campaigns', 'LBL_CREATE_TRACKER_BTN'));
$('#templateManagerActionOK').unbind();
$('#templateManagerActionCancel').unbind();
$('#templateManagerActionOK').click(create);
$('#templateManagerActionCancel').click(revertValues);
$('#templateManagerDialog').show();
break;
case "insert":
if($('#trackerUrlSelect').val() == '-1') {
alert(SUGAR.language.translate('Campaigns', 'LBL_SELECT_EMAIL_TRACKER'));
return;
}
var text = $('select[name="tracker_url"] option:selected').val();
text = text.replace('{','');
text = text.replace('}','');
insert_variable_html_link(text, $('select[name="tracker_url"] option:selected').val());
break;
case "edit":
// if -- Create -- is selected
if($('#trackerUrlSelect').val() == '-1') {
alert(SUGAR.language.translate('Campaigns', 'LBL_SELECT_EMAIL_TRACKER'));
return;
}
var text = $('select[name="tracker_url"] option:selected').val();
text = text.replace('{','');
text = text.replace('}','');
$('#url_text').val(text);
$('#tracker_url_add').val($('select[name="tracker_url"] option:selected').attr('data-url'));
$('#tracker_name').val('');
$('#templateManagerActionOK').val(SUGAR.language.translate('Campaigns', 'LBL_EDIT_TRACKER_BTN'));
createTemplateManagerDialog($('#LBL_CREATE_TRACKER_BTN'));
$('#templateManagerDialog').children('div').addClass('hidden');
$('#emailTrackerDialog').removeClass('hidden');
$('#templateManagerDialogActions').removeClass('hidden');
$('#templateManagerActionOK').unbind();
$('#templateManagerActionCancel').unbind();
$('#templateManagerActionOK').click(save);
$('#templateManagerActionCancel').click(revertValues);
$('#templateManagerDialog').show();
break;
default:
break;
}}
$(document).on( "mousemove", function(event) {
$templateManagerDialogX = event.pageX;
$templateManagerDialogY = event.pageY;
});