copy button in all catalogs. on/off button for events

remotes/origin/1203
Nazar Kotjuk 12 years ago
parent 51111309ae
commit 72847d4d71
  1. 12
      article/admin.py
  2. 2
      article/models.py
  3. 1
      article/urls.py
  4. 38
      conference/admin.py
  5. 11
      conference/models.py
  6. 2
      conference/urls.py
  7. 20
      news/admin.py
  8. 7
      news/forms.py
  9. 2
      news/models.py
  10. 4
      news/urls.py
  11. 13
      place_conference/admin.py
  12. 1
      place_conference/urls.py
  13. 12
      place_exposition/admin.py
  14. 1
      place_exposition/urls.py
  15. 4
      proj/settings.py
  16. 35
      seminar/admin.py
  17. 10
      seminar/models.py
  18. 2
      seminar/urls.py
  19. 11
      settings/admin.py
  20. 30
      static/custom_js/event_switcher.js
  21. 21
      templates/admin/article/article_all.html
  22. 34
      templates/admin/conference/conference_all.html
  23. 34
      templates/admin/exposition/exposition_all.html
  24. 14
      templates/admin/news/news_all.html
  25. 18
      templates/admin/place_conference/place_conference_all.html
  26. 17
      templates/admin/place_exposition/place_exposition_all.html
  27. 37
      templates/admin/seminar/seminar_all.html
  28. 16
      templates/admin/settings/settings.html
  29. 18
      templates/admin/theme/tag_all.html
  30. 20
      templates/admin/theme/theme_all.html
  31. 38
      templates/admin/webinar/webinar_all.html
  32. 20
      theme/admin.py
  33. 2
      theme/forms.py
  34. 2
      theme/urls.py
  35. 37
      webinar/admin.py
  36. 10
      webinar/models.py
  37. 2
      webinar/urls.py

@ -13,6 +13,7 @@ from file.forms import FileModelForm
#custom views #custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object from functions.custom_views import objects_list, add_object_with_file, delete_object
from functions.views_help import get_referer
def article_all(request): def article_all(request):
@ -21,6 +22,17 @@ def article_all(request):
""" """
return objects_list(request, Article, 'article_all.html') return objects_list(request, Article, 'article_all.html')
@login_required
def article_copy(request, url):
article = Article.objects.safe_get(url=url)
if not article:
return HttpResponseRedirect(get_referer(request))
else:
article.clone()
return HttpResponseRedirect(get_referer(request))
def article_add(request): def article_add(request):
""" """
Return form of article and post it on the server. Return form of article and post it on the server.

@ -20,7 +20,7 @@ class Article(TranslatableModel):
""" """
#set manager of this model #set manager of this model
objects = ArticleManager objects = ArticleManager()
url = models.SlugField(unique=True) url = models.SlugField(unique=True)
theme = models.ManyToManyField('theme.Theme') theme = models.ManyToManyField('theme.Theme')

@ -5,5 +5,6 @@ urlpatterns = patterns('article.admin',
url(r'^add/$', 'article_add'), url(r'^add/$', 'article_add'),
url(r'^delete/(?P<url>.*)/$', 'article_delete'), url(r'^delete/(?P<url>.*)/$', 'article_delete'),
url(r'^change/(.*)/$', 'article_change'), url(r'^change/(.*)/$', 'article_change'),
url(r'^copy/(.*)/$', 'article_copy'),
url(r'^all/$', 'article_all'), url(r'^all/$', 'article_all'),
) )

@ -18,6 +18,7 @@ from file.forms import FileModelForm
import random import random
#custom views #custom views
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def conference_all(request): def conference_all(request):
@ -27,6 +28,43 @@ def conference_all(request):
return objects_list(request, Conference, 'conference_all.html') return objects_list(request, Conference, 'conference_all.html')
@login_required
def conference_switch(request, url, action):
"""
turn on or off conference
take:
url as url of conference
action as action what to do('on' or 'off')
"""
conference = Conference.objects.safe_get(url=url)
if not conference:
return HttpResponse('error')
else:
if action == 'on':
conference.on()
return HttpResponse('on')
elif action == 'off':
conference.off()
return HttpResponse('off')
else:
return HttpResponse('error')
@login_required
def conference_copy(request, url):
conference = Conference.objects.safe_get(url=url)
if not conference:
return HttpResponseRedirect(get_referer(request))
else:
conference.clone()
return HttpResponseRedirect(get_referer(request))
@login_required @login_required
def conference_add(request): def conference_add(request):
""" """

