Exemplo n.º 1
0
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 })
Exemplo n.º 2
0
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
                })
Exemplo n.º 3
0
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,
        })
Exemplo n.º 4
0
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,
    })