--- basket/groups.py 2006/03/02 19:57:32 1.1 +++ basket/groups.py 2006/04/12 19:37:34 1.5 @@ -9,21 +9,53 @@ from types import * from AccessControl import SecurityManagement +import smtplib + +def sendForm(self,fromaddr,subject,content,nextPage="index_html",RESPONSE=None): + """sendform""" + fromaddr=fromaddr.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden + subject=subject.strip("\r\n\t") # sicherstellen dass keine zusaetzlichen headerzeilen eingefuegt werden + toaddrs=self.toAddrs + + subject="%s %s"%(self.subjectAdd,subject) + + msg = ("From: %s\r\nSubject: %s\r\nTo: %s\r\n\r\n" + % (fromaddr, subject, ", ".join(toaddrs))) + server = smtplib.SMTP("mail.mpiwg-berlin.mpg.de") + #server.set_debuglevel(1) + msg=msg+content + server.sendmail(fromaddr, toaddrs, msg) + server.quit() + + if RESPONSE: + RESPONSE.redirect(nextPage) class GroupFolder(Folder): """Folder which contains groups""" meta_type="GroupFolder" - def registerNewUser(self,user,password,email,forward_to=None,RESPONSE=None): + def registerNewUser(self,user,password,email='',forward_to=None,RESPONSE=None): """register a new user to the system, username and password, will be stored in the acl_users folder, additional information are added here.""" #TODO: check if user already exists in LDAP + #TODO: email is not registered yet, because MPIWGUserfolder is not working with CookieCrumbler #print [x for x in repr(self.acl_users.getUserNames())] + + if not (len(user.split("@")) ==2): + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddUserErrorInvalidEmail.zpt')).__of__(self) + return pt(user=user) + + if user in repr(self.acl_users.getUserNames()): - return "ERROR: username already exists" - self.acl_users.addUser(user,password,email) - + + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddUserErrorAlreadyExists.zpt')).__of__(self) + return pt(user=user) + + if user and password: + #self.acl_users.addUser(user,password,email) + self.aq_parent.acl_users._doAddUser(user, password, '', '') + add="user=%s"%user if forward_to.find("?")>-1: #already parameters @@ -41,15 +73,59 @@ class GroupFolder(Folder): return self.checkMembership(str(user), group) return False - def addUsersToGroups(self,users,groups): + def addKommaListOfUsersToGroup(self,users,group,remove=None,REQUEST=None,RESPONSE=None): + """add users to a group, users in komma separeted list""" + usersList=[x.lstrip().rstrip() for x in users.split(",")] + + self.addUsersToGroups(usersList,group,remove) + + if RESPONSE: + RESPONSE.redirect(REQUEST['HTTP_REFERER']) + + def addUsersToGroups(self,users,groups,remove=None): """add users to groups @param users: list of usernames @param groups: list of groupnames + @param remove: default None, if remove is set the actual + user list of the groups will be replaced by users otherwise users will be added. + if remove= protected then the actualuser can not be deleted. """ + + if type(groups) is not ListType: + groups=[groups] + for user in users: self.addUserToGroups(user,groups) + if remove: + for group in groups: + for user in self.getGroupsAndUsers().get(group,None): + if (user not in users): + if not ((remove=="protected") and (user==self.getActualUserName())): + self.removeUserFromGroups(user,group) + + def removeUserFromGroups(self,user,groups): + ''' + remove a user from a group + @param user: username + @param groups: list of groupnames + ''' + + #make sure that list of groups + print "remove",user,repr(groups) + if type(groups) is not ListType: + groups=[groups] + + groupObjects=self.ZopeFind(self,obj_ids=groups) + #group doesn't exist, return with false + if len(groupObjects)<1: + return False + + #otherwise add user to group + for groupObject in groupObjects: + groupObject[1].removeUser(user) + def addUserToGroups(self,user,groups): ''' Add a user to a group @@ -113,16 +189,29 @@ class GroupFolder(Folder): @param user: @param group: ''' + print "checking publish for user:",user,group,self.aq_parent.getId() + ret=False groups=self.ZopeFind(self,obj_metatypes=['Group'],obj_ids=[group]) #group doesn't exist + if group=="publish": + #special group, member is allowed to publish basket, at the moment all members of the admin group at root level + #member of publish + + return self.users.groupFolder.checkMembership(user,'admin') + if len(groups)<1: - return False + ret=False else: - print "check",groups[0][0],user,groups[0][1].aq_parent.aq_parent.getId() - return groups[0][1].isInGroup(user) + ret=groups[0][1].isInGroup(user) + if (not ret) and (self.aq_parent.getId()!='users'): + #teste ob mitglied in super group + return self.users.groupFolder.checkMembership(user,'admin') + else: + return ret + def returnUsers(self): """return all users of groups""" @@ -136,6 +225,19 @@ class GroupFolder(Folder): return users + def getGroupsAndUsers(self): + """return all groups and their users as dict""" + + users={} + for group in self.ZopeFind(self,obj_metatypes=['Group']): + for user in group[1].getUsers(): + if users.has_key(group[0]): + if not (user in users[group[0]]): + users[group[0]].append(user) + else: + users[group[0]]=[user] + return users + def manage_addGroupFolderForm(self): """form for adding a groupFolder""" pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addGroupFolder.zpt')).__of__(self) @@ -175,6 +277,11 @@ class Group(SimpleItem): meta_type="Group" + + manage_options=SimpleItem.manage_options+( + {'label':'change group members','action':'changeUsersInGroupForm'}, + ) + def __init__(self,id,description): """init group""" self.id=id @@ -192,6 +299,15 @@ class Group(SimpleItem): list.append(username) self.userList=list[0:] + def removeUser(self,username): + """ + remove an user from group + """ + list=self.userList + list.remove(username) + self.userList=list[0:] + + def addGroup(self,group): ''' add a group to the group @@ -211,6 +327,18 @@ class Group(SimpleItem): """ get Userlist """ return self.userList + def changeUsersInGroupForm(self): + """html form for changing the users""" + pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeUsersInGroup.zpt')).__of__(self) + return pt() + + def changeUsersInGroup(self,userList,RESPONSE=None): + """change group""" + self.userList=userList.split(",")[0:] + + if RESPONSE is not None: + RESPONSE.redirect('manage_main') + def isInGroup(self,username): ''' check if username is in group @@ -224,7 +352,7 @@ class Group(SimpleItem): return True #check first if user is in userList of this group - print self.userList, username + if username in self.userList: return True