diff --git a/helpdesk/email.py b/helpdesk/email.py index 428ffa70..f27dc969 100644 --- a/helpdesk/email.py +++ b/helpdesk/email.py @@ -499,41 +499,44 @@ def create_object_from_email_message(message, ticket_id, payload, files, logger) logger.info( "Message seems to be auto-reply, not sending any emails back to the sender") else: - # send mail to appropriate people now depending on what objects - # were created and who was CC'd - # Add auto-reply headers because it's an auto-reply and we must - extra_headers = { - 'In-Reply-To': message_id, - "Auto-Submitted": "auto-replied", - "X-Auto-Response-Suppress": "All", - "Precedence": "auto_reply", - } - if new: - ticket.send( - {'submitter': ('newticket_submitter', context), - 'new_ticket_cc': ('newticket_cc', context), - 'ticket_cc': ('newticket_cc', context)}, - fail_silently=True, - extra_headers=extra_headers, - ) - else: - context.update(comment=f.comment) - ticket.send( - {'submitter': ('newticket_submitter', context), - 'assigned_to': ('updated_owner', context)}, - fail_silently=True, - extra_headers=extra_headers, - ) - if queue.enable_notifications_on_email_events: - ticket.send( - {'ticket_cc': ('updated_cc', context)}, - fail_silently=True, - extra_headers=extra_headers, - ) - + send_info_email(message_id, f, ticket, context, queue, new) return ticket +def send_info_email(message_id: str, f: FollowUp, ticket: Ticket, context: dict, queue: dict, new: bool): + # send mail to appropriate people now depending on what objects + # were created and who was CC'd + # Add auto-reply headers because it's an auto-reply and we must + extra_headers = { + 'In-Reply-To': message_id, + "Auto-Submitted": "auto-replied", + "X-Auto-Response-Suppress": "All", + "Precedence": "auto_reply", + } + if new: + ticket.send( + {'submitter': ('newticket_submitter', context), + 'new_ticket_cc': ('newticket_cc', context), + 'ticket_cc': ('newticket_cc', context)}, + fail_silently=True, + extra_headers=extra_headers, + ) + else: + context.update(comment=f.comment) + ticket.send( + {'submitter': ('newticket_submitter', context), + 'assigned_to': ('updated_owner', context)}, + fail_silently=True, + extra_headers=extra_headers, + ) + if queue.enable_notifications_on_email_events: + ticket.send( + {'ticket_cc': ('updated_cc', context)}, + fail_silently=True, + extra_headers=extra_headers, + ) + + def get_ticket_id_from_subject_slug( queue_slug: str, subject: str, diff --git a/helpdesk/lib.py b/helpdesk/lib.py index f08aa23d..d265963b 100644 --- a/helpdesk/lib.py +++ b/helpdesk/lib.py @@ -81,12 +81,12 @@ def text_is_spam(text, request): # This will return 'True' is the given text is deemed to be spam, or # False if it is not spam. If it cannot be checked for some reason, we # assume it isn't spam. - from django.contrib.sites.models import Site - from django.core.exceptions import ImproperlyConfigured try: from akismet import Akismet except ImportError: return False + from django.contrib.sites.models import Site + from django.core.exceptions import ImproperlyConfigured try: site = Site.objects.get_current() except ImproperlyConfigured: diff --git a/helpdesk/urls.py b/helpdesk/urls.py index f0fcceab..1d001e18 100644 --- a/helpdesk/urls.py +++ b/helpdesk/urls.py @@ -151,7 +151,7 @@ urlpatterns += [ urlpatterns += [ re_path( - r"^rss/user/(?P[a-zA-Z0-9\_\.]+)/", + r"^rss/user/(?P[^/]+)/", helpdesk_staff_member_required(feeds.OpenTicketsByUser()), name="rss_user", ), diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index f31b89f6..3602536d 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -23,7 +23,9 @@ from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonRespons from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse, reverse_lazy from django.utils import timezone +from django.utils.dateparse import parse_datetime from django.utils.html import escape +from django.utils.timezone import make_aware from django.utils.translation import gettext as _ from django.views.decorators.csrf import requires_csrf_token from django.views.generic.edit import FormView, UpdateView @@ -536,12 +538,7 @@ def get_due_date_from_request_or_ticket( due_date = request.POST.get('due_date', None) or None if due_date is not None: - # based on Django code to parse dates: - # https://docs.djangoproject.com/en/2.0/_modules/django/utils/dateparse/ - match = DATE_RE.match(due_date) - if match: - kw = {k: int(v) for k, v in match.groupdict().items()} - due_date = date(**kw) + due_date = make_aware(parse_datetime(due_date)) else: due_date_year = int(request.POST.get('due_date_year', 0)) due_date_month = int(request.POST.get('due_date_month', 0))