def notifyAboutReview(ob, event): # 仅当文件或者图片(File/Image)的时候,才发送 if ob.getPortalTypeName() not in ['File', 'Image']: return # 仅当处于提交、审核通过、拒绝的时候才通知 mtool = getToolByName(ob, 'portal_membership') userid = mtool.getAuthenticatedMember().getId() operation = '' if event.action.endswith('submit'): operation = 'submit' elif event.action.endswith('publish'): operation = 'publish' elif event.action.endswith('reject'): operation = 'reject' # 工作流就是这样定义的, 下面逻辑没错! elif event.action.endswith('retract') and ob.Creator() != userid: operation = 'reject' else: return # 必须在项目中 if hasattr(ob, 'getProject'): project = ob.getProject().aq_inner acl_users = getToolByName(project, 'acl_users') oe = IOrganizedEmployess(project.teams) all_members = oe.get_all_people() members = [] if operation == 'submit': # 只有Administrator或者Reviewer才能收到邮件 # userids = ob.users_with_local_role('Administrator') + ob.users_with_local_role('Reviewer') originalSecurityManager = SecurityManagement.getSecurityManager() for member in all_members: user = acl_users.getUserById(member.getId()) if user is not None: # 模拟那个用户来登录 SecurityManagement.newSecurityManager(None, user) if mtool.checkPermission('Review portal content', ob): members.append(member) SecurityManagement.setSecurityManager(originalSecurityManager) else: member = mtool.getMemberById(ob.Creator()) if member: members.append(member) sendNotification(ob, members, operation)
def getMembers(self): project = self.context.getProject() adapter = IOrganizedEmployess(project.teams) return adapter.get_all_people()