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. 9
      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. 4
      webinar/urls.py

@ -13,6 +13,7 @@ from file.forms import FileModelForm
#custom views
from functions.custom_views import objects_list, add_object_with_file, delete_object
from functions.views_help import get_referer
def article_all(request):
@ -21,6 +22,17 @@ def article_all(request):
"""
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):
"""
Return form of article and post it on the server.

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

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

@ -18,6 +18,7 @@ from file.forms import FileModelForm
import random
#custom views
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def conference_all(request):
@ -27,6 +28,43 @@ def conference_all(request):
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
def conference_add(request):
"""

@ -84,6 +84,17 @@ class Conference(TranslatableModel):
def __unicode__(self):
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):
self.canceled_by_administrator = True

@ -5,5 +5,7 @@ urlpatterns = patterns('conference.admin',
url(r'^add.*/$', 'conference_add'),
url(r'^delete/(?P<url>.*)$', 'conference_delete'),
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'),
)

@ -9,7 +9,7 @@ from django.db.models.loading import get_model
import json
#model and forms
from models import News
from news.forms import NewsForm
from news.forms import NewsForm, NewsDeleteForm
from exposition.models import Exposition
from conference.models import Conference
from theme.models import Tag
@ -18,7 +18,8 @@ from file.forms import FileModelForm
#python
import random
#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):
@ -27,6 +28,21 @@ def news_all(request):
"""
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
def news_add(request):

@ -133,4 +133,11 @@ class NewsForm(forms.Form):
except:
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')
class News(TranslatableModel):
#set manager of this model
objects = NewsManager
objects = NewsManager()
content_type = models.ForeignKey(ContentType, 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',
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'),
#ajax
url(r'^event/$', 'get_event_id'),

@ -18,6 +18,7 @@ from file.forms import FileModelForm
import random
#custom views
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def conference_all(request):
@ -27,6 +28,18 @@ def conference_all(request):
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
@login_required
def conference_add(request):

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

@ -19,6 +19,7 @@ from file.forms import FileModelForm
import random
#custom fields
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def exposition_all(request):
@ -27,6 +28,17 @@ def exposition_all(request):
"""
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
def exposition_add(request):

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

@ -38,7 +38,7 @@ ALLOWED_HOSTS = []
# 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 = 'America/Chicago'
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
@ -106,8 +106,6 @@ STATICFILES_DIRS = (
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/home/kotzilla/Documents/qwer/static',
)
# List of finder classes that know how to find static files in

@ -16,6 +16,7 @@ from file.forms import FileModelForm
import random
#custom views
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def seminar_all(request):
@ -24,6 +25,40 @@ def seminar_all(request):
"""
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
def seminar_add(request):

@ -80,6 +80,16 @@ class Seminar(TranslatableModel):
def __unicode__(self):
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):
self.canceled_by_administrator = True

@ -5,5 +5,7 @@ urlpatterns = patterns('seminar.admin',
url(r'^add.*/$', 'seminar_add'),
url(r'^delete/(?P<url>.*)/$', 'seminar_delete'),
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'),
)

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

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

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

@ -28,8 +28,18 @@ Displays lists of all news in the table
<td>{{ item.main_title }}</td>
<td>{{ item.type }}</td>
<td class="center sorting_1">
<a class="btn btn-info" href="/admin/news/change/{{ item.url|lower }}">
<i class="icon-edit icon-white"></i> Изменить
<a class="btn-small btn-info" href="/admin/news/change/{{ item.url|lower }}">
Изменить
</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>
</td>
</tr>

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

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

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

@ -5,13 +5,17 @@
<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 %}
{# template hall placeconference #}
{% with field='place_conf_hall' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %}
{% endwith %}
{# template hall placeexposition #}
{% with field='place_exp_hall' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %}
{% endwith %}
{% endfor %}
</form>
{% endblock %}

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

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

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

@ -12,6 +12,7 @@ from forms import ThemeForm, TagForm, ThemeDeleteForm, TagDeleteForm
from models import Theme, Tag
#custom views
from functions.custom_views import objects_list, add_object, delete_object
from functions.views_help import get_referer
def theme_all(request):
@ -34,6 +35,25 @@ def theme_delete(request, theme_id):
def tag_delete(request, tag_id):
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
def theme_change(request, theme_id=None):

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

@ -8,6 +8,8 @@ urlpatterns = patterns('theme.admin',
url(r'^tag/delete/(?P<tag_id>\d+)/$', 'tag_delete'),
url(r'^theme/change/(?P<theme_id>\d+).*/$', 'theme_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'^tag/all/$', 'tag_all'),
)

@ -15,6 +15,7 @@ from file.forms import FileModelForm
import random
#custom views
from functions.custom_views import objects_list, delete_object
from functions.views_help import get_referer
def webinar_all(request):
@ -23,6 +24,40 @@ def webinar_all(request):
"""
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
def webinar_add(request):
@ -60,7 +95,7 @@ def webinar_add(request):
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

@ -80,6 +80,16 @@ class Webinar(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()
def clone(self):
"""
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'^delete/(?P<url>.*)/$', 'webinar_delete'),
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'),
)
)
Loading…
Cancel
Save