From b69f93287f6a25106fec97d3d6ef543221bb454c Mon Sep 17 00:00:00 2001 From: Jailson Dias Date: Mon, 13 Mar 2017 23:24:46 -0300 Subject: [PATCH] Criando front end da web conferencia --- amadeus/urls.py | 2 ++ webconference/forms.py | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webconference/models.py | 30 +++++++++++++++++++++++++++++- webconference/templates/webconference/_form.html | 388 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webconference/templates/webconference/create.html | 34 ++++++++++++++++++++++++++++++++++ webconference/templates/webconference/update.html | 36 ++++++++++++++++++++++++++++++++++++ webconference/templates/webconference/view.html | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ webconference/templates/webconference/window_view.html | 1 + webconference/urls.py | 12 ++++++++++++ webconference/views.py | 416 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 10 files changed, 1071 insertions(+), 3 deletions(-) create mode 100644 webconference/forms.py create mode 100644 webconference/templates/webconference/_form.html create mode 100644 webconference/templates/webconference/create.html create mode 100644 webconference/templates/webconference/update.html create mode 100644 webconference/templates/webconference/view.html create mode 100644 webconference/templates/webconference/window_view.html create mode 100644 webconference/urls.py diff --git a/amadeus/urls.py b/amadeus/urls.py index 028b9b3..f6a619b 100644 --- a/amadeus/urls.py +++ b/amadeus/urls.py @@ -49,6 +49,8 @@ urlpatterns = [ url(r'^s3direct/', include('s3direct.urls')), url(r'^summernote/', include('django_summernote.urls')), url(r'session_security/', include('session_security.urls')), + url(r'^webconferences/', include('webconference.urls', namespace = 'webconferences')), + ] if settings.DEBUG: diff --git a/webconference/forms.py b/webconference/forms.py new file mode 100644 index 0000000..6a80c1a --- /dev/null +++ b/webconference/forms.py @@ -0,0 +1,97 @@ +# coding=utf-8 +from django import forms +from django.utils.translation import ugettext_lazy as _ +from django.utils.html import strip_tags + +from subjects.models import Tag + +from .models import Webconference + +class WebconferenceForm(forms.ModelForm): + subject = None + + def __init__(self, *args, **kwargs): + super(WebconferenceForm, self).__init__(*args, **kwargs) + + self.subject = kwargs['initial'].get('subject', None) + + if self.instance.id: + self.subject = self.instance.topic.subject + self.initial['tags'] = ", ".join(self.instance.tags.all().values_list("name", flat = True)) + + self.fields['students'].queryset = self.subject.students.all() + self.fields['groups'].queryset = self.subject.group_subject.all() + + tags = forms.CharField(label = _('Tags'), required = False) + + class Meta: + model = Webconference + fields = ['name', 'presentation', 'start', 'end', 'brief_description', 'all_students', 'students', 'groups', 'show_window', 'visible'] + labels = { + 'name': _('Web Conference Title'), + 'presentation': _('Presentation'), + } + widgets = { + 'presentation': forms.Textarea, + 'brief_description': forms.Textarea, + 'students': forms.SelectMultiple, + 'groups': forms.SelectMultiple, + } + + def clean_name(self): + name = self.cleaned_data.get('name', '') + + topics = self.subject.topic_subject.all() + + for topic in topics: + if self.instance.id: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).exclude(id = self.instance.id).count() + else: + same_name = topic.resource_topic.filter(name__unaccent__iexact = name).count() + + if same_name > 0: + self._errors['name'] = [_('This subject already has a webpage with this name')] + + return ValueError + + return name + + # def clean_content(self): + # content = self.cleaned_data.get('content', '') + # cleaned_content = strip_tags(content) + # + # if cleaned_content == '': + # self._errors['content'] = [_('This field is required.')] + # + # return ValueError + # + # return content + + def save(self, commit = True): + super(WebpageForm, self).save(commit = True) + + self.instance.save() + + previous_tags = self.instance.tags.all() + + tags = self.cleaned_data['tags'].split(",") + + #Excluding unwanted tags + for prev in previous_tags: + if not prev.name in tags: + self.instance.tags.remove(prev) + + for tag in tags: + tag = tag.strip() + + exist = Tag.objects.filter(name = tag).exists() + + if exist: + new_tag = Tag.objects.get(name = tag) + else: + new_tag = Tag.objects.create(name = tag) + + if not new_tag in self.instance.tags.all(): + self.instance.tags.add(new_tag) + + return self.instance diff --git a/webconference/models.py b/webconference/models.py index 71a8362..a776281 100644 --- a/webconference/models.py +++ b/webconference/models.py @@ -1,3 +1,31 @@ from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse_lazy -# Create your models here. +from topics.models import Resource + +class Webconference(Resource): + presentation = models.TextField(_('Presentation'), blank = True) + start = models.DateTimeField(_('Start date/hour')) + end = models.DateTimeField(_('End date/hour')) + + class Meta: + verbose_name = _('Web Conference') + verbose_name_plural = _('Web Conferences') + + def __str__(self): + return self.name + + # def access_link(self): + # if self.show_window: + # return reverse_lazy('webpages:window_view', args = (), kwargs = {'slug': self.slug}) + # + # return reverse_lazy('webpages:view', args = (), kwargs = {'slug': self.slug}) + def update_link(self): + return 'webconferences:update' + + def delete_link(self): + return 'webconferences:delete' + + def delete_message(self): + return _('Are you sure you want delete the webpage') diff --git a/webconference/templates/webconference/_form.html b/webconference/templates/webconference/_form.html new file mode 100644 index 0000000..d9908c9 --- /dev/null +++ b/webconference/templates/webconference/_form.html @@ -0,0 +1,388 @@ +{% load static i18n %} +{% load widget_tweaks %} + +
+ {% csrf_token %} + + {% render_field form.control_subject %} + +
+ + {% render_field form.name class='form-control' %} + + {{ form.name.help_text }} + + {% if form.name.errors %} + + {% endif %} +
+ +
+ + {% render_field form.presentation class='form-control text_wysiwyg' %} + + {{ form.presentation.help_text }} + + {% if form.presentation.errors %} + + {% endif %} +
+ + +
+ + {% render_field form.start class='form-control datetime-picker' %} + + {{ form.start.help_text }} + + {% if form.start.errors %} + + {% endif %} +
+ +
+ + {% render_field form.end class='form-control datetime-picker' %} + + {{ form.end.help_text }} + + {% if form.end.errors %} + + {% endif %} +
+ + {% trans 'Common resources settings' %} + +
+ + {% render_field form.brief_description class='form-control text_wysiwyg' %} + + {{ form.brief_description.help_text }} + + {% if form.brief_description.errors %} + + {% endif %} +
+ +
+ + {% render_field form.tags class='form-control' data-role="tagsinput" %} + + {{ form.tags.help_text }} + + {% if form.tags.errors %} + + {% endif %} +
+ +
+
+ +
+ +
+
+ {% render_field pendencies_form.id %} + {% render_field pendencies_form.resource %} + {% render_field pendencies_form.subject class='pend_subj' %} + +
+ +
+ {% render_field pendencies_form.action class='form-control' %} +
+ +
+ + {{ pendencies_form.action.help_text }} + + {% if pendencies_form.action.errors %} + + {% endif %} +
+
+
+
+

