remotes/origin/1203
Nazar Kotjuk 12 years ago
parent 954178c4b1
commit 1946a04da4
  1. 37
      exposition/admin.py
  2. 24
      exposition/models.py
  3. 2
      exposition/urls.py
  4. 3
      proj/admin_urls.py
  5. 4
      proj/settings.py
  6. 67
      proj/views.py
  7. 0
      settings/__init__.py
  8. 17
      settings/admin.py
  9. 43
      settings/forms.py
  10. 81
      settings/models.py
  11. 16
      settings/tests.py
  12. 6
      settings/urls.py
  13. 1
      settings/views.py
  14. 43
      templates/admin/exposition/exposition_all.html
  15. 17
      templates/admin/settings/settings.html
  16. 9
      templates/test.html

@ -26,6 +26,43 @@ def exposition_all(request):
"""
return objects_list(request, Exposition, 'exposition_all.html')
@login_required
def exposition_switch(request, url, action):
"""
turn on or off exposition
take:
url as url of exposition
action as action what to do('on' or 'off')
"""
exposition = Exposition.objects.safe_get(url=url)
if not exposition:
return HttpResponse('error')
else:
if action == 'on':
exposition.on()
return HttpResponse('on')
elif action == 'off':
exposition.off()
return HttpResponse('off')
else:
return HttpResponse('error')
@login_required
def exposition_copy(request, url):
exposition = Exposition.objects.safe_get(url=url)
if not exposition:
return HttpResponse('error')
else:
exposition.pk = None
exposition.url += '_copy'
exposition.is_published = False
exposition.cancel_by_administrator = False
exposition.save()
return HttpResponse('success')
@login_required
def exposition_add(request):

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from hvad.models import TranslatableModel, TranslatedFields, TranslationManager
#
from functions.custom_fields import EnumField
@ -11,12 +11,24 @@ AUDIENCE1 = ((None,'Не выбрано'),
AUDIENCE = (None,'experts', 'experts and consumers', 'general public')
CURRENCY = ('RUB', 'USD', 'EUR')
class ExpositionManager(TranslationManager):
def safe_get(self, **kwargs):
model = self.model
try:
return model.objects.get(**kwargs)
except:
return None
class Exposition(TranslatableModel):
"""
Create Exposition model
Uses hvad.TranslatableModel which is child of django.db.models class
"""
#set manager of this model
objects = ExpositionManager()
url = models.SlugField(unique=True)
data_begin = models.DateField(verbose_name='Дата начала')
data_end = models.DateField(verbose_name='Дата окончания')
@ -88,6 +100,16 @@ class Exposition(TranslatableModel):
def cancel(self):
self.canceled_by_administrator = True
def on(self):
self.is_published = True
self.canceled_by_administrator = False
self.save()
def off(self):
self.is_published = False
self.canceled_by_administrator = True
self.save()
class TimeTable(TranslatableModel):
"""

@ -6,4 +6,6 @@ urlpatterns = patterns('exposition.admin',
url(r'^delete/(?P<url>.*)/$', 'exposition_delete'),
url(r'^change/(?P<url>.*)/$', 'exposition_change'),
url(r'^all/$', 'exposition_all'),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'exposition_switch'),
url(r'^copy/(?P<url>.*)$', 'exposition_copy'),
)

