Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)