@ -84,6 +84,17 @@ class Conference(TranslatableModel):
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk)) return self.lazy_translation_getter('name', unicode(self.pk))
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()
def cancel(self): def cancel(self):
self.canceled_by_administrator = True self.canceled_by_administrator = True

@ -5,5 +5,7 @@ urlpatterns = patterns('conference.admin',
url(r'^add.*/$', 'conference_add'), url(r'^add.*/$', 'conference_add'),
url(r'^delete/(?P<url>.*)$', 'conference_delete'), url(r'^delete/(?P<url>.*)$', 'conference_delete'),
url(r'^change/(?P<url>.*)/$', 'conference_change'), url(r'^change/(?P<url>.*)/$', 'conference_change'),
url(r'^copy/(?P<url>.*)/$', 'conference_copy'),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'conference_switch'),
url(r'^all/$', 'conference_all'), url(r'^all/$', 'conference_all'),
) )

@ -9,7 +9,7 @@ from django.db.models.loading import get_model
import json import json
#model and forms #model and forms
from models import News from models import News
from news.forms import NewsForm from news.forms import NewsForm, NewsDeleteForm
from exposition.models import Exposition from exposition.models import Exposition
from conference.models import Conference from conference.models import Conference
from theme.models import Tag from theme.models import Tag
@ -18,7 +18,8 @@ from file.forms import FileModelForm
#python #python
import random import random
#custom views #custom views
from functions.custom_views import objects_list from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def news_all(request): def news_all(request):
@ -27,6 +28,21 @@ def news_all(request):
""" """
return objects_list(request, News, 'news_all.html') return objects_list(request, News, 'news_all.html')
@login_required
def news_copy(request, url):
news = News.objects.safe_get(url=url)
if not news:
return HttpResponseRedirect(get_referer(request))
else:
news.clone()
return HttpResponseRedirect(get_referer(request))
def news_delete(request, url):
return delete_object(request, News, NewsDeleteForm, url, '/admin/news/all')
@login_required @login_required
def news_add(request): def news_add(request):

@ -134,3 +134,10 @@ class NewsForm(forms.Form):
return main_title_ru return main_title_ru
raise ValidationError('Новость с таким названием уже существует') raise ValidationError('Новость с таким названием уже существует')
class NewsDeleteForm(forms.ModelForm):
url = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = News
fields = ('url',)

@ -18,7 +18,7 @@ class NewsManager(TranslationManager):
TYPES = ('announcement', 'news', 'overview') TYPES = ('announcement', 'news', 'overview')
class News(TranslatableModel): class News(TranslatableModel):
#set manager of this model #set manager of this model
objects = NewsManager objects = NewsManager()
content_type = models.ForeignKey(ContentType, null=True) content_type = models.ForeignKey(ContentType, null=True)
object_id = models.PositiveIntegerField(blank=True, null=True) object_id = models.PositiveIntegerField(blank=True, null=True)

