diff --git a/apps/mailer/__init__.py b/apps/mailer/__init__.py index dad1e45fd5..5d6e967d51 100644 --- a/apps/mailer/__init__.py +++ b/apps/mailer/__init__.py @@ -6,12 +6,14 @@ from navigation.api import register_links from documents.models import Document from acls.api import class_permissions -from .permissions import PERMISSION_MAILING_LINK +from .permissions import PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT send_document_link = {'text': _(u'email link'), 'view': 'send_document_link', 'args': 'object.pk', 'famfam': 'email_link', 'permissions': [PERMISSION_MAILING_LINK]} +send_document = {'text': _(u'email document'), 'view': 'send_document', 'args': 'object.pk', 'famfam': 'email_open', 'permissions': [PERMISSION_MAILING_SEND_DOCUMENT]} -register_links(Document, [send_document_link]) +register_links(Document, [send_document_link, send_document]) class_permissions(Document, [ PERMISSION_MAILING_LINK, + PERMISSION_MAILING_SEND_DOCUMENT ]) diff --git a/apps/mailer/forms.py b/apps/mailer/forms.py index 38235e241f..35253f5f91 100644 --- a/apps/mailer/forms.py +++ b/apps/mailer/forms.py @@ -1,8 +1,23 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext as _ +from .conf import settings + class DocumentMailForm(forms.Form): + def __init__(self, *args, **kwargs): + as_attachment = kwargs.pop('as_attachment', False) + super(DocumentMailForm, self).__init__(*args, **kwargs) + if as_attachment: + self.fields['subject'].initial = settings.DOCUMENT_SUBJECT_TEMPLATE + self.fields['body'].initial = settings.DOCUMENT_BODY_TEMPLATE + else: + self.fields['subject'].initial = settings.LINK_SUBJECT_TEMPLATE + self.fields['body'].initial = settings.LINK_BODY_TEMPLATE + + email = forms.EmailField(label=_(u'Email address')) - subject = forms.CharField(label=_(u'Subject'), required=False, initial=_(u'Link for document: {{ document }}')) - body = forms.CharField(label=_(u'Body'), widget=forms.widgets.Textarea(), required=False, initial=_(u'To access this document click on the following link: {{ link }}')) + subject = forms.CharField(label=_(u'Subject'), required=False)#, initial=_(u'Link for document: {{ document }}')) + body = forms.CharField(label=_(u'Body'), widget=forms.widgets.Textarea(), required=False)#, initial=_(u'To access this document click on the following link: {{ link }}')) diff --git a/apps/mailer/permissions.py b/apps/mailer/permissions.py index 4879902311..1da56812dc 100644 --- a/apps/mailer/permissions.py +++ b/apps/mailer/permissions.py @@ -7,3 +7,4 @@ from permissions.models import PermissionNamespace, Permission mailer_namespace = PermissionNamespace('mailing', _(u'Mailing')) PERMISSION_MAILING_LINK = Permission.objects.register(mailer_namespace, 'mail_link', _(u'Send document link via email')) +PERMISSION_MAILING_SEND_DOCUMENT = Permission.objects.register(mailer_namespace, 'mail_document', _(u'Send document via email')) diff --git a/apps/mailer/urls.py b/apps/mailer/urls.py index 469a2f5da3..9ffadfe687 100644 --- a/apps/mailer/urls.py +++ b/apps/mailer/urls.py @@ -2,4 +2,5 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('mailer.views', url(r'^(?P\d+)/send/link/$', 'send_document_link', (), 'send_document_link'), + url(r'^(?P\d+)/send/document/$', 'send_document_link', {'as_attachment': True}, 'send_document'), ) diff --git a/apps/mailer/views.py b/apps/mailer/views.py index 1ea408cf94..cb37720ee4 100644 --- a/apps/mailer/views.py +++ b/apps/mailer/views.py @@ -17,20 +17,25 @@ from documents.models import Document, RecentDocument from permissions.models import Permission from acls.models import AccessEntry -from .permissions import PERMISSION_MAILING_LINK +from .permissions import PERMISSION_MAILING_LINK, PERMISSION_MAILING_SEND_DOCUMENT from .forms import DocumentMailForm -def send_document_link(request, document_id=None, document_id_list=None): +def send_document_link(request, document_id=None, document_id_list=None, as_attachment=False): if document_id: documents = [get_object_or_404(Document, pk=document_id)] elif document_id_list: documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')] + if as_attachment: + permission = PERMISSION_MAILING_SEND_DOCUMENT + else: + permission = PERMISSION_MAILING_LINK + try: - Permission.objects.check_permissions(request.user, [PERMISSION_MAILING_LINK]) + Permission.objects.check_permissions(request.user, [permission]) except PermissionDenied: - documents = AccessEntry.objects.filter_objects_by_access(PERMISSION_MAILING_LINK, request.user, documents) + documents = AccessEntry.objects.filter_objects_by_access(permission, request.user, documents) if not documents: messages.error(request, _(u'Must provide at least one document.')) @@ -44,7 +49,7 @@ def send_document_link(request, document_id=None, document_id_list=None): RecentDocument.objects.add_document_for_user(request.user, document) if request.method == 'POST': - form = DocumentMailForm(request.POST) + form = DocumentMailForm(request.POST, as_attachment=as_attachment) if form.is_valid(): context = Context({ 'link': 'http://%s%s' % (Site.objects.get_current().domain, reverse('document_view_simple', args=[document.pk])), @@ -59,27 +64,47 @@ def send_document_link(request, document_id=None, document_id_list=None): email_msg = EmailMultiAlternatives(subject_text, body_text_content, request.user.email, [form.cleaned_data['email']]) email_msg.attach_alternative(body_html_content, 'text/html') + if as_attachment: + for document in documents: + descriptor = document.open() + email_msg.attach(document.filename, descriptor.read(), document.file_mimetype) + descriptor.close() + try: email_msg.send() except Exception, exc: - messages.error(request, _(u'Error sending document link for document %(document)s; %(error)s.') % { - 'document': document, 'error': exc}) + if as_attachment: + messages.error(request, _(u'Error sending document: %(document)s, via email; %(error)s.') % { + 'document': document, 'error': exc}) + else: + messages.error(request, _(u'Error sending document link for document %(document)s; %(error)s.') % { + 'document': document, 'error': exc}) + else: - messages.success(request, _(u'Successfully sent document link via email.')) + if as_attachment: + messages.success(request, _(u'Successfully sent document via email.')) + else: + messages.success(request, _(u'Successfully sent document link via email.')) return HttpResponseRedirect(next) else: - form = DocumentMailForm() + form = DocumentMailForm(as_attachment=as_attachment) context = { 'form': form, 'next': next, - 'submit_label': _(u'send'), + 'submit_label': _(u'Send'), } if len(documents) == 1: context['object'] = documents[0] - context['title'] = _(u'Email link for document: %s') % ', '.join([unicode(d) for d in documents]) + if as_attachment: + context['title'] = _(u'Email document: %s') % ', '.join([unicode(d) for d in documents]) + else: + context['title'] = _(u'Email link for document: %s') % ', '.join([unicode(d) for d in documents]) elif len(documents) > 1: - context['title'] = _(u'Email links for documents: %s') % ', '.join([unicode(d) for d in documents]) + if as_attachment: + context['title'] = _(u'Email documents: %s') % ', '.join([unicode(d) for d in documents]) + else: + context['title'] = _(u'Email links for documents: %s') % ', '.join([unicode(d) for d in documents]) return render_to_response('generic_form.html', context, context_instance=RequestContext(request))