Commit 54c3e1be7a6039e9092b23825209815468719910
1 parent
e71c793f
Exists in
master
and in
5 other branches
[Issue #361]
Showing
3 changed files
with
79 additions
and
70 deletions
Show diff stats
courses/templates/subject/replicate.html
| ... | ... | @@ -2,61 +2,51 @@ |
| 2 | 2 | |
| 3 | 3 | {% load static i18n permission_tags widget_tweaks %} |
| 4 | 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 | 5 | {% block content %} |
| 13 | -<div class="panel panel-default"> | |
| 6 | + | |
| 7 | + <div class="panel panel-default"> | |
| 14 | 8 | <div class="panel-body"> |
| 15 | 9 | <form class="form-group " method="post" action=""> |
| 16 | 10 | {% csrf_token %} |
| 17 | 11 | |
| 18 | 12 | <div class="form-group {% if subject.name.errors %} has-error{% endif %}"> |
| 19 | - <label for="{{ id_name }}" class="control-label label-static"> {% trans 'Name' %}</label> | |
| 20 | - <input class="form-control" id="id_name" maxlength="100" name="name" type="text" required="True" value="{{subject.name}}"> | |
| 21 | - <span class="help-block">{% trans 'Subject name' %}</span> | |
| 13 | + <label for="id_name" class="control-label label-static"> {% trans 'Name'%}</label> | |
| 14 | + <textarea class="form-control" id="id_name" maxlength="100" rows="1" name="name" placeholder="Name" type="text" required >{{subject.name}}</textarea> | |
| 22 | 15 | |
| 16 | + <span class="help-block">{% trans 'Subject name'%}</span> | |
| 23 | 17 | </div> |
| 24 | 18 | |
| 25 | - <div class="form-group {% if subject.name.errors %} has-error{% endif %}"> | |
| 26 | - <label for="{{ id_description }}" class="control-label label-static"> {% trans 'Description' %} </label> | |
| 27 | - <textarea class="form-control" id="id_description" name="description" type="text" required="">{{subject.description}}</textarea> | |
| 28 | - <span class="help-block">{% trans 'Subject Description' %}</span> | |
| 19 | + <div class="form-group"> | |
| 20 | + <label for="id_description" class="control-label label-static"> {% trans 'Description'%}</label> | |
| 21 | + <textarea class="form-control" id="id_description" name="description" placeholder="Description" type="text" >{{subject.description}}</textarea> | |
| 29 | 22 | |
| 23 | + <span class="help-block">{% trans 'Subject description'%}</span> | |
| 30 | 24 | </div> |
| 31 | 25 | |
| 32 | - <div class="form-group {% if subject.name.errors %} has-error{% endif %}"> | |
| 33 | - <label for="{{ id_init_date }}" class="control-label label-static"> {% trans 'Init date' %}</label> | |
| 34 | - <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date:'SHORT_DA E_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}"> | |
| 35 | - <span class="help-block">{% trans 'Subject init date' %}</span> | |
| 26 | + <div class="form-group"> | |
| 27 | + <label for="id_init_date" class="control-label label-static"> {% trans 'Init date'%}</label> | |
| 28 | + <input type="text" class="form-control date-picker" name="init_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}"> | |
| 36 | 29 | |
| 30 | + <span class="help-block">{% trans 'Init date'%}</span> | |
| 37 | 31 | </div> |
| 38 | 32 | |
| 39 | - <div class="form-group {% if subject.name.errors %} has-error{% endif %}"> | |
| 40 | - <label for="{{ id_end_date }}" class="control-label label-static"> {% trans 'End date' %}</label> | |
| 41 | - <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date:'SHORT_DA E_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}"> | |
| 42 | - <span class="help-block">{% trans 'Subject end date' %}</span> | |
| 43 | - | |
| 44 | - </div> | |
| 45 | - <div class="form-group {% if subject.name.errors %} has-error{% endif %}"> | |
| 46 | - <label for="{{ id_visible }}" class="control-label label-static"> {% trans 'Visible?' %} </label> | |
| 47 | - <input type="checkbox" class="form-control" id="id_visible" name="visible" required="true"/> | |
| 48 | - <span class="help-block">{% trans 'Is it visible?' %}</span> | |
| 33 | + <div class="form-group"> | |
| 34 | + <label for="id_end_date" class="control-label label-static"> {% trans 'End date'%}</label> | |
| 35 | + <input type="text" class="form-control date-picker" name="end_date" value="{{field.value|date:'SHORT_DATE_FORMAT'}}" min="{{now|date:'SHORT_DATE_FORMAT'}}"> | |
| 49 | 36 | |
| 37 | + <span class="help-block">{% trans 'End date'%}</span> | |
| 50 | 38 | </div> |
| 51 | 39 | |
| 40 | + <div class="form-group"> | |
| 41 | + <label for="id_visible" class="control-label label-static"> {% trans 'Visible'%}</label> | |
| 42 | + <input class="form-control" id="id_visible" name="visible" type="checkbox"/> | |
| 52 | 43 | |
| 44 | + <span class="help-block">{% trans 'Is it visible?'%}</span> | |
| 53 | 45 | </div> |
| 54 | - | |
| 55 | 46 | <div class="col-lg-offset-4 col-lg-4"> |
| 56 | - <button type="submit" class="btn btn-raised btn-primary btn-lg btn-block">{% trans 'Replicate' %}</button> | |
| 47 | + <button type="submite" class="btn btn-raised btn-primary btn-lg btn-block">{% trans 'Replicate' %}</button> | |
| 57 | 48 | </div> |
| 58 | 49 | </form> |
| 59 | - | |
| 60 | 50 | </div> |
| 61 | 51 | </div> |
| 62 | 52 | |
| ... | ... | @@ -70,4 +60,4 @@ |
| 70 | 60 | $('#id_description').summernote({height: 300}); |
| 71 | 61 | }); |
| 72 | 62 | </script> |
| 73 | -{% endblock %} | |
| 74 | 63 | \ No newline at end of file |
| 64 | +{% endblock content %} | ... | ... |
courses/urls.py
| ... | ... | @@ -6,7 +6,6 @@ urlpatterns = [ |
| 6 | 6 | url(r'^all-courses/$', views.AllCoursesView.as_view(), name='all_courses'), |
| 7 | 7 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), |
| 8 | 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'), | |
| 10 | 9 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), |
| 11 | 10 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), |
| 12 | 11 | url(r'^subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_course, name='subscribe'), |
| ... | ... | @@ -19,10 +18,11 @@ urlpatterns = [ |
| 19 | 18 | url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'), |
| 20 | 19 | url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'), |
| 21 | 20 | url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'), |
| 21 | + url(r'^subjects/replicate/(?P<slug>[\w_-]+)/$', views.ReplicateSubjectView.as_view(), name='replicate_subject'), | |
| 22 | 22 | url(r'^subjects/subscribe/(?P<slug>[\w_-]+)/$', views.subscribe_subject, name='subscribe_subject'), |
| 23 | 23 | url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'), |
| 24 | 24 | url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'), |
| 25 | - url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.DeleteTopic.as_view(), name='delete_topic'), | |
| 25 | + url(r'^topics/delete/(?P<slug>[\w_-]+)/$', views.DeleteTopic.as_view(), name='delete_topic'), | |
| 26 | 26 | url(r'^topics/replicate/(?P<slug>[\w_-]+)/$', views.ReplicateTopicView.as_view(), name='replicate_topic'), |
| 27 | 27 | url(r'^topics/(?P<slug>[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic'), |
| 28 | 28 | url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'), | ... | ... |
courses/views.py
| ... | ... | @@ -561,39 +561,6 @@ class SubjectsView(LoginRequiredMixin, LogMixin, generic.ListView): |
| 561 | 561 | context['files'] = TopicFile.objects.filter(students__name = self.request.user.name) |
| 562 | 562 | return context |
| 563 | 563 | |
| 564 | -class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): | |
| 565 | - | |
| 566 | - allowed_roles = ['professor', 'system_admin'] | |
| 567 | - login_url = reverse_lazy("core:home") | |
| 568 | - redirect_field_name = 'next' | |
| 569 | - template_name = 'subject/replicate.html' | |
| 570 | - form_class = SubjectForm | |
| 571 | - success_url = reverse_lazy('course:view') | |
| 572 | - | |
| 573 | - def get_context_data(self, **kwargs): | |
| 574 | - context = super(ReplicateSubjectView, self).get_context_data(**kwargs) | |
| 575 | - subject = get_object_or_404(Subject, slug=self.kwargs.get('slug')) | |
| 576 | - | |
| 577 | - if has_role(self.request.user,'system_admin'): | |
| 578 | - subjects = Subject.objects.all() | |
| 579 | - context['subjects'] = subjects | |
| 580 | - elif has_role(self.request.user,'professor'): | |
| 581 | - subject = self.request.user.professors_subjects.all() | |
| 582 | - categorys_subjects = CategorySubject.objects.all() | |
| 583 | - | |
| 584 | - context['subject'] = subject | |
| 585 | - context['categorys_subjects'] = categorys_subjects | |
| 586 | - context['title'] = _("Replicate Subject") | |
| 587 | - context['now'] = date.today() | |
| 588 | - return context | |
| 589 | - | |
| 590 | - def form_valid(self, form): | |
| 591 | - self.object = form.save() | |
| 592 | - | |
| 593 | - return super(ReplicateSubjectView, self).form_valid(form) | |
| 594 | - | |
| 595 | - def get_success_url(self): | |
| 596 | - return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | |
| 597 | 564 | |
| 598 | 565 | class UploadMaterialView(LoginRequiredMixin, generic.edit.CreateView): |
| 599 | 566 | login_url = reverse_lazy("core:home") |
| ... | ... | @@ -1017,7 +984,7 @@ class TopicViewSet(viewsets.ModelViewSet): |
| 1017 | 984 | class ReplicateTopicView (LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin,generic.edit.CreateView): |
| 1018 | 985 | log_component = "course" |
| 1019 | 986 | log_resource = "topic" |
| 1020 | - log_action = "create" | |
| 987 | + log_action = "replicate" | |
| 1021 | 988 | log_context = {} |
| 1022 | 989 | |
| 1023 | 990 | allowed_roles = ['professor', 'system_admin'] |
| ... | ... | @@ -1067,4 +1034,56 @@ class ReplicateTopicView (LoginRequiredMixin, HasRoleMixin, LogMixin, Notificati |
| 1067 | 1034 | |
| 1068 | 1035 | super(ReplicateTopicView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) |
| 1069 | 1036 | |
| 1070 | - return super(ReplicateTopicView, self).form_valid(form) | |
| 1071 | 1037 | \ No newline at end of file |
| 1038 | + return super(ReplicateTopicView, self).form_valid(form) | |
| 1039 | + | |
| 1040 | +class ReplicateSubjectView(LoginRequiredMixin, HasRoleMixin, LogMixin, NotificationMixin, generic.edit.CreateView): | |
| 1041 | + log_component = "course" | |
| 1042 | + log_resource = "subject" | |
| 1043 | + log_action = "replicate" | |
| 1044 | + log_context = {} | |
| 1045 | + | |
| 1046 | + allowed_roles = ['professor', 'system_admin'] | |
| 1047 | + login_url = reverse_lazy("core:home") | |
| 1048 | + redirect_field_name = 'next' | |
| 1049 | + template_name = 'subject/replicate.html' | |
| 1050 | + form_class = SubjectForm | |
| 1051 | + | |
| 1052 | + def get_success_url(self): | |
| 1053 | + return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.slug}) | |
| 1054 | + | |
| 1055 | + def get_context_data(self, **kwargs): | |
| 1056 | + context = super(ReplicateSubjectView, self).get_context_data(**kwargs) | |
| 1057 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | |
| 1058 | + course = Course.objects.get(pk=subject.course_id) | |
| 1059 | + context['course'] = course | |
| 1060 | + context['subjects'] = course.subjects.filter(Q(visible=True) | Q(professors__in=[self.request.user])) | |
| 1061 | + context['subject'] = subject | |
| 1062 | + if (has_role(self.request.user,'system_admin')): | |
| 1063 | + context['subjects'] = course.subjects.all() | |
| 1064 | + return context | |
| 1065 | + | |
| 1066 | + def form_valid(self, form): | |
| 1067 | + subject = get_object_or_404(Subject, slug = self.kwargs.get('slug')) | |
| 1068 | + course = Course.objects.get(pk=subject.course_id) | |
| 1069 | + | |
| 1070 | + self.object = form.save(commit = False) | |
| 1071 | + self.object.course = course | |
| 1072 | + self.object.save() | |
| 1073 | + self.object.professors.add(self.request.user) | |
| 1074 | + if self.object.visible: | |
| 1075 | + super(ReplicateSubjectView, self).createNotification( " created subject " + self.object.name, resource_name=self.object.name, | |
| 1076 | + resource_slug = self.object.slug, actor=self.request.user, users= self.object.course.students.all(), | |
| 1077 | + resource_link = reverse('course:view_subject', args=[self.object.slug])) | |
| 1078 | + | |
| 1079 | + self.log_context['subject_id'] = self.object.id | |
| 1080 | + self.log_context['subject_name'] = self.object.name | |
| 1081 | + self.log_context['subject_slug'] = self.object.slug | |
| 1082 | + self.log_context['course_id'] = course.id | |
| 1083 | + self.log_context['course_name'] = course.name | |
| 1084 | + self.log_context['course_slug'] = course.slug | |
| 1085 | + self.log_context['course_category_id'] = course.category.id | |
| 1086 | + self.log_context['course_category_name'] = course.category.name | |
| 1087 | + | |
| 1088 | + super(ReplicateSubjectView, self).createLog(self.request.user, self.log_component, self.log_action, self.log_resource, self.log_context) | |
| 1089 | + | |
| 1090 | + return super(ReplicateSubjectView, self).form_valid(form) | ... | ... |