;(function (GravityFlowFeedSettings, $) { "use strict"; $(document).ready(function () { $('#editable_fields, .gravityflow-multiselect-ui').multiSelect(); var multiSelectWithSearch = { selectableHeader: "", selectionHeader: "", 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 = '"; 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 += '' + $fields[0].outerHTML; return str; }, header: function (obj, header) { return 'Assign ToEditable FieldsCondition'; } } }; } 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));