{% trans 'Wished period' %}:

+
+
+
+
+ +
+
+ {% render_field pendencies_form.begin_date class='form-control datetime-picker begin_date_input' %} +
+
+
+ {{ pendencies_form.begin_date.help_text }} + + {% if pendencies_form.begin_date.errors %} + + {% endif %} +
+
+
+ +
+
+ {% render_field pendencies_form.end_date class='form-control datetime-picker end_date_input' %} +
+
+
+ {{ pendencies_form.end_date.help_text }} + + {% if pendencies_form.end_date.errors %} + + {% endif %} +
+
+
+
+
+ +
+ +
+
+
+ +
+ + {{ form.all_students.help_text }} + + {% if form.all_students.errors %} + + {% endif %} +
+ +

{% trans 'Attribute students to web conference' %}:

+ {% render_field form.students class='form-control' %} + + {{ form.students.help_text }} + + {% if form.students.errors %} + + {% endif %} + +
+ +

{% trans 'Attribute groups to web conference' %}:

+ {% render_field form.groups class='form-control' %} + + {{ form.groups.help_text }} + + {% if form.groups.errors %} + + {% endif %} +
+
+
+ +
+
+ +
+ + {{ form.show_window.help_text }} + + {% if form.show_window.errors %} + + {% endif %} +
+ +
+
+ +
+ + {{ form.visible.help_text }} + + {% if form.visible.errors %} + + {% endif %} +
+ +
+
+ +
+
+
+ + diff --git a/webconference/templates/webconference/create.html b/webconference/templates/webconference/create.html new file mode 100644 index 0000000..e0ae9df --- /dev/null +++ b/webconference/templates/webconference/create.html @@ -0,0 +1,34 @@ +{% extends 'subjects/view.html' %} + +{% load static i18n django_bootstrap_breadcrumbs %} + +{% block style %} + {{block.super}} + +{% endblock %} + +{% block javascript %} + {{block.super}} + +{% endblock %} + +{% block breadcrumbs %} + {{ block.super }} + + {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} + + {% trans 'Create Web Conference' as bread %} + {% breadcrumb bread 'webconferences:create' topic.slug %} +{% endblock %} + +{% block content %} +
+
+
+ {% include 'webconference/_form.html' %} +
+
+
+
+
+{% endblock %} diff --git a/webconference/templates/webconference/update.html b/webconference/templates/webconference/update.html new file mode 100644 index 0000000..7610dc4 --- /dev/null +++ b/webconference/templates/webconference/update.html @@ -0,0 +1,36 @@ +{% extends 'subjects/view.html' %} + +{% load static i18n django_bootstrap_breadcrumbs %} + +{% block style %} + {{block.super}} + +{% endblock %} + +{% block javascript %} + {{block.super}} + +{% endblock %} + +{% block breadcrumbs %} + {{ block.super }} + + {% breadcrumb topic 'subjects:topic_view' topic.subject.slug topic.slug %} + + {% trans 'Edit: ' as bread %} + {% with bread|add:webconference.name as bread_slug %} + {% breadcrumb bread_slug 'webconfrences:update' topic.slug webconference.slug %} + {% endwith %} +{% endblock %} + +{% block content %} +
+
+
+ {% include 'webconference/_form.html' %} +
+
+
+
+
+{% endblock %} diff --git a/webconference/templates/webconference/view.html b/webconference/templates/webconference/view.html new file mode 100644 index 0000000..fec5e02 --- /dev/null +++ b/webconference/templates/webconference/view.html @@ -0,0 +1,58 @@ +{% extends 'subjects/view.html' %} + +{% load static i18n pagination permissions_tags subject_counter %} +{% load django_bootstrap_breadcrumbs %} + +{% block javascript%} + {{ block.super }} +{% endblock%} + +{% block breadcrumbs %} + {{ block.super }} + {% breadcrumb topic 'subjects:topic_view' subject.slug topic.slug %} + {% breadcrumb web conference 'webconferences:view' webconference.slug %} +{% endblock %} + +{% block content %} + {% if messages %} + {% for message in messages %} + + {% endfor %} + {% endif %} + + {% resource_permissions request.user webconference as has_resource_permissions %} + + {% if webconference.visible %} +
+
+ {% elif has_resource_permissions %} +
+
+ {% endif %} + +
+
+ {% autoescape off %} + {{ webconference.content }} + {% endautoescape %} +
+
+{% endblock %} diff --git a/webconference/templates/webconference/window_view.html b/webconference/templates/webconference/window_view.html new file mode 100644 index 0000000..74be59c --- /dev/null +++ b/webconference/templates/webconference/window_view.html @@ -0,0 +1 @@ +{{ webconference.content|safe }} diff --git a/webconference/urls.py b/webconference/urls.py new file mode 100644 index 0000000..b93055e --- /dev/null +++ b/webconference/urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import url +from django.contrib.auth import views as auth_views + +from . import views + +urlpatterns = [ + url(r'^create/(?P[\w_-]+)/$', views.CreateView.as_view(), name = 'create'), + url(r'^update/(?P[\w_-]+)/(?P[\w_-]+)/$', views.UpdateView.as_view(), name = 'update'), + url(r'^delete/(?P[\w_-]+)/$', views.DeleteView.as_view(), name = 'delete'), + url(r'^window_view/(?P[\w_-]+)/$', views.NewWindowView.as_view(), name = 'window_view'), + url(r'^view/(?P[\w_-]+)/$', views.InsideView.as_view(), name = 'view'), +] diff --git a/webconference/views.py b/webconference/views.py index 91ea44a..446c11e 100644 --- a/webconference/views.py +++ b/webconference/views.py @@ -1,3 +1,415 @@ -from django.shortcuts import render +from django.shortcuts import get_object_or_404, redirect, render +from django.views import generic +from django.contrib import messages +from django.core.urlresolvers import reverse, reverse_lazy +from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.mixins import LoginRequiredMixin -# Create your views here. +from amadeus.permissions import has_subject_permissions, has_resource_permissions + +import time +from log.models import Log +from log.mixins import LogMixin + +from topics.models import Topic + +from pendencies.forms import PendenciesForm + +from .forms import WebconferenceForm +from .models import Webconference + +class NewWindowView(LoginRequiredMixin, + # '''LogMixin,''' + generic.DetailView): + # log_component = 'resources' + # log_action = 'view' + # log_resource = 'webpage' + # log_context = {} + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'webconference/window_view.html' + model = Webconference + context_object_name = 'webconference' + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + webconference = get_object_or_404(Webconference, slug = slug) + + if not has_resource_permissions(request.user, webconference): + return redirect(reverse_lazy('subjects:home')) + + return super(NewWindowView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(NewWindowView, self).get_context_data(**kwargs) + + # self.log_context['category_id'] = self.object.topic.subject.category.id + # self.log_context['category_name'] = self.object.topic.subject.category.name + # self.log_context['category_slug'] = self.object.topic.subject.category.slug + # self.log_context['subject_id'] = self.object.topic.subject.id + # self.log_context['subject_name'] = self.object.topic.subject.name + # self.log_context['subject_slug'] = self.object.topic.subject.slug + # self.log_context['topic_id'] = self.object.topic.id + # self.log_context['topic_name'] = self.object.topic.name + # self.log_context['topic_slug'] = self.object.topic.slug + # self.log_context['webpage_id'] = self.object.id + # self.log_context['webpage_name'] = self.object.name + # self.log_context['webpage_slug'] = self.object.slug + # self.log_context['timestamp_start'] = str(int(time.time())) + + # super(NewWindowView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + # + # self.request.session['log_id'] = Log.objects.latest('id').id + + return context + +class InsideView(LoginRequiredMixin, +# '''LogMixin,''' +generic.DetailView): + # log_component = 'resources' + # log_action = 'view' + # log_resource = 'webpage' + # log_context = {} + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'webconference/view.html' + model = Webconference + context_object_name = 'webconference' + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + webconference = get_object_or_404(Webconference, slug = slug) + + if not has_resource_permissions(request.user, webconference): + return redirect(reverse_lazy('subjects:home')) + + return super(InsideView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(InsideView, self).get_context_data(**kwargs) + + context['title'] = self.object.name + + context['topic'] = self.object.topic + context['subject'] = self.object.topic.subject + + # self.log_context['category_id'] = self.object.topic.subject.category.id + # self.log_context['category_name'] = self.object.topic.subject.category.name + # self.log_context['category_slug'] = self.object.topic.subject.category.slug + # self.log_context['subject_id'] = self.object.topic.subject.id + # self.log_context['subject_name'] = self.object.topic.subject.name + # self.log_context['subject_slug'] = self.object.topic.subject.slug + # self.log_context['topic_id'] = self.object.topic.id + # self.log_context['topic_name'] = self.object.topic.name + # self.log_context['topic_slug'] = self.object.topic.slug + # self.log_context['webpage_id'] = self.object.id + # self.log_context['webpage_name'] = self.object.name + # self.log_context['webpage_slug'] = self.object.slug + # self.log_context['timestamp_start'] = str(int(time.time())) + # + # super(InsideView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + # + # self.request.session['log_id'] = Log.objects.latest('id').id + + return context + +class CreateView(LoginRequiredMixin, + # '''LogMixin,''' + generic.edit.CreateView): + # log_component = 'resources' + # log_action = 'create' + # log_resource = 'webpage' + # log_context = {} + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'webconference/create.html' + form_class = WebconferenceForm + + 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(CreateView, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def post(self, request, *args, **kwargs): + self.object = None + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + if (form.is_valid() and pendencies_form.is_valid()): + return self.form_valid(form, pendencies_form) + else: + return self.form_invalid(form, pendencies_form) + + def get_initial(self): + initial = super(CreateView, self).get_initial() + + slug = self.kwargs.get('slug', '') + + topic = get_object_or_404(Topic, slug = slug) + initial['subject'] = topic.subject + + return initial + + def form_invalid(self, form, pendencies_form): + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def form_valid(self, form, pendencies_form): + self.object = form.save(commit = False) + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + self.object.topic = topic + self.object.order = topic.resource_topic.count() + 1 + + if not self.object.topic.visible and not self.object.topic.repository: + self.object.visible = False + + self.object.save() + + pend_form = pendencies_form.save(commit = False) + pend_form.resource = self.object + + if not pend_form.action == "": + pend_form.save() + + # self.log_context['category_id'] = self.object.topic.subject.category.id + # self.log_context['category_name'] = self.object.topic.subject.category.name + # self.log_context['category_slug'] = self.object.topic.subject.category.slug + # self.log_context['subject_id'] = self.object.topic.subject.id + # self.log_context['subject_name'] = self.object.topic.subject.name + # self.log_context['subject_slug'] = self.object.topic.subject.slug + # self.log_context['topic_id'] = self.object.topic.id + # self.log_context['topic_name'] = self.object.topic.name + # self.log_context['topic_slug'] = self.object.topic.slug + # self.log_context['webpage_id'] = self.object.id + # self.log_context['webpage_name'] = self.object.name + # self.log_context['webpage_slug'] = self.object.slug + # + # super(CreateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + return redirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super(CreateView, self).get_context_data(**kwargs) + + context['title'] = _('Create Web Conference') + + slug = self.kwargs.get('slug', '') + topic = get_object_or_404(Topic, slug = slug) + + context['topic'] = topic + context['subject'] = topic.subject + + return context + + def get_success_url(self): + messages.success(self.request, _('The Web conference "%s" was added to the Topic "%s" of the virtual environment "%s" successfully!')%(self.object.name, self.object.topic.name, self.object.topic.subject.name)) + + success_url = reverse_lazy('webconference:view', kwargs = {'slug': self.object.slug}) + + if self.object.show_window: + self.request.session['resources'] = {} + self.request.session['resources']['new_page'] = True + self.request.session['resources']['new_page_url'] = reverse('webconference:window_view', kwargs = {'slug': self.object.slug}) + + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) + + return success_url + +class UpdateView(LoginRequiredMixin, +# ''' LogMixin,''' +generic.UpdateView): + # log_component = 'resources' + # log_action = 'update' + # log_resource = 'webpage' + # log_context = {} + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'webconference/update.html' + model = Webconference + form_class = WebconferenceForm + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('topic_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(UpdateView, self).dispatch(request, *args, **kwargs) + + def get(self, request, *args, **kwargs): + self.object = self.get_object() + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pend_form = self.object.pendencies_resource.all() + + if len(pend_form) > 0: + pendencies_form = PendenciesForm(instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + else: + pendencies_form = PendenciesForm(initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def post(self, request, *args, **kwargs): + self.object = self.get_object() + + form_class = self.get_form_class() + form = self.get_form(form_class) + + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) + + pend_form = self.object.pendencies_resource.all() + + if len(pend_form) > 0: + pendencies_form = PendenciesForm(self.request.POST, instance = pend_form[0], initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + else: + pendencies_form = PendenciesForm(self.request.POST, initial = {'subject': topic.subject.id, 'actions': [("", "-------"),("view", _("Visualize"))]}) + + if (form.is_valid() and pendencies_form.is_valid()): + return self.form_valid(form, pendencies_form) + else: + return self.form_invalid(form, pendencies_form) + + def form_invalid(self, form, pendencies_form): + return self.render_to_response(self.get_context_data(form = form, pendencies_form = pendencies_form)) + + def form_valid(self, form, pendencies_form): + self.object = form.save(commit = False) + + if not self.object.topic.visible and not self.object.topic.repository: + self.object.visible = False + + self.object.save() + + pend_form = pendencies_form.save(commit = False) + pend_form.resource = self.object + + if not pend_form.action == "": + pend_form.save() + + # self.log_context['category_id'] = self.object.topic.subject.category.id + # self.log_context['category_name'] = self.object.topic.subject.category.name + # self.log_context['category_slug'] = self.object.topic.subject.category.slug + # self.log_context['subject_id'] = self.object.topic.subject.id + # self.log_context['subject_name'] = self.object.topic.subject.name + # self.log_context['subject_slug'] = self.object.topic.subject.slug + # self.log_context['topic_id'] = self.object.topic.id + # self.log_context['topic_name'] = self.object.topic.name + # self.log_context['topic_slug'] = self.object.topic.slug + # self.log_context['webpage_id'] = self.object.id + # self.log_context['webpage_name'] = self.object.name + # self.log_context['webpage_slug'] = self.object.slug + # + # super(UpdateView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + return redirect(self.get_success_url()) + + def get_context_data(self, **kwargs): + context = super(UpdateView, self).get_context_data(**kwargs) + + context['title'] = _('Update Web Conference') + + slug = self.kwargs.get('topic_slug', '') + topic = get_object_or_404(Topic, slug = slug) + + context['topic'] = topic + context['subject'] = topic.subject + + return context + + def get_success_url(self): + messages.success(self.request, _('The Web conference "%s" was updated successfully!')%(self.object.name)) + + success_url = reverse_lazy('webconference:view', kwargs = {'slug': self.object.slug}) + + if self.object.show_window: + self.request.session['resources'] = {} + self.request.session['resources']['new_page'] = True + self.request.session['resources']['new_page_url'] = reverse('webconference:window_view', kwargs = {'slug': self.object.slug}) + + success_url = reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) + + return success_url + +class DeleteView(LoginRequiredMixin, +# ''' LogMixin,''' +generic.DeleteView): + # log_component = 'resources' + # log_action = 'delete' + # log_resource = 'webpage' + # log_context = {} + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'resources/delete.html' + model = Webconference + context_object_name = 'resource' + + def dispatch(self, request, *args, **kwargs): + slug = self.kwargs.get('slug', '') + webconference = get_object_or_404(Webconference, slug = slug) + + if not has_subject_permissions(request.user, webconference.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, _('The web conference "%s" was removed successfully from virtual environment "%s"!')%(self.object.name, self.object.topic.subject.name)) + + # self.log_context['category_id'] = self.object.topic.subject.category.id + # self.log_context['category_name'] = self.object.topic.subject.category.name + # self.log_context['category_slug'] = self.object.topic.subject.category.slug + # self.log_context['subject_id'] = self.object.topic.subject.id + # self.log_context['subject_name'] = self.object.topic.subject.name + # self.log_context['subject_slug'] = self.object.topic.subject.slug + # self.log_context['topic_id'] = self.object.topic.id + # self.log_context['topic_name'] = self.object.topic.name + # self.log_context['topic_slug'] = self.object.topic.slug + # self.log_context['webpage_id'] = self.object.id + # self.log_context['webpage_name'] = self.object.name + # self.log_context['webpage_slug'] = self.object.slug + # + # super(DeleteView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) + + return reverse_lazy('subjects:view', kwargs = {'slug': self.object.topic.subject.slug}) -- libgit2 0.21.2