pgadmin4/web/pgadmin/tools/restore/static/js/restore.js
2024-01-01 14:13:48 +05:30

174 lines
5.7 KiB
JavaScript

/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import { getNodeListByName } from '../../../../browser/static/js/node_ajax';
import getApiInstance from 'sources/api_instance';
import {retrieveAncestorOfTypeServer} from 'sources/tree/tree_utils';
import RestoreSchema, {getRestoreSaveOptSchema, getRestoreDisableOptionSchema, getRestoreMiscellaneousSchema, getRestoreTypeObjSchema, getRestoreSectionSchema} from './restore.ui';
import pgAdmin from 'sources/pgadmin';
define('tools.restore', [
'sources/gettext', 'sources/url_for', 'pgadmin.browser',
'tools/restore/static/js/menu_utils', 'sources/nodes/supported_database_node',
], function(
gettext, url_for, pgBrowser, menuUtils, supportedNodes
) {
// if module is already initialized, refer to that.
if (pgBrowser.Restore) {
return pgBrowser.Restore;
}
// Create an Object Restore of pgBrowser class
pgBrowser.Restore = {
init: function() {
if (this.initialized)
return;
this.initialized = true;
// Define the nodes on which the menus to be appear
let menus = [{
name: 'restore_object',
module: this,
applies: ['tools'],
callback: 'restoreObjects',
priority: 2,
label: gettext('Restore...'),
icon: 'fa fa-upload',
below: true,
enable: supportedNodes.enabled.bind(
null, pgBrowser.tree, menuUtils.restoreSupportedNodes
),
data: {
data_disabled: gettext('Please select any schema or table from the object explorer to Restore data.'),
},
}];
for (let sup_node_val of menuUtils.restoreSupportedNodes) {
menus.push({
name: 'restore_' + sup_node_val,
node: sup_node_val,
module: this,
applies: ['context'],
callback: 'restoreObjects',
priority: 2,
label: gettext('Restore...'),
enable: supportedNodes.enabled.bind(
null, pgBrowser.tree, menuUtils.restoreSupportedNodes
),
});
}
pgBrowser.add_menus(menus);
return this;
},
getUISchema: function(treeItem) {
let treeNodeInfo = pgBrowser.tree.getTreeNodeHierarchy(treeItem);
const selectedNode = pgBrowser.tree.selected();
let itemNodeData = pgBrowser.tree.findNodeByDomElement(selectedNode).getData();
return new RestoreSchema(
()=>getRestoreSectionSchema({selectedNodeType: itemNodeData._type}),
()=>getRestoreTypeObjSchema({selectedNodeType: itemNodeData._type}),
()=>getRestoreSaveOptSchema({nodeInfo: treeNodeInfo}),
()=>getRestoreDisableOptionSchema({nodeInfo: treeNodeInfo}),
()=>getRestoreMiscellaneousSchema({nodeInfo: treeNodeInfo}),
{
role: ()=>getNodeListByName('role', treeNodeInfo, itemNodeData)
},
treeNodeInfo,
pgBrowser
);
},
saveCallBack: function(data) {
if(data.errormsg) {
pgAdmin.Browser.notifier.alert(
gettext('Error'),
gettext(data.errormsg)
);
} else {
pgBrowser.BgProcessManager.startProcess(data.data.job_id, data.data.desc);
}
},
setExtraParameters: function(treeInfo, nodeData) {
let extraData = {};
extraData['database'] = treeInfo.database._label;
if('schema' in treeInfo) {
extraData['schemas'] = [treeInfo.schema._label];
}
if('table' in treeInfo) {
extraData['tables'] = [nodeData._label];
}
if('function' in treeInfo) {
extraData['functions'] = [nodeData._label];
}
extraData['save_btn_icon'] = 'upload';
return extraData;
},
url_for_utility_exists: function(id){
return url_for('restore.utility_exists', {
'sid': id,
});
},
restoreObjects: function(_action, treeItem) {
let that = this,
tree = pgBrowser.tree,
i = treeItem || tree.selected(),
data = i ? tree.itemData(i) : undefined,
treeNodeInfo = pgBrowser.tree.getTreeNodeHierarchy(treeItem);
const serverInformation = retrieveAncestorOfTypeServer(pgBrowser, treeItem, gettext('Restore Error')),
sid = serverInformation._type == 'database' ? serverInformation._pid : serverInformation._id,
api = getApiInstance(),
utility_exists_url = that.url_for_utility_exists(sid);
return api({
url: utility_exists_url,
method: 'GET'
}).then((res)=>{
if (!res.data.success) {
pgAdmin.Browser.notifier.alert(
gettext('Utility not found'),
gettext(res.data.errormsg)
);
return;
}
let schema = that.getUISchema(treeItem);
let urlShortcut = 'restore.create_job',
urlBase = url_for(urlShortcut, {
'sid': sid,
}),
extraData = that.setExtraParameters(treeNodeInfo, data);
let sqlHelpUrl = 'backup.html',
helpUrl = url_for('help.static', {
'filename': 'restore_dialog.html',
});
pgAdmin.Browser.Events.trigger('pgadmin:utility:show', treeItem,
gettext(`Restore (${pgBrowser.Nodes[data._type].label}: ${data.label})`),{
schema, extraData, urlBase, sqlHelpUrl, helpUrl, saveBtnName: gettext('Restore')
}, pgAdmin.Browser.stdW.md
);
}).catch(()=>{
pgAdmin.Browser.notifier.alert(
gettext('Utility not found'),
gettext('Failed to fetch Utility information')
);
});
},
};
return pgBrowser.Restore;
});