def comment(issue, request): if not request.user.has_perm('issues.comment_issue'): return # Audit fail content = request.POST.get('content') urgent = False if not content: return elif content.startswith(settings.URGENT_MAGIC_TOKEN): content = content[len(settings.URGENT_MAGIC_TOKEN):] urgent = True update(issue=issue, user=request.user, content=content) notify(issue, request.user, 'mail/issue_general.html', {'issue': issue, 'comment': content}) issue.starring.add(request.user) # Follow after comment mentions, extra_receivers = filter_mentions(content) mentions -= set((request.user,)) for user in mentions: issue.starring.add(user) # Auto watch send_mail(request.user, user, 'mail/issue_mentioned.html', { 'issue': issue, 'comment': content }) for receiver in extra_receivers: send_mail(request.user, receiver, 'mail/issue_mentioned.html', { 'issue': issue, 'comment': content }) if urgent: if issue.assignee and issue.assignee not in mentions: mentions.append(issue.assignee) for mentionee in mentions: if mentionee.profile.phone: send_sms(request.user, mentionee, 'sms/issue_comment.txt', { 'issue': issue, 'comment': content })
def comment(issue, request): if not request.user.has_perm('issues.comment_issue'): return # Audit fail content = request.POST.get('content') urgent = False if not content: return elif content.startswith(settings.URGENT_MAGIC_TOKEN): content = content[len(settings.URGENT_MAGIC_TOKEN):] urgent = True update(issue=issue, user=request.user, content=content) notify(issue, request.user, 'mail/issue_general.html', { 'issue': issue, 'comment': content }) issue.starring.add(request.user) # Follow after comment mentions, extra_receivers = filter_mentions(content) mentions -= set((request.user, )) for user in mentions: issue.starring.add(user) # Auto watch send_mail(request.user, user, 'mail/issue_mentioned.html', { 'issue': issue, 'comment': content }) for receiver in extra_receivers: send_mail(request.user, receiver, 'mail/issue_mentioned.html', { 'issue': issue, 'comment': content }) if urgent: if issue.assignee and issue.assignee not in mentions: mentions.append(issue.assignee) for mentionee in mentions: if mentionee.profile.phone: send_sms(request.user, mentionee, 'sms/issue_comment.txt', { 'issue': issue, 'comment': content })
def create(request): errors = [] if 'submit' in request.POST: 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): try: due_time = parse_date(due_time) if due_time: issue.due_time = due_time else: errors.append('date-misformed') except ValueError: errors.append('date-invalid') assignee = request.POST.get('assignee') if assignee: # Empty value => not assigned, no need to set try: issue.assignee = User.objects.get(id=assignee) except User.DoesNotExist: assignee = None # Just in case we're under attack... labels = [] for label_id in request.POST.getlist('labels'): try: labels.append(Label.objects.get(id=label_id)) except Label.DoesNotExist: pass if not errors: issue.save( ) # Need to save before we can enforce N to N relationship issue.starring.add(request.user) # Auto watch # Add or remove labels has history so we don't worry on history creation issue.labels.add(*labels) mentions, _ = filter_mentions(issue.content) if assignee: mentions.add(issue.assignee) mentions.discard(request.user) for user in mentions: issue.starring.add(user) # Auto watch send_mail(request.user, user, 'mail/issue_created.html', {'issue': issue}) # Broadcast new issues automatically send_mail(request.user, settings.BROADCAST_EMAIL, 'mail/issue_created.html', {'issue': issue}) if assignee: IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.ASSIGN, content=assignee) if due_time: IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.SET_DUE, content=due_time) return redirect('issues:detail', issue.id) return render( request, 'issues/create.html', { 'labels': Label.objects.all(), 'users': sorted_users(User.objects.filter(is_active=True)), 'errors': errors, })
def create(request): errors = [] if 'submit' in request.POST: 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): try: due_time = parse_date(due_time) if due_time: issue.due_time = due_time else: errors.append('date-misformed') except ValueError: errors.append('date-invalid') assignee = request.POST.get('assignee') if assignee: # Empty value => not assigned, no need to set try: issue.assignee = User.objects.get(id=assignee) except User.DoesNotExist: assignee = None # Just in case we're under attack... labels = [] for label_id in request.POST.getlist('labels'): try: labels.append(Label.objects.get(id=label_id)) except Label.DoesNotExist: pass if not errors: issue.save() # Need to save before we can enforce N to N relationship issue.starring.add(request.user) # Auto watch # Add or remove labels has history so we don't worry on history creation issue.labels.add(*labels) mentions, _ = filter_mentions(issue.content) if assignee: mentions.add(issue.assignee) mentions.discard(request.user) for user in mentions: issue.starring.add(user) # Auto watch send_mail(request.user, user, 'mail/issue_created.html', { 'issue': issue }) # Broadcast new issues automatically send_mail(request.user, settings.BROADCAST_EMAIL, 'mail/issue_created.html', { 'issue': issue }) if assignee: IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.ASSIGN, content=assignee) if due_time: IssueHistory.objects.create(issue=issue, user=request.user, mode=IssueHistory.SET_DUE, content=due_time) return redirect('issues:detail', issue.id) return render(request, 'issues/create.html', { 'labels': Label.objects.all(), 'users': sorted_users(User.objects.filter(is_active=True)), 'errors': errors, })