@ -3,7 +3,9 @@ from django.conf.urls import patterns, include, url
urlpatterns = patterns('news.admin', urlpatterns = patterns('news.admin',
url(r'^add.*/$', 'news_add'), url(r'^add.*/$', 'news_add'),
url(r'^change/(.*)/$', 'news_change'), url(r'^change/(?P<url>.*)/$', 'news_change'),
url(r'^copy/(?P<url>.*)/$', 'news_copy'),
url(r'^delete/(?P<url>.*)/$', 'news_delete'),
url(r'^all/$', 'news_all'), url(r'^all/$', 'news_all'),
#ajax #ajax
url(r'^event/$', 'get_event_id'), url(r'^event/$', 'get_event_id'),

@ -18,6 +18,7 @@ from file.forms import FileModelForm
import random import random
#custom views #custom views
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def conference_all(request): def conference_all(request):
@ -27,6 +28,18 @@ def conference_all(request):
return objects_list(request, PlaceConference, 'place_conference_all.html') return objects_list(request, PlaceConference, 'place_conference_all.html')
@login_required
def place_conference_copy(request, url):
place_conference = PlaceConference.objects.safe_get(url=url)
if not place_conference:
return HttpResponseRedirect(get_referer(request))
else:
place_conference.clone()
return HttpResponseRedirect(get_referer(request))
# http://stackoverflow.com/questions/2406537/django-formsets-make-first-required/4951032#4951032 # http://stackoverflow.com/questions/2406537/django-formsets-make-first-required/4951032#4951032
@login_required @login_required
def conference_add(request): def conference_add(request):

@ -5,5 +5,6 @@ urlpatterns = patterns('place_conference.admin',
url(r'^add.*/$', 'conference_add'), url(r'^add.*/$', 'conference_add'),
url(r'^delete/(?P<url>.*)/$', 'conference_delete'), url(r'^delete/(?P<url>.*)/$', 'conference_delete'),
url(r'^change/(?P<url>.*)/$', 'conference_change'), url(r'^change/(?P<url>.*)/$', 'conference_change'),
url(r'^copy/(?P<url>.*)/$', 'place_conference_copy'),
url(r'^all/$', 'conference_all'), url(r'^all/$', 'conference_all'),
) )

@ -19,6 +19,7 @@ from file.forms import FileModelForm
import random import random
#custom fields #custom fields
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def exposition_all(request): def exposition_all(request):
@ -27,6 +28,17 @@ def exposition_all(request):
""" """
return objects_list(request, PlaceExposition, 'place_exposition_all.html') return objects_list(request, PlaceExposition, 'place_exposition_all.html')
@login_required
def place_exposition_copy(request, url):
place_exposition = PlaceExposition.objects.safe_get(url=url)
if not place_exposition:
return HttpResponseRedirect(get_referer(request))
else:
place_exposition.clone()
return HttpResponseRedirect(get_referer(request))
@login_required @login_required
def exposition_add(request): def exposition_add(request):

@ -5,5 +5,6 @@ urlpatterns = patterns('place_exposition.admin',
url(r'^add.*/$', 'exposition_add'), url(r'^add.*/$', 'exposition_add'),
url(r'^delete/(?P<url>.*)/$', 'exposition_delete'), url(r'^delete/(?P<url>.*)/$', 'exposition_delete'),
url(r'^change/(?P<url>.*)/$', 'exposition_change'), url(r'^change/(?P<url>.*)/$', 'exposition_change'),
url(r'^copy/(?P<url>.*)/$', 'place_exposition_copy'),
url(r'^all/$', 'exposition_all'), url(r'^all/$', 'exposition_all'),
) )

@ -38,7 +38,7 @@ ALLOWED_HOSTS = []
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems. # although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone. # In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'America/Chicago' TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here: # Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html # http://www.i18nguy.com/unicode/language-identifiers.html
@ -106,8 +106,6 @@ STATICFILES_DIRS = (
# Always use forward slashes, even on Windows. # Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths. # Don't forget to use absolute paths, not relative paths.
'/home/kotzilla/Documents/qwer/static', '/home/kotzilla/Documents/qwer/static',
) )
# List of finder classes that know how to find static files in # List of finder classes that know how to find static files in

@ -16,6 +16,7 @@ from file.forms import FileModelForm
import random import random
#custom views #custom views
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def seminar_all(request): def seminar_all(request):
@ -24,6 +25,40 @@ def seminar_all(request):
""" """
return objects_list(request, Seminar, 'seminar_all.html') return objects_list(request, Seminar, 'seminar_all.html')
@login_required
def seminar_switch(request, url, action):
"""
turn on or off seminar
take:
url as url of seminar
action as action what to do('on' or 'off')
"""
seminar = Seminar.objects.safe_get(url=url)
if not seminar:
return HttpResponse('error')
else:
if action == 'on':
seminar.on()
return HttpResponse('on')
elif action == 'off':
seminar.off()
return HttpResponse('off')
else:
return HttpResponse('error')
@login_required
def seminar_copy(request, url):
seminar = Seminar.objects.safe_get(url=url)
if not seminar:
return HttpResponseRedirect(get_referer(request))
else:
seminar.clone()
return HttpResponseRedirect(get_referer(request))
@login_required @login_required
def seminar_add(request): def seminar_add(request):

@ -80,6 +80,16 @@ class Seminar(TranslatableModel):
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk)) return self.lazy_translation_getter('name', unicode(self.pk))
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()
def cancel(self): def cancel(self):
self.canceled_by_administrator = True self.canceled_by_administrator = True

