Merge branch 'develop' of git.general-servers.com:expomap/expomap into develop

remotes/origin/1203
pavel 11 years ago
commit f2abead9e3
  1. 2
      accounts/forms.py
  2. 2
      functions/custom_views.py
  3. 114
      password_reset/templates/password_reset/recovery_email_expo.html
  4. 38
      password_reset/views.py
  5. 30
      proj/settings.py
  6. 17
      proj/urls.py
  7. 4
      proj/views.py
  8. 2
      registration/backends/default/views.py
  9. 36
      registration/models.py
  10. 7
      settings/views.py
  11. BIN
      static/img/1.png
  12. BIN
      static/img/2.png
  13. BIN
      static/img/about_pic.png
  14. BIN
      static/img/add_link_text.png
  15. BIN
      static/img/add_pic_block_bg.png
  16. BIN
      static/img/add_pic_block_bg1.png
  17. BIN
      static/img/add_pic_block_bg2.png
  18. BIN
      static/img/ag-bg.png
  19. BIN
      static/img/ajax-loader.gif
  20. BIN
      static/img/approved-logo.png
  21. BIN
      static/img/blog_pic.jpg
  22. BIN
      static/img/blog_pic1.jpg
  23. BIN
      static/img/blog_pic2.jpg
  24. BIN
      static/img/clock.png
  25. BIN
      static/img/female.png
  26. BIN
      static/img/libk_bg.png
  27. BIN
      static/img/logo_reg.png
  28. BIN
      static/img/mail-logo-2.jpg
  29. BIN
      static/img/male.png
  30. BIN
      static/img/map.png
  31. BIN
      static/img/no-logo.jpg
  32. BIN
      static/img/no-logo.png
  33. BIN
      static/img/pic1.jpg
  34. BIN
      static/img/pic10.jpg
  35. BIN
      static/img/pic11.jpg
  36. BIN
      static/img/pic12.png
  37. BIN
      static/img/pic13.jpg
  38. BIN
      static/img/pic14.jpg
  39. BIN
      static/img/pic15.jpg
  40. BIN
      static/img/pic16.jpg
  41. BIN
      static/img/pic2.jpg
  42. BIN
      static/img/pic3.jpg
  43. BIN
      static/img/pic4.jpg
  44. BIN
      static/img/pic5.jpg
  45. BIN
      static/img/pic6.jpg
  46. BIN
      static/img/pic7.jpg
  47. BIN
      static/img/pic8.jpg
  48. BIN
      static/img/pic8.png
  49. BIN
      static/img/pic9.jpg
  50. BIN
      static/img/pin.png
  51. BIN
      static/img/search-bg.jpg
  52. BIN
      static/img/select.png
  53. BIN
      static/img/semitransparent-ie8.png
  54. BIN
      static/img/signature.png
  55. BIN
      static/img/soc-medias/icon-fb.png
  56. BIN
      static/img/soc-medias/icon-fb_hover.png
  57. BIN
      static/img/soc-medias/icon-goog.png
  58. BIN
      static/img/soc-medias/icon-lin.png
  59. BIN
      static/img/soc-medias/icon-lin_hover.png
  60. BIN
      static/img/soc-medias/icon-mailr.png
  61. BIN
      static/img/soc-medias/icon-ok.png
  62. BIN
      static/img/soc-medias/icon-twit.png
  63. BIN
      static/img/soc-medias/icon-vk.png
  64. BIN
      static/img/soc-medias/icon-yand.png
  65. BIN
      static/img/soc-medias/sm-icon-fb-w.png
  66. BIN
      static/img/soc-medias/sm-icon-fb.png
  67. BIN
      static/img/soc-medias/sm-icon-fb_hover.png
  68. BIN
      static/img/soc-medias/sm-icon-lin-w.png
  69. BIN
      static/img/soc-medias/sm-icon-lin.png
  70. BIN
      static/img/soc-medias/sm-icon-lin_hover.png
  71. BIN
      static/img/soc-medias/sm-icon-rss.png
  72. BIN
      static/img/soc-medias/sm-icon-twit-w.png
  73. BIN
      static/img/soc-medias/sm-icon-twit.png
  74. BIN
      static/img/soc-medias/sm-icon-twit_hover.png
  75. BIN
      static/img/soc-medias/sm-icon-vk-w.png
  76. BIN
      static/img/soc-medias/sm-icon-vk.png
  77. BIN
      static/img/soc-medias/sm-icon-vk_hover.png
  78. BIN
      static/img/soc.png
  79. BIN
      static/img/space.png
  80. BIN
      static/img/spacer.gif
  81. BIN
      static/img/sprites.png
  82. BIN
      static/img/subjects_list.png
  83. BIN
      static/img/wait.gif
  84. BIN
      static/img/wether.png
  85. BIN
      static/img/x2.png
  86. 14
      templates/client/blank.html
  87. 2
      templates/client/includes/catalog_search.html
  88. 8
      templates/client/includes/exposition/exposition_object.html
  89. 2
      templates/client/popups/user_information.html
  90. 3
      templates/registration/activation_complete.html
  91. 114
      templates/registration/activation_email.html
  92. 6
      templates/registration/activation_email.txt
  93. 21
      theme/search_indexes.py

