561 lines
18 KiB
JavaScript
561 lines
18 KiB
JavaScript
;(function (GravityFlowFeedSettings, $) {
|
|
|
|
"use strict";
|
|
|
|
$(document).ready(function () {
|
|
|
|
$('#editable_fields, .gravityflow-multiselect-ui').multiSelect();
|
|
|
|
var multiSelectWithSearch = {
|
|
selectableHeader: "<input type='text' class='search-input' autocomplete='off' placeholder='"+gravityflow_form_settings_js_strings.assigneeSearchPlaceholder+"'>",
|
|
selectionHeader: "<input type='text' class='search-input' autocomplete='off' placeholder='"+gravityflow_form_settings_js_strings.assigneeSearchPlaceholder+"'>",
|
|
afterInit: function(ms){
|
|
var that = this,
|
|
$selectableSearch = that.$selectableUl.prev(),
|
|
$selectionSearch = that.$selectionUl.prev(),
|
|
selectableSearchString = '#'+ms.attr('id')+' .ms-elem-selectable:not(.ms-selected)',
|
|
selectionSearchString = '#'+ms.attr('id')+' .ms-elem-selection.ms-selected';
|
|
|
|
if ( $('#'+ms.attr('id')+' .ms-elem-selectable').length > 10 ) {
|
|
$('.ms-container .search-input').show();
|
|
}
|
|
|
|
that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
|
|
.on('keydown', function(e){
|
|
if (e.which === 40){
|
|
that.$selectableUl.focus();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
|
|
.on('keydown', function(e){
|
|
if (e.which == 40){
|
|
that.$selectionUl.focus();
|
|
return false;
|
|
}
|
|
});
|
|
},
|
|
afterSelect: function(){
|
|
this.qs1.cache();
|
|
this.qs2.cache();
|
|
},
|
|
afterDeselect: function(){
|
|
this.qs1.cache();
|
|
this.qs2.cache();
|
|
}
|
|
};
|
|
|
|
$('#assignees, #workflow_notification_users').multiSelect(multiSelectWithSearch);
|
|
|
|
var gravityFlowIsDirty = false, gravityFlowSubmitted = false;
|
|
|
|
$('form#gform-settings').submit(function () {
|
|
gravityFlowSubmitted = true;
|
|
$('form#gform-settings').find(':input').removeAttr('disabled');
|
|
});
|
|
|
|
$(':input').change(function () {
|
|
gravityFlowIsDirty = true;
|
|
});
|
|
|
|
window.onbeforeunload = function () {
|
|
if (gravityFlowIsDirty && !gravityFlowSubmitted) {
|
|
return "You have unsaved changes.";
|
|
}
|
|
};
|
|
|
|
var $stepType = $('input[name=_gaddon_setting_step_type]:checked');
|
|
var selectedStepType = $stepType.val();
|
|
|
|
var $statusExpiration = $('#status_expiration');
|
|
var expiredSelected = $statusExpiration.val() == 'expired';
|
|
$('#expiration_sub_setting_destination_expired').toggle(expiredSelected);
|
|
$statusExpiration.change(function () {
|
|
var show = $(this).val() == 'expired';
|
|
$('#expiration_sub_setting_destination_expired').fadeToggle(show);
|
|
});
|
|
|
|
setSubSettings();
|
|
|
|
var selectedType = $("input[name=_gaddon_setting_type]:checked");
|
|
toggleType(selectedType.val());
|
|
|
|
$('#gaddon-setting-row-type input[type=radio]').change(function () {
|
|
toggleType(this.value);
|
|
});
|
|
|
|
GravityFlowFeedSettings.getUsersMarkup = function (propertyName) {
|
|
var i, n, account,
|
|
accounts = gf_routing_setting_strings['accounts'],
|
|
str = '<select class="gform-routing-users ' + propertyName + '_{i}">';
|
|
|
|
for (i = 0; i < accounts.length; i++) {
|
|
account = accounts[i];
|
|
if (typeof account.choices != 'undefined') {
|
|
var optgroup = '', choice;
|
|
for (n = 0; n < account.choices.length; n++) {
|
|
choice = account.choices[n];
|
|
optgroup += '<option value="{0}">{1}</option>'.format(choice.value, choice.label);
|
|
}
|
|
str += '<optgroup label="{0}">{1}</option>'.format(account.label, optgroup);
|
|
|
|
} else {
|
|
str += '<option value="{0}">{1}</option>'.format(account.value, account.label);
|
|
}
|
|
|
|
}
|
|
|
|
str += "</select>";
|
|
return str;
|
|
};
|
|
|
|
var $routingSetting = $('#gform_routing_setting');
|
|
|
|
var json = $('#routing').val();
|
|
|
|
var routing_items = json ? $.parseJSON(json) : null;
|
|
|
|
var options;
|
|
if ($('#editable_fields').length > 0) {
|
|
if (!routing_items) {
|
|
routing_items = [{
|
|
assignee: gf_routing_setting_strings['accounts'][0]['choices'][0]['value'],
|
|
editable_fields: [gf_routing_setting_strings['input_fields'][0]['key']],
|
|
fieldId: '0',
|
|
operator: 'is',
|
|
value: '',
|
|
type: ''
|
|
}];
|
|
$('#user_input_routing').val($.toJSON(routing_items));
|
|
}
|
|
|
|
options = {
|
|
fieldName: $routingSetting.data('field_name'),
|
|
fieldId: $routingSetting.data('field_id'),
|
|
settings: gf_routing_setting_strings['fields'],
|
|
accounts: gf_routing_setting_strings['accounts'],
|
|
imagesURL: gf_vars.baseUrl + "/images",
|
|
items: routing_items,
|
|
callbacks: {
|
|
addNewTarget: function (obj, target) {
|
|
|
|
var str = GravityFlowFeedSettings.getUsersMarkup('assignee');
|
|
|
|
var $fields = $('#editable_fields').clone();
|
|
$fields.attr('name', 'editable_fields');
|
|
var id = $('#gform-routings tbody tr').length;
|
|
$fields.attr('id', 'editable_fields_routing_{i}');
|
|
$fields.attr('style', '');
|
|
$fields.addClass('gform-routing-input-field editable_fields_{i}');
|
|
|
|
str += '</td><td>' + $fields[0].outerHTML;
|
|
return str;
|
|
},
|
|
header: function (obj, header) {
|
|
return '<thead><tr><th>Assign To</th><th>Editable Fields</th><th colspan="3">Condition</th></tr></thead>';
|
|
}
|
|
}
|
|
};
|
|
} else {
|
|
if (!routing_items) {
|
|
routing_items = [{
|
|
assignee: gf_routing_setting_strings['accounts'][0]['choices'][0]['value'],
|
|
fieldId: '0',
|
|
operator: 'is',
|
|
value: '',
|
|
type: ''
|
|
}];
|
|
$('#routing').val($.toJSON(routing_items));
|
|
}
|
|
|
|
options = {
|
|
fieldName: $routingSetting.data('field_name'),
|
|
fieldId: $routingSetting.data('field_id'),
|
|
settings: gf_routing_setting_strings['fields'],
|
|
accounts: gf_routing_setting_strings['accounts'],
|
|
imagesURL: gf_vars.baseUrl + "/images",
|
|
items: routing_items,
|
|
callbacks: {
|
|
addNewTarget: function (obj, target) {
|
|
var str = GravityFlowFeedSettings.getUsersMarkup('assignee');
|
|
return str;
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
$routingSetting.gfRoutingSetting(options);
|
|
|
|
// Workflow Notification
|
|
|
|
$('#gaddon-setting-row-workflow_notification_type input[type=radio]').click(function () {
|
|
toggleWorkflowNotificationType(this.value);
|
|
});
|
|
|
|
var workflowNotificationEnabled = $('#workflow_notification_enabled').prop('checked');
|
|
toggleWorkflowNotificationSettings(workflowNotificationEnabled);
|
|
$('#workflow_notification_enabled').click(function () {
|
|
toggleWorkflowNotificationSettings(this.checked);
|
|
});
|
|
|
|
var $workflowNotificationRoutingSetting = $('#gform_user_routing_setting_workflow_notification_routing');
|
|
|
|
var workflowNotificationRoutingJSON = $('#workflow_notification_routing').val();
|
|
|
|
var workflow_notification_routing_items = workflowNotificationRoutingJSON ? $.parseJSON(workflowNotificationRoutingJSON) : null;
|
|
|
|
if (!workflow_notification_routing_items) {
|
|
workflow_notification_routing_items = [{
|
|
assignee: gf_routing_setting_strings['accounts'][0]['choices'][0]['value'],
|
|
fieldId: '0',
|
|
operator: 'is',
|
|
value: '',
|
|
type: '',
|
|
}];
|
|
$('#workflow_notification_routing').val($.toJSON(workflow_notification_routing_items));
|
|
}
|
|
|
|
var workflowNotificationOptions = {
|
|
fieldName: $workflowNotificationRoutingSetting.data('field_name'),
|
|
fieldId: $workflowNotificationRoutingSetting.data('field_id'),
|
|
settings: gf_routing_setting_strings['fields'],
|
|
accounts: gf_routing_setting_strings['accounts'],
|
|
imagesURL: gf_vars.baseUrl + "/images",
|
|
items: workflow_notification_routing_items,
|
|
callbacks: {
|
|
addNewTarget: function (obj, target) {
|
|
var str = GravityFlowFeedSettings.getUsersMarkup('assignee');
|
|
return str;
|
|
}
|
|
}
|
|
};
|
|
|
|
$workflowNotificationRoutingSetting.gfRoutingSetting(workflowNotificationOptions);
|
|
|
|
// Notification Tabs
|
|
|
|
GravityFlowFeedSettings.initNotificationTab = function (type) {
|
|
$('#' + type + '_notification_users').multiSelect(multiSelectWithSearch);
|
|
|
|
var $enabledSetting = $('#' + type + '_notification_enabled');
|
|
|
|
toggleNotificationTabSettings($enabledSetting.prop('checked'), type);
|
|
|
|
$enabledSetting.click(function () {
|
|
toggleNotificationTabSettings(this.checked, type);
|
|
});
|
|
|
|
$('#gaddon-setting-tab-field-' + type + '_notification_type input[type=radio]').click(function () {
|
|
toggleNotificationTabSettings(true, type);
|
|
});
|
|
|
|
var $routingSetting = $('#gform_user_routing_setting_' + type + '_notification_routing');
|
|
|
|
if ($routingSetting.length) {
|
|
var $routingJSONInput = $('#' + type + '_notification_routing'),
|
|
routingJSON = $routingJSONInput.val(),
|
|
routingItems = routingJSON ? $.parseJSON(routingJSON) : null;
|
|
|
|
if (!routingItems) {
|
|
routingItems = [{
|
|
assignee: gf_routing_setting_strings['accounts'][0]['choices'][0]['value'],
|
|
fieldId: '0',
|
|
operator: 'is',
|
|
value: '',
|
|
type: ''
|
|
}];
|
|
$routingJSONInput.val($.toJSON(routingItems));
|
|
}
|
|
|
|
var routingOptions = {
|
|
fieldName: $routingSetting.data('field_name'),
|
|
fieldId: $routingSetting.data('field_id'),
|
|
settings: gf_routing_setting_strings['fields'],
|
|
accounts: gf_routing_setting_strings['accounts'],
|
|
imagesURL: gf_vars.baseUrl + "/images",
|
|
items: routingItems,
|
|
callbacks: {
|
|
addNewTarget: function (obj, target) {
|
|
return GravityFlowFeedSettings.getUsersMarkup('assignee');
|
|
}
|
|
}
|
|
};
|
|
|
|
$routingSetting.gfRoutingSetting(routingOptions);
|
|
}
|
|
|
|
};
|
|
|
|
var notificationTabs = ['assignee', 'rejection', 'approval', 'in_progress', 'complete'];
|
|
|
|
for (var i = 0; i < notificationTabs.length; i++) {
|
|
GravityFlowFeedSettings.initNotificationTab(notificationTabs[i]);
|
|
}
|
|
|
|
// User Input - Save Progress Option/In Progress Email Tab
|
|
|
|
var $saveProgressSetting = $('#default_status');
|
|
if ($saveProgressSetting.val() === 'hidden') {
|
|
$('#tabs-notification_tabs').tabs('disable', 1);
|
|
}
|
|
|
|
$saveProgressSetting.change(function () {
|
|
var disabled = $(this).val() === 'hidden',
|
|
$notificationTabs = $('#tabs-notification_tabs');
|
|
if (disabled) {
|
|
var $enabledSetting = $('#in_progress_notification_enabled');
|
|
|
|
// Disable the In Progress notification if enabled.
|
|
if ($enabledSetting.prop('checked')) {
|
|
$enabledSetting.click();
|
|
}
|
|
|
|
// If the In Progress Email tab is active switch to the Assignee Email tab.
|
|
if ($notificationTabs.tabs('option', 'active') === 1) {
|
|
$notificationTabs.tabs('option', 'active', 0);
|
|
}
|
|
|
|
$notificationTabs.tabs('disable', 1);
|
|
} else {
|
|
$notificationTabs.tabs('enable', 1);
|
|
}
|
|
});
|
|
|
|
//-----
|
|
|
|
if (window.gform) {
|
|
gform.addFilter('gform_merge_tags', GravityFlowFeedSettings.gravityflow_add_merge_tags);
|
|
}
|
|
|
|
if (window['gformInitDatepicker']) {
|
|
gformInitDatepicker();
|
|
}
|
|
|
|
loadMessages();
|
|
|
|
});
|
|
|
|
function toggleNotificationTabSettings(enabled, notificationType) {
|
|
var $NotificationTypeSetting = $('#gaddon-setting-tab-field-' + notificationType + '_notification_type');
|
|
$NotificationTypeSetting.toggle(enabled);
|
|
if (enabled) {
|
|
var selected = $NotificationTypeSetting.find('input[type=radio]:checked').val();
|
|
toggleNotificationTabFields(selected, notificationType);
|
|
$('#gaddon-setting-tab-tab_' + notificationType + '_notification i.gravityflow-tab-checked').show();
|
|
$('#gaddon-setting-tab-tab_' + notificationType + '_notification i.gravityflow-tab-unchecked').hide();
|
|
} else {
|
|
toggleNotificationTabFields('off', notificationType);
|
|
$('#gaddon-setting-tab-tab_' + notificationType + '_notification i.gravityflow-tab-checked').hide();
|
|
$('#gaddon-setting-tab-tab_' + notificationType + '_notification i.gravityflow-tab-unchecked').show();
|
|
}
|
|
}
|
|
|
|
function toggleNotificationTabFields(showType, notificationType) {
|
|
var fields = ['users', 'routing', 'from_name', 'from_email', 'reply_to', 'bcc', 'subject', 'message', 'autoformat', 'resend', 'gpdf'],
|
|
prefix = '#gaddon-setting-tab-field-' + notificationType + '_notification_';
|
|
|
|
$.each(fields, function (i, field) {
|
|
$(prefix + field).hide();
|
|
});
|
|
|
|
if (showType == 'off') {
|
|
return;
|
|
}
|
|
|
|
$.each(fields, function (i, field) {
|
|
if (field == 'users' && showType == 'routing' || field == 'routing' && showType == 'select') {
|
|
return true;
|
|
}
|
|
|
|
$(prefix + field).fadeToggle('normal');
|
|
});
|
|
}
|
|
|
|
function toggleWorkflowNotificationType(showType) {
|
|
var fields = {
|
|
select: ['workflow_notification_users\\[\\]', 'workflow_notification_from_name', 'workflow_notification_from_email', 'workflow_notification_reply_to', 'workflow_notification_bcc', 'workflow_notification_subject', 'workflow_notification_message', 'workflow_notification_autoformat'],
|
|
routing: ['workflow_notification_routing', 'workflow_notification_from_name', 'workflow_notification_from_email', 'workflow_notification_reply_to', 'workflow_notification_bcc', 'workflow_notification_subject', 'workflow_notification_message', 'workflow_notification_autoformat']
|
|
};
|
|
toggleFields(fields, showType, false);
|
|
}
|
|
|
|
function toggleType(showType) {
|
|
var fields = {
|
|
select: ['assignees\\[\\]', 'editable_fields\\[\\]', 'conditional_logic_editable_fields_enabled'],
|
|
routing: ['routing', 'conditional_logic_editable_fields_enabled']
|
|
};
|
|
|
|
toggleFields(fields, showType);
|
|
}
|
|
|
|
function toggleFields(fields, showType, isTab) {
|
|
var prefix = isTab ? '#gaddon-setting-tab-field-' : '#gaddon-setting-row-';
|
|
$.each(fields, function (type, activeFields) {
|
|
$.each(activeFields, function (i, activeField) {
|
|
$(prefix + activeField).hide();
|
|
});
|
|
});
|
|
|
|
$.each(fields, function (type, activeFields) {
|
|
if (showType == type) {
|
|
$.each(activeFields, function (i, activeField) {
|
|
$(prefix + activeField).fadeToggle('normal');
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
function toggleWorkflowNotificationSettings(enabled) {
|
|
var $workflowNotificationType = $('#gaddon-setting-row-workflow_notification_type');
|
|
$workflowNotificationType.toggle(enabled);
|
|
if (enabled) {
|
|
var selected = $workflowNotificationType.find('input[type=radio]:checked').val();
|
|
toggleWorkflowNotificationType(selected);
|
|
} else {
|
|
toggleWorkflowNotificationType('off');
|
|
}
|
|
}
|
|
|
|
function setSubSettings() {
|
|
var subSettings = [
|
|
'routing',
|
|
'assignees\\[\\]',
|
|
'assignee_notification_from_name',
|
|
'assignee_notification_from_email',
|
|
'assignee_notification_reply_to',
|
|
'assignee_notification_bcc',
|
|
'assignee_notification_subject',
|
|
'assignee_notification_message',
|
|
'assignee_notification_autoformat',
|
|
'resend_assignee_email',
|
|
'assignee_notification_gpdf',
|
|
'rejection_notification_type',
|
|
'rejection_notification_users\\[\\]',
|
|
'rejection_notification_user_field',
|
|
'rejection_notification_routing',
|
|
'rejection_notification_message',
|
|
'rejection_notification_autoformat',
|
|
'approval_notification_type',
|
|
'approval_notification_users\\[\\]',
|
|
'approval_notification_user_field',
|
|
'approval_notification_routing',
|
|
'approval_notification_message',
|
|
'approval_notification_autoformat',
|
|
|
|
'workflow_notification_type',
|
|
'workflow_notification_users\\[\\]',
|
|
'workflow_notification_user_field',
|
|
'workflow_notification_routing',
|
|
'workflow_notification_from_name',
|
|
'workflow_notification_from_email',
|
|
'workflow_notification_reply_to',
|
|
'workflow_notification_bcc',
|
|
'workflow_notification_subject',
|
|
'workflow_notification_message',
|
|
'workflow_notification_autoformat',
|
|
|
|
'assignees\\[\\]',
|
|
'editable_fields\\[\\]',
|
|
'routing',
|
|
'assignee_notification_message',
|
|
|
|
];
|
|
for (var i = 0; i < subSettings.length; i++) {
|
|
$('#gaddon-setting-row-' + subSettings[i]).addClass('gravityflow_sub_setting');
|
|
}
|
|
}
|
|
|
|
GravityFlowFeedSettings.gravityflow_add_merge_tags = function (mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option) {
|
|
if (isPrepop) {
|
|
return mergeTags;
|
|
}
|
|
|
|
addCommonMergeTags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option);
|
|
addAprovalMergeTags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option);
|
|
|
|
return mergeTags;
|
|
};
|
|
|
|
function addCommonMergeTags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option) {
|
|
|
|
var supportedElementIds = [
|
|
'_gaddon_setting_workflow_notification_message',
|
|
'_gaddon_setting_assignee_notification_message',
|
|
'_gaddon_setting_approval_notification_message',
|
|
'_gaddon_setting_rejection_notification_message',
|
|
];
|
|
|
|
if (supportedElementIds.indexOf(elementId) < 0) {
|
|
return mergeTags;
|
|
}
|
|
|
|
var labels = gravityflow_form_settings_js_strings.mergeTagLabels,
|
|
tags = [];
|
|
|
|
tags.push({tag: '{workflow_entry_link}', label: labels.workflow_entry_link});
|
|
tags.push({tag: '{workflow_entry_url}', label: labels.workflow_entry_url});
|
|
tags.push({tag: '{workflow_inbox_link}', label: labels.workflow_inbox_link});
|
|
tags.push({tag: '{workflow_inbox_url}', label: labels.workflow_inbox_url});
|
|
tags.push({tag: '{workflow_cancel_link}', label: labels.workflow_cancel_link});
|
|
tags.push({tag: '{workflow_cancel_url}', label: labels.workflow_cancel_url});
|
|
tags.push({tag: '{workflow_note}', label: labels.workflow_note});
|
|
tags.push({tag: '{workflow_timeline}', label: labels.workflow_timeline});
|
|
tags.push({tag: '{assignees}', label: labels.assignees});
|
|
|
|
mergeTags['gravityflow'] = {
|
|
label: labels.group,
|
|
tags: tags
|
|
};
|
|
|
|
return mergeTags;
|
|
|
|
}
|
|
|
|
function addAprovalMergeTags(mergeTags, elementId, hideAllFields, excludeFieldTypes, isPrepop, option) {
|
|
var supportedElementIds = [
|
|
'_gaddon_setting_assignee_notification_message',
|
|
];
|
|
|
|
if (supportedElementIds.indexOf(elementId) < 0) {
|
|
return mergeTags;
|
|
}
|
|
|
|
var labels = gravityflow_form_settings_js_strings.mergeTagLabels,
|
|
tags = [];
|
|
|
|
tags.push({tag: '{workflow_approve_link}', label: labels.workflow_approve_link});
|
|
tags.push({tag: '{workflow_approve_url}', label: labels.workflow_approve_url});
|
|
tags.push({tag: '{workflow_approve_token}', label: labels.workflow_approve_token});
|
|
tags.push({tag: '{workflow_reject_link}', label: labels.workflow_reject_link});
|
|
tags.push({tag: '{workflow_reject_url}', label: labels.workflow_reject_url});
|
|
tags.push({tag: '{workflow_reject_token}', label: labels.workflow_reject_token});
|
|
|
|
if (typeof mergeTags['gravityflow'] != 'undefined') {
|
|
mergeTags['gravityflow']['tags'] = $.merge(mergeTags['gravityflow']['tags'], tags);
|
|
} else {
|
|
mergeTags['gravityflow'] = {
|
|
label: labels.group,
|
|
tags: tags
|
|
};
|
|
}
|
|
|
|
return mergeTags;
|
|
}
|
|
|
|
function loadMessages() {
|
|
var feedId = gravityflow_form_settings_js_strings['feedId'];
|
|
if (feedId > 0) {
|
|
var url = ajaxurl + '?action=gravityflow_feed_message&fid=' + feedId + '&id=' + gravityflow_form_settings_js_strings['formId'];
|
|
$.get(url, function (response) {
|
|
var $heading = $('#save_button');
|
|
$heading.before(response);
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
}(window.GravityFlowFeedSettings = window.GravityFlowFeedSettings || {}, jQuery));
|
|
|
|
|