Improvement in the security tab for each of the nodes.

* Hide the security tab for the objects under the catalog schema.
  Patched by Surinder Kumar, vastly improved by me.

* Make the securtiy label across all the nodes, using the same backbone
  model across the nodes, and make changes in the backend code for the
  same.
pull/3/head
Ashesh Vashi 2016-05-29 15:19:34 +05:30
parent 100f075510
commit 7e51a8fd56
108 changed files with 913 additions and 1238 deletions

View File

@ -146,8 +146,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
model: OptionsModel, control: 'unique-col-collection', mode: ['edit', 'create'],
canAdd: true, canDelete: true, uniqueCol : ['fsrvoption'],
columns: ['fsrvoption','fsrvvalue']
},{
id: 'fsrvacl', label: 'Privileges', type: 'collection', group: '{{ _('Security') }}',
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'fsrvacl', label: 'Privileges', type: 'collection', group: 'security',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({privileges: ['U']}), control: 'unique-col-collection',
mode: ['edit', 'create'], canAdd: true, canDelete: true, uniqueCol : ['grantee']
},{

View File

@ -5,18 +5,19 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a Options model
var OptionsModel = pgAdmin.Browser.Node.Model.extend({
var OptionsModel = pgBrowser.Node.Model.extend({
defaults: {
fdwoption: undefined,
fdwvalue: undefined
},
// Defining schema for the Options model
schema: [
{id: 'fdwoption', label:'Options', type:'text', cellHeaderClasses:'width_percent_50', group: null, editable: true},
{id: 'fdwvalue', label:'Value', type: 'text', cellHeaderClasses:'width_percent_50', group:null, editable: true},
],
schema: [{
id: 'fdwoption', label: '{{ _('Option') }}', type:'text',
cellHeaderClasses:'width_percent_50', editable: true
},{
id: 'fdwvalue', label:'{{ _('Value') }}', type: 'text',
cellHeaderClasses:'width_percent_50', group:null, editable: true
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
* the browser for the respective control.
@ -38,8 +39,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's collection class for foreign data wrapper collection
if (!pgBrowser.Nodes['coll-foreign_data_wrapper']) {
var foreign_data_wrappers = pgAdmin.Browser.Nodes['coll-foreign_data_wrapper'] =
pgAdmin.Browser.Collection.extend({
var foreign_data_wrappers = pgBrowser.Nodes['coll-foreign_data_wrapper'] =
pgBrowser.Collection.extend({
node: 'foreign_data_wrapper',
label: '{{ _('Foreign Data Wrappers') }}',
type: 'coll-foreign_data_wrapper',
@ -49,7 +50,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node class for foreign data wrapper node
if (!pgBrowser.Nodes['foreign_data_wrapper']) {
pgAdmin.Browser.Nodes['foreign_data_wrapper'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['foreign_data_wrapper'] = pgBrowser.Node.extend({
parent_type: 'database',
type: 'foreign_data_wrapper',
sqlAlterHelp: 'sql-alterforeigndatawrapper.html',
@ -91,7 +92,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},
// Defining model for foreign data wrapper node
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
fdwowner: undefined,
@ -111,7 +112,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
this.set({'fdwowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
// Defining schema for the foreign data wrapper node
@ -148,36 +149,38 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
id: 'fdwvalue', label:'{{ _('Validator') }}', type: 'text', control: 'node-ajax-options',
group: '{{ _('Definition') }}', mode: ['edit', 'create', 'properties'], url:'get_validators'
},{
id: 'fdwacl', label: 'Privileges', type: 'collection', group: '{{ _('Security') }}',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({privileges: ['U']}), control: 'unique-col-collection',
mode: ['edit', 'create'], canAdd: true, canDelete: true, uniqueCol : ['grantee']
id: 'security', label: '{{ _("Security") }}', type: 'group'
},{
id: 'fdwacl', label: 'Privileges', type: 'collection',
group: 'security', mode: ['edit', 'create'], canAdd: true,
canDelete: true, uniqueCol : ['grantee'],
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['U']
}), control: 'unique-col-collection'
},{
id: 'acl', label: '{{ _('Privileges') }}', type: 'text',
group: '{{ _('Security') }}', mode: ['properties'], disabled: true
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
* the browser for the respective control.
*/
validate: function() {
var name = this.get('name');
if (_.isUndefined(name) || _.isNull(name) ||
String(name).replace(/^\s+|\s+$/g, '') == '') {
var msg = '{{ _('Name cannot be empty.') }}';
this.errorModel.set('name', msg);
return msg;
} else {
this.errorModel.unset('name');
}
return null;
}
],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
* the browser for the respective control.
*/
validate: function() {
var name = this.get('name');
if (_.isUndefined(name) || _.isNull(name) ||
String(name).replace(/^\s+|\s+$/g, '') == '') {
var msg = '{{ _('Name cannot be empty.') }}';
this.errorModel.set('name', msg);
return msg;
} else {
this.errorModel.unset('name');
}
return null;
}
})
});
});
}
return pgBrowser.Nodes['coll-foreign_data_wrapper'];
return pgBrowser.Nodes['foreign_data_wrapper'];
});

View File

@ -3,46 +3,10 @@ define(
'alertify', 'pgadmin.browser.collection', 'pgadmin.browser.server.privilege'],
function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a security model
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
security_label: null
},
// Define the schema for the Security Label
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
* the GUI for the respective control.
*/
validate: function() {
var errmsg = null;
if (_.isUndefined(this.get('security_label')) ||
_.isNull(this.get('security_label')) ||
String(this.get('security_label')).replace(/^\s+|\s+$/g, '') == '') {
errmsg = '{{ _('Please specify the value for all the security providers.')}}';
this.errorModel.set('security_label', errmsg);
return errmsg;
} else {
this.errorModel.unset('security_label');
}
return null;
}
});
// Extend the browser's collection class for languages collection
if (!pgBrowser.Nodes['coll-language']) {
var languages = pgAdmin.Browser.Nodes['coll-language'] =
pgAdmin.Browser.Collection.extend({
var languages = pgBrowser.Nodes['coll-language'] =
pgBrowser.Collection.extend({
node: 'language',
label: '{{ _('Languages') }}',
type: 'coll-language',
@ -52,7 +16,7 @@ define(
// Extend the browser's node class for language node
if (!pgBrowser.Nodes['language']) {
pgAdmin.Browser.Nodes['language'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['language'] = pgBrowser.Node.extend({
parent_type: 'database',
type: 'language',
sqlAlterHelp: 'sql-alterlanguage.html',
@ -70,7 +34,7 @@ define(
},
// Define the model for language node
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
lanowner: undefined,
@ -97,7 +61,7 @@ define(
id: 'description', label:'{{ _('Comment') }}', cell: 'string',
type: 'multiline'
},{
id: 'trusted', label:'{{ _('Trusted?') }}', type: 'switch',
id: 'trusted', label:'{{ _('Trusted?') }}', type: 'switch',
options: {
'onText': 'Yes', 'offText': 'No',
'onColor': 'success', 'offColor': 'primary',
@ -167,16 +131,18 @@ define(
}, disabled: function(m) {
return !(m.isNew());
}
},{
id: 'lanacl', label: '{{ _('Privileges') }}', type: 'collection', group: '{{ _('Security') }}',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({privileges: ['U']}), control: 'unique-col-collection',
mode: ['edit'], canAdd: true, canDelete: true, uniqueCol : ['grantee']
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'lanacl', label: '{{ _('Privileges') }}', type: 'collection',
group: 'security', control: 'unique-col-collection', mode: ['edit'],
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['U']
}), canAdd: true, canDelete: true, uniqueCol : ['grantee']
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit'],
min_version: 90200, canAdd: true,
canEdit: false, canDelete: true, control: 'unique-col-collection'
id: 'seclabels', label: '{{ _('Security Labels') }}', mode: ['edit'],
model: pgBrowser.SecLabelModel, editable: false,
type: 'collection', group: 'security', min_version: 90200,
canAdd: true, canEdit: false, canDelete: true,
control: 'unique-col-collection'
}
],
/* validate function is used to validate the input given by

View File

@ -319,7 +319,7 @@ class SchemaView(PGChildNodeView):
sec = re.search(r'([^=]+)=(.*$)', sec)
seclabels.append({
'provider': sec.group(1),
'security_label': sec.group(2)
'label': sec.group(2)
})
data['seclabels'] = seclabels

View File

@ -60,11 +60,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},{
id: 'description', label:'{{ _('Comment') }}', cell: 'string',
type: 'multiline', disabled: true
}
]
}]
})
});
});
}
return pgBrowser.Nodes['catalog_object_column'];

View File

@ -6,8 +6,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Define Domain Collection Node
if (!pgBrowser.Nodes['coll-domain']) {
var domains = pgAdmin.Browser.Nodes['coll-domain'] =
pgAdmin.Browser.Collection.extend({
var domains = pgBrowser.Nodes['coll-domain'] =
pgBrowser.Collection.extend({
node: 'domain',
label: '{{ _('Domains') }}',
type: 'coll-domain',
@ -15,45 +15,15 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
};
// Security Model
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
security_label: null
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null;
if (_.isUndefined(this.get('security_label')) ||
_.isNull(this.get('security_label')) ||
String(this.get('security_label')).replace(/^\s+|\s+$/g, '') == '') {
errmsg = '{{ _('Please specify the value for all the security providers.')}}';
this.errorModel.set('security_label', errmsg);
return errmsg;
} else {
this.errorModel.unset('security_label');
}
return null;
}
});
// Constraint Model
var ConstraintModel = pgAdmin.Browser.Node.Model.extend({
var ConstraintModel = pgBrowser.Node.Model.extend({
idAttribute: 'conoid',
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (!isNew) {
this.convalidated_default = this.get('convalidated')
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
conoid: undefined,
@ -107,7 +77,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Domain Node
if (!pgBrowser.Nodes['domain']) {
pgAdmin.Browser.Nodes['domain'] = pgBrowser.Node.extend({
pgBrowser.Nodes['domain'] = pgBrowser.Node.extend({
type: 'domain',
sqlAlterHelp: 'sql-alterdomain.html',
sqlCreateHelp: 'sql-createdomain.html',
@ -149,7 +119,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
// Domain Node Model
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -161,7 +131,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'owner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
name: undefined,
@ -293,17 +263,17 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
type: 'collection', group: '{{ _('Constraints') }}', mode: ['edit', 'create'],
model: ConstraintModel, canAdd: true, canDelete: true,
canEdit: false, columns: ['conname','consrc', 'convalidated']
},{
},
pgBrowser.SecurityGroupUnderSchema,
{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
model: pgBrowser.SecLabelModel, type: 'collection',
group: 'security', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: false, canDelete: true,
control: 'unique-col-collection', uniqueCol : ['provider']
}
],
validate: function() // Client Side Validation
{
}],
validate: function() { // Client Side Validation
var err = {},
errmsg,
seclabels = this.get('seclabels');

View File

@ -20,10 +20,10 @@ ALTER DOMAIN {{ conn|qtIdent(data.basensp, data.name) }} OWNER TO {{ conn|qtIden
COMMENT ON DOMAIN {{ conn|qtIdent(data.basensp, data.name) }}
IS '{{ data.description }}';{% endif -%}{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'DOMAIN', data.name, r.provider, r.security_label, data.basensp) }}{% endif -%}
{{ SECLABLE.SET(conn, 'DOMAIN', data.name, r.provider, r.label, data.basensp) }}{% endif -%}
{% endfor -%}
{% endif -%}

View File

@ -49,13 +49,13 @@ ALTER DOMAIN {{ conn|qtIdent(o_data.basensp, name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.label, o_data.basensp) }}
{% endfor -%}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.label, o_data.basensp) }}
{% endfor -%}
{% endif -%}{% if data.description %}

View File

@ -26,10 +26,10 @@ COMMENT ON DOMAIN {{ conn|qtIdent(data.basensp, data.name) }}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'DOMAIN', data.name, r.provider, r.security_label, data.basensp) }}{% endif -%}
{{ SECLABLE.SET(conn, 'DOMAIN', data.name, r.provider, r.label, data.basensp) }}{% endif -%}
{% endfor -%}
{% endif -%}

View File

@ -62,12 +62,12 @@ ALTER DOMAIN {{ conn|qtIdent(o_data.basensp, name) }}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'DOMAIN', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}{% if data.description %}

View File

@ -4,8 +4,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-foreign-table']) {
var foreigntable = pgAdmin.Browser.Nodes['coll-foreign-table'] =
pgAdmin.Browser.Collection.extend({
var foreigntable = pgBrowser.Nodes['coll-foreign-table'] =
pgBrowser.Collection.extend({
node: 'foreign-table',
label: '{{ _('Foreign Tables') }}',
type: 'coll-foreign-table',
@ -13,33 +13,6 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
};
// Security Model
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
label: null
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null,
data = this.toJSON();
if (_.isUndefined(data.security_label) ||
_.isNull(data.security_label) ||
String(data.security_label).replace(/^\s+|\s+$/g, '') == '') {
return _("Please specify the value for all the security providers.");
}
return null;
}
});
// Integer Cell for Columns Length and Precision
var IntegerDepCell = Backgrid.IntegerCell.extend({
initialize: function() {
@ -64,7 +37,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Columns Model
var ColumnsModel = pgAdmin.Browser.Node.Model.extend({
var ColumnsModel = pgBrowser.Node.Model.extend({
idAttribute: 'attnum',
defaults: {
attname: undefined,
@ -395,7 +368,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
cache_level = this.field.get('cache_level') || node.type,
cache_node = this.field.get('cache_node');
cache_node = (cache_node && pgAdmin.Browser.Nodes['cache_node']) || node;
cache_node = (cache_node && pgBrowser.Nodes['cache_node']) || node;
m.trigger('pgadmin:view:fetching', m, self.field);
data = {attrelid: table_id}
@ -431,14 +404,14 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Constraints Model
var ConstraintModel = pgAdmin.Browser.Node.Model.extend({
var ConstraintModel = pgBrowser.Node.Model.extend({
idAttribute: 'conoid',
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (!isNew) {
this.convalidated_default = this.get('convalidated')
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
conoid: undefined,
@ -505,7 +478,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Options Model
var OptionsModel = pgAdmin.Browser.Node.Model.extend({
var OptionsModel = pgBrowser.Node.Model.extend({
defaults: {
option: undefined,
value: undefined
@ -526,7 +499,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['foreign-table']) {
pgAdmin.Browser.Nodes['foreign-table'] = pgBrowser.Node.extend({
pgBrowser.Nodes['foreign-table'] = pgBrowser.Node.extend({
type: 'foreign-table',
sqlAlterHelp: 'sql-alterforeigntable.html',
sqlCreateHelp: 'sql-createforeigntable.html',
@ -567,7 +540,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -579,7 +552,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'owner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
name: undefined,
@ -672,18 +645,18 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
id: 'relacl', label: '{{ _('Privileges') }}', cell: 'string',
type: 'text', group: '{{ _('Security') }}',
mode: ['properties'], min_version: 90200
},{
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'acl', label: '{{ _('Privileges') }}', model: pgAdmin
.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['a','r','w','x']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}',
editable: false, type: 'collection', group: 'security',
mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
min_version: 90200
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
model: pgBrowser.SecLabelModel, type: 'collection',
group: 'security', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: false, canDelete: true,
control: 'unique-col-collection', uniqueCol : ['provider']

View File

@ -27,9 +27,9 @@ COMMENT ON FOREIGN TABLE {{ conn|qtIdent(data.basensp, data.name) }}
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.security_label, data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.label, data.basensp) }}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -87,13 +87,13 @@ ALTER FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, name) }}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -36,8 +36,8 @@ COMMENT ON FOREIGN TABLE {{ conn|qtIdent(data.basensp, data.name) }}
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}{% if r.security_label and r.provider %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.security_label, data.basensp) }}
{% for r in data.seclabels %}{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.label, data.basensp) }}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -126,13 +126,13 @@ ALTER FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, name) }}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -52,9 +52,9 @@ COMMENT ON FOREIGN TABLE {{ conn|qtIdent(data.basensp, data.name) }}
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.security_label, data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', data.name, r.provider, r.label, data.basensp) }}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -138,13 +138,13 @@ ALTER FOREIGN TABLE {{ conn|qtIdent(o_data.basensp, name) }}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.security_label, o_data.basensp) }}
{{ SECLABLE.SET(conn, 'FOREIGN TABLE', name, r.provider, r.label, o_data.basensp) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -6,8 +6,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-function']) {
var functions = pgAdmin.Browser.Nodes['coll-function'] =
pgAdmin.Browser.Collection.extend({
var functions = pgBrowser.Nodes['coll-function'] =
pgBrowser.Collection.extend({
node: 'function',
label: '{{ _('Functions') }}',
type: 'coll-function',
@ -15,35 +15,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
};
// Security Model
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
label: null
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', editable: true, cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null,
data = this.toJSON();
if (_.isUndefined(data.label) ||
_.isNull(data.label) ||
String(data.label).replace(/^\s+|\s+$/g, '') == '') {
return _("Please specify the value for all the security providers.");
}
return null;
}
});
// Argument Model
var ArgumentModel = pgAdmin.Browser.Node.Model.extend({
var ArgumentModel = pgBrowser.Node.Model.extend({
idAttribute: 'argid',
defaults: {
argid: undefined,
@ -100,7 +73,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
if (!pgBrowser.Nodes['function']) {
pgAdmin.Browser.Nodes['function'] = pgBrowser.Node.extend({
pgBrowser.Nodes['function'] = pgBrowser.Node.extend({
type: 'function',
sqlAlterHelp: 'sql-alterfunction.html',
sqlCreateHelp: 'sql-createfunction.html',
@ -142,7 +115,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -154,7 +127,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'funcowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
name: undefined,
@ -176,7 +149,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
procost: undefined, /* Estimated execution Cost */
prorows: undefined, /* Estimated number of rows */
proleakproof: undefined,
arguments: [],
args: [],
prosrc: undefined,
prosrc_c: undefined,
probin: '$libdir/',
@ -273,13 +246,12 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
{'label': 'IMMUTABLE', 'value': 'i'},
], disabled: 'isDisabled'
},{
id: 'proretset', label: '{{ _('Returns a set?') }}', group: '{{ _('Options') }}',
cell:'boolean', type: 'switch', disabled: 'isDisabled',
id: 'proretset', label: '{{ _('Returns a set?') }}', type: 'switch',
disabled: 'isDisabled', group: '{{ _('Options') }}',
visible: 'isVisible'
},{
id: 'proisstrict', label: '{{ _('Strict?') }}', group: '{{ _
('Options') }}',
cell:'boolean', type: 'switch', disabled: 'isDisabled',
id: 'proisstrict', label: '{{ _('Strict?') }}', type: 'switch',
group: '{{ _('Options') }}', disabled: 'isDisabled',
options: {
'onText': 'Yes', 'offText': 'No',
'onColor': 'success', 'offColor': 'primary',
@ -287,7 +259,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
}
},{
id: 'prosecdef', label: '{{ _('Security of definer?') }}',
group: '{{ _('Options') }}', cell:'boolean', type: 'switch',
group: '{{ _('Options') }}', type: 'switch',
disabled: 'isDisabled'
},{
id: 'proiswindow', label: '{{ _('Window?') }}',
@ -297,20 +269,18 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
id: 'procost', label: '{{ _('Estimated cost') }}', group: '{{ _('Options') }}',
cell:'string', type: 'text', disabled: 'isDisabled'
},{
id: 'prorows', label: '{{ _('Estimated rows') }}', group: '{{ _
('Options') }}',
cell:'string', type: 'text', disabled: 'isDisabled',
deps: ['proretset'], visible: 'isVisible'
id: 'prorows', label: '{{ _('Estimated rows') }}', type: 'text',
deps: ['proretset'], visible: 'isVisible', disabled: 'isDisabled',
group: '{{ _('Options') }}'
},{
id: 'proleakproof', label: '{{ _('Leak proof?') }}',
group: '{{ _('Options') }}', cell:'boolean', type: 'switch', min_version: 90200,
disabled: 'isDisabled'
},{
id: 'proacl', label: '{{ _('Privileges') }}',
group: '{{ _('Security') }}', cell:'boolean', type: 'text', cell: 'string',
mode: ['properties']
id: 'proacl', label: '{{ _('Privileges') }}', type: 'text',
mode: ['properties'], group: '{{ _('Security') }}'
},{
id: 'arguments', label: '{{ _('Arguments') }}', cell: 'string',
id: 'args', label: '{{ _('Arguments') }}', cell: 'string',
group: '{{ _('Arguments') }}', type: 'collection', canAdd: function(m){
return m.isNew();
},
@ -320,26 +290,23 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},{
id: 'variables', label: '{{ _('Parameters') }}', type: 'collection',
group: '{{ _('Parameters') }}', control: 'variable-collection',
model: pgAdmin.Browser.Node.VariableModel,
model: pgBrowser.Node.VariableModel,
mode: ['edit', 'create'], canAdd: 'canVarAdd', canEdit: false,
canDelete: true, disabled: 'isDisabled'
},{
id: 'acl', label: '{{ _('Privileges') }}', model: pgAdmin
.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['X']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}',
mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
disabled: 'isDisabled'
},
{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: true, canDelete: true,
control: 'unique-col-collection', uniqueCol : ['provider'],
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'acl', label: '{{ _('Privileges') }}', editable: false,
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['X']
}), uniqueCol : ['grantee', 'grantor'], type: 'collection',
group: 'security', mode: ['edit', 'create'], canAdd: true,
canDelete: true, control: 'unique-col-collection',
disabled: 'isDisabled'
},{
id: 'seclabels', label: '{{ _('Security Labels') }}', canAdd: true,
model: pgBrowser.SecLabelModel, type: 'collection',
min_version: 90100, group: 'security', mode: ['edit', 'create'],
canEdit: true, canDelete: true, uniqueCol : ['provider'],
disabled: 'isDisabled', control: 'unique-col-collection'
}
],
validate: function()

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -43,9 +43,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -4,15 +4,15 @@
{% set name = o_data.name %}
{% if data.name %}
{% if data.name != o_data.name %}
ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}({{o_data.proargtypenames }})
ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}({{ o_data.proargtypenames }})
RENAME TO {{ conn|qtIdent(data.name) }};
{% set name = data.name %}
{% endif %}
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
{% endif -%}
@ -84,12 +84,12 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -47,9 +47,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABLE.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -11,8 +11,8 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}({{o_data.pro
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
{% endif -%}
@ -91,13 +91,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -4,8 +4,8 @@
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data
.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -47,9 +47,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -12,8 +12,8 @@ o_data.proargtypenames }})
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -90,13 +90,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -43,9 +43,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -11,8 +11,8 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}({{o_data.pro
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
{% endif -%}
@ -84,12 +84,12 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -47,9 +47,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -11,8 +11,8 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}({{o_data.pro
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
{% endif -%}
@ -91,13 +91,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -4,8 +4,8 @@
{% set is_columns = [] %}
{% if data %}
CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data
.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -47,9 +47,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -12,8 +12,8 @@ o_data.proargtypenames }})
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.arguments %}
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({% if data.args %}
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %}
{% endif -%}
@ -90,13 +90,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.arguments %}(
{% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %}(
{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %},{% endif %}
{% endfor %})
{% endif %}

View File

@ -11,7 +11,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}{% if o_data
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.arguments %}({% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.args %}({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
)
@ -59,13 +59,13 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.arguments %}
({% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %} {{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %}
({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %} {{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor -%}){% endif %}
@ -22,9 +22,9 @@ COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'PROCEDURE', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -10,7 +10,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.arguments %}({% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.args %}({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
)
@ -55,13 +55,13 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -3,8 +3,8 @@
{% import 'macros/functions/variable.macros' as VARIABLE %}
{% set is_columns = [] %}
{% if data %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.arguments %}
({% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %}
({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor -%}){% endif %}
@ -33,9 +33,9 @@ COMMENT ON PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'PROCEDURE', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -10,7 +10,7 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, o_data.name) }}
{% endif %}
{% endif -%}
{% if data.change_func %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.arguments %}({% for p in data.arguments %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{p.argtype}}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if data.args %}({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %}
{% if not loop.last %}, {% endif %}
{% endfor %}
)
@ -79,13 +79,13 @@ ALTER PROCEDURE {{ conn|qtIdent(o_data.pronamespace, name) }}{% if o_data.proarg
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'PROCEDURE', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -6,8 +6,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-trigger_function']) {
var trigger_functions = pgAdmin.Browser.Nodes['coll-trigger_function'] =
pgAdmin.Browser.Collection.extend({
var trigger_functions = pgBrowser.Nodes['coll-trigger_function'] =
pgBrowser.Collection.extend({
node: 'trigger_function',
label: '{{ _('Trigger functions') }}',
type: 'coll-trigger_function',
@ -16,7 +16,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
};
if (!pgBrowser.Nodes['trigger_function']) {
pgAdmin.Browser.Nodes['trigger_function'] = pgBrowser.Node.extend({
pgBrowser.Nodes['trigger_function'] = pgBrowser.Node.extend({
type: 'trigger_function',
sqlAlterHelp: 'plpgsql-trigger.html',
sqlCreateHelp: 'plpgsql-trigger.html',
@ -57,7 +57,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
},
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -69,7 +69,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'funcowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
name: undefined,
@ -91,7 +91,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
procost: undefined, /* Estimated execution Cost */
prorows: undefined, /* Estimated number of rows */
proleakproof: undefined,
arguments: [],
args: [],
prosrc: undefined,
prosrc_c: undefined,
probin: '$libdir/',
@ -194,13 +194,12 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
{'label': 'IMMUTABLE', 'value': 'i'},
], disabled: 'isDisabled', select2: { allowClear: false }
},{
id: 'proretset', label: '{{ _('Returns a set?') }}', group: '{{ _('Options') }}',
cell:'boolean', type: 'switch', disabled: 'isDisabled',
id: 'proretset', label: '{{ _('Returns a set?') }}', type: 'switch',
group: '{{ _('Options') }}', disabled: 'isDisabled',
visible: 'isVisible'
},{
id: 'proisstrict', label: '{{ _('Strict?') }}', group: '{{ _
('Options') }}',
cell:'boolean', type: 'switch', disabled: 'isDisabled',
id: 'proisstrict', label: '{{ _('Strict?') }}', type: 'switch',
disabled: 'isDisabled', group: '{{ _('Options') }}',
options: {
'onText': 'Yes', 'offText': 'No',
'onColor': 'success', 'offColor': 'primary',
@ -215,46 +214,40 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
group: '{{ _('Options') }}', cell:'boolean', type: 'switch',
disabled: 'isDisabled', visible: 'isVisible'
},{
id: 'procost', label: '{{ _('Estimated cost') }}', group: '{{ _('Options') }}',
cell:'string', type: 'text', disabled: 'isDisabled'
id: 'procost', label: '{{ _('Estimated cost') }}', type: 'text',
group: '{{ _('Options') }}', disabled: 'isDisabled'
},{
id: 'prorows', label: '{{ _('Estimated rows') }}', group: '{{ _
('Options') }}',
cell:'string', type: 'text', disabled: 'isDisabled',
id: 'prorows', label: '{{ _('Estimated rows') }}', type: 'text',
group: '{{ _('Options') }}',
disabled: 'isDisabled',
deps: ['proretset'], visible: 'isVisible'
},{
id: 'proleakproof', label: '{{ _('Leak proof?') }}',
group: '{{ _('Options') }}', cell:'boolean', type: 'switch', min_version: 90200,
disabled: 'isDisabled'
},{
id: 'proacl', label: '{{ _('Privileges') }}',
group: '{{ _('Security') }}', cell:'boolean', type: 'text', cell: 'string',
mode: ['properties']
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'proacl', label: '{{ _('Privileges') }}', mode: ['properties'],
group: '{{ _('Security') }}', type: 'text'
},{
id: 'variables', label: '{{ _('Parameters') }}', type: 'collection',
group: '{{ _('Parameters') }}', control: 'variable-collection',
model: pgAdmin.Browser.Node.VariableModel,
model: pgBrowser.Node.VariableModel,
mode: ['edit', 'create'], canAdd: 'canVarAdd', canEdit: false,
canDelete: true, disabled: 'isDisabled'
},{
id: 'acl', label: '{{ _('Privileges') }}', model: pgAdmin
.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['X']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}',
mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
disabled: 'isDisabled'
},
{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: Backform.SecurityModel, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: true, canDelete: true,
control: 'unique-col-collection', uniqueCol : ['provider'],
disabled: 'isDisabled'
}
],
id: 'acl', label: '{{ _('Privileges') }}', editable: false,
type: 'collection', group: 'security', mode: ['edit', 'create'],
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['X']
}), uniqueCol : ['grantee', 'grantor'], disabled: 'isDisabled',
canAdd: true, canDelete: true, control: 'unique-col-collection'
},{
id: 'seclabels', label: '{{ _('Security Labels') }}', canEdit: true,
model: pgBrowser.SecLabelModel, type: 'collection',
min_version: 90100, group: 'security', mode: ['edit', 'create'],
canDelete: true, control: 'unique-col-collection', canAdd: true,
uniqueCol : ['provider'], disabled: 'isDisabled'
}],
validate: function(keys)
{
var err = {},

View File

@ -38,9 +38,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -79,12 +79,12 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -42,9 +42,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABLE.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABLE.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -86,13 +86,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -41,9 +41,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -85,13 +85,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -38,9 +38,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -79,12 +79,12 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -42,9 +42,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -86,13 +86,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{ o_data.proargtyp
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -41,9 +41,9 @@ COMMENT ON FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({{data.func
{% endif -%}
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.security_label and r.provider %}
{% if r.label and r.provider %}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.security_label, data.pronamespace, data.func_args) }}
{{ SECLABEL.SET(conn, 'FUNCTION', data.name, r.provider, r.label, data.pronamespace, data.func_args) }}
{% endif %}
{% endfor %}
{% endif -%}

View File

@ -85,13 +85,13 @@ ALTER FUNCTION {{ conn|qtIdent(o_data.pronamespace, name) }}({{o_data.proargtype
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.security_label, o_data.pronamespace, o_data.proargtypenames) }}
{{ SECLABEL.SET(conn, 'FUNCTION', name, r.provider, r.label, o_data.pronamespace, o_data.proargtypenames) }}
{% endfor %}
{% endif -%}
{% if data.description is defined and data.description != o_data.description%}

View File

@ -241,7 +241,7 @@ class SequenceView(PGChildNodeView):
sec = re.search(r'([^=]+)=(.*$)', sec)
sec_lbls.append({
'provider': sec.group(1),
'security_label': sec.group(2)
'label': sec.group(2)
})
res['securities'] = sec_lbls
@ -599,7 +599,7 @@ class SequenceView(PGChildNodeView):
seclabels = []
for seclbls in data['securities']:
k, v = seclbls.split('=')
seclabels.append({'provider': k, 'security_label': v})
seclabels.append({'provider': k, 'label': v})
data['securities'] = seclabels

View File

@ -2,44 +2,10 @@ define(
['jquery', 'underscore', 'underscore.string', 'pgadmin', 'pgadmin.browser', 'alertify', 'pgadmin.browser.collection'],
function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node model class to create a security model
var SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: undefined,
securitylabel: undefined
},
// Define the schema for the Security Label
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', editable: true,
cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', editable: true,
cellHeaderClasses:'width_percent_50'
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on
* the GUI for the respective control.
*/
validate: function() {
var err = {},
errmsg = null,
data = this.toJSON();
if (_.isUndefined(data.label) ||
_.isNull(data.label) ||
String(data.label).replace(/^\s+|\s+$/g, '') == '') {
return _("Please specify the value for all the security providers.");
}
return null;
}
});
// Extend the browser's collection class for sequence collection
if (!pgBrowser.Nodes['coll-sequence']) {
var databases = pgAdmin.Browser.Nodes['coll-sequence'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-sequence'] =
pgBrowser.Collection.extend({
node: 'sequence',
label: '{{ _('Sequences') }}',
type: 'coll-sequence',
@ -49,7 +15,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
// Extend the browser's node class for sequence node
if (!pgBrowser.Nodes['sequence']) {
pgAdmin.Browser.Nodes['sequence'] = pgBrowser.Node.extend({
pgBrowser.Nodes['sequence'] = pgBrowser.Node.extend({
type: 'sequence',
sqlAlterHelp: 'sql-altersequence.html',
sqlCreateHelp: 'sql-createsequence.html',
@ -58,7 +24,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
collection_type: 'coll-sequence',
hasSQL: true,
hasDepends: true,
parent_type: ['schema'],
parent_type: ['schema', 'catalog'],
Init: function() {
/* Avoid mulitple registration of menus */
if (this.initialized)
@ -119,7 +85,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
return true;
},
// Define the model for sequence node.
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
oid: undefined,
@ -136,7 +102,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
relacl: [],
securities: []
},
// Default values!
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
@ -148,9 +114,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
this.set({'seqowner': userInfo.name}, {silent: true});
this.set({'schema': schemaInfo.label}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
// Define the schema for sequence node.
schema: [{
id: 'name', label: '{{ _('Name') }}', cell: 'string',
@ -202,21 +168,23 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
'onColor': 'success', 'offColor': 'primary',
'size': 'small'
}
},{
}, pgBrowser.SecurityGroupUnderSchema,{
id: 'acl', label: '{{ _('Privileges') }}', type: 'text',
group: '{{ _('Security') }}', mode: ['properties'], disabled: true
group: '{{ _("Security") }}', mode: ['properties'], disabled: true
},{
id: 'relacl', label: '{{ _('Privileges') }}', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['r', 'w', 'U']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}', mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
id: 'relacl', label: '{{ _('Privileges') }}', group: 'security',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['r', 'w', 'U']
}), uniqueCol : ['grantee', 'grantor'], mode: ['edit', 'create'],
editable: false, type: 'collection', canAdd: true, canDelete: true,
control: 'unique-col-collection',
},{
id: 'securities', label: '{{ _('Securitiy Labels') }}', model: SecurityModel,
editable: false, type: 'collection', canEdit: false,
group: '{{ _('Security') }}', canDelete: true,
mode: ['edit', 'create'], canAdd: true,
control: 'unique-col-collection', uniqueCol : ['provider'],
min_version: 90200
id: 'securities', label: '{{ _('Securitiy Labels') }}', canAdd: true,
model: pgBrowser.SecLabelModel, editable: false,
type: 'collection', canEdit: false, group: 'security',
mode: ['edit', 'create'], canDelete: true,
control: 'unique-col-collection',
min_version: 90200, uniqueCol : ['provider']
}],
/* validate function is used to validate the input given by
* the user. In case of error, message will be displayed on

View File

@ -15,7 +15,7 @@ COMMENT ON SEQUENCE {{ seqname }}
{% if data.securities %}
{% for r in data.securities %}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.security_label, data.schema) }}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.label, data.schema) }}
{% endfor %}
{% endif %}
{% if data.relacl %}
@ -23,4 +23,4 @@ COMMENT ON SEQUENCE {{ seqname }}
{% for priv in data.relacl %}
{{ PRIVILEGE.SET(conn, 'SEQUENCE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -41,7 +41,7 @@ ALTER SEQUENCE {{ conn|qtIdent(o_data.schema, data.name) }} {{ defquery }};
{% if data.schema and data.schema != o_data.schema %}
ALTER SEQUENCE {{ conn|qtIdent(o_data.schema, data.name) }}
SET SCHEMA {{ conn|qtIdent(data.schema) }};
{% set seqname = conn|qtIdent(data.schema, data.name) %}
{% set schema = data.schema %}
{% else %}
@ -51,7 +51,7 @@ ALTER SEQUENCE {{ conn|qtIdent(o_data.schema, data.name) }}
{% if data.comment is defined and data.comment != o_data.comment %}
COMMENT ON SEQUENCE {{ seqname }}
IS {{ data.comment|qtLiteral }};
{% endif %}
{% if data.securities and data.securities|length > 0 %}
@ -63,12 +63,12 @@ COMMENT ON SEQUENCE {{ seqname }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.security_label, schema) }}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.label, schema) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.security_label, schema) }}
{{ SECLABLE.SET(conn, 'SEQUENCE', data.name, r.provider, r.label, schema) }}
{% endfor %}
{% endif %}
{% endif %}
@ -91,4 +91,4 @@ COMMENT ON SEQUENCE {{ seqname }}
{% endfor %}
{% endif %}
{% endif %}
{% endif %}
{% endif %}

View File

@ -4,8 +4,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
if (!pgBrowser.Nodes['coll-column']) {
var databases = pgAdmin.Browser.Nodes['coll-column'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-column'] =
pgBrowser.Collection.extend({
node: 'column',
label: '{{ _('Columns') }}',
type: 'coll-column',
@ -14,7 +14,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
};
// This Node model will be used for variable control for column
var VariablesModel = Backform.VariablesModel = pgAdmin.Browser.Node.Model.extend({
var VariablesModel = Backform.VariablesModel = pgBrowser.Node.Model.extend({
defaults: {
name: null,
value: null
@ -49,7 +49,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
});
if (!pgBrowser.Nodes['column']) {
pgAdmin.Browser.Nodes['column'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['column'] = pgBrowser.Node.extend({
parent_type: ['table', 'view', 'mview'],
collection_type: ['coll-table', 'coll-view', 'coll-mview'],
type: 'column',
@ -115,7 +115,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
}
]);
},
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
attowner: undefined,
@ -190,7 +190,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
}
},{
id: 'attnum', label:'{{ _('Position') }}', cell: 'string',
type: 'text', disabled: 'inSchema', mode: ['properties']
type: 'text', disabled: 'notInSchema', mode: ['properties']
},{
id: 'cltype', label:'{{ _('Data type') }}', cell: 'node-ajax-options',
type: 'text', disabled: 'inSchemaWithColumnCheck',
@ -379,29 +379,27 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
},{
id: 'description', label:'{{ _('Comment') }}', cell: 'string',
type: 'multiline', mode: ['properties', 'create', 'edit'],
disabled: 'inSchema'
disabled: 'notInSchema'
},{
id: 'attoptions', label: 'Variables', type: 'collection',
group: '{{ _('Variables') }}', control: 'unique-col-collection',
model: VariablesModel, uniqueCol : ['name'],
mode: ['edit', 'create'], canAdd: true, canEdit: false,
canDelete: true
},{
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'attacl', label: 'Privileges', type: 'collection',
group: '{{ _('Security') }}', control: 'unique-col-collection',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({
group: 'security', control: 'unique-col-collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['a','r','w','x']}),
mode: ['edit'], canAdd: true, canDelete: true,
uniqueCol : ['grantee']
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: pgAdmin.Browser.SecurityModel,
editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: false, canDelete: true, control: 'unique-col-collection'
}
],
id: 'seclabels', label: '{{ _('Security Labels') }}', canAdd: true,
model: pgBrowser.SecLabelModel, group: 'security',
mode: ['edit', 'create'], editable: false, type: 'collection',
min_version: 90100, canEdit: false, canDelete: true,
control: 'unique-col-collection'
}],
validate: function(keys) {
var err = {},
changedAttrs = this.changed,
@ -463,10 +461,8 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
return null;
},
isInhertedColumn: function() {
},
// We will check if we are under schema node & in 'create' mode
inSchema: function() {
notInSchema: function() {
if(this.node_info && 'catalog' in this.node_info)
{
return true;
@ -564,8 +560,8 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
return true;
}
}
});
}
});
}
return pgBrowser.Nodes['column'];
});

View File

@ -7,8 +7,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify) {
if (!pgBrowser.Nodes['coll-table']) {
var databases = pgAdmin.Browser.Nodes['coll-table'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-table'] =
pgBrowser.Collection.extend({
node: 'table',
label: '{{ _('Tables') }}',
type: 'coll-table',
@ -17,7 +17,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
};
if (!pgBrowser.Nodes['table']) {
pgAdmin.Browser.Nodes['table'] = pgBrowser.Node.extend({
pgBrowser.Nodes['table'] = pgBrowser.Node.extend({
type: 'table',
label: '{{ _('Table') }}',
collection_type: 'coll-table',
@ -242,7 +242,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
});
}
},
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
oid: undefined,
@ -270,7 +270,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
toast_autovacuum_enabled: false,
autovacuum_enabled: false,
primary_key: []
},
},
// Default values!
initialize: function(attrs, args) {
var self = this,
@ -283,7 +283,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
this.set({'relowner': userInfo.name}, {silent: true});
this.set({'schema': schemaInfo.label}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
@ -337,40 +337,40 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
return data;
},
control: Backform.NodeAjaxOptionsControl.extend({
// When of_types changes we need to clear columns collection
onChange: function() {
Backform.NodeAjaxOptionsControl.prototype.onChange.apply(this, arguments);
var self = this,
tbl_oid = undefined,
tbl_name = self.model.get('typname'),
data = undefined,
arg = undefined,
column_collection = self.model.get('columns');
// When of_types changes we need to clear columns collection
onChange: function() {
Backform.NodeAjaxOptionsControl.prototype.onChange.apply(this, arguments);
var self = this,
tbl_oid = undefined,
tbl_name = self.model.get('typname'),
data = undefined,
arg = undefined,
column_collection = self.model.get('columns');
if (!_.isUndefined(tbl_name) &&
tbl_name !== '' && column_collection.length !== 0) {
var msg = '{{ _('Changing of type table will clear columns collection') }}';
alertify.confirm(msg, function (e) {
if (e) {
// User clicks Ok, lets clear columns collection
column_collection.reset();
} else {
return this;
}
});
} else if (!_.isUndefined(tbl_name) && tbl_name === '') {
column_collection.reset();
}
// Run Ajax now to fetch columns
if (!_.isUndefined(tbl_name) && tbl_name !== '') {
arg = { 'tname': tbl_name }
data = self.model.fetch_columns_ajax.apply(self, [arg]);
// Add into column collection
column_collection.set(data, { merge:false,remove:false });
}
if (!_.isUndefined(tbl_name) &&
tbl_name !== '' && column_collection.length !== 0) {
var msg = '{{ _('Changing of type table will clear columns collection') }}';
alertify.confirm(msg, function (e) {
if (e) {
// User clicks Ok, lets clear columns collection
column_collection.reset();
} else {
return this;
}
});
} else if (!_.isUndefined(tbl_name) && tbl_name === '') {
column_collection.reset();
}
})
// Run Ajax now to fetch columns
if (!_.isUndefined(tbl_name) && tbl_name !== '') {
arg = { 'tname': tbl_name }
data = self.model.fetch_columns_ajax.apply(self, [arg]);
// Add into column collection
column_collection.set(data, { merge:false,remove:false });
}
}
})
},{
id: 'fillfactor', label:'{{ _('Fill factor') }}', cell: 'integer',
type: 'int', mode: ['create', 'edit'], min: 10, max: 100,
@ -418,78 +418,78 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
return data;
},
control: Backform.MultiSelectAjaxControl.extend({
// When changes we need to add/clear columns collection
onChange: function() {
Backform.MultiSelectAjaxControl.prototype.onChange.apply(this, arguments);
var self = this,
// current table list and previous table list
cTbl_list = self.model.get('coll_inherits') || [],
pTbl_list = self.model.previous('coll_inherits') || [];
// When changes we need to add/clear columns collection
onChange: function() {
Backform.MultiSelectAjaxControl.prototype.onChange.apply(this, arguments);
var self = this,
// current table list and previous table list
cTbl_list = self.model.get('coll_inherits') || [],
pTbl_list = self.model.previous('coll_inherits') || [];
if (!_.isUndefined(cTbl_list)) {
var tbl_name = undefined,
tid = undefined;
// Add columns logic
// If new table is added in list
if(cTbl_list.length > 1 && cTbl_list.length > pTbl_list.length) {
// Find newly added table from current list
tbl_name = _.difference(cTbl_list, pTbl_list);
tid = this.get_table_oid(tbl_name[0]);
this.add_columns(tid);
} else if (cTbl_list.length == 1) {
// First table added
tid = this.get_table_oid(cTbl_list[0]);
this.add_columns(tid);
}
// Remove columns logic
if(cTbl_list.length > 0 && cTbl_list.length < pTbl_list.length) {
// Find deleted table from previous list
tbl_name = _.difference(pTbl_list, cTbl_list);
this.remove_columns(tbl_name[0]);
} else if (pTbl_list.length === 1 && cTbl_list.length < 1) {
// We got last table from list
tbl_name = pTbl_list[0];
this.remove_columns(tbl_name);
}
if (!_.isUndefined(cTbl_list)) {
var tbl_name = undefined,
tid = undefined;
// Add columns logic
// If new table is added in list
if(cTbl_list.length > 1 && cTbl_list.length > pTbl_list.length) {
// Find newly added table from current list
tbl_name = _.difference(cTbl_list, pTbl_list);
tid = this.get_table_oid(tbl_name[0]);
this.add_columns(tid);
} else if (cTbl_list.length == 1) {
// First table added
tid = this.get_table_oid(cTbl_list[0]);
this.add_columns(tid);
}
},
add_columns: function(tid) {
// Create copy of old model if anything goes wrong at-least we have backup
// Then send AJAX request to fetch table specific columns
var self = this,
url = 'get_columns',
m = self.model.top || self.model,
data = undefined,
old_columns = _.clone(m.get('columns')),
column_collection = m.get('columns');
var arg = {'tid': tid}
data = self.model.fetch_columns_ajax.apply(self, [arg]);
// Remove columns logic
if(cTbl_list.length > 0 && cTbl_list.length < pTbl_list.length) {
// Find deleted table from previous list
tbl_name = _.difference(pTbl_list, cTbl_list);
this.remove_columns(tbl_name[0]);
} else if (pTbl_list.length === 1 && cTbl_list.length < 1) {
// We got last table from list
tbl_name = pTbl_list[0];
this.remove_columns(tbl_name);
}
// Update existing column collection
column_collection.set(data, { merge:false,remove:false });
},
remove_columns: function(tblname) {
// Remove all the column models for deleted table
var tid = this.get_table_oid(tblname),
column_collection = this.model.get('columns');
column_collection.remove(column_collection.where({'inheritedid': tid }));
},
get_table_oid: function(tblname) {
// Here we will fetch the table oid from table name
var tbl_oid = undefined;
// iterate over list to find table oid
_.each(this.model.inherited_tables_list, function(obj) {
if(obj.label === tblname) {
tbl_oid = obj.tid;
}
});
return tbl_oid;
}
})
},
add_columns: function(tid) {
// Create copy of old model if anything goes wrong at-least we have backup
// Then send AJAX request to fetch table specific columns
var self = this,
url = 'get_columns',
m = self.model.top || self.model,
data = undefined,
old_columns = _.clone(m.get('columns')),
column_collection = m.get('columns');
var arg = {'tid': tid}
data = self.model.fetch_columns_ajax.apply(self, [arg]);
// Update existing column collection
column_collection.set(data, { merge:false,remove:false });
},
remove_columns: function(tblname) {
// Remove all the column models for deleted table
var tid = this.get_table_oid(tblname),
column_collection = this.model.get('columns');
column_collection.remove(column_collection.where({'inheritedid': tid }));
},
get_table_oid: function(tblname) {
// Here we will fetch the table oid from table name
var tbl_oid = undefined;
// iterate over list to find table oid
_.each(this.model.inherited_tables_list, function(obj) {
if(obj.label === tblname) {
tbl_oid = obj.tid;
}
});
return tbl_oid;
}
})
},{
id: 'coll_inherits', label: '{{ _('Inherited from table(s)') }}',
url: 'get_inherits', type: 'text', group: '{{ _('Advanced') }}',
@ -500,7 +500,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
type: 'text', mode: ['properties'], group: '{{ _('Advanced') }}',
disabled: 'inSchema'
},{
// Here we will create tab control for columns
// Tab control for columns
id: 'columns', label:'{{ _('Columns') }}', type: 'collection',
group: '{{ _('Columns') }}',
model: pgBrowser.Nodes['column'].model,
@ -676,7 +676,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
var columns = m.get('columns');
return _.some(columns.pluck('name'));
}
}]
}]
},{
type: 'nested', control: 'fieldset', label: '{{ _('Like') }}',
group: '{{ _('Advanced') }}',
@ -715,24 +715,22 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
id: 'relacl_str', label:'{{ _('Privileges') }}', cell: 'string',
type: 'text', mode: ['properties'], group: '{{ _('Security') }}',
disabled: 'inSchema'
},{
id: 'relacl', label: 'Privileges', type: 'collection',
group: '{{ _('Security') }}', control: 'unique-col-collection',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({
}, pgBrowser.SecurityGroupUnderSchema,{
id: 'relacl', label: '{{ _('Privileges') }}', type: 'collection',
group: 'security', control: 'unique-col-collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['a','r','w','d','D','x','t']}),
mode: ['edit', 'create'], canAdd: true, canDelete: true,
uniqueCol : ['grantee']
},{
id: 'seclabels', label: '{{ _('Security labels') }}',
model: pgAdmin.Browser.SecurityModel, editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90100, canAdd: true,
canEdit: false, canDelete: true, control: 'unique-col-collection'
id: 'seclabels', label: '{{ _('Security labels') }}', canEdit: false,
model: pgBrowser.SecLabelModel, editable: false, canAdd: true,
type: 'collection', min_version: 90100, mode: ['edit', 'create'],
group: 'security', canDelete: true, control: 'unique-col-collection'
},{
id: 'vacuum_settings_str', label: '{{ _('Storage settings') }}',
type: 'multiline', group: '{{ _('Advanced') }}', mode: ['properties']
}
],
}],
validate: function(keys) {
var err = {},
changedAttrs = this.changed,
@ -777,25 +775,24 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
}
return false;
},
isInheritedTable: function(m) {
if(!m.inSchema.apply(this, [m])) {
if(
(!_.isUndefined(m.get('coll_inherits')) && m.get('coll_inherits').length != 0)
||
(!_.isUndefined(m.get('typname')) && String(m.get('typname')).replace(/^\s+|\s+$/g, '') !== '')
) {
// Either of_types or coll_inherits has value
return false;
} else {
return true;
isInheritedTable: function(m) {
if(!m.inSchema.apply(this, [m])) {
if(
(!_.isUndefined(m.get('coll_inherits')) && m.get('coll_inherits').length != 0)
||
(!_.isUndefined(m.get('typname')) && String(m.get('typname')).replace(/^\s+|\s+$/g, '') !== '')
) {
// Either of_types or coll_inherits has value
return false;
} else {
return true;
}
}
} else {
return false;
}
return false;
},
// We will disable it if Oftype is defined
// Oftype is defined?
checkInheritance: function(m) {
//coll_inherits || typname
// coll_inherits || typname
if(!m.inSchema.apply(this, [m]) &&
( _.isUndefined(m.get('typname')) ||
_.isNull(m.get('typname')) ||
@ -868,42 +865,40 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
return true;
},
fetch_columns_ajax: function(arg) {
var self = this,
url = 'get_columns',
m = self.model.top || self.model,
old_columns = _.clone(m.get('columns'))
data = undefined;
if (url) {
var node = this.field.get('schema_node'),
var self = this,
url = 'get_columns',
m = self.model.top || self.model,
old_columns = _.clone(m.get('columns'))
data = undefined,
node = this.field.get('schema_node'),
node_info = this.field.get('node_info'),
full_url = node.generate_url.apply(
node, [
null, url, this.field.get('node_data'),
this.field.get('url_with_id') || false, node_info
]),
]
),
cache_level = this.field.get('cache_level') || node.type,
cache_node = this.field.get('cache_node');
cache_node = (cache_node && pgAdmin.Browser.Nodes['cache_node']) || node;
cache_node = (cache_node && pgBrowser.Nodes['cache_node']) || node;
m.trigger('pgadmin:view:fetching', m, self.field);
// Fetching Columns data for the selected table.
$.ajax({
async: false,
url: full_url,
data: arg,
success: function(res) {
data = cache_node.cache(url, node_info, cache_level, res.data);
},
error: function() {
m.trigger('pgadmin:view:fetch:error', m, self.field);
}
});
m.trigger('pgadmin:view:fetched', m, self.field);
data = (data && data.data) || [];
return data;
}
m.trigger('pgadmin:view:fetching', m, self.field);
// Fetching Columns data for the selected table.
$.ajax({
async: false,
url: full_url,
data: arg,
success: function(res) {
data = cache_node.cache(url, node_info, cache_level, res.data);
},
error: function() {
m.trigger('pgadmin:view:fetch:error', m, self.field);
}
});
m.trigger('pgadmin:view:fetched', m, self.field);
data = (data && data.data) || [];
return data;
}
}),
canCreate: function(itemData, item, data) {
@ -956,8 +951,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) {
}
}
}
});
});
}
return pgBrowser.Nodes['table'];

View File

@ -2,42 +2,11 @@
['jquery', 'underscore', 'underscore.string', 'pgadmin',
'pgadmin.browser', 'backform', 'alertify', 'pgadmin.browser.collection'],
function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
// Extend the browser's collection class for SecurityLabel control
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
security_label: null
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null;
if (_.isUndefined(this.get('security_label')) ||
_.isNull(this.get('security_label')) ||
String(this.get('security_label')).replace(/^\s+|\s+$/g, '') == '') {
errmsg = '{{ _('Please specify the value for all the security providers.')}}';
this.errorModel.set('security_label', errmsg);
return errmsg;
} else {
this.errorModel.unset('security_label');
}
return null;
}
});
// Extend the browser's collection class for catalog collection
if (!pgBrowser.Nodes['coll-catalog']) {
var databases = pgAdmin.Browser.Nodes['coll-catalog'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-catalog'] =
pgBrowser.Collection.extend({
node: 'catalog',
label: '{{ _('Catalogs') }}',
type: 'coll-catalog',
@ -46,7 +15,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
};
// Extend the browser's node class for catalog node
if (!pgBrowser.Nodes['catalog']) {
pgAdmin.Browser.Nodes['catalog'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['catalog'] = pgBrowser.Node.extend({
parent_type: 'database',
type: 'catalog',
label: '{{ _('Catalog') }}',
@ -60,7 +29,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
this.initialized = true;
},
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
namespaceowner: undefined,
@ -76,7 +45,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
this.set({'namespaceowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
id: 'name', label: '{{ _('Name') }}', cell: 'string',
@ -95,7 +64,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
type: 'multiline'
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, editable: false, type: 'collection',
model: pgBrowser.SecLabelModel, editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90200, canAdd: true,
canEdit: false, canDelete: true, control: 'unique-col-collection'

View File

@ -17,12 +17,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -17,12 +17,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -17,12 +17,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -17,12 +17,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(o_data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', o_data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -6,84 +6,84 @@ define(
function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
// VaccumSettings Collection to display all settings parameters as Grid
var VacuumCollectionControl = Backform.VacuumCollectionControl =
Backform.Control.extend({
// VaccumSettings Collection to display all settings parameters as Grid
var VacuumCollectionControl = Backform.VacuumCollectionControl =
Backform.Control.extend({
grid_columns:undefined,
grid_columns:undefined,
initialize: function() {
Backform.Control.prototype.initialize.apply(this, arguments);
var self = this,
m = this.model;
url = self.field.get('url');
initialize: function() {
Backform.Control.prototype.initialize.apply(this, arguments);
var self = this,
m = this.model;
url = self.field.get('url');
if (url && m.isNew()) {
var node = self.field.get('node'),
node_data = self.field.get('node_data'),
node_info = self.field.get('node_info'),
full_url = node.generate_url.apply(
node, [
null, url, node_data, false, node_info
]),
data;
m.trigger('pgadmin-view:fetching', m, self.field);
if (url && m.isNew()) {
var node = self.field.get('node'),
node_data = self.field.get('node_data'),
node_info = self.field.get('node_info'),
full_url = node.generate_url.apply(
node, [
null, url, node_data, false, node_info
]),
data;
m.trigger('pgadmin-view:fetching', m, self.field);
// fetch default values for autovacuum fields
$.ajax({
async: false,
url: full_url,
success: function (res) {
data = res;
},
error: function() {
m.trigger('pgadmin-view:fetch:error', m, self.field);
}
});
m.trigger('pgadmin-view:fetched', m, self.field);
// Add fetched models into collection
if (data && _.isArray(data)) {
m.get(self.field.get('name')).reset(data, {silent: true});
// fetch default values for autovacuum fields
$.ajax({
async: false,
url: full_url,
success: function (res) {
data = res;
},
error: function() {
m.trigger('pgadmin-view:fetch:error', m, self.field);
}
}
},
render: function() {
var self = this,
m = this.model,
attributes = self.field.attributes;
// remove grid
if(self.grid) {
self.grid.remove();
delete self.grid;
self.grid = undefined;
}
self.$el.empty();
var gridHeader = _.template([
'<div class="subnode-header">',
' <label class="control-label col-sm-4"><%-label%></label>',
'</div>'].join("\n")),
gridBody = $('<div class="pgadmin-control-group backgrid form-group col-xs-12 object subnode"></div>').append(
gridHeader(attributes)
);
// Initialize a new Grid instance
var grid = self.grid = new Backgrid.Grid({
columns: self.grid_columns,
collection: self.model.get(self.field.get('name')),
className: "backgrid table-bordered"
});
m.trigger('pgadmin-view:fetched', m, self.field);
// render grid
self.$el.append($(gridBody).append(grid.render().$el));
return self;
// Add fetched models into collection
if (data && _.isArray(data)) {
m.get(self.field.get('name')).reset(data, {silent: true});
}
}
});
},
render: function() {
var self = this,
m = this.model,
attributes = self.field.attributes;
// remove grid
if(self.grid) {
self.grid.remove();
delete self.grid;
self.grid = undefined;
}
self.$el.empty();
var gridHeader = _.template([
'<div class="subnode-header">',
' <label class="control-label col-sm-4"><%-label%></label>',
'</div>'].join("\n")),
gridBody = $('<div class="pgadmin-control-group backgrid form-group col-xs-12 object subnode"></div>').append(
gridHeader(attributes)
);
// Initialize a new Grid instance
var grid = self.grid = new Backgrid.Grid({
columns: self.grid_columns,
collection: self.model.get(self.field.get('name')),
className: "backgrid table-bordered"
});
// render grid
self.$el.append($(gridBody).append(grid.render().$el));
return self;
}
});
// We will use this function in VacuumSettings Control
// to convert data type on the fly
@ -108,8 +108,19 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
}
};
pgBrowser.SecurityGroupUnderSchema = {
id: 'security', label: '{{ _("Security") }}', type: 'group',
// Show/Hide security group for nodes under the catalog
visible: function(args) {
if (args && 'node_info' in args && 'catalog' in args.node_info) {
return false;
}
return true;
}
};
// Define Security Model with fields and validation for VacuumSettings Control
var VacuumTableModel = Backform.VacuumTableModel = pgAdmin.Browser.Node.Model.extend({
var VacuumTableModel = Backform.VacuumTableModel = pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
setting: undefined,
@ -119,7 +130,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
},
toJSON: function(){
var d = pgAdmin.Browser.Node.Model.prototype.toJSON.apply(this);
var d = pgBrowser.Node.Model.prototype.toJSON.apply(this);
delete d.label;
delete d.setting;
delete d.column_type;
@ -128,168 +139,134 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
});
// Extend the browser's collection class for VacuumSettingsModel
var VacuumSettingsSchema = Backform.VacuumSettingsSchema =
[{
id: 'autovacuum_custom', label: '{{ _("Custom auto-vacuum?") }}',
group: '{{ _("Table") }}', mode: ['edit', 'create'],
type: 'switch',
disabled: function(m) {
if(!m.top.inSchema.apply(this, [m])) {
return false;
}
return true;
}
},{
id: 'autovacuum_enabled', label: '{{ _("Enabled?") }}',
group: '{{ _("Table") }}', mode: ['edit', 'create'],
type: 'switch',
deps: ['autovacuum_custom'],
disabled: function(m) {
if(!m.top.inSchema.apply(this, [m]) &&
m.get('autovacuum_custom') == true) {
return false;
}
// We also need to unset rest of all
setTimeout(function() {
m.set('autovacuum_enabled', false);
}, 10);
return true;
}
},{
id: 'vacuum_table', label: '{{ _("Vacuum Table") }}',
model: Backform.VacuumTableModel, editable: false, type: 'collection',
canEdit: true, group: '{{ _("Table") }}',
mode: ['edit', 'create'], url: 'get_table_vacuum',
control: Backform.VacuumCollectionControl.extend({
grid_columns :[
{
name: 'label', label: '{{ _("Label") }}',
headerCell: Backgrid.Extension.CustomHeaderCell,
cell: 'string', editable: false, cellHeaderClasses:'width_percent_40'
},
{
name: 'value', label: '{{ _("Value") }}',
cellHeaderClasses:'width_percent_30',
cellFunction: Backform.cellFunction, editable: function(m) {
return m.handler.get('autovacuum_enabled');
}, headerCell: Backgrid.Extension.CustomHeaderCell
},
{
name: 'setting', label: '{{ _("Default value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: false
}
]
}),
deps: ['autovacuum_enabled']
},{
id: 'toast_autovacuum', label: '{{ _("Custom auto-vaccum?") }}',
group: '{{ _("Toast Table") }}', mode: ['edit', 'create'],
type: 'switch',
disabled: function(m) {
// We need to check additional condition to toggle enable/disable
// for table auto-vacuum
if(!m.top.inSchema.apply(this, [m]) && m.isNew()) {
return false;
} else if(!m.top.inSchema.apply(this, [m]) &&
(m.get('toast_autovacuum_enabled') === true ||
m.top.get('hastoasttable') === true)) {
return false;
}
return true;
}
},{
id: 'toast_autovacuum_enabled', label: '{{ _("Enabled?") }}',
group: '{{ _("Toast Table") }}', mode: ['edit', 'create'],
type: 'switch',
deps:['toast_autovacuum'],
disabled: function(m) {
// If in schema & in create mode then enable it
if(!m.top.inSchema.apply(this, [m]) &&
m.get('toast_autovacuum') === true) {
return false;
}
if (m.isNew() || m.get('hastoasttable')) {
// we also need to unset rest of all
setTimeout(function() {
m.set('toast_autovacuum_enabled', false);
}, 10);
}
return true;
}
},{
id: 'vacuum_toast', label: '{{ _("Vacuum Toast Table") }}',
model: Backform.VacuumTableModel, type: 'collection', editable: function(m) {
return m.isNew();
},
canEdit: true, group: '{{ _("Toast Table") }}',
mode: ['properties', 'edit', 'create'], url: 'get_toast_table_vacuum',
control: Backform.VacuumCollectionControl.extend({
grid_columns :[
{
name: 'label', label: '{{ _("Label") }}',
headerCell: Backgrid.Extension.CustomHeaderCell,
cell: 'string', editable: false, cellHeaderClasses:'width_percent_40'
},
{
name: 'value', label: '{{ _("Value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: function(m) {
return m.handler.get('toast_autovacuum_enabled');
}
},
{
name: 'setting', label: '{{ _("Default value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: false
}
]
}),
deps: ['toast_autovacuum_enabled']
var VacuumSettingsSchema = Backform.VacuumSettingsSchema = [{
id: 'autovacuum_custom', label: '{{ _("Custom auto-vacuum?") }}',
group: '{{ _("Table") }}', mode: ['edit', 'create'],
type: 'switch',
disabled: function(m) {
if(!m.top.inSchema.apply(this, [m])) {
return false;
}
];
// Extend the browser's collection class for SecurityLabel control
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: null,
security_label: null
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', disabled: false,
cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null;
if (_.isUndefined(this.get('security_label')) ||
_.isNull(this.get('security_label')) ||
String(this.get('security_label')).replace(/^\s+|\s+$/g, '') == '') {
errmsg = '{{ _('Please specify the value for all the security providers.')}}';
this.errorModel.set('security_label', errmsg);
return errmsg;
} else {
this.errorModel.unset('security_label');
}
return null;
return true;
}
});
},{
id: 'autovacuum_enabled', label: '{{ _("Enabled?") }}',
group: '{{ _("Table") }}', mode: ['edit', 'create'],
type: 'switch',
deps: ['autovacuum_custom'],
disabled: function(m) {
if(!m.top.inSchema.apply(this, [m]) &&
m.get('autovacuum_custom') == true) {
return false;
}
// We also need to unset rest of all
setTimeout(function() {
m.set('autovacuum_enabled', false);
}, 10);
return true;
}
},{
id: 'vacuum_table', label: '{{ _("Vacuum Table") }}',
model: Backform.VacuumTableModel, editable: false, type: 'collection',
canEdit: true, group: '{{ _("Table") }}',
mode: ['edit', 'create'], url: 'get_table_vacuum',
control: Backform.VacuumCollectionControl.extend({
grid_columns :[
{
name: 'label', label: '{{ _("Label") }}',
headerCell: Backgrid.Extension.CustomHeaderCell,
cell: 'string', editable: false, cellHeaderClasses:'width_percent_40'
},
{
name: 'value', label: '{{ _("Value") }}',
cellHeaderClasses:'width_percent_30',
cellFunction: Backform.cellFunction, editable: function(m) {
return m.handler.get('autovacuum_enabled');
}, headerCell: Backgrid.Extension.CustomHeaderCell
},
{
name: 'setting', label: '{{ _("Default value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: false
}
]
}),
deps: ['autovacuum_enabled']
},{
id: 'toast_autovacuum', label: '{{ _("Custom auto-vaccum?") }}',
group: '{{ _("Toast Table") }}', mode: ['edit', 'create'],
type: 'switch',
disabled: function(m) {
// We need to check additional condition to toggle enable/disable
// for table auto-vacuum
if(!m.top.inSchema.apply(this, [m]) && m.isNew()) {
return false;
} else if(!m.top.inSchema.apply(this, [m]) &&
(m.get('toast_autovacuum_enabled') === true ||
m.top.get('hastoasttable') === true)) {
return false;
}
return true;
}
},{
id: 'toast_autovacuum_enabled', label: '{{ _("Enabled?") }}',
group: '{{ _("Toast Table") }}', mode: ['edit', 'create'],
type: 'switch',
deps:['toast_autovacuum'],
disabled: function(m) {
// If in schema & in create mode then enable it
if(!m.top.inSchema.apply(this, [m]) &&
m.get('toast_autovacuum') === true) {
return false;
}
if (m.isNew() || m.get('hastoasttable')) {
// we also need to unset rest of all
setTimeout(function() {
m.set('toast_autovacuum_enabled', false);
}, 10);
}
return true;
}
},{
id: 'vacuum_toast', label: '{{ _("Vacuum Toast Table") }}',
model: Backform.VacuumTableModel, type: 'collection', editable: function(m) {
return m.isNew();
},
canEdit: true, group: '{{ _("Toast Table") }}',
mode: ['properties', 'edit', 'create'], url: 'get_toast_table_vacuum',
control: Backform.VacuumCollectionControl.extend({
grid_columns :[
{
name: 'label', label: '{{ _("Label") }}',
headerCell: Backgrid.Extension.CustomHeaderCell,
cell: 'string', editable: false, cellHeaderClasses:'width_percent_40'
},
{
name: 'value', label: '{{ _("Value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: function(m) {
return m.handler.get('toast_autovacuum_enabled');
}
},
{
name: 'setting', label: '{{ _("Default value") }}',
cellHeaderClasses:'width_percent_30',
headerCell: Backgrid.Extension.CustomHeaderCell,
cellFunction: Backform.cellFunction, editable: false
}
]
}),
deps: ['toast_autovacuum_enabled']
}];
// Extend the browser's collection class for schema collection
if (!pgBrowser.Nodes['coll-schema']) {
var databases = pgAdmin.Browser.Nodes['coll-schema'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-schema'] =
pgBrowser.Collection.extend({
node: 'schema',
label: '{{ _('Schemas') }}',
type: 'coll-schema',
@ -298,7 +275,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
};
// Extend the browser's node class for schema node
if (!pgBrowser.Nodes['schema']) {
pgAdmin.Browser.Nodes['schema'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['schema'] = pgBrowser.Node.extend({
parent_type: 'database',
type: 'schema',
sqlAlterHelp: 'sql-alterschema.html',
@ -334,7 +311,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
}
]);
},
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
namespaceowner: undefined,
@ -349,7 +326,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
this.set({'namespaceowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
id: 'name', label: '{{ _('Name') }}', cell: 'string',
@ -387,14 +364,14 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
}
},{
id: 'nspacl', label: '{{ _('Privileges') }}',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['C', 'U']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}',
mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, editable: false, type: 'collection',
model: pgBrowser.SecLabelModel, editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
min_version: 90200, canAdd: true,
canEdit: false, canDelete: true, control: 'unique-col-collection'
@ -402,28 +379,28 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
type: 'nested', control: 'tab', group: '{{ _('Default Privileges') }}',
mode: ['edit'],
schema:[{
id: 'deftblacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deftblacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}),
label: '{{ _('Default Privileges: Tables') }}',
editable: false, type: 'collection', group: '{{ _('Tables') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'defseqacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'defseqacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['r', 'w', 'U']}),
label: '{{ _('Default Privileges: Sequences') }}',
editable: false, type: 'collection', group: '{{ _('Sequences') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'deffuncacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deffuncacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['X']}),
label: '{{ _('Default Privileges: Functions') }}',
editable: false, type: 'collection', group: '{{ _('Functions') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'deftypeacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deftypeacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['U']}),
label: '{{ _('Default Privileges: Types') }}',
editable: false, type: 'collection', group: '{{ _('Types') }}',
@ -504,8 +481,7 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
return this;
},
remove: Backgrid.Extension.DependentCell.prototype.remove
});
});
return pgBrowser.Nodes['schema'];
});

View File

@ -30,6 +30,6 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{# Security Labels on schema #}
{% if data.seclabels and data.seclabels|length > 0 %}
{% for r in data.seclabels %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -72,12 +72,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -30,6 +30,6 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{# Security Labels on schema #}
{% if data.seclabels and data.seclabels|length > 0 %}
{% for r in data.seclabels %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -72,12 +72,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -30,6 +30,6 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{# Security Labels on schema #}
{% if data.seclabels and data.seclabels|length > 0 %}
{% for r in data.seclabels %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -31,12 +31,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -30,6 +30,6 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{# Security Labels on schema #}
{% if data.seclabels and data.seclabels|length > 0 %}
{% for r in data.seclabels %}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -31,12 +31,12 @@ COMMENT ON SCHEMA {{ conn|qtIdent(data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'SCHEMA', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}

View File

@ -5,8 +5,8 @@ define(
function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
if (!pgBrowser.Nodes['coll-type']) {
var databases = pgAdmin.Browser.Nodes['coll-type'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-type'] =
pgBrowser.Collection.extend({
node: 'type',
label: '{{ _('Types') }}',
type: 'coll-type',
@ -63,39 +63,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
remove: Backgrid.Extension.DependentCell.prototype.remove
});
// Security label model declaration
var SecurityModel = Backform.SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: undefined,
security_label: undefined
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', disabled: false, cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', disabled: false, cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null,
data = this.toJSON();
if (_.isUndefined(this.get('security_label')) ||
_.isNull(this.get('security_label')) ||
String(this.get('security_label')).replace(/^\s+|\s+$/g, '') == '') {
errmsg = '{{ _('Please provide the value for security label.') }}';
this.errorModel.set('security_label', errmsg);
return errmsg;
} else {
this.errorModel.unset('security_label');
}
return null;
}
});
// Composite type model declaration
var CompositeModel = Backform.CompositeModel = pgAdmin.Browser.Node.Model.extend({
var CompositeModel = Backform.CompositeModel = pgBrowser.Node.Model.extend({
idAttribute: 'attnum',
defaults: {
attnum: undefined,
@ -247,7 +216,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
}
});
var EnumModel = Backform.EnumModel = pgAdmin.Browser.Node.Model.extend({
var EnumModel = Backform.EnumModel = pgBrowser.Node.Model.extend({
defaults: {
label: undefined,
},
@ -275,7 +244,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
});
if (!pgBrowser.Nodes['type']) {
pgAdmin.Browser.Nodes['type'] = pgBrowser.Node.extend({
pgBrowser.Nodes['type'] = pgBrowser.Node.extend({
type: 'type',
sqlAlterHelp: 'sql-altertype.html',
sqlCreateHelp: 'sql-createtype.html',
@ -317,7 +286,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
canDrop: pgBrowser.Nodes['schema'].canChildDrop,
canDropCascade: pgBrowser.Nodes['schema'].canChildDrop,
ext_funcs: undefined,
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
oid: undefined,
@ -336,7 +305,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
this.set({'typeowner': userInfo.name}, {silent: true});
this.set({'schema': schemaInfo.label}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
@ -747,9 +716,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
id: 'alias', label:'{{ _('Alias') }}', cell: 'string',
type: 'text', mode: ['properties'],
disabled: 'inSchema'
},{
}, pgBrowser.SecurityGroupUnderSchema,{
id: 'type_acl', label:'{{ _('Privileges') }}', cell: 'string',
type: 'text', mode: ['properties'], group: '{{ _('Security') }}',
type: 'text', mode: ['properties'], group: 'security',
disabled: 'inSchema'
},{
id: 'member_list', label:'{{ _('Members') }}', cell: 'string',
@ -778,9 +747,11 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
type: 'multiline', mode: ['properties', 'create', 'edit'],
disabled: 'inSchema'
},{
id: 'typacl', label: 'Privileges', type: 'collection',
group: '{{ _('Security') }}', control: 'unique-col-collection',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend({privileges: ['U']}),
id: 'typacl', label:'{{ _('Privileges') }}', type: 'collection',
group: 'security', control: 'unique-col-collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['U']
}),
mode: ['edit', 'create'], canDelete: true,
uniqueCol : ['grantee'], deps: ['typtype'],
canAdd: function(m) {
@ -789,15 +760,14 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) {
}
},{
id: 'seclabels', label: '{{ _('Security Labels') }}',
model: SecurityModel, editable: false, type: 'collection',
group: '{{ _('Security') }}', mode: ['edit', 'create'],
model: pgBrowser.SecLabglModel, editable: false, type: 'collection',
group: 'security', mode: ['edit', 'create'],
min_version: 90100, canEdit: false, canDelete: true,
control: 'unique-col-collection', deps: ['typtype'],
canAdd: function(m) {
// Do not allow to add when shell type is selected
return !(m.get('typtype') === 'p');
}
}],
validate: function() {
// Validation code for required fields

View File

@ -76,8 +76,8 @@ COMMENT ON TYPE {% if data.schema %}{{ conn|qtIdent(data.schema, data.name) }}{%
{% if data.seclabels %}
{% for r in data.seclabels %}
{% if r.provider and r.security_label %}
{{ SECLABLE.SET(conn, 'TYPE', data.name, r.provider, r.security_label, data.schema) }}
{% if r.provider and r.label %}
{{ SECLABLE.SET(conn, 'TYPE', data.name, r.provider, r.label, data.schema) }}
{% endif %}
{% endfor %}
{% endif %}

View File

@ -90,12 +90,12 @@ ALTER TYPE {{ conn|qtIdent(o_data.schema, o_data.name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.SET(conn, 'TYPE', o_data.name, r.provider, r.security_label, o_data.schema) }}
{{ SECLABLE.SET(conn, 'TYPE', o_data.name, r.provider, r.label, o_data.schema) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.SET(conn, 'TYPE', o_data.name, r.provider, r.security_label, o_data.schema) }}
{{ SECLABLE.SET(conn, 'TYPE', o_data.name, r.provider, r.label, o_data.schema) }}
{% endfor %}
{% endif %}
@ -136,4 +136,4 @@ ALTER TYPE {% if data.name and data.name != o_data.name %}{{ conn|qtIdent(o_data
{% endif %}
SET SCHEMA {{ conn|qtIdent(data.schema) }};
{% endif %}
{% endif %}
{% endif %}

View File

@ -451,7 +451,7 @@ class ViewNode(PGChildNodeView, VacuumSettings):
sec = re.search(r'([^=]+)=(.*$)', sec)
sec_lbls.append({
'provider': sec.group(1),
'security_label': sec.group(2)
'label': sec.group(2)
})
frmtd_result.update({"seclabels": sec_lbls})

View File

@ -12,8 +12,8 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
display under under properties.
*/
if (!pgBrowser.Nodes['coll-mview']) {
var mviews= pgAdmin.Browser.Nodes['coll-mview'] =
pgAdmin.Browser.Collection.extend({
var mviews= pgBrowser.Nodes['coll-mview'] =
pgBrowser.Collection.extend({
node: 'mview',
label: '{{ _("Materialized Views") }}',
type: 'coll-mview',
@ -33,7 +33,7 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
view option in the context menu
*/
if (!pgBrowser.Nodes['mview']) {
pgAdmin.Browser.Nodes['mview'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['mview'] = pgBrowser.Node.extend({
parent_type: ['schema', 'catalog'],
type: 'mview',
sqlAlterHelp: 'sql-altermaterializedview.html',
@ -96,7 +96,7 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
Define model for the view node and specify the
properties of the model in schema.
*/
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -108,7 +108,7 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'owner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
defaults: {
spcname: 'pg_default',
@ -118,44 +118,35 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
schema: [{
id: 'name', label: '{{ _("Name") }}', cell: 'string',
type: 'text', disabled: 'inSchema'
},
{
},{
id: 'oid', label:'{{ _("OID") }}', cell: 'string',
type: 'text', disabled: true, mode: ['properties']
},
{
},{
id: 'owner', label:'{{ _("Owner") }}', cell: 'string',
control: 'node-list-by-name', select2: { allowClear: false },
node: 'role', disabled: 'inSchema'
},
{
},{
id: 'schema', label:'{{ _("Schema") }}', cell: 'string', first_empty: false,
control: 'node-list-by-name', type: 'text', cache_level: 'database',
node: 'schema', mode: ['create', 'edit'], disabled: 'inSchema', select2: { allowClear: false }
},
{
},{
id: 'system_view', label:'{{ _("System view?") }}', cell: 'string',
type: 'switch', disabled: true, mode: ['properties'],
},
{
id: 'acl', label: '{{ _("ACL") }}',
mode: ['properties'], type: 'text'
},
{
}, pgBrowser.SecurityGroupUnderSchema, {
id: 'acl', label: '{{ _("Privileges") }}',
mode: ['properties'], type: 'text', group: '{{ _("Security") }}'
},{
id: 'comment', label:'{{ _("Comment") }}', cell: 'string',
type: 'multiline'
},
{
},{
id: 'definition', label:'{{ _("") }}', cell: 'string',
type: 'text', mode: ['create', 'edit'], group: 'Definition',
control: Backform.SqlFieldControl, extraClasses:['sql_field_width_full']
},
{
},{
id: 'with_data', label: '{{ _("With Data") }}',
group: '{{ _("Storage") }}', mode: ['edit', 'create'],
type: 'switch',
},
{
},{
id: 'spcname', label: '{{ _("Tablespace") }}', cell: 'string',
type: 'text', group: '{{ _("Storage") }}', first_empty: false,
control: 'node-list-by-name', node: 'tablespace', select2: { allowClear: false },
@ -163,37 +154,31 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
if (m.label == "pg_global") return false;
else return true;
}
},
{
},{
id: 'fillfactor', label: '{{ _("Fill Factor") }}',
group: '{{ _("Storage") }}', mode: ['edit', 'create'],
type: 'integer'
},
{
},{
type: 'nested', control: 'tab', id: 'materialization',
label: '{{ _("Auto vacuum") }}', mode: ['edit', 'create'],
group: '{{ _("Auto vacuum") }}',
schema: Backform.VacuumSettingsSchema
},
// Add Privilege Control
{
id: 'datacl', label: '{{ _("Privileges") }}',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}), uniqueCol : ['grantee'],
editable: false, type: 'collection', group: '{{ _("Security") }}',
mode: ['edit', 'create'], canAdd: true, canDelete: true,
control: 'unique-col-collection', priority: 3
},
},{
// Add Privilege Control
id: 'datacl', label: '{{ _("Privileges") }}', type: 'collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']
}), uniqueCol : ['grantee'], editable: false,
group: "security", canAdd: true, canDelete: true,
mode: ['edit', 'create'], control: 'unique-col-collection'
},{
// Add Security Labels Control
{
id: 'seclabels', label: '{{ _("Security Labels") }}',
model: Backform.SecurityModel, editable: false, type: 'collection',
canEdit: false, group: '{{ _("Security") }}', canDelete: true,
model: pgBrowser.SecLabelModel, editable: false, type: 'collection',
canEdit: false, group: "security", canDelete: true,
mode: ['edit', 'create'], canAdd: true,
control: 'unique-col-collection', uniqueCol : ['provider']
}
],
}],
validate: function(keys) {
// Triggers specific error messages for fields
@ -308,8 +293,8 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) {
});
}
});
});
}
return pgBrowser.Nodes['coll-mview'];
return pgBrowser.Nodes['mview'];
});

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# We will generate Security Label SQL using macro #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{% endfor %}{% endif %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{% endfor %}{% endif %}
{% if data.datacl %}{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -202,12 +202,12 @@ COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# We will generate Security Label SQL using macro #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{% endfor %}{% endif %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{% endfor %}{% endif %}
{% if data.datacl %}{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -202,12 +202,12 @@ COMMENT ON MATERIALIZED VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -12,8 +12,8 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
display under under properties.
*/
if (!pgBrowser.Nodes['coll-view']) {
var views= pgAdmin.Browser.Nodes['coll-view'] =
pgAdmin.Browser.Collection.extend({
var views= pgBrowser.Nodes['coll-view'] =
pgBrowser.Collection.extend({
node: 'view',
label: '{{ _("Views") }}',
type: 'coll-view',
@ -33,7 +33,7 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
view option in the context menu
*/
if (!pgBrowser.Nodes['view']) {
pgAdmin.Browser.Nodes['view'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['view'] = pgBrowser.Node.extend({
parent_type: ['schema', 'catalog'],
type: 'view',
sqlAlterHelp: 'sql-alterview.html',
@ -87,7 +87,7 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
Define model for the view node and specify the
properties of the model in schema.
*/
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
initialize: function(attrs, args) {
var isNew = (_.size(attrs) === 0);
if (isNew) {
@ -99,96 +99,71 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'owner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
id: 'name', label: '{{ _("Name") }}', cell: 'string',
type: 'text', disabled: 'inSchema'
},
{
type: 'text', disabled: 'notInSchema'
},{
id: 'oid', label:'{{ _("OID") }}', cell: 'string',
type: 'text', disabled: true, mode: ['properties']
},
{
},{
id: 'owner', label:'{{ _("Owner") }}', cell: 'string', control: 'node-list-by-name',
node: 'role', disabled: 'inSchema', select2: { allowClear: false }
},
{
node: 'role', disabled: 'notInSchema', select2: { allowClear: false }
},{
id: 'schema', label:'{{ _("Schema") }}', cell: 'string', first_empty: false,
control: 'node-list-by-name', type: 'text', cache_level: 'database',
node: 'schema', disabled: 'inSchema', mode: ['create', 'edit'], select2: { allowClear: false }
},
{
node: 'schema', disabled: 'notInSchema', mode: ['create', 'edit'], select2: { allowClear: false }
},{
id: 'system_view', label:'{{ _("System view?") }}', cell: 'string',
type: 'switch', disabled: true, mode: ['properties']
},
{
},{
id: 'acl', label: '{{ _("Privileges") }}',
mode: ['properties'], type: 'text'
},
{
mode: ['properties'], type: 'text', group: '{{ _("Security") }}'
},{
id: 'comment', label:'{{ _("Comment") }}', cell: 'string',
type: 'multiline', disabled: 'inSchema'
},
{
id: 'security_barrier', label:'{{ _("Security barrier") }}', cell: 'string',
type: 'switch', min_version: '90200',
group: 'Definition', disabled: 'inSchema'
},
{
type: 'multiline', disabled: 'notInSchema'
},{
id: 'security_barrier', label:'{{ _("Security barrier") }}',
type: 'switch', min_version: '90200', group: 'Definition',
disabled: 'notInSchema'
},{
id: 'check_option', label:'{{ _("Check options") }}',
control: 'select2', group: 'Definition', type: 'text',
min_version: '90400', mode:['properties', 'create', 'edit'],
select2: {
// set select2 option width to 100%
// Set select2 option width to 100%
allowClear: false,
width: '100%'
},
options:[
{label: "No", value: "no"},
{label: "Local", value: "local"},
{label: "Cascaded", value: "cascaded"}
], disabled: 'inSchema'
},
{
}, disabled: 'notInSchema',
options:[{
label: "{{ _('No') }}", value: "no"
},{
label: "{{ _('Local') }}", value: "local"
},{
label: "{{ _('Cascaded') }}", value: "cascaded"
}]
},{
id: 'definition', label:'{{ _("Definition") }}', cell: 'string',
type: 'text', mode: ['create', 'edit'], group: 'Definition',
control: Backform.SqlFieldControl,
disabled: 'inSchema'
},
{
id: 'security', label: '{{ _("Security") }}',
type: 'group',
visible: function(m) {
if (m.top && 'catalog' in m.top.node_info) {
return false;
}
return true;
}
},
// Add Privilege Control
{
id: 'datacl', label: '{{ _("Privileges") }}',
model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}), uniqueCol : ['grantee'],
editable: false, type: 'collection', group: 'security',
disabled: 'notInSchema'
}, pgBrowser.SecurityGroupUnderSchema, {
// Add Privilege Control
id: 'datacl', label: '{{ _("Privileges") }}', type: 'collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']
}), uniqueCol : ['grantee'], editable: false, group: 'security',
mode: ['edit', 'create'], canAdd: true, canDelete: true,
control: 'unique-col-collection', disabled: 'inSchema'
},
// Add Security Labels Control
{
control: 'unique-col-collection', disabled: 'notInSchema'
},{
// Add Security Labels Control
id: 'seclabels', label: '{{ _("Security labels") }}',
model: Backform.SecurityModel, editable: false, type: 'collection',
model: pgBrowser.SecLabelModel, editable: false, type: 'collection',
canEdit: false, group: 'security', canDelete: true,
mode: ['edit', 'create'], canAdd: true, disabled: 'inSchema',
mode: ['edit', 'create'], canAdd: true, disabled: 'notInSchema',
control: 'unique-col-collection', uniqueCol : ['provider']
},
],
}],
validate: function() {
// Triggers specific error messages for fields
var err = {},
errmsg,
@ -215,9 +190,8 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
return null;
},
// We will disable everything if we are under catalog node
inSchema: function() {
if(this.node_info && 'catalog' in this.node_info)
{
notInSchema: function() {
if(this.node_info && 'catalog' in this.node_info) {
return true;
}
return false;
@ -265,5 +239,5 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) {
});
}
return pgBrowser.Nodes['coll-view'];
return pgBrowser.Nodes['view'];
});

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -55,12 +55,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -63,12 +63,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -63,12 +63,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -69,12 +69,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -63,12 +63,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -63,12 +63,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -63,12 +63,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -2,5 +2,5 @@
{% import 'macros/security.macros' as SECLABLE %}
{% import 'macros/schemas/privilege.macros' as PRIVILEGE %}
{# ===== We will generate Security Label SQL using macro ===== #}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% if data.seclabels %}{% for r in data.seclabels %}{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}{{'\r'}}{% endfor %}{{'\r'}}{% endif %}{% if data.datacl %}
{% for priv in data.datacl %}{{ PRIVILEGE.SET(conn, 'TABLE', priv.grantee, data.name, priv.without_grant, priv.with_grant, data.schema) }}{% endfor %}{% endif %}

View File

@ -69,12 +69,12 @@ COMMENT ON VIEW {{ conn|qtIdent(view_schema, view_name) }}
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.security_label) }}
{{ SECLABLE.APPLY(conn, 'VIEW', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -6,8 +6,8 @@ define([
function($, _, S, pgAdmin, pgBrowser, Alertify) {
if (!pgBrowser.Nodes['coll-database']) {
var databases = pgAdmin.Browser.Nodes['coll-database'] =
pgAdmin.Browser.Collection.extend({
var databases = pgBrowser.Nodes['coll-database'] =
pgBrowser.Collection.extend({
node: 'database',
label: '{{ _('Databases') }}',
type: 'coll-database',
@ -16,36 +16,8 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
});
};
var SecurityModel = pgAdmin.Browser.Node.Model.extend({
defaults: {
provider: undefined,
securitylabel: undefined
},
schema: [{
id: 'provider', label: '{{ _('Provider') }}',
type: 'text', editable: true,
cellHeaderClasses:'width_percent_50'
},{
id: 'security_label', label: '{{ _('Security Label') }}',
type: 'text', editable: true,
cellHeaderClasses:'width_percent_50'
}],
validate: function() {
var err = {},
errmsg = null,
data = this.toJSON();
if (_.isUndefined(data.label) ||
_.isNull(data.label) ||
String(data.label).replace(/^\s+|\s+$/g, '') == '') {
return _("Please specify the value for all the security providers.");
}
return null;
}
});
if (!pgBrowser.Nodes['database']) {
pgAdmin.Browser.Nodes['database'] = pgAdmin.Browser.Node.extend({
pgBrowser.Nodes['database'] = pgBrowser.Node.extend({
parent_type: 'server',
type: 'database',
sqlAlterHelp: 'sql-alterdatabase.html',
@ -210,7 +182,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
return pgBrowser.Node.callbacks.selected.apply(this, arguments);
},
},
model: pgAdmin.Browser.Node.Model.extend({
model: pgBrowser.Node.Model.extend({
defaults: {
name: undefined,
owner: undefined,
@ -240,7 +212,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user;
this.set({'datowner': userInfo.name}, {silent: true});
}
pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments);
pgBrowser.Node.Model.prototype.initialize.apply(this, arguments);
},
schema: [{
@ -300,18 +272,21 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
'size': 'small'
}
},{
id: 'datacl', label: '{{ _('Privileges') }}', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
{privileges: ['C', 'T', 'c']}), uniqueCol : ['grantee', 'grantor'],
editable: false, type: 'collection', group: '{{ _('Security') }}', mode: ['edit', 'create'],
id: 'datacl', label: '{{ _('Privileges') }}', type: 'collection',
model: pgBrowser.Node.PrivilegeRoleModel.extend({
privileges: ['C', 'T', 'c']
}), uniqueCol : ['grantee', 'grantor'], editable: false,
group: '{{ _('Security') }}', mode: ['edit', 'create'],
canAdd: true, canDelete: true, control: 'unique-col-collection',
},{
id: 'variables', label: '{{ _('Parameters') }}', type: 'collection',
model: pgAdmin.Browser.Node.VariableModel, editable: false,
model: pgBrowser.Node.VariableModel, editable: false,
group: '{{ _('Parameters') }}', mode: ['edit', 'create'],
canAdd: true, canEdit: false, canDelete: true, hasRole: true,
control: Backform.VariableCollectionControl, node: 'role'
},{
id: 'securities', label: '{{ _('Security Labels') }}', model: SecurityModel,
id: 'securities', label: '{{ _('Security Labels') }}',
model: pgBrowser.SecLabelModel,
editable: false, type: 'collection', canEdit: false,
group: '{{ _('Security') }}', canDelete: true,
mode: ['edit', 'create'], canAdd: true,
@ -321,25 +296,25 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) {
type: 'nested', control: 'tab', group: '{{ _('Default Privileges') }}',
mode: ['edit'],
schema:[{
id: 'deftblacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deftblacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['a', 'r', 'w', 'd', 'D', 'x', 't']}), label: '{{ _('Default Privileges: Tables') }}',
editable: false, type: 'collection', group: '{{ _('Tables') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'defseqacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'defseqacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['r', 'w', 'U']}), label: '{{ _('Default Privileges: Sequences') }}',
editable: false, type: 'collection', group: '{{ _('Sequences') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'deffuncacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deffuncacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['X']}), label: '{{ _('Default Privileges: Functions') }}',
editable: false, type: 'collection', group: '{{ _('Functions') }}',
mode: ['edit', 'create'], control: 'unique-col-collection',
canAdd: true, canDelete: true, uniqueCol : ['grantee', 'grantor']
},{
id: 'deftypeacl', model: pgAdmin.Browser.Node.PrivilegeRoleModel.extend(
id: 'deftypeacl', model: pgBrowser.Node.PrivilegeRoleModel.extend(
{privileges: ['U']}), label: '{{ _('Default Privileges: Types') }}',
editable: false, type: 'collection', group: 'deftypesacl_group',
mode: ['edit', 'create'], control: 'unique-col-collection',

View File

@ -26,12 +26,12 @@ ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH CONNECTION LIMIT = {{ data.dat
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -15,7 +15,7 @@ COMMENT ON DATABASE {{ conn|qtIdent(data.name) }}
{# Generate the security labels #}
{% if data.securities %}
{% for r in data.securities %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.securitylabel) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{# Generate the variable/options #}

View File

@ -26,12 +26,12 @@ ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH CONNECTION LIMIT = {{ data.dat
{% endif %}
{% if 'added' in seclabels and seclabels.added|length > 0 %}
{% for r in seclabels.added %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% if 'changed' in seclabels and seclabels.changed|length > 0 %}
{% for r in seclabels.changed %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.security_label) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{% endif %}

View File

@ -15,7 +15,7 @@ COMMENT ON DATABASE {{ conn|qtIdent(data.name) }}
{# Change the security labels #}
{% if data.securities %}
{% for r in data.securities %}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.securitylabel) }}
{{ SECLABEL.APPLY(conn, 'DATABASE', data.name, r.provider, r.label) }}
{% endfor %}
{% endif %}
{# Variables/options #}

Some files were not shown because too many files have changed in this diff Show More