Просмотр исходного кода

- Reorganised and updated e-mail templates
- New settings: plain text e-mail footer and option to remove new user passwords from "welcome aboard!" e-mails
- Bugfixes in fixtures and settings updater
- Made CATCH_ALL_EMAIL_ADDRESS optional.

Ralfp 12 лет назад
Родитель
Сommit
50933b93e3
45 измененных файлов с 260 добавлено и 190 удалено
  1. 25 14
      misago/settings/fixtures.py
  2. 1 1
      misago/users/admin/users/forms.py
  3. 16 7
      misago/users/fixtures.py
  4. 8 2
      misago/users/models.py
  5. 7 7
      misago/users/views/__init__.py
  6. 10 10
      misago/users/views/activation.py
  7. 6 6
      misago/users/views/password.py
  8. 1 1
      misago/views.py
  9. 40 20
      templates/_email/base_html.html
  10. 7 7
      templates/_email/base_plain.html
  11. 9 0
      templates/_email/users/activation/admin_html.html
  12. 9 0
      templates/_email/users/activation/admin_plain.html
  13. 16 0
      templates/_email/users/activation/none_html.html
  14. 6 3
      templates/_email/users/activation/none_plain.html
  15. 14 0
      templates/_email/users/activation/resend_html.html
  16. 12 0
      templates/_email/users/activation/resend_plain.html
  17. 14 0
      templates/_email/users/activation/user_html.html
  18. 4 5
      templates/_email/users/activation/user_plain.html
  19. 0 17
      templates/_email/users/activation_0_html.html
  20. 0 11
      templates/_email/users/activation_1_html.html
  21. 0 8
      templates/_email/users/activation_2_html.html
  22. 0 10
      templates/_email/users/activation_2_plain.html
  23. 0 12
      templates/_email/users/activation_resend_html.html
  24. 0 10
      templates/_email/users/activation_resend_plain.html
  25. 17 0
      templates/_email/users/password/confirm_html.html
  26. 5 2
      templates/_email/users/password/confirm_plain.html
  27. 18 0
      templates/_email/users/password/new_html.html
  28. 14 0
      templates/_email/users/password/new_plain.html
  29. 0 12
      templates/_email/users/reset_confirm_html.html
  30. 0 13
      templates/_email/users/reset_new_html.html
  31. 0 11
      templates/_email/users/reset_new_plain.html
  32. 0 0
      templates/_message/users/activation/admin.html
  33. 1 1
      templates/_message/users/activation/credentials.html
  34. 0 0
      templates/_message/users/activation/new.html
  35. 0 0
      templates/_message/users/activation/not_required.html
  36. 0 0
      templates/_message/users/activation/only_by_admin.html
  37. 0 0
      templates/_message/users/activation/required.html
  38. 0 0
      templates/_message/users/activation/resent.html
  39. 0 0
      templates/_message/users/activation/user.html
  40. 0 0
      templates/_message/users/password/reset_confirm.html
  41. 0 0
      templates/_message/users/password/reset_done.html
  42. 0 0
      templates/_message/users/registration/activation_admin.html
  43. 0 0
      templates/_message/users/registration/activation_none.html
  44. 0 0
      templates/_message/users/registration/activation_user.html
  45. 0 0
      templates/_message/users/registration/registrations_off.html

+ 25 - 14
misago/settings/fixtures.py

@@ -62,10 +62,17 @@ settings_fixture = (
                 'type':         "string",
                 'input':        "textarea",
                 'separator':    _("Board E-Mails"),
-                'name':         _("Custom Footnote"),
-                'description':  _("Custom Footnote to display in e-mail messages sent by board."),
+                'name':         _("Custom Footnote in HTML E-mails"),
+                'description':  _("Custom Footnote to display in HTML e-mail messages sent by board."),
                 'position':     6,
             }),
+            ('email_footnote_plain', {
+                'type':         "string",
+                'input':        "textarea",
+                'name':         _("Custom Footnote in plain text E-mails"),
+                'description':  _("Custom Footnote to display in plain text e-mail messages sent by board."),
+                'position':     7,
+            }),
         ),
    }),
 )
@@ -119,6 +126,17 @@ def update_settings_group_fixture(group, fixture):
         # Update group settings
         fixture = fixture.get('settings', ())
         for setting in fixture:
+            # Clear setting value
+            value = setting[1].get('value')
+            value_default = setting[1].get('default')
+            # Convert boolean True and False to 1 and 0, otherwhise it wont work
+            if setting[1].get('type') == 'boolean':
+                value = 1 if value else 0
+                value_default = 1 if value_default else 0
+            # Convert array value to string
+            if setting[1].get('type') == 'array':
+                value = ','.join(value) if value else ''
+                value_default = ','.join(value_default) if value_default else ''
             try:
                 # Update setting entry
                 model_setting = Setting.objects.get(setting=setting[0])
@@ -132,17 +150,6 @@ def update_settings_group_fixture(group, fixture):
                 model_setting.description = get_msgid(setting[1].get('description'))
                 model_setting.save(force_update=True)
             except Setting.DoesNotExist:
