コード例 #1
0
ファイル: welcome.py プロジェクト: alvabai/trac-multiproject
    def process_request(self, req):
        """ Render welcome page
        """

        # Prepare data for template
        prjs = Projects()
        data = {}
        data['baseurl'] = conf.url_projects_path
        if req.authname == 'anonymous':
            conf.redirect(req)

        # Get project count
        data['project_count'] = prjs.project_count()

        user = get_userstore().getUser(req.authname)
        global_timeline = GlobalTimeline()

        data['show_explore'] = self.env[FindProjectsModule].has_explore_perm(req)
        data['latest_events'] = global_timeline.get_latest_events(req.authname, 5)

        # Check if user is allowed to create project
        data['can_create_project'] = user.can_create_project()

        # Configuration values the welcome page wants
        data['site_name'] = conf.site_name
        data['site_title_text'] = conf.site_title_text
        data['site_punch_line'] = conf.punch_line
        data['site_theme_path'] = conf.getThemePath()

        wiki_welcome = self._get_welcome_page(req)
        if wiki_welcome:
            data['wiki_welcome'] = wiki_welcome

        return "welcome.html", data, None
コード例 #2
0
    def process_request(self, req):
        """ Render page
        """
        if req.authname == "anonymous":
            conf.redirect(req, conf.url_home_path + "/user")

        # Prepare data for template
        data = {}
        data["baseurl"] = conf.url_projects_path
        data["base_path"] = req.base_path
        data["watchlist"] = self._get_watchlist_events(req)
        data["to_web_time"] = to_web_time

        if req.args.get("format") == "rss":
            return "watchlist_timeline.rss", data, "application/rss+xml"

        return "watchlist_timeline.html", data, None
コード例 #3
0
    def process_request(self, req):
        """ Render page
        """
        if req.authname == 'anonymous':
            conf.redirect(req, conf.url_home_path + '/user')

        # Prepare data for template
        data = {}
        data['baseurl'] = conf.url_projects_path
        data['base_path'] = req.base_path
        data['watchlist'] = self._get_watchlist_events(req)
        data['to_web_time'] = to_web_time

        if req.args.get('format') == 'rss':
            return "watchlist_timeline.rss", data, 'application/rss+xml'

        return "watchlist_timeline.html", data, None
コード例 #4
0
    def process_request(self, req):
        """ Process request for listing, creating and removing projects
        """
        users = get_userstore()
        ctx = get_context(req)
        author = ctx['author'] = users.getUser(req.authname)

        if req.authname == 'anonymous':
            conf.redirect(req)

        # TODO: are recent_public and active_public lists really needed?
        actions = {
            "new": self.new_project_form,
            "create": self.create_project,
            "remove": self.remove_project,
            "forkables": self._list_forkable_projects,
            "recent_public": self._list_recent_public_projects,
            "active_public": self._list_mostactive_public_projects
        }

        # Default action
        action = 'list'

        # Try if other action is given
        try:
            act = str(req.path_info.rsplit('/', 1)[1])

            if act in actions:
                action = act
        except:
            self.log.debug(
                "ProjectListModule.process_request failed splitting action.")

        if action in self.project_listings:
            explore_comp = self.env[FindProjectsModule]
            if not explore_comp.has_explore_perm(req):
                req.redirect(conf.url_home_path)

        # Run requested action
        if actions.has_key(action):
            return actions[action](req)

        req.redirect(ProjectListModule.home())
コード例 #5
0
ファイル: actions.py プロジェクト: alvabai/trac-multiproject
    def process_request(self, req):
        """ Process request for listing, creating and removing projects
        """
        users = get_userstore()
        ctx = get_context(req)
        author = ctx['author'] = users.getUser(req.authname)

        if req.authname == 'anonymous':
            conf.redirect(req)

        # TODO: are recent_public and active_public lists really needed?
        actions = {
            "new": self.new_project_form,
            "create": self.create_project,
            "remove": self.remove_project,
            "forkables": self._list_forkable_projects,
            "recent_public": self._list_recent_public_projects,
            "active_public": self._list_mostactive_public_projects
        }

        # Default action
        action = 'list'

        # Try if other action is given
        try:
            act = str(req.path_info.rsplit('/', 1)[1])

            if act in actions:
                action = act
        except:
            self.log.debug("ProjectListModule.process_request failed splitting action.")

        if action in self.project_listings:
            explore_comp = self.env[FindProjectsModule]
            if not explore_comp.has_explore_perm(req):
                req.redirect(conf.url_home_path)

        # Run requested action
        if actions.has_key(action):
            return actions[action](req)

        req.redirect(ProjectListModule.home())
コード例 #6
0
    def process_request(self, req):
        """ Render welcome page
        """

        # Prepare data for template
        prjs = Projects()
        data = {}
        data['baseurl'] = conf.url_projects_path
        if req.authname == 'anonymous':
            conf.redirect(req)

        # Get project count
        data['project_count'] = prjs.project_count()

        user = get_userstore().getUser(req.authname)
        global_timeline = GlobalTimeline()

        data['show_explore'] = self.env[FindProjectsModule].has_explore_perm(
            req)
        data['latest_events'] = global_timeline.get_latest_events(
            req.authname, 5)

        # Check if user is allowed to create project
        data['can_create_project'] = user.can_create_project()

        # Configuration values the welcome page wants
        data['site_name'] = conf.site_name
        data['site_title_text'] = conf.site_title_text
        data['site_punch_line'] = conf.punch_line
        data['site_theme_path'] = conf.getThemePath()

        wiki_welcome = self._get_welcome_page(req)
        if wiki_welcome:
            data['wiki_welcome'] = wiki_welcome

        return "welcome.html", data, None
