Пример #1
0
def edit(request, user_name, repo_name, issue_id):
    refs = 'master'; path = '.'; current = 'issues'; title = u'%s / %s / 编辑问题' % (user_name, repo_name)
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    has_issue_modify = _has_issue_modify_right(request, issue, repo)
    if issue is None or not has_issue_modify:
        raise Http404
    orgi_issue = copy.copy(issue)
    issueForm = IssueForm(instance = issue)
    issueForm.fill_assigned(repo)
    error = u''
    if request.method == 'POST':
        issueForm = IssueForm(request.POST, instance = issue)
        issueForm.fill_assigned(repo)
        if issueForm.is_valid():
            newIssue = issueForm.save()
            nid = newIssue.id
            FeedManager.notif_issue_at(request.user.id, nid, issueForm.cleaned_data['subject'] + ' ' + issueForm.cleaned_data['content'])
            FeedManager.notif_issue_status(request.user, newIssue, ISSUE_STATUS.ASSIGNED)
            FeedManager.feed_issue_change(request.user, repo, orgi_issue, nid)
            return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, nid))
        else:
            error = u'issue 内容不能为空'
    response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issueForm': issueForm, 'error': error, 'issue_id': issue_id}
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issue_edit.html',
                          response_dictionary,
                          context_instance=RequestContext(request))
Пример #2
0
def update(request, user_name, repo_name, issue_id, attr):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is None:
        return _json_failed()
    has_issue_modify_right = _has_issue_modify_right(request, issue, repo)
    if not has_issue_modify_right:
        return _json_failed()
    orgi_issue = copy.copy(issue)
    (key, value) = attr.split('___', 1)
    if key == 'assigned':
        user = GsuserManager.get_user_by_name(value)
        if user is None:
            return _json_failed()
        repoMember = RepoManager.get_repo_member(repo.id, user.id)
        if repoMember is None:
            return _json_failed()
        issue.assigned = repoMember.user_id
        issue.save()
        FeedManager.notif_issue_status(request.user, issue, ISSUE_STATUS.ASSIGNED)
        FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id)
        return _json_ok()
    value = int(value)
    if key == 'tracker':
        issue.tracker = value
    elif key == 'status':
        issue.status = value
    elif key == 'priority':
        issue.priority = value
    issue.save()
    FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id)
    return _json_ok()
Пример #3
0
 def _do_event(self, event):
     username = event['username']
     reponame = event['reponame']
     remote_git_url = event['remote_git_url']
     local_user = GsuserManager.get_user_by_name(username)
     local_repo = RepoManager.get_repo_by_name(username, reponame)
     if local_user is None or local_repo is None or local_repo.status == 0:
         return
     local_repo_path = local_repo.get_abs_repopath()
     if os.path.exists(local_repo_path):
         return
     args = ['/bin/bash', '/opt/bin/git-import-remote-repo.sh'] + [local_repo_path, remote_git_url]
     try:
         popen = Popen(args, stdout=PIPE, shell=False, close_fds=True)
         output = popen.communicate()[0].strip()
         returncode = popen.returncode
         if returncode == 0:
             RepoManager.check_export_ok_file(local_repo)
             diff_size = long(output)
             RepoManager.update_user_repo_quote(local_user, local_repo, diff_size)
             local_repo.status = 0
             local_repo.save()
         else:
             local_repo.status = 500
             local_repo.save()
     except Exception, e:
         local_repo.status = 500
         local_repo.save()
         logger.exception(e)
Пример #4
0
 def _do_event(self, event):
     username = event['username']
     reponame = event['reponame']
     remote_git_url = event['remote_git_url']
     local_user = GsuserManager.get_user_by_name(username)
     local_repo = RepoManager.get_repo_by_name(username, reponame)
     if local_user is None or local_repo is None or local_repo.status == 0:
         return
     local_repo_path = local_repo.get_abs_repopath()
     if os.path.exists(local_repo_path):
         return
     args = ['/bin/bash', '/opt/bin/git-import-remote-repo.sh'
             ] + [local_repo_path, remote_git_url]
     try:
         popen = Popen(args, stdout=PIPE, shell=False, close_fds=True)
         output = popen.communicate()[0].strip()
         returncode = popen.returncode
         if returncode == 0:
             RepoManager.check_export_ok_file(local_repo)
             diff_size = long(output)
             RepoManager.update_user_repo_quote(local_user, local_repo,
                                                diff_size)
             local_repo.status = 0
             local_repo.save()
         else:
             local_repo.status = 500
             local_repo.save()
     except Exception, e:
         local_repo.status = 500
         local_repo.save()
         logger.exception(e)
