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

remotes/origin/1203
pavel 11 years ago
commit 22b48c35da
  1. 5
      functions/admin_views.py
  2. 68
      meta/admin.py
  3. 11
      meta/admin_urls.py
  4. 23
      meta/decorators.py
  5. 48
      meta/forms.py
  6. 8
      meta/models.py
  7. 1
      proj/admin_urls.py
  8. 4
      proj/settings.py
  9. 57
      templates/admin/meta/meta_list.html
  10. 60
      templates/admin/meta/meta_setting.html
  11. 4
      templates/client/includes/accounts/calendar_list.html
  12. 22
      templates/client/includes/accounts/calendar_table.html
  13. 2
      templates/client/includes/exposition/exposition_list.html
  14. 55
      templates/client/includes/exposition/search_result.html

@ -25,6 +25,11 @@ class AdminView(FormView):
obj = get_object_or_404(self.model, slug=slug)
self.obj = obj
return obj
id = self.kwargs.get('id')
if id:
obj = get_object_or_404(self.model, id=id)
self.obj = obj
return obj
self.obj = None
return None

@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.core.context_processors import csrf
from django.conf import settings
from django.forms.formsets import BaseFormSet, formset_factory
from django.forms.models import modelformset_factory
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.decorators import login_required
#models and forms
from models import MetaSetting
from forms import MetaForm, MetaFilterForm
from theme.models import Tag
from city.models import City
from file.models import FileModel, TmpFile
from file.forms import FileModelForm, FileForm
from photologue.forms import PhotoForm
#python
import random
#custom views
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
from functions.admin_views import AdminListView, AdminView, upload_photo
class MetaListView(AdminListView):
template_name = 'admin/meta/meta_list.html'
form_class = MetaFilterForm
model = MetaSetting
class MetaView(AdminView):
form_class = MetaForm
model = MetaSetting
success_url = '/admin/meta/all/'
template_name = 'admin/meta/meta_setting.html'
def form_valid(self, form):
self.set_obj()
expo = form.save(obj=self.obj)
return HttpResponseRedirect(self.success_url)
def get_form(self, form_class):
if self.request.POST:
return super(MetaView, self).get_form(form_class)
obj = self.set_obj()
if obj:
data = {'name':obj.name}
for code, name in settings.LANGUAGES:
trans_obj = self.model._meta.translations_model.objects.get(language_code = code,master__id=obj.id) #access to translated fields
data['title_%s' % code] = trans_obj.title
data['description_%s' % code] = trans_obj.description
data['keywords_%s' % code] = trans_obj.keywords
data['h1_%s' % code] = trans_obj.h1
form =form_class(initial=data)
return form
else:
return form_class()
def get_context_data(self, **kwargs):
context = super(MetaView, self).get_context_data(**kwargs)
obj = self.set_obj()
return context

@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from admin import MetaListView, MetaView
urlpatterns = patterns('conference.admin',
url(r'^all/$', MetaListView.as_view()),
#url(r'^change/(?P<url>.*)/$', 'conference_change'),
url(r'^(?P<id>.*)/$', MetaView.as_view()),
url(r'^$', MetaView.as_view()),
)

@ -0,0 +1,23 @@
from meta.views import Meta
def add_meta(view):
def wrapper(request, *args, **kwargs):
"""
meta = Meta(
title=title,
description=description,
keywords=keywords,
meta_extras = {
'viewport': 'width=device-width, initial-scale=1.0, minimum-scale=1.0'
}
'extra_custom_props': [
('http-equiv', 'Content-Type', 'text/html; charset=UTF-8'),
]
)
"""
r = view(request, *args, **kwargs)
r.context_data = {'foo': 'bar'}
return r.render()
return wrapper

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from django import forms
from django.conf import settings
from models import MetaSetting
from functions.translate import fill_with_signal
from functions.admin_forms import AdminFilterForm
class MetaForm(forms.Form):
name = forms.CharField(label=u'Название страницы')
def __init__(self, *args, **kwargs):
"""
create dynamical translated fields fields
"""
super(MetaForm, self).__init__(*args, **kwargs)
#creates translated forms example: name_ru, name_en
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
if len(settings.LANGUAGES) in range(10):
for lid, (code, name) in enumerate(settings.LANGUAGES):
# uses enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['title_%s' % code] = forms.CharField(label=u'Title', required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['description_%s' % code] = forms.CharField(label=u'Description', required=required,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['keywords_%s' % code] = forms.CharField(label=u'Keywords', required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
self.fields['h1_%s' % code] = forms.CharField(label=u'H1', required=False,
widget=forms.TextInput(attrs={'style':'width: 550px'}))
def save(self, obj=None):
data = self.cleaned_data
if not obj:
meta = MetaSetting()
else:
meta = obj
meta.name = data['name']
# fill translated fields and save object
fill_with_signal(MetaSetting, meta, data)
meta.save()
class MetaFilterForm(AdminFilterForm):
model = MetaSetting

