diff --git a/layerindex/urls.py b/layerindex/urls.py index bab7f10..0593485 100644 --- a/layerindex/urls.py +++ b/layerindex/urls.py @@ -8,7 +8,7 @@ from django.conf.urls import * from django.views.generic import TemplateView, DetailView, ListView, RedirectView from django.views.defaults import page_not_found from django.core.urlresolvers import reverse_lazy -from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, RedirectParamsView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView, LayerUpdateDetailView, UpdateListView, UpdateDetailView, StatsView, publish_view, LayerCheckListView, BBClassCheckListView, TaskStatusView, ComparisonRecipeSelectView, ComparisonRecipeSelectDetailView, task_log_view, task_stop_view +from layerindex.views import LayerListView, LayerReviewListView, LayerReviewDetailView, RecipeSearchView, MachineSearchView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view, HistoryListView, EditProfileFormView, AdvancedRecipeSearchView, BulkChangeView, BulkChangeSearchView, bulk_change_edit_view, bulk_change_patch_view, BulkChangeDeleteView, RecipeDetailView, RedirectParamsView, ClassicRecipeSearchView, ClassicRecipeDetailView, ClassicRecipeStatsView, LayerUpdateDetailView, UpdateListView, UpdateDetailView, StatsView, publish_view, LayerCheckListView, BBClassCheckListView, TaskStatusView, ComparisonRecipeSelectView, ComparisonRecipeSelectDetailView, task_log_view, task_stop_view, email_test_view from layerindex.models import LayerItem, Recipe, RecipeChangeset from rest_framework import routers from . import restviews @@ -164,6 +164,9 @@ urlpatterns = [ ComparisonRecipeSelectDetailView.as_view( template_name='layerindex/comparisonrecipeselectdetail.html'), name='comparison_select_detail'), + url(r'^email_test/$', + email_test_view, + name='email_test'), url(r'^task/(?P[-\w]+)/$', TaskStatusView.as_view( template_name='layerindex/task.html'), diff --git a/layerindex/views.py b/layerindex/views.py index 758ce84..4eed0ce 100644 --- a/layerindex/views.py +++ b/layerindex/views.py @@ -31,6 +31,7 @@ from django.contrib.auth.decorators import login_required from django.contrib import messages from django import forms from django.utils.html import escape +from django.contrib.sites.models import Site from reversion.models import Revision from . import utils @@ -266,6 +267,15 @@ def _check_url_branch(kwargs): raise Http404 branch = get_object_or_404(Branch, name=branchname) +def _get_help_contact(): + # find appropriate help contact + help_contact = None + for user in User.objects.all(): + if user.username != 'root' and (user.is_staff or user.is_superuser) and user.is_active: + help_contact = user + break + return help_contact + def publish_view(request, name): if not (request.user.is_authenticated() and request.user.has_perm('layerindex.publish_layer')): raise PermissionDenied @@ -279,12 +289,6 @@ def publish_view(request, name): subjecttext = get_template('layerindex/publishemailsubject.txt') bodytext = get_template('layerindex/publishemail.txt') maintainer_names = [m.name for m in maintainers] - # find appropriate help contact - help_contact = None - for user in User.objects.all(): - if user.username != 'root' and (user.is_staff or user.is_superuser) and user.is_active: - help_contact = user - break # create subject from subject template d = { @@ -298,7 +302,7 @@ def publish_view(request, name): 'maintainers': maintainer_names, 'layer_name': layeritem.name, 'layer_url': layer_url, - 'help_contact': help_contact, + 'help_contact': _get_help_contact(), } body = bodytext.render(d) @@ -1423,6 +1427,34 @@ def task_stop_view(request, task_id): return HttpResponse('terminated') +def email_test_view(request): + if not request.user.is_authenticated() and request.user.is_staff(): + raise PermissionDenied + + plaintext = get_template('layerindex/testemail.txt') + if request.user.first_name: + user_name = request.user.first_name + else: + user_name = request.user.username + site = Site.objects.get_current() + if site: + site_name = site.name + else: + site_name = 'OE Layer Index' + d = { + 'user_name': user_name, + 'site_name': site_name, + 'site_host': request.META['HTTP_HOST'], + 'help_contact': _get_help_contact(), + } + subject = '%s: test email' % site_name + from_email = settings.SUBMIT_EMAIL_FROM + to_email = request.user.email + text_content = plaintext.render(d) + tasks.send_email.apply_async((subject, text_content, from_email, [to_email])) + return HttpResponse('Test email sent to %s' % to_email) + + class ComparisonRecipeSelectView(ClassicRecipeSearchView): def _can_edit(self): if self.request.user.is_authenticated(): diff --git a/templates/base.html b/templates/base.html index 57f73be..5fa38b8 100644 --- a/templates/base.html +++ b/templates/base.html @@ -85,7 +85,9 @@
  • Recipe Maintenance
  • {% endif %} {% if user.is_staff %} +
  • Admin
  • +
  • Test email
  • {% endif %} diff --git a/templates/layerindex/testemail.txt b/templates/layerindex/testemail.txt new file mode 100644 index 0000000..9e1b6d0 --- /dev/null +++ b/templates/layerindex/testemail.txt @@ -0,0 +1,7 @@ +Hi {{ user_name }}, + +This is a test email from {{ site_name }} at {{ site_host }} to ensure that the email setup is working. + +The help contact for this site is {% if help_contact.first_name and help_contact.last_name %}{{ help_contact.first_name }} {{ help_contact.last_name}}{% else %}{{ help_contact.username }}{% endif %} <{{ help_contact.email }}> (usually defined as the first active staff user who isn't "root"). + +Have a nice day!