Changeset - e79993216c66
[Not reviewed]
default
0 4 0
Thomas De Schampheleire - 11 years ago 2015-02-21 22:29:46
thomas.de_schampheleire@alcatel-lucent.com
my pullrequests: line up controller/template handling with repo pullrequests

Currently, the data for 'my pullrequests' is loaded dynamically through
ajax, unlike the way 'repository pullrequests' are loaded (statically).

As there is no good reason to have both treated differently, and as dynamic
loading of 'my pullrequests' is not really needed, rework the handling of
the 'my pullrequests' page with the 'repository pullrequests' page.

This includes lining up the 'show closed pull requests' checkbox/link.

This also fixes issue #102 ('my pull requests' when not logged in:
incorrect handling of login).
4 files changed with 15 insertions and 36 deletions:
0 comments (0 inline, 0 general)
kallithea/config/routing.py
Show inline comments
 
@@ -708,52 +708,48 @@ def make_map(config):
 
                 controller='pullrequests',
 
                 action='show', conditions=dict(function=check_repo,
 
                                                method=["GET"]))
 
    rmap.connect('pullrequest_post',
 
                 '/{repo_name:.*?}/pull-request/{pull_request_id}',
 
                 controller='pullrequests',
 
                 action='post', conditions=dict(function=check_repo,
 
                                                method=["POST"]))
 
    rmap.connect('pullrequest_delete',
 
                 '/{repo_name:.*?}/pull-request/{pull_request_id}',
 
                 controller='pullrequests',
 
                 action='delete', conditions=dict(function=check_repo,
 
                                                method=["DELETE"]))
 

	
 
    rmap.connect('pullrequest_show_all',
 
                 '/{repo_name:.*?}/pull-request',
 
                 controller='pullrequests',
 
                 action='show_all', conditions=dict(function=check_repo,
 
                                                method=["GET"]))
 

	
 
    rmap.connect('my_pullrequests',
 
                 '/my_pullrequests',
 
                 controller='pullrequests',
 
                 action='show_my', conditions=dict(method=["GET"]))
 
    rmap.connect('my_pullrequests_data',
 
                 '/my_pullrequests_data',
 
                 controller='pullrequests',
 
                 action='show_my_data', conditions=dict(method=["GET"]))
 

	
 
    rmap.connect('pullrequest_comment',
 
                 '/{repo_name:.*?}/pull-request-comment/{pull_request_id}',
 
                 controller='pullrequests',
 
                 action='comment', conditions=dict(function=check_repo,
 
                                                method=["POST"]))
 

	
 
    rmap.connect('pullrequest_comment_delete',
 
                 '/{repo_name:.*?}/pull-request-comment/{comment_id}/delete',
 
                controller='pullrequests', action='delete_comment',
 
                conditions=dict(function=check_repo, method=["DELETE"]))
 

	
 
    rmap.connect('summary_home_summary', '/{repo_name:.*?}/summary',
 
                controller='summary', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('branches_home', '/{repo_name:.*?}/branches',
 
                controller='branches', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('tags_home', '/{repo_name:.*?}/tags',
 
                controller='tags', conditions=dict(function=check_repo))
 

	
 
    rmap.connect('bookmarks_home', '/{repo_name:.*?}/bookmarks',
 
                controller='bookmarks', conditions=dict(function=check_repo))
 

	
kallithea/controllers/pullrequests.py
Show inline comments
 
@@ -189,74 +189,70 @@ class PullrequestsController(BaseRepoCon
 

	
 
        owner = self.authuser.user_id == pull_request.user_id
 
        reviewer = self.authuser.user_id in [x.user_id for x in
 
                                                   pull_request.reviewers]
 
        return self.authuser.admin or owner or reviewer
 

	
 
    @LoginRequired()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def show_all(self, repo_name):
 
        c.from_ = request.GET.get('from_') or ''
 
        c.closed = request.GET.get('closed') or ''
 
        c.pull_requests = PullRequestModel().get_all(repo_name, from_=c.from_, closed=c.closed)
 
        c.repo_name = repo_name
 
        p = safe_int(request.GET.get('page', 1), 1)
 

	
 
        c.pullrequests_pager = Page(c.pull_requests, page=p, items_per_page=10)
 

	
 
        if request.environ.get('HTTP_X_PARTIAL_XHR'):
 
            return render('/pullrequests/pullrequest_data.html')
 

	
 
        return render('/pullrequests/pullrequest_show_all.html')
 

	
 
    @LoginRequired()
 
    def show_my(self): # my_account_my_pullrequests
 
        c.show_closed = request.GET.get('pr_show_closed')
 
        return render('/pullrequests/pullrequest_show_my.html')
 

	
 
    @NotAnonymous()
 
    def show_my_data(self):
 
        c.show_closed = request.GET.get('pr_show_closed')
 
    def show_my(self):
 
        c.closed = request.GET.get('closed') or ''
 

	
 
        def _filter(pr):
 
            s = sorted(pr, key=lambda o: o.created_on, reverse=True)
 
            if not c.show_closed:
 
            if not c.closed:
 
                s = filter(lambda p: p.status != PullRequest.STATUS_CLOSED, s)
 
            return s
 

	
 
        c.my_pull_requests = _filter(PullRequest.query()\
 
                                .filter(PullRequest.user_id ==
 
                                        self.authuser.user_id)\
 
                                .all())
 

	
 
        c.participate_in_pull_requests = _filter(PullRequest.query()\
 
                                .join(PullRequestReviewers)\
 
                                .filter(PullRequestReviewers.user_id ==
 
                                        self.authuser.user_id)\
 
                                                 )
 

	
 
        return render('/pullrequests/pullrequest_show_my_data.html')
 
        return render('/pullrequests/pullrequest_show_my.html')
 

	
 
    @LoginRequired()
 
    @NotAnonymous()
 
    @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
 
                                   'repository.admin')
 
    def index(self):
 
        org_repo = c.db_repo
 
        org_scm_instance = org_repo.scm_instance
 
        try:
 
            org_scm_instance.get_changeset()
 
        except EmptyRepositoryError, e:
 
            h.flash(h.literal(_('There are no changesets yet')),
 
                    category='warning')
 
            redirect(url('summary_home', repo_name=org_repo.repo_name))
 

	
 
        org_rev = request.GET.get('rev_end')
 
        # rev_start is not directly useful - its parent could however be used
 
        # as default for other and thus give a simple compare view
 
        #other_rev = request.POST.get('rev_start')
 
        branch = request.GET.get('branch')
 

	
 
        c.cs_repos = [(org_repo.repo_name, org_repo.repo_name)]
 
        c.default_cs_repo = org_repo.repo_name
 
        c.cs_refs, c.default_cs_ref = self._get_repo_refs(org_scm_instance, rev=org_rev, branch=branch)
kallithea/templates/pullrequests/pullrequest_show_my.html
Show inline comments
 
<%inherit file="/base/base.html"/>
 

	
 
<%block name="title">
 
    ${_('My Pull Requests')}
 
</%block>
 

	
 
<%def name="breadcrumbs_links()">
 
    ${_('My Pull Requests')}
 
</%def>
 

	
 
<%block name="header_menu">
 
    ${self.menu('my_pullrequests')}
 
</%block>
 

	
 
<%def name="main()">
 

	
 
<div class="box">
 
    <!-- box / title -->
 
    <div class="title">
 
        ${self.breadcrumbs()}
 
    </div>
 

	
 
    <div id="pullrequests_container" class="table">
 
        ## loaded via AJAX
 
        ${_('Loading...')}
 
    <div style="margin: 0 20px">
 
        <div>
 
        %if c.closed:
 
            ${h.link_to(_('Hide closed pull requests (only show open pull requests)'), h.url('my_pullrequests'))}
 
        %else:
 
            ${h.link_to(_('Show closed pull requests (in addition to open pull requests)'), h.url('my_pullrequests',closed=1))}
 
        %endif
 
        </div>
 
    </div>
 

	
 
<script type="text/javascript">
 
pyroutes.register('my_pullrequests_data', "${url('my_pullrequests_data')}", []);
 

	
 
var show_pullrequests = function(e){
 

	
 
    var url = pyroutes.url('my_pullrequests_data');
 
    if ($('#show_closed').prop('checked')) {
 
        var url = pyroutes.url('my_pullrequests_data', {'pr_show_closed': '1'});
 
    }
 
    asynchtml(url, $('#pullrequests_container'), function(){
 
        // new #show_closed has just been loaded
 
        $('#show_closed').change(function (e) {
 
            show_pullrequests(e);
 
        });
 
    });
 
}
 
show_pullrequests()
 

	
 
</script>
 
    <div id="pullrequests_container" class="table">
 
        <%include file='pullrequest_show_my_data.html'/>
 
    </div>
 

	
 
</div>
 

	
 
</%def>
kallithea/templates/pullrequests/pullrequest_show_my_data.html
Show inline comments
 
${h.checkbox('show_closed',checked="checked" if c.show_closed else "", label=_('Show closed pull requests (in addition to open pull requests)'))}
 
<div class="pullrequests_section_head">${_('Pull Requests Created by Me')}</div>
 
<ul>
 
  %if c.my_pull_requests:
 
    %for pull_request in c.my_pull_requests:
 
      <li class="${'closed' if pull_request.is_closed() else ''}">
 
        <div style="height: 12px">
 
            %if pull_request.last_review_status:
 
              <i class="icon-circle changeset-status-${pull_request.last_review_status}" title="${_("Someone voted: %s") % pull_request.last_review_status}"></i>
 
            %else:
 
              <i class="icon-circle changeset-status-not_reviewed" title="${_("Nobody voted")}"></i>
 
            %endif
 
            <a href="${pull_request.url()}">
 
              ${pull_request.title or _("(no title)")}
 
            </a>
 
            ${_('created on %s from') % (h.fmt_date(pull_request.created_on))}
 
            <% org_ref_name=pull_request.org_ref.rsplit(':', 2)[-2] %>
 
            <a href="${h.url('summary_home', repo_name=pull_request.org_repo.repo_name, anchor=org_ref_name)}">
 
              ${pull_request.org_repo.repo_name}#${org_ref_name}
 
            </a>
 
            %if pull_request.is_closed():
 
              (${_('Closed')})
 
            %endif
 
            ${h.form(url('pullrequest_delete', repo_name=pull_request.other_repo.repo_name, pull_request_id=pull_request.pull_request_id),method='delete', style="display:inline-block")}
 
            <button class="action_button"
0 comments (0 inline, 0 general)