instapage_cms_plugin-8.x-3.34/core/knockout/view_models/InstapageCmsPluginSettingsModel.js
core/knockout/view_models/InstapageCmsPluginSettingsModel.js
/* globals ko, instapageKO, iAjax, iLang, masterModel, INSTAPAGE_AJAXURL, download */
const InstapageCmsPluginSettingsModel = function InstapageCmsPluginSettingsModel(data) {
var self = this;
self.email = (data && data.user_name)
? instapageKO.observable(decodeURIComponent(data.user_name))
: instapageKO.observable();
self.userToken = (data && data.plugin_hash) ? instapageKO.observable(data.plugin_hash) : instapageKO.observable();
self.password = instapageKO.observable();
self.clearLog = instapageKO.observable();
self.tokenToAdd = instapageKO.observable('');
self.isTokenToAddValid = instapageKO.observable(true);
self.config = (data && data.config) ? new PluginConfig(data.config) : new PluginConfig();
self.isLoginAndPasswordValid = instapageKO.observable(true);
self.connectedTokens = instapageKO.observableArray();
self.hideConnectedTokens = instapageKO.observable(true);
self.metadata = (data && data.metadata) ? JSON.parse(data.metadata) : {};
self.supportLegacy = (typeof self.metadata.supportLegacy !== 'undefined')
? instapageKO.observable(self.metadata.supportLegacy)
: instapageKO.observable(true);
self.lpAjaxLoader = (typeof self.metadata.lpAjaxLoader !== 'undefined')
? instapageKO.observable(self.metadata.lpAjaxLoader)
: instapageKO.observable(false);
self.loginUser = function loginUser() {
let post = {
action: 'loginUser',
data: {email: encodeURIComponent(self.email()), password: encodeURIComponent(self.password())},
};
iAjax.post(INSTAPAGE_AJAXURL, post, function loginUserCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK') {
self.email(response.data.email);
self.userToken(response.data.usertoken);
self.saveConfig(iLang.get('USER_LOGGED_IN'), function getAccountBoundSubAccountsWrapper() {
post = {action: 'getAccountBoundSubAccounts'};
iAjax.post(INSTAPAGE_AJAXURL, post, function getAccountBoundSubAccountsCallback(loginResponseJson) {
var loginResponse = JSON.parse(loginResponseJson);
if (loginResponse.status === 'OK' && loginResponse.data) {
var listItems = [{
id: 0,
name: iLang.get('ALL')
}];
listItems = listItems.concat(loginResponse.data);
listItems.forEach(function addCheckedAttribute(element) {
element.checked = instapageKO.observable(false);
});
self.connectedTokens(listItems);
self.hideConnectedTokens(false);
}
});
});
self.isLoginAndPasswordValid(true);
} else {
var message = response.message ? response.message : iLang.get('EMAIL_OR_PASSWORD_INCORRECT');
self.isLoginAndPasswordValid(false);
masterModel.messagesModel.addMessage(message, response.status);
}
});
};
self.disconnectAndLogout = function disconnectAndLogout() {
self.disconnectAccountBoundSubaccounts(self.logoutUser, self.logoutUser);
};
self.logoutUser = function logoutUser() {
self.email('');
self.userToken('');
self.password('');
self.saveConfig(iLang.get('USER_LOGGED_OUT'));
self.hideConnectedTokens(true);
};
self.getConfig = function getConfig() {
return {
crossOrigin: self.config.crossOrigin(),
diagnostics: self.config.diagnostics(),
customParams: self.config.customParams(),
ssl: self.config.ssl(),
};
};
self.addToken = function addToken() {
if (self.tokenToAdd.isBusy()) {
return;
}
self.tokenToAdd.setBusy(true);
if (self.tokenToAdd) {
var newToken = new Token(self.tokenToAdd());
self.validateToken(
newToken,
function validationOnSuccess() {
self.connectSubAccounts([newToken.value()]);
self.config.tokens.push(newToken);
self.tokenToAdd('');
self.isTokenToAddValid(true);
self.saveConfig(false);
self.tokenToAdd.setBusy(false);
},
function validationOnFailure() {
self.isTokenToAddValid(false);
self.tokenToAdd.setBusy(false);
}
);
}
};
self.removeToken = function removeToken(token) {
if (token.valid() > 0) {
self.disconnectSubAccounts([token.value()]);
}
self.config.tokens.remove(token);
self.saveConfig(false);
};
self.saveConfig = function saveConfig(message, onSuccessFunction) {
var configObj = instapageKO.toJS(self.config);
var metadataObj = instapageKO.toJS(self.metadata);
var email = (typeof self.email() !== 'undefined') ? self.email() : '';
const post = {
action: 'updateOptions',
data: {
config: configObj,
metadata: metadataObj,
userName: encodeURIComponent(email),
userToken: self.userToken(),
},
};
iAjax.post(INSTAPAGE_AJAXURL, post, function saveConfigCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK') {
if (typeof message === 'string') {
masterModel.messagesModel.addMessage(message, response.status);
} else if (message !== false) {
masterModel.messagesModel.addMessage(response.message, response.status);
}
if (typeof onSuccessFunction === 'function') {
onSuccessFunction();
}
} else {
masterModel.messagesModel.addMessage(response.message, response.status);
}
masterModel.updateApiTokens();
});
};
self.migrateDeprecatedData = function migrateDeprecatedData() {
var post = {action: 'migrateDeprecatedData'};
iAjax.post(INSTAPAGE_AJAXURL, post, function migrateDeprecatedDataCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK' && response.message) {
masterModel.messagesModel.addMessage(response.message, response.status);
} else {
masterModel.messagesModel.addMessage(iLang.get('NO_DEPRECATED_PAGES_MIGRATED'));
}
});
};
self.clearLog = function clearLog() {
iAjax.post(INSTAPAGE_AJAXURL, {action: 'clearLog'}, function clearLogCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
masterModel.messagesModel.addMessage(response.message, response.status);
});
};
self.downloadLog = function downloadLog() {
iAjax.post(INSTAPAGE_AJAXURL, {action: 'getLog'}, function getLogHTMLCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK' && response.data) {
var date = new Date();
var dateStr = date.getFullYear() +
('0' + (date.getMonth() + 1)).slice(-2) +
('0' + date.getDate()).slice(-2) + '-' +
('0' + date.getHours()).slice(-2) +
('0' + date.getMinutes()).slice(-2) +
('0' + date.getSeconds()).slice(-2);
var filename = response.sitename + '-instapage-diagnostics-' + dateStr + '.html';
download( response.data, filename, 'text/html' );
} else {
masterModel.messagesModel.addMessage(response.message, response.status);
}
});
};
self.validateToken = function validateToken(token, onSuccessFunction, onFailureFunction) {
if (self.config.tokens().find(
function checkIfTokenExists(item) {
return (item !== token && item.value().trim() === token.value().trim());
})
) {
token.valid(-1);
masterModel.messagesModel.addMessage(iLang.get('TOKEN_ALREADY_IN_USE'), 'error' );
if (typeof onFailureFunction === 'function') {
onFailureFunction();
}
return;
}
var post = {action: 'validateToken', data: {token: token.value()}};
iAjax.post(INSTAPAGE_AJAXURL, post, function saveConfigCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK' && response.valid === true) {
token.valid(1);
token.workspaceId(response.workspaceId);
token.workspaceName(response.workspaceName);
if (typeof onSuccessFunction === 'function') {
onSuccessFunction();
}
} else {
token.valid(-1);
if (typeof onFailureFunction === 'function') {
onFailureFunction();
}
}
});
};
self.validateAllTokens = function validateAllTokens() {
self.config.tokens().forEach( function validateAllTokensCallback(item) {
self.validateToken(item);
});
};
self.closeConnectionSection = function closeConnectionSection() {
self.hideConnectedTokens(true);
};
self.connectSubAccounts = function connectSubAccounts(tokens, onSuccessFunction) {
var post = {action: 'connectSubAccounts', data: {tokens: tokens}};
iAjax.post(INSTAPAGE_AJAXURL, post, function connectSelectedSubAccountCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK') {
masterModel.messagesModel.addMessage(response.message, response.status);
if (typeof onSuccessFunction === 'function') {
onSuccessFunction();
}
} else {
masterModel.messagesModel.addMessage(iLang.get('ERROR_WHILE_CONNECTING_SUBACCOUNTS'), 'error' );
}
});
};
self.disconnectSubAccounts = function disconnectSubAccounts(tokens, onSuccessFunction) {
var post = {action: 'disconnectSubAccounts', data: {tokens: tokens}};
iAjax.post(INSTAPAGE_AJAXURL, post, function disconnectSubAccountsCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK') {
masterModel.messagesModel.addMessage(response.message, response.status);
if (typeof onSuccessFunction === 'function') {
onSuccessFunction();
}
} else {
masterModel.messagesModel.addMessage(iLang.get('ERROR_WHILE_DISCONNECTING_SUBACCOUNTS'), 'error' );
}
});
};
self.disconnectAccountBoundSubaccounts = function disconnectAccountBoundSubaccounts(
onSuccessFunction,
onFailureFunction
) {
var post = {action: 'disconnectAccountBoundSubaccounts'};
iAjax.post(INSTAPAGE_AJAXURL, post, function disconnectAccountBoundSubaccountsCallback(responseJson) {
var response = masterModel.parseResponse(responseJson);
if (response.status === 'OK') {
masterModel.messagesModel.addMessage(response.message, response.status);
if (typeof onSuccessFunction === 'function') {
onSuccessFunction();
}
} else {
masterModel.messagesModel.addMessage(iLang.get('ERROR_WHILE_DISCONNECTING_SUBACCOUNTS'), 'error' );
if (typeof onFailureFunction === 'function') {
onFailureFunction();
}
}
});
};
self.connectSelectedSubAccounts = function connectSelectedSubAccounts() {
var subAccountToConnect = [];
self.connectedTokens().forEach(function gatherSubAccountToConnect(element) {
if (element.id !== 0 && element.checked()) {
this.push(element.accountkey);
}
}, subAccountToConnect);
self.connectSubAccounts(subAccountToConnect, function hideConnectedTokensWrapper() {
self.hideConnectedTokens(true);
});
};
self.toggleAllSubaccounts = function toggleAllSubaccounts(checkbox) {
if (checkbox.id === 0) {
var checkedValue = false;
if (checkbox.checked()) {
checkedValue = true;
}
self.connectedTokens().forEach(function toggleConnectedTokent(element) {
element.checked(checkedValue);
});
}
return true;
};
self.autoSaveConfig = function autoSaveConfig() {
self.saveConfig(false);
return true;
};
self.autoSaveMetadata = function autosaveMetadata() {
self.metadata.supportLegacy = self.supportLegacy();
self.saveConfig(false);
return true;
};
self.saveLpAjaxLoaderSetting = function saveLpAjaxLoaderSetting() {
self.metadata.lpAjaxLoader = self.lpAjaxLoader();
self.saveConfig(false);
return true;
}
};
const PluginConfig = function PluginConfig(data) {
var self = this;
self.crossOrigin = data ? instapageKO.observable(data.crossOrigin) : instapageKO.observable(false);
self.diagnostics = data ? instapageKO.observable(data.diagnostics) : instapageKO.observable(false);
self.customParams = data ? instapageKO.observable(data.customParams) : instapageKO.observable('');
self.ssl = data ? instapageKO.observable(data.ssl) : instapageKO.observable(false);
self.tokens = instapageKO.observableArray();
if ( data && data.tokens && Array.isArray(data.tokens) ) {
data.tokens.forEach( function prepareTokens(element) {
self.tokens.push(new Token(element.value, element.valid, element.workspaceName, element.workspaceId));
});
}
};
var Token = function Token(value, valid, workspaceName, workspaceId) {
var self = this;
self.value = instapageKO.observable(value);
self.valid = typeof valid !== 'undefined' ? instapageKO.observable(valid) : instapageKO.observable(0);
self.workspaceId = typeof workspaceId !== 'undefined' ? instapageKO.observable(workspaceId) : instapageKO.observable(null);
self.workspaceName = typeof workspaceName !== 'undefined' ? instapageKO.observable(workspaceName) : instapageKO.observable(null);
};
