diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 3b7c57b..7e5758a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -99,6 +99,7 @@ class DatabaseView(PGChildNodeView): {'get': 'list', 'post': 'create'} ], 'nodes': [{'get': 'node'}, {'get': 'nodes'}], + 'get_databases': [{'get': 'get_databases'}, {'get': 'get_databases'}], 'sql': [{'get': 'sql'}], 'msql': [{'get': 'msql'}, {'get': 'msql'}], 'stats': [{'get': 'statistics'}, {'get': 'statistics'}], @@ -170,11 +171,12 @@ class DatabaseView(PGChildNodeView): status=200 ) - @check_precondition(action="nodes") - def nodes(self, gid, sid): + def get_nodes(self, gid, sid, show_system_templates=False): res = [] - last_system_oid = 0 if self.blueprint.show_system_objects else \ - (self.manager.db_info[self.manager.did])['datlastsysoid'] + last_system_oid = 0 if self.blueprint.show_system_objects or \ + show_system_templates else ( + self.manager.db_info[self.manager.did] + )['datlastsysoid'] SQL = render_template( "/".join([self.template_path, 'nodes.sql']), @@ -213,6 +215,19 @@ class DatabaseView(PGChildNodeView): ) ) + return res + + @check_precondition(action="nodes") + def nodes(self, gid, sid): + res = self.get_nodes(gid, sid) + return make_json_response( + data=res, + status=200 + ) + + @check_precondition(action="get_databases") + def get_databases(self, gid, sid): + res = self.get_nodes(gid, sid, True) return make_json_response( data=res, status=200 diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js index f9e75a2..f5cd6a9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/js/databases.js @@ -254,8 +254,26 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { id: 'template', label: '{{ _('Template') }}', editable: false, type: 'text', group: 'Definition', disabled: function(m) { return !m.isNew(); }, - control: 'node-list-by-name', node: 'database', cache_level: 'server', - select2: { allowClear: false } + control: 'node-list-by-name', url: 'get_databases', cache_level: 'server', + select2: { allowClear: false }, + transform: function(data, cell) { + var res = [], + control = cell || this, + label = control.model.get('name'); + + if (!control.model.isNew()) { + res.push({label: label, value: label}); + } + else { + if (data && _.isArray(data)) { + _.each(data, function(d) { + res.push({label: d.label, value: d.label, + image: 'pg-icon-database'}); + }) + } + } + return res; + } },{ id: 'spcname', label: '{{ _('Tablespace') }}', editable: false, type: 'text', group: 'Definition',