-                # Create new setting entry
-                value = setting[1].get('value')
-                value_default = setting[1].get('default')
-                # Convert boolean True and False to 1 and 0, otherwhise it wont work
-                if setting[1].get('type') == 'boolean':
-                    value = 1 if value else 0
-                    value_default = 1 if value_default else 0
-                # Convert array value to string
-                if setting[1].get('type') == 'array':
-                    value = ','.join(value) if value else ''
-                    value_default = ','.join(value_default) if value_default else ''
                 # Store setting in database
                 model_setting = Setting(
                                         setting=setting[0],
@@ -173,4 +180,8 @@ def update_settings_fixture(fixture):
     
     
 def load_fixtures():
-    load_settings_fixture(settings_fixture)
+    load_settings_fixture(settings_fixture)
+    
+    
+def update_fixtures():
+    update_settings_fixture(settings_fixture)

+ 1 - 1
misago/users/admin/users/forms.py

@@ -7,7 +7,7 @@ from misago.users.models import Rank
 class SearchUsersForm(Form):
     username = forms.CharField(max_length=255, required=False)
     email = forms.CharField(max_length=255, required=False)
-    activation = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=(('0', _("Already Active")), ('1', _("By User")), ('2', _("By Administrator"))), required=False)
+    activation = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=(('0', _("Already Active")), ('1', _("By User")), ('2', _("By Administrator")), ('3', _("Sign-In Credentials Change"))), required=False)
     rank = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Rank.objects.order_by('order').all(), required=False)
     role = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=Role.objects.order_by('name').all(), required=False)
     

+ 16 - 7
misago/users/fixtures.py

@@ -98,6 +98,14 @@ settings_fixtures = (
                 'description':  _("Enter number of days since password was set to force member to change it with new one, or 0 to dont force your members to change their passwords."),
                 'position':     4,
             }),