@ -5,5 +5,7 @@ urlpatterns = patterns('seminar.admin',
url(r'^add.*/$', 'seminar_add'), url(r'^add.*/$', 'seminar_add'),
url(r'^delete/(?P<url>.*)/$', 'seminar_delete'), url(r'^delete/(?P<url>.*)/$', 'seminar_delete'),
url(r'^change/(?P<url>.*)/$', 'seminar_change'), url(r'^change/(?P<url>.*)/$', 'seminar_change'),
url(r'^copy/(?P<url>.*)/$', 'seminar_copy'),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'seminar_switch'),
url(r'^all/$', 'seminar_all'), url(r'^all/$', 'seminar_all'),
) )

@ -11,7 +11,10 @@ from forms import SettingsForm
@login_required @login_required
def change_settings(request): def change_settings(request):
form = SettingsForm() if request.POST:
args = {'form': form, 'languages': settings.LANGUAGES} pass
args.update(csrf(request)) else:
return render_to_response('settings.html', args) form = SettingsForm()
args = {'form': form, 'languages': settings.LANGUAGES}
args.update(csrf(request))
return render_to_response('settings.html', args)

@ -0,0 +1,30 @@
$(document).ready(function(){
$('.on').click(function(){
var url = $(this).attr('href')
var $this = $(this)
$.get(
url, function(data){
if (data == 'on'){
$this.hide();
$this.siblings('.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();
$this.siblings('.on').show();
}
}
)
return false;
});
});

@ -13,7 +13,7 @@ Displays lists of all articles in the table
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Заголовок</th> <th>Заголовок</th>
<th>Автор</th> <th>Автор</th>
<th>&nbsp;</th> <th>&nbsp;</th>
@ -22,15 +22,24 @@ Displays lists of all articles in the table
<tbody> <tbody>
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.main_title }}</td> <td>{{ item.main_title }}</td>
<td>{% ifnotequal item.user None %}{{ item.user }} {% endifnotequal %}</td> <td>{% ifnotequal item.user None %}{{ item.user }} {% endifnotequal %}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/article/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/article/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a> </a>
<a class="btn btn-danger delete" href="/admin/article/delete/{{ item.url }}/"> </td>
<i class="icon-trash icon-white"></i> Удалить
<td class="center sorting_1">
<a class="btn-small btn-inverse" href="/admin/article/copy/{{ item.url|lower }}">
Копировать
</a>
</td>
<td>
<a class="btn-small btn-danger delete" href="/admin/article/delete/{{ item.url }}/">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -1,4 +1,11 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %}
{% block scripts %}
<script src="{% static 'custom_js/event_switcher.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
<div class="box span8"> <div class="box span8">
@ -10,7 +17,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Дата начала</th> <th>Дата начала</th>
<th>&nbsp;</th> <th>&nbsp;</th>
@ -20,19 +26,37 @@
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.data_begin }}</td> <td>{{ item.data_begin }}</td>
<td>
<a class="btn-small btn-warning off" style="{% if item.is_published %}{% else %}display: none;{% endif %}"
href="/admin/conference/switch/{{ item.url }}/off">
Отключить
</a>
<a class="btn-small btn-success on" style="{% if item.is_published %}display: none;{% else %}{% endif %}"
href="/admin/conference/switch/{{ item.url }}/on">
Включить
</a>
</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/conference/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/conference/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a>
</td>
<td>
<a class="btn-small btn-inverse" href="/admin/conference/copy/{{ item.url|lower }}">
Копировать
</a> </a>
</td>
<td>
<a class="btn btn-danger" href="/admin/conference/delete/{{ item.url|lower }}"> <a class="btn btn-danger" href="/admin/conference/delete/{{ item.url|lower }}">
<i class="icon-trash icon-white"></i> Удалить <i class="icon-trash icon-white"></i> Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -1,40 +1,12 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %}
{% block scripts %} {% 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();
$this.siblings('.off').show();
}
});//end get
return false;
});
$('.off').click(function(){ <script src="{% static 'custom_js/event_switcher.js' %}"></script>
var url = $(this).attr('href')
var $this = $(this)
$.get(
url, function(data){
if (data == 'off'){
$this.hide();
$this.siblings('.on').show();
}
}
)
return false;
});
});
</script>
{% endblock %} {% endblock %}
{% block body %} {% block body %}
<div class="box span8"> <div class="box span8">
<div class="box-header well"> <div class="box-header well">

