Your IP : 18.119.117.236
;(function() {
"use strict";
BX.namespace("BX.Landing");
var isPlainObject = BX.Landing.Utils.isPlainObject;
var isString = BX.Landing.Utils.isString;
/**
* Implements interface for works with backend.
* Implements singleton design pattern not use as Function constructor,
* use getInstance method for gets instance of this.
* @example BX.Landing.Backend.getInstance()
* @constructor
*/
BX.Landing.Backend = function()
{
this.ajaxController = "/bitrix/tools/landing/ajax.php";
};
/**
* Stores instance
* @type {BX.Landing.Backend}
*/
BX.Landing.Backend.instance = null;
/**
* Gets instance of BX.Landing.Backend
* @return {BX.Landing.Backend}
*/
BX.Landing.Backend.getInstance = function()
{
if (!BX.Landing.Backend.instance)
{
BX.Landing.Backend.instance = new BX.Landing.Backend();
}
return BX.Landing.Backend.instance;
};
BX.Landing.Backend.prototype = {
/**
* Executes action request
* @param {string} action - Backend action
* @param {object} [data]
* @param {object} [queryParams = {}]
* @param {object} [uploadParams = {}]
* @return {Promise.<Object, Object>}
*/
action: function(action, data, queryParams, uploadParams)
{
uploadParams = BX.type.isPlainObject(uploadParams) ? uploadParams : {};
queryParams = BX.type.isPlainObject(queryParams) ? queryParams : {};
BX.Landing.Utils.assign(queryParams, {site_id: this.getSiteId()});
var requestBody = {};
requestBody.sessid = BX.bitrix_sessid();
requestBody.action = action.replace("Landing\\Block", "Block");
requestBody.data = typeof data === "object" ? data : {};
requestBody.data.lid = (requestBody.data.lid || BX.Landing.Main.getInstance().id);
if ("action" in uploadParams)
{
requestBody.action = uploadParams.action;
}
if ("block" in uploadParams)
{
requestBody.data.block = uploadParams.block;
}
if ("lid" in uploadParams)
{
requestBody.data.lid = uploadParams.lid;
}
if ("id" in uploadParams)
{
requestBody.data.id = uploadParams.id;
}
var url = BX.util.add_url_param(this.ajaxController, BX.util.objectMerge({action: requestBody.action}, queryParams));
return new Promise(function(resolve, reject) {
BX.ajax({
method: "POST",
dataType: "json",
url: url,
data: requestBody,
onsuccess: function(data) {
if (!!data && data.type === "error")
{
reject(data);
}
else
{
resolve(data.result);
}
},
onfailure: function(error) {
reject(error);
}
});
})
.then(function(response) {
if (requestBody.action === "Block::updateNodes" ||
requestBody.action === "Block::removeCard" ||
requestBody.action === "Block::cloneCard" ||
requestBody.action === "Block::addCard")
{
BX.Landing.UI.Panel.StatusPanel.getInstance().update();
}
return response;
})
.catch(function(err) {
if (requestBody.action !== "Block::getById")
{
err = isString(err) ? {type: "error"} : err;
err.action = requestBody.action;
BX.Landing.ErrorManager.getInstance().add(err);
}
return Promise.reject();
});
},
/**
* Calls multiple actions
* @param {String} action
* @param {Object} data
* @param {Object} [queryParams]
* @return {Promise<any>}
*/
batch: function(action, data, queryParams)
{
queryParams = BX.type.isPlainObject(queryParams) ? queryParams : {};
BX.Landing.Utils.assign(queryParams, {site_id: data.siteId || this.getSiteId()});
var requestBody = {};
requestBody.sessid = BX.bitrix_sessid();
requestBody.action = action.replace("Landing\\Block", "Block");
requestBody.data = {};
requestBody.batch = typeof data === "object" ? data : {};
requestBody.data.lid = (requestBody.data.lid || BX.Landing.Main.getInstance().id);
var url = BX.util.add_url_param(this.ajaxController, BX.util.objectMerge({action: requestBody.action}, queryParams));
return new Promise(function(resolve, reject) {
BX.ajax({
method: "POST",
dataType: "json",
url: url,
data: requestBody,
onsuccess: function(data) {
if (!!data && data.type === "error")
{
reject(data);
}
else
{
resolve(data);
}
},
onfailure: function(error) {
reject(error);
}
});
})
.then(function(response) {
BX.Landing.UI.Panel.StatusPanel.getInstance().update();
return response;
})
.catch(function(err) {
if (requestBody.action !== "Block::getById")
{
err = isString(err) ? {type: "error"} : err;
err.action = requestBody.action;
BX.Landing.ErrorManager.getInstance().add(err);
}
return Promise.reject();
});
},
/**
* Gets current site id
* @return {Integer}
*/
getSiteId: function()
{
var siteId;
try {
siteId = BX.Landing.Main.getInstance().options.site_id;
} catch(err) {
siteId = -1;
}
return siteId;
},
upload: function(file, uploadParams)
{
var formData = new FormData();
var params = uploadParams || {};
var action = "Block::uploadFile";
formData.append("sessid", BX.bitrix_sessid());
formData.append("action", "Block::uploadFile");
formData.append("picture", file, file.name);
if ("block" in params)
{
formData.append("data[block]", params.block);
}
if ("lid" in params)
{
action = "Landing::uploadFile";
formData.append("data[lid]", params.lid);
formData.set("action", action);
}
if ("id" in params)
{
action = "Site::uploadFile";
formData.append("data[id]", params.id);
formData.set("action", action);
}
var url = BX.util.add_url_param(this.ajaxController, {
action: action,
site_id: this.getSiteId()
});
return new Promise(function(resolve, reject) {
var xhr = BX.ajax({
url: url,
method: "POST",
dataType: "json",
data: formData,
start: false,
preparePost: false,
onsuccess: function(response) {
if (!!response && response.type === "error")
{
reject(response);
}
else
{
resolve(response.result);
}
},
onfailure: function(error) {
reject(error);
}
});
xhr.send(formData);
})
.catch(function(err) {
err = isString(err) ? {type: "error"} : err;
err.action = "Block::uploadFile";
BX.Landing.ErrorManager.getInstance().add(err);
return Promise.reject(err);
});
},
/**
* Uploads image
* @param {HTMLFormElement} form
* @param {File} file
* @param {object} [params]
* @param {object} [uploadParams]
* @return {Promise<Object, Object>}
*/
uploadImage: function(form, file, params, uploadParams)
{
if (!form)
{
form = document.createElement('form');
}
uploadParams = isPlainObject(uploadParams) ? uploadParams : {};
var requestBody = {};
requestBody.sessid = BX.bitrix_sessid();
requestBody.action = "action" in uploadParams ? uploadParams.action : "Utils::uploadFile";
requestBody.picture = file;
requestBody.data = {};
requestBody.data.params = typeof params === "object" ? params : {};
if ("block" in uploadParams)
{
requestBody.data.block = uploadParams.block;
}
if ("lid" in uploadParams)
{
requestBody.data.lid = uploadParams.lid;
}
if ("id" in uploadParams)
{
requestBody.data.id = uploadParams.id;
}
var url = BX.util.add_url_param(this.ajaxController, {
action: requestBody.action,
site_id: this.getSiteId()
});
return new Promise(function(resolve, reject) {
BX.ajax.submitAjax(form, {
url: url,
method: "POST",
dataType: "json",
data: requestBody,
onsuccess: function(response) {
if (!!response && response.type === "error")
{
reject(response);
}
else
{
resolve(response.result);
}
},
onfailure: function(error) {
reject(error);
}
});
})
.catch(function(err) {
err = isString(err) ? {type: "error"} : err;
err.action = requestBody.action;
BX.Landing.ErrorManager.getInstance().add(err);
return Promise.reject();
});
}
};
})();