diff --git a/courses/migrations/0008_auto_20160908_1332.py b/courses/migrations/0008_auto_20160908_1332.py new file mode 100644 index 0000000..fec1b85 --- /dev/null +++ b/courses/migrations/0008_auto_20160908_1332.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-09-08 16:32 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('courses', '0007_topic'), + ] + + operations = [ + migrations.AddField( + model_name='subject', + name='professors', + field=models.ManyToManyField(related_name='subjects', to=settings.AUTH_USER_MODEL, verbose_name='Professors'), + ), + migrations.AddField( + model_name='topic', + name='owner', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='topics', to=settings.AUTH_USER_MODEL, verbose_name='Owner'), + ), + ] diff --git a/courses/models.py b/courses/models.py index e8d662f..4919737 100644 --- a/courses/models.py +++ b/courses/models.py @@ -49,10 +49,11 @@ class Subject(models.Model): create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) update_date = models.DateTimeField(_('Date of last update'), auto_now=True) course = models.ForeignKey(Course, verbose_name = _('Course'), related_name="subjects") + professors = models.ManyToManyField(User,verbose_name=_('Professors'), related_name='subjects') class Meta: - + ordering = ('create_date',) verbose_name = _('Subject') verbose_name_plural = _('Subjects') @@ -67,10 +68,10 @@ class Topic(models.Model): create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) update_date = models.DateTimeField(_('Date of last update'), auto_now=True) subject = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name="topics") - + owner = models.ForeignKey(User, verbose_name = _('Owner'), related_name="topics",default=1) class Meta: - + ordering = ('create_date',) verbose_name = _('Topic') verbose_name_plural = _('Topics') diff --git a/courses/templates/subject/form_view_teacher.html b/courses/templates/subject/form_view_teacher.html index e8fcdd9..fcb6f57 100644 --- a/courses/templates/subject/form_view_teacher.html +++ b/courses/templates/subject/form_view_teacher.html @@ -7,7 +7,7 @@

{{topic}}

- {% trans "edit" %} + {% trans "edit" %}
diff --git a/courses/templates/subject/index.html b/courses/templates/subject/index.html index 289862f..a39a3ef 100644 --- a/courses/templates/subject/index.html +++ b/courses/templates/subject/index.html @@ -40,7 +40,7 @@ {% for topic in topics %} - {% if user|has_role:'professor' or user|has_role:'system_admin'%} + {% if user|has_role:'system_admin' or topic.owner == user%} {% include "subject/form_view_teacher.html" %} {% else %} {% include "subject/form_view_student.html" %} diff --git a/courses/templates/topic/update.html b/courses/templates/topic/update.html new file mode 100644 index 0000000..039ff36 --- /dev/null +++ b/courses/templates/topic/update.html @@ -0,0 +1,26 @@ +{% extends 'subject/index.html' %} + +{% load static i18n permission_tags widget_tweaks %} + +{% block content %} + +
+
+
+ {% csrf_token %} + {% for field in form %} +
+ + + {% render_field field class='form-control' placeholder=field.label%} +
+ {% endfor %} +
+ + +
+
+
+
+ +{% endblock content %} diff --git a/courses/urls.py b/courses/urls.py index eb23d56..95f0176 100644 --- a/courses/urls.py +++ b/courses/urls.py @@ -16,6 +16,7 @@ urlpatterns = [ url(r'^categories/delete/(?P[\w_-]+)/$', views.DeleteCatView.as_view(), name='delete_cat'), url(r'^course/(?P[\w_-]+)/subjects/$', views.SubjectsView.as_view(), name='view_subject'), url(r'^course/(?P[\w_-]+)/topics/create/$', views.CreateTopicView.as_view(), name='create_topic'), + url(r'^course/(?P[\w_-]+)/topics/update/$', views.UpdateTopicView.as_view(), name='update_topic'), # url(r'^course/(?P[\w_-]+)/modules/create/$', views.CreateModView.as_view(), name='create_mods'), # url(r'^course/(?P[\w_-]+)/modules/edit/(?P[\w_-]+)/$', views.UpdateModView.as_view(), name='update_mods'), # url(r'^course/(?P[\w_-]+)/modules/delete/(?P[\w_-]+)/$', views.DeleteModView.as_view(), name='delete_mods'), diff --git a/courses/views.py b/courses/views.py index 86e37d7..c181c39 100644 --- a/courses/views.py +++ b/courses/views.py @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from slugify import slugify from .forms import CourseForm, CategoryForm, SubjectForm,TopicForm -from .models import Course, Subject, Category +from .models import Course, Subject, Category,Topic class IndexView(LoginRequiredMixin, generic.ListView): @@ -228,14 +228,11 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView) return context def form_valid(self, form): - print ("aqui") subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) - print ("aqui") self.object = form.save(commit = False) self.object.subject = subject - print ("aqui") - print (self.object) + self.object.owner = self.request.user self.object.save() return super(CreateTopicView, self).form_valid(form) @@ -244,38 +241,43 @@ class CreateTopicView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView) messages.success(self.request, _('Module created successfully!')) return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) -# -# class UpdateModView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): -# -# allowed_roles = ['professor', 'system_admin'] -# login_url = reverse_lazy("core:home") -# redirect_field_name = 'next' -# template_name = 'module/update.html' -# model = Module -# form_class = ModuleForm -# -# def get_success_url(self): -# return reverse_lazy('course:manage_mods', kwargs={'slug' : self.object.course.slug}) -# -# def get_context_data(self, **kwargs): -# course = get_object_or_404(Course, slug = self.kwargs.get('slug_course')) -# context = super(UpdateModView, self).get_context_data(**kwargs) -# context['course'] = course -# -# return context -# -# def form_valid(self, form): -# self.object = form.save(commit = False) -# self.object.slug = slugify(self.object.name) -# self.object.save() -# -# return super(UpdateModView, self).form_valid(form) -# -# def render_to_response(self, context, **response_kwargs): -# messages.success(self.request, _('Module edited successfully!')) -# -# return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) -# + +class UpdateTopicView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): + + allowed_roles = ['professor', 'system_admin','student'] + login_url = reverse_lazy("core:home") + redirect_field_name = 'next' + template_name = 'topic/update.html' + # model = Topic + form_class = TopicForm + + def get_object(self, queryset=None): + return get_object_or_404(Topic, slug = self.kwargs.get('slug')) + + def get_success_url(self): + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.subject.slug}) + + def get_context_data(self, **kwargs): + context = super(UpdateTopicView, self).get_context_data(**kwargs) + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) + context['course'] = topic.subject.course + context['subject'] = topic.subject + context['subjects'] = topic.subject.course.subjects.filter(visible=True) + + return context + + # def form_valid(self, form): + # self.object = form.save(commit = False) + # self.object.slug = slugify(self.object.name) + # self.object.save() + # + # return super(UpdateModView, self).form_valid(form) + + # def render_to_response(self, context, **response_kwargs): + # messages.success(self.request, _('Module edited successfully!')) + # + # return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) + # class DeleteModView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): # # allowed_roles = ['professor', 'system_admin'] -- libgit2 0.21.2