remotes/origin/stage6
ya_dim4ik 9 years ago
parent a166c93641
commit 429236eac2
  1. 10
      accounts/views.py
  2. 54
      emencia/django/newsletter/forms.py
  3. 12
      static/mailing_settings/js/main.js
  4. 591
      support/d_dev/settings.py
  5. 6
      templates/client/accounts/mailing_settings.html

@ -107,13 +107,21 @@ class MailingSettings(ContextMixin, AjaxableResponseMixin, CreateUpdateView):
instance = Contact.objects.get(user=self.request.user) instance = Contact.objects.get(user=self.request.user)
except Contact.DoesNotExist: except Contact.DoesNotExist:
instance = None instance = None
if instance is not None:
self.extra_ctx.update({
'checked_f_countries': instance.f_countries.values_list('pk', flat=True),
'checked_r_cities': instance.r_cities.values_list('pk', flat=True),
'checked_tg': instance.tags.values_list('pk', flat=True),
'checked_th': instance.themes.values_list('pk', flat=True),
})
return instance return instance
def form_valid(self, form): def form_valid(self, form):
print(form.cleaned_data) print(form.cleaned_data)
print(form.errors) print(form.errors)
print(self.request.POST) print(self.request.POST)
import pdb; pdb.set_trace() # import pdb; pdb.set_trace()
return super(MailingSettings, self).form_valid(form) return super(MailingSettings, self).form_valid(form)
def form_invalid(self, form): def form_invalid(self, form):

@ -7,6 +7,7 @@ import xlrd
from django import forms from django import forms
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db.models import Sum from django.db.models import Sum
from django.forms.models import ModelChoiceIterator
from django.http import Http404 from django.http import Http404
from django.utils import translation from django.utils import translation
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@ -68,12 +69,31 @@ class MailingListSubscriptionForm(forms.ModelForm):
exclude = ('email',) exclude = ('email',)
class CustomModelChoiceIterator(ModelChoiceIterator):
def __init__(self, field):
self.field = field
self.queryset = getattr(field, 'c_queryset', field.queryset.none())
class ML_ModelMultipleChoiceField(forms.ModelMultipleChoiceField): class ML_ModelMultipleChoiceField(forms.ModelMultipleChoiceField):
''' use it with field.queryset = Model.objects.none() ''' use it with field.queryset = Model.objects.none()
''' '''
def _get_choices(self): def _get_choices(self):
return [] # If self._choices is set, then somebody must have manually set
# the property self.choices. In this case, just return self._choices.
if hasattr(self, '_choices'):
return self._choices
# Otherwise, execute the QuerySet in self.queryset to determine the
# choices dynamically. Return a fresh ModelChoiceIterator that has not been
# consumed. Note that we're instantiating a new ModelChoiceIterator *each*
# time _get_choices() is called (and, thus, each time self.choices is
# accessed) so that we can ensure the QuerySet has not been consumed. This
# construct might look complicated but it allows for lazy evaluation of
# the queryset.
return CustomModelChoiceIterator(self)
choices = property(_get_choices, forms.ChoiceField._set_choices) choices = property(_get_choices, forms.ChoiceField._set_choices)
# def clean(self, value): # def clean(self, value):
@ -131,24 +151,29 @@ class MailingSettingsForm(forms.ModelForm):
'content_articles': forms.CheckboxInput(), 'content_articles': forms.CheckboxInput(),
} }
# def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
# super(MailingSettingsForm, self).__init__(*args, **kwargs) super(MailingSettingsForm, self).__init__(*args, **kwargs)
# self.fields['f_countries'].queryset = Country.objects.none() # self.fields['f_countries'].queryset = Country.objects.none()
# self.fields['r_cities'].queryset = City.objects.none() # self.fields['r_cities'].queryset = City.objects.none()
# self.fields['tags'].queryset = Tag.objects.none() # self.fields['tg'].queryset = Tag.objects.none()
# self.fields['themes'].queryset = Theme.objects.none() # self.fields['th'].queryset = Theme.objects.none()
# if self.instance and self.instance.pk:
# if self.instance.f_countries: if self.instance and self.instance.pk:
# self.fields['f_countries'].queryset = self.instance.f_countries.distinct() if self.instance.f_countries:
# if self.instance.r_cities: self.fields['f_countries'].c_queryset = self.instance.f_countries.distinct()
# self.fields['r_cities'].queryset = self.instance.r_cities.distinct() if self.instance.r_cities:
# if self.instance.tags: self.fields['r_cities'].c_queryset = self.instance.r_cities.distinct()
# self.fields['tags'].queryset = self.instance.tags.distinct() if self.instance.tags:
# if self.instance.themes: self.fields['tg'].c_queryset = self.instance.tags.distinct()
# self.fields['themes'].queryset = self.instance.themes.distinct() if self.instance.themes:
self.fields['th'].c_queryset = self.instance.themes.distinct()
# import pdb;
# pdb.set_trace();
def save(self): def save(self):
obj = super(MailingSettingsForm, self).save(commit=False) obj = super(MailingSettingsForm, self).save(commit=False)
if not obj.pk:
obj.save()
# В форме можеть быть выбрана: # В форме можеть быть выбрана:
# 1. Area и внутри для уточнения не выбрана ни одна страна # 1. Area и внутри для уточнения не выбрана ни одна страна
@ -176,6 +201,7 @@ class MailingSettingsForm(forms.ModelForm):
obj.save() obj.save()
return obj return obj
class AllMailingListSubscriptionForm(MailingListSubscriptionForm): class AllMailingListSubscriptionForm(MailingListSubscriptionForm):
"""Form for subscribing to all mailing list""" """Form for subscribing to all mailing list"""

