From 1d7883fc01b1c153c3b8bea3f8b05f60fe037294 Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Tue, 14 Aug 2012 21:37:59 +0000 Subject: [PATCH] Patch from yaco to avoid resetting from field. Gave the secretarait the ability to approve any unapproved liaison. Changed all the email code to use ietf.utils.mail - Legacy-Id: 4761 --- ietf/liaisons/mail.py | 26 ----------- ietf/liaisons/mails.py | 17 ------- .../commands/check_liaison_deadlines.py | 28 +++++++----- ietf/liaisons/models.py | 37 +++++++++------- ietf/liaisons/views.py | 44 ++++++++----------- static/js/liaisons.js | 12 ++--- 6 files changed, 61 insertions(+), 103 deletions(-) delete mode 100644 ietf/liaisons/mail.py diff --git a/ietf/liaisons/mail.py b/ietf/liaisons/mail.py deleted file mode 100644 index b22c38260..000000000 --- a/ietf/liaisons/mail.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.core.mail import EmailMessage - -# FIXME: this is not using the ietf mail stuff, which it really should -# - this code should be DELETED - -class IETFEmailMessage(EmailMessage): - - def __init__(self, *args, **kwargs): - cc = kwargs.pop('cc', []) - if cc: - assert isinstance(cc, (list, tuple)), '"cc" argument must be a list or tuple' - self.cc = list(cc) - else: - self.cc = [] - super(IETFEmailMessage, self).__init__(*args, **kwargs) - - def message(self): - msg = super(IETFEmailMessage, self).message() - if self.cc: - msg['Cc'] = ', '.join(self.cc) - if self.bcc: - msg['Bcc'] = ', '.join(self.bcc) - return msg - - def recipients(self): - return self.to + self.cc + self.bcc diff --git a/ietf/liaisons/mails.py b/ietf/liaisons/mails.py index c61721849..0572cc4b4 100644 --- a/ietf/liaisons/mails.py +++ b/ietf/liaisons/mails.py @@ -26,17 +26,6 @@ def send_liaison_by_email(request, liaison, fake=False): url=settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=liaison.pk)), referenced_url=settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=liaison.related_to.pk)) if liaison.related_to else None, )) - if fake: - # rather than this fake stuff, it's probably better to start a - # debug SMTP server as explained in the Django docs - from ietf.liaisons.mail import IETFEmailMessage - mail = IETFEmailMessage(subject=subject, - to=to_email, - from_email=from_email, - cc = cc, - bcc = bcc, - body = body) - return mail send_mail_text(request, to_email, from_email, subject, body, cc=", ".join(cc), bcc=", ".join(bcc)) @@ -56,12 +45,6 @@ def notify_pending_by_email(request, liaison, fake): url=settings.IDTRACKER_BASE_URL + urlreverse("liaison_approval_detail", kwargs=dict(object_id=liaison.pk)), referenced_url=settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=liaison.related_to.pk)) if liaison.related_to else None, )) - if fake: - mail = IETFEmailMessage(subject=subject, - to=to_email, - from_email=from_email, - body = body) - return mail send_mail_text(request, to_email, from_email, subject, body) def send_sdo_reminder(sdo): diff --git a/ietf/liaisons/management/commands/check_liaison_deadlines.py b/ietf/liaisons/management/commands/check_liaison_deadlines.py index 57d938de6..7deeb4ecf 100644 --- a/ietf/liaisons/management/commands/check_liaison_deadlines.py +++ b/ietf/liaisons/management/commands/check_liaison_deadlines.py @@ -6,7 +6,8 @@ from django.template.loader import render_to_string from django.core.urlresolvers import reverse as urlreverse from ietf.liaisons.models import LiaisonDetail -from ietf.liaisons.mail import IETFEmailMessage +#from ietf.liaisons.mail import IETFEmailMessage +from ietf.utils.mail import send_mail_text PREVIOUS_DAYS = { @@ -44,17 +45,20 @@ class Command(BaseCommand): 'url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_approval_detail", kwargs=dict(object_id=liaison.pk)), 'referenced_url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=liaison.related_to.pk)) if liaison.related_to else None, }) - mail = IETFEmailMessage(subject=subject, - to=to_email, - from_email=from_email, - cc=cc, - bcc=bcc, - body=body) - if not settings.DEBUG: - mail.send() - print 'Liaison %05s#: Deadline reminder Sent!' % liaison.pk - else: - print 'Liaison %05s#: Deadline reminder Not Sent because in DEBUG mode!' % liaison.pk + send_mail_text(context=None,to=to_email,frm=from_email,cc=cc,subject=subject,bcc=bcc,txt=body) + print 'Liaison %05s#: Deadline reminder Sent!' % liaison.pk + + #mail = IETFEmailMessage(subject=subject, + # to=to_email, + # from_email=from_email, + # cc=cc, + # bcc=bcc, + # body=body) + #if not settings.DEBUG: + # mail.send() + # print 'Liaison %05s#: Deadline reminder Sent!' % liaison.pk + #else: + # print 'Liaison %05s#: Deadline reminder Not Sent because in DEBUG mode!' % liaison.pk def handle(self, *args, **options): today = datetime.date.today() diff --git a/ietf/liaisons/models.py b/ietf/liaisons/models.py index 55d805610..d1b2fe832 100644 --- a/ietf/liaisons/models.py +++ b/ietf/liaisons/models.py @@ -7,7 +7,8 @@ from django.template.loader import render_to_string from django.contrib.auth.models import User from django.core.urlresolvers import reverse as urlreverse from ietf.idtracker.models import Acronym, PersonOrOrgInfo, Area, IESGLogin -from ietf.liaisons.mail import IETFEmailMessage +#from ietf.liaisons.mail import IETFEmailMessage +from ietf.utils.mail import send_mail_text from ietf.ietfauth.models import LegacyLiaisonUser from ietf.utils.admin import admin_link @@ -147,13 +148,14 @@ class LiaisonDetail(models.Model): 'url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_approval_detail", kwargs=dict(object_id=self.pk)), 'referenced_url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=self.related_to.pk)) if self.related_to else None, }) - mail = IETFEmailMessage(subject=subject, - to=to_email, - from_email=from_email, - body = body) - if not fake: - mail.send() - return mail + send_mail_text(context=None, to=to_email, frm=from_email, subject=subject, txt = body) + #mail = IETFEmailMessage(subject=subject, + # to=to_email, + # from_email=from_email, + # body = body) + #if not fake: + # mail.send() + #return mail def send_by_email(self, fake=False): if self.is_pending(): @@ -172,15 +174,16 @@ class LiaisonDetail(models.Model): 'url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=self.pk)), 'referenced_url': settings.IDTRACKER_BASE_URL + urlreverse("liaison_detail", kwargs=dict(object_id=self.related_to.pk)) if self.related_to else None, }) - mail = IETFEmailMessage(subject=subject, - to=to_email, - from_email=from_email, - cc = cc, - bcc = bcc, - body = body) - if not fake: - mail.send() - return mail + send_mail_text(context=None,to=to_email,frm=from_email,subject=subject,txt=body,cc=cc,bcc=bcc) + #mail = IETFEmailMessage(subject=subject, + # to=to_email, + # from_email=from_email, + # cc = cc, + # bcc = bcc, + # body = body) + #if not fake: + # mail.send() + #return mail def is_pending(self): return bool(self.approval and not self.approval.approved) diff --git a/ietf/liaisons/views.py b/ietf/liaisons/views.py index 04b7515c9..265ca5969 100644 --- a/ietf/liaisons/views.py +++ b/ietf/liaisons/views.py @@ -33,10 +33,7 @@ def add_liaison(request, liaison=None): if form.is_valid(): liaison = form.save() if request.POST.get('send', None): - if not settings.DEBUG: - liaison.send_by_email() - else: - return _fake_email_view(request, liaison) + liaison.send_by_email() return HttpResponseRedirect(reverse('liaison_list')) else: form = liaison_form_factory(request, liaison=liaison) @@ -89,14 +86,6 @@ def get_info(request): return HttpResponse(json_result, mimetype='text/javascript') -def _fake_email_view(request, liaison): - mail = liaison.send_by_email(fake=True) - return render_to_response('liaisons/liaison_mail_detail.html', - {'mail': mail, - 'message': mail.message(), - 'liaison': liaison}, - context_instance=RequestContext(request)) - if settings.USE_DB_REDESIGN_PROXY_CLASSES: def approvable_liaison_statements(group_codes): # this is a bit complicated because IETFHM encodes the @@ -160,12 +149,15 @@ def liaison_list(request): @can_submit_liaison def liaison_approval_list(request): - person = get_person_for_user(request.user) - approval_codes = IETFHM.get_all_can_approve_codes(person) - if settings.USE_DB_REDESIGN_PROXY_CLASSES: - to_approve = approvable_liaison_statements(approval_codes).order_by("-submitted") + if is_secretariat(request.user): + to_approve = LiaisonDetail.objects.filter(approved=None).order_by("-submitted") else: - to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date") + person = get_person_for_user(request.user) + approval_codes = IETFHM.get_all_can_approve_codes(person) + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + to_approve = approvable_liaison_statements(approval_codes).order_by("-submitted") + else: + to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date") return object_list(request, to_approve, allow_empty=True, @@ -175,12 +167,15 @@ def liaison_approval_list(request): @can_submit_liaison def liaison_approval_detail(request, object_id): - person = get_person_for_user(request.user) - approval_codes = IETFHM.get_all_can_approve_codes(person) - if settings.USE_DB_REDESIGN_PROXY_CLASSES: - to_approve = approvable_liaison_statements(approval_codes).order_by("-submitted") + if is_secretariat(request.user): + to_approve = LiaisonDetail.objects.filter(approved=None).order_by("-submitted") else: - to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date") + person = get_person_for_user(request.user) + approval_codes = IETFHM.get_all_can_approve_codes(person) + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + to_approve = approvable_liaison_statements(approval_codes).order_by("-submitted") + else: + to_approve = LiaisonDetail.objects.filter(approval__isnull=False, approval__approved=False, from_raw_code__in=approval_codes).order_by("-submitted_date") if request.method=='POST' and request.POST.get('do_approval', False): try: @@ -197,10 +192,7 @@ def liaison_approval_detail(request, object_id): else: approval.approved=True approval.save() - if not settings.DEBUG: - liaison.send_by_email() - else: - return _fake_email_view(request, liaison) + liaison.send_by_email() except LiaisonDetail.DoesNotExist: pass return HttpResponseRedirect(reverse('liaison_list')) diff --git a/static/js/liaisons.js b/static/js/liaisons.js index de6f75d9a..0a6ebbb46 100644 --- a/static/js/liaisons.js +++ b/static/js/liaisons.js @@ -209,7 +209,7 @@ updateReplyTo(); }; - var updateInfo = function(first_time) { + var updateInfo = function(first_time, sender) { var entity = organization; var to_entity = from; if (!entity.is('select') || !to_entity.is('select')) { @@ -232,7 +232,9 @@ render_mails_into(poc, response.poc, true); toggleApproval(response.needs_approval); checkPostOnly(response.post_only); - userSelect(response.full_list); + if (sender == 'from') { + userSelect(response.full_list); + } } } }); @@ -330,7 +332,7 @@ var checkFrom = function(first_time) { var reduce_options = form.find('.reducedToOptions'); if (!reduce_options.length) { - updateInfo(first_time); + updateInfo(first_time, 'from'); return; } var to_select = organization; @@ -351,7 +353,7 @@ to_select.find('optgroup').show(); to_select.find('option').show(); } - updateInfo(first_time); + updateInfo(first_time, 'from'); }; var checkSubmissionDate = function() { @@ -366,7 +368,7 @@ }; var initTriggers = function() { - organization.change(function() {updateInfo(false);}); + organization.change(function() {updateInfo(false, 'to');}); organization.change(checkOtherSDO); from.change(function() {checkFrom(false);}); reply.keyup(updateFrom);