Files
crm.clientright.ru/layouts/v7/modules/ModuleBuilder/resources/ModuleBuilderView.js

713 lines
22 KiB
JavaScript
Raw Normal View History

/***********************************************************************************************
** The contents of this file are subject to the Vtiger Module-Builder License Version 1.3
* ( "License" ); You may not use this file except in compliance with the License
* The Original Code is: Technokrafts Labs Pvt Ltd
* The Initial Developer of the Original Code is Technokrafts Labs Pvt Ltd.
* Portions created by Technokrafts Labs Pvt Ltd are Copyright ( C ) Technokrafts Labs Pvt Ltd.
* All Rights Reserved.
**
*************************************************************************************************/
jQuery.Class("ModuleBuilder_ModuleBuilderView_Js",{
/**
* Variable to store updated Block Sequence
*/
updatedBlockSequence : {},
/**
* Variable to store the reactivated Field List
*/
reactiveFieldsList : [],
/**
* Variable to store the updated related List
*/
updatedRelatedList : {'updated' : [], 'deleted' : []},
/**
* Variable to store the removed modules List
*/
removeModulesArray : false,
/**
* Variable to store the inactive field List
*/
inActiveFieldsList : false,
/**
* Variable to store the updated block field List
*/
updatedBlockFieldsList : [],
/**
* Variable to store the updated block List
*/
updatedBlocksList : [],
/**
* Variable to store the block names
*/
blockNamesList : [],
/**
* Variable to store the session token for current view
*/
token : false,
/**
* Function to get the session token for current view
*/
getToken : function() {
var thisInstance = this;
if(thisInstance.token == false)
{
var container = jQuery('#editViewContainer');
var f1 = jQuery('#tks_modulevalidate');
thisInstance.token = f1.find('#token').val();
//thisInstance.token = container.find('#token').val();
}
return thisInstance.token;
},
/**
* Function to set the removed modules array used in related list
*/
setRemovedModulesList : function() {
var thisInstance = this;
var relatedList = jQuery('#relatedTabOrder');
var container = relatedList.find('.relatedTabModulesList');
thisInstance.removeModulesArray = JSON.parse(container.find('.RemovedModulesListArray').val());
},
registerModuleBuildInitializeEvent : function(){
var thisInstance = this;
var contents = jQuery('.layoutEditorContainer');
jQuery('#nextStep').click(function(e)
{
var f1 = jQuery('#tks_modulevalidate');
var mod = f1.find('#tks_modulename');
var lbl = f1.find('#tks_modulelabel');
var prnt = f1.find('#tks_parent');
if( mod.val() == '')
{
app.helper.showErrorNotification({message :app.vtranslate('JS_ENTER_MODULE_NAME')});
mod.focus();
return false;
}
else if( !mod.val().match(/^[a-zA-Z]+$/) )
{
app.helper.showErrorNotification({message :app.vtranslate('JS_ENTER_VALID_MODULE_NAME')});
mod.focus();
return false;
}
else if( lbl.val() == '' )
{
app.helper.showErrorNotification({message :app.vtranslate('JS_ENTER_MODULE_LABLE')});
lbl.focus();
return false;
}
else if( !lbl.val().match(/^[a-zA-Z\s]+$/) )
{
app.helper.showErrorNotification({message :app.vtranslate('JS_ENTER_VALID_MODULE_LABLE')});
lbl.focus();
return false;
}
else if( prnt.val() == '' )
{
app.helper.showErrorNotification({message :app.vtranslate('JS_SELECT_PARENT_MODULE')});
prnt.focus();
return false;
}
else
{
/*var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'message' : app.vtranslate('JS_PLEASE_WAIT_MODULE_INITIALIZE'),
'blockInfo' : {
'enabled' : true
}
});
var builddata = f1.serializeFormData();
builddata['mode'] = 'initMB';
builddata['action'] = 'InitModuleBuilder';*/
//var form = jQuery('#tks_modulevalidate');
f1.submit();
}
/*AppConnector.request(builddata).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
var params = {};
if(data['result']['init'] == true) {
contents.find('#saveModule').removeClass('hide');
/* contents.find('#layoutEditorContainer').removeClass('hide');
contents.find('#download').addClass('hide');
contents.find('#edit_module').addClass('hide');
contents.find('#import').addClass('hide');
contents.find('#nextStep').addClass('hide');
contents.find('.entityField').removeClass('hide');
var dropdown = contents.find("#tks_entity");
//app.destroyChosenElement(dropdown)
dropdown.addClass('chzn-select');
app.helper.showSuccessNotification({message: app.vtranslate('JS_PLEASE_MODULE_INITIALIZE')});
} else {
contents.find('#saveModule').addClass('hide');
contents.find('#download').addClass('hide');
contents.find('#edit_module').addClass('hide');
contents.find('#import').addClass('hide');
ontents.find('#layoutEditorContainer').addClass('hide');
contents.find('#nextStep').removeClass('hide');
contents.find('.entityField').add('hide');
params['text'] = data['result']['status'];
params['type'] = 'error';
}
//Settings_Vtiger_Index_Js.showMessage(params);
},
function(error,err){
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
}
)*/
});
},
/**
* Function to trigger save module event
*/
registerModuleBuildSubmitEvent : function(){
var thisInstance = this;
jQuery('body').on('submit','#tks_moduleentityvalidate',function(e){
var form = jQuery(e.currentTarget);
thisInstance.buildModuleEvent(form);
e.preventDefault();
});
},
/**
* Function to get the sequence and attach while building the module
*/
getSequence : function(){
var thisInstance = this;
var seq = {};
var contents = jQuery('#layoutEditorContainer').find('.contents');
contents.find('.blockSortable').each(function (index, domElement) {
var blockTable = jQuery(domElement);
var blockId = blockTable.data('blockId');
var blockLabel = blockTable.find('.blockLabel').text();
var blockLabels = blockLabel.trim();
seq[index] = blockLabels;
});
seq = JSON.stringify(seq);
return seq;
},
/**
* Function to build the module on server side
*/
buildModuleEvent : function(form){
var thisInstance = this;
jQuery('#tkssequence').val(thisInstance.getSequence());
var layout = jQuery('#layoutEditorContainer');
var saveButton = layout.find('.download');
//var editButton = layout.find('.edit');
var importBtn = layout.find('.import');
var contents = jQuery('#layoutEditorContainer').find('.contents');
var f1 = jQuery('.tks_modulevalidate');
var mod = f1.find('#tks_modulename');
var lbl = f1.find('#tks_modulelabel');
var entity = f1.find('#tks_entity');
var blockval = thisInstance.emptyBlockValidation();
if(blockval == false)
{
var params = {};
params['message'] = app.vtranslate('JS_EMPTY_BLOCK_FIELD');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showErrorNotification(params);
}
else if( blockval != '##Passed##')
{
var params = {};
params['message'] = app.vtranslate('JS_BLOCK_EMPTY1')+blockval+app.vtranslate('JS_BLOCK_EMPTY2');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showErrorNotification(params);
}
else if(jQuery('.saveFieldSequence').is(':visible'))
{
var params = {};
params['message'] = app.vtranslate('JS_SEQUENCE_FIRST');
params['type'] = 'error';
app.helper.showErrorNotification(params);
}
else
{
var message = app.vtranslate('JS_ARE_YOU_SURE');
app.helper.showConfirmationBox({'message' : message}).then(
function(e) {
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'message' : app.vtranslate('JS_PLEASE_WAIT_MODULE_SAVE'),
'blockInfo' : {
'enabled' : true
}
});
var builddata = form.serializeFormData();
builddata['mode'] = 'saveModule';
builddata['action'] = 'BuildModule';
builddata['tabid']= jQuery('#tabid').val();
var checkedItems = jQuery('.relatedlists').find('input[type="checkbox"]:checked') //...
jQuery.each(checkedItems,function(index,domElement){
var checkeditems = jQuery(domElement);
builddata[checkeditems.attr('name')] = checkeditems.val();
});
AppConnector.request(builddata).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
var params = {};
if(data['result']['saved'] == 'success') {
params['message'] = app.vtranslate('JS_SAVE_MODULE_SUCCESS');
params['type'] = 'success';
jQuery('#tabid').val(data['result']['tabid']);
app.helper.showSuccessNotification(params);
saveButton.removeClass('hide');
//editButton.removeClass('hide');
importBtn.removeClass('hide');
thisInstance.deleteFolderStrucure();
} else {
saveButton.addClass('hide');
params['message'] = data['result']['status'];
params['type'] = 'error';
app.helper.showErrorNotification(params);
}
//Settings_Vtiger_Index_Js.showMessage(params);
},
function(error,err){
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
}
)
},
function(error, err){}
);
}
},
/**
* Function to check if any block is empty if yes show validation
*/
emptyBlockValidation : function() {
var thisInstance = this;
var contents = jQuery.find('.editFieldsTable');
var status = '##Passed##';
jQuery.each(contents,function(index,domElement){
var row = jQuery(domElement);
var check = row.find('[name="sortable1"]').text();
var homestr ='Mandatory';
if( check.indexOf(homestr) > -1)
{
return status;
}
else
{
if( !row.hasClass('hide') )
{
status = row.find('.blockLabel').text();
}
}
});
if(contents.length == 0)
{
return false;
}
return status;
},
/**
* Function to delete the flder structure on the server
*/
deleteFolderStrucure : function() {
var thisInstance = this;
var layout = jQuery('#editViewContainer');
var srcmodule = layout.find('#tks_modulename');
var aDeferred = jQuery.Deferred();
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['action'] = 'DeleteDir';
params['mode'] = 'deletefolder';
params['srcModule'] = jQuery('#tks_modulename').val();
params['token'] = thisInstance.getToken();
AppConnector.request(params).then(
function(data) {
aDeferred.resolve(data);
},
function(error) {
aDeferred.reject();
}
);
return aDeferred.promise();
},
registerModuleBuildDownloadEvent : function() {
var thisInstance = this;
jQuery('.download').on('click',function(e){
thisInstance.checkForDownload();
});
},
/**
* Function to check zip before download
*/
checkForDownload : function() {
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'message' : app.vtranslate('JS_PRECHECK_DOWNLOAD'),
'blockInfo' : {
'enabled' : true
}
});
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['action'] = 'DeleteDir';
params['mode'] = 'checkZip';
params['srcModule'] = jQuery('#tks_modulename').val();
params['token'] = thisInstance.getToken();
AppConnector.request(params).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
aDeferred.resolve(data);
if(data['result']['exist'] == 'true')
{
window.location.href = 'index.php?module='
+app.getModuleName()+'&parent='+app.getParentModuleName()
+'&action=DownloadZip&mode=downloadModuleZip&srcModule='
+jQuery('#tks_modulename').val();
}
else
{
params['message'] = app.vtranslate('JS_RE_SAVE');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showSuccessNotification(params);
}
},
function(error) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
params['message'] = app.vtranslate('JS_SOMETHING_WENT_WRONG');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showErrorNotification(params);
aDeferred.reject();
}
);
return aDeferred.promise();
},
registerModuleBuildImportEvent : function() {
var thisInstance = this;
jQuery('.import').on('click',function(e){
thisInstance.checkForImport();
});
},
/**
* Function to check zip before import
*/
checkForImport : function() {
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'message' : app.vtranslate('JS_PRECHECK_IMPORT'),
'blockInfo' : {
'enabled' : true
}
});
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['action'] = 'DeleteDir';
params['mode'] = 'checkZip';
params['srcModule'] = jQuery('#tks_modulename').val();
params['token'] = thisInstance.getToken();
AppConnector.request(params).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
aDeferred.resolve(data);
if(data['result']['exist'] == 'true')
{
/*window.location.href = 'index.php?module='
+app.getModuleName()+'&parent='+app.getParentModuleName()
+'&view=ImportZip&srcModule='
+jQuery('#tks_modulename').val();*/
window.location.href = 'index.php?module=ModuleManager&parent=Settings&view=ModuleImport&mode=importUserModuleStep1';
jQuery('#moduleZip').val('C:\fakepath\dateyourmate.sql.zip');
}
else
{
params['message'] = app.vtranslate('JS_RE_SAVE1');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showSuccessNotification(params);
}
},
function(error) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
params['message'] = app.vtranslate('JS_SOMETHING_WENT_WRONG');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showErrorNotification(params);
aDeferred.reject();
}
);
return aDeferred.promise();
},
/**
* Function to attach related list field on module save
*/
registerRelatedListStringify : function(){
var thisInstance = this;
contents = jQuery('.relblock');
var params = {};
jQuery.each(contents,function(index,domElement){
var row = jQuery(domElement);
var mod = row.find('.relcheck');
var status = mod.is(':checked');
if(status)
{
var selrel = 0; var addrel = 0;
if(row.find('.relsel').is(':checked'))
selrel = 1;
if(row.find('.reladd').is(':checked'))
addrel = 1;
params[mod.val()] = selrel+':'+addrel;
}
});
return params;
},
/**
* Function for related list events
*/
registerRelatedListEvent : function(){
var thisInstance = this;
contents = jQuery('#layoutEditorContainer').find('.relatedListTab');
relatedContainer = contents.find('.relblock');
relatedContainer.find('.relcheck').change(function(e) {
var currentTarget = jQuery(e.currentTarget);
var row = currentTarget.closest('tr');
var selectcheck = row.find('.relsel');
var addcheck = row.find('.reladd');
var status = jQuery(e.currentTarget).is(':checked');
if(status){
selectcheck.removeAttr( "disabled" );
addcheck.removeAttr( "disabled" );
}else{
selectcheck.prop('checked', false);
addcheck.prop('checked', false);
selectcheck.attr( 'disabled' ,'disabled');
addcheck.attr( 'disabled', 'disabled' );
}
});
},
/**
* Function to register the click event for related modules list tab
*/
relatedModulesTabClickEvent : function() {
var thisInstance = this;
var contents = jQuery('#layoutEditorContainer').find('.contents');
var relatedContainer = contents.find('#relatedTabOrder');
var relatedTab = contents.find('.relatedListTab');
relatedTab.click(function() {
var checkedItems = jQuery('.relblock').find('input[type="checkbox"]:checked') //...
jQuery.each(checkedItems,function(index,domElement){
var checkeditems = jQuery(domElement);
var currentTarget = contents.find('.relatedListTab');
var row = currentTarget.closest('tr');
var selectcheck = row.find('.relsel');
var addcheck = row.find('.reladd');
var status = row.find('input[type="checkbox"]').is(':checked');
if(status){
selectcheck.removeAttr( "disabled" );
addcheck.removeAttr( "disabled" );
}else{
selectcheck.prop('checked', false);
addcheck.prop('checked', false);
selectcheck.attr( 'disabled' ,'disabled');
addcheck.attr( 'disabled', 'disabled' );
}
//builddata[checkeditems.attr('name')] = checkeditems.val();
});
if(relatedContainer.find('.relatedTabModulesList').length > 0) {
} else {
//thisInstance.showRelatedTabModulesList(relatedContainer);
}
});
},
setSession: function()
{
var progressIndicatorElement = jQuery.progressIndicator({
'position' : 'html',
'message' : app.vtranslate('JS_PLEASE_MODULE_INITIALIZE'),
'blockInfo' : {
'enabled' : true
}
});
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var url = document.URL;
var token = thisInstance.getUrlParameters("token", url, true);
if(token !='')
{
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['action'] = 'InitModuleBuilder';
params['mode'] = 'setSession';
params['srcModule'] = jQuery('#tks_modulename').val();
params['token'] = token;
AppConnector.request(params).then(
function(data) {
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
aDeferred.resolve(data);
if(data['result']['exist'] == 'true')
{
}
else
{
}
},
function(error)
{
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
params['message'] = app.vtranslate('JS_SOMETHING_WENT_WRONG');
params['type'] = 'error';
//Settings_Vtiger_Index_Js.showMessage(params);
app.helper.showErrorNotification(params);
aDeferred.reject();
}
);
}
else
{
progressIndicatorElement.progressIndicator({'mode' : 'hide'});
}
return aDeferred.promise();
},
getUrlParameters : function(parameter, staticURL, decode) {
/*
Function: getUrlParameters
Description: Get the value of URL parameters either from
current URL or static URL
*/
var currLocation = (staticURL.length)? staticURL : window.location.search,
parArr = currLocation.split("?")[1].split("&"),
returnBool = true;
for(var i = 0; i < parArr.length; i++){
parr = parArr[i].split("=");
if(parr[0] == parameter){
return (decode) ? decodeURIComponent(parr[1]) : parr[1];
returnBool = true;
}else{
returnBool = false;
}
}
if(!returnBool) return false;
},
/**
* register events for layout editor
*/
registerEvents : function() {
var thisInstance = this;
thisInstance.registerModuleBuildInitializeEvent();
thisInstance.registerModuleBuildSubmitEvent();
thisInstance.registerModuleBuildDownloadEvent();
thisInstance.registerModuleBuildImportEvent();
thisInstance.registerRelatedListEvent();
thisInstance.relatedModulesTabClickEvent();
thisInstance.setSession();
jQuery("[rel='tooltip']").tooltip({placement: 'right', 'container': 'body'});
/*thisInstance.registerBlockEvents();
thisInstance.registerFieldEvents();
thisInstance.setInactiveFieldsList();
thisInstance.registerAddCustomBlockEvent();
thisInstance.registerFieldSequenceSaveClick();
thisInstance.relatedModulesTabClickEvent();
thisInstance.registerModulesChangeEvent();
thisInstance.registerModuleBuildDownloadEvent();
thisInstance.registerRelatedListEvent();
thisInstance.registerModuleNameAndLabelValidateEvent();
thisInstance.registerToolTipsEvent();
thisInstance.registerModuleBuildEditEvent();
thisInstance.registerModuleBuildImportEvent();*/
}
});
jQuery(document).ready(function() {
var instance = new ModuleBuilder_ModuleBuilderView_Js();
instance.registerEvents()
});