コード例 #7
0
    def process_request(self, req):
        """
        Render welcome page
        """
        # Cast into bool directly, since match object properties are not needed
        viewing_user_profile = bool(RE_HOME_USER.match(req.path_info))
        userstore = get_userstore()

        if (req.authname == 'anonymous'
            and not self.env.config.getbool('multiproject', 'allow_public_projects')):
            conf.redirect(req, req.href('/user'))

        if viewing_user_profile:
            username = req.path_info.rsplit("/")[-1]
        else:
            username = req.authname

        user = userstore.getUser(username)
        if not user:
            raise TracError("User not found.")

        if req.authname == 'anonymous' and not viewing_user_profile:
            conf.redirect(req, conf.url_home_path + '/user')

        if user.username == 'anonymous' or user.username == 'authenticated':
            raise TracError("User not found.")

        # Possible values
        sort_cols = {'DATE': 5, 'PRIORITY': 6, 'PROJECT': 7}
        desc_asc = {'DESC': True, 'ASC': False}

        sort_tasks_by = req.args.get('sort_tasks_by','DATE')
        if sort_tasks_by not in sort_cols:
            sort_tasks_by = 'DATE'
        sort_col = sort_cols[sort_tasks_by]

        sort_options = {'DESC':'DESC', 'ASC':'ASC'}
        sort_tasks_order = sort_options.get(req.args.get('sort_tasks_order'), 'ASC')


        data = {}
        data['username'] = user.getDisplayName()
        if viewing_user_profile:
            if username != req.authname:
                # TODO: i18n support
                data['usernames'] = username + "'s"
            else:
                data['usernames'] = "Your"
        else:
            data['username'] = "******".format(user.givenName, user.lastName)
            data['usernames'] = "My"

        data['baseurl'] = conf.url_projects_path
        data['userpage'] = viewing_user_profile
        data['base_path'] = req.base_path

        # Prepare data for template
        prjs = Projects()

        default_projects, default_names = prjs.get_default_projects()
        data['default_projects'] = default_projects
        try:
            if viewing_user_profile:
                projects = prjs.get_participated_projects(user, by_ldap=False, public_only=True)
            else:
                projects = prjs.get_participated_projects(user, by_ldap=True, public_only=False)
        except TracError as e:
            projects = []

        if viewing_user_profile:
            all_projects = projects
        else:
            all_projects = default_projects + [p for p in projects if p.env_name not in default_names]

        admin_projects = []
        other_projects = []

        if viewing_user_profile:
            other_projects = all_projects
        else:
            for project in all_projects:
                if project.is_admin(user.username):
                    admin_projects.append(project)
                else:
                    other_projects.append(project)

        # admin_projects is [] in public profile or if there are not public, administrated projects
        data['projects_where_admin'] = admin_projects
        data['projects'] = other_projects

        # Get tickets and posts
        # [project, row[URL], row[SUMMARY], row[DESCRIPTION], row[PRIORITY], to_datetime(row[TIME]/1000000)]
        policy = CQDEPermissionPolicy(self.env)
        ticket_projects = []
        post_projects = []
        if viewing_user_profile:
            for project in all_projects:
                self.log.warning('project %s' % project.env_name)
                if policy.check_permission(project.env_name, 'TICKET_VIEW', 'anonymous'):
                    ticket_projects.append(project)
                if policy.check_permission(project.env_name, 'DISCUSSION_VIEW', 'anonymous'):
                    post_projects.append(project)
        else:
            ticket_projects = all_projects
            post_projects = all_projects

        tasks = prjs.get_all_user_tasks(user.username, ticket_projects)

        do_reverse = desc_asc[sort_tasks_order]
        tasks = sorted(tasks, key = lambda task: task[sort_col], reverse = do_reverse)

        # Get posts
        posts = self._get_posts(user.username, post_projects)

        data['tasks'] = tasks

        (totaltickets, totalclosed) = prjs.get_all_user_task_sums(user.username, all_projects)

        data['user'] = user
        data['known_priorities'] = ['blocker', 'critical', 'major', 'minor', 'trivial']
        data['sort_tasks_by'] = sort_tasks_by
        data['sort_tasks_order'] = sort_tasks_order
        data['posts'] = posts[:10]
        data['userpage'] = viewing_user_profile
        data['to_web_time'] = to_web_time

        # Check if user can create a project
        data['can_create_project'] = user.can_create_project()

        if viewing_user_profile:
            if username != req.authname:
                data['title'] = username + "'s profile"
                data['badgelinktitle'] = "View profile"
            else:
                data['title'] = "This is your public profile"
                data['badgelinktitle'] = "View your profile"
        else:
            data['title'] = "My projects"
            data['badgelinktitle'] = "View my public profile"

        topics_started = 0
        for post in posts:
            if post['topic_id'] == 0:
                topics_started += 1

        data['user'].details = {'Total tickets':totaltickets,
                                'Total tickets closed':totalclosed,
                                'Discussions started': topics_started}
        if not viewing_user_profile:
            data['watchlist'] = self._get_watchlist_events(user)

        return "myprojects.html", data, None