@ -28,8 +28,18 @@ Displays lists of all news in the table
<td>{{ item.main_title }}</td> <td>{{ item.main_title }}</td>
<td>{{ item.type }}</td> <td>{{ item.type }}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/news/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/news/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a>
</td>
<td class="center sorting_1">
<a class="btn-small btn-inverse" href="/admin/news/copy/{{ item.url|lower }}">
Копировать
</a>
</td>
<td class="center sorting_1">
<a class="btn-small btn-danger" href="/admin/news/delete/{{ item.url|lower }}">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -10,7 +10,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Краткое описание</th> <th>Краткое описание</th>
<th>Страна</th> <th>Страна</th>
@ -21,18 +20,23 @@
<tbody> <tbody>
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}</td> <td>{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}</td>
<td>{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}</td> <td>{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}</td>
<td>{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %}</td> <td>{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/place_conference/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/place_conference/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a> </a>
</td>
<a class="btn btn-danger" href="/admin/place_conference/delete/{{ item.url|lower }}"> <td class="center sorting_1">
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-inverse" href="/admin/place_conference/copy/{{ item.url|lower }}">
Копировать
</a>
</td>
<td>
<a class="btn-small btn-danger" href="/admin/place_conference/delete/{{ item.url|lower }}">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -10,7 +10,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Краткое описание</th> <th>Краткое описание</th>
<th>Страна</th> <th>Страна</th>
@ -21,18 +20,24 @@
<tbody> <tbody>
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}</td> <td>{% ifnotequal item.type None %}{{ item.type }} {% endifnotequal %}</td>
<td>{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}</td> <td>{% ifnotequal item.country None %}{{ item.country }} {% endifnotequal %}</td>
<td>{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %}</td> <td>{% ifnotequal item.city None %}{{ item.city }} {% endifnotequal %}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/place_exposition/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/place_exposition/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a> </a>
</td>
<td class="center sorting_1">
<a class="btn-small btn-inverse" href="/admin/place_exposition/copy/{{ item.url|lower }}">
Копировать
</a>
</td>
<a class="btn btn-danger" href="/admin/place_exposition/delete/{{ item.url|lower }}"> <td>
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-danger" href="/admin/place_exposition/delete/{{ item.url|lower }}">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -1,4 +1,10 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %}
{% block scripts %}
<script src="{% static 'custom_js/event_switcher.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
<div class="box span8"> <div class="box span8">
@ -10,7 +16,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Дата начала</th> <th>Дата начала</th>
<th>&nbsp;</th> <th>&nbsp;</th>
@ -20,19 +25,37 @@
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.data_begin }}</td> <td>{{ item.data_begin }}</td>
<td>
<a class="btn-small btn-warning off" style="{% if item.is_published %}{% else %}display: none;{% endif %}"
href="/admin/seminar/switch/{{ item.url }}/off">
Отключить
</a>
<a class="btn-small btn-success on" style="{% if item.is_published %}display: none;{% else %}{% endif %}"
href="/admin/seminar/switch/{{ item.url }}/on">
Включить
</a>
</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/seminar/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/seminar/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a>
</td>
<td>
<a class="btn-small btn-inverse" href="/admin/seminar/copy/{{ item.url|lower }}">
Удалить
</a> </a>
</td>
<a class="btn btn-danger" href="/admin/seminar/delete/{{ item.url|lower }}"> <td>
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-danger" href="/admin/seminar/delete/{{ item.url|lower }}">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -5,13 +5,17 @@
<form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %} <form method="post" class="form-horizontal" enctype="multipart/form-data" name="form1" id="form1"> {% csrf_token %}
{% for field in form %} {# template hall placeconference #}
{{ field.name }} {% with field='place_conf_hall' form=form languages=languages %}
{% with field='{{ field.int }}' form=form languages=languages %} {% include 'admin/forms/multilang.html' %}
{% include 'admin/forms/multilang.html' %} {% endwith %}
{% endwith %}
{# template hall placeexposition #}
{% with field='place_exp_hall' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %}
{% endwith %}
{% endfor %}
</form> </form>
{% endblock %} {% endblock %}

@ -10,7 +10,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Тема</th> <th>Тема</th>
<th>Заголовок</th> <th>Заголовок</th>
@ -21,18 +20,25 @@
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.theme }}</td> <td>{{ item.theme }}</td>
<td>{{ item.main_title }}</td> <td>{{ item.main_title }}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/theme/tag/change/{{ item.id }}"> <a class="btn-small btn-info" href="/admin/theme/tag/change/{{ item.id }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a> </a>
</td>
<a class="btn btn-danger delete" href="/admin/theme/tag/delete/{{ item.id }}/"> <td class="center sorting_1">
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-inverse" href="/admin/theme/tag/copy/{{ item.id }}">
Копировать
</a>
</td>
<td>
<a class="btn-small btn-danger delete" href="/admin/theme/tag/delete/{{ item.id }}/">
Удалить
</a> </a>
</td> </td>

@ -10,7 +10,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Заголовок</th> <th>Заголовок</th>
<th>&nbsp;</th> <th>&nbsp;</th>
@ -20,19 +19,26 @@
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.main_title }}</td> <td>{{ item.main_title }}</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/theme/theme/change/{{ item.id }}"> <a class="btn-small btn-info" href="/admin/theme/theme/change/{{ item.id }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a> </a>
</td>
<a class="btn btn-danger delete" href="/admin/theme/theme/delete/{{ item.id }}/"> <td>
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-inverse" href="/admin/theme/theme/copy/{{ item.id }}/">
Копировать
</a> </a>
</td> </td>
<td>
<a class="btn-small btn-danger delete" href="/admin/theme/theme/delete/{{ item.id }}/">
Удалить
</a>
</td>
</tr> </tr>

@ -1,4 +1,11 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load static %}
{% block scripts %}
<script src="{% static 'custom_js/event_switcher.js' %}"></script>
{% endblock %}
{% block body %} {% block body %}
<div class="box span8"> <div class="box span8">
@ -10,7 +17,6 @@
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>id</th>
<th>Название</th> <th>Название</th>
<th>Дата</th> <th>Дата</th>
<th>&nbsp;</th> <th>&nbsp;</th>
@ -20,19 +26,37 @@
{% for item in objects %} {% for item in objects %}
<tr> <tr>
<td>{{ item.id }}</td>
<td>{{ item.name }}</td> <td>{{ item.name }}</td>
<td>{{ item.data_begin }}</td> <td>{{ item.data_begin }}</td>
<td>
<a class="btn-small btn-warning off" style="{% if item.is_published %}{% else %}display: none;{% endif %}"
href="/admin/webinar/switch/{{ item.url }}/off">
Отключить
</a>
<a class="btn-small btn-success on" style="{% if item.is_published %}display: none;{% else %}{% endif %}"
href="/admin/webinar/switch/{{ item.url }}/on">
Включить
</a>
</td>
<td class="center sorting_1"> <td class="center sorting_1">
<a class="btn btn-info" href="/admin/webinar/change/{{ item.url|lower }}"> <a class="btn-small btn-info" href="/admin/webinar/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить Изменить
</a>
</td>
<td>
<a class="btn-small btn-inverse" href="/admin/webinar/copy/{{ item.url|lower }}">
Копировать
</a> </a>
</td>
<a class="btn btn-danger" href="/admin/webinar/delete/{{ item.url|lower }}"> <td>
<i class="icon-trash icon-white"></i> Удалить <a class="btn-small btn-danger" href="/admin/webinar/delete/{{ item.url|lower }}">
Удалить
</a> </a>
</td> </td>
</tr> </tr>