@ -21,7 +21,8 @@ urlpatterns = patterns('',
url(r'^theme/', include('theme.urls')),
url(r'^translator/', include('translator.urls')),
url(r'^webinar/', include('webinar.urls')),
url(r'^settings/$', 'proj.views.settings'),
#url(r'^settings/$', 'proj.views.settings'),
url(r'^settings/$', include('settings.urls')),
url(r'^language/add/', 'directories.admin.language_add'),
url(r'^currency/add/', 'directories.admin.currency_add'),
#

@ -163,7 +163,8 @@ TEMPLATE_DIRS = (
'/home/kotzilla/Documents/qwer/proj/templates/admin/organiser',
'/home/kotzilla/Documents/qwer/proj/templates/admin/place_conference',
'/home/kotzilla/Documents/qwer/proj/templates/admin/place_exposition',
'/home/kotzilla/Documents/qwer/proj/templates/admin/proj',
#'/home/kotzilla/Documents/qwer/proj/templates/admin/proj',
'/home/kotzilla/Documents/qwer/proj/templates/admin/settings',
'/home/kotzilla/Documents/qwer/proj/templates/admin/seminar',
'/home/kotzilla/Documents/qwer/proj/templates/admin/service',
'/home/kotzilla/Documents/qwer/proj/templates/admin/theme',
@ -231,6 +232,7 @@ INSTALLED_APPS = (
'review',
'seminar',
'service',
'settings',
'theme',
'translator',
'webinar',

@ -1,84 +1,25 @@
# -*- coding: utf-8 -*-
from django.core.context_processors import csrf
from settings import LANGUAGES
from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.contenttypes.models import ContentType
from forms import SettingsForm
from models import Settings
#from forms import SettingsForm
#from models import Settings
from django.contrib.auth.decorators import login_required
from seminar.models import Seminar
from file.models import TmpFile, FileModel
from file.forms import FileModelForm
from country.models import Country
from city.models import City
from theme.models import Tag
from django.shortcuts import get_object_or_404
from django.db.models.loading import get_model
@login_required
def home(request):
return render_to_response('base.html')
@login_required
def settings(request):
"""
Return form of settings and saves changes
"""
if request.POST:
form = SettingsForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/admin')
else:
form = SettingsForm()
args = {}
args.update(csrf(request))
args['languages'] = LANGUAGES
args['form'] = form
return render_to_response('settings.html', args)
from directories.models import Currency
from country.models import Country
from country.forms import CountryForm
from file.forms import FileModelForm
from django.views.decorators.cache import cache_page
#from django.core.cache import cache
#@cache_page(30)
def test(request):
ids = [i for i in range(1, 5000)]
form = CountryForm()
file_form = FileModelForm
c = Country.objects.get(id=5)
country_id = getattr(c, 'id')
#args = {}
for i in range(1,10000):
args = {'languages': LANGUAGES, 'form': form, 'file_form': file_form, 'obj_id': country_id, 'files':FileModel.objects.filter(content_type=ContentType.objects.get_for_model(c), object_id=getattr(c, 'id'))}
#args['languages'] = LANGUAGES
#args['form'] = form
#args['file_form'] = file_form
#args['files'] = FileModel.objects.filter(content_type=ContentType.objects.get_for_model(c), object_id=getattr(c, 'id'))
#args['obj_id'] = country_id
#currs = [item for item in Currency.objects.all()]
#currs = []
#for i in ids:
# currs.append(Currency.objects.get(id=i))
#cache.set('key', currs[100].currency, 60)
return HttpResponse(args)
return render_to_response('test.html')

@ -0,0 +1,17 @@
# -*- 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.contrib.auth.decorators import login_required
#
from forms import SettingsForm
@login_required
def change_settings(request):
form = SettingsForm()
args = {'form': form, 'languages': settings.LANGUAGES}
args.update(csrf(request))
return render_to_response('settings.html', args)

@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
from django import forms
from models import Setting
from django.conf import settings
from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all
class SettingsForm(forms.Form):
"""
Create Settings form for creating settings
__init__ uses for dynamic creates fields
save function saves data in Settings object. If it doesnt exist create new object
"""
def __init__(self, *args, **kwargs):
super(SettingsForm, self).__init__(*args, **kwargs)
# creates translated form fields, example: name_ru, name_en
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
settings_list = Setting.objects.all()
for item in settings_list:
if item.type != 'transl':
self.fields['%s'%item.key] = forms.CharField(label='%s'%item.key, initial=item.get_value(),
required=False)
else:
if len(settings.LANGUAGES) in range(10):
for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
required = True if lid == 0 else False
self.fields['%s_%s' %(item.key, code)] = forms.CharField(label=getattr(item, 'key'), initial=item.get_value(code),
required=required,widget=forms.TextInput(attrs={'style':'width: 450px'}))
def save(self):
"""
changes Settings model
"""
data = self.cleaned_data
capacity_tmpl = Setting.objects.get(key='hall_template')
for code, name in settings.LANGUAGES:
capacity_tmpl.set_value(data['hall_capacity_tmpl_%s'%code], code)

@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
from django.db import models
from hvad.models import TranslatableModel, TranslatedFields
from django.conf import settings
#
from functions.custom_fields import EnumField
class Setting(TranslatableModel):
"""
Create Settings model, which stores different settings of project
Uses hvad.TranslatableModel which is child of django.db.models class
"""
VALUES = ('int', 'text', 'transl', 'date')
key = models.CharField(max_length=50)
type = EnumField(values=VALUES)
int = models.IntegerField(blank=True, null=True)
text = models.CharField(max_length=255, blank=True)
date = models.DateTimeField(blank=True, null=True)
translations = TranslatedFields(
transl = models.CharField(max_length=255, blank=True,default='111'),
name = models.CharField(max_length=50),
)
def __unicode__(self):
return self.key
def get_value(self, code=None):
"""
returns value of setting
value can be - int, text, date or translated field
"""
if self.type == 'transl':
obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id'))
return getattr(obj, self.type)
else:
return getattr(self,self.type)
def set_value(self, value, code=None):
"""
sets value of setting
"""
if self.type == 'transl':
obj = Setting._meta.translations_model.objects.get(language_code = code,master__id=getattr(self, 'id'))
setattr(obj, self.type, value)
obj.save()
else:
setattr(self, self.type, value)
from django.db.models.signals import post_save
from django.dispatch import receiver
#@receiver(post_save, sender=Setting)
def create_transl_fields(sender, **kw):
"""
"""
setting = kw['instance']
setting.text = '111'
setting.save()
#if kwargs['created'] and setting.type == 'transl':
# setting.int = 1
#if len(setting.LANGUAGES) in range(10):
# for lid, (code, name) in enumerate(settings.LANGUAGES):
# using enumerate for detect iteration number
# first iteration is a default lang so it required fields
#post_save.connect(create_transl_fields, sender=Setting)

@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
urlpatterns = patterns('settings.admin',
url(r'^$', 'change_settings'),
)

@ -0,0 +1 @@
# Create your views here.

@ -1,5 +1,40 @@
{% extends 'base.html' %}
{% block scripts %}
<script>
$(document).ready(function(){
$('#on').click(function(){
var url = $(this).attr('href')
var $this = $(this)
$.get(
url, function(data){
if (data == 'on'){
$this.hide();
$('#off').show();
}
});//end get
return false;
});
$('#off').click(function(){
var url = $(this).attr('href')
var $this = $(this)
$.get(
url, function(data){
if (data == 'off'){
$this.hide();
$('#on').show();
}
}
)
return false;
});
});
</script>
{% endblock %}
{% block body %}
<div class="box span8">
<div class="box-header well">
@ -25,6 +60,14 @@
<td>{{ item.data_begin }}</td>
<td class="center sorting_1">
<a class="btn btn-warning" style="{% if item.is_published %}{% else %}display: none;{% endif %}"
href="/admin/exposition/switch/{{ item.url }}/off" id="off">
<i class="icon-remove-sign icon-white"></i> Отключить
</a>
<a class="btn btn-success" style="{% if item.is_published %}display: none;{% else %}{% endif %}"
href="/admin/exposition/switch/{{ item.url }}/on" id="on">
<i class="icon-ok icon-white"></i> Включить
</a>
<a class="btn btn-info" href="/admin/exposition/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить
</a>

@ -0,0 +1,17 @@
{% extends 'base.html' %}
{% block body %}
<form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %}
{% for field in form %}
{{ field.name }}
{% with field='{{ field.int }}' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %}
{% endwith %}
{% endfor %}
</form>
{% endblock %}

@ -0,0 +1,9 @@
{% extends 'base.html' %}
{% block body %}
<form>
{{ form }}
</form>
{% endblock %}
Loading…
Cancel
Save