@ -221,7 +221,7 @@ class RegistrationCompleteForm(forms.ModelForm):
country = forms.ChoiceField(label='Страна', choices=[(c.id, c.name) for c in Country.objects.all()], country = forms.ChoiceField(label='Страна', choices=[(c.id, c.name) for c in Country.objects.all()],
widget=forms.Select(attrs={'class': 'select2'})) widget=forms.Select(attrs={'class': 'select2'}))
city = forms.CharField(label='Город', widget=forms.HiddenInput()) city = forms.CharField(label='Город', widget=forms.HiddenInput())
url = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'адрес страны(обязательно)')})) url = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'url(обязательно)')}))
code_country = forms.ChoiceField(label=_(u'код страны'), initial='70', code_country = forms.ChoiceField(label=_(u'код страны'), initial='70',
choices=[(str(c.phone_code), '+'+str(c.phone_code)) for c in Country.objects.all() if c.phone_code is not None], choices=[(str(c.phone_code), '+'+str(c.phone_code)) for c in Country.objects.all() if c.phone_code is not None],

@ -344,8 +344,6 @@ class ExpoSearchView(ListView):
form = self.search_form(self.request.GET) form = self.search_form(self.request.GET)
if form.is_valid(): if form.is_valid():
form.data_with_parents = form.get_form_data() form.data_with_parents = form.get_form_data()
context['form_data_with_parents'] = form.data_with_parents
else: else:
form = self.search_form() form = self.search_form()

@ -0,0 +1,114 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
</head>
<body style="margin: 0; padding: 0; min-height: 100%; background: #f4f2ee;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%" bgcolor="#f4f2ee" style="font-family: Arial, sans-serif; background: #f4f2ee;">
<tr>
<td align="center" style="padding: 50px 0">
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px;">
<tr>
<td style="vertical-align: top;">
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo" alt="Expomap.ru" />
<b style="display: block; padding-left: 67px; margin-top: -5px;">Выставки, конференции, семинары</b>
</a>
</div>
</td>
<td style="vertical-align: top; padding-top: 22px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li>
</ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
<li style="display: inline-block;"><a href="#"><img src="cid:rss" title="RSS" alt="RSS" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:fb" title="Facebook" alt="Facebook" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:linkedin" title="LinkedIn" alt="LinkedIn" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:vk" title="В контакте" alt="В контакте" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:twit" title="Twitter" alt="Twitter" /></a></li>
</ul>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Воостановление пароля на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
</tr>
<tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
<table cellpadding="0" cellspacing="0" border="0" width="540" style="margin-bottom: 15px;">
<tr valign="top">
<td style="padding: 15px 0 36px 0;">
<p style="font-weight: bold;color: #003e79;margin: 0;">Добрый день, {{ user.first_name }}!</p>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 23px 0;">
Вы или кто-то еще сделал запрос на сброс пароля на сайте <a href="{{ domain }}" style="text-decoration: none;border-bottom: 1px dashed #ee3824;color: #645a5a;">{{ domain }}</a>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0;">
Вы можете восстановить доступ, нажав на кнопку ниже и указав новый пароль:
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0; text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http{% if secure %}s{% endif %}://{{ site.domain }}{% url "password_reset_reset" token %}">востановить пароль</a>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 20px 0; text-align: left; ">
Если вы не хотите сбрасывать пароль, просто <span style="border-bottom: 1px dashed #ee3824;">проигнорируйте</span> это сообщение
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; border-bottom: 1px dotted #cccccc;">
<tr>
<td style="vertical-align: top; padding: 15px 0 10px;">
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo2" alt="Expomap.ru" />
</a>
</div>
</td>
<td style="vertical-align: top; padding: 25px 0 5px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li>
</ul>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; font-size: 12px; line-height: 15px;">
<tr>
<td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: right;">
© 2018 — 2013 <a style="color: #a2a2a2; text-decoration: none;" href="#">Expomap.ru</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

@ -1,15 +1,18 @@
import datetime import datetime
from django.core.mail import EmailMessage
from django.conf import settings from django.conf import settings
from django.contrib.sites.models import Site, RequestSite from django.contrib.sites.models import Site, RequestSite
from django.core import signing from django.core import signing
from django.core.mail import send_mail from django.core.mail import send_mail
from django.template import Context
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.http import Http404 from django.http import Http404
from django.template import loader from django.template import loader
from django.utils import timezone from django.utils import timezone
from django.views import generic from django.views import generic
from django.template.loader import get_template
from email.MIMEImage import MIMEImage
from .forms import PasswordRecoveryForm, PasswordResetForm from .forms import PasswordRecoveryForm, PasswordResetForm
from .utils import get_user_model, get_username from .utils import get_user_model, get_username
@ -52,7 +55,7 @@ class Recover(SaltMixin, generic.FormView):
form_class = PasswordRecoveryForm form_class = PasswordRecoveryForm
template_name = 'password_reset/recovery_form.html' template_name = 'password_reset/recovery_form.html'
success_url_name = 'password_reset_sent' success_url_name = 'password_reset_sent'
email_template_name = 'password_reset/recovery_email.txt' email_template_name = 'password_reset/recovery_email_expo.html'
email_subject_template_name = 'password_reset/recovery_email_subject.txt' email_subject_template_name = 'password_reset/recovery_email_subject.txt'
search_fields = ['username', 'email'] search_fields = ['username', 'email']
@ -85,12 +88,35 @@ class Recover(SaltMixin, generic.FormView):
'token': signing.dumps(self.user.pk, salt=self.salt), 'token': signing.dumps(self.user.pk, salt=self.salt),
'secure': self.request.is_secure(), 'secure': self.request.is_secure(),
} }
body = loader.render_to_string(self.email_template_name,
context).strip() #body = loader.render_to_string(self.email_template_name,
# context).strip()
message = get_template(self.email_template_name).render(Context(context))
subject = loader.render_to_string(self.email_subject_template_name, subject = loader.render_to_string(self.email_subject_template_name,
context).strip() context).strip()
send_mail(subject, body, settings.DEFAULT_FROM_EMAIL,
[self.user.email]) msg = EmailMessage(subject, message, settings.DEFAULT_FROM_EMAIL, [self.user.email])
msg.content_subtype = "html"
images =(('/img/logo_reg.png', 'logo'),
('/img/soc-medias/sm-icon-rss.png', 'rss'),
('/img/soc-medias/sm-icon-fb.png', 'fb'),
('/img/soc-medias/sm-icon-lin.png', 'linkedin'),
('/img/soc-medias/sm-icon-vk.png', 'vk'),
('/img/soc-medias/sm-icon-twit.png', 'twit'),
('/img/mail-logo-2.jpg','logo2'))
for img in images:
fp = open(settings.STATIC_ROOT+img[0], 'rb')
msg_img = MIMEImage(fp.read())
fp.close()
msg_img.add_header('Content-ID', '<'+img[1]+'>')
msg.attach(msg_img)
msg.send()
#send_mail(subject, body, settings.DEFAULT_FROM_EMAIL,
# [self.user.email])
def form_valid(self, form): def form_valid(self, form):
self.user = form.cleaned_data['user'] self.user = form.cleaned_data['user']