Пример #5
0
def update(request, user_name, repo_name, issue_id, attr):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is None:
        return _json_failed()
    has_issue_modify_right = _has_issue_modify_right(request, issue, repo)
    if not has_issue_modify_right:
        return _json_failed()
    orgi_issue = copy.copy(issue)
    (key, value) = attr.split('___', 1)
    if key == 'assigned':
        user = GsuserManager.get_user_by_name(value)
        if user is None:
            return _json_failed()
        repoMember = RepoManager.get_repo_member(repo.id, user.id)
        if repoMember is None:
            return _json_failed()
        issue.assigned = repoMember.user_id
        issue.save()
        FeedManager.notif_issue_status(request.user, issue,
                                       ISSUE_STATUS.ASSIGNED)
        FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id)
        return _json_ok()
    value = int(value)
    if key == 'tracker':
        issue.tracker = value
    elif key == 'status':
        issue.status = value
    elif key == 'priority':
        issue.priority = value
    issue.save()
    FeedManager.feed_issue_change(request.user, repo, orgi_issue, issue.id)
    return _json_ok()
Пример #6
0
def delete(request, user_name, repo_name, issue_id):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is not None:
        if _has_issue_modify_right(request, issue, repo):
            issue.visibly = 1
            issue.save()
    return _json_ok()
Пример #7
0
def delete(request, user_name, repo_name, issue_id):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is not None:
        if _has_issue_modify_right(request, issue, repo):
            issue.visibly = 1
            issue.save()
    return _json_ok()
Пример #8
0
def http_auth(request):
    try:
        unauthorized_httpResponse = HttpResponse(status=401)
        unauthorized_httpResponse[
            'WWW-Authenticate'] = 'Basic realm="%s"' % 'Restricted'
        if not request.META.has_key('HTTP_X_SET_REQUESTURI'):
            return unauthorized_httpResponse

        orgi_request_uri = request.META['HTTP_X_SET_REQUESTURI'].strip()
        (desc_username, desc_reponame,
         action) = _get_desc_name(orgi_request_uri)
        if desc_username == '' or desc_reponame == '':
            return unauthorized_httpResponse
        suffix = '.git'
        if desc_reponame.endswith(suffix):
            desc_reponame = desc_reponame[0:len(desc_reponame) - len(suffix)]
        repo = RepoManager.get_repo_by_name(desc_username, desc_reponame)
        if repo is None:
            return unauthorized_httpResponse

        # if deploy key
        if 'git-receive-pack' not in orgi_request_uri:
            deploy_key = None
            username, password = _http_authenticate_name_password(request)
            if username is not None:
                deploy_key = username
            if deploy_key is not None and deploy_key != '' and repo.deploy_url == deploy_key:
                return HttpResponse(status=200)

        if repo.auth_type == 0:
            # if orgi_request_uri.endswith('?service=git-receive-pack') or action == 'git-receive-pack':
            if 'git-receive-pack' in orgi_request_uri:
                user = _http_authenticate_user(request)
                if not RepoManager.is_allowed_access_repo(
                        repo, user, REPO_PERMISSION.WRITE):
                    return unauthorized_httpResponse
            return HttpResponse(status=200)
        else:
            user = _http_authenticate_user(request)
            if 'git-receive-pack' in orgi_request_uri:
                if RepoManager.is_allowed_access_repo(repo, user,
                                                      REPO_PERMISSION.WRITE):
                    return HttpResponse(status=200)
            else:
                if RepoManager.is_allowed_access_repo(
                        repo, user, REPO_PERMISSION.READ_ONLY):
                    return HttpResponse(status=200)

    except Exception, e:
        print e
Пример #9
0
def comment_delete(request, user_name, repo_name, comment_id):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        return _json_failed()
    issue_comment = IssueManager.get_issue_comment(comment_id)
    if issue_comment is None:
        return _json_failed()
    issue = IssueManager.get_issue(repo.id, issue_comment.issue_id)
    if issue is None or not _has_issue_comment_modify_right(request, issue_comment, repo):
        return _json_failed()
    issue_comment.visibly = 1
    issue_comment.save()
    issue.comment_count = issue.comment_count - 1
    issue.save()
    return _json_ok()
