Spaces:
No application file
No application file
//LeadBundle | |
Mautic.companyOnLoad = function (container, response) { | |
if (mQuery(container + ' #list-search').length) { | |
Mautic.activateSearchAutocomplete('list-search', 'lead.company'); | |
} | |
} | |
Mautic.leadOnLoad = function (container, response) { | |
Mautic.addKeyboardShortcut('a', 'Quick add a New Contact', function(e) { | |
if(mQuery('a.quickadd').length) { | |
mQuery('a.quickadd').click(); | |
} else if (mQuery('a.btn-leadnote-add').length) { | |
mQuery('a.btn-leadnote-add').click(); | |
} | |
}, 'contact pages'); | |
Mautic.addKeyboardShortcut('t', 'Activate Table View', function(e) { | |
mQuery('#table-view').click(); | |
}, 'contact pages'); | |
Mautic.addKeyboardShortcut('c', 'Activate Card View', function(e) { | |
mQuery('#card-view').click(); | |
}, 'contact pages'); | |
//Prevent single combo keys from initiating within lead note | |
Mousetrap.stopCallback = function(e, element, combo) { | |
if (element.id == 'leadnote_text' && combo != 'mod+enter') { | |
return true; | |
} | |
// if the element has the class "mousetrap" then no need to stop | |
if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) { | |
return false; | |
} | |
// stop for input, select, and textarea | |
return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || (element.contentEditable && element.contentEditable == 'true'); | |
}; | |
// Timeline filters | |
var timelineForm = mQuery(container + ' #timeline-filters'); | |
if (timelineForm.length) { | |
timelineForm.on('change', function() { | |
timelineForm.submit(); | |
}).on('keyup', function() { | |
timelineForm.delay(200).submit(); | |
}).on('submit', function(e) { | |
e.preventDefault(); | |
Mautic.refreshLeadTimeline(timelineForm); | |
}); | |
var toggleTimelineDetails = function (el) { | |
var activateDetailsState = mQuery(el).hasClass('active'); | |
if (activateDetailsState) { | |
mQuery('#timeline-details-'+detailsId).addClass('hide'); | |
mQuery(el).removeClass('active'); | |
} else { | |
mQuery('#timeline-details-'+detailsId).removeClass('hide'); | |
mQuery(el).addClass('active'); | |
} | |
}; | |
Mautic.leadTimelineOnLoad(container, response); | |
Mautic.leadAuditlogOnLoad(container, response); | |
} | |
// Auditlog filters | |
var auditlogForm = mQuery(container + ' #auditlog-filters'); | |
if (auditlogForm.length) { | |
auditlogForm.on('change', function() { | |
auditlogForm.submit(); | |
}).on('keyup', function() { | |
auditlogForm.delay(200).submit(); | |
}).on('submit', function(e) { | |
e.preventDefault(); | |
Mautic.refreshLeadAuditLog(auditlogForm); | |
}); | |
} | |
//Note type filters | |
var noteForm = mQuery(container + ' #note-filters'); | |
if (noteForm.length) { | |
noteForm.on('change', function() { | |
noteForm.submit(); | |
}).on('keyup', function() { | |
noteForm.delay(200).submit(); | |
}).on('submit', function(e) { | |
e.preventDefault(); | |
Mautic.refreshLeadNotes(noteForm); | |
}); | |
} | |
if (mQuery(container + ' #list-search').length) { | |
Mautic.activateSearchAutocomplete('list-search', 'lead.lead'); | |
} | |
if (mQuery(container + ' #notes-container').length) { | |
Mautic.activateSearchAutocomplete('NoteFilter', 'lead.note'); | |
} | |
if (mQuery('#lead_preferred_profile_image').length) { | |
mQuery('#lead_preferred_profile_image').on('change', function() { | |
if (mQuery(this).val() == 'custom') { | |
mQuery('#customAvatarContainer').slideDown('fast'); | |
} else { | |
mQuery('#customAvatarContainer').slideUp('fast'); | |
} | |
}) | |
} | |
if (mQuery('.lead-avatar-panel').length) { | |
mQuery('.lead-avatar-panel .avatar-collapser a.arrow').on('click', function() { | |
setTimeout(function() { | |
var status = (mQuery('#lead-avatar-block').hasClass('in') ? 'expanded' : 'collapsed'); | |
Cookies.set('mautic_lead_avatar_panel', status, {expires: 30}); | |
}, 500); | |
}); | |
} | |
if (mQuery('#anonymousLeadButton').length) { | |
var searchValue = mQuery('#list-search').typeahead('val').toLowerCase(); | |
var string = mQuery('#anonymousLeadButton').data('anonymous').toLowerCase(); | |
if (searchValue.indexOf(string) >= 0 && searchValue.indexOf('!' + string) == -1) { | |
mQuery('#anonymousLeadButton').addClass('btn-primary'); | |
} else { | |
mQuery('#anonymousLeadButton').removeClass('btn-primary'); | |
} | |
} | |
var leadMap = []; | |
mQuery(document).on('shown.bs.tab', 'a#load-lead-map', () => { | |
leadMap = Mautic.initMap('#place-container', 'markers'); | |
}); | |
mQuery('a[data-toggle="tab"]').not('a#load-lead-map').on('shown.bs.tab', function (e) { | |
if (leadMap.length) { | |
leadMap.destroyMap(); | |
leadMap = undefined; | |
} | |
}); | |
Mautic.initUniqueIdentifierFields(); | |
if (mQuery(container + ' .panel-companies').length) { | |
mQuery(container + ' .panel-companies .ri-check-line').tooltip({html: true}); | |
} | |
// Adding behavior to be able to create new tags by pressing the `Escape` key | |
// when the search field is active (ie: the tag name we are typing is a substring of an existing tag) | |
mQuery('#lead_tags_chosen input').keyup(function(el) { | |
const newTag = mQuery('#lead_tags_chosen input').val(); | |
if (el.key === "Escape" && newTag !== '') { | |
const selectElement = mQuery('#lead_tags').get(); | |
const selectedValues = mQuery('#lead_tags').val(); | |
const payload = [...selectedValues, newTag]; | |
Mautic.activateLabelLoadingIndicator(mQuery(selectElement).attr('id')); | |
Mautic.ajaxActionRequest('lead:addLeadTags', {tags: JSON.stringify(payload)}, function(response) { | |
if (response.tags) { | |
mQuery('#' + mQuery(selectElement).attr('id')).html(response.tags); | |
mQuery('#' + mQuery(selectElement).attr('id')).trigger('chosen:updated'); | |
} | |
Mautic.removeLabelLoadingIndicator(); | |
}); | |
} | |
}); | |
Mautic.lazyLoadContactStatsOnLeadLoad(); | |
}; | |
Mautic.leadTimelineOnLoad = function (container, response) { | |
mQuery("#contact-timeline a[data-activate-details='all']").on('click', function() { | |
if (mQuery(this).find('span').first().hasClass('ri-corner-right-down-line')) { | |
mQuery("#contact-timeline a[data-activate-details!='all']").each(function () { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#timeline-details-'+detailsId).length) { | |
mQuery('#timeline-details-' + detailsId).removeClass('hide'); | |
mQuery(this).addClass('active'); | |
} | |
}); | |
mQuery(this).find('span').first().removeClass('ri-corner-right-down-line').addClass('ri-corner-right-up-line'); | |
} else { | |
mQuery("#contact-timeline a[data-activate-details!='all']").each(function () { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#timeline-details-'+detailsId).length) { | |
mQuery('#timeline-details-' + detailsId).addClass('hide'); | |
mQuery(this).removeClass('active'); | |
} | |
}); | |
mQuery(this).find('span').first().removeClass('ri-corner-right-up-line').addClass('ri-corner-right-down-line'); | |
} | |
}); | |
mQuery("#contact-timeline a[data-activate-details!='all']").on('click', function() { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#timeline-details-'+detailsId).length) { | |
var activateDetailsState = mQuery(this).hasClass('active'); | |
if (activateDetailsState) { | |
mQuery('#timeline-details-'+detailsId).addClass('hide'); | |
mQuery(this).removeClass('active'); | |
} else { | |
mQuery('#timeline-details-'+detailsId).removeClass('hide'); | |
mQuery(this).addClass('active'); | |
} | |
} | |
}); | |
if (response && typeof response.timelineCount != 'undefined') { | |
mQuery('#TimelineCount').html(response.timelineCount); | |
} | |
}; | |
Mautic.leadAuditlogOnLoad = function (container, response) { | |
mQuery("#contact-auditlog a[data-activate-details='all']").on('click', function() { | |
if (mQuery(this).find('span').first().hasClass('ri-corner-right-down-line')) { | |
mQuery("#contact-auditlog a[data-activate-details!='all']").each(function () { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#auditlog-details-'+detailsId).length) { | |
mQuery('#auditlog-details-' + detailsId).removeClass('hide'); | |
mQuery(this).addClass('active'); | |
} | |
}); | |
mQuery(this).find('span').first().removeClass('ri-corner-right-down-line').addClass('ri-corner-right-up-line'); | |
} else { | |
mQuery("#contact-auditlog a[data-activate-details!='all']").each(function () { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#auditlog-details-'+detailsId).length) { | |
mQuery('#auditlog-details-' + detailsId).addClass('hide'); | |
mQuery(this).removeClass('active'); | |
} | |
}); | |
mQuery(this).find('span').first().removeClass('ri-corner-right-up-line').addClass('ri-corner-right-down-line'); | |
} | |
}); | |
mQuery("#contact-auditlog a[data-activate-details!='all']").on('click', function() { | |
var detailsId = mQuery(this).data('activate-details'); | |
if (detailsId && mQuery('#auditlog-details-'+detailsId).length) { | |
var activateDetailsState = mQuery(this).hasClass('active'); | |
if (activateDetailsState) { | |
mQuery('#auditlog-details-'+detailsId).addClass('hide'); | |
mQuery(this).removeClass('active'); | |
} else { | |
mQuery('#auditlog-details-'+detailsId).removeClass('hide'); | |
mQuery(this).addClass('active'); | |
} | |
} | |
}); | |
}; | |
Mautic.leadOnUnload = function(id) { | |
if (typeof MauticVars.moderatedIntervals['leadListLiveUpdate'] != 'undefined') { | |
Mautic.clearModeratedInterval('leadListLiveUpdate'); | |
} | |
if (typeof Mautic.mapObjects !== 'undefined') { | |
delete Mautic.mapObjects; | |
} | |
}; | |
Mautic.getLeadId = function() { | |
return mQuery('input#leadId').val(); | |
} | |
Mautic.leadlistOnLoad = function(container, response) { | |
const segmentCountElem = mQuery('a.col-count'); | |
if (segmentCountElem.length) { | |
segmentCountElem.each(function() { | |
const elem = mQuery(this); | |
const id = elem.attr('data-id'); | |
Mautic.ajaxActionRequest( | |
'lead:getLeadCount', | |
{id: id}, | |
function (response) { | |
elem.html(response.html); | |
}, | |
false, | |
true, | |
"GET" | |
); | |
}); | |
} | |
mQuery('#campaign-share-tab').hover(function () { | |
if (Mautic.shareTableLoaded != true) { | |
Mautic.loadAjaxColumn('campaign-share-stat', 'lead:getCampaignShareStats', 'afterStatsLoad'); | |
Mautic.shareTableLoaded = true; | |
} | |
}) | |
Mautic.afterStatsLoad = function () { | |
Mautic.sortTableByColumn('#campaign-share-table', '.campaign-share-stat', true) | |
} | |
if (mQuery(container + ' #list-search').length) { | |
Mautic.activateSearchAutocomplete('list-search', 'lead.list'); | |
} | |
var prefix = 'leadlist'; | |
var parent = mQuery('.dynamic-content-filter, .dwc-filter'); | |
if (parent.length) { | |
prefix = parent.attr('id'); | |
} | |
if (mQuery('#' + prefix + '_filters').length) { | |
mQuery('#available_segment_filters').on('change', function() { | |
if (mQuery(this).val()) { | |
Mautic.addLeadListFilter(mQuery(this).val(),mQuery('option:selected',this).data('field-object')); | |
mQuery(this).val(''); | |
mQuery(this).trigger('chosen:updated'); | |
} | |
}); | |
mQuery('#' + prefix + '_filters .remove-selected').each( function (index, el) { | |
mQuery(el).on('click', function () { | |
mQuery(this).closest('.panel').animate( | |
{'opacity': 0}, | |
'fast', | |
function () { | |
mQuery(this).remove(); | |
Mautic.reorderSegmentFilters(); | |
} | |
); | |
if (!mQuery('#' + prefix + '_filters li:not(.placeholder)').length) { | |
mQuery('#' + prefix + '_filters li.placeholder').removeClass('hide'); | |
} else { | |
mQuery('#' + prefix + '_filters li.placeholder').addClass('hide'); | |
} | |
}); | |
}); | |
var bodyOverflow = {}; | |
mQuery('#' + prefix + '_filters').sortable({ | |
items: '.panel', | |
helper: function(e, ui) { | |
ui.children().each(function() { | |
if (mQuery(this).is(":visible")) { | |
mQuery(this).width(mQuery(this).width()); | |
} | |
}); | |
// Fix body overflow that messes sortable up | |
bodyOverflow.overflowX = mQuery('body').css('overflow-x'); | |
bodyOverflow.overflowY = mQuery('body').css('overflow-y'); | |
mQuery('body').css({ | |
overflowX: 'visible', | |
overflowY: 'visible' | |
}); | |
return ui; | |
}, | |
scroll: true, | |
axis: 'y', | |
stop: function(e, ui) { | |
// Restore original overflow | |
mQuery('body').css(bodyOverflow); | |
// First in the list should be an "and" | |
ui.item.find('select.glue-select').first().val('and'); | |
Mautic.reorderSegmentFilters(); | |
} | |
}); | |
} | |
// segment contact filters | |
var segmentContactForm = mQuery('#segment-contact-filters'); | |
if (segmentContactForm.length) { | |
segmentContactForm.on('change', function() { | |
segmentContactForm.submit(); | |
}).on('keyup', function() { | |
segmentContactForm.delay(200).submit(); | |
}).on('submit', function(e) { | |
e.preventDefault(); | |
Mautic.refreshSegmentContacts(segmentContactForm); | |
}); | |
} | |
jQuery(document).ajaxComplete(function(){ | |
Mautic.ajaxifyForm('daterange'); | |
}); | |
Mautic.attachJsUiOnFilterForms(); | |
}; | |
/** | |
* Trigger event so plugins could attach other JS magic to the form. | |
*/ | |
Mautic.triggerOnPropertiesFormLoadedEvent = function(selector, filterValue) { | |
mQuery('#leadlist_filters').trigger('filter.properties.form.loaded', [selector, filterValue]); | |
}; | |
Mautic.attachJsUiOnFilterForms = function() { | |
mQuery('#leadlist_filters').on('filter.properties.form.loaded', function(event, selector, filterValue) { | |
Mautic.activateChosenSelect(selector + '_properties select'); | |
var fieldType = mQuery(selector + '_type').val(); | |
var fieldAlias = mQuery(selector + '_field').val(); | |
var filterFieldEl = mQuery(selector + '_properties_filter'); | |
if (filterValue) { | |
filterFieldEl.val(filterValue); | |
if (filterFieldEl.is('select')) { | |
filterFieldEl.trigger('chosen:updated'); | |
} | |
} | |
if (fieldType === 'lookup') { | |
Mautic.activateLookupTypeahead(filterFieldEl.parent()); | |
} else if (fieldType === 'datetime') { | |
filterFieldEl.datetimepicker({ | |
format: 'Y-m-d H:i', | |
lazyInit: true, | |
validateOnBlur: false, | |
allowBlank: true, | |
scrollMonth: false, | |
scrollInput: false | |
}); | |
} else if (fieldType === 'date') { | |
filterFieldEl.datetimepicker({ | |
timepicker: false, | |
format: 'Y-m-d', | |
lazyInit: true, | |
validateOnBlur: false, | |
allowBlank: true, | |
scrollMonth: false, | |
scrollInput: false, | |
closeOnDateSelect: true | |
}); | |
} else if (fieldType === 'time') { | |
filterFieldEl.datetimepicker({ | |
datepicker: false, | |
format: 'H:i', | |
lazyInit: true, | |
validateOnBlur: false, | |
allowBlank: true, | |
scrollMonth: false, | |
scrollInput: false | |
}); | |
} else if (fieldType === 'lookup_id') { | |
var displayFieldEl = mQuery(selector + '_properties_display'); | |
var fieldCallback = displayFieldEl.attr('data-field-callback'); | |
if (fieldCallback && typeof Mautic[fieldCallback] === 'function') { | |
var fieldOptions = displayFieldEl.attr('data-field-list'); | |
Mautic[fieldCallback](selector.replace('#', '') + '_properties_display', fieldAlias, fieldOptions); | |
} | |
} | |
}); | |
// Trigger event so plugins could attach other JS magic to the form. | |
mQuery('#leadlist_filters .panel').each(function() { | |
Mautic.triggerOnPropertiesFormLoadedEvent('#' + mQuery(this).attr('id')); | |
}); | |
}; | |
Mautic.reorderSegmentFilters = function() { | |
// Update the filter numbers sot that they are ordered correctly when processed and grouped server side | |
var counter = 0; | |
var prefix = 'leadlist'; | |
var parent = mQuery('.dynamic-content-filter, .dwc-filter'); | |
if (parent.length) { | |
prefix = parent.attr('id'); | |
} | |
mQuery('#' + prefix + '_filters .panel').each(function() { | |
Mautic.updateFilterPositioning(mQuery(this).find('select.glue-select').first()); | |
mQuery(this).find('[id^="' + prefix + '_filters_"]').each(function() { | |
var id = mQuery(this).attr('id'); | |
var name = mQuery(this).attr('name'); | |
var suffix = id.split(/[_]+/).pop(); | |
var isProperties = id.includes("_properties_"); | |
if (prefix + '_filters___name___filter' === id) { | |
return true; | |
} | |
if (name) { | |
if (isProperties){ | |
var newName = prefix + '[filters][' + counter + '][properties][' + suffix + ']'; | |
var properties = 'properties_'; | |
} | |
else { | |
var newName = prefix + '[filters][' + counter + '][' + suffix + ']'; | |
var properties = ''; | |
} | |
if (name.slice(-2) === '[]') { | |
newName += '[]'; | |
} | |
mQuery(this).attr('name', newName); | |
mQuery(this).attr('id', prefix + '_filters_' + counter + '_' + properties + suffix); | |
} | |
mQuery(this).attr('name', newName); | |
mQuery(this).attr('id', prefix + '_filters_'+counter+'_'+suffix); | |
// Destroy the chosen and recreate | |
if (mQuery(this).is('select') && suffix == "filter") { | |
Mautic.destroyChosen(mQuery(this)); | |
Mautic.activateChosenSelect(mQuery(this)); | |
} | |
}); | |
++counter; | |
}); | |
mQuery('#' + prefix + '_filters .panel-heading').removeClass('hide'); | |
mQuery('#' + prefix + '_filters .panel-heading').first().addClass('hide'); | |
}; | |
Mautic.convertLeadFilterInput = function(el) { | |
var operatorSelect = mQuery(el); | |
// Extract the filter number | |
var regExp = /_filters_(\d+)_operator/; | |
var matches = regExp.exec(operatorSelect.attr('id')); | |
var filterNum = matches[1]; | |
var fieldAlias = mQuery('#leadlist_filters_'+filterNum+'_field'); | |
var fieldObject = mQuery('#leadlist_filters_'+filterNum+'_object'); | |
var filterValue = mQuery('#leadlist_filters_'+filterNum+'_properties_filter').val(); | |
var filterId = '#leadlist_filters_' + filterNum + '_properties_filter'; | |
Mautic.loadFilterForm(filterNum, fieldObject.val(), fieldAlias.val(), operatorSelect.val(), function(propertiesFields) { | |
var selector = '#leadlist_filters_'+filterNum; | |
mQuery(selector+'_properties').html(propertiesFields); | |
Mautic.triggerOnPropertiesFormLoadedEvent(selector, filterValue); | |
}); | |
Mautic.setProcessorForFilterValue(filterId, operatorSelect.val()); | |
}; | |
Mautic.setFilterValuesProcessor = function () { | |
mQuery('.filter-operator').each(function (index) { | |
let filterId = "#" + mQuery('.filter-value').eq(index).attr('id'); | |
Mautic.setProcessorForFilterValue(filterId, mQuery(this).val()) | |
}); | |
}; | |
Mautic.setProcessorForFilterValue = function (filterId, operator) { | |
let isInOperator = (operator == 'in' || operator == '!in'); | |
if (isInOperator && mQuery(filterId).attr('type') === 'text') { | |
mQuery(filterId).on('paste', function (e) { | |
let value = e.originalEvent.clipboardData.getData('text'); | |
value = value.replace(/\r?\n/g, '|'); | |
if (value.slice(-1) === '|') { | |
value = value.slice(0, -1); | |
} | |
mQuery(filterId).val(value); | |
e.preventDefault(); | |
}); | |
} else { | |
mQuery(filterId).off('paste'); | |
} | |
}; | |
/** | |
* Adds values to the lookup_id form after user selects a typeahead option. | |
*/ | |
Mautic.updateLookupListFilter = function(field, item) { | |
if (item && item.id) { | |
var filterField = '#'+field.replace('_display', '_filter'); | |
mQuery(filterField).val(item.id); | |
mQuery(field).val(item.name); | |
} | |
}; | |
Mautic.activateSegmentFilterTypeahead = function(displayId, filterId, fieldOptions, mQueryObject) { | |
var mQueryBackup = mQuery; | |
if (typeof mQueryObject === 'function') { | |
mQuery = mQueryObject; | |
} | |
mQuery('#' + displayId).attr('data-lookup-callback', 'updateLookupListFilter'); | |
Mautic.activateFieldTypeahead(displayId, filterId, [], mQuery('#' + displayId).data('action') || 'lead:fieldList'); | |
mQuery = mQueryBackup; | |
}; | |
Mautic.loadFilterForm = function(filterNum, fieldObject, fieldAlias, operator, resultHtml, search = null) { | |
mQuery.ajax({ | |
showLoadingBar: true, | |
url: mauticAjaxUrl, | |
type: 'POST', | |
data: { | |
action: 'lead:loadSegmentFilterForm', | |
fieldAlias: fieldAlias, | |
fieldObject: fieldObject, | |
operator: operator, | |
filterNum: filterNum, | |
search: search, | |
}, | |
dataType: 'json', | |
success: function (response) { | |
Mautic.stopPageLoadingBar(); | |
resultHtml(response.viewParameters.form); | |
if (fieldAlias == 'lead_asset_download') { | |
Mautic.handleAssetDownloadSearch(filterNum, fieldObject, fieldAlias, operator, resultHtml, search); | |
} | |
}, | |
error: function (request, textStatus, errorThrown) { | |
Mautic.processAjaxError(request, textStatus, errorThrown); | |
} | |
}); | |
} | |
Mautic.addLeadListFilter = function (elId, elObj) { | |
var filterId = '#available_' + elObj + '_' + elId; | |
var filterOption = mQuery(filterId); | |
var label = filterOption.text(); | |
// Create a new filter | |
var filterNum = parseInt(mQuery('.available-filters').data('index')); | |
mQuery('.available-filters').data('index', filterNum + 1); | |
var prototypeStr = mQuery('.available-filters').data('prototype'); | |
var fieldType = filterOption.data('field-type'); | |
var fieldObject = filterOption.data('field-object'); | |
prototypeStr = prototypeStr.replace(/__name__/g, filterNum); | |
prototypeStr = prototypeStr.replace(/__label__/g, label); | |
// Convert to DOM | |
prototype = mQuery(prototypeStr); | |
var prefix = 'leadlist'; | |
var parent = mQuery(filterId).parents('.dynamic-content-filter, .dwc-filter'); | |
if (parent.length) { | |
prefix = parent.attr('id'); | |
} | |
var filterBase = prefix + "[filters][" + filterNum + "]"; | |
var filterIdBase = prefix + "_filters_" + filterNum + "_"; | |
if (mQuery('#' + prefix + '_filters div.panel').length == 0) { | |
// First filter so hide the glue footer | |
prototype.find(".panel-heading").addClass('hide'); | |
} | |
if (fieldObject == 'company') { | |
prototype.find(".object-icon").removeClass('ri-user-6-fill').addClass('ri-building-2-line'); | |
} else { | |
prototype.find(".object-icon").removeClass('ri-building-2-line').addClass('ri-user-6-fill'); | |
} | |
prototype.find(".inline-spacer").append(fieldObject); | |
prototype.find("a.remove-selected").on('click', function() { | |
mQuery(this).closest('.panel').animate( | |
{'opacity': 0}, | |
'fast', | |
function () { | |
mQuery(this).remove(); | |
Mautic.reorderSegmentFilters(); | |
} | |
); | |
}); | |
prototype.find("input[name='" + filterBase + "[field]']").val(elId); | |
prototype.find("input[name='" + filterBase + "[type]']").val(fieldType); | |
prototype.find("input[name='" + filterBase + "[object]']").val(fieldObject); | |
prototype.appendTo('#' + prefix + '_filters'); | |
var operators = filterOption.data('field-operators'); | |
mQuery('#' + filterIdBase + 'operator').html(''); | |
mQuery.each(operators, function (label, value) { | |
var newOption = mQuery('<option/>').val(value).text(label); | |
newOption.appendTo(mQuery('#' + filterIdBase + 'operator')); | |
}); | |
// Convert based on first option in list | |
Mautic.convertLeadFilterInput('#' + filterIdBase + 'operator'); | |
// Reposition if applicable | |
Mautic.updateFilterPositioning(mQuery('#' + filterIdBase + 'glue')); | |
}; | |
Mautic.leadfieldOnLoad = function (container) { | |
if (mQuery(container + ' .leadfield-list').length) { | |
var bodyOverflow = {}; | |
mQuery(container + ' .leadfield-list tbody').sortable({ | |
handle: '.ri-draggable', | |
helper: function(e, ui) { | |
ui.children().each(function() { | |
mQuery(this).width(mQuery(this).width()); | |
}); | |
// Fix body overflow that messes sortable up | |
bodyOverflow.overflowX = mQuery('body').css('overflow-x'); | |
bodyOverflow.overflowY = mQuery('body').css('overflow-y'); | |
mQuery('body').css({ | |
overflowX: 'visible', | |
overflowY: 'visible' | |
}); | |
return ui; | |
}, | |
scroll: false, | |
axis: 'y', | |
containment: container + ' .leadfield-list', | |
stop: function(e, ui) { | |
// Restore original overflow | |
mQuery('body').css(bodyOverflow); | |
// Get the page and limit | |
mQuery.ajax({ | |
type: "POST", | |
url: mauticAjaxUrl + "?action=lead:reorder&limit=" + mQuery('.pagination-limit').val() + '&page=' + mQuery('.pagination li.active a span').first().text(), | |
data: mQuery(container + ' .leadfield-list tbody').sortable("serialize") | |
}); | |
} | |
}); | |
} | |
if (mQuery(container + ' form[name="leadfield"]').length) { | |
Mautic.updateLeadFieldProperties(mQuery('#leadfield_type').val(), true); | |
} | |
}; | |
Mautic.updateLeadFieldProperties = function(selectedVal, onload) { | |
let isMultiselect = selectedVal === 'multiselect' ? true : false; | |
if (selectedVal === 'multiselect') { | |
// Use select | |
selectedVal = 'select'; | |
} | |
if (mQuery('#field-templates .' + selectedVal).length) { | |
mQuery('#leadfield_properties').html( | |
mQuery('#field-templates .' + selectedVal).html() | |
.replace(/leadfield_properties_template/g, 'leadfield_properties') | |
); | |
mQuery("#leadfield_properties *[data-toggle='sortablelist']").each(function (index) { | |
var sortableList = mQuery(this); | |
Mautic.activateSortable(this); | |
// Using an interval so removing, adding, updating and reordering are accounted for | |
var contactFieldListOptions = mQuery('#leadfield_properties').find('input').map(function() { | |
return mQuery(this).val(); | |
}).get().join(); | |
var updateDefaultValuesetInterval = setInterval(function() { | |
var evalListOptions = mQuery('#leadfield_properties').find('input').map(function() { | |
return mQuery(this).val(); | |
}).get().join(); | |
if (mQuery('#leadfield_properties_itemcount').length) { | |
if (contactFieldListOptions != evalListOptions) { | |
contactFieldListOptions = evalListOptions; | |
var selected = mQuery('#leadfield_defaultValue').val(); | |
mQuery('#leadfield_defaultValue').html('<option value=""></option>'); | |
var labels = mQuery('#leadfield_properties').find('input.sortable-label'); | |
if (labels.length) { | |
labels.each(function () { | |
// label/value pairs | |
var label = mQuery(this).val(); | |
var val = mQuery(this).closest('.row').find('input.sortable-value').first().val(); | |
mQuery('<option value="' + val + '">' + label + '</option>').appendTo(mQuery('#leadfield_defaultValue')); | |
}); | |
} else { | |
mQuery('#leadfield_properties .list-sortable').find('input').each(function () { | |
var val = mQuery(this).val(); | |
mQuery('<option value="' + val + '">' + val + '</option>').appendTo(mQuery('#leadfield_defaultValue')); | |
}); | |
} | |
mQuery('#leadfield_defaultValue').val(selected); | |
mQuery('#leadfield_defaultValue').trigger('chosen:updated'); | |
} | |
} else { | |
clearInterval(updateDefaultValuesetInterval); | |
delete contactFieldListOptions; | |
} | |
}, 500); | |
}); | |
} else if (!mQuery('#leadfield_properties .' + selectedVal).length) { | |
mQuery('#leadfield_properties').html(''); | |
} | |
if (selectedVal == 'time') { | |
mQuery('#leadfield_isListable').closest('.row').addClass('hide'); | |
} else { | |
mQuery('#leadfield_isListable').closest('.row').removeClass('hide'); | |
} | |
// Switch default field if applicable | |
var defaultValueField = mQuery('#leadfield_defaultValue'); | |
if (defaultValueField.hasClass('calendar-activated')) { | |
defaultValueField.datetimepicker('destroy').removeClass('calendar-activated'); | |
} else if (mQuery('#leadfield_defaultValue_chosen').length) { | |
Mautic.destroyChosen(defaultValueField); | |
} | |
var defaultFieldType = mQuery('input[name="leadfield[defaultValue]"]').attr('type'); | |
var tempType = selectedVal; | |
var html = ''; | |
var isSelect = false; | |
var defaultVal = defaultValueField.val(); | |
switch (selectedVal) { | |
case 'boolean': | |
if (defaultFieldType != 'radio') { | |
// Convert to a boolean type | |
html = '<div id="leadfield_default_template_boolean">' + mQuery('#field-templates .default_template_boolean').html() + '</div>'; | |
} | |
break; | |
case 'country': | |
case 'region': | |
case 'locale': | |
case 'timezone': | |
html = mQuery('#field-templates .default_template_' + selectedVal).html(); | |
isSelect = true; | |
break; | |
case 'select': | |
case 'lookup': | |
html = mQuery('#field-templates .default_template_select').html(); | |
tempType = 'select'; | |
isSelect = true; | |
break; | |
case 'textarea': | |
html = mQuery('#field-templates .default_template_textarea').html(); | |
break; | |
default: | |
html = mQuery('#field-templates .default_template_text').html(); | |
tempType = 'text'; | |
if (html != undefined && (selectedVal == 'number' || selectedVal == 'tel' || selectedVal == 'url' || selectedVal == 'email')) { | |
var replace = 'type="text"'; | |
var regex = new RegExp(replace, "g"); | |
html = html.replace(regex, 'type="' + selectedVal + '"'); | |
} | |
break; | |
} | |
if (html && !onload) { | |
var replace = 'default_template_' + tempType; | |
var regex = new RegExp(replace, "g"); | |
html = html.replace(regex, 'defaultValue') | |
defaultValueField.replaceWith(mQuery(html)); | |
mQuery('#leadfield_defaultValue').val(defaultVal); | |
if (isMultiselect) { | |
mQuery('#leadfield_defaultValue').attr('multiple', 'multiple'); | |
mQuery('#leadfield_defaultValue').attr('name', mQuery('#leadfield_defaultValue').attr('name')+'[]'); | |
} | |
} | |
if (selectedVal === 'datetime' || selectedVal === 'date' || selectedVal === 'time') { | |
Mautic.activateDateTimeInputs('#leadfield_defaultValue', selectedVal); | |
} else if (isSelect) { | |
Mautic.activateChosenSelect('#leadfield_defaultValue'); | |
} | |
}; | |
Mautic.updateLeadFieldBooleanLabels = function(el, label) { | |
mQuery('#leadfield_defaultValue_' + label).parent().find('span').text( | |
mQuery(el).val() | |
); | |
}; | |
Mautic.refreshLeadSocialProfile = function(network, leadId, event) { | |
var query = "action=lead:updateSocialProfile&network=" + network + "&lead=" + leadId; | |
mQuery.ajax({ | |
showLoadingBar: true, | |
url: mauticAjaxUrl, | |
type: "POST", | |
data: query, | |
dataType: "json", | |
success: function (response) { | |
if (response.success) { | |
if (response.completeProfile) { | |
mQuery('#social-container').html(response.completeProfile); | |
mQuery('#SocialCount').html(response.socialCount); | |
} else { | |
//loop through each network | |
mQuery.each(response.profiles, function (index, value) { | |
if (mQuery('#' + index + 'CompleteProfile').length) { | |
mQuery('#' + index + 'CompleteProfile').html(value.newContent); | |
} | |
}); | |
} | |
} | |
Mautic.stopPageLoadingBar(); | |
Mautic.stopIconSpinPostEvent(); | |
}, | |
error: function (request, textStatus, errorThrown) { | |
Mautic.processAjaxError(request, textStatus, errorThrown); | |
} | |
}); | |
Mautic.setFilterValuesProcessor(); | |
}; | |
Mautic.clearLeadSocialProfile = function(network, leadId, event) { | |
Mautic.startIconSpinOnEvent(event); | |
var query = "action=lead:clearSocialProfile&network=" + network + "&lead=" + leadId; | |
mQuery.ajax({ | |
url: mauticAjaxUrl, | |
type: "POST", | |
data: query, | |
dataType: "json", | |
success: function (response) { | |
if (response.success) { | |
//activate the click to remove the panel | |
mQuery('.' + network + '-panelremove').click(); | |
if (response.completeProfile) { | |
mQuery('#social-container').html(response.completeProfile); | |
} | |
mQuery('#SocialCount').html(response.socialCount); | |
} | |
Mautic.stopIconSpinPostEvent(); | |
}, | |
error: function (request, textStatus, errorThrown) { | |
Mautic.processAjaxError(request, textStatus, errorThrown); | |
Mautic.stopIconSpinPostEvent(); | |
} | |
}); | |
}; | |
Mautic.refreshLeadAuditLog = function(form) { | |
Mautic.postForm(mQuery(form), function (response) { | |
response.target = '#auditlog-table'; | |
mQuery('#AuditLogCount').html(response.auditLogCount); | |
Mautic.processPageContent(response); | |
}); | |
}; | |
Mautic.refreshLeadTimeline = function(form) { | |
Mautic.postForm(mQuery(form), function (response) { | |
response.target = '#timeline-table'; | |
mQuery('#TimelineCount').html(response.timelineCount); | |
Mautic.processPageContent(response); | |
}); | |
}; | |
Mautic.refreshLeadNotes = function(form) { | |
Mautic.postForm(mQuery(form), function (response) { | |
response.target = '#NoteList'; | |
mQuery('#NoteCount').html(response.noteCount); | |
Mautic.processPageContent(response); | |
}); | |
}; | |
Mautic.refreshSegmentContacts = function(form) { | |
Mautic.postForm(mQuery(form), function (response) { | |
response.target = '#contacts-container'; | |
Mautic.processPageContent(response); | |
}); | |
}; | |
Mautic.toggleLeadList = function(toggleId, leadId, listId) { | |
var action = mQuery('#' + toggleId).hasClass('ri-toggle-fill') ? 'remove' : 'add'; | |
var query = "action=lead:toggleLeadList&leadId=" + leadId + "&listId=" + listId + "&listAction=" + action; | |
Mautic.toggleLeadSwitch(toggleId, query, action); | |
}; | |
Mautic.togglePreferredChannel = function(channel) { | |
if (channel === 'all') { | |
var channelsForm = mQuery('form[name="contact_channels"]'); | |
var status = channelsForm.find('#contact_channels_subscribed_channels_0:checked').length; | |
channelsForm.find('tbody input:checkbox').each(function() { | |
if (this.checked != status) { | |
this.checked = status; | |
Mautic.setPreferredChannel(this.value); | |
} | |
}); | |
} else { | |
Mautic.setPreferredChannel(channel); | |
} | |
}; | |
Mautic.setPreferredChannel = function(channel) { | |
mQuery( '#frequency_' + channel ).slideToggle(); | |
mQuery( '#frequency_' + channel ).removeClass('hide'); | |
if (mQuery('#' + channel)[0].checked) { | |
mQuery('#is-contactable-' + channel).removeClass('text-muted'); | |
mQuery('#lead_contact_frequency_rules_frequency_number_' + channel).prop("disabled" , false).trigger("chosen:updated"); | |
mQuery('#preferred_' + channel).prop("disabled" , false); | |
mQuery('#lead_contact_frequency_rules_frequency_time_' + channel).prop("disabled" , false).trigger("chosen:updated"); | |
mQuery('#lead_contact_frequency_rules_contact_pause_start_date_' + channel).prop("disabled" , false); | |
mQuery('#lead_contact_frequency_rules_contact_pause_end_date_' + channel).prop("disabled" , false); | |
} else { | |
mQuery('#is-contactable-' + channel).addClass('text-muted'); | |
mQuery('#lead_contact_frequency_rules_frequency_number_' + channel).prop("disabled" , true).trigger("chosen:updated"); | |
mQuery('#preferred_' + channel).prop("disabled" , true); | |
mQuery('#lead_contact_frequency_rules_frequency_time_' + channel).prop("disabled" , true).trigger("chosen:updated"); | |
mQuery('#lead_contact_frequency_rules_contact_pause_start_date_' + channel).prop("disabled" , true); | |
mQuery('#lead_contact_frequency_rules_contact_pause_end_date_' + channel).prop("disabled" , true); | |
} | |
}; | |
Mautic.toggleCompanyLead = function(toggleId, leadId, companyId) { | |
var action = mQuery('#' + toggleId).hasClass('ri-toggle-fill') ? 'remove' : 'add'; | |
var query = "action=lead:toggleCompanyLead&leadId=" + leadId + "&companyId=" + companyId + "&companyAction=" + action; | |
Mautic.toggleLeadSwitch(toggleId, query, action); | |
}; | |
Mautic.toggleLeadCampaign = function(toggleId, leadId, campaignId) { | |
var action = mQuery('#' + toggleId).hasClass('ri-toggle-fill') ? 'remove' : 'add'; | |
var query = "action=lead:toggleLeadCampaign&leadId=" + leadId + "&campaignId=" + campaignId + "&campaignAction=" + action; | |
Mautic.toggleLeadSwitch(toggleId, query, action); | |
}; | |
Mautic.toggleLeadSwitch = function(toggleId, query, action) { | |
var toggleOn = 'ri-toggle-fill text-success'; | |
var toggleOff = 'ri-toggle-line text-danger'; | |
var spinClass = 'fa-spin fa-spinner '; | |
if (action == 'remove') { | |
//switch it on | |
mQuery('#' + toggleId).removeClass(toggleOn).addClass(spinClass + 'text-danger'); | |
} else { | |
mQuery('#' + toggleId).removeClass(toggleOff).addClass(spinClass + 'text-success'); | |
} | |
mQuery.ajax({ | |
url: mauticAjaxUrl, | |
type: "POST", | |
data: query, | |
dataType: "json", | |
success: function (response) { | |
mQuery('#' + toggleId).removeClass(spinClass); | |
if (!response.success) { | |
//return the icon back | |
if (action == 'remove') { | |
//switch it on | |
mQuery('#' + toggleId).removeClass(toggleOff).addClass(toggleOn); | |
} else { | |
mQuery('#' + toggleId).removeClass(toggleOn).addClass(toggleOff); | |
} | |
} else { | |
if (action == 'remove') { | |
//switch it on | |
mQuery('#' + toggleId).removeClass(toggleOn).addClass(toggleOff); | |
} else { | |
mQuery('#' + toggleId).removeClass(toggleOff).addClass(toggleOn); | |
} | |
} | |
}, | |
error: function (request, textStatus, errorThrown) { | |
//return the icon back | |
mQuery('#' + toggleId).removeClass(spinClass); | |
if (action == 'remove') { | |
//switch it on | |
mQuery('#' + toggleId).removeClass(toggleOff).addClass(toggleOn); | |
} else { | |
mQuery('#' + toggleId).removeClass(toggleOn).addClass(toggleOff); | |
} | |
} | |
}); | |
}; | |
Mautic.leadNoteOnLoad = function (container, response) { | |
if (response.noteHtml) { | |
var el = '#LeadNote' + response.noteId; | |
if (mQuery(el).length) { | |
mQuery(el).replaceWith(response.noteHtml); | |
} else { | |
mQuery('#LeadNotes').prepend(response.noteHtml); | |
} | |
Mautic.makeModalsAlive(mQuery(el + " *[data-toggle='ajaxmodal']")); | |
Mautic.makeConfirmationsAlive(mQuery(el+' a[data-toggle="confirmation"]')); | |
Mautic.makeLinksAlive(mQuery(el + " a[data-toggle='ajax']")); | |
} else if (response.deleteId && mQuery('#LeadNote' + response.deleteId).length) { | |
mQuery('#LeadNote' + response.deleteId).remove(); | |
} | |
if (response.upNoteCount || response.noteCount || response.downNoteCount) { | |
var noteCountWrapper = mQuery('#NoteCount'); | |
var count = parseInt(noteCountWrapper.text().trim()); | |
if (response.upNoteCount) { | |
count++; | |
} else if (response.downNoteCount) { | |
count--; | |
} else { | |
count = parseInt(response.noteCount); | |
} | |
noteCountWrapper.text(count); | |
} | |
}; | |
Mautic.showSocialMediaImageModal = function(imgSrc) { | |
mQuery('#socialImageModal img').attr('src', imgSrc); | |
mQuery('#socialImageModal').modal('show'); | |
}; | |
Mautic.leadImportOnLoad = function (container, response) { | |
if (!mQuery('#leadImportProgress').length) { | |
Mautic.clearModeratedInterval('leadImportProgress'); | |
} else { | |
Mautic.setModeratedInterval('leadImportProgress', 'reloadLeadImportProgress', 3000); | |
} | |
}; | |
Mautic.reloadLeadImportProgress = function() { | |
if (!mQuery('#leadImportProgress').length) { | |
Mautic.clearModeratedInterval('leadImportProgress'); | |
} else { | |
// Get progress separate so there's no delay while the import batches | |
Mautic.ajaxActionRequest('lead:getImportProgress', {}, function(response) { | |
if (response.progress) { | |
if (response.progress[0] > 0) { | |
mQuery('.imported-count').html(response.progress[0]); | |
mQuery('.progress-bar-import').attr('aria-valuenow', response.progress[0]).css('width', response.percent + '%'); | |
mQuery('.progress-bar-import span.sr-only').html(response.percent + '%'); | |
} | |
} | |
}, false, false, "GET"); | |
// Initiate import | |
mQuery.ajax({ | |
showLoadingBar: false, | |
url: window.location + '?importbatch=1', | |
success: function(response) { | |
Mautic.moderatedIntervalCallbackIsComplete('leadImportProgress'); | |
if (response.newContent) { | |
// It's done so pass to process page | |
Mautic.processPageContent(response); | |
} | |
} | |
}); | |
} | |
}; | |
Mautic.removeBounceStatus = function (el, dncId, channel) { | |
mQuery(el).removeClass('ri-close-line').addClass('fa-spinner fa-spin'); | |
Mautic.ajaxActionRequest('lead:removeBounceStatus', {'id': dncId, 'channel': channel}, function() { | |
mQuery('#bounceLabel' + dncId).tooltip('destroy'); | |
mQuery('#bounceLabel' + dncId).fadeOut(300, function() { mQuery(this).remove(); }); | |
}); | |
}; | |
Mautic.removeTagFromLead = function (el, leadId, tagId) { | |
mQuery(el).removeClass('ri-close-line').addClass('fa-spinner fa-spin'); | |
Mautic.ajaxActionRequest('lead:removeTagFromLead', {'leadId': leadId, 'tagId': tagId}, function() { | |
mQuery('#tagLabel' + tagId).fadeOut(300, function() { mQuery(this).remove(); }); | |
}); | |
}; | |
Mautic.toggleLiveLeadListUpdate = function () { | |
if (typeof MauticVars.moderatedIntervals['leadListLiveUpdate'] == 'undefined') { | |
Mautic.setModeratedInterval('leadListLiveUpdate', 'updateLeadList', 5000); | |
mQuery('#liveModeButton').addClass('btn-primary'); | |
} else { | |
Mautic.clearModeratedInterval('leadListLiveUpdate'); | |
mQuery('#liveModeButton').removeClass('btn-primary'); | |
} | |
}; | |
Mautic.updateLeadList = function () { | |
var maxLeadId = mQuery('#liveModeButton').data('max-id'); | |
mQuery.ajax({ | |
url: mauticAjaxUrl, | |
type: "get", | |
data: "action=lead:getNewLeads&maxId=" + maxLeadId, | |
dataType: "json", | |
success: function (response) { | |
if (response.leads) { | |
if (response.indexMode == 'list') { | |
mQuery('#leadTable tbody').prepend(response.leads); | |
} else { | |
if (mQuery('.shuffle-grid').length) { | |
//give a slight delay in order for images to load so that shuffle starts out with correct dimensions | |
var Shuffle = window.Shuffle, | |
element = document.querySelector('.shuffle-grid'), | |
shuffleOptions = { | |
itemSelector: '.shuffle-item' | |
}; | |
// Using global variable to make it available outside of the scope of this function | |
window.leadsShuffleInstance = new Shuffle(element, shuffleOptions); | |
var items = mQuery(response.leads); | |
mQuery('.shuffle-grid').prepend(items); | |
window.leadsShuffleInstance.shuffle('appended', items.children(shuffleOptions.itemSelector).toArray()); | |
window.leadsShuffleInstance.shuffle('update'); | |
} | |
mQuery('#liveModeButton').data('max-id', response.maxId); | |
} | |
} | |
if (typeof IdleTimer != 'undefined' && !IdleTimer.isIdle()) { | |
// Remove highlighted classes | |
if (response.indexMode == 'list') { | |
mQuery('#leadTable tr.warning').each(function() { | |
var that = this; | |
setTimeout(function() { | |
mQuery(that).removeClass('warning', 1000) | |
}, 5000); | |
}); | |
} else { | |
mQuery('.shuffle-grid .highlight').each(function() { | |
var that = this; | |
setTimeout(function() { | |
mQuery(that).removeClass('highlight', 1000, function() { | |
mQuery(that).css('border-top-color', mQuery(that).data('color')); | |
}) | |
}, 5000); | |
}); | |
} | |
} | |
if (response.maxId) { | |
mQuery('#liveModeButton').data('max-id', response.maxId); | |
} | |
Mautic.moderatedIntervalCallbackIsComplete('leadListLiveUpdate'); | |
}, | |
error: function (request, textStatus, errorThrown) { | |
Mautic.processAjaxError(request, textStatus, errorThrown); | |
Mautic.moderatedIntervalCallbackIsComplete('leadListLiveUpdate'); | |
} | |
}); | |
}; | |
Mautic.toggleAnonymousLeads = function() { | |
var searchValue = mQuery('#list-search').typeahead('val'); | |
var string = mQuery('#anonymousLeadButton').data('anonymous').toLowerCase(); | |
if (searchValue.toLowerCase().indexOf('!' + string) == 0) { | |
searchValue = searchValue.replace('!' + string, string); | |
mQuery('#anonymousLeadButton').addClass('btn-primary'); | |
} else if (searchValue.toLowerCase().indexOf(string) == -1) { | |
if (searchValue) { | |
searchValue = searchValue + ' ' + string; | |
} else { | |
searchValue = string; | |
} | |
mQuery('#anonymousLeadButton').addClass('btn-primary'); | |
} else { | |
searchValue = mQuery.trim(searchValue.replace(string, '')); | |
mQuery('#anonymousLeadButton').removeClass('btn-primary'); | |
} | |
searchValue = searchValue.replace(" ", " "); | |
Mautic.setSearchFilter(null, 'list-search', searchValue); | |
}; | |
Mautic.getLeadEmailContent = function (el) { | |
var id = (mQuery.type( el ) === "string") ? el : mQuery(el).attr('id'); | |
Mautic.activateLabelLoadingIndicator(id); | |
var inModal = mQuery('#'+id).closest('modal').length; | |
if (inModal) { | |
mQuery('#MauticSharedModal .btn-primary').prop('disabled', true); | |
} | |
Mautic.ajaxActionRequest('lead:getEmailTemplate', {'template': mQuery(el).val()}, function(response) { | |
if (inModal) { | |
mQuery('#MauticSharedModal .btn-primary').prop('disabled', false); | |
} | |
var idPrefix = id.replace('templates', ''); | |
var bodyEl = (mQuery('#'+idPrefix+'message').length) ? '#'+idPrefix+'message' : '#'+idPrefix+'body'; | |
if (mauticFroalaEnabled && Mautic.getActiveBuilderName() === 'legacy') { | |
mQuery(bodyEl).froalaEditor('html.set', response.body); | |
} else { | |
ckEditors.get( mQuery(bodyEl)[0] ).setData(response.body); | |
} | |
mQuery(bodyEl).val(response.body); | |
mQuery('#'+idPrefix+'subject').val(response.subject); | |
Mautic.removeLabelLoadingIndicator(); | |
}, false, false, "GET"); | |
}; | |
Mautic.updateLeadTags = function () { | |
Mautic.activateLabelLoadingIndicator('lead_tags_tags'); | |
var formData = mQuery('form[name="lead_tags"]').serialize(); | |
Mautic.ajaxActionRequest('lead:updateLeadTags', formData, function(response) { | |
if (response.tags) { | |
mQuery('#lead_tags_tags').html(response.tags); | |
mQuery('#lead_tags_tags').trigger('chosen:updated'); | |
} | |
Mautic.removeLabelLoadingIndicator(); | |
}); | |
}; | |
Mautic.createLeadTag = function (el) { | |
var newFound = false; | |
mQuery('#' + mQuery(el).attr('id') + ' :selected').each(function(i, selected) { | |
if (!mQuery.isNumeric(mQuery(selected).val())) { | |
newFound = true; | |
} | |
}); | |
if (!newFound) { | |
return; | |
} | |
Mautic.activateLabelLoadingIndicator(mQuery(el).attr('id')); | |
var tags = JSON.stringify(mQuery(el).val()); | |
Mautic.ajaxActionRequest('lead:addLeadTags', {tags: tags}, function(response) { | |
if (response.tags) { | |
mQuery('#' + mQuery(el).attr('id')).html(response.tags); | |
mQuery('#' + mQuery(el).attr('id')).trigger('chosen:updated'); | |
} | |
Mautic.removeLabelLoadingIndicator(); | |
}); | |
}; | |
Mautic.createLeadUtmTag = function (el) { | |
var newFound = false; | |
mQuery('#' + mQuery(el).attr('id') + ' :selected').each(function(i, selected) { | |
if (!mQuery.isNumeric(mQuery(selected).val())) { | |
newFound = true; | |
} | |
}); | |
if (!newFound) { | |
return; | |
} | |
Mautic.activateLabelLoadingIndicator(mQuery(el).attr('id')); | |
var utmtags = JSON.stringify(mQuery(el).val()); | |
Mautic.ajaxActionRequest('lead:addLeadUtmTags', {utmtags: utmtags}, function(response) { | |
if (response.tags) { | |
mQuery('#' + mQuery(el).attr('id')).html(response.utmtags); | |
mQuery('#' + mQuery(el).attr('id')).trigger('chosen:updated'); | |
} | |
Mautic.removeLabelLoadingIndicator(); | |
}); | |
}; | |
Mautic.leadBatchSubmit = function() { | |
if (Mautic.batchActionPrecheck()) { | |
if (mQuery('#lead_batch_remove').val() || mQuery('#lead_batch_add').val() || mQuery('#lead_batch_dnc_reason').length || mQuery('#lead_batch_stage_addstage').length || mQuery('#lead_batch_owner_addowner').length || mQuery('#contact_channels_ids').length || mQuery('#batch_tag_tags_add_tags').val() || mQuery('#batch_tag_tags_remove_tags').val()) { | |
var ids = Mautic.getCheckedListIds(false, true); | |
if (mQuery('#lead_batch_ids').length) { | |
mQuery('#lead_batch_ids').val(ids); | |
} else if (mQuery('#lead_batch_dnc_reason').length) { | |
mQuery('#lead_batch_dnc_ids').val(ids); | |
} else if (mQuery('#lead_batch_stage_addstage').length) { | |
mQuery('#lead_batch_stage_ids').val(ids); | |
} else if (mQuery('#lead_batch_owner_addowner').length) { | |
mQuery('#lead_batch_owner_ids').val(ids); | |
} else if (mQuery('#contact_channels_ids').length) { | |
mQuery('#contact_channels_ids').val(ids); | |
} else if (mQuery('#batch_tag_ids').length) { | |
mQuery('#batch_tag_ids').val(ids); | |
} | |
return true; | |
} | |
} | |
mQuery('#MauticSharedModal').modal('hide'); | |
return false; | |
}; | |
Mautic.updateLeadFieldValues = function (field) { | |
mQuery('.condition-custom-date-row').hide(); | |
Mautic.updateFieldOperatorValue(field, 'lead:updateLeadFieldValues', Mautic.updateLeadFieldValueOptions, [true]); | |
}; | |
Mautic.updateLeadFieldValueOptions = function (field, updating) { | |
var fieldId = mQuery(field).attr('id'); | |
var fieldPrefix = fieldId.slice(0, -5); | |
if ('date' === mQuery('#'+fieldPrefix + 'operator').val()) { | |
var customOption = mQuery(field).find('option[data-custom=1]'); | |
var value = mQuery(field).val(); | |
var customSelected = mQuery(customOption).prop('selected'); | |
if (customSelected) { | |
if (!updating) { | |
// -/+ P/PT number unit | |
var regex = /(\+|-)(PT?)([0-9]*)([DMHY])$/g; | |
var match = regex.exec(value); | |
if (match) { | |
var interval = ('-' === match[1]) ? match[1] + match[3] : match[3]; | |
var unit = ('PT' === match[2] && 'M' === match[4]) ? 'i' : match[4]; | |
mQuery('#lead-field-custom-date-interval').val(interval); | |
mQuery('#lead-field-custom-date-unit').val(unit.toLowerCase()); | |
} | |
} else { | |
var interval = mQuery('#lead-field-custom-date-interval').val(); | |
var unit = mQuery('#lead-field-custom-date-unit').val(); | |
// Convert interval/unit into PHP a DateInterval format | |
var prefix = ("i" == unit || "h" == unit) ? "PT" : "P"; | |
// DateInterval uses M for minutes instead of i | |
if ("i" === unit) { | |
unit = "m"; | |
} | |
unit = unit.toUpperCase(); | |
var operator = "+"; | |
if (parseInt(interval) < 0) { | |
operator = "-"; | |
interval = -1 * parseInt(interval); | |
} | |
var newValue = operator + prefix + interval + unit; | |
customOption.attr('value', newValue); | |
} | |
mQuery('.condition-custom-date-row').show(); | |
} else { | |
mQuery('.condition-custom-date-row').hide(); | |
} | |
} else { | |
mQuery('.condition-custom-date-row').hide(); | |
} | |
}; | |
Mautic.toggleTimelineMoreVisiblity = function (el) { | |
if (mQuery(el).is(':visible')) { | |
mQuery(el).slideUp('fast'); | |
mQuery(el).next().text(mauticLang['showMore']); | |
} else { | |
mQuery(el).slideDown('fast'); | |
mQuery(el).next().text(mauticLang['hideMore']); | |
} | |
}; | |
Mautic.displayUniqueIdentifierWarning = function (el) { | |
if (mQuery(el).val() === "0") { | |
mQuery('.unique-identifier-warning').fadeOut('fast'); | |
} else { | |
mQuery('.unique-identifier-warning').fadeIn('fast'); | |
} | |
}; | |
Mautic.initUniqueIdentifierFields = function() { | |
var uniqueFields = mQuery('[data-unique-identifier]'); | |
if (uniqueFields.length) { | |
uniqueFields.on('change', function() { | |
var input = mQuery(this); | |
var request = { | |
field: input.data('unique-identifier'), | |
value: input.val(), | |
ignore: mQuery('#lead_unlockId').val() | |
}; | |
Mautic.ajaxActionRequest('lead:getLeadIdsByFieldValue', request, function(response) { | |
if (response.items !== 'undefined' && response.items.length) { | |
var warning = mQuery('<div class="exists-warning" />').text(response.existsMessage); | |
mQuery.each(response.items, function(i, item) { | |
if (i > 0) { | |
warning.append(mQuery('<span>, </span>')); | |
} | |
var link = mQuery('<a/>') | |
.attr('href', item.link) | |
.attr('target', '_blank') | |
.text(item.name+' ('+item.id+')'); | |
warning.append(link); | |
}); | |
warning.appendTo(input.parent()); | |
} else { | |
input.parent().find('div.exists-warning').remove(); | |
} | |
}, false, false, "GET"); | |
}); | |
} | |
}; | |
Mautic.updateFilterPositioning = function (el) { | |
var $el = mQuery(el); | |
var $parentEl = $el.closest('.panel'); | |
var list = $parentEl.parent().children('.panel'); | |
const isFirst = list.index($parentEl) === 0; | |
if (isFirst) { | |
$el.val('and'); | |
} | |
if ($el.val() === 'and' && !isFirst) { | |
$parentEl.addClass('in-group'); | |
} else { | |
$parentEl.removeClass('in-group'); | |
} | |
}; | |
Mautic.setAsPrimaryCompany = function (companyId,leadId){ | |
Mautic.ajaxActionRequest('lead:setAsPrimaryCompany', {'companyId': companyId, 'leadId': leadId}, function(response) { | |
if (response.success) { | |
if (response.oldPrimary == response.newPrimary && mQuery('#company-' + response.oldPrimary).hasClass('primary')) { | |
mQuery('#company-' + response.oldPrimary).removeClass('primary'); | |
} else { | |
mQuery('#company-' + response.oldPrimary).removeClass('primary'); | |
mQuery('#company-' + response.newPrimary).addClass('primary'); | |
} | |
} | |
}); | |
}; | |
Mautic.handleAssetDownloadSearch = function(filterNum, fieldObject, fieldAlias, operator, resultHtml, search) { | |
var assetDownloadFilter = mQuery('#leadlist_filters_' + filterNum + '_properties_filter'); | |
var assetDownloadInput = mQuery('#leadlist_filters_' + filterNum + '_properties input'); | |
var assetDownloadProperties = mQuery('#leadlist_filters_' + filterNum + '_properties'); | |
assetDownloadFilter.on('chosen:no_results', function () { | |
var search = assetDownloadInput.val(); | |
mQuery('#leadlist_filters_' + filterNum + '_properties .chosen-drop').remove(); | |
clearTimeout(mQuery.data(this, 'timer')); | |
var existingOptions = mQuery('#leadlist_filters_' + filterNum + '_properties_filter option'); | |
mQuery(assetDownloadProperties).data('existing-options', existingOptions); | |
mQuery(this).data('timer', setTimeout(function () { | |
assetDownloadInput.width('auto').prop('disabled', true).val(Mautic.translate('mautic.core.lookup.loading_data')); | |
Mautic.loadFilterForm(filterNum, fieldObject, fieldAlias, operator, resultHtml, search) | |
}, 1000, search)) | |
}); | |
var existingOptions = mQuery(assetDownloadProperties).data('existing-options'); | |
assetDownloadFilter.append(existingOptions); | |
assetDownloadFilter.trigger('chosen:updated'); | |
if (mQuery('#leadlist_filters_' + filterNum + '_properties_filter option').length === 0 ) { | |
assetDownloadInput.val(mauticLang['chosenNoResults']); | |
} | |
else if (search !== null) { | |
assetDownloadFilter.trigger('chosen:open.chosen') | |
} | |
}; | |
Mautic.listOnLoad = function(container, response) { | |
Mautic.lazyLoadContactListOnSegmentDetail(); | |
const segmentDependenciesTab = mQuery('a#segment-dependencies'); | |
let segmentDependenciesLoaded = false; | |
let jsPlumbData = null; | |
if (segmentDependenciesTab.length) { | |
mQuery(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) { | |
if (!mQuery(e.target).attr('id') === 'segment-dependencies') { | |
return; | |
} | |
if (!segmentDependenciesLoaded) { | |
segmentDependenciesLoaded = true; | |
mQuery.ajax({ | |
showLoadingBar: true, | |
url: mauticAjaxUrl, | |
type: 'GET', | |
data: { | |
action: 'lead:getSegmentDependencyTree', | |
id: mQuery('input#entityId').val() | |
}, | |
dataType: 'json', | |
success: function (response) { | |
Mautic.stopPageLoadingBar(); | |
Mautic.renderSegmentTree('#segment-dependencies-container', response); | |
jsPlumbData = response; | |
}, | |
error: function (request, textStatus, errorThrown) { | |
Mautic.processAjaxError(request, textStatus, errorThrown); | |
} | |
}); | |
} else if (jsPlumbData) { | |
Mautic.renderSegmentTree('#segment-dependencies-container', jsPlumbData); | |
} | |
}); | |
mQuery(document).on('hide.bs.tab', 'a[data-toggle="tab"]', function (e) { | |
if (!mQuery(e.target).attr('id') !== 'segment-dependencies') { | |
Mautic.cleanSegmentDependencies(); | |
} | |
}); | |
} | |
}; | |
Mautic.listOnUnload = function() { | |
Mautic.cleanSegmentDependencies(); | |
} | |
/** | |
* JsPlumb has a problem with z-index when using tabs or change content by ajax so we need to re-initialize it. | |
*/ | |
Mautic.cleanSegmentDependencies = function() { | |
mQuery('.jtk-connector').remove(); | |
mQuery('#segment-dependencies-container').empty(); | |
} | |
Mautic.renderSegmentTree = function(containerId, data) { | |
Mautic.cleanSegmentDependencies(); // Make sure there is no tree rendered already | |
const plumbInstance = jsPlumb.getInstance({ | |
elementsDraggable:false, | |
container: document.querySelector(containerId) | |
}); | |
const wrapper = mQuery(containerId); | |
const nodes = {}; | |
for (let level = 0; level < data.levels.length; level++) { | |
const row = mQuery('<div class="segment-level" id="segment-level-'+level+'"></div>'); | |
wrapper.append(row); | |
for (let index = 0; index < data.levels[level].nodes.length; index++) { | |
const nodeData = data.levels[level].nodes[index]; | |
const node = Mautic.buildSegmentDependencyNode(nodeData); | |
row.append(node); | |
nodes[nodeData['id']] = node; | |
} | |
} | |
for (let index = 0; index < data.edges.length; index++) { | |
const edge = data.edges[index]; | |
plumbInstance.connect({ | |
source:nodes[edge.source], | |
target:nodes[edge.target], | |
connector: 'Flowchart', | |
anchor: ['Top', 'Bottom'], | |
endpoint:"Blank", | |
}); | |
} | |
return plumbInstance; | |
} | |
Mautic.buildSegmentDependencyNode = function(nodeData) { | |
let message = ''; | |
let hasMessageClass = ''; | |
if (nodeData['message']) { | |
message = '<span class="segment-dependency-message text-danger">'+nodeData['message']+'</span>'; | |
hasMessageClass = ' has-message'; | |
} | |
const link = '<a href="'+nodeData['link']+'" data-toggle="ajax">'+nodeData['name']+'</a>'; | |
const node = mQuery('<div class="segment-node'+hasMessageClass+'" id="segment-node'+nodeData['id']+'">'+link+message+'</div>'); | |
return node; | |
} | |
Mautic.lazyLoadContactListOnSegmentDetail = function() { | |
const containerId = '#contacts-container'; | |
const container = mQuery(containerId); | |
// Load the contacts only if the container exists. | |
if (!container.length) { | |
return; | |
} | |
const segmentContactUrl = container.data('target-url'); | |
mQuery.get(segmentContactUrl, function(response) { | |
response.target = containerId; | |
Mautic.processPageContent(response); | |
}); | |
}; | |
Mautic.lazyLoadContactStatsOnLeadLoad = function() { | |
const containerId = '#lead-stats'; | |
const container = mQuery(containerId); | |
// Load the contact stats only if the container exists. | |
if (!container.length) { | |
return; | |
} | |
const contactStatsUrl = container.data('target-url'); | |
mQuery.get(contactStatsUrl, function(response) { | |
response.target = containerId; | |
Mautic.processPageContent(response); | |
}); | |
}; | |