@ -38,7 +38,7 @@ CACHES = {
# Hosts/domain names that are valid for this site; required if DEBUG is False # Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts # See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [] ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145']
# Local time zone for this installation. Choices can be found here: # Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
@ -223,21 +223,21 @@ LOGIN_URL='/'
#registration info #registration info
ACCOUNT_ACTIVATION_DAYS=2 ACCOUNT_ACTIVATION_DAYS=2
# mail settings # mail settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' #EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost' #EMAIL_HOST = 'localhost'
EMAIL_HOST_USER = '' #EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = '' #EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False #EMAIL_USE_TLS = False
EMAIL_PORT = 25 #EMAIL_PORT = 25
#test #test
#EMAIL_USE_TLS = True EMAIL_USE_TLS = True
#EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST = 'smtp.gmail.com'
#EMAIL_HOST_USER = 'kotzilla' EMAIL_HOST_USER = 'kotzilla'
#EMAIL_HOST_USER = 'kotzillla@gmail.com' EMAIL_HOST_USER = 'kotzillla@gmail.com'
#EMAIL_HOST_PASSWORD = 'fitteR2006!' EMAIL_HOST_PASSWORD = 'fitteR2006!'
#EMAIL_PORT = 587 EMAIL_PORT = 587
#DEFAULT_FROM_EMAIL = 'kotzillla@gmail.com' DEFAULT_FROM_EMAIL = 'kotzillla@gmail.com'
AUTHENTICATION_BACKENDS = ( AUTHENTICATION_BACKENDS = (

@ -9,6 +9,8 @@ from place_exposition.views import PlaceSearchView
from django.http import HttpResponse from django.http import HttpResponse
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^admin/', include('proj.admin_urls')), url(r'^admin/', include('proj.admin_urls')),
url(r'^$', MainPageView.as_view()), url(r'^$', MainPageView.as_view()),
@ -67,6 +69,18 @@ urlpatterns = patterns('',
) )
# test urls
from accounts.models import User
def delete_user(request):
# User.objects.filter(email='kotzillla@gmail.com').delete()
return HttpResponse('deleted')
urlpatterns += patterns('',
url(r'^delete-user/', delete_user),
)
# ajax urls # ajax urls
urlpatterns += patterns('', urlpatterns += patterns('',
url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'), url(r'^register/', 'registration.backends.default.views.RegisterAjaxView'),
@ -78,9 +92,6 @@ urlpatterns += patterns('',
url(r'^search-form/autosearch/exposition/$', 'settings.views.expo_autosearch'), url(r'^search-form/autosearch/exposition/$', 'settings.views.expo_autosearch'),
url(r'^search-form/autosearch/place/$', 'settings.views.place_autosearch'), url(r'^search-form/autosearch/place/$', 'settings.views.place_autosearch'),
url(r'^search-form/autosearch/company/$', 'settings.views.company_autosearch'), url(r'^search-form/autosearch/company/$', 'settings.views.company_autosearch'),
url(r'^', include('accounts.user_catalog_urls')), url(r'^', include('accounts.user_catalog_urls')),
) )

@ -16,12 +16,14 @@ from functions.custom_views import ExpoListView
from accounts.forms import RegistrationCompleteForm from accounts.forms import RegistrationCompleteForm
def expo_context(request): def expo_context(request):
cont = {'theme_search_form': ThemeSearch(), 'search_form': ExpositionSearchForm(), 'expo_catalog': Exposition.catalog, cont = {'theme_search_form': ThemeSearch(), 'expo_catalog': Exposition.catalog,
'book_aid': settings.BOOKING_AID} 'book_aid': settings.BOOKING_AID}
user = request.user user = request.user
if not user.is_anonymous() and not user.url: if not user.is_anonymous() and not user.url:
cont.update({'reg_complete': RegistrationCompleteForm(instance=user)}) cont.update({'reg_complete': RegistrationCompleteForm(instance=user)})
if not request.GET:
cont.update({'search_form': ExpositionSearchForm()})
return cont return cont

@ -34,7 +34,7 @@ class RegistrationView(BaseRegistrationView):
* The creation of the templates * The creation of the templates
``registration/activation_email_subject.txt`` and ``registration/activation_email_subject.txt`` and
``registration/activation_email.txt``, which will be used for ``registration/activation_email.html``, which will be used for
the activation email. See the notes for this backends the activation email. See the notes for this backends
``register`` method for details regarding these templates. ``register`` method for details regarding these templates.

@ -2,13 +2,15 @@ import datetime
import hashlib import hashlib
import random import random
import re import re
from django.core.mail import EmailMessage
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.db import transaction from django.db import transaction
from django.template.loader import render_to_string from django.template.loader import render_to_string, get_template
from django.template import Context
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from email.MIMEImage import MIMEImage
try: try:
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
@ -232,7 +234,7 @@ class RegistrationProfile(models.Model):
text; output longer than one line will be forcibly joined text; output longer than one line will be forcibly joined
into only a single line. into only a single line.
``registration/activation_email.txt`` ``registration/activation_email.html``
This template will be used for the body of the email. This template will be used for the body of the email.
These templates will each receive the following context These templates will each receive the following context
@ -256,15 +258,33 @@ class RegistrationProfile(models.Model):
framework for details regarding these objects' interfaces. framework for details regarding these objects' interfaces.
""" """
user = self.user
ctx_dict = {'activation_key': self.activation_key, ctx_dict = {'activation_key': self.activation_key,
'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS,
'site': site} 'site': site,
'user': user}
subject = render_to_string('registration/activation_email_subject.txt', subject = render_to_string('registration/activation_email_subject.txt',
ctx_dict) ctx_dict)
# Email subject *must not* contain newlines # Email subject *must not* contain newlines
subject = ''.join(subject.splitlines()) subject = ''.join(subject.splitlines())
message = get_template('registration/activation_email.html').render(Context(ctx_dict))
msg = EmailMessage(subject, message, settings.DEFAULT_FROM_EMAIL, [user.email])
msg.content_subtype = "html"
images =(('/img/logo_reg.png', 'logo'),
('/img/soc-medias/sm-icon-rss.png', 'rss'),
('/img/soc-medias/sm-icon-fb.png', 'fb'),
('/img/soc-medias/sm-icon-lin.png', 'linkedin'),
('/img/soc-medias/sm-icon-vk.png', 'vk'),
('/img/soc-medias/sm-icon-twit.png', 'twit'),
('/img/mail-logo-2.jpg','logo2'))
for img in images:
fp = open(settings.STATIC_ROOT+img[0], 'rb')
msg_img = MIMEImage(fp.read())
fp.close()
msg_img.add_header('Content-ID', '<'+img[1]+'>')
msg.attach(msg_img)
msg.send()
message = render_to_string('registration/activation_email.txt', #self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)
ctx_dict)
self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL)

@ -92,8 +92,11 @@ def expo_autosearch(request):
lang = translation.get_language() lang = translation.get_language()
term = request.GET['term'] term = request.GET['term']
qs = SearchQuerySet().models(Exposition, Theme, Tag).autocomplete(content_auto=term).order_by('text') qs = SearchQuerySet().models(Exposition, Theme, Tag).autocomplete(content_auto=term).order_by('text')
result = [{'cat': get_by_lang(item, 'catalog_name', lang), 'text': get_by_lang(item, 'name', lang), 'url':item.url, result = [{'cat': get_by_lang(item, 'catalog_name', lang),
'id':item.pk, 'name': item.form_name} for item in qs] 'text': '%s(%s)'%(get_by_lang(item, 'name', lang),get_by_lang(item, 'parent', lang)) if get_by_lang(item, 'parent', lang) else get_by_lang(item, 'name', lang),
'url':item.url,
'id':item.pk,
'name': item.form_name} for item in qs]
result = sorted(result, key=lambda x:x['cat'], reverse=True) result = sorted(result, key=lambda x:x['cat'], reverse=True)
return HttpResponse(json.dumps(result), content_type='application/json') return HttpResponse(json.dumps(result), content_type='application/json')
else: else:

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 725 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 616 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

@ -98,18 +98,6 @@ This template include basic anf main styles and js files,
{% endif %} {% endif %}
{% comment "Убрал т.к. функционал диалоговых окон расширенного поиска переносится в catalog_search.html" %}
{% include 'client/popups/theme.html' %}
{% if search_form.area %}
{% include 'client/popups/place.html' with search_form=search_form search_action=search_action %}
{% endif %}
{% if search_form.fr %}
{% with search_form=search_form search_action=search_action type=type%}
{% include 'client/popups/period.html' %}
{% endwith %}
{% endif %}
{% endcomment %}
{% include 'client/popups/callback.html' %} {% include 'client/popups/callback.html' %}
{# if user doesnt have url- show form #} {# if user doesnt have url- show form #}
@ -117,6 +105,7 @@ This template include basic anf main styles and js files,
{% if not request.user.is_anonymous %} {% if not request.user.is_anonymous %}
{% if not request.user.url %} {% if not request.user.url %}
{% include 'client/popups/user_information.html' with form=reg_complete %} {% include 'client/popups/user_information.html' with form=reg_complete %}
<script type="text/javascript" src="{% static 'client/js/pages/complete_registration.js' %}"></script>
{% endif %} {% endif %}
{% endif %} {% endif %}
@ -128,7 +117,6 @@ This template include basic anf main styles and js files,
{% endblock %} {% endblock %}
<!-- scripts --> <!-- scripts -->
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<!--vendor scripts concatenated--> <!--vendor scripts concatenated-->
<script type="text/javascript" src="{% static 'client/js' %}{% if debug %}/{% else %}_min/{% endif %}vendor{% if debug %}{% else %}.min{% endif %}.js"></script> <script type="text/javascript" src="{% static 'client/js' %}{% if debug %}/{% else %}_min/{% endif %}vendor{% if debug %}{% else %}.min{% endif %}.js"></script>

@ -115,7 +115,7 @@
EXPO.searchBlock.init({ EXPO.searchBlock.init({
formId: 'search-block-form', formId: 'search-block-form',
modalTriggerClass:'search-modal-open', modalTriggerClass:'search-modal-open',
searchData:'{{ form_data_with_parents|safe }}', searchData:'{{ search_form.data_with_parents|safe }}',
closerText: closerText, closerText: closerText,
closerTextSingle: closerTextSingle, closerTextSingle: closerTextSingle,
place:{ place:{

@ -368,10 +368,10 @@
--> -->
<div class="e-cat look-also"> <div class="e-cat look-also">
<div class="sect-title">{% trans 'Смотрите также:' %}</div> <div class="sect-title">{% trans 'Смотрите также:' %}</div>
<a href="{{ exposition.catalog }}city/{{ exposition.city.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> <a href="{{ exposition.catalog }}city/{{ exposition.city.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a>
<a href="{{ exposition.catalog }}country/{{ exposition.country.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> <a href="{{ exposition.catalog }}country/{{ exposition.country.url }}/">{% trans "Выставки" %} {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a>
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/country/{{ exposition.country.url }}/">{% trans "Выставки по тематике " %}&laquo;{{ exposition.theme.all.0.name|lower }}&raquo; {% if request.LANGUAGE_CODE == 'ru' %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a> <a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/country/{{ exposition.country.url }}/">{% trans "Выставки по тематике " %}&laquo;{{ exposition.theme.all.0.name|lower }}&raquo; {% if request.LANGUAGE_CODE == 'ru' and exposition.country.inflect %}{{ exposition.country.inflect }}{% else %}{% trans 'in' %} {{ exposition.country.name }}{% endif %}</a>
<a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/city/{{ exposition.city.url }}/">{% trans "Выставки по тематике " %}&laquo;{{ exposition.theme.all.0.name|lower }}&raquo; {% if request.LANGUAGE_CODE == 'ru' %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a> <a href="{{ exposition.catalog }}theme/{{ exposition.theme.all.0.url }}/city/{{ exposition.city.url }}/">{% trans "Выставки по тематике " %}&laquo;{{ exposition.theme.all.0.name|lower }}&raquo; {% if request.LANGUAGE_CODE == 'ru' and exposition.city.inflect %}{{ exposition.city.inflect }}{% else %}{% trans 'in' %} {{ exposition.city.name }}{% endif %}</a>
</div> </div>
{% endblock %} {% endblock %}

@ -48,4 +48,4 @@
</div> </div>
</div> </div>
<!--Завершение регистрации-- <!--Завершение регистрации-->

@ -14,8 +14,5 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}

@ -0,0 +1,114 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html style="margin: 0; padding: 0; height: 100%;">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
</head>
<body style="margin: 0; padding: 0; min-height: 100%; background: #f4f2ee;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%" bgcolor="#f4f2ee" style="font-family: Arial, sans-serif; background: #f4f2ee;">
<tr>
<td align="center" style="padding: 50px 0">
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px;">
<tr>
<td style="vertical-align: top;">
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo" alt="Expomap.ru" />
<b style="display: block; padding-left: 67px; margin-top: -5px;">Выставки, конференции, семинары</b>
</a>
</div>
</td>
<td style="vertical-align: top; padding-top: 22px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 16px; line-height: 17px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li>
</ul>
<ul class="soc-media-buttons" style="margin: 0; padding: 0; list-style: none; text-align: right;">
<li style="display: inline-block;"><a href="#"><img src="cid:rss" title="RSS" alt="RSS" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:fb" title="Facebook" alt="Facebook" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:linkedin" title="LinkedIn" alt="LinkedIn" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:vk" title="В контакте" alt="В контакте" /></a></li>
<li style="display: inline-block; margin-left: 5px;"><a href="#"><img src="cid:twit" title="Twitter" alt="Twitter" /></a></li>
</ul>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; margin-bottom: 10px;">
<tr>
<td style="padding: 20px 0 0;"><p style="display: block; padding: 25px 30px; text-decoration: none; background: #ff6600; color: #ffffff; font-size: 20px; line-height: 26px; margin-bottom: 0;" >Ваша регистрация на портале <a href="http://expomap.ru/" style="color: #ffffff;text-decoration: none;border-bottom: 1px dashed #ee3824;">Expomap</a></p></td>
</tr>
<tr>
<td style="padding: 10px 30px 15px; background: #faf9f7;">
<table cellpadding="0" cellspacing="0" border="0" width="540" style="margin-bottom: 15px;">
<tr valign="top">
<td style="padding: 15px 0 36px 0;">
<p style="font-weight: bold;color: #003e79;margin: 0;">Добрый день, {{ user.first_name }}!</p>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0;">
<p>Благодарим за регистрацию! Остался 1 шаг - подтвердить Ваш электронный адрес, нажав на кнопку:</p>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 42px 0; text-align: center;">
<a class="button" style="display: inline-block; padding: 4px 10px 3px; text-decoration: none; color: #2592c5; font-size: 14px; font-weight: bold; line-height: 14px; border: 1px solid #90c7e0; text-transform: uppercase; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; width: 336px;" href="http://{{ site }}/accounts/activate/{{ activation_key }}/">подтвердить регистрацию</a>
</td>
</tr>
<tr valign="top">
<td style="padding: 0 0 32px 0; text-align: left; border-bottom: 1px dotted #cccccc;">
<p style="margin: 0;">Ваш логин: {{ user.email }}</p>
</td>
</tr>
<tr valign="top">
<td style="padding:32px 0 20px 0; text-align: left;">
В личном кабинете вам доступен собственный профиль, персональная лента <span style="border-bottom: 1px dashed #ee3824;">событий</span>,свое расписание, сообщения и многое другое.
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; border-bottom: 1px dotted #cccccc;">
<tr>
<td style="vertical-align: top; padding: 15px 0 10px;">
<div class="logo">
<a style="text-decoration: none; color: #a2a2a2; font-size: 12px;" href="#">
<img src="cid:logo2" alt="Expomap.ru" />
</a>
</div>
</td>
<td style="vertical-align: top; padding: 25px 0 5px;">
<ul class="t-links" style="margin: 0 0 15px; padding: 0; list-style: none; text-align: right; font-size: 14px; line-height: 15px; font-weight: bold;">
<li style="display: inline-block;"><a style="text-decoration: none; color: #ff6600" href="#">СОБЫТИЯ</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">МЕСТА</a></li>
<li style="display: inline-block; margin-left: 20px;"><a style="text-decoration: none; color: #ff6600" href="#">УЧАСТНИКИ</a></li>
</ul>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" border="0" width="600" style="width: 600px; font-size: 12px; line-height: 15px;">
<tr>
<td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: right;">
© 2018 — 2013 <a style="color: #a2a2a2; text-decoration: none;" href="#">Expomap.ru</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

@ -1,6 +0,0 @@
Someone, hopefully you, signed up for a new account at {{ site }} using this email address. If it was you, and you'd like to activate and use your account, click the link below or copy and paste it into your web browser's address bar:
http://{{ site }}/accounts/activate/{{ activation_key }}/
If you didn't request this, you don't need to do anything; you won't receive any more email from us, and the account will expire automatically in {{ expiration_days }} days.

@ -103,23 +103,26 @@ class TagIndex(indexes.SearchIndex, indexes.Indexable, ExpoSearchMixin):
catalog_name_ru = indexes.CharField() catalog_name_ru = indexes.CharField()
def prepare_parent_en(self, obj): def prepare_parent_en(self, obj):
translation.activate('en') #translation.activate('en')
try: try:
name = obj.theme.name # name = obj.theme.name
return name # return name
return obj.theme.translations.get(language_code='en').name
except: except:
return '' return ''
def prepare_parent_ru(self, obj): def prepare_parent_ru(self, obj):
translation.activate('ru') #translation.activate('ru')
#print(obj.theme.name.encode('utf-8'))
try: try:
name = obj.theme.name #name = obj.theme.name
return name #return name
return obj.theme.translations.get(language_code='ru').name
except: except:
return '' return ''
def prepare_name_en(self, obj): def prepare_name_en(self, obj):
translation.activate('en') #translation.activate('en')
try: try:
name = obj.translations.get(language_code = 'en').name name = obj.translations.get(language_code = 'en').name
name = '%s'%name name = '%s'%name
@ -150,5 +153,5 @@ class TagIndex(indexes.SearchIndex, indexes.Indexable, ExpoSearchMixin):
return Tag return Tag
def index_queryset(self, using=None): def index_queryset(self, using=None):
return self.get_model().active.all() #return self.get_model().active.all()
#return self.get_model().objects.filter() return self.get_model().objects.filter()
Loading…
Cancel
Save