diff --git a/poll/models.py b/poll/models.py index d7b8336..0a35b3a 100644 --- a/poll/models.py +++ b/poll/models.py @@ -14,7 +14,7 @@ class Poll(Activity): verbose_name_plural = _('Polls') def __str__(self): - return str(self.question) + str("/") + str(self.topic) + return str(self.name) + str("/") + str(self.topic) class Answer(models.Model): answer = models.CharField(_("Answer"), max_length = 200) @@ -27,4 +27,4 @@ class Answer(models.Model): verbose_name_plural = _('Answers') def __str__(self): - return str(self.question) + str("/") + str(self.topic) + return str(self.answer) + str("/") + str(self.poll) diff --git a/poll/permissions.py b/poll/permissions.py new file mode 100644 index 0000000..a124836 --- /dev/null +++ b/poll/permissions.py @@ -0,0 +1,12 @@ +from rolepermissions.permissions import register_object_checker +from amadeus.roles import SystemAdmin + +@register_object_checker() +def edit_poll(role, user, poll): + if (role == SystemAdmin): + return True + + if (user in poll.topic.subject.professors.all()): + return True + + return False diff --git a/poll/templates/poll/create_update.html b/poll/templates/poll/create_update.html new file mode 100644 index 0000000..24ecfbe --- /dev/null +++ b/poll/templates/poll/create_update.html @@ -0,0 +1,173 @@ +{% extends "topic/index.html" %} + +{% load i18n widget_tweaks dict_access static%} + +{% block style %} + +{% endblock %} + +{% block content %} + + + +modal +{% endblock content %} diff --git a/poll/templates/poll/poll.html b/poll/templates/poll/poll.html deleted file mode 100644 index c6ca07a..0000000 --- a/poll/templates/poll/poll.html +++ /dev/null @@ -1,173 +0,0 @@ -{% extends "topic/index.html" %} - -{% load i18n widget_tweaks dict_access static%} - -{% block style %} - -{% endblock %} - -{% block content %} - - - -modal -{% endblock content %} diff --git a/poll/urls.py b/poll/urls.py index 4c941f7..b33b943 100644 --- a/poll/urls.py +++ b/poll/urls.py @@ -4,5 +4,6 @@ from . import views urlpatterns = [ url(r'^create/$', views.CreatePoll.as_view(), name='create_poll'), + url(r'^update/(?P[\w\-_]+)/$', views.UpdatePoll.as_view(), name='update_poll'), ] diff --git a/poll/views.py b/poll/views.py index 6ed1d53..7ff4b12 100644 --- a/poll/views.py +++ b/poll/views.py @@ -16,14 +16,14 @@ from core.mixins import NotificationMixin from users.models import User from courses.models import Course, Topic -class CreatePoll(generic.CreateView): +class CreatePoll(LoginRequiredMixin,generic.CreateView): # login_url = reverse_lazy("core:home") # redirect_field_name = 'next' model = Poll form_class = PollForm context_object_name = 'poll' - template_name = 'poll/poll.html' + template_name = 'poll/create_update.html' # queryset = Course.objects.all() success_url = reverse_lazy('core:home') # def get_queryset(self): @@ -64,3 +64,66 @@ class CreatePoll(generic.CreateView): context['subject'] = course.subjects.all()[0] context['subjects'] = course.subjects.all() return context + +class UpdatePoll(LoginRequiredMixin,generic.UpdateView): + + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + model = Poll + form_class = PollForm + context_object_name = 'poll' + template_name = 'poll/create_update.html' + success_url = reverse_lazy('core:home') + + def dispatch(self, *args, **kwargs): + poll = get_object_or_404(Poll, slug = self.kwargs.get('slug')) + if(not has_object_permission('edit_poll', self.request.user, poll)): + return self.handle_no_permission() + return super(UpdatePoll, self).dispatch(*args, **kwargs) + + def get_object(self, queryset=None): + return get_object_or_404(Poll, slug = self.kwargs.get('slug')) + + def form_invalid(self, form,**kwargs): + context = super(UpdatePoll, self).form_invalid(form) + answers = {} + for key in self.request.POST: + if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date'): + answers[key] = self.request.POST[key] + + keys = sorted(answers) + context.context_data['answers'] = answers + context.context_data['keys'] = keys + return context + + def form_valid(self, form): + poll = self.object + poll = form.save(commit = False) + poll.answers.all().delete() + poll.save() + + + for key in self.request.POST: + if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date'): + answer = Answer(answer=self.request.POST[key],order=key,poll=poll) + answer.save() + + return super(UpdatePoll, self).form_valid(form) + + def get_context_data(self, **kwargs): + context = super(UpdatePoll, self).get_context_data(**kwargs) + poll = self.object + context['course'] = poll.topic.subject.course + context['subject'] = poll.topic.subject + context['subjects'] = poll.topic.subject.course.subjects.all() + + answers = {} + for answer in poll.answers.all(): + # print (key.answer) + answers[answer.order] = answer.answer + + keys = sorted(answers) + context['answers'] = answers + context['keys'] = keys + + return context -- libgit2 0.21.2