Commit 7db9c89ca173142d08aeb4a78eeb6e82c6dd6090
1 parent
aedc5757
Exists in
master
and in
5 other branches
replicate subject
Showing
6 changed files
with
80 additions
and
6 deletions
Show diff stats
courses/templates/course/view.html
@@ -151,7 +151,7 @@ | @@ -151,7 +151,7 @@ | ||
151 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | 151 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> |
152 | </button> | 152 | </button> |
153 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | 153 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> |
154 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal3"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> | 154 | + <li><a href="{% url 'course:replicate_subject' subject.slug %}" data-toggle="modal" data-target="#myModal3"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans 'Replicate' %}</a></li> |
155 | <li><a href="javascript:delete_subject.get('{% url 'course:delete_subject' subject.slug %}','#subject','#modal_subject')" data-toggle="modal" data-target="#removeSubject"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> | 155 | <li><a href="javascript:delete_subject.get('{% url 'course:delete_subject' subject.slug %}','#subject','#modal_subject')" data-toggle="modal" data-target="#removeSubject"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans 'Remove' %}</a></li> |
156 | </ul> | 156 | </ul> |
157 | </div> | 157 | </div> |
courses/templates/subject/form_view_teacher.html
@@ -26,7 +26,7 @@ | @@ -26,7 +26,7 @@ | ||
26 | {% professor_subject topic.subject user as dropdown_topic %} | 26 | {% professor_subject topic.subject user as dropdown_topic %} |
27 | {% if dropdown_topic %} | 27 | {% if dropdown_topic %} |
28 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | 28 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> |
29 | - <li><a href="javascript:void(0)" data-toggle="modal" data-target="#myModal4"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | 29 | + <li><a href="" data-toggle="modal" data-target="#myModal4"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> |
30 | <li><a href="javascript:show_editation('{{topic.slug}}')"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | 30 | <li><a href="javascript:show_editation('{{topic.slug}}')"><i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> |
31 | <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeTopic"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | 31 | <li><a href="javascript:void(0)" data-toggle="modal" data-target="#removeTopic"><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> |
32 | </ul> | 32 | </ul> |
courses/templates/subject/index.html
@@ -61,7 +61,7 @@ | @@ -61,7 +61,7 @@ | ||
61 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> | 61 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> |
62 | </button> | 62 | </button> |
63 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> | 63 | <ul class="dropdown-menu pull-right" aria-labelledby="moreActions"> |
64 | - <li><a href="javascript:void(0)"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> | 64 | + <li><a href="{% url 'course:replicate_subject' subject.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i> {% trans "Replicate" %}</a></li> |
65 | <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> | 65 | <li><a href="{% url 'course:update_subject' subject.slug %}" <i class="fa fa-pencil fa-fw" aria-hidden="true"></i> {% trans "Edit" %}</a></li> |
66 | <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> | 66 | <li><a href="{% url 'course:delete_subject' subject.slug %}" ><i class="fa fa-trash fa-fw" aria-hidden="true"></i> {% trans "Remove" %}</a></li> |
67 | </ul> | 67 | </ul> |
@@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
1 | +{% extends 'subject/index.html' %} | ||
2 | + | ||
3 | +{% load static i18n permission_tags widget_tweaks %} | ||
4 | + | ||
5 | +{% block breadcrumbs %} | ||
6 | + <ol class="breadcrumb"> | ||
7 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
8 | + <li class="active">{% trans 'Replicate Subject' %}</li> | ||
9 | + </ol> | ||
10 | +{% endblock %} | ||
11 | + | ||
12 | +{% block content %} | ||
13 | +<div class="panel panel-default"> | ||
14 | + <div class="panel-body"> | ||
15 | + <form class="form-group " method="post" action=""> | ||
16 | + {% csrf_token %} | ||
17 | + {% for field in form %} | ||
18 | + <div class="form-group {% if field.errors %} has-error{% endif %}"> | ||
19 | + <label for="{{ field.auto_id }}" class="control-label label-static"> {{ field.label }}</label> | ||
20 | + | ||
21 | + {% if field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%} | ||
22 | + <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}"> | ||
23 | + {% else %} | ||
24 | + {% render_field field class='form-control' placeholder=field.label%} | ||
25 | + {% endif %} | ||
26 | + <span class="help-block">{{ field.help_text }}</span> | ||
27 | + </div> | ||
28 | + {% endfor %} | ||
29 | + <div class="col-lg-offset-4 col-lg-4"> | ||
30 | + <button type="submite" class="btn btn-raised btn-primary btn-lg btn-block">{% trans 'Update' %}</button> | ||
31 | + </div> | ||
32 | + </form> | ||
33 | + | ||
34 | + </div> | ||
35 | + </div> | ||
36 | + | ||
37 | + <script type="text/javascript"> | ||
38 | + var locale = navigator.language || navigator.userLanguage; | ||
39 | + | ||
40 | + $('.date-picker').datepicker({ | ||
41 | + language: locale, | ||
42 | + }); | ||
43 | + </script> | ||
44 | +{% endblock %} | ||
0 | \ No newline at end of file | 45 | \ No newline at end of file |
courses/urls.py
@@ -6,6 +6,7 @@ urlpatterns = [ | @@ -6,6 +6,7 @@ urlpatterns = [ | ||
6 | url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'), | 6 | url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'), |
7 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), | 7 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), |
8 | url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), | 8 | url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), |
9 | + url(r'^replicate_subject/(?P<slug>[\w_-]+)/$', views.ReplicateSubjectView.as_view(), name='replicate_subject'), | ||
9 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), | 10 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), |
10 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), | 11 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), |
11 | url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'), | 12 | url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'), |
courses/views.py
1 | -from django.shortcuts import render, get_object_or_404, redirect | 1 | +from django.shortcuts import get_object_or_404 |
2 | from django.views import generic | 2 | from django.views import generic |
3 | from django.contrib import messages | 3 | from django.contrib import messages |
4 | from django.contrib.auth.decorators import login_required | 4 | from django.contrib.auth.decorators import login_required |
@@ -12,7 +12,7 @@ from django.db.models import Q | @@ -12,7 +12,7 @@ from django.db.models import Q | ||
12 | import operator | 12 | import operator |
13 | from functools import reduce | 13 | from functools import reduce |
14 | from rolepermissions.verifications import has_object_permission | 14 | from rolepermissions.verifications import has_object_permission |
15 | -from django.http import HttpResponseRedirect, JsonResponse | 15 | +from django.http import JsonResponse |
16 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm | 16 | from .forms import CourseForm, UpdateCourseForm, CategoryCourseForm, SubjectForm,TopicForm,ActivityForm |
17 | from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject | 17 | from .models import Course, Subject, CourseCategory,Topic, SubjectCategory,Activity, CategorySubject |
18 | from core.decorators import log_decorator | 18 | from core.decorators import log_decorator |
@@ -265,7 +265,7 @@ class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Updat | @@ -265,7 +265,7 @@ class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, LogMixin, generic.Updat | ||
265 | if has_role(self.request.user,'system_admin'): | 265 | if has_role(self.request.user,'system_admin'): |
266 | courses = Course.objects.all() | 266 | courses = Course.objects.all() |
267 | elif has_role(self.request.user,'professor'): | 267 | elif has_role(self.request.user,'professor'): |
268 | - courses = self.request.user.courses.all() | 268 | + courses = self.request.user.courses_professors.all() |
269 | context['courses'] = courses | 269 | context['courses'] = courses |
270 | context['title'] = course.name | 270 | context['title'] = course.name |
271 | context['now'] = date.today() | 271 | context['now'] = date.today() |
@@ -577,6 +577,35 @@ class SubjectsView(LoginRequiredMixin, LogMixin, generic.ListView): | @@ -577,6 +577,35 @@ class SubjectsView(LoginRequiredMixin, LogMixin, generic.ListView): | ||
577 | context['files'] = TopicFile.objects.filter(students__name = self.request.user.name) | 577 | context['files'] = TopicFile.objects.filter(students__name = self.request.user.name) |
578 | return context | 578 | return context |
579 | 579 | ||
580 | +class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): | ||
581 | + | ||
582 | + allowed_roles = ['professor', 'system_admin'] | ||
583 | + login_url = reverse_lazy("core:home") | ||
584 | + redirect_field_name = 'next' | ||
585 | + template_name = 'subject/replicate.html' | ||
586 | + form_class = SubjectForm | ||
587 | + success_url = reverse_lazy('course:view') | ||
588 | + | ||
589 | + def get_context_data(self, **kwargs): | ||
590 | + context = super(ReplicateSubjectView, self).get_context_data(**kwargs) | ||
591 | + subject = get_object_or_404(Subject, slug=self.kwargs.get('slug')) | ||
592 | + | ||
593 | + if has_role(self.request.user,'system_admin'): | ||
594 | + subjects = Subject.objects.all() | ||
595 | + context['subjects'] = subjects | ||
596 | + elif has_role(self.request.user,'professor'): | ||
597 | + subject = self.request.user.professors_subjects.all() | ||
598 | + categorys_subjects = CategorySubject.objects.all() | ||
599 | + | ||
600 | + context['subject'] = subject | ||
601 | + context['categorys_subjects'] = categorys_subjects | ||
602 | + context['title'] = _("Replicate Subject") | ||
603 | + context['now'] = date.today() | ||
604 | + return context | ||
605 | + | ||
606 | + def get_success_url(self): | ||
607 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | ||
608 | + | ||
580 | class UploadMaterialView(LoginRequiredMixin, generic.edit.CreateView): | 609 | class UploadMaterialView(LoginRequiredMixin, generic.edit.CreateView): |
581 | login_url = reverse_lazy("core:home") | 610 | login_url = reverse_lazy("core:home") |
582 | redirect_field_name = 'next' | 611 | redirect_field_name = 'next' |