;ò È©@c@spdZdklZlZdklZdklZdklZdkl Z dk l Z dk l Z dklZd klZlZd klZd klZd kZd k Zd kZd kZd kZd kZd kZd kZd eed„Zdeed„Z deiei fd„ƒYZ!de!fd„ƒYZ"de!fd„ƒYZ#ee"ƒee#ƒd S(sGroupUserFolder product(s MessageDialogsDTMLFile(sClassSecurityInfo(sInitializeClass(sImplicit(s Persistent(s RoleManager(sItem(sPropertyManager(s ObjectManagers SimpleItem(sDateTime(s ImageFileNsUsersc Ks‡t|ƒ}|iƒ}y|i||ƒWn(tdddddd|dƒSnX|tj o|di |i ƒd ƒnd S( s stitles Item Existssmessages/This object already contains a GRUFUsers Foldersactions%s/manage_mainsURL1sRESPONSEs /manage_mainN( s GRUFUserssidsfsselfsthiss _setObjects MessageDialogsREQUESTsNonesredirects absolute_url(sselfsidsdtselfsREQUESTsignoredsf((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysmanage_addGRUFUsers#s    sGroupsc Ks‡t|ƒ}|iƒ}y|i||ƒWn(tdddddd|dƒSnX|tj o|di |i ƒd ƒnd S( s stitles Item Existssmessages0This object already contains a GRUFGroups Foldersactions%s/manage_mainsURL1sRESPONSEs /manage_mainN( s GRUFGroupssidsfsselfsthiss _setObjects MessageDialogsREQUESTsNonesredirects absolute_url(sselfsidsdtselfsREQUESTsignoredsf((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysmanage_addGRUFGroups/s    s GRUFFoldercBs£tZdZdZedeƒƒZhdd<dd Return true if an acl_users is inside s acl_usersiN(sselfs objectIdssNone(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysisValidSss header_textcCsdSdS(sz header_text(self,) => Text that appears in the content's view heading zone sN((sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys header_text\scCs?d|iƒj odd|iƒf‚n|idƒSdS(sX getUserFolder(self,) => get the underlying user folder, UNRESTRICTED ! s acl_userss ValueErrors/Please put an acl_users in %s before using GRUFN(sselfs objectIdssgetIdsrestrictedTraverse(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys getUserFoldercscCs)d|iƒjo|iƒSnfSdS(s getUserNames(self,) => None We override this to prevent SimpleUserFolder to use GRUF's getUserNames() method. It's, of course, still possible to override a getUserNames method with SimpleUserFolder: just call it 'new_getUserNames'. snew_getUserNamesN(sselfs objectIdssnew_getUserNames(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys getUserNamesls(s__name__s __module__sisAnObjectManagersisPrincipiaFolderishsDTMLFilesglobalss manage_mains SimpleItemsItemsmanage_optionssClassSecurityInfossecuritysNones__init__sgetIdsgetUserSourceIdsisValids declarePublics header_texts getUserFolders getUserNames(((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys GRUFFolder;s%        s GRUFUserscBsltZdZdZdZeiZdeee i fd„ƒYZ e ƒZ e Z d„Z d„Zd„ZRS(s1 GRUFUsers : GRUFFolder that holds users s GRUFUserssUserss C__ac_roles__cBstZdZd„ZRS(s§ __ac_roles__ dynastring. Do not forget to set _target to class instance. XXX DynaList is surely not efficient but it's the only way I found to do what I wanted easily. Someone should take a look to PerstList instead to see if it's possible to do the same ? (ie. having a list which elements are the results of a method call). However, even if DynaList is not performant, it's not a critical point because this list is meant to be looked at only when a User object is looked at INSIDE GRUF (especially to set groups a user belongs to). So in practice only used within ZMI. cCs|iƒSdS(N(sselfsuserdefined_roles(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysdata˜s(s__name__s __module__s__doc__sdata(((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys C__ac_roles__‡s cCs*d|iƒj odSnd}|SdS(sz header_text(self,) => Text that appears in the content's view heading zone s acl_userssEPlease put an acl_users here before ever starting to use this object.s¨In this folder, groups are seen as ROLES from user's view. To put a user into a group, affect him a role that matches his group.
N(sselfs objectIdssret(sselfsret((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys header_text s cCs|iidƒƒSdS(sO listGroups(self,) => return a list of groups defined as roles s listGroupsN(sselfsGroupssrestrictedTraverse(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys listGroups°scCs|iƒSdS(s!Return list of user-defined rolesN(sselfs listGroups(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysuserdefined_roles·s(s__name__s __module__s__doc__s meta_types default_ids GRUFFoldersmanage_optionss PersistentsImplicitsDynaLists C__ac_roles__sac_roless __ac_roles__s header_texts listGroupssuserdefined_roles(((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys GRUFUsers}s     s GRUFGroupscBsutZdZdZdZdZdeeeifd„ƒYZ e ƒZ e Z d„Z d„Z dd „Zd „ZRS( s3 GRUFGroups : GRUFFolder that holds groups s GRUFGroupssGroupssgroup_s C__ac_roles__cBstZdZd„ZRS(s§ __ac_roles__ dynastring. Do not forget to set _target to class instance. XXX DynaList is surely not efficient but it's the only way I found to do what I wanted easily. Someone should take a look to PerstList instead to see if it's possible to do the same ? (ie. having a list which elements are the results of a method call). However, even if DynaList is not performant, it's not a critical point because this list is meant to be looked at only when a User object is looked at INSIDE GRUF (especially to set groups a user belongs to). So in practice only used within ZMI. cCs|iƒSdS(N(sselfsuserdefined_roles(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysdata×s(s__name__s __module__s__doc__sdata(((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys C__ac_roles__Æs cCs*d}d|iƒj odSn|SdS(sz header_text(self,) => Text that appears in the content's view heading zone ss acl_userssEPlease put an acl_users here before ever starting to use this object.N(sretsselfs objectIds(sselfsret((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys header_textßs cCs|ii|ƒSdS(s† _getGroup(self, id) => same as getUser() but... with a group :-) This method will return an UNWRAPPED object N(sselfs acl_userssgetUsersid(sselfsid((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys _getGroupêsicCs[| o|iiƒSn?g}x1|iiƒD] }|id|i|fƒq/W|SdS(sW Return a list of available groups. Group names are prefixed ! s%s%sN(sprefixedsselfs acl_userss getUserNamessretsgrpsappends _group_prefix(sselfsprefixedsgrpsret((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys listGroupsòscCs|iƒSdS(s!Return list of user-defined rolesN(sselfs listGroups(sself((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pysuserdefined_roless(s__name__s __module__s__doc__s meta_types default_ids _group_prefixs PersistentsImplicitsDynaLists C__ac_roles__sac_roless __ac_roles__s header_texts _getGroups listGroupssuserdefined_roles(((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys GRUFGroups¼s    ($s__doc__sGlobalss MessageDialogsDTMLFiles AccessControlsClassSecurityInfosInitializeClasss AcquisitionsImplicits PersistentsAccessControl.Roles RoleManagersOFS.SimpleItemsItemsOFS.PropertyManagersPropertyManagersOFSs ObjectManagers SimpleItemsDateTimesApps ImageFilesDynaListswebdav.CollectionswebdavsProductssossstringsshutilsrandomsNonesmanage_addGRUFUserssmanage_addGRUFGroupss GRUFFolders GRUFUserss GRUFGroups(swebdavsrandoms RoleManagersDateTimesmanage_addGRUFGroupssshutils GRUFGroupss GRUFUserss GRUFFoldersInitializeClasssImplicitsstringsmanage_addGRUFUserss ObjectManagersClassSecurityInfos PersistentsDTMLFilesItemsProductss MessageDialogs AccessControls SimpleItemsDynaLists ImageFilesPropertyManagersos((sN/mnt/gmirror/ports/www/zope-groupuserfolder/work/GroupUserFolder/GRUFFolder.pys?s2                 B?I