+            ('password_in_email', {
+                'value':        False,
+                'type':         "boolean",
+                'input':        "yesno",
+                'name':         _("Include User Password in Welcoming E-mail"),
+                'description':  _("If you want to, Misago can include new user password in welcoming e-mail that is sent to new users after successful account creation."),
+                'position':     5,
+            }),
             ('sessions_hidden', {
                 'value':        True,
                 'type':         "boolean",
@@ -105,7 +113,7 @@ settings_fixtures = (
                 'separator':    _("Sessions Settings"),
                 'name':         _("Allow hidden sessions"),
                 'description':  _("Enabling this option will allow users to hide their presence on forums from other members."),
-                'position':     5,
+                'position':     6,
             }),
             ('sessions_validate_ip', {
                 'value':        True,
@@ -113,7 +121,7 @@ settings_fixtures = (
                 'input':        "yesno",
                 'name':         _("Check IP on session authorization"),
                 'description':  _("Makes sessions more secure, but can cause problems with proxies and VPN's."),
-                'position':     6,
+                'position':     7,
             }),
             ('remember_me_allow', {
                 'value':        True,
@@ -122,7 +130,7 @@ settings_fixtures = (
                 'separator':    _("Sign-In Settings"),
                 'name':         _('Enable "Remember Me" functionality'),
                 'description':  _("Turning this option on allows users to sign in on to your board using cookie-based tokens. This may result in account compromisation when user fails to sign out on shared computer."),
-                'position':     7,
+                'position':     8,
             }),
             ('remember_me_lifetime', {
                 'value':        90,
@@ -130,6 +138,7 @@ settings_fixtures = (
                 'input':        "text",
                 'name':         _('"Remember Me" token lifetime'),
                 'description':  _('Number of days since either last use or creation of "Remember Me" token to its expiration.'),
+                'position':     9,
             }),
             ('remember_me_extensible', {
                 'value':        1,
@@ -137,7 +146,7 @@ settings_fixtures = (
                 'input':        "yesno",
                 'name':         _('Allow "Remember Me" tokens refreshing'),
                 'description':  _('Set this setting to off if you want to force your users to periodically update their "Remember Me" tokens by signing in. If this option is on, Tokens are updated when they are used to open new session.'),
-                'position':     8,
+                'position':     10,
             }),
             ('login_attempts_limit', {
                 'value':        3,
@@ -147,7 +156,7 @@ settings_fixtures = (
                 'separator':    _("Brute-Force Countermeasures"),
                 'name':         _("Limit Sign In attempts"),
                 'description':  _('Enter maximal number of allowed Sign In attempts before IP address "jams".'),
-                'position':     9,
+                'position':     11,
             }),
             ('registrations_jams', {
                 'value':        1,
@@ -156,7 +165,7 @@ settings_fixtures = (
                 'input':        "yesno",
                 'name':         _("Count failed register attempts too"),
                 'description':  _("Set this setting to yes if you want failed register attempts to count into limit."),
-                'position':     10,
+                'position':     12,
             }),
             ('jams_lifetime', {
                 'value':        15,
@@ -165,7 +174,7 @@ settings_fixtures = (
                 'input':        "text",
                 'name':         _("Automaticaly unlock jammed IPs"),
                 'description':  _('Enter number of minutes since IP address "jams" to automatically unlock it, or 0 to never unlock jammed IP adresses. Jams dont count as bans.'),
-                'position':     11,
+                'position':     13,
             }),
         ),
     }),

+ 8 - 2
misago/users/models.py

@@ -159,7 +159,7 @@ class User(models.Model):
     ACTIVATION_NONE = 0
     ACTIVATION_USER = 1
     ACTIVATION_ADMIN = 2
-    ACTIVATION_PASSWORD = 3
+    ACTIVATION_CREDENTIALS = 3
     
     statistics_name = _('Users Registrations')
         
@@ -318,16 +318,22 @@ class User(models.Model):
         context = RequestContext(request, context)
         context['author'] = context['user']
         context['user'] = self
+        
         # Set message recipient
-        if settings.DEBUG:
+        if settings.DEBUG and settings.CATCH_ALL_EMAIL_ADDRESS:
             recipient = settings.CATCH_ALL_EMAIL_ADDRESS
         else:
             recipient = self.email
+            
         # Build and send message
         email = EmailMultiAlternatives(subject, templates[0].render(context), settings.EMAIL_HOST_USER, [recipient])
         email.attach_alternative(templates[1].render(context), "text/html")
         email.send()
     
+    def get_activation(self):
+        activations = ['none', 'user', 'admin', 'credentials']
+        return activations[self.activation]
+    
     def get_date(self):
         return self.join_date
         

+ 7 - 7
misago/users/views/__init__.py

@@ -17,7 +17,7 @@ from misago.views import error403
 @block_jammed
 def register(request):
     if request.settings['account_activation'] == 'block':
-        return error403(request, Message(request, 'auth/registrations_off'))
+        return error403(request, Message(request, 'users/registration/registrations_off'))
     message = None
     if request.method == 'POST':
         form = UserRegisterForm(request.POST, request=request)
@@ -38,21 +38,21 @@ def register(request):
             if need_activation == User.ACTIVATION_NONE:
                 # No need for activation, sign in user
                 sign_user_in(request, new_user)
-                request.messages.set_flash(Message(request, 'auth/registered_activation_none', extra={'user':new_user}), 'success')
+                request.messages.set_flash(Message(request, 'users/activation/none', extra={'user':new_user}), 'success')
             if need_activation == User.ACTIVATION_USER:
                 # Mail user activation e-mail
-                request.messages.set_flash(Message(request, 'auth/registered_activation_user', extra={'user':new_user}), 'info')
+                request.messages.set_flash(Message(request, 'users/registration/activation_user', extra={'user':new_user}), 'info')
                 new_user.email_user(
                                     request,
-                                    'auth/activation_0',
+                                    'users/activation/user',
                                     _("Welcome aboard, %(username)s!" % {'username': new_user.username}),
                                     )
             if need_activation == User.ACTIVATION_ADMIN:
                 # Require admin activation
-                request.messages.set_flash(Message(request, 'users/registered_activation_admin', extra={'user':new_user}), 'info')
+                request.messages.set_flash(Message(request, 'users/registration/activation_admin', extra={'user':new_user}), 'info')
             new_user.email_user(
                                 request,
-                                ('auth/activation_%s' % need_activation),
+                                'users/activation/admin',
                                 _("Welcome aboard, %(username)s!" % {'username': new_user.username}),
                                 {'password': form.cleaned_data['password']}
                                 )
@@ -67,7 +67,7 @@ def register(request):
                 return redirect(reverse('register'))
     else:
         form = UserRegisterForm(request=request)
-    return request.theme.render_to_response('auth/register.html',
+    return request.theme.render_to_response('users/register.html',
                                             {
                                              'message': message,
                                              'form': FormLayout(form),

+ 10 - 10
misago/users/views/activation.py

@@ -27,18 +27,18 @@ def activate(request, username="", user="0", token=""):
         if user_ban:
             return error_banned(request, user, user_ban)
         if user.activation == User.ACTIVATION_NONE:
-            return error403(request, Message(request, 'users/activations/not_required', extra={'user': user}))
+            return error403(request, Message(request, 'users/activation/not_required', extra={'user': user}))
         if user.activation == User.ACTIVATION_ADMIN:
-            return error403(request, Message(request, 'users/activations/only_by_admin', extra={'user': user}))
+            return error403(request, Message(request, 'users/activation/only_by_admin', extra={'user': user}))
         if not token or not user.token or user.token != token:
             return error403(request, Message(request, 'users/invalid_confirmation_link', extra={'user': user}))
         # Activate and sign in our member
         user.activation = User.ACTIVATION_NONE
         sign_user_in(request, user)
-        if current_activation == User.ACTIVATION_PASSWORD:
-            request.messages.set_flash(Message(request, 'users/activations/password', extra={'user':user}), 'success')
+        if current_activation == User.ACTIVATION_CREDENTIALS:
+            request.messages.set_flash(Message(request, 'users/activation/credentials', extra={'user':user}), 'success')
         else:
-            request.messages.set_flash(Message(request, 'users/activations/new', extra={'user':user}), 'success')
+            request.messages.set_flash(Message(request, 'users/activation/new', extra={'user':user}), 'success')
         return redirect(reverse('index'))
     except User.DoesNotExist:
         return error404(request)
@@ -57,14 +57,14 @@ def form(request):
             if user_ban:
                 return error_banned(request, user, user_ban)
             if user.activation == User.ACTIVATION_NONE:
-                return error403(request, Message(request, 'users/activations/not_required', extra={'user': user}))
+                return error403(request, Message(request, 'users/activation/not_required', extra={'user': user}))
             if user.activation == User.ACTIVATION_ADMIN:
-                return error403(request, Message(request, 'users/activations/only_by_admin', extra={'user': user}))
-            request.messages.set_flash(Message(request, 'users/activations/resent', extra={'user':user}), 'success')
+                return error403(request, Message(request, 'users/activation/only_by_admin', extra={'user': user}))
+            request.messages.set_flash(Message(request, 'users/activation/resent', extra={'user':user}), 'success')
             user.email_user(
                             request,
-                            'users/activations/resend',
-                            _("New Account Activation"),
+                            'users/activation/resend',
+                            _("Account Activation"),
                             )
             return redirect(reverse('index'))
         else:

+ 6 - 6
misago/users/views/password.py

@@ -27,13 +27,13 @@ def form(request):
             if user_ban:
                 return error_banned(request, user, user_ban)
             elif user.activation != User.ACTIVATION_NONE:
-                return error403(request, Message(request, 'users/activations/required', {'user': user}))
+                return error403(request, Message(request, 'users/activation/required', {'user': user}))
             user.token = get_random_string(12)
             user.save(force_update=True)
-            request.messages.set_flash(Message(request, 'users/passwords/reset_confirm', extra={'user':user}), 'success')
+            request.messages.set_flash(Message(request, 'users/password/reset_confirm', extra={'user':user}), 'success')
             user.email_user(
                             request,
-                            'users/reset_confirm',
+                            'users/password/confirm',
                             _("Confirm New Password Request")
                             )
             return redirect(reverse('index'))
@@ -60,7 +60,7 @@ def reset(request, username="", user="0", token=""):
         if user_ban:
             return error_banned(request, user, user_ban)
         if user.activation != User.ACTIVATION_NONE:
-            return error403(request, Message(request, 'users/activations/required', {'user': user}))
+            return error403(request, Message(request, 'users/activation/required', {'user': user}))
         if not token or not user.token or user.token != token:
             return error403(request, Message(request, 'users/invalid_confirmation_link', {'user': user}))
         new_password = get_random_string(6)
@@ -71,10 +71,10 @@ def reset(request, username="", user="0", token=""):
         Session.objects.filter(user=user).update(user=None)
         Token.objects.filter(user=user).delete()
         # Set flash and mail new password
-        request.messages.set_flash(Message(request, 'users/passwords/reset_done', extra={'user':user}), 'success')
+        request.messages.set_flash(Message(request, 'users/password/reset_done', extra={'user':user}), 'success')
         user.email_user(
                         request,
-                        'users/reset_new',
+                        'users/password/new',
                         _("Your New Password"),
                         {'password': new_password}
                         )

+ 1 - 1
misago/views.py

@@ -1,6 +1,6 @@
 from django.template import RequestContext
 
-def home(request):
+def home(request):    
     return request.theme.render_to_response('index.html',
                                             {'page_title': 'Hello World!'},
                                             context_instance=RequestContext(request));

+ 40 - 20
templates/_email/base_html.html

@@ -1,26 +1,46 @@
-{% load url from future %}
-{% load i18n %}
+{%- load url from future -%}
+{%- load i18n -%}
+{%- set style_link = "style=\"color: #08C;\"" -%}
+{%- set style_p = "style=\"padding: 0px; margin: 16px 0px;\"" -%}
+{%- set style_well = "style=\"background-color: #F0F0F0; border-radius: 3px; margin: 24px 0px; padding: 12px 16px; font-size: 16px;\"" -%}
+{%- set style_well_big = "style=\"background-color: #F0F0F0; border-radius: 3px; margin: 24px 0px; padding: 12px 16px; font-size: 18px; text-align: center;\"" -%}
+{%- set style_button = "style=\"background-color: #08C; border-radius: 3px; color: #FFF; display: block; text-align: center; margin: 24px 0px; padding: 12px 0px; text-decoration: none; font-weight: bold; font-size: 18px;\"" -%}
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="utf-8">
-    <title></title>
   </head>
-  <body style="background: #F0F0F0; padding: 24px 18px; color: #333;">
-    <div style="max-width: 600px; margin: 0px auto;">
-      <div style="background: #FEFEFE; border-radius: 3px;">
-        <div style="padding: 8px 16px; background: #3465a4; border: 1px solid #204a87; border-radius: 3px 3px 0px 0px;">
-          <h1 style="margin: 0px; padding: 0px; font-weight: normal;"><a href="{{ board_address }}" style="color: #FEFEFE; text-decoration: none;">{{ settings.board_name }} <span style="color: #729fcf;">{{ board_address }}</span></a></h1>
-        </div>
-        <div style="border: 1px solid #babdb6; border-top: none; border-radius: 0px 0px 3px 3px; padding: 12px 16px;">
-          <h1 style="margin: 0px; padding: 0px; margin-bottom: 8px; color: #454545;">{% block title %}{% trans username=user.username %}Hello, {{ username }}{% endtrans %}!{% endblock %}</h1>
-  	      {% block content %}{% endblock %}
-        </div>
-      </div>
-      <div style="color: #999; padding: 12px 16px; padding-bottom: 0px;">{% if settings.email_footnote %}
-        <p style="margin: 0px; padding: 0px; color: #666;">{{ settings.email_footnote }}</p>{% endif %}
-        <p style="margin: 0px; padding: 0px;">{% trans %}This is an automatically generated email.{% endtrans %}</p>
-      </div>
-    </div>
+  <body>
+    <table width="100%">
+      <tbody>
+        <tr>
+          <td style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">
+            <table width="600" align="center">
+              <tbody>
+                <tr>
+                  <td style="padding-bottom: 8px;">
+                  	<h1 style="border-bottom: 1px solid #DDD; margin-bottom: 24px; padding: 12px 0px; font-size: 28px;">
+                  		{% trans username=user.username %}Hey, {{ username }}!{% endtrans %}
+                  		<div style="margin-top: 6px; font-size: 18px; color: #999;">{% block title %}{% endblock %}<div>
+                  	</h1>
+                  	{% block content %}{% endblock %}
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+            <table width="600" align="center">
+              <tbody>
+                <tr>
+                  <td style="border-top: 1px solid #DDD; padding: 12px 0px; color: #BBB;">{% if settings.email_footnote %}
+                  	{{ settings.email_footnote|safe }}{% else %}
+                  	{% trans board_name=settings.board_name %}This e-mail was sent from {{ board_name }}.{% endtrans %}<br><a href="{{ board_address }}" {{ style_link|safe }}>{{ board_address }}</a>{% endif %}
+                  </td>
+                </tr>
+              </tbody>
+            </table>
+          </td>
+        </tr>
+      </tbody>
+    </table>
   </body>
-</html>
+</html>

+ 7 - 7
templates/_email/base_plain.html

@@ -1,13 +1,13 @@
 {% load url from future %}
 {% load i18n %}
 
-{% trans username=user.username %}Hello, {{ username }}{% endtrans %}
-
+{% trans username=user.username %}Hey, {{ username }}!{% endtrans %}
+{% block title %}{% endblock %}
+========================================
 {% block content %}{% endblock %}
 
-========================================{% if settings.email_footnote %}
-{{ settings.email_footnote }}
 ----------------------------------------
-{% endif %}
-{{ settings.board_name }} - {{ board_address }}
-{% trans %}This is an automatically generated email.{% endtrans %}
+{% if settings.email_footnote_plain -%}
+{{ settings.email_footnote_plain }}{% else -%}
+{% trans board_name=settings.board_name %}This e-mail was sent from {{ board_name }}.{% endtrans %}
+{{ settings.board_name }} - {{ board_address }}{% endif %}

+ 9 - 0
templates/_email/users/activation/admin_html.html

@@ -0,0 +1,9 @@
+{% extends "_email/base_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block content %}
+{{ super() }}
+
+<p {{ style_p|safe }}>{% trans %}Your account will remain inactive until Board Administrator accepts it. Depending on number of new registrations this may take few minutes or few days. Thanks for your patience!{% endtrans %}</p>
+{% endblock %}

+ 9 - 0
templates/_email/users/activation/admin_plain.html

@@ -0,0 +1,9 @@
+{% extends "_email/users/activation/none_plain.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block content %}
+{{ super() }}
+
+{% trans %}Your account will remain inactive until Board Administrator accepts it. Depending on number of new registrations this may take few minutes or few days. Thanks for patience!{% endtrans %}
+{% endblock %}

+ 16 - 0
templates/_email/users/activation/none_html.html

@@ -0,0 +1,16 @@
+{% extends "_email/base_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Welcome aboard {{ board_name }}!{% endtrans %}{% endblock %}
+
+{% block content %}
+<p {{ style_p|safe }}>{% trans username=user.username %}{{ username }}, you are receiving this message because you have used this email address to sign up on our forums.{% endtrans %}</p>
+
+<div {{ style_well|safe }}>
+  <p {{ style_p|safe }}><b>{% trans %}Username{% endtrans %}:</b><br>{{ user.username }}</p>
+  <p {{ style_p|safe }}><b>{% trans %}E-mail{% endtrans %}:</b><br>{{ user.email }}</p>{% if settings.password_in_email %}
+  <p {{ style_p|safe }}><b>{% trans %}Password{% endtrans %}:</b><br>{{ password }}</p>{% endif %}
+</div>
+<p {{ style_p|safe }}>{% trans %}This is only time you will receive your current password. For security reasons we don't store members passwords as they are entered on registration, instead we encrypt them in unreversible manner to keep them safe.{% endtrans %}</p>
+{% endblock %}

+ 6 - 3
templates/_email/users/activation_0_plain.html → templates/_email/users/activation/none_plain.html

@@ -1,14 +1,17 @@
 {% extends "_email/base_plain.html" %}
 {% load i18n %}
 {% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Welcome aboard {{ board_name }}!{% endtrans %}{% endblock %}
+
 {% block content %}
-{% trans %}You are receiving this message because you have used this email address to sign up on our forums.{% endtrans %}
+{% trans username=user.username %}{{ username }}, you are receiving this message because you have used this email address to sign up on our forums.{% endtrans %}
 
 Your Account Data
 -----------------
 {% trans %}Username{% endtrans %}:    {{ user.username }}
-{% trans %}E-mail{% endtrans %}:    {{ user.email }}
-{% trans %}Password{% endtrans %}:    {{ password }}
+{% trans %}E-mail{% endtrans %}:    {{ user.email }}{% if settings.password_in_email %}
+{% trans %}Password{% endtrans %}:    {{ password }}{% endif %}
 
 {% trans %}This is only time you will receive your current password. Due to security reasons we dont store members passwords as they are entered on registration, instead we encrypt those password in un-reversible manner to keep them safe.{% endtrans %}{% block activation_instructions %}{% endblock %}
 {% endblock %}

+ 14 - 0
templates/_email/users/activation/resend_html.html

@@ -0,0 +1,14 @@
+{% extends "_email/base_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Account Activation on {{ board_name }}{% endtrans %}{% endblock %}
+
+{% block content %}
+<p {{ style_p|safe }}>{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested new activation e-mail.{% endtrans %}</p>
+<p {{ style_p|safe }}>{% trans %}To activate your account, click the link below:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}" {{ style_button|safe }}>{% trans %}Activate my account!{% endtrans %}</a>
+
+<p {{ style_p|safe }}>{% trans %}If the above link is not clickable, copy and paste this link into your web browser's address bar:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}" {{ style_link|safe }}>{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}</a>
+{% endblock %}

+ 12 - 0
templates/_email/users/activation/resend_plain.html

@@ -0,0 +1,12 @@
+{% extends "_email/base_plain.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Account Activation on {{ board_name }}{% endtrans %}{% endblock %}
+
+{% block content %}
+{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested new activation e-mail.{% endtrans %}
+
+{% trans %}To activate your account, click the link below:{% endtrans %}
+{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}
+{% endblock %}

+ 14 - 0
templates/_email/users/activation/user_html.html

@@ -0,0 +1,14 @@
+{% extends "_email/users/activation/none_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block content %}
+{{ super() }}
+
+<p {{ style_p|safe }}>{% trans %}We require our members to prove validity of e-mail address used during registration. To prove that you are owner of e-mail address used to create this account, click the link below:{% endtrans %}</p>
+<p {{ style_p|safe }}>{% trans %}To activate your account, click the link below:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}" {{ style_button|safe }}>{% trans %}Activate my account!{% endtrans %}</a>
+
+<p {{ style_p|safe }}>{% trans %}If the above link is not clickable, copy and paste this link into your web browser's address bar:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}" {{ style_link|safe }}>{{ board_address }}{% url 'activate' username=user.username_slug, user=user.id, token=user.token %}</a>
+{% endblock %}

+ 4 - 5
templates/_email/users/activation_1_plain.html → templates/_email/users/activation/user_plain.html

@@ -1,11 +1,10 @@
-{% extends "_email/auth/activation_0_plain.html" %}
+{% extends "_email/users/activation/none_plain.html" %}
 {% load i18n %}
 {% load url from future %}
 
-{% block activation_instructions %}
+{% block content %}
+{{ super() }}
 
-Account Activation
-------------------
 {% trans %}We require our members to prove validity of e-mail address used during registration. To prove that you are owner of e-mail address used to create this account, click the link below:{% endtrans %}
-{{ board_address }}{% url 'activate' username=user.username user=user.id token=user.token %}
+{{ board_address }}{% url 'activate' username=user.username, user=user.id, token=user.token %}
 {% endblock %}

+ 0 - 17
templates/_email/users/activation_0_html.html

@@ -1,17 +0,0 @@
-{% extends "_email/base_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block content %}
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}You are receiving this message because you have used this email address to sign up on our forums.{% endtrans %}</p>
-
-<h2 style="margin: 12px 0px; padding: 0px;">Your Account Data</h2>
-<div style="background-color: #EFEFEF; border-radius: 3px; margin: 0px; padding: 8px;">
-  <strong>{% trans %}Username{% endtrans %}:</strong> {{ user.username }}<br>
-  <strong>{% trans %}E-mail{% endtrans %}:</strong> {{ user.email }}<br>
-  <strong>{% trans %}Password{% endtrans %}:</strong> {{ password }}
-</div>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}This is only time you will receive your current password. Due to security reasons we dont store members passwords as they are entered on registration, instead we encrypt those password in un-reversible manner to keep them safe.{% endtrans %}</p>
-{% block activation_instructions %}{% endblock %}
-<p style="margin: 12px 0px; margin-bottom 0px; padding: 0px;">{% trans %}Welcome aboard!{% endtrans %}<br><a href="{{ board_address }}">{% if settings.board_index_title %}{{ settings.board_index_title }}{% else %}{{ settings.board_name }}{% endif %}</a></p>
-{% endblock %}

+ 0 - 11
templates/_email/users/activation_1_html.html

@@ -1,11 +0,0 @@
-{% extends "_email/auth/activation_0_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block activation_instructions %}
-<h2 style="margin: 12px 0px; padding: 0px;">Account Activation</h2>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}We require our members to prove validity of e-mail address used during registration. To prove that you are owner of e-mail address used to create this account, click the link below:{% endtrans %}</p>
-<div style="background-color: #EFEFEF; border-radius: 3px; margin: 0px; padding: 8px; text-align: center;">
-  <a href="{{ board_address }}{% url 'activate' username=user.username_slug user=user.id token=user.token %}" style="color: #3465a4; font-size: 150%;">{% trans %}Activate my account{% endtrans %}!</a>
-</div>
-{% endblock %}

+ 0 - 8
templates/_email/users/activation_2_html.html

@@ -1,8 +0,0 @@
-{% extends "_email/auth/activation_0_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block activation_instructions %}
-<h2 style="margin: 12px 0px; padding: 0px;">Account Activation</h2>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}Your account will remain inactive until Board Administrator accepts it. Depending on amount of new registrations this may take few minutes or few days. Thanks for patience!{% endtrans %}</p>
-{% endblock %}

+ 0 - 10
templates/_email/users/activation_2_plain.html

@@ -1,10 +0,0 @@
-{% extends "_email/auth/activation_0_plain.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block activation_instructions %}
-
-Account Activation
-------------------
-{% trans %}Your account will remain inactive until Board Administrator accepts it. Depending on amount of new registrations this may take few minutes or few days. Thanks for patience!{% endtrans %}
-{% endblock %}

+ 0 - 12
templates/_email/users/activation_resend_html.html

@@ -1,12 +0,0 @@
-{% extends "_email/base_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block content %}
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}You are receiving this message because you have requested new activation e-mail.{% endtrans %}</p>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}To activate your account, click the link below:{% endtrans %}</p>
-<div style="background-color: #EFEFEF; border-radius: 3px; margin: 0px; padding: 8px; text-align: center;">
-  <a href="{{ board_address }}{% url 'activate' username=user.username_slug user=user.id token=user.token %}" style="color: #3465a4; font-size: 150%;">{% trans %}Activate my account{% endtrans %}!</a>
-</div>
-<p style="margin: 12px 0px; margin-bottom 0px; padding: 0px;">{% trans %}Welcome aboard!{% endtrans %}<br><a href="{{ board_address }}">{% if settings.board_index_title %}{{ settings.board_index_title }}{% else %}{{ settings.board_name }}{% endif %}</a></p>
-{% endblock %}

+ 0 - 10
templates/_email/users/activation_resend_plain.html

@@ -1,10 +0,0 @@
-{% extends "_email/base_plain.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block content %}
-{% trans %}You are receiving this message because you have requested new activation e-mail.{% endtrans %}
-
-{% trans %}To activate your account, click the link below:{% endtrans %}
-{{ board_address }}{% url 'activate' username=user.username_slug user=user.id token=user.token %}
-{% endblock %}

+ 17 - 0
templates/_email/users/password/confirm_html.html

@@ -0,0 +1,17 @@
+{% extends "_email/base_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Confirm New Password Request{% endtrans %}{% endblock %}
+
+{% block content %}
+<p {{ style_p|safe }}>{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}</p>
+<p {{ style_p|safe }}>{% trans %}To confirm that you want to reset your account's password with new one click the link below:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'reset_password' username=user.username_slug, user=user.id, token=user.token %}" {{ style_button|safe }}>{% trans %}Reset my password{% endtrans %}</a>
+
+<p {{ style_p|safe }}>{% trans %}If the above link is not clickable, copy and paste this link into your web browser's address bar:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'reset_password' username=user.username_slug, user=user.id, token=user.token %}" {{ style_link|safe }}>{{ board_address }}{% url 'reset_password' username=user.username_slug, user=user.id, token=user.token %}</a>
+
+<p {{ style_p|safe }}>{% trans %}Your new password will be sent back to you in next message once you click confirmation link.{% endtrans %}</p>
+
+{% endblock %}

+ 5 - 2
templates/_email/users/reset_confirm_plain.html → templates/_email/users/password/confirm_plain.html

@@ -1,11 +1,14 @@
 {% extends "_email/base_plain.html" %}
 {% load i18n %}
 {% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Confirm New Password Request{% endtrans %}{% endblock %}
+
 {% block content %}
-{% trans %}You are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}
+{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}
 
 {% trans %}To confirm that you want to reset your account's password with new one click the link below:{% endtrans %}
-{{ board_address }}{% url 'reset_password' username=user.username_slug user=user.id token=user.token %}
+{{ board_address }}{% url 'reset_password' username=user.username_slug, user=user.id, token=user.token %}
 
 {% trans %}Your new password will be sent back to you in next message once you click confirmation link.{% endtrans %}
 {% endblock %}

+ 18 - 0
templates/_email/users/password/new_html.html

@@ -0,0 +1,18 @@
+{% extends "_email/base_html.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Your New Password on {{ board_name }}{% endtrans %}{% endblock %}
+
+{% block content %}
+<p {{ style_p|safe }}>{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}</p>
+<p {{ style_p|safe }}>{% trans %}Your new password:{% endtrans %}</p>
+<div {{ style_well_big|safe }}>
+  {{ password }}
+</div>
+<p {{ style_p|safe }}>{% trans %}You can sign in to your account using new password by following this link:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'sign_in' %}" {{ style_button|safe }}>{% trans %}Sign In{% endtrans %}</a>
+
+<p {{ style_p|safe }}>{% trans %}If the above link is not clickable, copy and paste this link into your web browser's address bar:{% endtrans %}</p>
+<a href="{{ board_address }}{% url 'sign_in' %}" {{ style_link|safe }}>{{ board_address }}{% url 'sign_in' %}</a>
+{% endblock %}

+ 14 - 0
templates/_email/users/password/new_plain.html

@@ -0,0 +1,14 @@
+{% extends "_email/base_plain.html" %}
+{% load i18n %}
+{% load url from future %}
+
+{% block title %}{% trans board_name=settings.board_name %}Your New Password on {{ board_name }}{% endtrans %}{% endblock %}
+
+{% block content %}
+{% trans username=user.username %}{{ username }}, you are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}
+
+{% trans %}Your new password:{% endtrans %} {{ password }}
+
+{% trans %}You can sign in to your account using new password by following this link:{% endtrans %}
+{{ board_address }}{% url 'sign_in' %}
+{% endblock %}

+ 0 - 12
templates/_email/users/reset_confirm_html.html

@@ -1,12 +0,0 @@
-{% extends "_email/base_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block content %}
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}You are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}</p>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}To confirm that you want to reset your account's password with new one click the link below:{% endtrans %}</p>
-<div style="background-color: #EFEFEF; border-radius: 3px; margin: 0px; padding: 8px; text-align: center;">
-  <a href="{{ board_address }}{% url 'reset_password' username=user.username_slug user=user.id token=user.token %}" style="color: #3465a4; font-size: 150%;">{% trans %}Reset my password{% endtrans %}</a>
-</div>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}Your new password will be sent back to you in next message once you click confirmation link.{% endtrans %}</p>
-{% endblock %}

+ 0 - 13
templates/_email/users/reset_new_html.html

@@ -1,13 +0,0 @@
-{% extends "_email/base_html.html" %}
-{% load i18n %}
-{% load url from future %}
-
-{% block content %}
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}You are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}</p>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}Your new password:{% endtrans %}</p>
-<div style="background-color: #EFEFEF; border-radius: 3px; margin: 0px; padding: 8px; text-align: center; font-size: 200%;">
-  {{ password }}
-</div>
-<p style="margin: 12px 0px; padding: 0px;">{% trans %}You can sign in to your account using new password by following this link:{% endtrans %}</p>
-<a href="{{ board_address }}{% url 'sign_in' %}" style="color: #3465a4; font-size: 150%;">{% trans %}Sign In{% endtrans %}</a>
-{% endblock %}

+ 0 - 11
templates/_email/users/reset_new_plain.html

@@ -1,11 +0,0 @@
-{% extends "_email/base_plain.html" %}
-{% load i18n %}
-{% load url from future %}
-{% block content %}
-{% trans %}You are receiving this message because you have requested for new password to be generated and set on your account.{% endtrans %}
-
-{% trans %}Your new password:{% endtrans %} {{ password }}
-
-{% trans %}You can sign in to your account using new password by following this link:{% endtrans %}
-{{ board_address }}{% url 'sign_in' %}
-{% endblock %}

+ 0 - 0
templates/_message/users/activations/admin.html → templates/_message/users/activation/admin.html


+ 1 - 1
templates/_message/users/activations/password.html → templates/_message/users/activation/credentials.html

@@ -4,5 +4,5 @@
 {% block content %}
   <div class="alert-icon"><span><i class="icon-ok icon-white"></i></span></div>
   <p>{% trans username=message.user.username %}Welcome back, {{ username }}!{% endtrans %}</p>
-  <p class="protip">{% trans %}Your account has been successfully activated.{% endtrans %}</p>
+  <p class="protip">{% trans %}Your account has been successfully reactivated after change of sign-in credentials.{% endtrans %}</p>
 {% endblock %}

+ 0 - 0
templates/_message/users/activations/new.html → templates/_message/users/activation/new.html


+ 0 - 0
templates/_message/users/activations/not_required.html → templates/_message/users/activation/not_required.html


+ 0 - 0
templates/_message/users/activations/only_by_admin.html → templates/_message/users/activation/only_by_admin.html


+ 0 - 0
templates/_message/users/activations/required.html → templates/_message/users/activation/required.html


+ 0 - 0
templates/_message/users/activations/resent.html → templates/_message/users/activation/resent.html


+ 0 - 0
templates/_message/users/activations/user.html → templates/_message/users/activation/user.html


+ 0 - 0
templates/_message/users/passwords/reset_confirm.html → templates/_message/users/password/reset_confirm.html


+ 0 - 0
templates/_message/users/passwords/reset_done.html → templates/_message/users/password/reset_done.html


+ 0 - 0
templates/_message/users/registrations/registered_activation_admin.html → templates/_message/users/registration/activation_admin.html


+ 0 - 0
templates/_message/users/registrations/registered_activation_none.html → templates/_message/users/registration/activation_none.html


+ 0 - 0
templates/_message/users/registrations/registered_activation_user.html → templates/_message/users/registration/activation_user.html


+ 0 - 0
templates/_message/users/registrations/registrations_off.html → templates/_message/users/registration/registrations_off.html