views.py
4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
from django.shortcuts import get_object_or_404, redirect, render
from django.views import generic
from django.contrib import messages
from django.http import JsonResponse
from django.core.urlresolvers import reverse, reverse_lazy
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.mixins import LoginRequiredMixin
import json
from amadeus.permissions import has_subject_permissions
from subjects.models import Subject
from .models import Topic
from .forms import TopicForm
class CreateView(LoginRequiredMixin, generic.edit.CreateView):
login_url = reverse_lazy("users:login")
redirect_field_name = 'next'
template_name = 'topics/create.html'
form_class = TopicForm
def dispatch(self, request, *args, **kwargs):
slug = self.kwargs.get('slug', '')
subject = get_object_or_404(Subject, slug = slug)
if not has_subject_permissions(request.user, subject):
return redirect(reverse_lazy('subjects:home'))
return super(CreateView, self).dispatch(request, *args, **kwargs)
def get_initial(self):
initial = super(CreateView, self).get_initial()
slug = self.kwargs.get('slug', '')
initial['subject'] = get_object_or_404(Subject, slug = slug)
return initial
def form_valid(self, form):
self.object = form.save(commit = False)
slug = self.kwargs.get('slug', '')
subject = get_object_or_404(Subject, slug = slug)
self.object.subject = subject
self.object.order = subject.topic_subject.count() + 1
self.object.save()
return super(CreateView, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(CreateView, self).get_context_data(**kwargs)
context['title'] = _('Create Topic')
slug = self.kwargs.get('slug', '')
subject = get_object_or_404(Subject, slug = slug)
context['subject'] = subject
return context
def get_success_url(self):
messages.success(self.request, _('Topic "%s" was created on virtual enviroment "%s" successfully!')%(self.object.name, self.object.subject.name))
return reverse_lazy('subjects:view', kwargs = {'slug': self.object.subject.slug})
class UpdateView(LoginRequiredMixin, generic.UpdateView):
login_url = reverse_lazy("users:login")
redirect_field_name = 'next'
template_name = 'topics/update.html'
form_class = TopicForm
model = Topic
context_object_name = 'topic'
def dispatch(self, request, *args, **kwargs):
slug = self.kwargs.get('sub_slug', '')
subject = get_object_or_404(Subject, slug = slug)
if not has_subject_permissions(request.user, subject):
return redirect(reverse_lazy('subjects:home'))
return super(UpdateView, self).dispatch(request, *args, **kwargs)
def get_initial(self):
initial = super(UpdateView, self).get_initial()
slug = self.kwargs.get('sub_slug', '')
initial['subject'] = get_object_or_404(Subject, slug = slug)
return initial
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(**kwargs)
context['title'] = _('Update Topic')
slug = self.kwargs.get('sub_slug', '')
subject = get_object_or_404(Subject, slug = slug)
context['subject'] = subject
return context
def get_success_url(self):
messages.success(self.request, _('Topic "%s" was updated on virtual enviroment "%s" successfully!')%(self.object.name, self.object.subject.name))
return reverse_lazy('subjects:view', kwargs = {'slug': self.object.subject.slug})
class DeleteView(LoginRequiredMixin, generic.DeleteView):
login_url = reverse_lazy("users:login")
redirect_field_name = 'next'
template_name = 'topics/delete.html'
model = Topic
context_object_name = 'topic'
def dispatch(self, request, *args, **kwargs):
slug = self.kwargs.get('slug', '')
topic = get_object_or_404(Topic, slug = slug)
if not has_subject_permissions(request.user, topic.subject):
return redirect(reverse_lazy('subjects:home'))
return super(DeleteView, self).dispatch(request, *args, **kwargs)
def get_success_url(self):
messages.success(self.request, _('Topic "%s" was removed from virtual enviroment "%s" successfully!')%(self.object.name, self.object.subject.name))
return reverse_lazy('subjects:view', kwargs = {'slug': self.object.subject.slug})
def update_order(request):
data = request.GET.get('data', None)
if not data is None:
data = json.loads(data)
for t_data in data:
topic = get_object_or_404(Topic, id = t_data['topic_id'])
topic.order = t_data['topic_order']
topic.save()
return JsonResponse({'message': 'ok'})
return JsonResponse({'message': 'No data received'})