@ -12,6 +12,7 @@ from forms import ThemeForm, TagForm, ThemeDeleteForm, TagDeleteForm
from models import Theme, Tag from models import Theme, Tag
#custom views #custom views
from functions.custom_views import objects_list, add_object, delete_object from functions.custom_views import objects_list, add_object, delete_object
from functions.views_help import get_referer
def theme_all(request): def theme_all(request):
@ -34,6 +35,25 @@ def theme_delete(request, theme_id):
def tag_delete(request, tag_id): def tag_delete(request, tag_id):
return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all') return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all')
@login_required
def theme_copy(request, theme_id):
theme = Theme.objects.safe_get(id=theme_id)
if not theme:
return HttpResponseRedirect(get_referer(request))
else:
theme.clone()
return HttpResponseRedirect(get_referer(request))
@login_required
def tag_copy(request, tag_id):
tag = Tag.objects.safe_get(id=tag_id)
if not tag:
return HttpResponseRedirect(get_referer(request))
else:
tag.clone()
return HttpResponseRedirect(get_referer(request))
@login_required @login_required
def theme_change(request, theme_id=None): def theme_change(request, theme_id=None):

@ -76,6 +76,8 @@ class ThemeForm(forms.Form):
if not types: if not types:
types = [i for (i, k) in Theme.FLAGS] types = [i for (i, k) in Theme.FLAGS]
return types return types
else:
return types
class TagForm(forms.Form): class TagForm(forms.Form):