Пример #10
0
def comment_delete(request, user_name, repo_name, comment_id):
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        return _json_failed()
    issue_comment = IssueManager.get_issue_comment(comment_id)
    if issue_comment is None:
        return _json_failed()
    issue = IssueManager.get_issue(repo.id, issue_comment.issue_id)
    if issue is None or not _has_issue_comment_modify_right(
            request, issue_comment, repo):
        return _json_failed()
    issue_comment.visibly = 1
    issue_comment.save()
    issue.comment_count = issue.comment_count - 1
    issue.save()
    return _json_ok()
Пример #11
0
def edit(request, user_name, repo_name, issue_id):
    refs = 'master'
    path = '.'
    current = 'issues'
    title = u'%s / %s / 编辑问题' % (user_name, repo_name)
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    has_issue_modify = _has_issue_modify_right(request, issue, repo)
    if issue is None or not has_issue_modify:
        raise Http404
    orgi_issue = copy.copy(issue)
    issueForm = IssueForm(instance=issue)
    issueForm.fill_assigned(repo)
    error = u''
    if request.method == 'POST':
        issueForm = IssueForm(request.POST, instance=issue)
        issueForm.fill_assigned(repo)
        if issueForm.is_valid():
            newIssue = issueForm.save()
            nid = newIssue.id
            FeedManager.notif_issue_at(
                request.user.id, nid, issueForm.cleaned_data['subject'] + ' ' +
                issueForm.cleaned_data['content'])
            FeedManager.notif_issue_status(request.user, newIssue,
                                           ISSUE_STATUS.ASSIGNED)
            FeedManager.feed_issue_change(request.user, repo, orgi_issue, nid)
            return HttpResponseRedirect('/%s/%s/issues/%s/' %
                                        (user_name, repo_name, nid))
        else:
            error = u'issue 内容不能为空'
    response_dictionary = {
        'mainnav': 'repo',
        'current': current,
        'title': title,
        'path': path,
        'issueForm': issueForm,
        'error': error,
        'issue_id': issue_id
    }
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(
        get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issue_edit.html',
                              response_dictionary,
                              context_instance=RequestContext(request))
Пример #12
0
 def wrap(request, *args, **kwargs):
     if len(args) >= 2:
         user_name = args[0]; repo_name = args[1]
         repo = RepoManager.get_repo_by_name(user_name, repo_name)
         if repo is None:
             return error_with_reason(request, 'repo_not_found')
         if repo.auth_type != 0 and not request.user.is_authenticated():
             return HttpResponseRedirect('/login/?next=' + urlquote(request.path))
         is_allowed_access_repo = RepoManager.is_allowed_access_repo(repo, request.user, REPO_PERMISSION.READ_ONLY)
         if not is_allowed_access_repo:
             if request.method == 'POST':
                 return json_failed(403, u'没有管理权限')
             return error_with_reason(request, 'repo_permission_denied')
     if request.user.is_authenticated():
         feedAction = FeedAction()
         feedAction.add_recently_view_repo_now(request.user.id, repo.id)
     return function(request, *args, **kwargs)
Пример #13
0
def http_auth(request):
    try:
        unauthorized_httpResponse = HttpResponse(status=401)
        unauthorized_httpResponse['WWW-Authenticate'] = 'Basic realm="%s"' % 'Restricted'
        if not request.META.has_key('HTTP_X_SET_REQUESTURI'):
            return unauthorized_httpResponse
    
        orgi_request_uri = request.META['HTTP_X_SET_REQUESTURI'].strip()
        (desc_username, desc_reponame, action) = _get_desc_name(orgi_request_uri)
        if desc_username == '' or desc_reponame == '':
            return unauthorized_httpResponse
        suffix = '.git'
        if desc_reponame.endswith(suffix):
            desc_reponame = desc_reponame[0:len(desc_reponame)-len(suffix)]
        repo = RepoManager.get_repo_by_name(desc_username, desc_reponame)
        if repo is None:
            return unauthorized_httpResponse
    
        # if deploy key
        if 'git-receive-pack' not in orgi_request_uri:
            deploy_key = None
            username, password = _http_authenticate_name_password(request)
            if username is not None:
                deploy_key = username
            if deploy_key is not None and deploy_key != '' and repo.deploy_url == deploy_key:
                return HttpResponse(status=200)

        if repo.auth_type == 0:
            # if orgi_request_uri.endswith('?service=git-receive-pack') or action == 'git-receive-pack':
            if 'git-receive-pack' in orgi_request_uri:
                user = _http_authenticate_user(request)
                if not RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.WRITE):
                    return unauthorized_httpResponse
            return HttpResponse(status=200)
        else:
            user = _http_authenticate_user(request)
            if 'git-receive-pack' in orgi_request_uri:
                if RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.WRITE):
                    return HttpResponse(status=200)
            else:
                if RepoManager.is_allowed_access_repo(repo, user, REPO_PERMISSION.READ_ONLY):
                    return HttpResponse(status=200)

    except Exception, e:
        print e
