- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
3851 lines
205 KiB
JavaScript
3851 lines
205 KiB
JavaScript
(function () {
|
|
/** DetailView **/
|
|
|
|
"use strict";
|
|
jQuery('.listViewActionsDiv .addButton[onclick*="runListViewWorkflow"]').each(function(index, ele) {
|
|
var html = jQuery('strong', this).html();
|
|
|
|
jQuery(this).html('<strong>' + html + '</strong>');
|
|
var onclick = jQuery(this).attr('onclick');
|
|
|
|
if(onclick.indexOf('//#') != -1) {
|
|
var parts = onclick.split('//');
|
|
parts[1] = parts[1].replace(';','');
|
|
|
|
jQuery(this).css('backgroundColor', parts[1]);
|
|
}
|
|
});
|
|
//hh
|
|
var WorkflowRecordMessages = [];
|
|
function startWorkflowById(workflow, crmid, async) {
|
|
if(typeof async == "undefined") {
|
|
async = true;
|
|
}
|
|
if(async != true) {
|
|
async = false;
|
|
}
|
|
|
|
if(typeof crmid == "undefined") {
|
|
crmid = "0";
|
|
}
|
|
if(typeof workflow == "undefined") {
|
|
return false;
|
|
}
|
|
|
|
var html = "<div id='workflow_executer' style='width:150px;height:150px;background-image:url(modules/Workflow2/icons/modal_white.png);border:1px solid #777777; box-shadow:0 0 2px #ccc; position:absolute;top:100px;right:300px;text-align:center;'><br><br><img src='modules/Workflow2/icons/sending.gif'><br><br><strong>Executing Workflow ...</strong></div>";
|
|
jQuery("body").append(html);
|
|
jQuery.ajax("index.php", {
|
|
async: async,
|
|
cache: false,
|
|
data:{
|
|
"module" : "Workflow2",
|
|
"action" : "Workflow2Ajax",
|
|
"file" : "ajaxExecuteWorkflow",
|
|
|
|
"crmid" : crmid,
|
|
"workflow" : workflow
|
|
},
|
|
type: 'POST',
|
|
dataType: 'json'
|
|
}).always(function( response ) {
|
|
jQuery("#workflow_executer").remove();
|
|
|
|
if(response.result == "startfields") {
|
|
var html = "<div style='position:absolute;background-color:#fff;border:3px solid #5890c9;box-shadow:0px 0px 5px #777;border-radius:3px;top:-100px;left:0px;width:200px;padding:5px;'><form method='POST' onsubmit='submitStartfields(" + '"' + response.workflow + '","' + crmid + '","' + module + '"' + ");return false;' id='wf_startfields'>";
|
|
html += "<img src='modules/Workflow2/icons/cross-button.png' style='position:absolute;right:-6px;top:-6px;cursor:pointer;' onclick='jQuery(\"#startfieldsContainer\").fadeOut(\"fast\");'>";
|
|
html += "<div class='small'>These Workflow requests some values.</div>";
|
|
|
|
jQuery.each(response.fields, function(index, value) {
|
|
var inputField = "";
|
|
var fieldName = '' + value.name + '';
|
|
|
|
switch(value.type) {
|
|
case "TEXT":
|
|
|
|
inputField = '<input type="text" style="width:180px;" name="' + fieldName + '" value="' + value.default + '">';
|
|
break;
|
|
case "CHECKBOX":
|
|
if(value.default === null) {
|
|
value.default = "off";
|
|
}
|
|
inputField = '<input type="checkbox" name="' + fieldName + '" ' + (value["default"].toLowerCase()=="on"?"checked='checked'":"") + ' value="on">';
|
|
break;
|
|
case "SELECT":
|
|
var splitValues = value["default"].split("\n");
|
|
|
|
inputField = '<select style="width:183px;" name="' + fieldName + '">';
|
|
jQuery.each(splitValues, function(index, value) {
|
|
var fieldValue = value;
|
|
var fieldKey = value;
|
|
|
|
if(value.indexOf("#~#") != -1) {
|
|
var parts = value.split("#~#");
|
|
fieldValue = parts[0];
|
|
fieldKey = parts[1];
|
|
}
|
|
|
|
inputField += "<option value='" + fieldKey + "'>" + fieldValue + "</option>";
|
|
});
|
|
inputField += '</select>';
|
|
|
|
break;
|
|
case "DATE":
|
|
inputField = '<input style="width:130px;" type="text" name="' + fieldName + '" id="'+fieldName+'" value="' + value["default"] + '">';
|
|
inputField += '<img src="modules/Workflow2/icons/calenderButton.png" style="margin-bottom:-8px;cursor:pointer;" id="jscal_trigger_' + fieldName + '">';
|
|
inputField += '<script type="text/javascript">Calendar.setup ({inputField : "' + fieldName + '", ifFormat : "%Y-%m-%d", button:"jscal_trigger_' + fieldName + '",showsTime : false, singleClick : true, step : 1});</script>';
|
|
|
|
break;
|
|
}
|
|
|
|
html += "<label><div style='overflow:hidden;min-height:26px;padding:2px 0;'><div style='" + (value.type=="CHECKBOX"?"float:left;":"") + "'><strong>"+ value.label + "</strong></div><div style='text-align:right;'>" + inputField + "</div></div></label>";
|
|
});
|
|
html += "<input type='submit' name='submitStartField' value='Execute Workflow' class='button small edit'>";
|
|
html += "</form></div>";
|
|
|
|
jQuery("#startfieldsContainer").hide();
|
|
jQuery("#startfieldsContainer").html(html);
|
|
jQuery("#startfieldsContainer").fadeIn("fast");
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function reloadWFDWidget() {
|
|
var widgetContainer = jQuery('div.widgetContainer#' + jQuery("#module").val() + '_sideBar_Workflows');
|
|
var key = widgetContainer.attr('id');
|
|
FlexUtils('Workflow2').cacheSet(key, 0);
|
|
|
|
widgetContainer.html('');
|
|
|
|
// Vtiger_Index_Js.loadWidgets(widgetContainer);
|
|
}
|
|
|
|
window.continueWorkflow = function (execid, crmid, block_id) {
|
|
var Execution = new WorkflowExecution();
|
|
Execution.setContinue(execid, block_id);
|
|
Execution.execute();
|
|
|
|
}
|
|
|
|
window.stopWorkflow = function(execid, crmid, taskid, direct) {
|
|
if(typeof direct == 'undefined' || direct != true) {
|
|
if(!confirm("stop Workflow?"))
|
|
return;
|
|
}
|
|
|
|
jQuery.post("index.php?module=Workflow2&action=QueueStop", {
|
|
"crmid" : crmid,
|
|
"execID" : execid,
|
|
"taskID" : taskid
|
|
},
|
|
function(response) {
|
|
reloadWFDWidget();
|
|
}
|
|
);
|
|
|
|
return false;
|
|
}
|
|
|
|
/** ListView **/
|
|
function executeWorkflow(button, module, selection) {
|
|
var selectedIDs = "";
|
|
|
|
if(typeof selection == "undefined") {
|
|
selectedIDs = jQuery('#allselectedboxes').val().split(";");
|
|
selectedIDs = selectedIDs.join(";");
|
|
} else {
|
|
selectedIDs = selection.join(";");
|
|
}
|
|
|
|
if (jQuery("#Wf2ListViewPOPUP").length == 0)
|
|
{
|
|
var div = document.createElement('div');
|
|
div.setAttribute('id','Wf2ListViewPOPUP');
|
|
div.setAttribute('style','display:none;width:350px; position:absolute;');
|
|
div.innerHTML = 'Loading';
|
|
document.body.appendChild(div);
|
|
|
|
// for IE7 compatiblity we can not use setAttribute('style', <val>) as well as setAttribute('class', <val>)
|
|
newdiv = document.getElementById('Wf2ListViewPOPUP');
|
|
newdiv.style.display = 'none';
|
|
newdiv.style.width = '400px';
|
|
newdiv.style.position = 'absolute';
|
|
}
|
|
|
|
jQuery('#status').show();
|
|
|
|
currentListViewPopUpContent = "#wf2popup_wf_execute";
|
|
|
|
jQuery.post("index.php", {
|
|
"module" : "Workflow2",
|
|
"action" : "Workflow2Ajax",
|
|
"file" : "ListViewPopup",
|
|
|
|
"return_module" : module,
|
|
"record_ids" : selectedIDs
|
|
}, function(response) {
|
|
jQuery("#Wf2ListViewPOPUP").html(response);
|
|
|
|
fnvshobj(button,'Wf2ListViewPOPUP');
|
|
|
|
var EMAILListview = document.getElementById('Wf2ListViewPOPUP');
|
|
var EMAILListviewHandle = document.getElementById('Workflow2ViewDivHandle');
|
|
Drag.init(EMAILListviewHandle,EMAILListview);
|
|
|
|
jQuery('#status').hide();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
var currentListViewPopUpContent = "#wf2popup_wf_execute";
|
|
function showWf2PopupContent(id) {
|
|
jQuery(currentListViewPopUpContent + "_TAB").addClass("deactiveWf2Tab");
|
|
jQuery(id + "_TAB").removeClass("deactiveWf2Tab");
|
|
jQuery(currentListViewPopUpContent).hide();
|
|
jQuery(id).show();
|
|
currentListViewPopUpContent= id;
|
|
|
|
if(id == "wf2popup_wf_importer") {
|
|
jQuery("#execute_mode").val("execute");
|
|
} else {
|
|
jQuery("#execute_mode").val("import");
|
|
}
|
|
}
|
|
|
|
function executeLVWorkflow() {
|
|
if(jQuery("#execute_mode").val() == "import") {
|
|
return true;
|
|
}
|
|
|
|
var record_ids = jQuery("#WFLV_record_ids").val();
|
|
var return_module = jQuery("#WFLV_return_module").val();
|
|
var workflow = jQuery("#exec_this_workflow").val();
|
|
var parallel = jQuery("#exec_workflow_parallel").attr("checked")=="checked"?1:0;
|
|
|
|
var ids = record_ids.split("#~#");
|
|
|
|
jQuery("#executionProgress_Value").html("0 / " + ids.length);
|
|
jQuery("#executionProgress").show();
|
|
|
|
jQuery.ajaxSetup({async:false});
|
|
var counter = 0;
|
|
|
|
jQuery.each(ids, function(index, value) {
|
|
jQuery.post("index.php?module=Workflow2&action=Workflow2Ajax&file=ajaxExecuteWorkflow", {
|
|
"crmid" : value,
|
|
"return_module" : return_module,
|
|
"workflow" : workflow,
|
|
"allow_parallel" : parallel
|
|
}
|
|
);
|
|
counter = counter + 1;
|
|
jQuery("#executionProgress_Value").html(counter + " / " + ids.length);
|
|
});
|
|
jQuery.ajaxSetup({async:true});
|
|
|
|
jQuery("#executionProgress_Value").html("100%");
|
|
|
|
if(currentListViewPopUpContent == "#wf2popup_wf_execute") {
|
|
return false;
|
|
}
|
|
}
|
|
var ENABLEredirectionOrReloadAfterFinish = true;
|
|
var WorkflowMetaData = {};
|
|
var WithinRecordLessWF = false;
|
|
|
|
function runListViewWorkflow(workflowId, couldStartWithoutRecord, collection_process) {
|
|
if(typeof couldStartWithoutRecord === 'undefined' && typeof collection_process === 'undefined') {
|
|
|
|
if(typeof WorkflowMetaData[workflowId] === 'undefined') {
|
|
FlexAjax('Workflow2').postAction('WorkflowInfo', {workflow_id: workflowId}, 'json').then(function (workflowInfo) {
|
|
WorkflowMetaData[workflowId] = workflowInfo;
|
|
|
|
runListViewWorkflow(workflowId);
|
|
});
|
|
return false;
|
|
} else {
|
|
couldStartWithoutRecord = WorkflowMetaData[workflowId].withoutrecord;
|
|
collection_process = WorkflowMetaData[workflowId].collection_process;
|
|
}
|
|
}
|
|
|
|
if(WithinRecordLessWF === true) {
|
|
couldStartWithoutRecord = false;
|
|
}
|
|
if(typeof couldStartWithoutRecord === 'undefined') {
|
|
couldStartWithoutRecord = false;
|
|
}
|
|
if(typeof collection_process === 'undefined') {
|
|
collection_process = false;
|
|
}
|
|
|
|
var processSettings = {};
|
|
if(typeof WorkflowDesignerProcessSettings == 'undefined' || typeof WorkflowDesignerProcessSettings[workflowId] == 'undefined') {
|
|
processSettings = {'withoutrecord': couldStartWithoutRecord, 'collection_process' : collection_process};
|
|
} else {
|
|
processSettings = WorkflowDesignerProcessSettings[workflowId];
|
|
}
|
|
|
|
var listInstance = window.app.controller();
|
|
var params = listInstance.getListSelectAllParams(false);
|
|
|
|
if(params !== false) {
|
|
var selectedIds = params.selected_ids;
|
|
} else {
|
|
var selectedIds = [0];
|
|
}
|
|
|
|
RedooUtils('Workflow2').blockUI({
|
|
title: 'Executing ... ',
|
|
message: '<p style="margin:20px 0px;font-size:14px;"><strong style="text-transform:uppercase;">' + FLEXLANG('Please wait', 'Workflow2') + ' ... </strong><span id="workflowDesignerDone">0</span> of <span id="workflowDesignerTotal">' + (selectedIds!='all'?selectedIds.length:'?') + '</span> done</p><div style="margin: 10px 10px 10px 10px;" id="executionProgress" class="progress"><div class="progress-bar progress-bar-success progress-bar-striped" style="width: 0;"></div></div>',
|
|
theme: false,
|
|
css: {
|
|
'backgroundColor':'#2d3e49',
|
|
'color': '#ffffff',
|
|
'border': '1px solid #fff'
|
|
},
|
|
onBlock: function() {
|
|
var counter = -1;
|
|
|
|
if(selectedIds == 'all') {
|
|
jQuery.ajaxSetup({async:false});
|
|
var parameter = listInstance.getDefaultParams();
|
|
parameter.module = 'Workflow2';
|
|
parameter.view = undefined;
|
|
parameter.action = 'GetSelectedIds';
|
|
|
|
jQuery.post('index.php', parameter, function(response) {
|
|
selectedIds = response.ids;
|
|
}, 'json');
|
|
|
|
jQuery('#workflowDesignerTotal').html(selectedIds.length);
|
|
jQuery.ajaxSetup({async:true});
|
|
}
|
|
|
|
var totalIds = selectedIds.length;
|
|
|
|
if(selectedIds.length > 1) {
|
|
ENABLEredirectionOrReloadAfterFinish = false;
|
|
}
|
|
|
|
var couldStartWithoutRecord = false;
|
|
|
|
if(selectedIds.length == 0 && processSettings.withoutrecord == false) {
|
|
alert('Please choose a record to execute');
|
|
RedooUtils('Workflow2').unblockUI();
|
|
return;
|
|
}
|
|
/*
|
|
if(selectedIds.length == 0) {
|
|
couldStartWithoutRecord = true;
|
|
}
|
|
*/
|
|
if(processSettings.collection_process == "1") {
|
|
var workflow = new Workflow();
|
|
ENABLEredirectionOrReloadAfterFinish = true;
|
|
workflow.setRequestedData({ 'recordids':selectedIds.join(',') }, 'collection_recordids');
|
|
|
|
var crmid = selectedIds.shift();
|
|
|
|
workflow.execute(workflowId, crmid, function(response) {
|
|
RedooUtils('Workflow2').unblockUI();
|
|
if(typeof response.redirection == "undefined") {
|
|
window.location.reload();
|
|
}
|
|
|
|
return true;
|
|
});
|
|
return;
|
|
}
|
|
if(processSettings.withoutrecord == "1" && selectedIds.length == 1 && selectedIds[0] == 0) {
|
|
var workflow = new Workflow();
|
|
ENABLEredirectionOrReloadAfterFinish = true;
|
|
var crmid = 0;
|
|
|
|
WithinRecordLessWF = true;
|
|
workflow.execute(workflowId, crmid, function(response) {
|
|
RedooUtils('Workflow2').unblockUI();
|
|
if(typeof response.redirection == "undefined") {
|
|
window.location.reload();
|
|
}
|
|
|
|
return true;
|
|
}, true);
|
|
return;
|
|
}
|
|
|
|
function _executeCallback() {
|
|
counter = counter + 1;
|
|
jQuery('#workflowDesignerDone').html(counter);
|
|
var crmid = selectedIds.shift();
|
|
|
|
if(couldStartWithoutRecord === true) {
|
|
crmid = 0;
|
|
couldStartWithoutRecord = false;
|
|
}
|
|
|
|
var progress = Math.round(((totalIds - selectedIds.length) / totalIds) * 100);
|
|
jQuery('#executionProgress .progress-bar-success').css('width', progress + '%');
|
|
|
|
if(typeof crmid !== 'undefined') {
|
|
var workflow = new Workflow();
|
|
workflow.setBackgroundMode(true);
|
|
workflow.execute(workflowId, crmid, _executeCallback);
|
|
} else {
|
|
RedooUtils('Workflow2').unblockUI();
|
|
window.location.reload();
|
|
}
|
|
}
|
|
|
|
_executeCallback();
|
|
}
|
|
});
|
|
|
|
}
|
|
function runListViewSidebarWorkflow() {
|
|
runListViewWorkflow(jQuery("#workflow2_workflowid").val(), jQuery("#workflow2_workflowid option:selected").data('withoutrecord') == '1');
|
|
}
|
|
function runSidebarWorkflow(crmid) {
|
|
if(jQuery("#workflow2_workflowid").val() == "") {
|
|
return;
|
|
}
|
|
|
|
var workflow = new Workflow();
|
|
workflow.execute(jQuery("#workflow2_workflowid").val(), crmid);
|
|
}
|
|
|
|
|
|
function WorkflowWidgetLoaded() {
|
|
jQuery('.WFdivider', '#WorkflowDesignerWidgetContainer').each(function(index, element) {
|
|
if(jQuery(element).next().length == 0 || jQuery(element).next().hasClass('WFdivider')) {
|
|
jQuery(element).hide();
|
|
}
|
|
});
|
|
}
|
|
var WFDvisibleMessages = {};
|
|
|
|
|
|
var WorkflowHandler = {
|
|
startImport : function(moduleName) {
|
|
RedooAjax('Workflow2').postView('ImportModal', {target_module:moduleName}).then(function(response) {
|
|
RedooUtils('Workflow2').hideModalBox();
|
|
RedooUtils('Workflow2').showContentOverlay(response).then(function() {
|
|
RedooUtils('Workflow2').loadScript('modules/Workflow2/js/Importer.js').then(function() {
|
|
var Import = new Importer();
|
|
Import.init();
|
|
});
|
|
});
|
|
});
|
|
|
|
/*
|
|
jQuery.post('index.php?module=Workflow2&view=ImportStep1', { source_module: source_module, currentUrl: window.location.href }, function(html) {
|
|
app.showModalWindow(html, function(data) {
|
|
jQuery('#modalSubmitButton').removeAttr('disabled');
|
|
});
|
|
});
|
|
*/
|
|
}
|
|
};
|
|
window.WorkflowHandler = WorkflowHandler;
|
|
|
|
function showEntityData(crmid) {
|
|
jQuery.post('index.php?module=Workflow2&view=EntityData', { crmid:crmid }, function(html) {
|
|
app.showModalWindow(html, function(data) {
|
|
jQuery('.EntityDataDelete').on('click', function(e) {
|
|
var dataid = jQuery(e.currentTarget).data('id');
|
|
|
|
jQuery.post('index.php', {
|
|
'module':'Workflow2',
|
|
'action':'EntityDataDelete',
|
|
'dataid':dataid
|
|
}, function() {
|
|
showEntityData(crmid);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
var workflowObj;
|
|
window.closeForceNotification = function(messageId) {
|
|
jQuery.post('index.php?module=Workflow2&action=MessageClose', { messageId:messageId, force: 1 });
|
|
}
|
|
var UserQueue = {
|
|
run: function(exec_id, block_id) {
|
|
var Execution = new WorkflowExecution();
|
|
|
|
Execution.setContinue(exec_id, block_id);
|
|
|
|
Execution.execute();
|
|
}
|
|
};
|
|
|
|
var WorkflowPermissions = {
|
|
returnCounter:0,
|
|
submit: function(execID, confID, hash, result) {
|
|
if(jQuery('#row_' + confID).data('already') == '1') {
|
|
if(!confirm('Permission already set. Set again?')) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
var execution = new WorkflowExecution();
|
|
execution.setCallback(function(response) { });
|
|
|
|
execution.setContinue(execID, 0);
|
|
//execution.enableRedirection(false);
|
|
execution.submitRequestFields('authPermission', [{name:'permission', value: result}, {name:'confid', value: confID}, {name:'hash', value: hash}], {}, jQuery('.confirmation_container'));
|
|
|
|
var row = jQuery('#row_' + confID);
|
|
jQuery('.btn.decision', row).removeClass('pressed').addClass('unpressed');
|
|
jQuery('.btn.decision_' + result, row).addClass('pressed').removeClass('unpressed');
|
|
|
|
return false;
|
|
},
|
|
submitAll:function(blockId, result) {
|
|
/*if(jQuery('table.block' + blockId + ' [data-already="1"]').length > 0) {
|
|
if(!confirm('This will overwrite every already defined value! Continue?')) {
|
|
return;
|
|
}
|
|
}*/
|
|
|
|
jQuery('table.block' + blockId + ' .permissionRow input.selectRows:checked').each(function(index, value) {
|
|
var row = jQuery(this).closest('.permissionRow');
|
|
|
|
var confId = jQuery(row).data('id');
|
|
var execID = jQuery(row).data('execid');
|
|
var hash = jQuery(row).data('hash');
|
|
|
|
WorkflowPermissions.returnCounter++;
|
|
var execution = new WorkflowExecution();
|
|
execution.setCallback(function(response) { WorkflowPermissions.returnCounter--; if(WorkflowPermissions.returnCounter == 0) window.location.reload(); });
|
|
|
|
execution.setContinue(execID, 0);
|
|
execution.enableRedirection(false);
|
|
execution.submitRequestFields('authPermission', [{name:'permission', value: result}, {name:'confid', value: confId}, {name:'hash', value: hash}], {}, jQuery('.confirmation_container'));
|
|
});
|
|
|
|
return false;
|
|
}
|
|
};
|
|
window.WorkflowPermissions = WorkflowPermissions;
|
|
|
|
var WorkflowFrontendTypes = {
|
|
getWorkflows:function(type, module, crmid) {
|
|
if(typeof type === 'undefined') {
|
|
console.error('You do not define a FrontendType. Please check!');
|
|
return;
|
|
}
|
|
if(typeof module === 'undefined') {
|
|
console.error('You do not define a Module of FrontendTypes. Please check!');
|
|
return;
|
|
}
|
|
|
|
if(typeof crmid === 'undefined' && typeof WFDFrontendConfig !== 'undefined' && typeof WFDFrontendConfig[type] !== 'undefined' && typeof WFDFrontendConfig[type][module] !== 'undefined') {
|
|
var aDeferred = jQuery.Deferred();
|
|
|
|
var result = [];
|
|
jQuery.each(WFDFrontendConfig[type][module], function(index, value) {
|
|
var tmp = value.config;
|
|
|
|
tmp.workflow_id = value.workflowid;
|
|
tmp.module = module;
|
|
tmp.label = value.label;
|
|
tmp.color = value.color;
|
|
tmp.textcolor = value.textcolor;
|
|
result.push(tmp);
|
|
});
|
|
|
|
aDeferred.resolveWith({}, [result]);
|
|
|
|
return aDeferred.promise();
|
|
}
|
|
|
|
return FlexAjax('Workflow2').postAction('FrontendLinks', {
|
|
'type' : type,
|
|
'target_module' : module,
|
|
'target_crmid' : crmid
|
|
}, 'json');
|
|
|
|
},
|
|
triggerWorkflow:function(type, workflowid, crmid, envVars) {
|
|
var dfd = jQuery.Deferred();
|
|
|
|
var execution = new WorkflowExecution();
|
|
execution.setCallback(function(response) {
|
|
var workflowFrontendActions = new Workflow();
|
|
workflowFrontendActions.checkFrontendActions('init', crmid);
|
|
|
|
dfd.resolve(response);
|
|
return false;
|
|
});
|
|
|
|
execution.init(crmid);
|
|
execution.setWorkflowById(workflowid);
|
|
|
|
if(typeof envVars === 'undefined') {
|
|
var envVars = {};
|
|
}
|
|
|
|
execution.setFrontendType(type);
|
|
execution.setEnvironment(envVars);
|
|
execution.execute();
|
|
|
|
return dfd.promise();
|
|
},
|
|
trigggerWorkflow:function(type, workflowid, crmid, envVars) {
|
|
return WorkflowFrontendTypes.triggerWorkflow(type, workflowid, crmid, envVars);
|
|
}
|
|
};
|
|
window.WorkflowFrontendTypes = WorkflowFrontendTypes;
|
|
;(function ($) {
|
|
"use strict";
|
|
var ScopeName = 'Workflow2';
|
|
var Version = '2.4.1';
|
|
/**
|
|
* FlexUtils V2.4.1
|
|
* 2.4.1 - 23.05.2019
|
|
* - Fix bug related to modals, when first one is closed
|
|
* 2.4.0 - 25.07.2018
|
|
* - add createFileDrop function
|
|
* - add FlexForm component
|
|
* 2.3.1 - 18.07.2018
|
|
* - Fixed setFieldValue for picklists in VT7
|
|
* 2.3.0 - 12.07.2018
|
|
* - JSHint recommendations applied
|
|
* 2.2.1 - 21.05.2018
|
|
* - add onQuickCreate from VT6
|
|
* 2.2.0 - 26.04.2018
|
|
* - add FlexTranslate component
|
|
* 2.1.3 - 02.03.2018
|
|
* - improve compatibility with old RedooUtils
|
|
* 2.1.2 - 23.02.2018
|
|
* - add close callback to showModalBox
|
|
* 2.1.1 - 09.02.2018
|
|
* - add initial local cache handler
|
|
* 2.1.0 - 20.12.2017
|
|
* - Rename to FlexUtils
|
|
* - Add function showRecordInOverlay
|
|
* 2.0.13 - 18.11.2017
|
|
* - Implement Exception Output in postAction / postView
|
|
* 2.0.12 - 16.11.2017
|
|
* - add showModalBox replacement if already box is shown
|
|
* 2.0.11 - 08.11.2017
|
|
* - add convertComponents parameter to refreshContent to convert select2
|
|
* 2.0.10 - 04.11.2017
|
|
* - add showNotification
|
|
* - add Init console log
|
|
* 2.0.09 - 31.10.2017
|
|
* - add getCurrentDateFormat function
|
|
* 2.0.08 - 22.09.2017
|
|
* - add getContentMaxWidth / getContentMaxHeight functions
|
|
* 2.0.07 - 13.08.2017
|
|
* - add getMainRecordId function
|
|
* - add getCurrentCustomViewId
|
|
* - add onListChange
|
|
* 2.0.06 - 13.06.2017
|
|
* - getListFields fixed for VT6
|
|
* 2.0.05 - 12.06.2017
|
|
* - first version build with TypeScript
|
|
* - fix getFieldElement on SummaryView
|
|
* - Fix issues reported from TypeScript
|
|
* 2.0.04 - 11.16.2017
|
|
* - improve showModalBox Function
|
|
* - add hideModalBox Function
|
|
* - add FlexAjax.postSettingsView as wrapper for default function
|
|
* - add FlexAjax.postSettingsAction as wrapper for default function
|
|
* - add FlexUtils.refreshContent
|
|
* 2.0.03 - add getCurrentLayout Function
|
|
* - add layoutDependValue Function
|
|
* - add BlockUI
|
|
* 2.0.02 - add getQueryParams Function
|
|
* - Extend getMainModule by Query Params
|
|
* - Introduce RedooUtils Action on Server
|
|
* - add setFieldValue Function
|
|
* 2.0.01 - VT7 Compatibility
|
|
* - add FlexUtils.onFieldChange method
|
|
* - add FlexUtils.onRelatedListChange method
|
|
* - add FlexUtils.isVT7 method
|
|
* - add FlexUtils.Signal Implementation
|
|
* - add global RedooEvents
|
|
* 1.0.11 - Make postAction / postView settings flag optional
|
|
* Add wrong Ajax Response error output
|
|
* 1.0.10 - Add getRecordLabels function
|
|
* 1.0.9 - Add fillFieldSelect, loadStyles functions
|
|
* 1.0.8 - Add returnInput Parameter to getFieldElement function
|
|
* 1.0.7 - Add FlexUtils.loadScript
|
|
*//*globals confirm:false */
|
|
/**
|
|
* You must generate a FlexAjax Environment by useing FlexAjax(ScopeName)
|
|
* @example
|
|
* FlexAjax("ScopeName")
|
|
* @global
|
|
* @toc
|
|
* @namespace
|
|
**/
|
|
var FlexAjax = {
|
|
/**
|
|
* This function sends a POST request to a given Action.<br/>
|
|
* Module is get from ScopeName
|
|
*
|
|
* @example
|
|
* FlexAjax("ScopeName").postAction(
|
|
* "ActionName",
|
|
* {
|
|
* "param1": value1,
|
|
* "param2": value2
|
|
* },
|
|
* true,
|
|
* "json"
|
|
* ).then(function(responseJson) {
|
|
* // ... do something with JSON response
|
|
* });
|
|
* @param {string} actionName - Action to call
|
|
* @param {array} [params] - parameters to send
|
|
* @param {boolean|string} [settings] - (boolean) Is action within CRM Settings?<br/> (string) DataType
|
|
* @param {string} [dataType] - Datatype of response
|
|
* @returns {string|json}
|
|
*/
|
|
postAction: function (actionName, params, settings, dataType) {
|
|
if (typeof params == 'undefined') {
|
|
params = {};
|
|
}
|
|
params.module = ScopeName;
|
|
params.action = actionName;
|
|
if (typeof dataType == 'undefined' && typeof settings == 'string') {
|
|
dataType = settings;
|
|
settings = false;
|
|
}
|
|
if (typeof settings != 'undefined' && settings == true) {
|
|
params.parent = 'Settings';
|
|
}
|
|
return FlexAjax.post('index.php', params, dataType);
|
|
},
|
|
/**
|
|
* This function send a POST request to a given Action.
|
|
* Module is get from ScopeName
|
|
*
|
|
* @example
|
|
* FlexAjax("ScopeName").postAction(
|
|
* "ActionName",
|
|
* {
|
|
* "param1": value1,
|
|
* "param2": value2
|
|
* },
|
|
* true,
|
|
* "json"
|
|
* ).then(function(responseJson) {
|
|
* // ... do something with JSON response
|
|
* });
|
|
* @param viewName
|
|
* @param params
|
|
* @param dataType
|
|
* @returns {*}
|
|
*/
|
|
postSettingsView: function (viewName, params, dataType) {
|
|
return FlexAjax.postView(viewName, params, true, dataType);
|
|
},
|
|
/**
|
|
*
|
|
* @param actionName
|
|
* @param params
|
|
* @param dataType
|
|
* @returns {*}
|
|
*/
|
|
postSettingsAction: function (actionName, params, dataType) {
|
|
return FlexAjax.postAction(actionName, params, true, dataType);
|
|
},
|
|
/**
|
|
*
|
|
* @param viewName
|
|
* @param params
|
|
* @param settings
|
|
* @param dataType
|
|
* @returns {*}
|
|
*/
|
|
postView: function (viewName, params, settings, dataType) {
|
|
if (typeof params == 'undefined') {
|
|
params = {};
|
|
}
|
|
params.module = ScopeName;
|
|
params.view = viewName;
|
|
if (typeof dataType == 'undefined' && typeof settings == 'string') {
|
|
dataType = settings;
|
|
settings = false;
|
|
}
|
|
if (typeof settings != 'undefined' && settings == true) {
|
|
params.parent = 'Settings';
|
|
}
|
|
return FlexAjax.post('index.php', params, dataType);
|
|
},
|
|
/**
|
|
*
|
|
* @param url URL to call
|
|
* @param params Object with POST parameters
|
|
* @param dataType Single value of datatype if not set in params
|
|
* @returns {*}
|
|
*/
|
|
post: function (url, params, dataType) {
|
|
var aDeferred = jQuery.Deferred();
|
|
if (typeof url == 'object') {
|
|
params = url;
|
|
url = 'index.php';
|
|
}
|
|
if (typeof params == 'undefined') {
|
|
params = {};
|
|
}
|
|
if (typeof dataType == 'undefined' && typeof params.dataType != 'undefined') {
|
|
dataType = params.dataType;
|
|
}
|
|
var options = {
|
|
url: url,
|
|
data: params
|
|
};
|
|
if (typeof dataType != 'undefined') {
|
|
options.dataType = dataType;
|
|
}
|
|
//options.dataType = undefined;
|
|
options.dataType = 'text';
|
|
options.type = 'POST';
|
|
jQuery.ajax(options)
|
|
.always(function (data) {
|
|
if (typeof dataType != 'undefined' && dataType == 'json') {
|
|
try {
|
|
data = jQuery.parseJSON(data);
|
|
}
|
|
catch (e) {
|
|
FlexUtils.unblockUI();
|
|
console.error('FlexAjax Error - Should: JSON Response:');
|
|
console.log('Request: ', options);
|
|
console.log(data);
|
|
var height = 10;
|
|
jQuery('.RedooAjaxError').each(function (index, ele) {
|
|
height += jQuery(ele).height() + 30;
|
|
});
|
|
var id = 'error_' + (Math.floor(Math.random() * 1000000));
|
|
var content = data.substr(0, 500).replace(/</g, '<').replace(/\\(.?)/g, function (s, n1) {
|
|
switch (n1) {
|
|
case '\\':
|
|
return '\\';
|
|
case '0':
|
|
return '\u0000';
|
|
case '':
|
|
return '';
|
|
default:
|
|
return n1;
|
|
}
|
|
});
|
|
if (data.length > 500) {
|
|
content += ' .....<em>shortened</em>....... ' + data.substr(-500).replace(/</g, '<').replace(/\\(.?)/g, function (s, n1) {
|
|
switch (n1) {
|
|
case '\\':
|
|
return '\\';
|
|
case '0':
|
|
return '\u0000';
|
|
case '':
|
|
return '';
|
|
default:
|
|
return n1;
|
|
}
|
|
});
|
|
}
|
|
var html = '<div class="RedooAjaxError" style="word-wrap:break-word;position:fixed;bottom:' + height + 'px;box-sizing:border-box;left:10px;padding:10px;width:25%;background-color:#ffffff;z-index:90000;border:2px solid #C9331E;background-color:#D29D96;" id="' + id + '"><i class="icon-ban-circle" style="margin-top:2px;margin-right:5px;"></i><span style="color:#C9331E;font-weight:bold;">ERROR:</span> ' + e + '<br/><span style="color:#C9331E;font-weight:bold;">Response:</span>' + content + '</div>';
|
|
jQuery('body').append(html);
|
|
jQuery('#' + id).on('click', function () {
|
|
jQuery(this).fadeOut('fast', function () {
|
|
jQuery(this).remove();
|
|
});
|
|
});
|
|
/*
|
|
window.setTimeout(function() {
|
|
jQuery('#' + id).hide(function() {
|
|
jQuery(this).remove();
|
|
})
|
|
});
|
|
*/
|
|
//app.showModalWindow(response);
|
|
return;
|
|
}
|
|
}
|
|
if (typeof data.success != 'undefined') {
|
|
if (data.success == false && (data.error.code.indexOf('request') != -1)) {
|
|
if (confirm('Request Error. Reload of Page is required.')) {
|
|
window.location.reload();
|
|
}
|
|
|
|
FlexUtils.showNotification(data.error.message, false);
|
|
return;
|
|
}
|
|
}
|
|
aDeferred.resolve(data);
|
|
//callback(data)
|
|
});
|
|
return aDeferred.promise();
|
|
},
|
|
/**
|
|
*
|
|
* @param url
|
|
* @param params
|
|
* @param dataType
|
|
*/
|
|
get: function (url, params, dataType) {
|
|
console.error('Vtiger do not support GET Requests');
|
|
return;
|
|
},
|
|
/**
|
|
* Drop In Replacement for AppConnector.request
|
|
*
|
|
* @param params object
|
|
* @returns {*}
|
|
*/
|
|
request: function (params) {
|
|
return FlexAjax.post('index.php', params);
|
|
}
|
|
};/**
|
|
* You must generate a FlexCache Environment by useing FlexCache(ScopeName)
|
|
* @example
|
|
* FlexCache("ScopeName")
|
|
* @global
|
|
* @namespace
|
|
**/
|
|
var FlexCache = {
|
|
get: function (key, defaultValue) {
|
|
if (typeof _FlexCache[key] != 'undefined') {
|
|
return _FlexCache[key];
|
|
}
|
|
return defaultValue;
|
|
},
|
|
set: function (key, value) {
|
|
_FlexCache[key] = value;
|
|
}
|
|
};
|
|
/**
|
|
* You must generate a FlexForm Environment by useing FlexForm(ScopeName)
|
|
* @example
|
|
* FlexForm("ScopeName")
|
|
* @global
|
|
* @namespace
|
|
**/
|
|
var FlexForm = {
|
|
/**
|
|
*
|
|
* @param params
|
|
* @returns {FlexFormObj}
|
|
*/
|
|
getInstance:function(params) {
|
|
var FlexFormObj = function(parameters) {
|
|
this.parameters = parameters;
|
|
this.fields = [];
|
|
this.events = $({});
|
|
|
|
this.on = function(event, callbackFunction) {
|
|
this.events.on(event, callbackFunction);
|
|
};
|
|
|
|
this.addField = function(label, name, type, value, options) {
|
|
var field = new FlexFormField(name, type, label);
|
|
|
|
if(typeof options !== 'undefined') {
|
|
field.setOptions(options);
|
|
}
|
|
if(typeof value !== 'undefined') {
|
|
field.setValue(value);
|
|
}
|
|
|
|
var row = [];
|
|
row.push(field);
|
|
this.fields.push(row);
|
|
};
|
|
|
|
this.initCSS = function() {
|
|
var html = '<style type="text/css">' +
|
|
'.FlexFormContainer .materialstyle{border:1px solid transparent}' +
|
|
'.FlexFormContainer .materialstyle.group{position:relative;margin-bottom:15px;margin-top:10px}' +
|
|
'.FlexFormContainer .materialstyle.prefix-icon .fa{position:absolute;top:8px;font-size:14px}' +
|
|
'.FlexFormContainer .materialstyle.prefix-icon label{left:19px}' +
|
|
'.FlexFormContainer .materialstyle.prefix-icon input{padding-left:20px}' +
|
|
'.FlexFormContainer .materialstyle input{font-size:14px;padding:10px 10px 10px 0;display:block;width:100%;border:none;height:30px;border-bottom:1px solid #757575;border-top:none!important;border-left:none!important;border-right:none!important;box-shadow:none!important}' +
|
|
'.FlexFormContainer .materialstyle input[type=file]{border-bottom:none!important}' +
|
|
'.FlexFormContainer .materialstyle select{font-size:14px;padding:5px 10px 5px 0;display:block;width:100%;border:none;height:38px;border-bottom:1px solid #757575}' +
|
|
'.FlexFormContainer .materialstyle textarea{font-size:14px;padding:3px 5px;display:block;width:100%;height:150px;border:1px solid #757575}' +
|
|
'.FlexFormContainer .materialstyle .select2-container{width:100%}' +
|
|
'.FlexFormContainer .materialstyle .select2-container .select2-choice,.materialstyle .select2-container .select2-choices,.materialstyle .select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}' +
|
|
'.FlexFormContainer .materialstyle input:focus,.materialstyle select:focus,.materialstyle textarea:focus{outline:0}' +
|
|
'.FlexFormContainer .materialstyle label{color:#bbb;font-size:16px;font-weight:400;position:absolute;pointer-events:none;left:5px;top:5px;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}' +
|
|
'.FlexFormContainer .materialstyle input.fixedUsed~label,.materialstyle input.used~label,.materialstyle input:focus~label,.materialstyle select.fixedUsed~label,.materialstyle select.used~label,.materialstyle select:focus~label,.materialstyle textarea.fixedUsed~label,.materialstyle textarea.used~label,.materialstyle textarea:focus~label,.materialstyle.fixedUsed>label{top:-18px;left:0;font-size:12px;color:#5264AE}' +
|
|
'.FlexFormContainer .materialstyle .bar{position:relative;display:block;width:100%}' +
|
|
'.FlexFormContainer .materialstyle .bar:after,.materialstyle .bar:before{content:\'\';height:2px;width:0;bottom:1px;position:absolute;background:#5264AE;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}' +
|
|
'.FlexFormContainer .materialstyle .bar:before{left:50%}' +
|
|
'.FlexFormContainer .materialstyle .bar:after{right:50%}' +
|
|
'.FlexFormContainer .ReqValRow .materialstyle { padding:5px 0; }' +
|
|
'.FlexFormContainer .materialstyle input:focus~.bar:after,.materialstyle input:focus~.bar:before{width:50%}' +
|
|
'</style>';
|
|
var checksumFkt = function(s) {
|
|
var hash = 0,
|
|
i, char;
|
|
if (s.length == 0) {
|
|
return hash;
|
|
}
|
|
var l = s.length;
|
|
|
|
for (i = 0; i < l; i++) {
|
|
char = s.charCodeAt(i);
|
|
hash = ((hash << 5) - hash) + char;
|
|
hash |= 0; // Convert to 32bit integer
|
|
}
|
|
return hash;
|
|
};
|
|
var checksum = checksumFkt(html);
|
|
var className = 'flexformmodalcss' + checksum;
|
|
if($('style.' + className).length === 0) {
|
|
var htmlele = $(html).addClass(className);
|
|
$('head').append(htmlele);
|
|
}
|
|
};
|
|
|
|
this.renderModal = function(widthPx, headline, successText, cancelText) {
|
|
this.initCSS();
|
|
|
|
if(typeof widthPx === 'undefined') {
|
|
widthPx = 600;
|
|
}
|
|
if(typeof headline === 'undefined') {
|
|
headline = '';
|
|
}
|
|
if(typeof successText === 'undefined') {
|
|
successText = 'Save';
|
|
}
|
|
if(typeof cancelText === 'undefined') {
|
|
cancelText = 'Cancel';
|
|
}
|
|
|
|
var html = '';
|
|
html += '<div class="modal-dialog modelContainer" style="width:' + widthPx + 'px;">';
|
|
html += '<div class="modal-content" style="width:100%;">';
|
|
|
|
// Header
|
|
html += '<div class="modal-header"><div class="clearfix"><div class="pull-right"><button type="button" class="close" aria-label="Close" data-dismiss="modal"><span aria-hidden="true" class="fa fa-close"></span></button></div><h4 class="pull-left">' + headline + '</h4></div></div>';
|
|
|
|
html += '<div class="modal-body FlexFormContainer">';
|
|
|
|
jQuery.each(this.fields, function(index, fields) {
|
|
html += '<div class="ReqValRow">';
|
|
jQuery.each(fields, function(fieldIndex, field) {
|
|
html += field.render();
|
|
});
|
|
html += '</div>';
|
|
});
|
|
|
|
html += '</div>';
|
|
// Footer
|
|
html += '<div class="modal-footer "><center><button class="btn btn-success" type="submit" name="saveButton"><strong>' + successText + '</strong></button><a href="#" class="cancelLink" type="reset" data-dismiss="modal">' + cancelText + '</a></center></div>';
|
|
|
|
html += '</div>';
|
|
html += '</div>';
|
|
|
|
FlexUtils.showModalBox(html).then($.proxy(function(window, data) {
|
|
|
|
jQuery.each(this.fields, function(index, fields) {
|
|
jQuery.each(fields, function(fieldIndex, field) {
|
|
field.init();
|
|
});
|
|
});
|
|
|
|
$('.btn-success', window).on('click', $.proxy(function() {
|
|
|
|
var data = {};
|
|
|
|
jQuery.each(this.fields, function(index, fields) {
|
|
jQuery.each(fields, function(fieldIndex, field) {
|
|
data[field.getFieldName()] = field.getValue();
|
|
});
|
|
});
|
|
this.events.trigger('save', data);
|
|
}, this));
|
|
|
|
jQuery('.materialstyle input, .materialstyle select, .materialstyle textarea', window).on('blur', function() {
|
|
// check if the input has any value (if we've typed into it)
|
|
|
|
if (jQuery(this).val()) {
|
|
jQuery(this).addClass('used');
|
|
} else {
|
|
jQuery(this).removeClass('used');
|
|
}
|
|
|
|
}).trigger('blur');
|
|
|
|
jQuery('.materialstyle .select2-container, .materialstyle input[type="file"]', window).each(function (index, ele) {
|
|
// console.log(ele, jQuery(ele).closest('.materialstyle'));
|
|
jQuery(ele).closest('.materialstyle').addClass('fixedUsed');
|
|
});
|
|
|
|
}, this));
|
|
};
|
|
};
|
|
|
|
var FlexFormField = function(field_name, field_type, field_label) {
|
|
var defaultOptions = {
|
|
'selfdecorate': false
|
|
};
|
|
|
|
this.field_options = defaultOptions;
|
|
this.field_value = null;
|
|
this.field_type = field_type;
|
|
this.field_name = field_name;
|
|
this.field_label = field_label;
|
|
this.rendered = false;
|
|
|
|
this.containerId = 'cfid' + Math.round(Math.random(999999) * 100000) + Math.round(Math.random(999999) * 100000);
|
|
this.fieldclass = 'cf' + Math.round(Math.random() * 100000) + Math.round(Math.random() * 100000);
|
|
|
|
this.typedata = FlexForm.getType(field_type);
|
|
|
|
|
|
this.setOptions = function(options) {
|
|
this.field_options = $.extend(true, defaultOptions, options);
|
|
};
|
|
this.getOptions = function() {
|
|
return this.field_options;
|
|
};
|
|
|
|
this.setValue = function(value) {
|
|
this.field_value = value;
|
|
|
|
if(this.rendered === true) {
|
|
this.typedata.setter(this.field_value, this);
|
|
}
|
|
};
|
|
|
|
this.init = function() {
|
|
if(typeof this.typedata.init === 'function') {
|
|
this.typedata.init(this);
|
|
}
|
|
};
|
|
|
|
this.getValue = function() {
|
|
return this.typedata.getter(this);
|
|
};
|
|
|
|
this.getFieldName = function() {
|
|
return this.field_name;
|
|
};
|
|
|
|
this.render = function() {
|
|
var html = '<div class="group materialstyle" id="' + this.containerId + '">';
|
|
|
|
html += this.typedata.render(this);
|
|
html += '<label>' + this.field_label+ '</label>';
|
|
html += '</div>';
|
|
|
|
this.rendered = true;
|
|
return html;
|
|
};
|
|
|
|
this.getContainer = function() {
|
|
return $('#' + this.containerId);
|
|
};
|
|
|
|
};
|
|
|
|
return new FlexFormObj(params);
|
|
},
|
|
|
|
registerType:function(type, renderFunction, initFunction, validateFunction, getterFunction, setterFunction, options) {
|
|
FlexForm._types[type] = {
|
|
'init': initFunction,
|
|
'render': renderFunction,
|
|
'validate': validateFunction,
|
|
'setter': getterFunction,
|
|
'getter': setterFunction,
|
|
'options': options
|
|
};
|
|
},
|
|
getType:function(type) {
|
|
if(typeof FlexForm._types[type] === 'undefined') {
|
|
throw "[" + ScopeName +"] FlexForm: " + type + " is undefined";
|
|
}
|
|
|
|
return FlexForm._types[type];
|
|
},
|
|
_types:{
|
|
'text' : {
|
|
'options': {
|
|
|
|
},
|
|
'render': function(fieldInstance) {
|
|
return '<input type="text" class="inputEle input-fullwidth ' + fieldInstance.fieldclass + '" value="' + (fieldInstance.field_value !== null ? fieldInstance.field_value : '') + '" />';
|
|
},
|
|
'validate': function(value, fieldInstance) {
|
|
return true;
|
|
},
|
|
'getter': function(fieldInstance) {
|
|
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val();
|
|
},
|
|
'setter': function(value, fieldInstance) {
|
|
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val(value);
|
|
}
|
|
},
|
|
'textarea' : {
|
|
'options': {
|
|
// 'selfdecorate': false,
|
|
},
|
|
'render': function(fieldInstance) {
|
|
return '<textarea class="inputEle input-fullwidth ' + fieldInstance.fieldclass + '">' + (fieldInstance.field_value !== null ? fieldInstance.field_value : '') + '</textarea>';
|
|
},
|
|
'validate': function(value, fieldInstance) {
|
|
return true;
|
|
},
|
|
'getter': function(fieldInstance) {
|
|
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val();
|
|
},
|
|
'setter': function(value, fieldInstance) {
|
|
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val(value);
|
|
}
|
|
},
|
|
'picklist' : {
|
|
'options': {
|
|
// 'selfdecorate': false,
|
|
},
|
|
'render': function(fieldInstance) {
|
|
var options = fieldInstance.getOptions();
|
|
var html = '<select class="select2 ' + fieldInstance.fieldclass + '">';
|
|
$.each(options.options, function(key, value) {
|
|
html += '<option value="' + key + '" ' + (fieldInstance.field_value == key ? 'selected="selected"' : '') + '>' + value + '</option>';
|
|
});
|
|
html += '</select>';
|
|
|
|
return html;
|
|
},
|
|
'init': function(fieldInstance) {
|
|
|
|
},
|
|
'validate': function(value, fieldInstance) {
|
|
return true;
|
|
},
|
|
'getter': function(fieldInstance) {
|
|
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).select2('val');
|
|
},
|
|
'setter': function(value, fieldInstance) {
|
|
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).select2('val', value);
|
|
}
|
|
},
|
|
}
|
|
};/**
|
|
* You must generate a FlexTranslate Environment by useing FlexTranslate(ScopeName)
|
|
* @example
|
|
* FlexTranslate("ScopeName")
|
|
* @global
|
|
* @namespace
|
|
**/
|
|
var FlexTranslate = {
|
|
init:function(language, translations) {
|
|
FlexCache.set('__translations_' + language, translations);
|
|
},
|
|
getTranslator:function() {
|
|
return function(string) {
|
|
return FlexTranslate.__(string);
|
|
};
|
|
},
|
|
__:function(string) {
|
|
var language = app.getUserLanguage();
|
|
var translations = FlexCache.get('__translations_' + language, {});
|
|
|
|
if(typeof translations === 'function') {
|
|
FlexTranslate.init(language, translations());
|
|
return FlexTranslate.__(string);
|
|
}
|
|
|
|
if(typeof translations[string] !== 'undefined') {
|
|
return translations[string];
|
|
}
|
|
|
|
return string;
|
|
}
|
|
};
|
|
/*globals Vtiger_Edit_Js:false,Vtiger_Detail_Js:false,Vtiger_Popup_Js:false */
|
|
/**
|
|
* You must generate a FlexUtils Environment by useing FlexUtils(ScopeName)
|
|
* @example
|
|
* FlexUtils("ScopeName")
|
|
* @global
|
|
* @namespace
|
|
**/
|
|
var FlexUtils = {
|
|
layout: null,
|
|
currentLVRow: null,
|
|
listViewFields: false,
|
|
isVT7: function () {
|
|
return typeof app.helper !== 'undefined';
|
|
},
|
|
createFileDrop: function(options) {
|
|
if(typeof options === 'undefined') {
|
|
options = {};
|
|
}
|
|
if(typeof options.hovertext === 'undefined') {
|
|
options.hovertext = 'Drop File';
|
|
}
|
|
if(typeof options.container === 'undefined') {
|
|
options.container = 'body';
|
|
}
|
|
if(typeof options.container === 'undefined') {
|
|
options.container = 'body';
|
|
}
|
|
if(typeof options.data === 'undefined') {
|
|
options.data = {};
|
|
}
|
|
|
|
if($(options.container).prop('tagName') !== 'BODY' && $(options.container).css('position') == 'static') {
|
|
$(options.container).css('position', 'relative');
|
|
}
|
|
$(options.container).addClass('RegisteredFileDrop');
|
|
var containerHeight = $(options.container).height();
|
|
|
|
if(typeof options.url === 'undefined') {
|
|
if(typeof options.action === 'undefined') {
|
|
throw 'URL or action is mandatory for FileDrop Component';
|
|
} else {
|
|
options.url = 'index.php?module=' + ScopeName + '&action=' + options.action;
|
|
|
|
if(typeof options.settings !== 'undefined' && options.settings === true) {
|
|
options.url += '&parent=Settings';
|
|
}
|
|
}
|
|
}
|
|
|
|
if($('style#FlexFileDropStyles').length === 0) {
|
|
var fontSize = 20;
|
|
var showIcon = true;
|
|
var positionText = '40%';
|
|
if(containerHeight < 200) {
|
|
fontSize = 12;
|
|
showIcon = false;
|
|
positionText = '10%';
|
|
}
|
|
|
|
var html = '<style type="text/css" id="FlexFileDropStyles">div.FlexFileDropOverlay {\n' +
|
|
' position: absolute;\n' +
|
|
' top: 0;\n' +
|
|
' left: 0;\n' +
|
|
' height: 100%;\n' +
|
|
' width: 100%;\n' +
|
|
' z-index: 2000;\n' +
|
|
' background-color: rgba(0, 0, 0, 0.7);\n' +
|
|
' color: #ffffff;\n' +
|
|
' font-weight: bold;\n' +
|
|
' letter-spacing: 1px;\n' +
|
|
' text-transform: uppercase;\n' +
|
|
' font-size: ' + fontSize + 'px;\n' +
|
|
' overflow:hidden; ' +
|
|
' text-align: center;\n' +
|
|
' font-family: "Arial Black", Gadget, sans-serif;\n' +
|
|
'}\n' +
|
|
'div.FlexFileDropOverlay * {\n' +
|
|
' pointer-events: none;\n' +
|
|
'}\n' +
|
|
'div.FlexFileDropOverlay span#uploadHint {\n' +
|
|
' position: relative;\n' +
|
|
' top: '+positionText+';\n' +
|
|
'}\n' +
|
|
'div.FlexFileDropOverlay span#uploadHint i {\n' +
|
|
(showIcon == false? 'display:none;' : '') +
|
|
' font-size: 64px;\n' +
|
|
' margin-bottom: 30px;\n' +
|
|
'}</style>';
|
|
$('head').append(html);
|
|
}
|
|
|
|
if($('.FlexFileDropOverlay', options.container).length === 0) {
|
|
var html = '<div class="FlexFileDropOverlay" style="display:none;"><span id="uploadHint"><i class="fa fa-upload" aria-hidden="true"></i><br>' + options.hovertext + '</span></div>';
|
|
$(options.container).append(html);
|
|
}
|
|
|
|
var Overlay = $('.FlexFileDropOverlay', options.container);
|
|
|
|
$(options.container).on('dragenter', $.proxy(function (e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
}, this));
|
|
|
|
$(options.container).on('dragover', $.proxy(function (e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
}, this));
|
|
$(options.container).on('drop', $.proxy(function (e) {
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
}, this));
|
|
|
|
var aSignal = new FlexUtils.Signal();
|
|
|
|
$(options.container).append('<input type="file" style="display:none;" class="fileselector" />');
|
|
$(options.container).find('.fileselector').on('change', function(e) {
|
|
var target = $(e.currentTarget);
|
|
|
|
if(target.prop('files').length > 0) {
|
|
uploadFile(target.prop('files')[0]);
|
|
}
|
|
});
|
|
$(options.container).find('.fileselector').on('click', function(e) {
|
|
e.stopPropagation();
|
|
});
|
|
|
|
$(options.container).on('click', function() {
|
|
$(options.container).find('.fileselector').trigger('click');
|
|
});
|
|
|
|
var DragContainer = $(options.container);
|
|
DragContainer.on('dragenter', function (e) {
|
|
Overlay.fadeIn('fast');
|
|
} );
|
|
Overlay.on('dragleave', function (e) {
|
|
Overlay.fadeOut('fast');
|
|
});
|
|
|
|
function uploadFile(file) {
|
|
var fd = new FormData();
|
|
fd.append('file', file);
|
|
|
|
var uploadURL = options.url;
|
|
var extraData = options.data;
|
|
|
|
$.each(options.data, function(key, value) {
|
|
fd.append(key, value);
|
|
});
|
|
|
|
var jqXHR = jQuery.ajax({
|
|
url: uploadURL,
|
|
type: "POST",
|
|
contentType:false,
|
|
processData: false,
|
|
cache: false,
|
|
data: fd,
|
|
success: function(data){
|
|
aSignal.dispatch(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
Overlay.on('drop', function (e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
Overlay.fadeOut('fast');
|
|
|
|
var fileList = e.originalEvent.dataTransfer.files;
|
|
|
|
$.each(fileList, jQuery.proxy(function(index, file) {
|
|
uploadFile(file);
|
|
}, this));
|
|
});
|
|
|
|
return aSignal;
|
|
},
|
|
showRecordInOverlay:function(setype, crmid) {
|
|
window.open('index.php?module=' + setype + '&view=Detail&record=' + crmid);
|
|
},
|
|
showNotification:function(message, isSuccess, options) {
|
|
if(typeof isSuccess == 'undefined') {
|
|
isSuccess = true;
|
|
}
|
|
if(typeof options == 'undefined') {
|
|
options = {};
|
|
}
|
|
|
|
if(FlexUtils.isVT7()) {
|
|
options.message = message;
|
|
|
|
if(isSuccess === true) {
|
|
app.helper.showSuccessNotification(options);
|
|
} else {
|
|
app.helper.showErrorNotification(options);
|
|
}
|
|
}
|
|
},
|
|
cacheSet:function(key, value) {
|
|
if(FlexUtils.isVT7()) {
|
|
return app.storage.set(key, value);
|
|
}
|
|
},
|
|
cacheGet:function(key, defaultValue) {
|
|
if(FlexUtils.isVT7()) {
|
|
return app.storage.get(key, defaultValue);
|
|
}
|
|
},
|
|
cacheClear:function(key) {
|
|
if(FlexUtils.isVT7()) {
|
|
return app.storage.clear(key);
|
|
}
|
|
},
|
|
cacheFlush:function() {
|
|
if(FlexUtils.isVT7()) {
|
|
return app.storage.flush();
|
|
}
|
|
},
|
|
getCurrentDateFormat:function(type) {
|
|
type = type.toLowerCase();
|
|
if(FlexCache.get('__CurrentDateFormat_' + type, false) !== false) {
|
|
return FlexCache.get('__CurrentDateFormat_' + type, false);
|
|
}
|
|
|
|
var replacement = {};
|
|
|
|
switch(type) {
|
|
case 'php':
|
|
replacement = {
|
|
'yyyy' : '%Y',
|
|
'yy' : '%y',
|
|
'dd' : '%d',
|
|
'mm' : '%m'
|
|
};
|
|
break;
|
|
case 'moment':
|
|
replacement = {
|
|
'yyyy' : 'YYYY',
|
|
'yy' : 'YY',
|
|
'dd' : 'DD',
|
|
'mm' : 'MM'
|
|
};
|
|
break;
|
|
}
|
|
|
|
var currentFormat;
|
|
|
|
if(FlexUtils.isVT7()) {
|
|
currentFormat = app.getDateFormat();
|
|
}
|
|
|
|
$.each(replacement, function(oldPart, newPart) {
|
|
currentFormat = currentFormat.replace(oldPart, newPart);
|
|
});
|
|
|
|
FlexCache.set('__CurrentDateFormat_' + type, currentFormat);
|
|
|
|
return currentFormat;
|
|
},
|
|
getCurrentCustomViewId: function() {
|
|
if(FlexUtils.isVT7() === true) {
|
|
return $('input[name="cvid"]').val();
|
|
} else {
|
|
return jQuery('#customFilter').val();
|
|
}
|
|
},
|
|
selectRecordPopup: function (params, multiple) {
|
|
var aDeferred = jQuery.Deferred();
|
|
var popupInstance = Vtiger_Popup_Js.getInstance();
|
|
|
|
if (FlexUtils.isVT7()) {
|
|
if(typeof params == 'string') {
|
|
params = {
|
|
'module':params,
|
|
'view':'Popup',
|
|
'src_module':'Emails', // module=Documents&view=&src_module=Emails&src_field=testfield&multi_select=1
|
|
'src_field':'testfield'
|
|
};
|
|
}
|
|
if(typeof multiple != 'undefined' && multiple === true) {
|
|
params.multi_select = 1;
|
|
}
|
|
|
|
app.event.off('FlexUtils.SelectRecord');
|
|
app.event.one('FlexUtils.SelectRecord', function (e, data) {
|
|
aDeferred.resolveWith(window, [jQuery.parseJSON(data)]);
|
|
});
|
|
|
|
|
|
popupInstance.showPopup(params, 'FlexUtils.SelectRecord', function (data2) { /* Callback when visible **/ });
|
|
}
|
|
else {
|
|
if(typeof params == 'string') {
|
|
params = {
|
|
'module':params,
|
|
'view':'Popup',
|
|
'src_module':'Emails', // module=Documents&view=&src_module=Emails&src_field=testfield&multi_select=1
|
|
'src_field':'testfield'
|
|
};
|
|
}
|
|
if(typeof multiple != 'undefined' && multiple === true) {
|
|
params.multi_select = 1;
|
|
}
|
|
|
|
popupInstance.show(params, function (data) {
|
|
aDeferred.resolveWith(data);
|
|
});
|
|
}
|
|
|
|
return aDeferred.promise();
|
|
},
|
|
getCurrentLayout: function () {
|
|
if (FlexUtils.layout !== null) {
|
|
return FlexUtils.layout;
|
|
}
|
|
var skinpath = jQuery('body').data('skinpath');
|
|
var matches = skinpath.match(/layouts\/([^/]+)/);
|
|
if (matches.length >= 2) {
|
|
FlexUtils.layout = matches[1];
|
|
return matches[1];
|
|
}
|
|
FlexUtils.layout = 'vlayout';
|
|
return 'vlayout';
|
|
},
|
|
getQueryParams: function (paramName) {
|
|
var sURL = window.document.URL.toString();
|
|
if (sURL.indexOf("?") > 0) {
|
|
var arrParams = sURL.split("?");
|
|
var arrURLParams = arrParams[1].split("&");
|
|
var arrParamNames = new Array(arrURLParams.length);
|
|
var arrParamValues = new Array(arrURLParams.length);
|
|
var i = 0;
|
|
for (i = 0; i < arrURLParams.length; i++) {
|
|
var sParam = arrURLParams[i].split("=");
|
|
arrParamNames[i] = sParam[0];
|
|
if (sParam[1] != "") {
|
|
arrParamValues[i] = decodeURI(sParam[1]);
|
|
} else {
|
|
arrParamValues[i] = "No Value";
|
|
}
|
|
}
|
|
for (i = 0; i < arrURLParams.length; i++) {
|
|
if (arrParamNames[i] == paramName) {
|
|
//alert("Parameter:" + arrParamValues[i]);
|
|
return arrParamValues[i];
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
onListChange: function() {
|
|
if (FlexCache.get('__onListChangeSignal', false) == false) {
|
|
var aSignal = new FlexUtils.Signal();
|
|
app.event.on("post.listViewFilter.click", function (e, container) {
|
|
aSignal.dispatch(container);
|
|
});
|
|
FlexCache.set('__onListChangeSignal', aSignal);
|
|
}
|
|
return FlexCache.get('__onListChangeSignal');
|
|
},
|
|
onRelatedListChange: function () {
|
|
if (FlexCache.get('__onRelatedListChangeSignal', false) == false) {
|
|
var aSignal = new FlexUtils.Signal();
|
|
app.event.on("post.relatedListLoad.click", function (e, container) {
|
|
aSignal.dispatch(container);
|
|
});
|
|
FlexCache.set('__onRelatedListChangeSignal', aSignal);
|
|
}
|
|
return FlexCache.get('__onRelatedListChangeSignal');
|
|
},
|
|
UUIDCounter: 1,
|
|
FieldChangeEventInit: false,
|
|
// Will register an event, when a field is changed
|
|
onFieldChange: function (parentEle) {
|
|
if(typeof parentEle === 'undefined') {
|
|
parentEle = 'div#page';
|
|
}
|
|
|
|
// Only register one signal for FieldChanges
|
|
if (jQuery(parentEle).data('fielduid') === undefined) {
|
|
jQuery(parentEle).data('fielduid', 'parentEle' + FlexUtils.UUIDCounter);
|
|
FlexUtils.UUIDCounter++;
|
|
}
|
|
var Fielduid = jQuery(parentEle).data('fielduid');
|
|
jQuery(parentEle).addClass('RedooFieldChangeTracker');
|
|
var aSignal;
|
|
if (FlexCache.get('__onFieldChangeSignal' + Fielduid, false) == false) {
|
|
aSignal = new FlexUtils.Signal();
|
|
if (FlexUtils.isVT7()) {
|
|
if (FlexUtils.FieldChangeEventInit === false) {
|
|
if(typeof Vtiger_Detail_Js !== 'undefined') {
|
|
app.event.on(Vtiger_Detail_Js.PostAjaxSaveEvent, function (e, fieldBasicData, postSaveRecordDetails, contentHolder) {
|
|
var fieldElement = fieldBasicData.closest('.RedooFieldChangeTracker');
|
|
var Fielduid = fieldElement.data('fielduid');
|
|
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
|
|
aSignal.dispatch({
|
|
name: fieldBasicData.data('name'),
|
|
"new": postSaveRecordDetails[fieldBasicData.data('name')].value
|
|
}, fieldBasicData, postSaveRecordDetails, contentHolder);
|
|
});
|
|
FlexUtils.FieldChangeEventInit = true;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if(FlexUtils.getViewMode() !== "listview" && typeof Vtiger_Detail_Js !== "undefined") {
|
|
var thisInstance = Vtiger_Detail_Js.getInstance();
|
|
var detailContentsHolder = thisInstance.getContentHolder();
|
|
detailContentsHolder.on(thisInstance.fieldUpdatedEvent, function(e, values) {
|
|
var target = $(e.target);
|
|
var fieldName = target.attr('name');
|
|
var fieldElement = target.closest('.RedooFieldChangeTracker');
|
|
var Fielduid = fieldElement.data('fielduid');
|
|
|
|
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
|
|
aSignal.dispatch({
|
|
name: fieldName,
|
|
"new": values.new
|
|
}, values, {}, detailContentsHolder);
|
|
|
|
});
|
|
}
|
|
|
|
}
|
|
FlexCache.set('__onFieldChangeSignal' + Fielduid, aSignal);
|
|
}
|
|
else {
|
|
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
|
|
}
|
|
return FlexCache.get('__onFieldChangeSignal' + Fielduid);
|
|
},
|
|
getRecordLabels: function (ids) {
|
|
var aDeferred = jQuery.Deferred();
|
|
var newIds = [];
|
|
var LabelCache = FlexCache.get('LabelCache', {});
|
|
jQuery.each(ids, function (index, value) {
|
|
if (typeof LabelCache[value] == 'undefined') {
|
|
newIds.push(value);
|
|
}
|
|
});
|
|
if (newIds.length > 0) {
|
|
FlexAjax.postAction('RecordLabel', {
|
|
ids: newIds,
|
|
'dataType': 'json'
|
|
}).then(function (response) {
|
|
jQuery.each(response.result, function (id, value) {
|
|
LabelCache[id] = value;
|
|
});
|
|
FlexCache.set('LabelCache', LabelCache);
|
|
aDeferred.resolveWith({}, [LabelCache]);
|
|
});
|
|
}
|
|
else {
|
|
aDeferred.resolveWith({}, [LabelCache]);
|
|
}
|
|
return aDeferred.promise();
|
|
},
|
|
getFieldList: function (moduleName) {
|
|
var aDeferred = jQuery.Deferred();
|
|
if (typeof _FlexCache.FieldLoadQueue[moduleName] != 'undefined') {
|
|
return _FlexCache.FieldLoadQueue[moduleName];
|
|
}
|
|
_FlexCache.FieldLoadQueue[moduleName] = aDeferred;
|
|
if (typeof _FlexCache.FieldCache[moduleName] != 'undefined') {
|
|
aDeferred.resolve(_FlexCache.FieldCache[moduleName]);
|
|
return aDeferred.promise();
|
|
}
|
|
FlexAjax.post('index.php', {
|
|
'module': ScopeName,
|
|
'mode': 'GetFieldList',
|
|
'action': 'RedooUtils',
|
|
'module_name': moduleName
|
|
}, 'json').then(function (data) {
|
|
_FlexCache.FieldCache[moduleName] = data;
|
|
aDeferred.resolve(data.fields);
|
|
});
|
|
return aDeferred.promise();
|
|
},
|
|
filterFieldListByFieldtype: function (fields, fieldtype) {
|
|
var result = {};
|
|
jQuery.each(fields, function (blockLabel, fields) {
|
|
var block = [];
|
|
jQuery.each(fields, function (fieldName, fieldData) {
|
|
if (fieldData.type == fieldtype) {
|
|
block.push(fieldData);
|
|
}
|
|
});
|
|
if (block.length > 0) {
|
|
result[blockLabel] = block;
|
|
}
|
|
});
|
|
return result;
|
|
},
|
|
fillFieldSelect: function (fieldId, selected, module, fieldtype) {
|
|
if (typeof fieldtype == 'undefined') {
|
|
fieldtype = '';
|
|
}
|
|
if (typeof module == 'undefined' && typeof window.moduleName !== 'undefined') {
|
|
module = window.moduleName;
|
|
}
|
|
if (typeof selected == 'string') {
|
|
selected = [selected];
|
|
}
|
|
|
|
FlexUtils.getFieldList(module, fieldtype).then(function (fields) {
|
|
if (fieldtype != '') {
|
|
fields = FlexUtils.filterFieldListByFieldtype(fields, fieldtype);
|
|
}
|
|
var html = '';
|
|
jQuery.each(fields, function (blockLabel, fields) {
|
|
html += '<optgroup label="' + blockLabel + '">';
|
|
jQuery.each(fields, function (index, field) {
|
|
html += '<option value="' + field.name + '" ' + (jQuery.inArray(field.name, selected) != -1 ? 'selected="selected"' : '') + '>' + field.label + '</option>';
|
|
});
|
|
html += '</optgroup>';
|
|
jQuery('#' + fieldId).html(html);
|
|
if (jQuery('#' + fieldId).hasClass('select2')) {
|
|
jQuery('#' + fieldId).select2('val', selected);
|
|
}
|
|
jQuery('#' + fieldId).trigger('FieldsLoaded');
|
|
});
|
|
});
|
|
},
|
|
_getDefaultParentEle: function () {
|
|
return 'div#page';
|
|
},
|
|
getMainModule: function (parentEle) {
|
|
if (FlexUtils.isVT7()) {
|
|
return FlexUtils._getMainModuleVT7(parentEle);
|
|
}
|
|
else {
|
|
return FlexUtils._getMainModuleVT6(parentEle);
|
|
}
|
|
},
|
|
_getMainModuleVT6: function (parentEle) {
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
var viewMode = FlexUtils.getViewMode(parentEle);
|
|
if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
else if (viewMode == 'editview' || viewMode == 'quickcreate') {
|
|
return $('[name="module"]', parentEle).val();
|
|
}
|
|
else if (viewMode == 'listview') {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
else if (viewMode == 'relatedview') {
|
|
if ($('[name="relatedModuleName"]', parentEle).length > 0) {
|
|
return $('[name="relatedModuleName"]', parentEle).val();
|
|
}
|
|
if ($('#module', parentEle).length > 0) {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
}
|
|
var QueryModule = FlexUtils.getQueryParams('module');
|
|
if (QueryModule !== false) {
|
|
return QueryModule;
|
|
}
|
|
return '';
|
|
},
|
|
_getMainModuleVT7: function (parentEle) {
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
var viewMode = FlexUtils.getViewMode(parentEle);
|
|
if ($(parentEle).data('forcerecordmodule') !== undefined) {
|
|
return $(parentEle).data('forcerecordmodule');
|
|
}
|
|
if (parentEle != '#overlayPageContent.in' && $('#overlayPageContent.in').length > 0) {
|
|
return FlexUtils._getMainModuleVT7('#overlayPageContent.in');
|
|
}
|
|
if (typeof _META != 'undefined' &&
|
|
(viewMode == 'detailview' ||
|
|
viewMode == 'summaryview' ||
|
|
viewMode == 'commentview' ||
|
|
viewMode == 'historyview' ||
|
|
viewMode == 'editview' ||
|
|
viewMode == 'listview') &&
|
|
($(parentEle).hasClass('modal') == false)) {
|
|
return _META.module;
|
|
}
|
|
else {
|
|
if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
else if (viewMode == 'editview' || viewMode == 'quickcreate') {
|
|
if ($('#module', parentEle).length > 0) {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
else {
|
|
return $('[name="module"]', parentEle).val();
|
|
}
|
|
}
|
|
else if (viewMode == 'listview') {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
else if (viewMode == 'relatedview') {
|
|
if ($('[name="relatedModuleName"]', parentEle).length > 0) {
|
|
return $('[name="relatedModuleName"]', parentEle).val();
|
|
}
|
|
if ($('#module', parentEle).length > 0) {
|
|
return $('#module', parentEle).val();
|
|
}
|
|
}
|
|
}
|
|
var QueryModule = FlexUtils.getQueryParams('module');
|
|
if (QueryModule !== false) {
|
|
return QueryModule;
|
|
}
|
|
return '';
|
|
},
|
|
getMainRecordId: function () {
|
|
var parentEle = 'div#page';
|
|
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
|
|
var recordId = false;
|
|
var viewMode = FlexUtils.getViewMode(parentEle);
|
|
|
|
// if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
recordId= $('#recordId', parentEle).val();
|
|
// }
|
|
|
|
return recordId;
|
|
},
|
|
getRecordIds: function (parentEle) {
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
var recordIds = [];
|
|
var viewMode = FlexUtils.getViewMode(parentEle);
|
|
if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
recordIds.push($('#recordId', parentEle).val());
|
|
}
|
|
else if (viewMode == 'quickcreate') {
|
|
// do nothing
|
|
}
|
|
else if (viewMode == 'editview') {
|
|
recordIds.push($('[name="record"]').val());
|
|
}
|
|
else if (viewMode == 'listview') {
|
|
$('.listViewEntries').each(function (index, value) {
|
|
recordIds.push($(value).data('id'));
|
|
});
|
|
}
|
|
else if (viewMode == 'relatedview') {
|
|
$('.listViewEntries').each(function (index, value) {
|
|
recordIds.push($(value).data('id'));
|
|
});
|
|
}
|
|
return recordIds;
|
|
},
|
|
onQuickCreate: function(callback) {
|
|
jQuery('.quickCreateModule, .addButton[data-url*="QuickCreate"]').on('click', function __checkQC() {
|
|
if (jQuery('.quickCreateContent', '.modelContainer').length == 0) {
|
|
window.setTimeout(__checkQC, 200);
|
|
} else {
|
|
var form = jQuery('.modelContainer');
|
|
console.log('onQuickCreate Done');
|
|
|
|
callback(form.find('input[name="module"]').val(), form);
|
|
}
|
|
});
|
|
},
|
|
getViewMode: function (parentEle) {
|
|
if (FlexUtils.isVT7()) {
|
|
return FlexUtils._getViewModeVT7(parentEle);
|
|
}
|
|
else {
|
|
return FlexUtils._getViewModeVT6(parentEle);
|
|
}
|
|
},
|
|
_getViewModeVT6: function (parentEle) {
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
var viewEle = $("#view", parentEle);
|
|
_FlexCache.viewMode = false;
|
|
if (viewEle.length > 0 && viewEle[0].value == "List") {
|
|
_FlexCache.viewMode = "listview";
|
|
}
|
|
if ($(".detailview-table", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "detailview";
|
|
}
|
|
else if ($(".summaryView", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "summaryview";
|
|
}
|
|
else if ($(".recordEditView", parentEle).length > 0) {
|
|
if ($('.quickCreateContent', parentEle).length == 0) {
|
|
_FlexCache.viewMode = "editview";
|
|
}
|
|
else {
|
|
_FlexCache.viewMode = "quickcreate";
|
|
}
|
|
}
|
|
if ($('.relatedContents', parentEle).length > 0) {
|
|
_FlexCache.viewMode = "relatedview";
|
|
if ($('td[data-field-type]', parentEle).length > 0) {
|
|
_FlexCache.popUp = false;
|
|
}
|
|
else {
|
|
_FlexCache.popUp = true;
|
|
}
|
|
}
|
|
if (_FlexCache.viewMode === false) {
|
|
if ($('#view', parentEle).length > 0) {
|
|
if ($('#view', parentEle).val() == 'Detail') {
|
|
_FlexCache.viewMode = 'detailview';
|
|
}
|
|
}
|
|
}
|
|
return _FlexCache.viewMode;
|
|
},
|
|
_getViewModeVT7: function (parentEle) {
|
|
if (typeof parentEle == 'undefined') {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
_FlexCache.viewMode = false;
|
|
if ($(".detailview-table", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "detailview";
|
|
}
|
|
else if ($(".summaryView", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "summaryview";
|
|
}
|
|
else if ($(".recordEditView", parentEle).length > 0) {
|
|
if ($('.quickCreateContent', parentEle).length == 0) {
|
|
_FlexCache.viewMode = "editview";
|
|
}
|
|
else {
|
|
_FlexCache.viewMode = "quickcreate";
|
|
}
|
|
}
|
|
else if ($(".commentsRelatedContainer", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "commentview";
|
|
}
|
|
else if ($(".HistoryContainer", parentEle).length > 0) {
|
|
_FlexCache.viewMode = "historyview";
|
|
}
|
|
else if (jQuery('.relatedContainer', parentEle).find('.relatedModuleName').length > 0) {
|
|
_FlexCache.viewMode = "relatedview";
|
|
}
|
|
else if (jQuery('.listViewContentHeader', parentEle).length > 0 && typeof _META != 'undefined' && _META.view == 'List') {
|
|
_FlexCache.viewMode = "listview";
|
|
}
|
|
if (_FlexCache.viewMode === false) {
|
|
if ($('#view', parentEle).length > 0) {
|
|
if ($('#view', parentEle).val() == 'Detail') {
|
|
_FlexCache.viewMode = 'detailview';
|
|
}
|
|
}
|
|
}
|
|
return _FlexCache.viewMode;
|
|
},
|
|
getContentMaxHeight: function() {
|
|
if(FlexUtils.isVT7() == false) {
|
|
switch(FlexUtils.getCurrentLayout()) {
|
|
case 'begbie':
|
|
return jQuery('.mainContainer').height();
|
|
default:
|
|
return jQuery('#leftPanel').height() - 50;
|
|
}
|
|
|
|
} else {
|
|
return jQuery('#page').height();
|
|
}
|
|
},
|
|
getContentMaxWidth: function() {
|
|
if(FlexUtils.isVT7() == false) {
|
|
return jQuery('#rightPanel').width();
|
|
}
|
|
},
|
|
hideModalBox: function (content) {
|
|
if (FlexUtils.isVT7() === true) {
|
|
app.helper.hideModal();
|
|
}
|
|
else {
|
|
app.hideModalWindow();
|
|
}
|
|
},
|
|
showModalBox: function (content,params) {
|
|
var aDeferred = jQuery.Deferred();
|
|
|
|
if (FlexUtils.isVT7() === false) {
|
|
app.showModalWindow(content, function (data) {
|
|
aDeferred.resolveWith(window, data);
|
|
});
|
|
} else {
|
|
if(typeof params == 'undefined') {
|
|
params = { close:function() { }};
|
|
}
|
|
if(typeof params.close == 'undefined') {
|
|
params.close = function() { };
|
|
}
|
|
|
|
FlexCache.set('__onModalClose', params.close);
|
|
|
|
if(jQuery('.myModal .modal-dialog').length > 0 && jQuery('.modal.in').length > 0) {
|
|
|
|
jQuery('.myModal .modal-dialog').replaceWith(content);
|
|
aDeferred.resolveWith(window, jQuery('.modal.myModal')[0]);
|
|
|
|
} else {
|
|
|
|
var container = app.helper.showModal(content, {
|
|
cb: function (data) {
|
|
aDeferred.resolveWith(window, data);
|
|
}
|
|
});
|
|
container.off('hidden.bs.modal').on('hidden.bs.modal', function() {
|
|
params.close();
|
|
});
|
|
}
|
|
|
|
}
|
|
return aDeferred.promise();
|
|
},
|
|
showContentOverlay: function(data, params) {
|
|
if(FlexUtils.isVT7()) {
|
|
return app.helper.loadPageContentOverlay(data, params);
|
|
} else {
|
|
if($('#overlayPageContent').length == 0) {
|
|
$('body').append('<div id=\'overlayPageContent\' style="margin:0;" class=\'fade modal content-area overlayPageContent overlay-container-60\' tabindex=\'-1\' role=\'dialog\' aria-hidden=\'true\'>\n' +
|
|
' <div class="data">\n' +
|
|
' </div>\n' +
|
|
' <div class="modal-dialog">\n' +
|
|
' </div>\n' +
|
|
' </div>');
|
|
}
|
|
|
|
var aDeferred = new jQuery.Deferred();
|
|
var defaultParams = {
|
|
backdrop:true,
|
|
show:true,
|
|
keyboard: false
|
|
};
|
|
params = jQuery.extend(defaultParams, params);
|
|
|
|
var overlayPageContent = $('#overlayPageContent');
|
|
|
|
//if(jQuery(".content-area").length && jQuery(".content-area").hasClass('full-width')|| (jQuery('.settingsgroup').length === 0 && jQuery('#modules-menu').length === 0)){
|
|
overlayPageContent.addClass('full-width');
|
|
//}
|
|
var alreadyShown = false;
|
|
if(overlayPageContent.hasClass('in')) {
|
|
alreadyShown = true;
|
|
}
|
|
overlayPageContent.one('shown.bs.modal',function(){
|
|
aDeferred.resolve($('#overlayPageContent'));
|
|
});
|
|
|
|
overlayPageContent.one('hidden.bs.modal',function(){
|
|
overlayPageContent.find('.data').html('');
|
|
});
|
|
|
|
overlayPageContent.find('.data').html(data);
|
|
//vtUtils.applyFieldElementsView(overlayPageContent);
|
|
overlayPageContent.modal(params);
|
|
|
|
if(alreadyShown) {
|
|
aDeferred.resolve(jQuery('#overlayPageContent'));
|
|
}
|
|
|
|
return aDeferred.promise();
|
|
|
|
}
|
|
},
|
|
hideContentOverlay: function() {
|
|
if(FlexUtils.isVT7()) {
|
|
app.helper.hidePageContentOverlay();
|
|
} else {
|
|
var aDeferred = new jQuery.Deferred();
|
|
var overlayPageContent = $('#overlayPageContent');
|
|
overlayPageContent.one('hidden.bs.modal', function() {
|
|
overlayPageContent.find('.data').html('');
|
|
aDeferred.resolve();
|
|
});
|
|
$('#overlayPageContent').modal('hide');
|
|
return aDeferred.promise();
|
|
}
|
|
},
|
|
setFieldValue: function (fieldName, fieldValue, parentEle) {
|
|
if (typeof parentEle == 'undefined' || parentEle == null) {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
var fieldElement = FlexUtils.getFieldElement(fieldName, parentEle, true);
|
|
switch (fieldElement.prop('tagName')) {
|
|
case 'INPUT':
|
|
switch (fieldElement.attr('type')) {
|
|
case 'text':
|
|
if (fieldElement.hasClass('dateField')) {
|
|
if(FlexUtils.isVT7()) {
|
|
fieldElement.datepicker('update', fieldValue);
|
|
} else {
|
|
if(fieldValue !== '') {
|
|
fieldElement.val(fieldValue).DatePickerSetDate(fieldValue, true);
|
|
} else {
|
|
fieldElement.val(fieldValue).DatePickerClear();
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
fieldElement.val(fieldValue);
|
|
}
|
|
break;
|
|
case 'hidden':
|
|
if (fieldElement.hasClass('sourceField')) {
|
|
var obj = Vtiger_Edit_Js.getInstance();
|
|
var container = fieldElement.closest('td');
|
|
if (fieldValue.id != '') {
|
|
obj.setReferenceFieldValue(container, { id: fieldValue.id, name: fieldValue.label });
|
|
}
|
|
else {
|
|
$('.clearReferenceSelection', container).trigger('click');
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
case 'SELECT':
|
|
fieldElement.val(fieldValue);
|
|
if(FlexUtils.isVT7() === false) {
|
|
if (fieldElement.hasClass('chzn-select')) {
|
|
fieldElement.trigger('liszt:updated');
|
|
}
|
|
} else {
|
|
if (fieldElement.hasClass('select2')) {
|
|
fieldElement.trigger('change.select2');
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
},
|
|
layoutDependValue: function (value, defaultValue) {
|
|
var currentLayout = FlexUtils.getCurrentLayout();
|
|
if (typeof value[currentLayout] !== 'undefined') {
|
|
return value[currentLayout];
|
|
}
|
|
return defaultValue;
|
|
},
|
|
getFieldElement: function (fieldName, parentEle, returnInput) {
|
|
if (typeof parentEle == 'undefined' || parentEle == null) {
|
|
parentEle = FlexUtils._getDefaultParentEle();
|
|
}
|
|
if (typeof returnInput == 'undefined') {
|
|
returnInput = false;
|
|
}
|
|
if (typeof fieldName == "object") {
|
|
return fieldName;
|
|
}
|
|
var fieldElement = false;
|
|
if (FlexUtils.getViewMode(parentEle) == "detailview") {
|
|
if ($('#' + FlexUtils.getMainModule(parentEle) + '_detailView_fieldValue_' + fieldName, parentEle).length > 0 || $('#Events_detailView_fieldValue_' + fieldName, parentEle).length > 0) {
|
|
fieldElement = $('#' + FlexUtils.getMainModule(parentEle) + '_detailView_fieldValue_' + fieldName);
|
|
if (FlexUtils.getMainModule(parentEle) == 'Calendar' && fieldElement.length == 0) {
|
|
fieldElement = $('#Events_detailView_fieldValue_' + fieldName, parentEle);
|
|
}
|
|
}
|
|
else if ($('#_detailView_fieldValue_' + fieldName, parentEle).length > 0) {
|
|
fieldElement = $('#_detailView_fieldValue_' + fieldName, parentEle);
|
|
}
|
|
}
|
|
else if (FlexUtils.getViewMode(parentEle) == "summaryview") {
|
|
var ele_1;
|
|
if (FlexUtils.isVT7()) {
|
|
ele_1 = jQuery('[data-name="' + fieldName + '"]', this.parentEle);
|
|
}
|
|
else {
|
|
ele_1 = jQuery('[name="' + fieldName + '"]', this.parentEle);
|
|
}
|
|
if (ele_1.length == 0) {
|
|
return false;
|
|
/*
|
|
if(typeof this.summaryFields[fieldName] != 'undefined') {
|
|
fieldElement = jQuery(jQuery(FlexUtils.getCurrentLayout() == 'vlayout' ? '.summary-table td.fieldValue' : '.summary-table div.mycdivfield')[this.summaryFields[fieldName] - 1]);
|
|
} else {
|
|
return false;
|
|
}*/
|
|
}
|
|
else {
|
|
fieldElement = $(ele_1[0]).closest(FlexUtils.layoutDependValue({
|
|
'vlayout': 'td',
|
|
'v7': '.row',
|
|
'begbie': 'div.mycdivfield',
|
|
'responsive': '.row',
|
|
}, 'td'));
|
|
}
|
|
}
|
|
else if (FlexUtils.getViewMode(parentEle) == "editview" || FlexUtils.getViewMode(parentEle) == 'quickcreate') {
|
|
var ele = $('[name="' + fieldName + '"]', parentEle);
|
|
if (ele.length == 0) {
|
|
return false;
|
|
}
|
|
if (returnInput == true) {
|
|
return ele;
|
|
}
|
|
fieldElement = $(ele[0]).closest(FlexUtils.layoutDependValue({
|
|
'vlayout': '.fieldValue',
|
|
'v7': '.fieldValue',
|
|
'begbie': 'div.mycdivfield',
|
|
'responsive': '.fieldValue'
|
|
}, '.fieldValue'));
|
|
}
|
|
else if (FlexUtils.getViewMode(parentEle) == 'listview') {
|
|
if (FlexUtils.listViewFields === false) {
|
|
FlexUtils.listViewFields = FlexUtils.getListFields(parentEle);
|
|
}
|
|
if (FlexUtils.currentLVRow !== null) {
|
|
if (typeof FlexUtils.listViewFields[fieldName] != 'undefined') {
|
|
if (FlexUtils.listViewFields[fieldName] >= 0) {
|
|
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
|
|
}
|
|
else {
|
|
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[Number(FlexUtils.listViewFields[fieldName] + 100) * -1]);
|
|
}
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
else {
|
|
return false;
|
|
}
|
|
}
|
|
else if (FlexUtils.getViewMode(parentEle) == 'relatedview') {
|
|
if (FlexUtils.listViewFields === false) {
|
|
FlexUtils.listViewFields = FlexUtils.getListFields(parentEle);
|
|
}
|
|
if ($('td[data-field-type]', FlexUtils.currentLVRow).length > 0) {
|
|
fieldElement = $($('td[data-field-type]', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
|
|
}
|
|
else {
|
|
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
|
|
}
|
|
}
|
|
return fieldElement;
|
|
},
|
|
refreshContent: function (viewName, isSettings, params, convertComponents) {
|
|
if (typeof params === 'undefined') {
|
|
convertComponents = false;
|
|
}
|
|
if (typeof params === 'undefined') {
|
|
params = {};
|
|
}
|
|
if (typeof isSettings === 'undefined') {
|
|
isSettings = false;
|
|
}
|
|
|
|
params.module = ScopeName;
|
|
params.view = viewName;
|
|
if (isSettings === true) {
|
|
params.parent = 'Settings';
|
|
}
|
|
var aDeferred = jQuery.Deferred();
|
|
if (FlexUtils.isVT7()) {
|
|
FlexAjax.request(params).then(function (data) {
|
|
var target;
|
|
if(jQuery('.settingsPageDiv').length > 0) {
|
|
jQuery(".settingsPageDiv").html(data);
|
|
|
|
target = jQuery(".settingsPageDiv");
|
|
} else {
|
|
jQuery(".ContentReplacement").html(data);
|
|
|
|
target = jQuery(".ContentReplacement");
|
|
}
|
|
|
|
if(convertComponents === true) {
|
|
jQuery(".select2", target).select2();
|
|
}
|
|
|
|
aDeferred.resolve();
|
|
});
|
|
}
|
|
else {
|
|
FlexAjax.request(params).then(function (data) {
|
|
jQuery(jQuery(".contentsDiv")[0]).html(data);
|
|
if(convertComponents === true) {
|
|
jQuery(jQuery(".contentsDiv")[0]).find('.select2').select2();
|
|
}
|
|
|
|
aDeferred.resolve();
|
|
});
|
|
}
|
|
return aDeferred.promise();
|
|
},
|
|
getListFields: function (parentEle) {
|
|
var cols;
|
|
if(FlexUtils.isVT7()) {
|
|
cols = jQuery(".listview-table .listViewContentHeaderValues", parentEle);
|
|
} else {
|
|
cols = jQuery(".listViewEntriesTable .listViewHeaderValues", parentEle);
|
|
}
|
|
var listViewFields = {};
|
|
for (var colIndex in cols) {
|
|
if (cols.hasOwnProperty(colIndex) && jQuery.isNumeric(colIndex)) {
|
|
var value = cols[colIndex];
|
|
if (jQuery(value).data("columnname") == undefined) {
|
|
listViewFields[jQuery(value).data("fieldname")] = colIndex;
|
|
}
|
|
else {
|
|
listViewFields[jQuery(value).data("columnname")] = colIndex;
|
|
}
|
|
}
|
|
}
|
|
return listViewFields;
|
|
},
|
|
loadStyles: function (urls, nocache) {
|
|
if (typeof urls == 'string') {
|
|
urls = [urls];
|
|
}
|
|
var aDeferred = jQuery.Deferred();
|
|
if (typeof nocache == 'undefined') {
|
|
nocache = false; // default don't refresh
|
|
}
|
|
$.when.apply($, $.map(urls, function (url) {
|
|
if (nocache) {
|
|
url += '?_ts=' + new Date().getTime(); // refresh?
|
|
}
|
|
return $.get(url, function () {
|
|
$('<link>', { rel: 'stylesheet', type: 'text/css', 'href': url }).appendTo('head');
|
|
});
|
|
})).then(function () {
|
|
aDeferred.resolve();
|
|
});
|
|
return aDeferred.promise();
|
|
},
|
|
loadScript: function (url, options) {
|
|
var aDeferred = jQuery.Deferred();
|
|
if (typeof FlexCache.loadedScript == 'undefined') {
|
|
FlexCache.loadedScript = {};
|
|
}
|
|
if (typeof FlexCache.loadedScript[url] != 'undefined') {
|
|
aDeferred.resolve();
|
|
return aDeferred;
|
|
}
|
|
// Allow user to set any option except for dataType, cache, and url
|
|
options = jQuery.extend(options || {}, {
|
|
dataType: "script",
|
|
cache: true,
|
|
url: url
|
|
});
|
|
// Use $.ajax() since it is more flexible than $.getScript
|
|
// Return the jqXHR object so we can chain callbacks
|
|
return jQuery.ajax(options);
|
|
}
|
|
};var _FlexCache = {
|
|
'FieldCache': {},
|
|
'FieldLoadQueue': {},
|
|
'viewMode': false,
|
|
'popUp': false
|
|
};
|
|
|
|
if(typeof console != 'undefined' && typeof console.log != 'undefined') {
|
|
console.log('Initialize FlexUtils ' + ScopeName + " V" + Version);
|
|
}
|
|
|
|
if (typeof window.FlexStore == 'undefined') {
|
|
window.FlexStore = {};
|
|
}
|
|
if (typeof window.RedooStore == 'undefined') {
|
|
window.RedooStore = {};
|
|
}
|
|
window.RedooStore[ScopeName] = window.FlexStore[ScopeName] = {
|
|
'Ajax': FlexAjax,
|
|
'Utils': FlexUtils,
|
|
'Cache': FlexCache,
|
|
'Form': FlexForm,
|
|
'Translate': FlexTranslate
|
|
};
|
|
|
|
if (typeof window.FlexAjax == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @param {string} ScopeName
|
|
* @returns {FlexAjax}
|
|
*/
|
|
window.FlexAjax = function (ScopeName) {
|
|
if (typeof window.FlexStore[ScopeName] != 'undefined') {
|
|
return window.FlexStore[ScopeName].Ajax;
|
|
}
|
|
if (typeof window.RedooStore[ScopeName] != 'undefined') {
|
|
return window.RedooStore[ScopeName].Ajax;
|
|
}
|
|
console.error('FlexAjax ' + ScopeName + ' Scope not found');
|
|
};
|
|
}
|
|
|
|
if (typeof window.RedooAjax == 'undefined') {
|
|
window.RedooAjax = window.FlexAjax;
|
|
}
|
|
|
|
if (typeof window.FlexUtils == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @param ScopeName
|
|
* @returns FlexUtils
|
|
* @constructor
|
|
*/
|
|
window.FlexUtils = function (ScopeName) {
|
|
if (typeof window.FlexStore[ScopeName] != 'undefined') {
|
|
return window.FlexStore[ScopeName].Utils;
|
|
}
|
|
if (typeof window.RedooStore[ScopeName] != 'undefined') {
|
|
return window.RedooStore[ScopeName].Utils;
|
|
}
|
|
console.error('FlexUtils ' + ScopeName + ' Scope not found');
|
|
};
|
|
}
|
|
if (typeof window.RedooUtils == 'undefined') {
|
|
window.RedooUtils = window.FlexUtils;
|
|
}
|
|
|
|
if (typeof window.FlexCache == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @param ScopeName
|
|
* @returns FlexCache
|
|
* @constructor
|
|
*/
|
|
window.FlexCache = function (ScopeName) {
|
|
if (typeof window.RedooStore[ScopeName] != 'undefined') {
|
|
return window.RedooStore[ScopeName].Cache;
|
|
}
|
|
if (typeof window.FlexStore[ScopeName] != 'undefined') {
|
|
return window.FlexStore[ScopeName].Cache;
|
|
}
|
|
console.error('FlexCache ' + ScopeName + ' Scope not found');
|
|
};
|
|
}
|
|
if (typeof window.RedooCache == 'undefined') {
|
|
window.RedooCache = window.FlexCache;
|
|
}
|
|
if (typeof window.FlexForm == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @param ScopeName
|
|
* @returns FlexCache
|
|
* @constructor
|
|
*/
|
|
window.FlexForm = function (ScopeName) {
|
|
if (typeof window.FlexStore[ScopeName] != 'undefined') {
|
|
return window.FlexStore[ScopeName].Form;
|
|
}
|
|
console.error('FlexForm ' + ScopeName + ' Scope not found');
|
|
};
|
|
}
|
|
if (typeof window.FlexTranslate == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @param ScopeName
|
|
* @returns FlexCache
|
|
* @constructor
|
|
*/
|
|
window.FlexTranslate = function (ScopeName) {
|
|
if (typeof window.FlexStore[ScopeName] != 'undefined') {
|
|
return window.FlexStore[ScopeName].Translate;
|
|
}
|
|
console.error('FlexTranslate ' + ScopeName + ' Scope not found');
|
|
};
|
|
}
|
|
|
|
if (typeof window.FlexEvents == 'undefined') {
|
|
/**
|
|
* @ignore
|
|
* @returns jQuery Eventhandler
|
|
* @constructor
|
|
*/
|
|
window.FlexEvents = $({});
|
|
}// Dependency
|
|
/* jshint ignore:start */
|
|
/*
|
|
JS Signals <http://millermedeiros.github.com/js-signals/>
|
|
Released under the MIT license
|
|
Author: Miller Medeiros
|
|
Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM)
|
|
*/
|
|
function h(a, b, c, d, e) { this._listener = b; this._isOnce = c; this.context = d; this._signal = a; this._priority = e || 0; }
|
|
function g(a, b) { if (typeof a !== "function")
|
|
throw Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}", b)); }
|
|
function e() { this._bindings = []; this._prevParams = null; var a = this; this.dispatch = function () { e.prototype.dispatch.apply(a, arguments); }; }
|
|
h.prototype = { active: !0, params: null, execute: function (a) {
|
|
var b;
|
|
this.active && this._listener && (a = this.params ? this.params.concat(a) :
|
|
a, b = this._listener.apply(this.context, a), this._isOnce && this.detach());
|
|
return b;
|
|
}, detach: function () { return this.isBound() ? this._signal.remove(this._listener, this.context) : null; }, isBound: function () { return !!this._signal && !!this._listener; }, isOnce: function () { return this._isOnce; }, getListener: function () { return this._listener; }, getSignal: function () { return this._signal; }, _destroy: function () { delete this._signal; delete this._listener; delete this.context; }, toString: function () {
|
|
return "[SignalBinding isOnce:" + this._isOnce +
|
|
", isBound:" + this.isBound() + ", active:" + this.active + "]";
|
|
} };
|
|
e.prototype = { VERSION: "1.0.0", memorize: !1, _shouldPropagate: !0, active: !0, _registerListener: function (a, b, c, d) { var e = this._indexOfListener(a, c); if (e !== -1) {
|
|
if (a = this._bindings[e], a.isOnce() !== b)
|
|
throw Error("You cannot add" + (b ? "" : "Once") + "() then add" + (!b ? "" : "Once") + "() the same listener without removing the relationship first.");
|
|
}
|
|
else
|
|
a = new h(this, a, b, c, d), this._addBinding(a); this.memorize && this._prevParams && a.execute(this._prevParams); return a; },
|
|
_addBinding: function (a) { var b = this._bindings.length; do
|
|
--b;
|
|
while (this._bindings[b] && a._priority <= this._bindings[b]._priority); this._bindings.splice(b + 1, 0, a); }, _indexOfListener: function (a, b) { for (var c = this._bindings.length, d; c--;)
|
|
if (d = this._bindings[c], d._listener === a && d.context === b)
|
|
return c; return -1; }, has: function (a, b) { return this._indexOfListener(a, b) !== -1; }, add: function (a, b, c) { g(a, "add"); return this._registerListener(a, !1, b, c); }, addOnce: function (a, b, c) {
|
|
g(a, "addOnce");
|
|
return this._registerListener(a, !0, b, c);
|
|
}, remove: function (a, b) { g(a, "remove"); var c = this._indexOfListener(a, b); c !== -1 && (this._bindings[c]._destroy(), this._bindings.splice(c, 1)); return a; }, removeAll: function () { for (var a = this._bindings.length; a--;)
|
|
this._bindings[a]._destroy(); this._bindings.length = 0; }, getNumListeners: function () { return this._bindings.length; }, halt: function () { this._shouldPropagate = !1; }, dispatch: function (a) {
|
|
if (this.active) {
|
|
var b = Array.prototype.slice.call(arguments), c = this._bindings.length, d;
|
|
if (this.memorize)
|
|
this._prevParams =
|
|
b;
|
|
if (c) {
|
|
d = this._bindings.slice();
|
|
this._shouldPropagate = !0;
|
|
do
|
|
c--;
|
|
while (d[c] && this._shouldPropagate && d[c].execute(b) !== !1);
|
|
}
|
|
}
|
|
}, forget: function () { this._prevParams = null; }, dispose: function () { this.removeAll(); delete this._bindings; delete this._prevParams; }, toString: function () { return "[Signal active:" + this.active + " numListeners:" + this.getNumListeners() + "]"; } };
|
|
var f = e;
|
|
f.Signal = e;
|
|
FlexUtils.Signal = f.Signal;
|
|
/*
|
|
* jQuery BlockUI; v20141123
|
|
* http://jquery.malsup.com/block/
|
|
* Copyright (c) 2014 M. Alsup; Dual licensed: MIT/GPL
|
|
*/
|
|
(function () {
|
|
"use strict";
|
|
function e(e) { function o(o, i) { var s, h, k = o == window, v = i && void 0 !== i.message ? i.message : void 0; if (i = e.extend({}, FlexUtils.blockUI.defaults, i || {}), !i.ignoreIfBlocked || !e(o).data("blockUI.isBlocked")) {
|
|
if (i.overlayCSS = e.extend({}, FlexUtils.blockUI.defaults.overlayCSS, i.overlayCSS || {}), s = e.extend({}, FlexUtils.blockUI.defaults.css, i.css || {}), i.onOverlayClick && (i.overlayCSS.cursor = "pointer"), h = e.extend({}, FlexUtils.blockUI.defaults.themedCSS, i.themedCSS || {}), v = void 0 === v ? i.message : v, k && b && t(window, { fadeOut: 0 }), v && "string" != typeof v && (v.parentNode || v.jquery)) {
|
|
var y = v.jquery ? v[0] : v, m = {};
|
|
e(o).data("blockUI.history", m), m.el = y, m.parent = y.parentNode, m.display = y.style.display, m.position = y.style.position, m.parent && m.parent.removeChild(y);
|
|
}
|
|
e(o).data("blockUI.onUnblock", i.onUnblock);
|
|
var g, I, w, U, x = i.baseZ;
|
|
g = r || i.forceIframe ? e('<iframe class="blockUI" style="z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="' + i.iframeSrc + '"></iframe>') : e('<div class="blockUI" style="display:none"></div>'), I = i.theme ? e('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:' + x++ + ';display:none"></div>') : e('<div class="blockUI blockOverlay" style="z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'), i.theme && k ? (U = '<div class="blockUI ' + i.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:' + (x + 10) + ';display:none;position:fixed">', i.title && (U += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + (i.title || " ") + "</div>"), U += '<div class="ui-widget-content ui-dialog-content"></div>', U += "</div>") : i.theme ? (U = '<div class="blockUI ' + i.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:' + (x + 10) + ';display:none;position:absolute">', i.title && (U += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + (i.title || " ") + "</div>"), U += '<div class="ui-widget-content ui-dialog-content"></div>', U += "</div>") : U = k ? '<div class="blockUI ' + i.blockMsgClass + ' blockPage" style="z-index:' + (x + 10) + ';display:none;position:fixed"></div>' : '<div class="blockUI ' + i.blockMsgClass + ' blockElement" style="z-index:' + (x + 10) + ';display:none;position:absolute"></div>', w = e(U), v && (i.theme ? (w.css(h), w.addClass("ui-widget-content")) : w.css(s)), i.theme || I.css(i.overlayCSS), I.css("position", k ? "fixed" : "absolute"), (r || i.forceIframe) && g.css("opacity", 0);
|
|
var C = [g, I, w], S = k ? e("body") : e(o);
|
|
e.each(C, function () { this.appendTo(S); }), i.theme && i.draggable && e.fn.draggable && w.draggable({ handle: ".ui-dialog-titlebar", cancel: "li" });
|
|
var O = f && (!e.support.boxModel || e("object,embed", k ? null : o).length > 0);
|
|
if (u || O) {
|
|
if (k && i.allowBodyStretch && e.support.boxModel && e("html,body").css("height", "100%"), (u || !e.support.boxModel) && !k)
|
|
var E = d(o, "borderTopWidth"), T = d(o, "borderLeftWidth"), M = E ? "(0 - " + E + ")" : 0, B = T ? "(0 - " + T + ")" : 0;
|
|
e.each(C, function (e, o) { var t = o[0].style; if (t.position = "absolute", 2 > e)
|
|
k ? t.setExpression("height", "Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:" + i.quirksmodeOffsetHack + ') + "px"') : t.setExpression("height", 'this.parentNode.offsetHeight + "px"'), k ? t.setExpression("width", 'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"') : t.setExpression("width", 'this.parentNode.offsetWidth + "px"'), B && t.setExpression("left", B), M && t.setExpression("top", M);
|
|
else if (i.centerY)
|
|
k && t.setExpression("top", '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'), t.marginTop = 0;
|
|
else if (!i.centerY && k) {
|
|
var n = i.css && i.css.top ? parseInt(i.css.top, 10) : 0, s = "((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + " + n + ') + "px"';
|
|
t.setExpression("top", s);
|
|
} });
|
|
}
|
|
if (v && (i.theme ? w.find(".ui-widget-content").append(v) : w.append(v), (v.jquery || v.nodeType) && e(v).show()), (r || i.forceIframe) && i.showOverlay && g.show(), i.fadeIn) {
|
|
var j = i.onBlock ? i.onBlock : c, H = i.showOverlay && !v ? j : c, z = v ? j : c;
|
|
i.showOverlay && I._fadeIn(i.fadeIn, H), v && w._fadeIn(i.fadeIn, z);
|
|
}
|
|
else
|
|
i.showOverlay && I.show(), v && w.show(), i.onBlock && i.onBlock.bind(w)();
|
|
if (n(1, o, i), k ? (b = w[0], p = e(i.focusableElements, b), i.focusInput && setTimeout(l, 20)) : a(w[0], i.centerX, i.centerY), i.timeout) {
|
|
var W = setTimeout(function () { k ? e.unblockUI(i) : e(o).unblock(i); }, i.timeout);
|
|
e(o).data("blockUI.timeout", W);
|
|
}
|
|
} } function t(o, t) { var s, l = o == window, a = e(o), d = a.data("blockUI.history"), c = a.data("blockUI.timeout"); c && (clearTimeout(c), a.removeData("blockUI.timeout")), t = e.extend({}, FlexUtils.blockUI.defaults, t || {}), n(0, o, t), null === t.onUnblock && (t.onUnblock = a.data("blockUI.onUnblock"), a.removeData("blockUI.onUnblock")); var r; r = l ? e("body").children().filter(".blockUI").add("body > .blockUI") : a.find(">.blockUI"), t.cursorReset && (r.length > 1 && (r[1].style.cursor = t.cursorReset), r.length > 2 && (r[2].style.cursor = t.cursorReset)), l && (b = p = null), t.fadeOut ? (s = r.length, r.stop().fadeOut(t.fadeOut, function () { 0 === --s && i(r, d, t, o); })) : i(r, d, t, o); } function i(o, t, i, n) { var s = e(n); if (!s.data("blockUI.isBlocked")) {
|
|
o.each(function () { this.parentNode && this.parentNode.removeChild(this); }), t && t.el && (t.el.style.display = t.display, t.el.style.position = t.position, t.el.style.cursor = "default", t.parent && t.parent.appendChild(t.el), s.removeData("blockUI.history")), s.data("blockUI.static") && s.css("position", "static"), "function" == typeof i.onUnblock && i.onUnblock(n, i);
|
|
var l = e(document.body), a = l.width(), d = l[0].style.width;
|
|
l.width(a - 1).width(a), l[0].style.width = d;
|
|
} } function n(o, t, i) { var n = t == window, l = e(t); if ((o || (!n || b) && (n || l.data("blockUI.isBlocked"))) && (l.data("blockUI.isBlocked", o), n && i.bindEvents && (!o || i.showOverlay))) {
|
|
var a = "mousedown mouseup keydown keypress keyup touchstart touchend touchmove";
|
|
o ? e(document).bind(a, i, s) : e(document).unbind(a, s);
|
|
} } function s(o) { if ("keydown" === o.type && o.keyCode && 9 == o.keyCode && b && o.data.constrainTabKey) {
|
|
var t = p, i = !o.shiftKey && o.target === t[t.length - 1], n = o.shiftKey && o.target === t[0];
|
|
if (i || n)
|
|
return setTimeout(function () { l(n); }, 10), !1;
|
|
} var s = o.data, a = e(o.target); return a.hasClass("blockOverlay") && s.onOverlayClick && s.onOverlayClick(o), a.parents("div." + s.blockMsgClass).length > 0 ? !0 : 0 === a.parents().children().filter("div.blockUI").length; } function l(e) { if (p) {
|
|
var o = p[e === !0 ? p.length - 1 : 0];
|
|
o && o.focus();
|
|
} } function a(e, o, t) { var i = e.parentNode, n = e.style, s = (i.offsetWidth - e.offsetWidth) / 2 - d(i, "borderLeftWidth"), l = (i.offsetHeight - e.offsetHeight) / 2 - d(i, "borderTopWidth"); o && (n.left = s > 0 ? s + "px" : "0"), t && (n.top = l > 0 ? l + "px" : "0"); } function d(o, t) { return parseInt(e.css(o, t), 10) || 0; } e.fn._fadeIn = e.fn.fadeIn; var c = e.noop || function () { }, r = /MSIE/.test(navigator.userAgent), u = /MSIE 6.0/.test(navigator.userAgent) && !/MSIE 8.0/.test(navigator.userAgent); document.documentMode || 0; var f = e.isFunction(document.createElement("div").style.setExpression); FlexUtils.blockUI = function (e) { o(window, e); }; FlexUtils.unblockUI = function (e) { t(window, e); }, e.growlUI = function (o, t, i, n) { var s = e('<div class="growlUI"></div>'); o && s.append("<h1>" + o + "</h1>"), t && s.append("<h2>" + t + "</h2>"), void 0 === i && (i = 3e3); var l = function (o) { o = o || {}, e.blockUI({ message: s, fadeIn: o.fadeIn !== void 0 ? o.fadeIn : 700, fadeOut: o.fadeOut !== void 0 ? o.fadeOut : 1e3, timeout: o.timeout !== void 0 ? o.timeout : i, centerY: !1, showOverlay: !1, onUnblock: n, css: FlexUtils.blockUI.defaults.growlCSS }); }; l(), s.css("opacity"), s.mouseover(function () { l({ fadeIn: 0, timeout: 3e4 }); var o = e(".blockMsg"); o.stop(), o.fadeTo(300, 1); }).mouseout(function () { e(".blockMsg").fadeOut(1e3); }); }, e.fn.block = function (t) { if (this[0] === window)
|
|
return e.blockUI(t), this; var i = e.extend({}, FlexUtils.blockUI.defaults, t || {}); return this.each(function () { var o = e(this); i.ignoreIfBlocked && o.data("blockUI.isBlocked") || o.unblock({ fadeOut: 0 }); }), this.each(function () { "static" == e.css(this, "position") && (this.style.position = "relative", e(this).data("blockUI.static", !0)), this.style.zoom = 1, o(this, t); }); }, e.fn.unblock = function (o) { return this[0] === window ? (e.unblockUI(o), this) : this.each(function () { t(this, o); }); }, FlexUtils.blockUI.version = 2.7, FlexUtils.blockUI.defaults = { message: "<h1>Please wait...</h1>", title: null, draggable: !0, theme: !1, css: { padding: 0, margin: 0, width: "30%", top: "40%", left: "35%", textAlign: "center", color: "#000", border: "3px solid #aaa", backgroundColor: "#fff", cursor: "wait" }, themedCSS: { width: "30%", top: "40%", left: "35%" }, overlayCSS: { backgroundColor: "#000", opacity: 0.6, cursor: "wait" }, cursorReset: "default", growlCSS: { width: "350px", top: "10px", left: "", right: "10px", border: "none", padding: "5px", opacity: 0.6, cursor: "default", color: "#fff", backgroundColor: "#000", "-webkit-border-radius": "10px", "-moz-border-radius": "10px", "border-radius": "10px" }, iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank", forceIframe: !1, baseZ: 2e3, centerX: !0, centerY: !0, allowBodyStretch: !0, bindEvents: !0, constrainTabKey: !0, fadeIn: 200, fadeOut: 400, timeout: 0, showOverlay: !0, focusInput: !0, focusableElements: ":input:enabled:visible", onBlock: null, onUnblock: null, onOverlayClick: null, quirksmodeOffsetHack: 4, blockMsgClass: "blockMsg", ignoreIfBlocked: !1 }; var b = null, p = []; }
|
|
"function" == typeof define && define.amd && define.amd.jQuery ? define(["jquery"], e) : e(jQuery);
|
|
})();
|
|
/* jshint ignore:end */
|
|
})(jQuery);
|
|
|
|
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZsZXhVdGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJGbGV4VXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W119
|
|
;jQuery(function() {
|
|
var workflowFrontendActions = new Workflow();
|
|
workflowFrontendActions.checkFrontendActions('init');
|
|
|
|
var listenCommentWidget = false;
|
|
|
|
if(typeof Vtiger_Detail_Js != 'undefined' && jQuery('#recordId').length > 0) {
|
|
var thisInstance = Vtiger_Detail_Js.getInstance();
|
|
var detailContentsHolder = thisInstance.getContentHolder();
|
|
|
|
RedooUtils('Workflow2').onFieldChange('div#page').add(function() {
|
|
workflowFrontendActions.checkFrontendActions('edit');
|
|
});
|
|
/*
|
|
detailContentsHolder.on(thisInstance.fieldUpdatedEvent, function(e, params){
|
|
var fieldName = jQuery(e.target).attr("name");
|
|
workflowFrontendActions.checkFrontendActions('edit');
|
|
});
|
|
*/
|
|
detailContentsHolder.on(thisInstance.widgetPostLoad, function(e, p) {
|
|
if(listenCommentWidget == false) return;
|
|
|
|
if(jQuery('.commentContainer', e.target).length > 0) {
|
|
listenCommentWidget = false;
|
|
workflowFrontendActions.checkFrontendActions('edit');
|
|
}
|
|
});
|
|
|
|
detailContentsHolder.on('click','.detailViewSaveComment', function(e){
|
|
listenCommentWidget = true;
|
|
});
|
|
}
|
|
/*
|
|
// TODO: UPDATE for VT7
|
|
if(typeof Vtiger_Header_Js != 'undefined') {
|
|
var thisInstance = Vtiger_Header_Js.getInstance();
|
|
thisInstance.registerQuickCreateCallBack(function(e, b, c) {
|
|
|
|
var workflowFrontendActions = new Workflow();
|
|
workflowFrontendActions.checkFrontendActions('both', e.data.result['_recordId']);
|
|
});
|
|
}
|
|
*/
|
|
|
|
|
|
jQuery(window).on('workflow.detail.sidebar.ready', function() {
|
|
jQuery('#WorkflowDesignerErrorLoaded').hide();
|
|
var workflow = new Workflow();
|
|
workflowObj = workflow;
|
|
|
|
}).on('workflow.list.sidebar.ready', function() {
|
|
jQuery('#WorkflowDesignerErrorLoaded').hide();
|
|
var workflow = new Workflow();
|
|
workflowObj = workflow;
|
|
|
|
});
|
|
/* jQuery(window).on('workflow.list.sidebar.ready', function() {
|
|
console.log('List-Sidebar ready');
|
|
}); */
|
|
|
|
if(typeof Vtiger_Edit_Js != 'undefined') {
|
|
jQuery('body').on(Vtiger_Edit_Js.referenceSelectionEvent, function (e, b, c, d) {
|
|
var workflowObj = new Workflow();
|
|
workflowObj.setBackgroundMode(true);
|
|
|
|
workflowObj.addExtraEnvironment('source_module', jQuery('[name="module"]').val())
|
|
workflowObj.addExtraEnvironment('source_record', jQuery('[name="record"]').val());
|
|
|
|
workflowObj.execute('WF_REFERENCE', b.record, function() {
|
|
workflowObj.checkFrontendActions('edit');
|
|
});
|
|
});
|
|
}
|
|
|
|
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
|
|
|
|
// if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
Workflow2Frontend.TopbuttonHandler(jQuery('div#page'));
|
|
// }
|
|
|
|
if (jQuery('#module', jQuery('div#page')).length > 0) {
|
|
if (jQuery('#module', jQuery('div#page')).val() == 'Campaigns' && typeof Campaigns_Detail_Js != 'undefined') {
|
|
|
|
// Enable ViewCheck
|
|
if (
|
|
typeof WFDFrontendConfig !== 'undefined' &&
|
|
typeof WFDFrontendConfig['relatedbtn'] !== 'undefined'
|
|
) {
|
|
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
|
|
|
|
if (viewMode == 'relatedview') {
|
|
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
|
|
}
|
|
|
|
jQuery(document).on('postajaxready', function (e) {
|
|
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
|
|
|
|
if (viewMode == 'relatedview') {
|
|
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
|
|
}
|
|
});
|
|
|
|
if (jQuery('#module', jQuery('div#page')).length > 0) {
|
|
if (jQuery('#module', jQuery('div#page')).val() == 'Campaigns' && typeof Campaigns_Detail_Js != 'undefined') {
|
|
thisInstance = Campaigns_Detail_Js.getInstance();
|
|
var detailContentsHolder = thisInstance.getContentHolder();
|
|
var detailContainer = detailContentsHolder.closest('div.detailViewInfo');
|
|
jQuery('.related', detailContainer).on('click', 'li', function (e, urlAttributes) {
|
|
window.setTimeout(function () {
|
|
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
|
|
|
|
if (viewMode == 'relatedview') {
|
|
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
|
|
}
|
|
}, 1000);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
RedooUtils('Workflow2').onRelatedListChange().add(function() {
|
|
var objWorkflow = new Workflow();
|
|
objWorkflow.showInlineButtons();
|
|
});
|
|
|
|
jQuery('.quickCreateModule, .addButton[data-url*="QuickCreate"]').on('click', function __check() {
|
|
if(jQuery('.quickCreateContent','.modelContainer').length == 0) {
|
|
window.setTimeout(__check, 200);
|
|
} else {
|
|
jQuery('#globalmodal form[name="QuickCreate"] .btn[type="submit"]').on('click', function() {
|
|
WorkflowExecution
|
|
});
|
|
}
|
|
});
|
|
|
|
});;jQuery('#WorkflowDesignerErrorLoaded').hide();
|
|
var WFUserIsAdmin;
|
|
window.Workflow = function () {
|
|
this.crmid = 0;
|
|
this._allowParallel = 0;
|
|
this._workflowid = null;
|
|
this._workflowTrigger = null;
|
|
|
|
this._currentExecId = null;
|
|
|
|
this.ExecutionCallback = null;
|
|
|
|
this._requestValues = {};
|
|
this._requestValuesKey = null;
|
|
this._backgroundMode = false;
|
|
this._extraEnvironment = {};
|
|
this._ListViewMode = false;
|
|
|
|
/**
|
|
*
|
|
* @param workflow WorkflowID or Trigger
|
|
* @param crmid Record to use
|
|
*/
|
|
this.execute = function(workflow, crmid, callback, ignoreViewMode) {
|
|
if(typeof ignoreViewMode === 'undefined') ignoreViewMode = false;
|
|
|
|
this.crmid = crmid;
|
|
|
|
if(FlexUtils('Workflow2').getViewMode() == 'listview' && crmid == 0 && ignoreViewMode === false) {
|
|
runListViewWorkflow(workflow);
|
|
} else {
|
|
if (jQuery.isNumeric(workflow)) {
|
|
this._executeById(workflow, callback);
|
|
} else {
|
|
this._executeByTrigger(workflow, callback);
|
|
}
|
|
}
|
|
};
|
|
|
|
this.setListView = function(value) {
|
|
this._ListViewMode = (value == true);
|
|
};
|
|
|
|
this.checkFrontendActions = function(step, crmid) {
|
|
WorkflowRecordMessages = [];
|
|
if(typeof crmid == 'undefined') {
|
|
var crmid = 0;
|
|
|
|
var recordId;
|
|
if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'detailview' || Workflow2Frontend.getViewMode(jQuery('div#page')) == 'summaryview') {
|
|
recordId = $('#recordId', jQuery('div#page')).val();
|
|
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'quickcreate') {
|
|
recordId = 0;
|
|
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'editview') {
|
|
recordId = jQuery('[name="record"]').val();
|
|
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'listview') {
|
|
recordId = 0;
|
|
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'relatedview') {
|
|
recordId = 0;
|
|
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'composemail') {
|
|
var ids = jQuery('[name="selected_ids"]').val();
|
|
recordId = jQuery.parseJSON(ids)[0];
|
|
} else {
|
|
recordId = 0;
|
|
}
|
|
} else {
|
|
recordId = Number(crmid);
|
|
}
|
|
|
|
if(recordId == 0 || typeof recordId == 'undefined') {
|
|
if( $('#recordId').length > 0) {
|
|
var recordId = $('#recordId').val();
|
|
}
|
|
}
|
|
|
|
/*if(typeof recordId == "undefined" || recordId == 0) {
|
|
return;
|
|
}*/
|
|
|
|
if(typeof _META != 'undefined') {
|
|
var moduleName = _META.module;
|
|
} else {
|
|
var moduleName = RedooUtils('Workflow2').getMainModule('div#page');
|
|
}
|
|
|
|
RedooAjax('Workflow2').postAction('CheckFrontendActions', {'crmid':recordId, 'step':step, src_module: moduleName}, 'json').then(jQuery.proxy(function(response) {
|
|
if(response.length == 0) return;
|
|
|
|
if(typeof response.buttons != 'undefined' && response.buttons.length > 0) {
|
|
this.generateInlineButtons(response.buttons);
|
|
}
|
|
|
|
if(typeof response.detailviewtop != 'undefined' && response.detailviewtop.length > 0) {
|
|
this.generateDetailViewTopButtons(response.detailviewtop);
|
|
}
|
|
|
|
if(typeof response['btn-list'] == 'object') {
|
|
this.generateBtnTrigger(response['btn-list']);
|
|
}
|
|
|
|
if(jQuery('.wfdGeneralButton').length == 0) {
|
|
if(typeof _META != 'undefined') {
|
|
var moduleName = _META.module;
|
|
} else {
|
|
var moduleName = RedooUtils('Workflow2').getMainModule(parentEle);
|
|
}
|
|
var recordId = jQuery('[name="record_id"]').val();
|
|
|
|
if(response.show_general_button != false) {
|
|
if(jQuery('.detailview-header-block').length > 0) {
|
|
var TopButton = '<button class="btn btn-default wfdGeneralButton" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="margin-right:5px;font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
|
|
jQuery('.detailViewButtoncontainer .btn-toolbar .btn-group:first-of-type').prepend('' + TopButton + '');
|
|
} else if(jQuery('#appnav .nav ').length > 0){
|
|
var TopButton = '<button class="btn btn-default wfdGeneralButton module-buttons" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
|
|
jQuery('#appnav .nav ').prepend('<li style="padding-right:20px;">' + TopButton + '</li>');
|
|
} else {
|
|
//resposnvie
|
|
var TopButton = '<button style="margin-right:20px;" class="btn btn-default wfdGeneralButton module-buttons" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
|
|
jQuery('div#appnav').find('div.btn-group').prepend(TopButton);
|
|
}
|
|
|
|
/*if (jQuery('.WFDetailViewGroupTop').length > 0) {
|
|
jQuery('.WFDetailViewGroupTop').prepend(TopButton);
|
|
} else {
|
|
jQuery('.detailViewButtoncontainer .btn-toolbar ').prepend('<div class="btn-group WFDetailViewGroupTop">' + TopButton + '</div>');
|
|
}*/
|
|
|
|
jQuery('.wfdGeneralButton').on('click', function (e) {
|
|
var module = jQuery(e.currentTarget).data('module');
|
|
var crmid = jQuery(e.currentTarget).data('crmid');
|
|
var view = jQuery(e.currentTarget).data('view');
|
|
|
|
Workflow2Frontend.showWorkflowPopup(module, crmid, view);
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
WFUserIsAdmin = response.is_admin == true ? true : false;
|
|
|
|
jQuery.each(response.actions, function(index, value) {
|
|
|
|
switch(value.type) {
|
|
case 'redirect':
|
|
if(value.configuration.url == '_internal_reload') {
|
|
window.location.reload();
|
|
return false;
|
|
}
|
|
if(value.configuration.target == "same") {
|
|
window.location.href = value.configuration.url;
|
|
return false;
|
|
} else {
|
|
window.open(value.configuration.url);
|
|
return;
|
|
}
|
|
|
|
break;
|
|
case 'confirmation':
|
|
if(jQuery('.confirmation_container').length == 0) {
|
|
var html = '<div class="confirmation_container row block" style="background-color:#ffffff;padding-top:10px;margin-top:10px;"></div>';
|
|
jQuery('div.details').before(html);
|
|
}
|
|
|
|
var config = value.configuration;
|
|
var bgColor = config.backgroundcolor;
|
|
//if(bgColor == '') {
|
|
bgColor = '#ffffff';
|
|
//}
|
|
/*
|
|
if(config.border != '') {
|
|
var borderCSS = 'border:2px solid ' + config.border + ';border-top:0;';
|
|
} else {
|
|
var borderCSS = '';
|
|
}*/
|
|
var borderCSS = '';
|
|
var html = '<div class="row" style="line-height:24px;' + borderCSS +'background-color:' + bgColor + ';">';
|
|
html += '<div style="font-weight:bold;margin-bottom:10px;line-height:24px;" class="col-lg-6">' + config.infomessage + ' <div style="font-size:10px;color:#5e5e55;line-height:10px;">' + config.text_eingestellt +': ' + config.first_name + ' ' + config.last_name + ' / ' + config.timestamp + '</div></div>';
|
|
html += '<div style="font-weight:bold;margin-bottom:10px;line-height:34px;" class="col-lg-6">';
|
|
if(config.buttons.btn_accept != '') {
|
|
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash1 + ' \', \'ok\');" class="btn btn-success decision decision_ok" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=ok&h=' + config.hash1 + '">' + config.buttons.btn_accept + '</a>';
|
|
}
|
|
if(value.configuration.buttons.btn_rework != '') {
|
|
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash2 + ' \', \'rework\');" class="btn btn-warning decision decision_rework" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=rework&h=' + config.hash1 + '">' + config.buttons.btn_rework + '</a>';
|
|
}
|
|
if(value.configuration.buttons.btn_decline != '') {
|
|
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash3 + ' \', \'decline\');" class="btn btn-danger decision decision_decline" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=decline&h=' + config.hash1 + '">' + config.buttons.btn_decline + '</a>';
|
|
}
|
|
|
|
|
|
jQuery('.confirmation_container').append(html);
|
|
jQuery('.confirmation_container').slideDown();
|
|
break;
|
|
case 'requestValues':
|
|
continueWorkflow(value.configuration.execid, value.configuration.crmid, value.configuration.blockid);
|
|
return false;
|
|
break;
|
|
case 'message':
|
|
WorkflowRecordMessages.push(value.configuration);
|
|
break;
|
|
}
|
|
});
|
|
|
|
this.parseMessages();
|
|
}, this));
|
|
};
|
|
|
|
this.generateBtnTrigger = function(buttons) {
|
|
jQuery('.wfdButtonHeaderbutton').remove();
|
|
|
|
if(typeof buttons.headerbtn != 'undefined') {
|
|
var html = '';
|
|
jQuery.each(buttons.headerbtn, $.proxy(function(index, value) {
|
|
var rand = Math.floor(Math.random() * 9999999) + 1000000;
|
|
if(value.color != '') {
|
|
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
|
|
} else {
|
|
var cssStyle = ''
|
|
}
|
|
|
|
html += '<li><button type="button" data-id="' + value.workflow_id + '" class="btn btn-default module-buttons wfdButtonHeaderbutton" style="' + cssStyle + '">' + value.label + '</button></li>';
|
|
}, this));
|
|
|
|
jQuery('#appnav .nav ').prepend('' + html + '');
|
|
|
|
jQuery('.wfdButtonHeaderbutton').on('click', function(e) {
|
|
var target = jQuery(e.currentTarget);
|
|
var workflowObj = new Workflow();
|
|
|
|
if(FlexUtils('Workflow2').getViewMode() == 'listview') {
|
|
workflowObj.execute(target.data('id'), 0);
|
|
} else {
|
|
workflowObj.execute(target.data('id'), RedooUtils('Workflow2').getRecordIds()[0]);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
this.generateDetailViewTopButtons = function(buttons) {
|
|
jQuery('.WFDetailViewGroupTop').remove();
|
|
var html = '';
|
|
jQuery.each(buttons, function(index, value) {
|
|
var rand = Math.floor(Math.random() * 9999999) + 1000000;
|
|
if(value.color != '') {
|
|
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
|
|
} else {
|
|
var cssStyle = ''
|
|
}
|
|
|
|
html += '<button data-id="' + value.workflow_id + '" class="btn btn-default wfdButtonTopbutton" style="' + cssStyle + '">' + value.label + '</button>';
|
|
});
|
|
jQuery('.detailViewButtoncontainer .btn-toolbar ').prepend('<div class="btn-group WFDetailViewGroupTop">' + html + '</div>');
|
|
|
|
jQuery('.wfdButtonTopbutton').on('click', function() {
|
|
var workflow = new Workflow();
|
|
workflow.execute(jQuery(this).data('id'), jQuery('#recordId').val());
|
|
});
|
|
};
|
|
|
|
this.generateInlineButtons = function(buttons) {
|
|
var final = {};
|
|
|
|
jQuery.each(buttons, jQuery.proxy(function (index, button) {
|
|
jQuery.each(button.config.field, jQuery.proxy(function (fieldIndex, fieldName) {
|
|
if (typeof final[fieldName] == 'undefined') {
|
|
final[fieldName] = {
|
|
config: button.config,
|
|
buttons: []
|
|
};
|
|
}
|
|
|
|
final[fieldName]['buttons'].push(button);
|
|
}, this));
|
|
//
|
|
}, this));
|
|
|
|
RedooCache('Workflow2').set('currentInlineButtons', final);
|
|
this.showInlineButtons();
|
|
};
|
|
|
|
this.showInlineButtons = function() {
|
|
jQuery('.WFInlineButton').remove();
|
|
jQuery('.WFDInlineDropdown').remove();
|
|
|
|
jQuery.each(RedooCache('Workflow2').get('currentInlineButtons', []), jQuery.proxy(function(fieldName, fields) {
|
|
var field = RedooUtils('Workflow2').getFieldElement(fieldName);
|
|
|
|
if(field != false) {
|
|
var dropdownHTML = '';
|
|
var buttonHTML = '';
|
|
|
|
jQuery.each(fields['buttons'], jQuery.proxy(function (index, button) {
|
|
if(typeof button.config.dropdown == 'undefined' || button.config.dropdown == '0') {
|
|
// Buttons shouldn't arranged as DropDown
|
|
|
|
var existingButtons = jQuery('.WFInlineButton[data-wfid="' + button.workflow_id + '"][data-frontendid="' + button.frontend_id + '"][data-fieldname="' + fieldName + '"]');
|
|
if (existingButtons.length > 0) {
|
|
jQuery(existingButtons).show().removeClass('tmpbtn');
|
|
} else {
|
|
buttonHTML = '<button type="button" data-wfid="' + button.workflow_id + '" data-frontendid="' + button.frontend_id + '" data-fieldname="' + fieldName + '" class="WFInlineButton btn pull-right" style="height:20px;line-height:16px;font-size:10px; padding:1px 10px; background-color:' + button.color + ';color:' + button.textcolor + ';margin-left:5px;">' + button.label + '</button>';
|
|
}
|
|
} else {
|
|
|
|
// Buttons shouldn't arranged as DropDown
|
|
//jQuery.each(fields['buttons'], jQuery.proxy(function (index, button) {
|
|
dropdownHTML += '<li style=" background-color:' + button.color + ';color:' + button.textcolor + ';" class="dropdown-submenu"><a data-wfid="' + button.workflow_id + '" data-frontendid="' + button.frontend_id + '" data-fieldname="' + fieldName + '" href="#" style="color:' + button.textcolor + ';">' + button.label + '</a></li>';
|
|
//}, this));
|
|
}
|
|
}, this));
|
|
|
|
jQuery('.WFDInlineDropdown', field).remove();
|
|
|
|
if(RedooUtils('Workflow2').getViewMode() == 'detailview') {
|
|
if(dropdownHTML != '') {
|
|
var finalHTML = '<div class="btn-group pull-right WFDInlineDropdown" style="margin-left:5px;"><a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="height:20px;color:#666666;border:1px solid #666666;line-height:16px;font-size:10px; padding:1px 5px;"><span class="caret"></span></a><ul class="dropdown-menu">' + dropdownHTML + '</ul></div>';
|
|
field.append(finalHTML);
|
|
}
|
|
|
|
if(buttonHTML != '') {
|
|
field.append(buttonHTML);
|
|
}
|
|
} else if(RedooUtils('Workflow2').getViewMode() == 'summaryview') {
|
|
if(dropdownHTML != '') {
|
|
var finalHTML = '<div class="btn-group pull-right WFDInlineDropdown" style="margin-left:5px;"><a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="font-size:10px; padding:1px 5px;"><span class="caret"></span></a><ul class="dropdown-menu">' + dropdownHTML + '</ul></div>';
|
|
field.append(finalHTML);
|
|
}
|
|
console.log(buttonHTML, field);
|
|
if(buttonHTML != '') {
|
|
field.append(buttonHTML);
|
|
}
|
|
}
|
|
|
|
}
|
|
}, this));
|
|
|
|
jQuery('.WFInlineButton.tmpbtn').hide();
|
|
|
|
jQuery('.WFInlineButton, .WFDInlineDropdown li a').off('click').on('click', function(e) {
|
|
e.stopPropagation();
|
|
|
|
var wfId = jQuery(e.currentTarget).data('wfid');
|
|
|
|
var workflow = new Workflow();
|
|
workflow.execute(wfId, RedooUtils('Workflow2').getRecordIds()[0], function() {});
|
|
});
|
|
|
|
jQuery("div.WFDInlineDropdown").on('click', function(e) {
|
|
e.stopPropagation();
|
|
|
|
jQuery(".dropdown-toggle", e.currentTarget).dropdown('toggle');
|
|
});
|
|
};
|
|
|
|
this.setBackgroundMode = function(value) {
|
|
this._backgroundMode = value;
|
|
};
|
|
this.setRequestedData = function(values, relatedKey) {
|
|
this._requestValues = values;
|
|
this._requestValuesKey = relatedKey;
|
|
};
|
|
|
|
this.allowParallel = function(value) {
|
|
this._allowParallel = value?1:0;
|
|
};
|
|
|
|
this.addExtraEnvironment = function(key, value) {
|
|
this._extraEnvironment[key] = value;
|
|
};
|
|
|
|
this._executeByTrigger = function(triggerName, ExecutionCallback) {
|
|
var Execution = new WorkflowExecution();
|
|
Execution.init(this.crmid);
|
|
Execution.setRequestedData(this._requestValues, this._requestValuesKey);
|
|
|
|
if(this._allowParallel == 1) {
|
|
Execution.allowParallel();
|
|
}
|
|
Execution.enableRedirection(ENABLEredirectionOrReloadAfterFinish);
|
|
|
|
|
|
if(typeof ExecutionCallback != 'undefined') {
|
|
this._workflowTrigger = triggerName;
|
|
}
|
|
|
|
if(typeof ExecutionCallback != 'undefined') {
|
|
Execution.setCallback(ExecutionCallback);
|
|
}
|
|
|
|
jQuery.each(this._extraEnvironment, function(index, value) {
|
|
Execution.addEnvironment(index, value);
|
|
});
|
|
|
|
Execution.setBackgroundMode(this._backgroundMode);
|
|
Execution.setWorkflowByTrigger(triggerName);
|
|
Execution.execute();
|
|
};
|
|
|
|
this._executeById = function(workflow_id, ExecutionCallback) {
|
|
var Execution = new WorkflowExecution();
|
|
Execution.init(this.crmid);
|
|
Execution.setRequestedData(this._requestValues, this._requestValuesKey);
|
|
|
|
if(this._allowParallel == 1) {
|
|
Execution.allowParallel();
|
|
}
|
|
Execution.enableRedirection(ENABLEredirectionOrReloadAfterFinish);
|
|
|
|
|
|
if(typeof ExecutionCallback != 'undefined') {
|
|
this._workflowid = workflow_id;
|
|
}
|
|
|
|
if(typeof ExecutionCallback != 'undefined') {
|
|
Execution.setCallback(ExecutionCallback);
|
|
}
|
|
|
|
jQuery.each(this._extraEnvironment, function(index, value) {
|
|
Execution.addEnvironment(index, value);
|
|
});
|
|
|
|
Execution.setListViewMode(this._ListViewMode);
|
|
Execution.setBackgroundMode(this._backgroundMode);
|
|
Execution.setWorkflowById(workflow_id);
|
|
Execution.execute();
|
|
|
|
}; /** ExecuteById **/
|
|
|
|
this._submitStartfields = function(fields, urlStr) {
|
|
app.hideModalWindow();
|
|
RedooUtils('Workflow2').blockUI({
|
|
'message' : 'Workflow is executing',
|
|
// disable if you want key and mouse events to be enable for content that is blocked (fix for select2 search box)
|
|
bindEvents: false,
|
|
|
|
//Fix for overlay opacity issue in FF/Linux
|
|
applyPlatformOpacityRules : false
|
|
});
|
|
|
|
jQuery.post("index.php", {
|
|
"module" : "Workflow2",
|
|
"action" : "Execute",
|
|
"file" : "ajaxExecuteWorkflow",
|
|
|
|
"crmid" : this.crmid,
|
|
"workflow" : this._workflowid,
|
|
allow_parallel: this._allowParallel,
|
|
"startfields": fields
|
|
},
|
|
jQuery.proxy(function(response) {
|
|
RedooUtils('Workflow2').unblockUI();
|
|
|
|
try {
|
|
response = jQuery.parseJSON(response);
|
|
} catch (e) {
|
|
console.log(response);
|
|
return;
|
|
}
|
|
|
|
if(response["result"] == "ok") {
|
|
if(ENABLEredirectionOrReloadAfterFinish) {
|
|
window.location.reload();
|
|
}
|
|
} else {
|
|
console.log(response);
|
|
}
|
|
}, this)
|
|
);
|
|
}
|
|
|
|
this.closeForceNotification = function(messageId) {
|
|
jQuery.post('index.php?module=Workflow2&action=MessageClose', { messageId:messageId, force: 1 });
|
|
}
|
|
|
|
this.parseMessages = function() {
|
|
if(typeof WorkflowRecordMessages != 'object' || WorkflowRecordMessages.length == 0) {
|
|
return;
|
|
}
|
|
RedooUtils('Workflow2').loadScript('modules/Workflow2/views/resources/js/noty/jquery.noty.packaged.min.js').then(jQuery.proxy(function()
|
|
{
|
|
jQuery.each(WorkflowRecordMessages, function(index, value) {
|
|
|
|
if(typeof WFDvisibleMessages['workflowMessage' + value['id']] != 'undefined' && WFDvisibleMessages['workflowMessage' + value['id']] == true) {
|
|
return;
|
|
}
|
|
|
|
var type = 'alert';
|
|
switch(value.type) {
|
|
case 'success':
|
|
type = 'success';
|
|
break;
|
|
case 'info':
|
|
type = 'alert';
|
|
break;
|
|
case 'error':
|
|
type = 'error';
|
|
break;
|
|
}
|
|
value.message = '<strong>' + value.subject + "</strong><br/>" + value.message;
|
|
|
|
if(value.show_until != '') {
|
|
value.message += '<br/><span style="font-size:10px;font-style: italic;">' +value.show_until + '</span>';
|
|
}
|
|
if(WFUserIsAdmin == true) {
|
|
value.message += ' <a href="#" style="font-size:10px;font-style: italic;" onclick="closeForceNotification(' + value.id + ');">(Remove Message)</a>';
|
|
}
|
|
|
|
WFDvisibleMessages['workflowMessage' + value['id']] = true;
|
|
if(value.position != -1) {
|
|
noty({
|
|
text: value.message,
|
|
id: 'workflowMessage' + value['id'],
|
|
type: value.type,
|
|
timeout: false,
|
|
'layout': value.position,
|
|
'messageId': value.id,
|
|
callback: {
|
|
"afterClose": function () {
|
|
WFDvisibleMessages['workflowMessage' + this.options.messageId] = false;
|
|
jQuery.post('index.php?module=Workflow2&action=MessageClose', {messageId: this.options.messageId});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}), this);
|
|
}
|
|
|
|
this.loadCachedScript = function( url, options ) {
|
|
|
|
// Allow user to set any option except for dataType, cache, and url
|
|
options = jQuery.extend( options || {}, {
|
|
dataType: "script",
|
|
cache: true,
|
|
url: url
|
|
});
|
|
|
|
// Use $.ajax() since it is more flexible than $.getScript
|
|
// Return the jqXHR object so we can chain callbacks
|
|
return jQuery.ajax( options );
|
|
};
|
|
}
|
|
;var WorkflowRunning = false;
|
|
|
|
var Workflow2Frontend = {
|
|
viewMode:false,
|
|
runCampaignRealationWF:function(workflow_id) {
|
|
runListViewWorkflow(workflow_id);
|
|
},
|
|
showWorkflowPopup:function(MainModule, RecordIds, MainView) {
|
|
|
|
//var MainView = RedooUtils('Workflow2').getViewMode(parentEle);
|
|
// var RecordIds = RedooUtils('Workflow2').getRecordIds(parentEle);
|
|
|
|
RedooAjax('Workflow2').postView('WorkflowPopup', {
|
|
'target_module': MainModule,
|
|
'target_view': MainView,
|
|
'target_record': RecordIds
|
|
}).then(function(response) {
|
|
RedooUtils('Workflow2').showModalBox(response).then(function(data) {
|
|
jQuery('[type="submit"]', data).on('click', function(e) {
|
|
if(jQuery('#workflow2_workflowid').val() == '' || jQuery('#workflow2_workflowid').val() == null) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
return false;
|
|
}
|
|
|
|
RedooUtils('Workflow2').hideModalBox();
|
|
|
|
var crmid = jQuery('.WorkflowPopupCRMID', data).val();
|
|
var workflow = new Workflow();
|
|
workflow.execute(jQuery('#workflow2_workflowid').val() , crmid);
|
|
});
|
|
});
|
|
});
|
|
},
|
|
TopbuttonHandler:function(parentEle) {
|
|
var MainModule = RedooUtils('Workflow2').getMainModule(parentEle);
|
|
var CurrentViewMode = FlexUtils('Workflow2').getViewMode();
|
|
|
|
if (
|
|
typeof WFDFrontendConfig !== 'undefined' &&
|
|
typeof WFDFrontendConfig['morebtn'] !== 'undefined' &&
|
|
typeof WFDFrontendConfig['morebtn'][MainModule] !== 'undefined'
|
|
) {
|
|
if(jQuery('.detailViewButtoncontainer ul.dropdown-menu').hasClass('WFDAddHandler') === false) {
|
|
var html = '';
|
|
jQuery.each(WFDFrontendConfig['morebtn'][MainModule], function(index, value) {
|
|
var rand = Math.floor(Math.random() * 9999999) + 1000000;
|
|
html += '<li data-id="' + value.workflowid + '" class="wfdButtonMoreBtn" style="' + (value.color != '' ? 'color:' + value.textcolor + ';background-color: ' + value.color + ';':'') + '"><a href="#" style="' + (value.color != '' ? 'color:' + value.textcolor + ';':'') + '">' + value.label + '</a></li>';
|
|
});
|
|
jQuery('.detailViewButtoncontainer ul.dropdown-menu').addClass('WFDAddHandler');
|
|
jQuery('.detailViewButtoncontainer ul.dropdown-menu').append(html);
|
|
|
|
jQuery('.wfdButtonMoreBtn a').on('click', function(e) {
|
|
e.preventDefault();
|
|
return false;
|
|
});
|
|
jQuery('.wfdButtonMoreBtn').on('click', function() {
|
|
var workflow = new Workflow();
|
|
workflow.execute(jQuery(this).data('id'), jQuery('#recordId').val());
|
|
});
|
|
}
|
|
}
|
|
|
|
if (
|
|
CurrentViewMode == 'listview' &&
|
|
typeof WFDFrontendConfig !== 'undefined' &&
|
|
typeof WFDFrontendConfig['listviewbtn'] !== 'undefined' &&
|
|
typeof WFDFrontendConfig['listviewbtn'][MainModule] !== 'undefined'
|
|
) {
|
|
|
|
if(jQuery('.detailViewButtoncontainer').hasClass('WFDAddHandler') === false) {
|
|
var html = '';
|
|
jQuery.each(WFDFrontendConfig['listviewbtn'][MainModule], function(index, value) {
|
|
var rand = Math.floor(Math.random() * 9999999) + 1000000;
|
|
|
|
if(value.color != '') {
|
|
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
|
|
} else {
|
|
var cssStyle = ''
|
|
}
|
|
|
|
html += '<button type="button" data-id="' + value.workflowid + '" class="btn btn-default wfdButtonTopbutton" style="' + cssStyle + '">' + value.label + '</button>';
|
|
});
|
|
|
|
jQuery('.detailViewButtoncontainer').addClass('WFDAddHandler');
|
|
jQuery('.listViewActionsContainer').append(html);
|
|
|
|
jQuery('.wfdButtonTopbutton').on('click', function(e) {
|
|
e.preventDefault();
|
|
var workflow = new Workflow();
|
|
workflow.execute(jQuery(this).data('id'), 0);
|
|
});
|
|
}
|
|
}
|
|
},
|
|
RelatedListHandler:function(parentEle) {
|
|
|
|
if(typeof WFDFrontendConfig !== 'undefined' && typeof WFDFrontendConfig['relatedbtn'] !== 'undefined') {
|
|
var MainModule = Workflow2Frontend.getMainModule(parentEle);
|
|
if(typeof WFDFrontendConfig['relatedbtn'][MainModule] !== 'undefined') {
|
|
var btnHtml = '';
|
|
for(var index in WFDFrontendConfig['relatedbtn'][MainModule] ) {
|
|
if (WFDFrontendConfig['relatedbtn'][MainModule].hasOwnProperty(index) && jQuery.isNumeric(index)) {
|
|
var value = WFDFrontendConfig['relatedbtn'][MainModule][index];
|
|
|
|
btnHtml += '<button type="button" class="btn CampaignRelationBtn" onclick="Workflow2Frontend.runCampaignRealationWF(' + value['workflowid'] +');" style="background-color:' + value['color'] +';">' + value['label'] +'</button>';
|
|
}
|
|
}
|
|
|
|
var parent = jQuery(jQuery('div.relatedHeader .btn')[0]).closest('.btn-group').parent();
|
|
parent.append('<div class="btn-group">' + btnHtml + '</div>');
|
|
}
|
|
}
|
|
|
|
|
|
},
|
|
getMainModule:function (parentEle) {
|
|
var viewMode = Workflow2Frontend.getViewMode(parentEle);
|
|
|
|
if (viewMode == 'detailview' || viewMode == 'summaryview') {
|
|
return jQuery('#module', parentEle).val();
|
|
} else if (viewMode == 'editview' || viewMode == 'quickcreate') {
|
|
return jQuery('[name="module"]', parentEle).val();
|
|
} else if (viewMode == 'listview') {
|
|
return jQuery('#module', parentEle).val();
|
|
} else if (viewMode == 'relatedview') {
|
|
if (jQuery('[name="relatedModuleName"]', parentEle).length > 0) {
|
|
return jQuery('[name="relatedModuleName"]', parentEle).val();
|
|
}
|
|
if (jQuery('#module', parentEle).length > 0) {
|
|
return jQuery('#module', parentEle).val();
|
|
}
|
|
}
|
|
return '';
|
|
},
|
|
getViewMode: function(parentEle, obj) {
|
|
var viewEle = jQuery("#view", parentEle);
|
|
|
|
if(viewEle.length > 0 && viewEle[0].value == "List") {
|
|
Workflow2Frontend.viewMode = "listview";
|
|
}
|
|
|
|
if(jQuery(".detailview-table", parentEle).length > 0) {
|
|
Workflow2Frontend.viewMode = "detailview";
|
|
} else if(jQuery(".summary-table", parentEle).length > 0) {
|
|
Workflow2Frontend.viewMode = "summaryview";
|
|
} else if(jQuery(".recordEditView", parentEle).length > 0) {
|
|
if(jQuery('.quickCreateContent', parentEle).length == 0) {
|
|
Workflow2Frontend.viewMode = "editview";
|
|
} else {
|
|
Workflow2Frontend.viewMode = "quickcreate";
|
|
}
|
|
}
|
|
|
|
if(jQuery('.relatedContents', parentEle).length > 0) {
|
|
Workflow2Frontend.viewMode = "relatedview";
|
|
|
|
if(jQuery('td[data-field-type]', parentEle).length > 0) {
|
|
Workflow2Frontend.popUp = false;
|
|
} else {
|
|
Workflow2Frontend.popUp = true;
|
|
}
|
|
}
|
|
|
|
if(Workflow2Frontend.viewMode === false) {
|
|
if(jQuery('#view', parentEle).length > 0) {
|
|
if(jQuery('#view', parentEle).val() == 'Detail') {
|
|
Workflow2Frontend.viewMode = 'detailview';
|
|
}
|
|
}
|
|
}
|
|
|
|
return Workflow2Frontend.viewMode;
|
|
}
|
|
};;window.WorkflowExecution = function() {
|
|
this._crmid = null;
|
|
this._execId = null;
|
|
|
|
this._workflowId = null;
|
|
this._workflowTrigger = null;
|
|
|
|
this._execId = null;
|
|
this._blockID = null;
|
|
|
|
this._requestValues = {};
|
|
this._requestValuesKey = null;
|
|
|
|
this._callback = null;
|
|
this._allowParallel = false;
|
|
this._allowRedirection = true;
|
|
this._backgroundMode = false;
|
|
this._extraEnvironment = {};
|
|
this._ListViewMode = false;
|
|
this._FrontendType = undefined;
|
|
|
|
this.setFrontendType = function(type) {
|
|
this._FrontendType = type;
|
|
};
|
|
|
|
this.setEnvironment = function(envVars) {
|
|
this._extraEnvironment = envVars;
|
|
};
|
|
|
|
this.addEnvironment = function(key, value) {
|
|
this._extraEnvironment[key] = value;
|
|
};
|
|
|
|
this.setRequestedData = function(values, relatedKey) {
|
|
this._requestValues = values;
|
|
this._requestValuesKey = relatedKey;
|
|
};
|
|
|
|
this.allowParallel = function() {
|
|
this._allowParallel = true;
|
|
};
|
|
this.init = function(crmid) {
|
|
this._crmid = crmid;
|
|
};
|
|
|
|
this.setWorkflowByTrigger = function(triggerName) {
|
|
this._workflowTrigger = triggerName;
|
|
this._workflowId = undefined;
|
|
};
|
|
|
|
this.setWorkflowById = function(workflow_id) {
|
|
this._workflowId = workflow_id;
|
|
this._workflowTrigger = undefined;
|
|
};
|
|
|
|
this.setBackgroundMode = function(value) {
|
|
this._backgroundMode = value;
|
|
};
|
|
this.setCallback = function(callback) {
|
|
this._callback = callback;
|
|
};
|
|
this.setListViewMode = function(listView) {
|
|
this._ListViewMode = listView == true;
|
|
};
|
|
|
|
this.enableRedirection = function(value) {
|
|
this._allowRedirection = value ? true : false;
|
|
};
|
|
|
|
this._handleDownloads = function(response) {
|
|
var html = '<p>' + response.download_text + '</p>';
|
|
html += '<ul style="list-style:none;">';
|
|
$.each(response.downloads, function(index, data) {
|
|
html += '<li style="margin-bottom:5px;"><a href="' + data.url + '" target="_blank"><i class="fa fa-download" style="margin-right:10px;" aria-hidden="true"></i> <strong>' + data.filename + '</strong></a></li>';
|
|
});
|
|
html += '</ul>';
|
|
|
|
bootbox.dialog({
|
|
message:html,
|
|
closeButton:true,
|
|
buttons: {
|
|
ok: {
|
|
label: 'Ok',
|
|
className: 'btn-success'
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
this._handleRedirection = function(response) {
|
|
if(this._allowRedirection === true) {
|
|
if(response["redirection_target"] == "same") {
|
|
window.location.href = response["redirection"];
|
|
return true;
|
|
} else {
|
|
window.open(response["redirection"]);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
this.setContinue = function(execID, blockID) {
|
|
this._execId = execID;
|
|
this._blockID = blockID;
|
|
};
|
|
|
|
this.executeWithForm = function(form) {
|
|
if(typeof jQuery(form).ajaxSubmit == 'undefined') {
|
|
console.error('jquery.forms plugin requuired!');
|
|
return;
|
|
}
|
|
|
|
WorkflowRunning = true;
|
|
RedooUtils('Workflow2').blockUI({ message: '<h4 style="padding:5px 0;"><img src="modules/Workflow2/icons/sending.gif" style="margin-bottom:20px;" /><br/>Please wait ...</h4>' });
|
|
|
|
jQuery(form).ajaxSubmit({
|
|
'url' : "index.php",
|
|
'type': 'post',
|
|
data: {
|
|
"module" : "Workflow2",
|
|
"action" : "ExecuteNew",
|
|
|
|
'crmid' : this._crmid,
|
|
|
|
'workflowID' : this._workflowId === null ? undefined : this._workflowId,
|
|
'allowParallel': this._allowParallel ? 1 : 0,
|
|
|
|
'continueExecId': this._execId === null ? undefined : this._execId,
|
|
'continueBlockId': this._blockID === null ? undefined : this._blockID,
|
|
'requestValues': this._requestValues === null ? undefined : this._requestValues,
|
|
'requestValuesKey': this._requestValuesKey === null ? undefined : this._requestValuesKey,
|
|
'extraEnvironment': this._extraEnvironment,
|
|
'listviewmode': this._ListViewMode ? 1 : 0
|
|
},
|
|
success:jQuery.proxy(this.executionResponse, this),
|
|
error:jQuery.proxy(this.executionResponse, this)
|
|
});
|
|
|
|
};
|
|
|
|
this.frontendWorkflows = function(workflowIDs, record) {
|
|
var dfd = jQuery.Deferred();
|
|
|
|
RedooAjax('Workflow2').post('index.php', {
|
|
'module': 'Workflow2',
|
|
'action': 'FrontendWorkflowExec',
|
|
'workflow_ids': workflowIDs,
|
|
'record': record,
|
|
'dataType': 'json'
|
|
}).then($.proxy(function(data) {
|
|
//this.executionResponse(data);
|
|
|
|
dfd.resolve( data );
|
|
}, this));
|
|
|
|
return dfd.promise();
|
|
};
|
|
|
|
this.execute = function() {
|
|
if(this._backgroundMode === false) {
|
|
RedooUtils('Workflow2').blockUI({message: '<h4 style="padding:5px 0;"><img src="modules/Workflow2/icons/sending.gif" style="margin-bottom:20px;"/><br/>Please wait ...</h4>'});
|
|
}
|
|
|
|
WorkflowRunning = true;
|
|
jQuery.post("index.php", {
|
|
"module" : "Workflow2",
|
|
"action" : "ExecuteNew",
|
|
//XDEBUG_PROFILE:1,
|
|
|
|
'frontendtype': this._FrontendType,
|
|
'crmid' : this._crmid,
|
|
|
|
'workflowID' : this._workflowId === null ? undefined : this._workflowId,
|
|
'triggerName' : this._workflowTrigger === null ? undefined : this._workflowTrigger,
|
|
|
|
'allowParallel': this._allowParallel ? 1 : 0,
|
|
|
|
'continueExecId': this._execId === null ? undefined : this._execId,
|
|
'continueBlockId': this._blockID === null ? undefined : this._blockID,
|
|
'requestValues': this._requestValues === null ? undefined : this._requestValues,
|
|
'requestValuesKey': this._requestValuesKey === null ? undefined : this._requestValuesKey,
|
|
'extraEnvironment': this._extraEnvironment,
|
|
'listviewmode': this._ListViewMode ? 1 : 0
|
|
}
|
|
).always(jQuery.proxy(this.executionResponse, this));
|
|
};
|
|
|
|
this.executionResponse = function(responseTMP) {
|
|
if(typeof responseTMP == 'object' && typeof responseTMP.responseText != 'undefined') {
|
|
responseTMP = responseTMP.responseText;
|
|
}
|
|
|
|
if(responseTMP.indexOf('Invalid request') !== -1) {
|
|
alert('You did not do any action in VtigerCRM since a long time. The page needs to be reloaded, before you could use the Workflow Designer.');
|
|
window.location.reload();
|
|
return;
|
|
}
|
|
|
|
if(this._backgroundMode === false) {
|
|
RedooUtils('Workflow2').unblockUI();
|
|
}
|
|
|
|
WorkflowRunning = false;
|
|
|
|
var response;
|
|
try {
|
|
response = jQuery.parseJSON(responseTMP);
|
|
} catch(exp) {
|
|
console.log(exp);
|
|
console.log(responseTMP);
|
|
return;
|
|
}
|
|
|
|
if(response !== null && response["result"] == "ready") {
|
|
if(typeof this._callback == 'function') {
|
|
var retVal = this._callback.call(this, response);
|
|
|
|
if(typeof retVal != 'undefined' && retVal === false) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if(typeof response["redirection"] != "undefined" && typeof response["downloads"] != "undefined") {
|
|
this._handleDownloads(response);
|
|
this._handleRedirection(response);
|
|
return;
|
|
} else if(typeof response["redirection"] != "undefined") {
|
|
this._handleRedirection(response);
|
|
return;
|
|
} else if(typeof response["downloads"] != "undefined") {
|
|
this._handleDownloads(response);
|
|
return;
|
|
}
|
|
|
|
if(this._allowRedirection === true && this._backgroundMode === false && typeof response["prevent_reload"] === 'undefined') {
|
|
window.location.reload();
|
|
}
|
|
} else if(response !== null && response["result"] == "asktocontinue") {
|
|
jQuery('body').append('<style type="text/css">.bootbox.modal {z-index: 9999 !important;}</style>');
|
|
bootbox.confirm({
|
|
message: response['question'],
|
|
buttons: {
|
|
confirm: {
|
|
label: response['LBL_YES'],
|
|
className: 'btn-success'
|
|
},
|
|
cancel: {
|
|
label: response['LBL_NO'],
|
|
className: 'btn-danger'
|
|
}
|
|
},
|
|
callback: function (result) {
|
|
if(result === true) {
|
|
FlexUtils('Workflow2').hideModalBox();
|
|
var Execution = new WorkflowExecution();
|
|
Execution.setContinue(response['execid'], response['blockid']);
|
|
Execution.execute();
|
|
}
|
|
}
|
|
});
|
|
} else if(response !== null && response["result"] == "requestForm") {
|
|
this._requestValuesKey = response['fields_key'];
|
|
this._execId = response['execId'];
|
|
|
|
if(typeof RequestValuesForm2 == 'undefined') {
|
|
jQuery.getScript('modules/Workflow2/views/resources/js/RequestValuesForm2.js', jQuery.proxy(function() {
|
|
|
|
var requestForm = new RequestValuesForm2(response['fields_key'], response);
|
|
requestForm.setCallback(jQuery.proxy(this.submitRequestFields, this));
|
|
requestForm.show(response.html, response.script);
|
|
|
|
//response, this._requestValuesKey, response['request_message'], , response['stoppable'], response['pausable'], response['options']);
|
|
}, this));
|
|
} else {
|
|
var requestForm = new RequestValuesForm2(response['fields_key'], response);
|
|
requestForm.setCallback(jQuery.proxy(this.submitRequestFields, this));
|
|
requestForm.show(response.html, response.script);
|
|
}
|
|
} else if(response !== null && response["result"] == "reqvalues") {
|
|
this._requestValuesKey = response['fields_key'];
|
|
this._execId = response['execId'];
|
|
|
|
if(typeof RequestValuesForm == 'undefined') {
|
|
jQuery.getScript('modules/Workflow2/views/resources/js/RequestValuesForm.js', jQuery.proxy(function() {
|
|
var requestForm = new RequestValuesForm();
|
|
requestForm.show(response, this._requestValuesKey, response['request_message'], jQuery.proxy(this.submitRequestFields, this), response['stoppable'], response['pausable'], response['options']);
|
|
}, this));
|
|
} else {
|
|
var requestForm = new RequestValuesForm();
|
|
requestForm.show(response, this._requestValuesKey, response['request_message'], jQuery.proxy(this.submitRequestFields, this), response['stoppable'], response['pausable'], response['options']);
|
|
}
|
|
} else if(response !== null && response["result"] == "error") {
|
|
console.log('Errorcode: ' + response.errorcode);
|
|
app.showModalWindow('<div style="padding:10px 50px;text-align:center;">' + response.message + '</div>');
|
|
} else {
|
|
console.log(response);
|
|
}
|
|
};
|
|
|
|
this.submitRequestFields = function(key, values, value2, form) {
|
|
|
|
this._requestValues = {};
|
|
this._requestValuesKey = key;
|
|
|
|
var html = '';
|
|
jQuery.each(values, jQuery.proxy(function(index, value) {
|
|
if(value.name.substr(-2) != '[]') {
|
|
this._requestValues[value.name] = value.value;
|
|
} else {
|
|
var varName = value.name.substr(0, value.name.length - 2);
|
|
if(typeof this._requestValues[varName] === 'undefined') {
|
|
this._requestValues[varName] = [];
|
|
}
|
|
|
|
this._requestValues[varName].push(value.value);
|
|
}
|
|
}, this));
|
|
|
|
if(jQuery('[type="file"]', form).length > 0) {
|
|
var html = '<form action="#" method="POST" onsubmit="return false;">';
|
|
jQuery('input, select, button', form).attr('disabled', 'disabled');
|
|
jQuery('[type="file"]', form).removeAttr('disabled').each(jQuery.proxy(function(index, ele) {
|
|
var name = jQuery(ele).attr('name');
|
|
jQuery(ele).attr('name', 'fileUpload[' + name + ']');
|
|
|
|
this._requestValues[name] = jQuery(ele).data('filestoreid');
|
|
}, this));
|
|
html += '</form>';
|
|
this.executeWithForm(form);
|
|
return;
|
|
}
|
|
|
|
this.execute();
|
|
}
|
|
};
|
|
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyb250ZW5kLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJmcm9udGVuZC5qcyIsInNvdXJjZXNDb250ZW50IjpbXX0=
|
|
}())
|
|
/** HANDLER START **/
|
|
var WFDFrontendConfig = [];
|
|
var WFDLanguage = {"These Workflow requests some values":"These Workflow requests some values","Execute Workflow":"Execute Workflow","enter values later":"enter values later","stop Workflow":"stop Workflow","Executing Workflow ...":"Executing Workflow ..."};
|
|
/* Render take 0.01s */
|
|
|
|
/** MODULELANGUAGESTRINGS START **/
|
|
if(typeof FLEXMODLANGUAGE == "undefined") var FLEXMODLANGUAGE = {};
|
|
if(typeof FLEXLANG == "undefined") var FLEXLANG = function(key, module) { var lang = app.getUserLanguage(); if(typeof FLEXMODLANGUAGE[module] != "undefined" && typeof FLEXMODLANGUAGE[module][lang] != "undefined" && typeof FLEXMODLANGUAGE[module][lang][key] != "undefined") { return FLEXMODLANGUAGE[module][lang][key]; } return key; };
|
|
FLEXMODLANGUAGE["Workflow2"] = {"en_us":{"LBL_GET_KNOWN_ENVVARS":"Recognized environment variables","LBL_DUPLICATE_BLOCK":"duplicate Block","LBL_DELETE_BLOCK":"remove Block","LBL_CHANGE_BLOCKCOLOR":"change color","LBL_REMOVE_BLOCKCOLOR":"remove color","HEAD_USAGE_OF_THIS_CONNECTION":"Usage of this path","LBL_DATE":"Date","TXT_CHOOSE_VALID_FIELD":"choose a field","LBL_MANAGE_SIDEBARTOOGLE":"Workflow Designer process your input","LBL_CREATE_TYPE":"create new block manually","LBL_SAVED_SUCCESSFULLY":"Successfully saved","page":"Page","select all of this type":"Select this type","LBL_PASTE_BLOCK":"paste blocks","LBL_COPY_BLOCK":"copy blocks","Reset value":"Reset value","Empty field":"Empty field","Reference Field":"Reference Field","Available fields":"Available fields","Quantity":"Quantity","Unit Price":"Unit Price","Product Description":"Description","Product":"Product","Export Blocks by Text":"Export Blocks by Text","Import Blocks by Text":"Import Blocks by Text","Expression-Errors found":"Expression-Errors found","Name of new Folder?":"Name of new Folder?","Filter Workflows":"Filter Workflows","Please wait":"Please wait","WF_DELETE_CONFIRM":"Please confirm to delete the Workflow?\n\nRunning processes will be stopped!"},"ru_ru":{"LBL_GET_KNOWN_ENVVARS":"\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f","LBL_DUPLICATE_BLOCK":"\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a","LBL_DELETE_BLOCK":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a","LBL_CHANGE_BLOCKCOLOR":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442","LBL_REMOVE_BLOCKCOLOR":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442","HEAD_USAGE_OF_THIS_CONNECTION":"\u041f\u0443\u0442\u044c","LBL_DATE":"\u0414\u0430\u0442\u0430","TXT_CHOOSE_VALID_FIELD":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435","LBL_MANAGE_SIDEBARTOOGLE":"\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435","LBL_CREATE_TYPE":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e","LBL_SAVED_SUCCESSFULLY":"\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e","page":"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430","select all of this type":"\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430","LBL_PASTE_BLOCK":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438","LBL_COPY_BLOCK":"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438","Reset value":"\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435","Empty field":"\u041f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435","Reference Field":"\u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u043e\u043b\u0435","Available fields":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e\u043b\u044f","Quantity":"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e","Unit Price":"\u0426\u0435\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u044b","Product Description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","Product":"\u0422\u043e\u0432\u0430\u0440","Export Blocks by Text":"\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442","Import Blocks by Text":"\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0430","Expression-Errors found":"\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445","Name of new Folder?":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438","Filter Workflows":"\u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0411\u0438\u0437\u043d\u0435\u0441-\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b","Please wait":"Please wait","WF_DELETE_CONFIRM":"\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441?\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b."}};
|
|
/** MODULELANGUAGESTRINGS END **/ |