} property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=maintenanceFixedAttributes), emptyAttributesProperty(syntax=maintenanceFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('General'), _('Maintenance settings'), layout=[ Group(_('General maintenance settings'), layout=[ 'name', 'startup', 'shutdown', 'cron', 'reboot', ['month', 'weekday'], ['day', 'hour'], 'minute' ]), ]), policy_object_tab() ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('startup', 'univentionInstallationStartup', None, univention.admin.mapping.ListToString) mapping.register('shutdown', 'univentionInstallationShutdown', None, univention.admin.mapping.ListToString) mapping.register('reboot', 'univentionInstallationReboot', None, univention.admin.mapping.ListToString)
may_change=True, identifies=False, ), } layout = [ Tab(_('General'), _('Basic values'), layout=[ Group(_('General UDM syntax settings'), layout=[ ["name"], ["filename"], ["data"], ["messagecatalog"], ]), Group(_('Metadata'), layout=[ ["package"], ["packageversion"], ["appidentifier"], ]), Group(_('UCS Version Dependencies'), layout=[ ["ucsversionstart"], ["ucsversionend"], ]), Group(_('Activated'), layout=[ ["active"], ]), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('filename', 'univentionUDMSyntaxFilename', None, univention.admin.mapping.ListToString) mapping.register('data', 'univentionUDMSyntaxData', univention.admin.mapping.mapBase64, univention.admin.mapping.unmapBase64)
if hasattr(pol, 'module'): childmodules.append(pol.module) virtual = 1 property_descriptions = { 'name': univention.admin.property(short_description=_('Name'), long_description='', syntax=univention.admin.syntax.policyName, multivalue=False, include_in_default_search=True, options=[], required=True, may_change=True, identifies=True) } layout = [Tab(_('General'), _('Basic settings'), layout=["name"])] mapping = univention.admin.mapping.mapping() class object(univention.admin.handlers.simpleLdap): module = module def lookup(co, lo, filter_s, base='', superordinate=None, scope='sub', unique=False,
'range': univention.admin.property( short_description=_('Dynamic address assignment'), long_description= _('Define a pool of addresses available for dynamic address assignment.' ), syntax=univention.admin.syntax.IPv4_AddressRange, multivalue=True, ), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('General DHCP shared subnet settings'), layout=[['subnet', 'subnetmask'], 'broadcastaddress', 'range']), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('subnet', 'cn', None, univention.admin.mapping.ListToString) mapping.register('range', 'dhcpRange', rangeMap, rangeUnmap) mapping.register('subnetmask', 'dhcpNetMask', None, univention.admin.mapping.ListToString) mapping.register('broadcastaddress', 'univentionDhcpBroadcastAddress', None, univention.admin.mapping.ListToString) add_dhcp_options(__name__)
short_description=_('Application'), long_description=_( 'Specifies that the option belongs to a UCS Application'), syntax=univention.admin.syntax.boolean, ), } layout = [ Tab(_('General'), _('Basic values'), layout=[ Group(_('General extended options settings'), layout=[ 'name', ["shortDescription", "longDescription"], [ "translationShortDescription", "translationLongDescription" ], ["default", "editable", "isApp"], ['module', "objectClass"], ]), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('shortDescription', 'univentionUDMOptionShortDescription', None, univention.admin.mapping.ListToString) mapping.register('longDescription', 'univentionUDMOptionLongDescription', None, univention.admin.mapping.ListToString)
} layout = [ Tab(_('General'), _('Portal options'), layout=[ Group(_('Name'), layout=[ ['name'], ['displayName'], ]), Group(_('Visibility'), layout=[ ['portalComputers'], ]), Group(_('Appearance'), layout=[ ['logo'], ['background'], ['cssBackground'], ['fontColor'], ['autoLayoutCategories'], ]), Group(_('General Content'), layout=[ # ["showMenu"], # ["showSearch"], # ["showLogin"], ['defaultLinkTarget'], ['showApps'], # ["showServers"], ['links'], ]), ]), Tab(_('Portal categories and entries'), _('The categories and entries that are shown on this portal'), layout=[ ['content'], ]),
short_description=_('MS WMI Source Organization'), long_description='', syntax=univention.admin.syntax.string, multivalue=False, options=[], required=False, may_change=True, identifies=False), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('General'), layout=[ ["name", "description"], ["displayName"], ]), ]), Tab( _('WMI filter'), _('MS WMI filter'), advanced=True, layout=[ Group( _('WMI filter'), layout=[ ['id'], ['author'], ['creationDate'],
multivalue=True, ), } property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=slavePackagesFixedAttributes), emptyAttributesProperty(syntax=slavePackagesFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('General'), policy_short_description, layout=[ Group(_('General Replica Node packages settings'), layout=['name', 'slavePackages', 'slavePackagesRemove']), ]), policy_object_tab() ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('slavePackages', 'univentionSlavePackages') mapping.register('slavePackagesRemove', 'univentionSlavePackagesRemove') register_policy_mapping(mapping) class object(univention.admin.handlers.simplePolicy): module = module
'mailPrimaryAddress': univention.admin.property( short_description=_('E-Mail address'), long_description='', syntax=univention.admin.syntax.emailAddressValidDomain, include_in_default_search=True, ), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('General IMAP mail folder settings'), layout=[ ["name", "mailDomain"], ["mailHomeServer"], ["mailQuota"], ["mailPrimaryAddress"], ]), ]), Tab(_('Access Rights'), _('Access rights for shared folder'), layout=[ Group(_('Access Rights'), layout=[ "sharedFolderUserACL", "sharedFolderGroupACL", ]), ]) ]
short_description=_('Unsearchable'), long_description='', syntax=univention.admin.syntax.boolean, multivalue=0, options=[], required=0, may_change=1, identifies=0 ), } layout = [ Tab(_('General'),_('Basic Values'), layout = [ Group( _( 'General' ), layout = [ "name", [ "shortDescription", "longDescription" ], [ "translationShortDescription", "translationLongDescription" ] ] ), ] ), Tab(_('UDM Web'),_('Settings for UDM web interface'), layout = [ Group( _( 'Tab layout' ), layout = [ [ "tabName", "tabPosition" ], "translationTabName", ] ), Group( _( 'Group layout' ), layout = [ [ 'groupName', 'groupPosition' ], 'translationGroupName', ] ), Group( _( 'Extended settings' ), layout = [ [ "overwritePosition", "fullWidth" ], [ "overwriteTab", "tabAdvanced" ],
options=['samba']), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('Computer account'), layout=[ ['name', 'description'], ['operatingSystem', 'operatingSystemVersion'], 'inventoryNumber', ]), Group(_('Network settings '), layout=[ 'network', [ 'mac', 'ip', ], ]), Group(_('DNS Forward and Reverse Lookup Zone'), layout=[ 'dnsEntryZoneForward', 'dnsEntryZoneReverse', ]), Group(_('DHCP'), layout=['dhcpEntryZone']), ]), Tab(_('Account'), _('Account'), advanced=True, layout=['password', 'ntCompatibility', 'primaryGroup']),
'msGPOMachineExtensionNames': univention.admin.property( short_description=_('MS Group Policy Machine Extension Names'), long_description='', syntax=univention.admin.syntax.string, multivalue=0, options=[], required=0, may_change=1, identifies=0 ), } layout = [ Tab(_('General'),_('Basic settings'), layout = [ Group( _( 'General' ), layout = [ [ "name", "description" ], [ "displayName" ], ] ), ] ), Tab(_('GPO settings'),_('MS GPO settings'), advanced = True, layout = [ Group( _( 'GPO settings' ), layout = [ [ 'msGPOFlags' ], [ 'msGPOVersionNumber' ], [ 'msGPOSystemFlags' ], [ 'msGPOFunctionalityVersion' ], [ 'msGPOFileSysPath' ], [ 'msGPOMachineExtensionNames' ], ] ), ] ) ] mapping=univention.admin.mapping.mapping()
} property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=dhcp_statementsFixedAttributes), emptyAttributesProperty(syntax=dhcp_statementsFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('DHCP statements'), _('Miscellaneous DHCP statements'), layout=[ Group(_('General DHCP statements settings'), layout=[ 'name', ['authoritative', 'boot-unknown-clients'], ['pingCheck', 'getLeaseHostnames'], ['serverIdentifier', 'serverName'] ]), ]), policy_object_tab() ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('authoritative', 'univentionDhcpAuthoritative', None, univention.admin.mapping.ListToString) mapping.register('boot-unknown-clients', 'univentionDhcpBootUnknownClients', None, univention.admin.mapping.ListToString) mapping.register('pingCheck', 'univentionDhcpPingCheck', None, univention.admin.mapping.ListToString)
required=False, may_change=True, identifies=False), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('Computer account'), layout=[ ['name', 'description'], 'inventoryNumber', ]), Group(_('Network settings '), layout=[ 'network', 'mac', 'ip', ]), Group(_('DNS Forward and Reverse Lookup Zone'), layout=[ 'dnsEntryZoneForward', 'dnsEntryZoneReverse', ]), Group(_('DHCP'), layout=['dhcpEntryZone']), ]), Tab(_('Groups'), _('Group memberships'), advanced=True, layout=[ "groups", ]),
dontsearch=True, required=True, ), 'defaultKdeProfiles': univention.admin.property( short_description=_('Default KDE Profiles'), long_description='', syntax=univention.admin.syntax.string, multivalue=True, ), } layout = [ Tab(_('General'), _('Basic values'), layout=[ Group(_('Default settings description'), layout=["name"]), ]), Tab(_('Primary Groups'), _('Primary Groups'), layout=[ Group(_('Primary Groups'), layout=[ "defaultGroup", "defaultComputerGroup", "defaultDomainControllerMBGroup", "defaultDomainControllerGroup", "defaultMemberServerGroup", "defaultClientGroup" ]), ]), Tab(_('KDE Profiles'), _('KDE Profiles'),
} property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=dhcp_routingFixedAttributes), emptyAttributesProperty(syntax=dhcp_routingFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('General'), _('DHCP routing'), layout=[ Group(_('General DHCP routing settings'), layout=[ 'name', 'routers', ]), ]), policy_object_tab() ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('routers', 'univentionDhcpRouters') register_policy_mapping(mapping) class object(univention.admin.handlers.simplePolicy): module = module
} property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=adminFixedAttributes), emptyAttributesProperty(syntax=adminFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('General'), _('Univention Directory Manager settings'), layout=[ Group(_('General Univention Directory Manager container settings'), layout=[ 'name', 'listModules', ]), ]), policy_object_tab(), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('listModules', 'univentionAdminListModules') register_policy_mapping(mapping) class object(univention.admin.handlers.simplePolicy): module = module
short_description=_('Append NTACLs for Samba file shares'), long_description= _('Additional NTACL elements for the base directory of Samba file shares.' ), syntax=univention.admin.syntax.string, multivalue=True, options=['samba'], ), } layout = [ Tab(_('General'), _('General settings'), layout=[ Group(_('General directory share settings'), layout=[ 'name', ['host', 'path'], ['owner', 'group'], 'directorymode' ]), ]), Tab(_('NFS'), _('General NFS settings'), layout=[ Group(_('NFS'), layout=[ 'writeable', 'subtree_checking', 'root_squash', 'sync', 'nfs_hosts', ]),
} property_descriptions.update( dict([ requiredObjectClassesProperty(), prohibitedObjectClassesProperty(), fixedAttributesProperty(syntax=registryFixedAttributes), emptyAttributesProperty(syntax=registryFixedAttributes), ldapFilterProperty(), ])) layout = [ Tab(_('General'), _('These configuration settings will be set on the local UCS system.'), layout=[ Group(_('General Univention Configuration Registry settings'), layout=[ 'name', 'registry', ]), ]), policy_object_tab() ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) register_policy_mapping(mapping) class object(univention.admin.handlers.simplePolicy): module = module
options=[], required=False, may_change=True, identifies=False, ), } layout = [ Tab(_('General'), _('General settings'), layout=[ Group(_('General printer share settings'), layout=[ ['name', 'sambaName'], 'spoolHost', 'uri', ['producer', 'model'], ['location', 'description'], [ 'setQuota', ], ['pagePrice', 'jobPrice'], ]), ]), Tab(_('Access control'), _('Access control for users and groups'), layout=[ Group(_('Access control'), layout=[ 'ACLtype', 'ACLUsers', 'ACLGroups',
'packageList': univention.admin.property( short_description=_('Package List'), long_description=_('Package List'), syntax=univention.admin.syntax.string, multivalue=True, dontsearch=True, ), } layout = [ Tab(_('General'), _('Package List'), layout=[ Group(_('General package list settings'), layout=[ 'name', 'packageList', ]), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('packageList', 'univentionPackageDefinition') class object(univention.admin.handlers.simpleLdap): module = module
short_description=_('Server name'), long_description=_('The name of the server, which should handle this DHCP service.'), syntax=univention.admin.syntax.string, multivalue=False, include_in_default_search=True, options=[], required=True, may_change=True, identifies=True ), } layout = [ Tab(_('General'), _('General settings'), layout=[ Group(_('DHCP server description'), layout=[ 'server' ]), ]) ] mapping = univention.admin.mapping.mapping() mapping.register('server', 'cn', None, univention.admin.mapping.ListToString) class object(DHCPBase): module = module def _ldap_addlist(self): searchBase = self.position.getDomain() if self.lo.searchDn(base=searchBase, filter=filter_format('(&(objectClass=dhcpServer)(cn=%s))', [self.info['server']])): raise univention.admin.uexceptions.dhcpServerAlreadyUsed(self.info['server'])
long_description='', syntax=dhcp_dnsupdateFixedAttributes, multivalue=1, options=[], required=0, may_change=1, identifies=0 ), } layout = [ Tab(_('DNS Update'), _('Dynamic DNS update'), layout = [ Group( _( 'General' ), layout = [ 'name', [ 'ddnsDomainname', 'ddnsRevDomainname' ], [ 'ddnsUpdates', 'ddnsUpdateStyle' ], [ 'ddnsDoForwardUpdate', 'updateStaticLeases' ], 'clientUpdates' ] ), ] ), Tab(_('Object'),_('Object'), advanced = True, layout = [ [ 'requiredObjectClasses' , 'prohibitedObjectClasses' ], [ 'fixedAttributes', 'emptyAttributes' ] ] ), ] mapping=univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('ddnsHostname', 'univentionDhcpDdnsHostname', None, univention.admin.mapping.ListToString) mapping.register('ddnsDomainname', 'univentionDhcpDdnsDomainname', None, univention.admin.mapping.ListToString) mapping.register('ddnsRevDomainname', 'univentionDhcpDdnsRevDomainname', None, univention.admin.mapping.ListToString)
syntax=univention.admin.syntax.printerModel, multivalue=1, include_in_default_search=1, options=[], dontsearch=1, required=0, may_change=1, identifies=0, ), } layout = [ Tab(_('General'), _('Printer List'), layout=[ Group(_('General'), layout=[ 'name', 'printmodel', ]), ]), ] def unmapDriverList(old): return map(lambda x: shlex.split(x), old) def mapDriverList(old): str = [] for i in old: str.append('"%s" "%s"' % (i[0], i[1])) return str
short_description=_('Service name'), long_description=_('A unique name for this DHCP service.'), syntax=univention.admin.syntax.string, multivalue=False, include_in_default_search=True, options=[], required=True, may_change=False, identifies=True ), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('DHCP service description'), layout=[ 'service', ]), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('service', 'cn', None, univention.admin.mapping.ListToString) add_dhcp_options(__name__) class object(DHCPBase): module = module def __init__(self, co, lo, position, dn='', superordinate=None, attributes=[]): univention.admin.handlers.simpleLdap.__init__(self, co, lo, position, dn, superordinate, attributes=attributes)
univention.admin.property(short_description=_('Stored LDAP Attribute'), long_description='', syntax=univention.admin.syntax.string, multivalue=False, options=[], required=False, may_change=True, identifies=False), } layout = [ Tab(_('General'), _('Basic values'), layout=[ Group(_('General syntax definition settings'), layout=[["name", "description"], ["filter", "base"]]), Group(_('Display'), layout=["attribute", "ldapattribute"]), Group(_('Storage'), layout=["value", "ldapvalue"]), Group(_('Options'), layout=["viewonly", "addEmptyValue"]) ]), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) mapping.register('filter', 'univentionSyntaxLDAPFilter', None, univention.admin.mapping.ListToString) mapping.register('base', 'univentionSyntaxLDAPBase', None, univention.admin.mapping.ListToString) mapping.register('viewonly', 'univentionSyntaxViewOnly', None, univention.admin.mapping.ListToString) mapping.register('description', 'univentionSyntaxDescription', None,
univention.admin.property( short_description=_('Shared network name'), long_description=_('A unique name for this shared network.'), syntax=univention.admin.syntax.uid, multivalue=False, include_in_default_search=True, options=[], required=True, may_change=False, identifies=True) } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('DHCP shared network description'), layout=['name']), ]), ] mapping = univention.admin.mapping.mapping() mapping.register('name', 'cn', None, univention.admin.mapping.ListToString) add_dhcp_options(__name__) class object(DHCPBase): module = module @staticmethod def unmapped_lookup_filter():
syntax=univention.admin.syntax.integer, dontsearch=True, options=['samba']), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('Computer account'), layout=[ ['name', 'description'], 'inventoryNumber', ]), Group(_('Network settings '), layout=[ 'network', 'mac', 'ip', ]), Group(_('DNS Forward and Reverse Lookup Zone'), layout=[ 'dnsEntryZoneForward', 'dnsEntryZoneReverse', ]), Group(_('DHCP'), layout=['dhcpEntryZone']), ]), Tab(_('Account'), _('Account'), advanced=True, layout=['password', 'primaryGroup']), Tab(_('Unix account'), _('Unix account settings'),
required=0, may_change=1), 'a': univention.admin.property(short_description=_('IP addresses'), long_description='', syntax=univention.admin.syntax.ipAddress, multivalue=1, options=[], required=0, may_change=1), } layout = [ Tab(_('General'), _('Basic settings'), layout=[ Group(_('General'), layout=['zone', 'nameserver', 'zonettl']), ]), Tab(_('Start of authority'), _('Primary name server information'), layout=[ Group(_('Start of authority'), layout=[ 'contact', 'serial', ['refresh', 'retry'], ['expire', 'ttl'] ]), ]), Tab(_('IP addresses'), _('IP addresses of the zone'), layout=[ Group(_('IP addresses of the zone'), layout=['a']),
def update_extended_attributes(lo, module, position): # add list of tabnames created by extended attributes if not hasattr(module, 'extended_attribute_tabnames'): module.extended_attribute_tabnames = [] # append UDM extended attributes properties4tabs = {} overwriteTabList = [] module.extended_udm_attributes = [] for dn, attrs in lo.search( base = position.getDomainConfigBase(), filter='(&(objectClass=univentionUDMProperty)(univentionUDMPropertyModule=%s)(univentionUDMPropertyVersion=2))' % name(module) ): # get CLI name pname=attrs['univentionUDMPropertyCLIName'][0] # get syntax propertySyntaxString=attrs.get('univentionUDMPropertySyntax', [''])[0] if propertySyntaxString and hasattr(univention.admin.syntax, propertySyntaxString): propertySyntax = getattr(univention.admin.syntax, propertySyntaxString) else: if lo.search( filter = univention.admin.syntax.LDAP_Search.FILTER_PATTERN % propertySyntaxString ): propertySyntax = univention.admin.syntax.LDAP_Search( propertySyntaxString ) else: propertySyntax = univention.admin.syntax.string() # get hooks propertyHookString=attrs.get('univentionUDMPropertyHook', [''])[0] propertyHook = None if propertyHookString and hasattr(univention.admin.hook, propertyHookString): propertyHook = getattr(univention.admin.hook, propertyHookString)() # get default value propertyDefault = attrs.get('univentionUDMPropertyDefault', ['']) # value may change try: mayChange = int( attrs.get('univentionUDMPropertyValueMayChange', ['0'])[0] ) except: ud.debug(ud.ADMIN, ud.ERROR, 'modules update_extended_attributes: ERROR: processing univentionUDMPropertyValueMayChange throwed exception - assuming mayChange=0') mayChange = 0 # value is editable (only via hooks or direkt module.info[] access) editable = attrs.get('univentionUDMPropertyValueNotEditable', ['0'])[0] not in ['1', 'TRUE'] # value is required valueRequired = ( attrs.get('univentionUDMPropertyValueRequired',[ '0' ])[0].upper() in [ '1', 'TRUE' ] ) # value not available for searching try: doNotSearch = int( attrs.get('univentionUDMPropertyDoNotSearch',[ '0' ])[0] ) except: ud.debug(ud.ADMIN, ud.ERROR, 'modules update_extended_attributes: ERROR: processing univentionUDMPropertyDoNotSearch throwed exception - assuming doNotSearch=0') doNotSearch = 0 # check if CA is multivalue property if attrs.get('univentionUDMPropertyMultivalue', [''])[0] == '1': multivalue = 1 map_method = None else: multivalue = 0 map_method = univention.admin.mapping.ListToString # single value ==> use only first value propertyDefault = propertyDefault[0] # Show this attribute in UDM/UMC? if attrs.get('univentionUDMPropertyLayoutDisable', [''])[0] == '1': layoutDisabled = True else: layoutDisabled = False # get current language lang = locale.getlocale( locale.LC_MESSAGES )[0] ud.debug(ud.ADMIN, ud.INFO, 'modules update_extended_attributes: LANG = %s' % str(lang)) if lang: lang = lang.replace('_','-').lower() else: lang = 'xxxxx' # get descriptions shortdesc = attrs.get('univentionUDMPropertyTranslationShortDescription;entry-%s' % lang, attrs['univentionUDMPropertyShortDescription'] )[0] longdesc = attrs.get('univentionUDMPropertyTranslationLongDescription;entry-%s' % lang, attrs.get('univentionUDMPropertyLongDescription', ['']))[0] # create property # FIXME: must add attribute to honor fullWidth (should be defined by the syntax) module.property_descriptions[pname] = univention.admin.property( short_description = shortdesc, long_description = longdesc, syntax = propertySyntax, multivalue = multivalue, options = attrs.get('univentionUDMPropertyOptions',[]), required = valueRequired, may_change = mayChange, dontsearch = doNotSearch, identifies = 0, default = propertyDefault, editable = editable ) # add LDAP mapping if attrs['univentionUDMPropertyLdapMapping'][0].lower() != 'objectClass'.lower(): module.mapping.register(pname, attrs['univentionUDMPropertyLdapMapping'][0], None, map_method) else: module.mapping.register(pname, attrs['univentionUDMPropertyLdapMapping'][0], univention.admin.mapping.nothing, univention.admin.mapping.nothing) if hasattr( module, 'layout' ): tabname = attrs.get('univentionUDMPropertyTranslationTabName;entry-%s' % lang, attrs.get('univentionUDMPropertyLayoutTabName',[ _('Custom') ]) )[0] overwriteTab = ( attrs.get('univentionUDMPropertyLayoutOverwriteTab',[ '0' ])[0].upper() in [ '1', 'TRUE' ] ) # in the first generation of extended attributes of version 2 # this field was a position defining the attribute to # overwrite. now it is the name of the attribute to overwrite overwriteProp = attrs.get( 'univentionUDMPropertyLayoutOverwritePosition', [ '' ] )[ 0 ] if overwriteProp == '0': overwriteProp = None fullWidth = ( attrs.get('univentionUDMPropertyLayoutFullWidth',[ '0' ])[0].upper() in [ '1', 'TRUE' ] ) deleteObjectClass = ( attrs.get('univentionUDMPropertyDeleteObjectClass', ['0'])[0].upper() in [ '1', 'TRUE' ] ) tabAdvanced = ( attrs.get('univentionUDMPropertyLayoutTabAdvanced',[ '0' ])[0].upper() in [ '1', 'TRUE' ] ) groupname = attrs.get( 'univentionUDMPropertyTranslationGroupName;entry-%s' % lang, attrs.get( 'univentionUDMPropertyLayoutGroupName', [ '' ] ) )[ 0 ] try: groupPosition = int( attrs.get( 'univentionUDMPropertyLayoutGroupPosition', [ '-1' ] )[ 0 ] ) except TypeError: groupPosition = 0 ud.debug( ud.ADMIN, ud.INFO, 'update_extended_attributes: extended attribute (LDAP): %s' % str( attrs ) ) # only one is possible ==> overwriteTab wins if overwriteTab and overwriteProp: overwriteProp = None # add tab name to list if missing if not tabname in properties4tabs and not layoutDisabled: properties4tabs[ tabname ] = [] ud.debug(ud.ADMIN, ud.INFO, 'modules update_extended_attributes: custom fields init for tab %s' % tabname) # remember tab for purging if required if overwriteTab and not tabname in overwriteTabList and not layoutDisabled: overwriteTabList.append(tabname) if not layoutDisabled: # get position on tab # -1 == append on top tabPosition = attrs.get( 'univentionUDMPropertyLayoutPosition', [ '-1' ] )[ 0 ] try: tabPosition = int( tabPosition ) except: ud.debug(ud.ADMIN, ud.WARN, 'modules update_extended_attributes: custom field for tab %s: failed to convert tabNumber to int' % tabname) tabPosition = -1 if tabPosition == -1: for ea_layout in properties4tabs[ tabname ]: try: if ea_layout.position <= tabPosition: # CLEANUP, FIXME: pos is undefined! # does not break because of except: tabPosition = pos-1 except: ud.debug(ud.ADMIN, ud.WARN, 'modules update_extended_attributes: custom field for tab %s: failed to set tabPosition' % tabname) properties4tabs[ tabname ].append( EA_Layout( name = pname, tabName = tabname, position = tabPosition, advanced = tabAdvanced, overwrite = overwriteProp, fullWidth = fullWidth, groupName = groupname, groupPosition = groupPosition ) ) module.extended_udm_attributes.extend( [ univention.admin.extended_attribute( pname, attrs.get('univentionUDMPropertyObjectClass', [])[0], attrs['univentionUDMPropertyLdapMapping'][0], deleteObjectClass, propertySyntaxString, propertyHook ) ] ) # overwrite tabs that have been added by UDM extended attributes for tab in module.extended_attribute_tabnames: if not tab in overwriteTabList: overwriteTabList.append(tab) if properties4tabs: lastprio = -1000 # CLEANUP: unneeded # remove layout of tabs that have been marked for replacement removetab = [] # CLEANUP: unneeded for tab in module.layout: if tab.label in overwriteTabList: tab.layout = [] for tabname in properties4tabs.keys(): priofields = properties4tabs[ tabname ] priofields.sort() currentTab = None # get existing fields if tab has not been overwritten for tab in module.layout: if tab.label == tabname: # found tab in layout currentTab = tab # tab found ==> leave loop break else: # tab not found in current layout, so add it currentTab = Tab( tabname, tabname, advanced = True ) module.layout.append( currentTab ) # remember tabs that have been added by UDM extended attributes if not tabname in module.extended_attribute_tabnames: module.extended_attribute_tabnames.append( tabname ) # check if tab is empty ==> overwritePosition is impossible freshTab = len( currentTab.layout ) == 0 for ea_layout in priofields: if currentTab.advanced and not ea_layout.advanced: currentTab.advanced = False # if groupName is set check if it exists, otherwise create it if ea_layout.groupName: for item in currentTab.layout: if isinstance( item, ILayoutElement ) and item.label == ea_layout.groupName: break else: # group does not exist grp = Group( ea_layout.groupName ) if ea_layout.groupPosition > 0: currentTab.layout.insert( ea_layout.groupPosition - 1, grp ) else: currentTab.layout.append( grp ) # - existing property shall be overwritten AND # - tab is not new and has not been cleaned before AND # - position >= 1 (top left position is defined as 1) AND # - old property with given position exists if currentTab.exists( ea_layout.name ): continue elif ea_layout.overwrite and not freshTab: # we want to overwrite an existing property # in the global fields ... if not ea_layout.groupName: replaced, layout = currentTab.replace( ea_layout.overwrite, ea_layout.name, recursive = True ) if not replaced: # the property was not found so we'll append it currentTab.layout.append( ea_layout.label ) else: for item in currentTab.layout: if isinstance( item, ILayoutElement ) and item.label == ea_layout.groupName: replaced, layout = item.replace( ea_layout.overwrite, ea_layout.name ) if not replaced: # the property was not found so we'll append it item.append( ea_layout.label ) else: if not ea_layout.groupName: currentTab.insert( ea_layout.position, ea_layout.name ) else: for item in currentTab.layout: if isinstance( item, ILayoutElement ) and item.label == ea_layout.groupName: item.insert( ea_layout.position, ea_layout.name ) break # check for properties with the syntax class LDAP_Search for pname, prop in module.property_descriptions.items(): if prop.syntax.name == 'LDAP_Search': prop.syntax._load( lo ) if prop.syntax.viewonly: module.mapping.unregister( pname ) elif univention.admin.syntax.is_syntax( prop.syntax, univention.admin.syntax.complex ) and hasattr( prop.syntax, 'subsyntaxes' ): for text, subsyn in prop.syntax.subsyntaxes: if subsyn.name == 'LDAP_Search': subsyn._load( lo )
multivalue=True, include_in_default_search=True, options=[], dontsearch=False, required=False, may_change=True, identifies=False, ), } layout = [ Tab(_('General'), _('Printer List'), layout=[ Group(_('General printer driver list settings'), layout=[ 'name', 'printmodel', ]), ]), ] def unmapDriverList(old): return map(lambda x: shlex.split(x), old) def mapDriverList(old): str = [] for i in old: str.append('"%s" "%s"' % (i[0], i[1]))