From 71ff0aa6d5f76e3581499d9d008e934ee5a360ca Mon Sep 17 00:00:00 2001 From: finnertysea <26181241+finnertysea@users.noreply.github.com> Date: Fri, 20 Jan 2023 10:53:35 -0500 Subject: [PATCH 1/5] Bug fix - detected due date change when no change was made --- helpdesk/views/staff.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index f31b89f6..bf274ad9 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -25,6 +25,8 @@ from django.urls import reverse, reverse_lazy from django.utils import timezone from django.utils.html import escape from django.utils.translation import gettext as _ +from django.utils.dateparse import parse_datetime +from django.utils.timezone import make_aware from django.views.decorators.csrf import requires_csrf_token from django.views.generic.edit import FormView, UpdateView from helpdesk import settings as helpdesk_settings @@ -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)) From 527918022129859b837090850384c16cdb10969f Mon Sep 17 00:00:00 2001 From: finnertysea <26181241+finnertysea@users.noreply.github.com> Date: Tue, 24 Jan 2023 13:36:18 -0500 Subject: [PATCH 2/5] Bug fix #1066 - modified import order to placate isort --- helpdesk/views/staff.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpdesk/views/staff.py b/helpdesk/views/staff.py index bf274ad9..3602536d 100644 --- a/helpdesk/views/staff.py +++ b/helpdesk/views/staff.py @@ -23,10 +23,10 @@ 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.html import escape -from django.utils.translation import gettext as _ 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 from helpdesk import settings as helpdesk_settings From 66a83a07169b92240b4922eba125782e41c11761 Mon Sep 17 00:00:00 2001 From: finnertysea <26181241+finnertysea@users.noreply.github.com> Date: Fri, 27 Jan 2023 12:33:33 -0800 Subject: [PATCH 3/5] #1069 - make regex matching username more permissive for rss_user to match rss_user_queue --- helpdesk/urls.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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", ), From aad73a5d90421d59ab71189004925cfc7fbf2884 Mon Sep 17 00:00:00 2001 From: Christopher Broderick Date: Fri, 10 Mar 2023 22:06:14 +0000 Subject: [PATCH 4/5] Fix format errors --- helpdesk/email.py | 67 +++++++++++++++++++++++++---------------------- helpdesk/lib.py | 4 +-- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/helpdesk/email.py b/helpdesk/email.py index 428ffa70..af8ee822 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, 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: From 7f8e996668eea1c8d6c251c6a922141015b725eb Mon Sep 17 00:00:00 2001 From: Christopher Broderick Date: Fri, 10 Mar 2023 22:11:34 +0000 Subject: [PATCH 5/5] Fix missing param in call --- helpdesk/email.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk/email.py b/helpdesk/email.py index af8ee822..f27dc969 100644 --- a/helpdesk/email.py +++ b/helpdesk/email.py @@ -499,7 +499,7 @@ 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_info_email(message_id, f, context, queue, new) + send_info_email(message_id, f, ticket, context, queue, new) return ticket