Пример #14
0
def show(request, user_name, repo_name, issue_id, page):
    refs = 'master'; path = '.'; current = 'issues'
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is None:
        raise Http404
    issueCommentForm = IssueCommentForm()
    if request.method == 'POST' and request.user.is_authenticated():
        issueComment = IssueComment() 
        issueComment.issue_id = issue_id
        issueComment.user_id = request.user.id
        issueCommentForm = IssueCommentForm(request.POST, instance = issueComment)
        if issueCommentForm.is_valid():
            cid = issueCommentForm.save().id
            FeedManager.notif_issue_comment_at(request.user.id, cid, issueCommentForm.cleaned_data['content'])
            issue.comment_count = issue.comment_count + 1
            issue.save()
            return HttpResponseRedirect('/%s/%s/issues/%s/' % (user_name, repo_name, issue_id))
    
    page_size = 50; total_count = issue.comment_count; total_page = total_count / page_size
    if total_count != 0 and total_count % page_size == 0:
        total_page = total_page - 1
    if page is None or int(page) > total_page:
        page = total_page
    page = int(page)
    issue_comments = []
    if total_count > 0:
        offset = page*page_size; row_count = page_size
        issue_comments = IssueManager.list_issue_comments(issue_id, offset, row_count)

    memberUsers = RepoManager.list_repo_team_memberUser(repo.id)
    memberUsers = _let_request_user_first(memberUsers, request.user.id)
    assigneds = [x.username for x in memberUsers]

    has_issue_modify_right = _has_issue_modify_right(request, issue, repo)
    title = u'%s / %s / 问题:%s' % (user_name, repo_name, issue.subject)
    response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'issue': issue, 'issue_comments': issue_comments, 'issueCommentForm': issueCommentForm, 'page': page, 'total_page': range(0, total_page+1), 'assigneds': assigneds, 'assigned': issue.assigned, 'tracker': issue.tracker, 'status': issue.status, 'priority': issue.priority, 'has_issue_modify_right': has_issue_modify_right}
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issue_show.html',
                          response_dictionary,
                          context_instance=RequestContext(request))
Пример #15
0
def issues_list(request, user_name, repo_name, assigned, tracker, status, priority, orderby, page):
    refs = 'master'; path = '.'; current = 'issues'; title = u'%s / %s / 问题列表' % (user_name, repo_name)
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    user_id = request.user.id
    memberUsers = RepoManager.list_repo_team_memberUser(repo.id)
    memberUsers = _let_request_user_first(memberUsers, user_id)
    member_ids = [x.id for x in memberUsers]
    assigneds = [x.username for x in memberUsers]
    assigneds.insert(0, '0')
    if assigned is None:
        assigned = assigneds[0]
    assigned_id = 0
    assigned_user = GsuserManager.get_user_by_name(assigned)
    if assigned_user is not None and assigned in assigneds:
        assigned_id = assigned_user.id
    tracker = int(tracker); status = int(status); priority = int(priority); page = int(page)
    current_attrs = { 'assigned': str(assigned), 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': str(orderby), 'page': page }

    issues = []
    page_size = 50; offset = page*page_size; row_count = page_size + 1
    if assigned_id == 0 and tracker == 0 and status == 0 and priority == 0:
        issues = IssueManager.list_issues(repo.id, orderby, offset, row_count)
    else:
        assigned_ids = member_ids if assigned_id == 0 else [assigned_id]
        trackeres = TRACKERS_VAL if tracker == 0 else [tracker]
        statuses = STATUSES_VAL if status == 0 else [status]
        priorities = PRIORITIES_VAL if priority == 0 else [priority] 
        issues = IssueManager.list_issues_cons(repo.id, assigned_ids, trackeres, statuses, priorities, orderby, offset, row_count)

    hasPre = False ; hasNext = False
    if page > 0:
        hasPre = True 
    if len(issues) > page_size:
        hasNext = True
        issues.pop()
    
    response_dictionary = {'mainnav': 'repo', 'current': current, 'title': title, 'path': path, 'assigneds': assigneds, 'assigned': assigned, 'tracker': tracker, 'status': status, 'priority': priority, 'orderby': orderby, 'page': page, 'current_attrs': current_attrs, 'issues': issues, 'hasPre': hasPre, 'hasNext': hasNext}
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issues.html',
                          response_dictionary,
                          context_instance=RequestContext(request))
