--- umc/js/udm/DetailPage.js (Revision 68436)
+++ umc/js/udm/DetailPage.js (Arbeitskopie)
@@ -49,6 +49,7 @@
"umc/widgets/ComboBox",
"umc/widgets/Form",
"umc/widgets/Page",
+ "umc/widgets/LinkList",
"umc/widgets/StandbyMixin",
"umc/widgets/TabController",
"dijit/layout/StackContainer",
@@ -62,7 +63,7 @@
"umc/i18n!umc/modules/udm",
"dijit/registry",
"umc/widgets"
-], function(declare, lang, array, on, Deferred, all, when, construct, domClass, topic, json, TitlePane, render, tools, dialog, ContainerWidget, MultiInput, ComboBox, Form, Page, StandbyMixin, TabController, StackContainer, Text, Button, LabelPane, Template, OverwriteLabel, UMCPBundle, cache, _ ) {
+], function(declare, lang, array, on, Deferred, all, when, construct, domClass, topic, json, TitlePane, render, tools, dialog, ContainerWidget, MultiInput, ComboBox, Form, Page, LinkList, StandbyMixin, TabController, StackContainer, Text, Button, LabelPane, Template, OverwriteLabel, UMCPBundle, cache, _ ) {
var _StandbyPage = declare([Page, StandbyMixin], {});
@@ -443,6 +444,28 @@
}));
},
+ _renderReferencingObjectsTab: function() {
+ if (this.objectType != 'policies/policy' && this.objectType.indexOf('policies/') === 0) {
+ this._referencingObjectsTab = new Page({
+ title: _('Referencing objects'),
+ noFooter: true,
+ headerText: _('Objects referencing this policy object'),
+ });
+ this._addSubTab(this._referencingObjectsTab, 1);
+ when(this.ldapName, lang.hitch(this, '_createReferencingObjects'));
+ };
+ },
+
+ _createReferencingObjects: function(ldapName) {
+ var referencingObjects = new LinkList({
+ dynamicValues: "udm/policy/referencing_objects",
+ dynamicOptions: {
+ objectDN_policy: ldapName,
+ },
+ });
+ this._referencingObjectsTab.addChild(referencingObjects);
+ },
+
_renderPolicyTab: function(policies) {
this._policyWidgets = {};
if (policies && policies.length) {
@@ -1022,7 +1045,8 @@
}));
},
- _addSubTab: function(page) {
+ _addSubTab: function(page, index) {
+ index = index || this._tabs.getChildren().length;
var tabController = new TabController({
region: 'nav',
containerId: this._tabs.id,
@@ -1037,7 +1061,7 @@
page.addChild(page.position_text);
page.own(page.position_text);
- this._tabs.addChild(page);
+ this._tabs.addChild(page, index);
this.own(page);
},
@@ -1118,6 +1142,7 @@
this._autoUpdateTabTitle(widgets);
this._renderSubTabs(widgets, layout, metaInfo).then(lang.hitch(this, function() {
this._renderPolicyTab(policies);
+ this._renderReferencingObjectsTab();
this._renderForm(widgets);
this._renderMultiEditCheckBoxes(widgets);
this._registerOptionWatchHandler();
--- umc/python/udm/__init__.py (Revision 68436)
+++ umc/python/udm/__init__.py (Arbeitskopie)
@@ -60,6 +60,7 @@
import univention.admin.modules as udm_modules
import univention.admin.objects as udm_objects
import univention.admin.uexceptions as udm_errors
+import univention.admin.syntax as udm_syntax
from univention.config_registry import handler_set
@@ -851,6 +852,16 @@
module = self._get_module_by_request(request)
return module.policies
+ @sanitize(
+ objectDN_policy=LDAPSearchSanitizer(use_asterisks=False)
+ )
+ @simple_response
+ def policy_referencing_objects(self, objectDN_policy):
+ search_filter = "(&(objectClass=univentionPolicyReference)(univentionPolicyReference=%s))" % objectDN_policy
+ search_options = {"filter": search_filter, "viewonly": True}
+ syntax = udm_syntax.LDAP_Search(**search_options)
+ return read_syntax_choices(syntax)
+
def validate(self, request):
"""Validates the correctness of values for properties of the
given object type. Therefor the syntax definition of the properties is used.
--- umc/python/udm/udm_ldap.py (Revision 68436)
+++ umc/python/udm/udm_ldap.py (Arbeitskopie)
@@ -627,21 +627,9 @@
value = description_property.syntax.tostring(value)
return value
- def is_policy_module(self):
- return self.name.startswith('policies/') and self.name != 'policies/policy'
-
def get_layout(self, ldap_dn=None):
"""Layout information"""
layout = getattr(self.module, 'layout', [])
- if ldap_dn is not None:
- mod = get_module(None, ldap_dn)
- if mod is not None and self.name == mod.name and self.is_policy_module():
- layout = copy.copy(layout)
- tab = udm_layout.Tab(_('Referencing objects'), _('Objects referencing this policy object'),
- layout=['_view_referencing_objects']
- )
- layout.append(tab)
-
if layout and isinstance(layout[0], udm.tab):
return self._parse_old_layout(layout)
@@ -695,34 +683,6 @@
if iprop['id'] in inLayout:
properties.append(iprop)
- if ldap_dn:
- # hack reference list for policies into items
- if self.is_policy_module():
- # create syntax object
- syntax = udm_syntax.LDAP_Search(
- filter='(&(objectClass=univentionPolicyReference)(univentionPolicyReference=%s))' % ldap_dn,
- viewonly=True)
-
- # create item
- item = {
- 'id': '_view_referencing_objects',
- 'label': '',
- 'description': '',
- 'syntax': syntax.name,
- 'size': syntax.size,
- 'required': False,
- 'editable': False,
- 'options': [],
- 'readonly': False,
- 'searchable': False,
- 'multivalue': True,
- 'identifies': False,
- }
-
- # read UCR configuration
- item.update(widget(syntax, item))
- properties.append(item)
-
return properties
@property
--- umc/udm.xml (Revision 68436)
+++ umc/udm.xml (Arbeitskopie)
@@ -104,6 +104,7 @@
+