Merge branch 'develop' into feature/establishmen-index-name
This commit is contained in:
commit
eb2b727d0d
|
|
@ -1,10 +1,12 @@
|
||||||
"""Account models"""
|
"""Account models"""
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
|
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
|
||||||
from django.contrib.auth.tokens import default_token_generator as password_token_generator
|
from django.contrib.auth.tokens import default_token_generator as password_token_generator
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string, get_template
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.encoding import force_bytes
|
from django.utils.encoding import force_bytes
|
||||||
from django.utils.html import mark_safe
|
from django.utils.html import mark_safe
|
||||||
|
|
@ -15,6 +17,7 @@ from rest_framework.authtoken.models import Token
|
||||||
from authorization.models import Application
|
from authorization.models import Application
|
||||||
from establishment.models import Establishment
|
from establishment.models import Establishment
|
||||||
from location.models import Country
|
from location.models import Country
|
||||||
|
from main.models import SiteSettings
|
||||||
from utils.models import GMTokenGenerator
|
from utils.models import GMTokenGenerator
|
||||||
from utils.models import ImageMixin, ProjectBaseMixin, PlatformMixin
|
from utils.models import ImageMixin, ProjectBaseMixin, PlatformMixin
|
||||||
from utils.tokens import GMRefreshToken
|
from utils.tokens import GMRefreshToken
|
||||||
|
|
@ -158,19 +161,21 @@ class User(AbstractUser):
|
||||||
self.is_active = True
|
self.is_active = True
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def get_body_email_message(self, subject: str, message: str):
|
def get_body_email_message(self, subject: str, message: str, emails=None):
|
||||||
"""Prepare the body of the email message"""
|
"""Prepare the body of the email message"""
|
||||||
return {
|
return {
|
||||||
'subject': subject,
|
'subject': subject,
|
||||||
'message': str(message),
|
'message': str(message[0]),
|
||||||
|
'html_message': message[1],
|
||||||
'from_email': settings.EMAIL_HOST_USER,
|
'from_email': settings.EMAIL_HOST_USER,
|
||||||
'recipient_list': [self.email, ]
|
'recipient_list': emails if emails else [self.email, ],
|
||||||
}
|
}
|
||||||
|
|
||||||
def send_email(self, subject: str, message: str):
|
def send_email(self, subject: str, message: str, emails=None):
|
||||||
"""Send an email to reset user password"""
|
"""Send an email to reset user password"""
|
||||||
send_mail(**self.get_body_email_message(subject=subject,
|
send_mail(**self.get_body_email_message(subject=subject,
|
||||||
message=message))
|
message=message,
|
||||||
|
emails=emails))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def confirm_email_token(self):
|
def confirm_email_token(self):
|
||||||
|
|
@ -192,12 +197,20 @@ class User(AbstractUser):
|
||||||
"""Get base64 value for user by primary key identifier"""
|
"""Get base64 value for user by primary key identifier"""
|
||||||
return urlsafe_base64_encode(force_bytes(self.pk))
|
return urlsafe_base64_encode(force_bytes(self.pk))
|
||||||
|
|
||||||
@property
|
def base_template(self, country_code='www', username='', subject=''):
|
||||||
def base_template(self):
|
|
||||||
"""Base email template"""
|
"""Base email template"""
|
||||||
return {'domain_uri': settings.DOMAIN_URI,
|
socials = SiteSettings.objects.by_country_code(country_code).first()
|
||||||
'uidb64': self.get_user_uidb64,
|
return {
|
||||||
'site_name': settings.SITE_NAME}
|
'title': subject,
|
||||||
|
'domain_uri': settings.DOMAIN_URI,
|
||||||
|
'uidb64': self.get_user_uidb64,
|
||||||
|
'site_name': settings.SITE_NAME,
|
||||||
|
'year': datetime.now().year,
|
||||||
|
'twitter_page_url': socials.twitter_page_url if socials else '#',
|
||||||
|
'instagram_page_url': socials.instagram_page_url if socials else '#',
|
||||||
|
'facebook_page_url': socials.facebook_page_url if socials else '#',
|
||||||
|
'send_to': username,
|
||||||
|
}
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def image_tag(self):
|
def image_tag(self):
|
||||||
|
|
@ -207,41 +220,41 @@ class User(AbstractUser):
|
||||||
def cropped_image_tag(self):
|
def cropped_image_tag(self):
|
||||||
return mark_safe(f'<img src="{self.cropped_image_url}" />')
|
return mark_safe(f'<img src="{self.cropped_image_url}" />')
|
||||||
|
|
||||||
def reset_password_template(self, country_code):
|
def reset_password_template(self, country_code, username, subject):
|
||||||
"""Get reset password template"""
|
"""Get reset password template"""
|
||||||
context = {'token': self.reset_password_token,
|
context = {'token': self.reset_password_token,
|
||||||
'country_code': country_code}
|
'country_code': country_code}
|
||||||
context.update(self.base_template)
|
context.update(self.base_template(country_code, username, subject))
|
||||||
return render_to_string(
|
return render_to_string(
|
||||||
template_name=settings.RESETTING_TOKEN_TEMPLATE,
|
template_name=settings.RESETTING_TOKEN_TEMPLATE,
|
||||||
context=context)
|
context=context), get_template(settings.RESETTING_TOKEN_TEMPLATE).render(context)
|
||||||
|
|
||||||
def notify_password_changed_template(self, country_code):
|
def notify_password_changed_template(self, country_code, username, subject):
|
||||||
"""Get notification email template"""
|
"""Get notification email template"""
|
||||||
context = {'contry_code': country_code}
|
context = {'contry_code': country_code}
|
||||||
context.update(self.base_template)
|
context.update(self.base_template(country_code, username, subject))
|
||||||
return render_to_string(
|
return render_to_string(
|
||||||
template_name=settings.NOTIFICATION_PASSWORD_TEMPLATE,
|
template_name=settings.NOTIFICATION_PASSWORD_TEMPLATE,
|
||||||
context=context,
|
context=context,
|
||||||
)
|
), get_template(settings.NOTIFICATION_PASSWORD_TEMPLATE).render(context)
|
||||||
|
|
||||||
def confirm_email_template(self, country_code):
|
def confirm_email_template(self, country_code, username, subject):
|
||||||
"""Get confirm email template"""
|
"""Get confirm email template"""
|
||||||
context = {'token': self.confirm_email_token,
|
context = {'token': self.confirm_email_token,
|
||||||
'country_code': country_code}
|
'country_code': country_code}
|
||||||
context.update(self.base_template)
|
context.update(self.base_template(country_code, username, subject))
|
||||||
return render_to_string(
|
return render_to_string(
|
||||||
template_name=settings.CONFIRM_EMAIL_TEMPLATE,
|
template_name=settings.CONFIRM_EMAIL_TEMPLATE,
|
||||||
context=context)
|
context=context), get_template(settings.CONFIRM_EMAIL_TEMPLATE).render(context)
|
||||||
|
|
||||||
def change_email_template(self, country_code):
|
def change_email_template(self, country_code, username, subject):
|
||||||
"""Get change email template"""
|
"""Get change email template"""
|
||||||
context = {'token': self.change_email_token,
|
context = {'token': self.change_email_token,
|
||||||
'country_code': country_code}
|
'country_code': country_code}
|
||||||
context.update(self.base_template)
|
context.update(self.base_template(country_code, username, subject))
|
||||||
return render_to_string(
|
return render_to_string(
|
||||||
template_name=settings.CHANGE_EMAIL_TEMPLATE,
|
template_name=settings.CHANGE_EMAIL_TEMPLATE,
|
||||||
context=context)
|
context=context), get_template(settings.CHANGE_EMAIL_TEMPLATE).render(context)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def favorite_establishment_ids(self):
|
def favorite_establishment_ids(self):
|
||||||
|
|
|
||||||
|
|
@ -72,11 +72,13 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
if settings.USE_CELERY:
|
if settings.USE_CELERY:
|
||||||
tasks.change_email_address.delay(
|
tasks.change_email_address.delay(
|
||||||
user_id=instance.id,
|
user_id=instance.id,
|
||||||
country_code=self.context.get('request').country_code)
|
country_code=self.context.get('request').country_code,
|
||||||
|
emails=[validated_data['email'],])
|
||||||
else:
|
else:
|
||||||
tasks.change_email_address(
|
tasks.change_email_address(
|
||||||
user_id=instance.id,
|
user_id=instance.id,
|
||||||
country_code=self.context.get('request').country_code)
|
country_code=self.context.get('request').country_code,
|
||||||
|
emails=[validated_data['email'],])
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,12 @@ from account.models import User
|
||||||
logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO)
|
logging.basicConfig(format='[%(levelname)s] %(message)s', level=logging.INFO)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def send_email(user_id: int, subject: str, message_prop: str, country_code: str):
|
def send_email(user_id: int, subject: str, message_prop: str, country_code: str, emails=None):
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(id=user_id)
|
user = User.objects.get(id=user_id)
|
||||||
user.send_email(subject=_(subject),
|
user.send_email(subject=_(subject),
|
||||||
message=getattr(user, message_prop, lambda _: '')(country_code))
|
message=getattr(user, message_prop, lambda _: '')(country_code, user.username, _(subject)),
|
||||||
|
emails=emails)
|
||||||
except:
|
except:
|
||||||
cur_frame = inspect.currentframe()
|
cur_frame = inspect.currentframe()
|
||||||
cal_frame = inspect.getouterframes(cur_frame, 2)
|
cal_frame = inspect.getouterframes(cur_frame, 2)
|
||||||
|
|
@ -35,9 +36,9 @@ def confirm_new_email_address(user_id, country_code):
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def change_email_address(user_id, country_code):
|
def change_email_address(user_id, country_code, emails=None):
|
||||||
"""Send email to user new email."""
|
"""Send email to user new email."""
|
||||||
send_email(user_id, 'Validate new email address', 'change_email_template', country_code)
|
send_email(user_id, 'Validate new email address', 'change_email_template', country_code, emails)
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ def send_confirm_email(user_id: int, country_code: str):
|
||||||
try:
|
try:
|
||||||
obj = account_models.User.objects.get(id=user_id)
|
obj = account_models.User.objects.get(id=user_id)
|
||||||
obj.send_email(subject=_('Email confirmation'),
|
obj.send_email(subject=_('Email confirmation'),
|
||||||
message=obj.confirm_email_template(country_code))
|
message=obj.confirm_email_template(country_code, obj.username, _('Email confirmation')))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f'METHOD_NAME: {send_confirm_email.__name__}\n'
|
logger.error(f'METHOD_NAME: {send_confirm_email.__name__}\n'
|
||||||
f'DETAIL: user {user_id}, - {e}')
|
f'DETAIL: user {user_id}, - {e}')
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,9 @@ class SiteSettingsQuerySet(models.QuerySet):
|
||||||
def with_country(self):
|
def with_country(self):
|
||||||
return self.filter(country__isnull=False)
|
return self.filter(country__isnull=False)
|
||||||
|
|
||||||
|
def by_country_code(self, code):
|
||||||
|
return self.filter(country__code=code)
|
||||||
|
|
||||||
|
|
||||||
class SiteSettings(ProjectBaseMixin):
|
class SiteSettings(ProjectBaseMixin):
|
||||||
subdomain = models.CharField(max_length=255, db_index=True, unique=True,
|
subdomain = models.CharField(max_length=255, db_index=True, unique=True,
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,80 @@
|
||||||
{% load i18n %}{% autoescape off %}
|
{% load i18n %}{% autoescape off %}
|
||||||
{% blocktrans %}You're receiving this email because you want to change email address at {{ site_name }}.{% endblocktrans %}
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" style="box-sizing: border-box;margin: 0;">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700|PT+Serif&display=swap&subset=cyrillic" type="text/css">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body style="box-sizing: border-box;margin: 0;font-family: "Open Sans", sans-serif;font-size: 0.875rem;">
|
||||||
|
<div style="dispaly: none">
|
||||||
|
|
||||||
{% trans "Please go to the following page for confirmation new email address:" %}
|
</div>
|
||||||
|
|
||||||
https://{{ country_code }}.{{ domain_uri }}/change-email-confirm/{{ uidb64 }}/{{ token }}/
|
<div style="margin: 0 auto; max-width:38.25rem;" class="letter">
|
||||||
|
<div class="letter__wrapper">
|
||||||
{% trans "Thanks for using our site!" %}
|
<div class="letter__inner">
|
||||||
|
<div class="letter__content" style="position: relative;margin: 0 16px 40px;padding: 0 0 1px;">
|
||||||
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
<div class="letter__header" style="margin: 1.875rem 0 2.875rem;text-align: center;">
|
||||||
|
<div class="letter__logo" style="display: block;width: 7.9375rem;height: 4.6875rem;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: block;border: none;">
|
||||||
|
<img alt="" style="width:100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/1.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__sublogo" style="font-size: 21px;line-height: 1;letter-spacing: 0;color: #bcbcbc;text-transform: uppercase;">france</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__title" style="font-family:"Open-Sans",sans-serif; font-size: 1.5rem;margin: 0 0 10px;padding: 0 0 6px;border-bottom: 4px solid #ffee29;">
|
||||||
|
<span class="letter__title-txt">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__text" style="margin: 0 0 30px; font-family:"Open-Sans",sans-serif; font-size: 14px; line-height: 21px;letter-spacing: -0.34px; overflow-x: hidden;">
|
||||||
|
{% blocktrans %}You're receiving this email because you want to change email address at {{ site_name }}.{% endblocktrans %}
|
||||||
|
<br>
|
||||||
|
{% trans "Please go to the following page for confirmation new email address:" %}
|
||||||
|
<br>
|
||||||
|
https://{{ country_code }}.{{ domain_uri }}/change-email-confirm/{{ uidb64 }}/{{ token }}/
|
||||||
|
<br>
|
||||||
|
{% trans "Thanks for using our site!" %}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow" style="padding: 8px;margin: 0 auto 40px auto;background: #ffee29; max-width: 400px;">
|
||||||
|
<div class="letter__follow-content" style="padding: 1.25rem 0;background: #fff;text-align: center;">
|
||||||
|
<div class="letter__follow-header" style="display: inline-block;margin: 0 0 18px;font-family: "PT Serif", sans-serif;font-size: 1.25rem;text-transform: uppercase;">
|
||||||
|
<img alt="thumb" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/2.png" />
|
||||||
|
<span class="letter__follow-title">Follow us</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-text" style="display: block;margin: 0 0 30px;font-size: 12px;font-style: italic;">You can also us on our social network below
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-social">
|
||||||
|
<a href="{{ facebook_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="facebook" style="width: 30px; vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/3.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ instagram_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="instagram" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/4.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ twitter_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="twitter" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/5.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__unsubscribe" style="margin: 0 0 1.25rem;font-size: 12px;text-align: center;">
|
||||||
|
<span class="letter__unsubscribe-dscr" style="display: inline-block;">This email has been sent to {{ send_to }} ,</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__footer" style="padding: 24px 0 15px;text-align: center;background: #ffee29;">
|
||||||
|
<div class="letter__footer-logo" style="width: 71px;height: 42px;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__footer-logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">
|
||||||
|
<img alt="" style="width: 100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/6.png" /></a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__copyright">GaultMillau © {{ year }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
|
|
@ -1,7 +1,77 @@
|
||||||
{% load i18n %}{% autoescape off %}
|
{% load i18n %}{% autoescape off %}
|
||||||
{% blocktrans %}You're receiving this email because your account's password address at {{ site_name }}.{% endblocktrans %}
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" style="box-sizing: border-box;margin: 0;">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700|PT+Serif&display=swap&subset=cyrillic" type="text/css">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body style="box-sizing: border-box;margin: 0;font-family: "Open Sans", sans-serif;font-size: 0.875rem;">
|
||||||
|
<div style="dispaly: none">
|
||||||
|
|
||||||
{% trans "Thanks for using our site!" %}
|
</div>
|
||||||
|
|
||||||
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
<div style="margin: 0 auto; max-width:38.25rem;" class="letter">
|
||||||
|
<div class="letter__wrapper">
|
||||||
|
<div class="letter__inner">
|
||||||
|
<div class="letter__content" style="position: relative;margin: 0 16px 40px;padding: 0 0 1px;">
|
||||||
|
<div class="letter__header" style="margin: 1.875rem 0 2.875rem;text-align: center;">
|
||||||
|
<div class="letter__logo" style="display: block;width: 7.9375rem;height: 4.6875rem;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: block;border: none;">
|
||||||
|
<img alt="" style="width:100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/1.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__sublogo" style="font-size: 21px;line-height: 1;letter-spacing: 0;color: #bcbcbc;text-transform: uppercase;">france</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__title" style="font-family:"Open-Sans",sans-serif; font-size: 1.5rem;margin: 0 0 10px;padding: 0 0 6px;border-bottom: 4px solid #ffee29;">
|
||||||
|
<span class="letter__title-txt">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__text" style="margin: 0 0 30px; font-family:"Open-Sans",sans-serif; font-size: 14px; line-height: 21px;letter-spacing: -0.34px; overflow-x: hidden;">
|
||||||
|
<br>
|
||||||
|
{% blocktrans %}You're receiving this email because your account's password address at {{ site_name }}.{% endblocktrans %}
|
||||||
|
<br>
|
||||||
|
{% trans "Thanks for using our site!" %}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow" style="padding: 8px;margin: 0 auto 40px auto;background: #ffee29; max-width: 400px;">
|
||||||
|
<div class="letter__follow-content" style="padding: 1.25rem 0;background: #fff;text-align: center;">
|
||||||
|
<div class="letter__follow-header" style="display: inline-block;margin: 0 0 18px;font-family: "PT Serif", sans-serif;font-size: 1.25rem;text-transform: uppercase;">
|
||||||
|
<img alt="thumb" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/2.png" />
|
||||||
|
<span class="letter__follow-title">Follow us</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-text" style="display: block;margin: 0 0 30px;font-size: 12px;font-style: italic;">You can also us on our social network below
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-social">
|
||||||
|
<a href="{{ facebook_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="facebook" style="width: 30px; vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/3.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ instagram_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="instagram" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/4.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ twitter_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="twitter" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/5.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__unsubscribe" style="margin: 0 0 1.25rem;font-size: 12px;text-align: center;">
|
||||||
|
<span class="letter__unsubscribe-dscr" style="display: inline-block;">This email has been sent to {{ send_to }} ,</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__footer" style="padding: 24px 0 15px;text-align: center;background: #ffee29;">
|
||||||
|
<div class="letter__footer-logo" style="width: 71px;height: 42px;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__footer-logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">
|
||||||
|
<img alt="" style="width: 100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/6.png" /></a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__copyright">GaultMillau © {{ year }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
|
|
@ -1,11 +1,79 @@
|
||||||
{% load i18n %}{% autoescape off %}
|
{% load i18n %}{% autoescape off %}
|
||||||
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" style="box-sizing: border-box;margin: 0;">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700|PT+Serif&display=swap&subset=cyrillic" type="text/css">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body style="box-sizing: border-box;margin: 0;font-family: "Open Sans", sans-serif;font-size: 0.875rem;">
|
||||||
|
<div style="dispaly: none">
|
||||||
|
|
||||||
{% trans "Please go to the following page and choose a new password:" %}
|
</div>
|
||||||
|
|
||||||
https://{{ country_code }}.{{ domain_uri }}/recovery/{{ uidb64 }}/{{ token }}/
|
<div style="margin: 0 auto; max-width:38.25rem;" class="letter">
|
||||||
|
<div class="letter__wrapper">
|
||||||
{% trans "Thanks for using our site!" %}
|
<div class="letter__inner">
|
||||||
|
<div class="letter__content" style="position: relative;margin: 0 16px 40px;padding: 0 0 1px;">
|
||||||
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
<div class="letter__header" style="margin: 1.875rem 0 2.875rem;text-align: center;">
|
||||||
|
<div class="letter__logo" style="display: block;width: 7.9375rem;height: 4.6875rem;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: block;border: none;">
|
||||||
|
<img alt="" style="width:100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/1.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__sublogo" style="font-size: 21px;line-height: 1;letter-spacing: 0;color: #bcbcbc;text-transform: uppercase;">france</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__title" style="font-family:"Open-Sans",sans-serif; font-size: 1.5rem;margin: 0 0 10px;padding: 0 0 6px;border-bottom: 4px solid #ffee29;">
|
||||||
|
<span class="letter__title-txt">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__text" style="margin: 0 0 30px; font-family:"Open-Sans",sans-serif; font-size: 14px; line-height: 21px;letter-spacing: -0.34px; overflow-x: hidden;">
|
||||||
|
{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.{% endblocktrans %}
|
||||||
|
<br>
|
||||||
|
{% trans "Please go to the following page and choose a new password:" %}
|
||||||
|
<br>
|
||||||
|
https://{{ country_code }}.{{ domain_uri }}/recovery/{{ uidb64 }}/{{ token }}/
|
||||||
|
<br>
|
||||||
|
{% trans "Thanks for using our site!" %}
|
||||||
|
<br><br>
|
||||||
|
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow" style="padding: 8px;margin: 0 auto 40px auto;background: #ffee29; max-width: 400px;">
|
||||||
|
<div class="letter__follow-content" style="padding: 1.25rem 0;background: #fff;text-align: center;">
|
||||||
|
<div class="letter__follow-header" style="display: inline-block;margin: 0 0 18px;font-family: "PT Serif", sans-serif;font-size: 1.25rem;text-transform: uppercase;">
|
||||||
|
<img alt="thumb" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/2.png" />
|
||||||
|
<span class="letter__follow-title">Follow us</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-text" style="display: block;margin: 0 0 30px;font-size: 12px;font-style: italic;">You can also us on our social network below
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-social">
|
||||||
|
<a href="{{ facebook_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="facebook" style="width: 30px; vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/3.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ instagram_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="instagram" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/4.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ twitter_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="twitter" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/5.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__unsubscribe" style="margin: 0 0 1.25rem;font-size: 12px;text-align: center;">
|
||||||
|
<span class="letter__unsubscribe-dscr" style="display: inline-block;">This email has been sent to {{ send_to }} ,</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__footer" style="padding: 24px 0 15px;text-align: center;background: #ffee29;">
|
||||||
|
<div class="letter__footer-logo" style="width: 71px;height: 42px;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__footer-logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">
|
||||||
|
<img alt="" style="width: 100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/6.png" /></a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__copyright">GaultMillau © {{ year }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
|
|
@ -1,10 +1,79 @@
|
||||||
{% load i18n %}{% autoescape off %}
|
{% load i18n %}{% autoescape off %}
|
||||||
{% blocktrans %}You're receiving this email because you trying to register new account at {{ site_name }}.{% endblocktrans %}
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" style="box-sizing: border-box;margin: 0;">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700|PT+Serif&display=swap&subset=cyrillic" type="text/css">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body style="box-sizing: border-box;margin: 0;font-family: "Open Sans", sans-serif;font-size: 0.875rem;">
|
||||||
|
<div style="dispaly: none">
|
||||||
|
|
||||||
{% trans "Please confirm your email address to complete the registration:" %}
|
</div>
|
||||||
https://{{ country_code }}.{{ domain_uri }}/registered/{{ uidb64 }}/{{ token }}/
|
|
||||||
|
|
||||||
{% trans "Thanks for using our site!" %}
|
<div style="margin: 0 auto; max-width:38.25rem;" class="letter">
|
||||||
|
<div class="letter__wrapper">
|
||||||
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
<div class="letter__inner">
|
||||||
|
<div class="letter__content" style="position: relative;margin: 0 16px 40px;padding: 0 0 1px;">
|
||||||
|
<div class="letter__header" style="margin: 1.875rem 0 2.875rem;text-align: center;">
|
||||||
|
<div class="letter__logo" style="display: block;width: 7.9375rem;height: 4.6875rem;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: block;border: none;">
|
||||||
|
<img alt="" style="width:100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/1.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__sublogo" style="font-size: 21px;line-height: 1;letter-spacing: 0;color: #bcbcbc;text-transform: uppercase;">france</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__title" style="font-family:"Open-Sans",sans-serif; font-size: 1.5rem;margin: 0 0 10px;padding: 0 0 6px;border-bottom: 4px solid #ffee29;">
|
||||||
|
<span class="letter__title-txt">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__text" style="margin: 0 0 30px; font-family:"Open-Sans",sans-serif; font-size: 14px; line-height: 21px;letter-spacing: -0.34px; overflow-x: hidden;">
|
||||||
|
<br>
|
||||||
|
{% blocktrans %}You're receiving this email because you trying to register new account at {{ site_name }}.{% endblocktrans %}
|
||||||
|
<br>
|
||||||
|
{% trans "Please confirm your email address to complete the registration:" %}
|
||||||
|
https://{{ country_code }}.{{ domain_uri }}/registered/{{ uidb64 }}/{{ token }}/
|
||||||
|
<br>
|
||||||
|
{% trans "Thanks for using our site!" %}
|
||||||
|
<br><br>
|
||||||
|
{% blocktrans %}The {{ site_name }} team{% endblocktrans %}
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow" style="padding: 8px;margin: 0 auto 40px auto;background: #ffee29; max-width: 400px;">
|
||||||
|
<div class="letter__follow-content" style="padding: 1.25rem 0;background: #fff;text-align: center;">
|
||||||
|
<div class="letter__follow-header" style="display: inline-block;margin: 0 0 18px;font-family: "PT Serif", sans-serif;font-size: 1.25rem;text-transform: uppercase;">
|
||||||
|
<img alt="thumb" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/2.png" />
|
||||||
|
<span class="letter__follow-title">Follow us</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-text" style="display: block;margin: 0 0 30px;font-size: 12px;font-style: italic;">You can also us on our social network below
|
||||||
|
</div>
|
||||||
|
<div class="letter__follow-social">
|
||||||
|
<a href="{{ facebook_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="facebook" style="width: 30px; vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/3.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ instagram_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0 1rem 0 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="instagram" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/4.png" />
|
||||||
|
</a>
|
||||||
|
<a href="{{ twitter_page_url }}" class="letter__follow-link" target="_blank" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;display: inline-block;width: 30px;height: 30px;margin: 0;background: #ffee29;border: none;">
|
||||||
|
<img alt="twitter" style="width:30px;vertical-align: sub; display: inline-block" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/5.png" />
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="letter__unsubscribe" style="margin: 0 0 1.25rem;font-size: 12px;text-align: center;">
|
||||||
|
<span class="letter__unsubscribe-dscr" style="display: inline-block;">This email has been sent to {{ send_to }} ,</span>
|
||||||
|
</div>
|
||||||
|
<div class="letter__footer" style="padding: 24px 0 15px;text-align: center;background: #ffee29;">
|
||||||
|
<div class="letter__footer-logo" style="width: 71px;height: 42px;margin: 0 auto 14px auto;">
|
||||||
|
<a href="#" class="letter__footer-logo-photo" style="color: #000;font-weight: 700;text-decoration: none;padding: 0;border-bottom: 1.5px solid #ffee29;cursor: pointer;">
|
||||||
|
<img alt="" style="width: 100%;" src="https://s3.eu-central-1.amazonaws.com/gm-test.com/manually_uploaded/6.png" /></a>
|
||||||
|
</div>
|
||||||
|
<div class="letter__copyright">GaultMillau © {{ year }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
{% endautoescape %}
|
{% endautoescape %}
|
||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user