Пример #16
0
 def wrap(request, *args, **kwargs):
     if len(args) >= 2:
         user_name = args[0]; repo_name = args[1]
         repo = RepoManager.get_repo_by_name(user_name, repo_name)
         if repo is None:
             return error_with_reason(request, 'repo_not_found')
         if not request.user.is_authenticated():
             return HttpResponseRedirect('/login/?next=' + urlquote(request.path))
         from gitshell.team.models import TeamManager
         user_permission = TeamManager.get_repo_user_permission(repo, request.user)
         if user_permission < REPO_PERMISSION.ADMIN:
             if user_permission >= REPO_PERMISSION.WEB_VIEW:
                 return HttpResponseRedirect('/%s/%s/' % (user_name, repo_name))
             if request.method == 'POST':
                 return json_failed(403, u'没有管理权限')
             return error_with_reason(request, 'repo_permission_denied')
     if request.user.is_authenticated():
         feedAction = FeedAction()
         feedAction.add_recently_view_repo_now(request.user.id, repo.id)
     return function(request, *args, **kwargs)
Пример #17
0
 def wrap(request, *args, **kwargs):
     if len(args) >= 2:
         user_name = args[0]
         repo_name = args[1]
         repo = RepoManager.get_repo_by_name(user_name, repo_name)
         if repo is None:
             return error_with_reason(request, 'repo_not_found')
         if repo.auth_type != 0 and not request.user.is_authenticated():
             return HttpResponseRedirect('/login/?next=' +
                                         urlquote(request.path))
         is_allowed_access_repo = RepoManager.is_allowed_access_repo(
             repo, request.user, REPO_PERMISSION.READ_ONLY)
         if not is_allowed_access_repo:
             if request.method == 'POST':
                 return json_failed(403, u'没有管理权限')
             return error_with_reason(request, 'repo_permission_denied')
     if request.user.is_authenticated():
         feedAction = FeedAction()
         feedAction.add_recently_view_repo_now(request.user.id, repo.id)
     return function(request, *args, **kwargs)
Пример #18
0
 def wrap(request, *args, **kwargs):
     if len(args) >= 2:
         user_name = args[0]
         repo_name = args[1]
         repo = RepoManager.get_repo_by_name(user_name, repo_name)
         if repo is None:
             return error_with_reason(request, 'repo_not_found')
         if not request.user.is_authenticated():
             return HttpResponseRedirect('/login/?next=' +
                                         urlquote(request.path))
         from gitshell.team.models import TeamManager
         user_permission = TeamManager.get_repo_user_permission(
             repo, request.user)
         if user_permission < REPO_PERMISSION.ADMIN:
             if user_permission >= REPO_PERMISSION.WEB_VIEW:
                 return HttpResponseRedirect('/%s/%s/' %
                                             (user_name, repo_name))
             if request.method == 'POST':
                 return json_failed(403, u'没有管理权限')
             return error_with_reason(request, 'repo_permission_denied')
     if request.user.is_authenticated():
         feedAction = FeedAction()
         feedAction.add_recently_view_repo_now(request.user.id, repo.id)
     return function(request, *args, **kwargs)
