Esempio n. 1
0
def add_edit_issue(request, *args, **kwargs):
    """Adds/Edits issues"""
    
    project_name = kwargs['project_name']
    project = get_object_or_404(CollabProject, slug=project_name)
    project_id = project.id
    
    issueset_id = kwargs['issueset_id']
    issueset = get_object_or_404(IssueSet, id__exact=issueset_id)

    if not is_allowed(request,  project_id,  Issue._meta.verbose_name,  'Editable'):
        return handle_privilege(request, "You do not have privileges to edit issues!", issueset.get_absolute_url())

    if 'issue_id' in kwargs:
        issue_id = kwargs['issue_id']
        issue = get_object_or_404(Issue, id=issue_id)
        # Check if the issue exists in that project AND issue set!
        if issue.issueset.project.id != project.id or issue.issueset.id != issueset.id:
            return handle_privilege(request, "The issue does not match the project or issue list!", project.get_absolute_url())
        edit = True
        instance=issue
    else:
        edit = False
        instance=None

    if request.method == 'POST':
        form = IssueForm(request.POST, instance=instance, issueset=issueset)
        if form.is_valid():
            if not edit:
                issue = Issue()
                message = "The issue was added."
            else:
                message = "The issue was modified."
            issue = form.save(commit=False)
            
            if not edit:
                issue.reporter = request.user

#            issue.issueset = issueset
            issue.save()
            request.user.message_set.create(message=message)
            return HttpResponseRedirect(issue.get_absolute_url())
    else:
        form = IssueForm(initial={'issueset': issueset.pk},  instance=instance, issueset=issueset)
    return render_to_response('issues/add_edit_issue.html', {'form': form,  'edit': edit,  'project': project, 'issueset': issueset, 'issue': instance}, context_instance=RequestContext(request))