@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from django.utils import translation
from django.db.models.signals import post_save
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
from pymorphy.django_conf import default_morph as morph
from functions.signal_handlers import post_save_handler
class MetaSetting(TranslatableModel):
name = models.CharField(max_length=100, unique=True)
@ -51,6 +53,4 @@ class MetaSetting(TranslatableModel):
return s
post_save.connect(post_save_handler, sender=MetaSetting)

@ -29,6 +29,7 @@ urlpatterns = required(
url(r'^translator/', include('translator.admin_urls')),
url(r'^webinar/', include('webinar.admin_urls')),
url(r'^settings/', include('settings.admin_urls')),
url(r'^meta/', include('meta.admin_urls')),
url(r'^language/add/', 'directories.admin.language_add'),
url(r'^currency/add/', 'directories.admin.currency_add'),
# ajax requests

@ -322,7 +322,7 @@ INSTALLED_APPS = (
'bitfield',
'djutils',
'pytils',
#'pymorphy',
'pymorphy',
'password_reset',
#'social_auth',
'social.apps.django_app.default',
@ -336,7 +336,7 @@ DEBUG_TOOLBAR_PATCH_SETTINGS = False
# 'debug_toolbar.panels.profiling.ProfilingPanel',
#)
PYMORPHY_DICTS = {
'ru': { 'dir': '/home/www/proj/settings/russian_dicts' },
'ru': { 'dir': os.path.join(SITE_ROOT, 'settings/russian_dicts')} #'/home/www/proj/settings/russian_dicts' },
}
# search backend

@ -0,0 +1,57 @@
{% extends 'admin_list.html' %}
{% load static %}
{% block body %}
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Фильтры</h2>
</div>
<div class="box-content">
<form>
{{ form }}
<button type="submit" class="btn">Найти</button>
</form>
</div>
</div>
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Список мета настроек</h2>
</div>
<div class="box-content">
<table class="table table-hover">
<thead>
<tr>
<th>Страница</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
{% for item in object_list %}
<tr>
<td>{{ item.name }}</td>
<td class="center sorting_1">
<a class="btn-small btn-info" href="/admin/meta/{{ item.id }}">
Изменить
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<a class="btn btn-success" href="/admin/meta/"><i class="icon-plus-sign icon-white"></i> Добавить настройку</a>
</div>
{# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div>
{% endblock %}

@ -0,0 +1,60 @@
{% extends 'base.html' %}
{% load static %}
{# Displays article form #}
{% block scripts %}
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
{# selects #}
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script>
<script src="{% static 'custom_js/make_select.js' %}"></script>
{# ajax #}
<script src="{% static 'custom_js/file_post_ajax.js' %}"></script>
<script src="{% static 'custom_js/select_tag.js' %}"></script>
{% endblock %}
{% block body %}
<form method="post" class="form-horizontal" name="form2" id="form2"enctype="multipart/form-data"> {% csrf_token %}
<fieldset>
<legend><i class="icon-edit"></i>{% if article %} Изменить {% else %} Добавить {% endif %}настройку{% if article %}(<a href="{{ article.get_permanent_url }}" target="_blank">на сайте</a>){% endif %}</legend>
<div class="box span8">
<div class="box-header well">
<h2><i class="icon-pencil"></i> </h2>
</div>
<div class="box-content">
{# name #}
<div class="control-group {% if form.name.errors %}error{% endif %}">
<label class="control-label"><b>{{ form.name.label }}:</b></label>
<div class="controls">
{{ form.name }}
<span class="help-inline">{{ form.name.errors }}</span>
</div>
</div>
{# title #}
{% include 'admin/forms/multilang.html' with field='title' form=form languages=languages %}
{# description #}
{% include 'admin/forms/multilang.html' with field='description' form=form languages=languages %}
{# keywords #}
{% include 'admin/forms/multilang.html' with field='keywords' form=form languages=languages %}
{# title #}
{% include 'admin/forms/multilang.html' with field='h1' form=form languages=languages %}
</div>
</div>
<div class="controls">
<input class="btn btn-large btn-primary" type="submit" value="{% if article %}Изменить{% else %}Добавить{% endif %}">
<input class="btn btn-large" type="reset" value="Отмена">
</div>
</fieldset>
</form>
{% endblock %}

@ -12,7 +12,9 @@
<header>
<div class="cli-title"><a href="{{ event.get_permanent_url }}">{{ event.name|safe }}</a></div>
<div class="cli-icos">
<span class="ce-ico icon-check"></span>
{% if request.user in event.users.all %}
<span class="ce-ico icon-check"></span>
{% endif %}
<span class="ce-ico icon-fav"></span>
</div>
</header>

@ -82,18 +82,20 @@
{% if event|in_event:day %}
{% if day.month == event.data_begin.month %}
{% if day.day == event.data_begin.day %}
<td class="c-cur" colspan="{{ event|duration:day.month }}">
<td class="c-cur" colspan="{{ event|duration }}">
<div class="c-event active-event {% if day.month != event.data_end.month %}cont-next{% endif %}">
<div class="ce-wrap">
<h3><a href="{{ event.get_permanent_url }}">{{ event.name|safe }}</a></h3>
<div class="ce-info">
<div class="cei-icons">
<span class="ce-ico icon-check"></span>
{% if request.user in event.users.all %}
<span class="ce-ico icon-check"></span>
{% endif %}
<span class="ce-ico icon-fav"></span>
</div>
<div class="cei-place">{{ event.country }}, {{ event.city }}
{% if event.plave %}
{% if event.place %}
, {{ event.place.address.address }}
{% endif %}
</div>
@ -103,27 +105,35 @@
</td>
{% endif %}
{% else %}
{% if day.day == event.data_end.day %}
{% comment %}
{% if day.day == event.data_end.day %}
<td class="c-cur" colspan="{{ event|duration:day.month }}">
<div class="c-event cont-prev">
<div class="ce-wrap">
<h3><a href="{{ event.get_permanent_url }}">{{ event.name|safe }}</a></h3>
<div class="ce-info">
<div class="cei-icons">
<span class="ce-ico icon-check"></span>
{% if request.user in event.users.all %}
<span class="ce-ico icon-check"></span>
{% endif %}
<span class="ce-ico icon-fav"></span>
</div>
<div class="cei-place">{{ event.country }}, {{ event.city }}
{% if event.plave %}
{% if event.place %}
, {{ event.place.address.address }}
{% endif %}
</div>
</div>
</div>
</div>
</td>
{% endif %}
{% endcomment %}
{% endif %}
{% else %}
{% ifnotequal day current_day %}

@ -27,14 +27,12 @@
<div class="cli-info">
<div class="cli-top clearfix">
{% if obj.quality_label.ufi.is_set %}
<div class="cli-approved">
<img src="{% static 'client/img/approved-logo.png' %}" alt="" title="Approved Event" />
</div>
{% endif %}
<header>
<div class="cli-title"><a href="{{ obj.get_permanent_url }}">{{ obj.name|safe }}</a></div>
</header>

@ -35,7 +35,7 @@
</header>
<div class="cli-descr">
<!--{{ result.object.main_title|safe }}-->
{{ result.object.main_title|safe }}
</div>
</div>
@ -60,32 +60,23 @@
<div class="cli-buttons clearfix">
<div class="cli-m-buttons">
<div class="cli-services">
<a class="button icon-sm" href="#">{% trans 'услуги' %}</a>
<div class="cli-services-sm">
<ul>
{% for service in result.object.get_services %}
<li><a href="#">{{ service.name }}</a></li>
{% endfor %}
</ul>
{% include 'client/includes/exposition/services.html' with obj=result.object %}
{% include 'client/includes/calendar_button.html' with obj=result.object %}
<div class="{% if request.user.is_authenticated%}note-wrap{% else %}note-wrap-disabled{% endif %}">
{% with note=result.object|note_by_user:request.user %}
<a class="button green icon-note {% if note %}active{% endif %} note-button" href="/expo/add-note/{{ result.object.url }}/">{% trans 'заметка' %}</a>
<div class="note-overlay">
<form action="">
<textarea name="note_text" class="note-text"> {{ note }}</textarea>
</form>
</div>
{% endwith %}
</div>
<a class="button blue icon-calendar addcalendar" href="#">
{% if user.is_authenticated %}
{% if result.object|in_calendar:user %}
{% trans 'из расписания' %}
{% else %}
{% trans 'в расписание' %}
{% endif %}
{% else %}
{% trans 'в расписание' %}
{% endif %}
</a>
<a class="button green icon-note" href="#">{% trans 'заметка' %}</a>
</div>
<div class="cli-s-buttons">
<a class="button blue2 lc" href="#">{% trans 'Лучшие цены на отели на' %} <i>Booking</i>.com</a>
{% include 'client/buttons/booking_button.html' with object=result.object %}
</div>
</div>
</div>
@ -100,11 +91,25 @@
{% endif %}
</div>
<div class="cli-tags">
{% with obj=result.object filter=filter %}
{% include 'includes/show_tags.html' %}
{% endwith %}
{% include 'client/includes/exposition/tags.html' with obj=result.object %}
</div>
</footer>
</li>
{% endfor %}
</ul>
{% block scripts %}
<script src="{% static 'client/js' %}{% if debug %}/{% else %}_min/{% endif %}_modules/block.exposition.list{% if debug %}{% else %}.min{% endif %}.js"></script>
<script>
EXPO.exposition.list.init({
note:{
wrapClass:'note-wrap',
wrapDisabledClass:'note-wrap-disabled',
buttonClass:'note-button',
inputClass:'note-text'
},
addCalendarText:"{% trans 'В расписание' %}",
removeCalendarText:"{% trans 'Из расписания' %}"
});
</script>
{% endblock %}

Loading…
Cancel
Save