@ -94,7 +94,15 @@
} }
$.fancybox.close(); $.fancybox.close();
}) });
if (checked_th.length){
$.each(checked_th, function (i,val) {
console.log(val);
$('input[name="th"][value=' + val + ']').prop('checked', true);
});
}
})(); })();
@ -246,4 +254,6 @@ $(function () {
}); });
$('.scroll-container').mCustomScrollbar(); $('.scroll-container').mCustomScrollbar();
}); });

@ -0,0 +1,591 @@
# -*- coding: utf-8 -*-
# Django settings for proj project.
import os
import django
from django.utils.translation import ugettext_lazy as _
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__))
SITE_ROOT = os.path.split(os.path.dirname(os.path.realpath(__file__)))[0]
DEBUG = False
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'expomap',
'USER': 'kotzilla',
'PASSWORD': 'qazedc',
'HOST': '',
'PORT': '',
}
}
CACHES = {
"default": {
"BACKEND": "redis_cache.cache.RedisCache",
"LOCATION": "/tmp/redis.sock",
"OPTIONS": {
"CLIENT_CLASS": "redis_cache.client.DefaultClient",
},
}
}
# 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
ALLOWED_HOSTS = ['hit.expomap.ru', '195.66.79.152', '195.66.79.145', 'expomap.ru', '195.66.79.148']
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'ru'
DEFAULT_LANGUAGE = 'ru'
LANGUAGES = (
('ru', _('Russian')),
('en', _('English')),
)
LOCALE_PATHS = (
os.path.join(SITE_ROOT, 'locale'),
)
DEFAULT_CHARSET = 'utf-8'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = False
MEDIA_ROOT = os.path.join(SITE_ROOT, 'media/')
CKEDITOR_UPLOAD_PATH = os.path.join(SITE_ROOT, 'media/upload')
CKEDITOR_CONFIGS = {
'default': {
'toolbar': 'standart',
'height': 200,
'width': 565,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
'newsletters': {
'toolbar': 'standart',
'height': 600,
'width': 750,
'resize_enabled' : True,
'autoGrow_onStartup' : False,
'autoGrow_bottomSpace' : 300,
'fillEmptyBlocks' : False,
'autoParagraph' : False,
},
}
MEDIA_URL = '/media/'
# STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
# Make this unique, and don't share it with anybody.
SECRET_KEY = '=yz1@ko%1s8bmel)c84#s*xpxn%4(1e+smdnh*@rdm*5%v!mln'
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request",
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
'django_messages.context_processors.inbox',
"proj.views.expo_context"
)
#LOGIN_REDIRECT_URL = '/'
MIDDLEWARE_CLASSES = (
# 'django.middleware.cache.UpdateCacheMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'solid_i18n.middleware.SolidLocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'social.apps.django_app.middleware.SocialAuthExceptionMiddleware',
# 'django.middleware.cache.FetchFromCacheMiddleware',
# Uncomment the next line for simple clickjacking protection:
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.redirects.middleware.RedirectFallbackMiddleware',
'proj.middleware.ExpoRedirectFallbackMiddleware',
)
ROOT_URLCONF = 'proj.urls'
# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'proj.wsgi.application'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# os.path.join(SITE_ROOT, 'templates/debug_toolbar'),
os.path.join(SITE_ROOT, 'templates/c_admin'),
os.path.join(SITE_ROOT, 'templates/c_admin/accounts'),
os.path.join(SITE_ROOT, 'templates/c_admin/article'),
os.path.join(SITE_ROOT, 'templates/c_admin/country'),
os.path.join(SITE_ROOT, 'templates/c_admin/city'),
os.path.join(SITE_ROOT, 'templates/c_admin/company'),
os.path.join(SITE_ROOT, 'templates/c_admin/conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/directories'),
os.path.join(SITE_ROOT, 'templates/c_admin/exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/forms'),
os.path.join(SITE_ROOT, 'templates/c_admin/import templates'),
os.path.join(SITE_ROOT, 'templates/c_admin/news'),
os.path.join(SITE_ROOT, 'templates/c_admin/organiser'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_conference'),
os.path.join(SITE_ROOT, 'templates/c_admin/place_exposition'),
os.path.join(SITE_ROOT, 'templates/c_admin/page'),
os.path.join(SITE_ROOT, 'templates/c_admin/photoreport'),
os.path.join(SITE_ROOT, 'templates/c_admin/settings'),
os.path.join(SITE_ROOT, 'templates/c_admin/seminar'),
os.path.join(SITE_ROOT, 'templates/c_admin/service'),
os.path.join(SITE_ROOT, 'templates/c_admin/theme'),
os.path.join(SITE_ROOT, 'templates/c_admin/translator'),
os.path.join(SITE_ROOT, 'templates/c_admin/webinar'),
os.path.join(SITE_ROOT, 'templates/client'),
os.path.join(SITE_ROOT, 'templates/client/exposition'),
os.path.join(SITE_ROOT, 'templates/client/photoreport'),
os.path.join(SITE_ROOT, 'templates/client/includes'),
os.path.join(SITE_ROOT, 'templates'),
#os.path.join(SITE_ROOT, 'templates/client/popups'),
)
AUTH_USER_MODEL = 'accounts.User'
LOGIN_URL='/'
#registration info
ACCOUNT_ACTIVATION_DAYS=2
# mail settings
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = True
EMAIL_PORT = 25
DEFAULT_FROM_EMAIL = "expomap.ru"
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.vk.VKOAuth2',
'social.backends.facebook.FacebookOAuth2',
'social.backends.twitter.TwitterOAuth',
'social.backends.google.GoogleOAuth',
'social.backends.linkedin.LinkedinOAuth',
'social.backends.odnoklassniki.OdnoklassnikiOAuth2',
'social.backends.mailru.MailruOAuth2',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_LOGIN_URL = '/'
SOCIAL_AUTH_USER_MODEL = 'accounts.User'
SOCIAL_AUTH_LOGIN_REDIRECT_URL = '/logged-in/'
# The user will be redirected to this URL when a social account is disconnected
SOCIAL_AUTH_INACTIVE_USER_URL = '/inactive-user/'
# #Used to redirect the user once the auth process ended successfully. The value of ?next=/foo is used if it was present
# SOCIAL_AUTH_LOGIN_ERROR_URL = '/login-error/'
# #URL where the user will be redirected in case of an error
# SOCIAL_AUTH_LOGIN_URL = '/login-url/'
# #Is used as a fallback for LOGIN_ERROR_URL
# SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/new-users-redirect-url/'
# # Used to redirect new registered users, will be used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL if defined.
# Note that ?next=/foo is appended if present, if you want new users to go to next, you’ll need to do it yourself.
# SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/new-association-redirect-url/'
# # Like SOCIAL_AUTH_NEW_USER_REDIRECT_URL but for new associated accounts (user is already logged in).
# Used in place of SOCIAL_AUTH_LOGIN_REDIRECT_URL
# SOCIAL_AUTH_DISCONNECT_REDIRECT_URL = '/account-disconnected-redirect-url/'
# Inactive users can be redirected to this URL when trying to authenticate.
# SOCIAL_AUTH_UID_LENGTH = <int>
# SOCIAL_AUTH_NONCE_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_ASSOCIATION_SERVER_URL_LENGTH = <int>
# SOCIAL_AUTH_FORCE_EMAIL_VALIDATION = True
SOCIAL_AUTH_USERNAME_IS_FULL_EMAIL = True
SOCIAL_AUTH_PIPELINE = (
'social.pipeline.social_auth.social_details',
'social.pipeline.social_auth.social_uid',
'functions.pipeline.load_user',
'social.pipeline.social_auth.auth_allowed',
'social.pipeline.social_auth.social_user',
'social.pipeline.user.get_username',
'functions.pipeline.require_email',
#'social.pipeline.mail.mail_validation',
'functions.pipeline.create_user',
#'social.pipeline.user.create_user',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details'
)
REQUIRES_EMAIL_VALIDATION = True
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'functions.pipeline.SendVerificationEmail'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/email_verify_sent/'
SOCIAL_AUTH_VK_OAUTH2_KEY = '3393841'
SOCIAL_AUTH_VK_OAUTH2_SECRET = '2P19EBUEpLZifaabbREv'
SOCIAL_AUTH_VK_OAUTH2_SCOPE =['email']
SOCIAL_AUTH_VK_OAUTH2_PROFILE_EXTRA_PARAMS = {
'fields': 'email'
}
SOCIAL_AUTH_FACEBOOK_KEY = '133775720059470'
SOCIAL_AUTH_FACEBOOK_SECRET = '434edf89c24a290497646a739df656c6'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'publish_actions']
SOCIAL_AUTH_TWITTER_KEY = 'S6NX33FazTcWuqnXQhlOdg'
SOCIAL_AUTH_TWITTER_SECRET = 'MxUGfySQmLI5kvqSoAtWsGje2eAHQL7Jo8mXuIZ4D0'
SOCIAL_AUTH_TWITTER_SCOPE = ['email']
SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '1044044901114.apps.googleusercontent.com'
SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = 'j_McErlPPof88eNrmOXI-ZXI'
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = ['email']
SOCIAL_AUTH_MAILRU_OAUTH2_KEY = '697945'
SOCIAL_AUTH_MAILRU_OAUTH2_SECRET = '343581b9e31961b334532cc1880066e8'
SOCIAL_AUTH_MAILRU_OAUTH2_SCOPE = ['email']
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_KEY = 'CBAQDCKIABABABABA'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_SECRET = '814CDDCD3E2D2F278EF1591B'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_NAME = '128007936'
SOCIAL_AUTH_ODNOKLASSNIKI_OAUTH2_PUBLIC_SCOPE = ['email']
SOCIAL_AUTH_LINKEDIN_KEY = 'jt9xwquj1fkd'
SOCIAL_AUTH_LINKEDIN_SECRET = 'GvM2xQCNADaBfiMy'
SOCIAL_AUTH_LINKEDIN_SCOPE = ['email']
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.redirects',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'django.contrib.sitemaps',
'haystack',
#custom modules
'redirects',
'stats_collector',
'emencia.django.newsletter',
'accounts',
'article',
'city',
'company',
'conference',
'core',
'country',
'directories',
'expobanner',
'exposition',
'file',
'import_xls',
'news',
'note',
'organiser',
'place_conference',
'place_exposition',
'photoreport',
'registration',
'review',
'seminar',
'service',
'settings',
'theme',
'translator',
'webinar',
'meta',
'events',
#django modules
'django_crontab',
'sorl.thumbnail', # for logos
'photologue', # photogallery
'sortedm2m', # photologue dependence
'hvad', #
'tinymce', # ???
'ckeditor', # wysiwig editor in admin
'django_messages', # messages
'bitfield',
'djutils', # ??
'pytils', # ??
'pymorphy', # ??
'password_reset', # reset password
'social.apps.django_app.default', # social auth
'core',
'specialist_catalog',
'south',
'rosetta',
)
CRONJOBS = [
('8 * * * *', 'django.core.management.call_command', ['send_newsletter']),
('0 * * * *', 'django.core.management.call_command', ['update_index', 'conference', '--remove', '--age=6']),
('5 * * * *', 'django.core.management.call_command', ['update_index', 'exposition', '--remove', '--age=6']),
('0 1,13 * * *', 'django.core.management.call_command', ['update_index', 'place_exposition', '--remove', '--age=24']),
('0 3 * * *', 'django.core.management.call_command', ['update_index', 'company', '--remove', '--age=48']),
('0 4 * * *', 'django.core.management.call_command', ['update_index', 'theme', '--remove', '--age=48']),
('0 5 * * * ', 'django.core.management.call_command', ['update_index', 'tag', '--remove', '--age=48']),
('0 6 * * *', 'django.core.management.call_command', ['update_index', 'country', '--remove', '--age=48']),
('0 7 * * *', 'django.core.management.call_command', ['update_index', 'city', '--remove', '--age=48']),
('10 * * * *', 'django.core.management.call_command', ['banner_log_update']),
('20 2,14 * * *', 'django.core.management.call_command', ['banner_log_check_previous_day']),
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']),
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']),
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']),
('5 10 * * *', 'django.core.management.call_command', ['update_events_filter_fields']),
]
PYMORPHY_DICTS = {
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' },
}
# search backend
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://localhost:8983/solr'
# ...or for multicore...
# 'URL': 'http://127.0.0.1:8983/solr/mysite',
},
}
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
# TODO automate crons
"""
# update search indexes
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index conference --remove --age=6
0 * * * * /usr/bin/python /var/www/proj/manage.py update_index exposition --remove --age=6
0 1,13 * * * /usr/bin/python /var/www/proj/manage.py update_index place_exposition --remove --age=24
0 3 * * * /usr/bin/python /var/www/proj/manage.py update_index company --remove --age=48
0 4 * * * /usr/bin/python /var/www/proj/manage.py update_index theme --remove --age=48
0 5 * * * /usr/bin/python /var/www/proj/manage.py update_index tag --remove --age=48
0 6 * * * /usr/bin/python /var/www/proj/manage.py update_index country --remove --age=48
0 7 * * * /usr/bin/python /var/www/proj/manage.py update_index city --remove --age=48
# update banner logs
10 * * * * /usr/bin/python /var/www/proj/manage.py banner_log_update
20 2,14 * * * /usr/bin/python /var/www/proj/manage.py banner_log_check_previous_day
# update hotels prices
20 1 * * 6 /usr/bin/python /var/www/proj/manage.py update_hotels_price
# newsletter
20 * * * * /usr/bin/python /var/www/proj/manage.py send_newsletter
40 6 * * * /usr/bin/python /var/www/proj/manage.py newsletter_contacts_remove_notactivated
"""
THUMBNAIL_DEBUG = DEBUG
CALLBACK_EMAIL = 'kotzilla@ukr.net'
BOOKING_AID = '333667'
try:
from functions.overrides import SeoPaginator as Paginator
except ImportError:
from django.core.paginator import Paginator
DEFAULT_PAGINATOR = Paginator
ADMIN_PAGINATION = 20
CLIENT_PAGINATION = 25
TEMPLATE_DEBUG = DEBUG
NO_LOGO = '/static/client/img/no-logo.png'
# events settings
CURRENCY = ('RUB', 'USD', 'EUR', 'RMB', 'GBP', 'AED', 'SGD', 'TRY', 'CZK', 'CHF', 'SEK', 'LKR', 'UAH', 'IDR', 'PLN','JPY')
BIT_AUDIENCE = (('experts', _(u'Специалисты')), ('experts and consumers', _(u'Специалисты и потребители')),
('general public', _(u'Широкая публика')))
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
SNG_COUNTRIES = [159, 186, 31, 6, 99, 13, 189, 64]
RUSSIA_PK = 159
MOSCOW_PK = -2960561
CLIENT_DATE_FORMAT = ["%d.%m.%Y"]
# cache pages in random seconds. random in this range
CACHE_RANGE = [60, 120]
DEFAULT_POPUP_COOKIE = 'expo_b_default_popup'
try:
from local import *
except ImportError, e:
pass
# save sessions in redis
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
if not DEBUG:
# cache template loading
TEMPLATE_LOADERS = (
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)),
)
else:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
# debug_toolbar settings
if DEBUG:
DEBUG_TOOLBAR_PATCH_SETTINGS = False
INTERNAL_IPS = ('127.0.0.1','176.121.5.82', '176.121.11.162', '77.123.47.46')
MIDDLEWARE_CLASSES += (
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
INSTALLED_APPS += (
'debug_toolbar',
)
JQUERY_URL = os.path.join(SITE_ROOT, 'static/client/js/jquery-ui-1.10.4.custom.min.js'),
DEBUG_TOOLBAR_PANELS = [
#'debug_toolbar.panels.versions.VersionsPanel',
'debug_toolbar.panels.timer.TimerPanel',
'debug_toolbar.panels.settings.SettingsPanel',
'debug_toolbar.panels.headers.HeadersPanel',
'debug_toolbar.panels.request.RequestPanel',
'debug_toolbar.panels.sql.SQLPanel',
'debug_toolbar.panels.staticfiles.StaticFilesPanel',
'debug_toolbar.panels.templates.TemplatesPanel',
'debug_toolbar.panels.cache.CachePanel',
'debug_toolbar.panels.signals.SignalsPanel',
'debug_toolbar.panels.logging.LoggingPanel',
'debug_toolbar.panels.redirects.RedirectsPanel',
]
# logging
U_LOGFILE_SIZE = 1 * 1024 * 1024
U_LOGFILE_COUNT = 2
DEFAULT_LOGGER_NAME = 'django'
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s \n'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'INFO',
'filename': os.path.join(SITE_ROOT, 'logs/django.log'),
'formatter': 'verbose',
'class':'logging.handlers.RotatingFileHandler',
'maxBytes': U_LOGFILE_SIZE,
'backupCount': U_LOGFILE_COUNT,
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'DEBUG',
},
}
}

@ -184,6 +184,12 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js" defer></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.4/jquery.fancybox.pack.min.js" defer></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.4/jquery.fancybox.pack.min.js" defer></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.js" defer></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.js" defer></script>
<script type="application/javascript">
var checked_r_cities = [ {{ checked_r_cities|join:', ' }} ];
var checked_f_countries = [ {{ checked_f_countries|join:', ' }} ];
var checked_th = [ {{ checked_th|join:', ' }} ];
var checked_tg = [ {{ checked_tg|join:', ' }} ];
</script>
<script src="{% static 'mailing_settings/js/main.js' %}" defer></script> <script src="{% static 'mailing_settings/js/main.js' %}" defer></script>
</body> </body>
</html> </html>

Loading…
Cancel
Save