@ -8,6 +8,8 @@ urlpatterns = patterns('theme.admin',
url(r'^tag/delete/(?P<tag_id>\d+)/$', 'tag_delete'), url(r'^tag/delete/(?P<tag_id>\d+)/$', 'tag_delete'),
url(r'^theme/change/(?P<theme_id>\d+).*/$', 'theme_change'), url(r'^theme/change/(?P<theme_id>\d+).*/$', 'theme_change'),
url(r'^tag/change/(?P<tag_id>\d+).*/$', 'tag_change'), url(r'^tag/change/(?P<tag_id>\d+).*/$', 'tag_change'),
url(r'^theme/copy/(?P<theme_id>\d+).*/$', 'theme_copy'),
url(r'^tag/copy/(?P<tag_id>\d+).*/$', 'tag_copy'),
url(r'^theme/all/$', 'theme_all'), url(r'^theme/all/$', 'theme_all'),
url(r'^tag/all/$', 'tag_all'), url(r'^tag/all/$', 'tag_all'),
) )

@ -15,6 +15,7 @@ from file.forms import FileModelForm
import random import random
#custom views #custom views
from functions.custom_views import objects_list, delete_object from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def webinar_all(request): def webinar_all(request):
@ -23,6 +24,40 @@ def webinar_all(request):
""" """
return objects_list(request, Webinar, 'webinar_all.html') return objects_list(request, Webinar, 'webinar_all.html')
@login_required
def webinar_copy(request, url):
webinar = Webinar.objects.safe_get(url=url)
if not webinar:
return HttpResponseRedirect(get_referer(request))
else:
webinar.clone()
return HttpResponseRedirect(get_referer(request))
@login_required
def webinar_switch(request, url, action):
"""
turn on or off webinar
take:
url as url of webinar
action as action what to do('on' or 'off')
"""
webinar = Webinar.objects.safe_get(url=url)
if not webinar:
return HttpResponse('error')
else:
if action == 'on':
webinar.on()
return HttpResponse('on')
elif action == 'off':
webinar.off()
return HttpResponse('off')
else:
return HttpResponse('error')
@login_required @login_required
def webinar_add(request): def webinar_add(request):
@ -60,7 +95,7 @@ def webinar_add(request):
def webinar_delete(request, url): def webinar_delete(request, url):
return delete_object(request, Webinar, WebinarDeleteForm, url, '/admin/webinar/delete') return delete_object(request, Webinar, WebinarDeleteForm, url, '/admin/webinar/all')
@login_required @login_required

@ -80,6 +80,16 @@ class Webinar(TranslatableModel):
def cancel(self): def cancel(self):
self.canceled_by_administrator = True 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()
def clone(self): def clone(self):
""" """
Return an identical copy of the instance with a new ID. Return an identical copy of the instance with a new ID.

@ -5,5 +5,7 @@ urlpatterns = patterns('webinar.admin',
url(r'^add.*/$', 'webinar_add'), url(r'^add.*/$', 'webinar_add'),
url(r'^delete/(?P<url>.*)/$', 'webinar_delete'), url(r'^delete/(?P<url>.*)/$', 'webinar_delete'),
url(r'^change/(?P<url>.*)/$', 'webinar_change'), url(r'^change/(?P<url>.*)/$', 'webinar_change'),
url(r'^copy/(?P<url>.*)/$', 'webinar_copy'),
url(r'^switch/(?P<url>.*)/(?P<action>.*)$', 'webinar_switch'),
url(r'^all/$', 'webinar_all'), url(r'^all/$', 'webinar_all'),
) )
Loading…
Cancel
Save