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)))
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)))
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)