Пример #19
0
def show(request, user_name, repo_name, issue_id, page):
    refs = 'master'
    path = '.'
    current = 'issues'
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    issue = IssueManager.get_issue(repo.id, issue_id)
    if issue is None:
        raise Http404
    issueCommentForm = IssueCommentForm()
    if request.method == 'POST' and request.user.is_authenticated():
        issueComment = IssueComment()
        issueComment.issue_id = issue_id
        issueComment.user_id = request.user.id
        issueCommentForm = IssueCommentForm(request.POST,
                                            instance=issueComment)
        if issueCommentForm.is_valid():
            cid = issueCommentForm.save().id
            FeedManager.notif_issue_comment_at(
                request.user.id, cid, issueCommentForm.cleaned_data['content'])
            issue.comment_count = issue.comment_count + 1
            issue.save()
            return HttpResponseRedirect('/%s/%s/issues/%s/' %
                                        (user_name, repo_name, issue_id))

    page_size = 50
    total_count = issue.comment_count
    total_page = total_count / page_size
    if total_count != 0 and total_count % page_size == 0:
        total_page = total_page - 1
    if page is None or int(page) > total_page:
        page = total_page
    page = int(page)
    issue_comments = []
    if total_count > 0:
        offset = page * page_size
        row_count = page_size
        issue_comments = IssueManager.list_issue_comments(
            issue_id, offset, row_count)

    memberUsers = RepoManager.list_repo_team_memberUser(repo.id)
    memberUsers = _let_request_user_first(memberUsers, request.user.id)
    assigneds = [x.username for x in memberUsers]

    has_issue_modify_right = _has_issue_modify_right(request, issue, repo)
    title = u'%s / %s / 问题:%s' % (user_name, repo_name, issue.subject)
    response_dictionary = {
        'mainnav': 'repo',
        'current': current,
        'title': title,
        'path': path,
        'issue': issue,
        'issue_comments': issue_comments,
        'issueCommentForm': issueCommentForm,
        'page': page,
        'total_page': range(0, total_page + 1),
        'assigneds': assigneds,
        'assigned': issue.assigned,
        'tracker': issue.tracker,
        'status': issue.status,
        'priority': issue.priority,
        'has_issue_modify_right': has_issue_modify_right
    }
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(
        get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issue_show.html',
                              response_dictionary,
                              context_instance=RequestContext(request))
Пример #20
0
def issues_list(request, user_name, repo_name, assigned, tracker, status,
                priority, orderby, page):
    refs = 'master'
    path = '.'
    current = 'issues'
    title = u'%s / %s / 问题列表' % (user_name, repo_name)
    repo = RepoManager.get_repo_by_name(user_name, repo_name)
    if repo is None:
        raise Http404
    user_id = request.user.id
    memberUsers = RepoManager.list_repo_team_memberUser(repo.id)
    memberUsers = _let_request_user_first(memberUsers, user_id)
    member_ids = [x.id for x in memberUsers]
    assigneds = [x.username for x in memberUsers]
    assigneds.insert(0, '0')
    if assigned is None:
        assigned = assigneds[0]
    assigned_id = 0
    assigned_user = GsuserManager.get_user_by_name(assigned)
    if assigned_user is not None and assigned in assigneds:
        assigned_id = assigned_user.id
    tracker = int(tracker)
    status = int(status)
    priority = int(priority)
    page = int(page)
    current_attrs = {
        'assigned': str(assigned),
        'tracker': tracker,
        'status': status,
        'priority': priority,
        'orderby': str(orderby),
        'page': page
    }

    issues = []
    page_size = 50
    offset = page * page_size
    row_count = page_size + 1
    if assigned_id == 0 and tracker == 0 and status == 0 and priority == 0:
        issues = IssueManager.list_issues(repo.id, orderby, offset, row_count)
    else:
        assigned_ids = member_ids if assigned_id == 0 else [assigned_id]
        trackeres = TRACKERS_VAL if tracker == 0 else [tracker]
        statuses = STATUSES_VAL if status == 0 else [status]
        priorities = PRIORITIES_VAL if priority == 0 else [priority]
        issues = IssueManager.list_issues_cons(repo.id, assigned_ids,
                                               trackeres, statuses, priorities,
                                               orderby, offset, row_count)

    hasPre = False
    hasNext = False
    if page > 0:
        hasPre = True
    if len(issues) > page_size:
        hasNext = True
        issues.pop()

    response_dictionary = {
        'mainnav': 'repo',
        'current': current,
        'title': title,
        'path': path,
        'assigneds': assigneds,
        'assigned': assigned,
        'tracker': tracker,
        'status': status,
        'priority': priority,
        'orderby': orderby,
        'page': page,
        'current_attrs': current_attrs,
        'issues': issues,
        'hasPre': hasPre,
        'hasNext': hasNext
    }
    response_dictionary.update(ISSUE_ATTRS)
    response_dictionary.update(
        get_common_repo_dict(request, repo, user_name, repo_name, refs))
    return render_to_response('repo/issues.html',
                              response_dictionary,
                              context_instance=RequestContext(request))