def remove_project(self, req): """ Handler for removing project :param Request req: Trac request Handler expects to have following arguments in it: - project: Name of the project env - goto: Optional URL where to go after project removal. Defaults to /home/myprojects """ backurl = req.args.get('goto', ProjectListModule.home('myprojects')) short_name = req.args.get('project') if not short_name: return self.remove_failure(req) if req.args.get('cancel'): add_notice(req, 'Project deletion cancelled') return self.remove_failure(req) author = req.authname project = Project.get(env_name=short_name) if project is None: add_warning(req, 'Specified project does not exist!') return self.remove_failure(req) # Don't allow removing home if project.env_name == conf.sys_home_project_name: add_warning(req, 'Cannot remove home project') return self.remove_failure(req) if req.method != 'POST': return self.remove_failure(req, project=project) try: project.validate() except ProjectValidationException: req.redirect(backurl) # Check the permissions and method prjs = Projects() if ('TRAC_ADMIN' in req.perm or prjs.is_project_owner(project.env_name, author)) and req.method == 'POST': archive = ProjectArchive() # Archive the project before removal if not archive.archive(project): add_warning(req, 'Could not archive project "%s". Will not remove the project' % project.project_name) elif prjs.remove_project(project): # Notify listeners for listener in self.project_change_listeners: listener.project_deleted(project) # Notify end user add_notice(req, 'Project "%s" removed' % project.project_name) else: add_warning(req, 'Could not remove project "%s". Try again later' % project.project_name) else: add_warning(req, 'You are not allowed to remove project "%s" (check permissions and method)' % project.project_name) req.redirect(backurl)
def remove_project(self, req): """ Handler for removing project :param Request req: Trac request Handler expects to have following arguments in it: - project: Name of the project env - goto: Optional URL where to go after project removal. Defaults to /home/myprojects """ backurl = req.args.get('goto', ProjectListModule.home('myprojects')) short_name = req.args.get('project') if not short_name: return self.remove_failure(req) if req.args.get('cancel'): add_notice(req, 'Project deletion cancelled') return self.remove_failure(req) author = req.authname project = Project.get(env_name=short_name) if project is None: add_warning(req, 'Specified project does not exist!') return self.remove_failure(req) # Don't allow removing home if project.env_name == conf.sys_home_project_name: add_warning(req, 'Cannot remove home project') return self.remove_failure(req) if req.method != 'POST': return self.remove_failure(req, project=project) try: project.validate() except ProjectValidationException: req.redirect(backurl) # Check the permissions and method prjs = Projects() if ('TRAC_ADMIN' in req.perm or prjs.is_project_owner( project.env_name, author)) and req.method == 'POST': archive = ProjectArchive() # Archive the project before removal if not archive.archive(project): add_warning( req, 'Could not archive project "%s". Will not remove the project' % project.project_name) elif prjs.remove_project(project): # Notify listeners for listener in self.project_change_listeners: listener.project_deleted(project) # Notify end user add_notice(req, 'Project "%s" removed' % project.project_name) else: add_warning( req, 'Could not remove project "%s". Try again later' % project.project_name) else: add_warning( req, 'You are not allowed to remove project "%s" (check permissions and method)' % project.project_name) req.redirect(backurl)
def test_is_project_owner_error(self): dbStub.addResult([[1]]) # user id userstoreStub.user.id = 0 p = Projects() self.assertFalse(p.is_project_owner("project", "nobody")) self.assertTrue(dbStub.closed)
def test_is_project_owner(self): dbStub.addResult([[1]]) # user id userstoreStub.user.id = 1 p = Projects() self.assertTrue(p.is_project_owner("project", "user")) self.assertTrue(dbStub.closed)
def test_is_project_owner_error(self): dbStub.addResult([ [1] ]) # user id userstoreStub.user.id = 0 p = Projects() self.assertFalse(p.is_project_owner("project", "nobody")) self.assertTrue(dbStub.closed)
def test_is_project_owner(self): dbStub.addResult([ [1] ]) # user id userstoreStub.user.id = 1 p = Projects() self.assertTrue(p.is_project_owner("project", "user")) self.assertTrue(dbStub.closed)