예제 #1
0
def assign(issue, request):
	if not request.user.has_perm('issues.assign_issue'):
		return	# Audit fail
		
	assignee = request.POST.get('assignee')
	if assignee is not None:					# empty string => unassign
		if len(assignee) > 0:
			try:
				u = User.objects.get(id=assignee)
				issue.assignee = u
				issue.starring.add(u)			# Automatic starring
				update(issue=issue, user=request.user, mode=IssueHistory.ASSIGN, content=assignee)
				notify(issue, request.user, u'* %s 已將此議題指派給 %s *' % (get_user_name(request.user), get_user_name(u)))
			except User.DoesNotExist: pass		# Just in case we're under attack...
		else:
			issue.assignee = None
			update(issue=issue, user=request.user, mode=IssueHistory.UNASSIGN)
			notify(issue, request.user, u'* %s 已撤銷此議題指派的人員*' % (get_user_name(request.user)))
예제 #2
0
def toggle_state(issue, request):
	if not request.user.has_perm('issues.toggle_issue'):
		return	# Audit fail

	issue.is_open = not issue.is_open
	update(issue=issue, user=request.user, mode=(IssueHistory.REOPEN if issue.is_open else IssueHistory.CLOSE))
	notify(issue, request.user, (u'* %s 已將此議題結案 *' if issue.is_open else u'* %s 已對此議題提出復議 *') % (get_user_name(request.user)))
예제 #3
0
def create(request):
    if not request.user.has_perm("issues.create_issue"):
        return (None, None)  # Audit fail

    errors = []

    issue = Issue()
    issue.title = request.POST["title"]
    issue.content = request.POST["content"]
    issue.creator = request.user

    due_time = request.POST.get("due_time", "").strip()
    if len(due_time) > 0:
        try:
            if len(due_time) <= 10:
                due_time = dateparse.parse_date(due_time)
                due_time = datetime.datetime.combine(due_time, datetime.time()) if due_time else None
            else:
                due_time = dateparse.parse_datetime(due_time)
        except ValueError:
            errors.append("date-invalid")

        if due_time:
            issue.due_time = due_time
        else:
            errors.append("date-misformed")

    assignee = request.POST.get("assignee")
    if assignee:  # Empty value => not assigned, no need to set
        try:
            assignee = request.POST.get("assignee")
            issue.assignee = User.objects.get(id=assignee)
        except User.DoesNotExist:
            assignee = None  # Just in case we're under attack...

    if len(errors) < 1:
        issue.save()  # Need to save before we can enforce N to N relationship
        issue.starring.add(request.user)  # Auto watch

        if assignee:
            IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.ASSIGN, content=assignee)

            issue.starring.add(issue.assignee)  # Auto watch
            send_mail(
                request.user,
                issue.assignee,
                "[#%s] %s" % (issue.id, issue.title),
                u"* %s 已將此議題指派給你 *\n\n%s" % (get_user_name(request.user), issue.content),
            )

        if due_time:
            IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.SET_DUE, content=due_time)

            # Add or remove labels has history so we don't worry on history creation
        for label_id in request.POST.getlist("labels"):
            try:
                issue.labels.add(Label.objects.get(id=label_id))
            except Label.DoesNotExist:
                pass

        issue.save()  # Now save the labels
        return (issue, [])
    return (None, errors)