Commit 52ba6c424d2137dc29436b45a0b5823e96a07e4a
1 parent
52f695e0
Exists in
master
and in
5 other branches
replicate couse #189
Showing
5 changed files
with
52 additions
and
5 deletions
Show diff stats
courses/models.py
... | ... | @@ -65,9 +65,11 @@ class Course(models.Model): |
65 | 65 | |
66 | 66 | def show_subscribe(self): |
67 | 67 | today = datetime.date.today() |
68 | - | |
69 | 68 | return today >= self.init_register_date and today <= self.end_register_date |
70 | 69 | |
70 | + def duration(self): | |
71 | + return self.end_date - self.init_date | |
72 | + | |
71 | 73 | class Subject(models.Model): |
72 | 74 | |
73 | 75 | name = models.CharField(_('Name'), max_length = 100) | ... | ... |
courses/static/js/course.js
... | ... | @@ -63,4 +63,18 @@ function delete_course(url, course, message, return_url) { |
63 | 63 | } |
64 | 64 | }); |
65 | 65 | }); |
66 | +} | |
67 | +/* | |
68 | +* | |
69 | +* Function to load create course's form | |
70 | +* | |
71 | +*/ | |
72 | +function replicate_course(url, course) { | |
73 | + $.ajax({ | |
74 | + url: url, | |
75 | + data: {'form': course}, | |
76 | + success: function(data) { | |
77 | + $(".course_replicate_form").html(data); | |
78 | + } | |
79 | + }); | |
66 | 80 | } |
67 | 81 | \ No newline at end of file | ... | ... |
courses/templates/course/course_card.html
... | ... | @@ -18,7 +18,7 @@ |
18 | 18 | <i class="fa fa-ellipsis-v fa-2x" aria-hidden="true"></i> |
19 | 19 | </button> |
20 | 20 | <ul class="dropdown-menu" aria-labelledby="moreActions"> |
21 | - <li><a href="javascript:replicate_course('{% url 'course:create'%}','{{course.slug}}')"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li> | |
21 | + <li><a href="{% url 'course:replicate_course' course.slug %}"><i class="fa fa-files-o fa-fw" aria-hidden="true"></i>{% trans 'Replicate' %}</a></li> | |
22 | 22 | <li><a href="javascript:delete_course('{% url 'course:delete' course.slug %}', '{{ course.slug }}', '{% trans "Are you sure you want to delete this course?" %}', '{% url 'course:manage' %}')"><i class="fa fa-trash fa-fw" aria-hidden="true"></i>{% trans 'Remove' %}</a></li> |
23 | 23 | </ul> |
24 | 24 | </div> |
... | ... | @@ -47,7 +47,7 @@ |
47 | 47 | <div class="modal-dialog" role="document"> |
48 | 48 | <div class="modal-content"> |
49 | 49 | <div class="modal-header"> |
50 | - <h4 class="modal-title" id="myModalLabel">{% trans 'Forum' %}</h4> | |
50 | + <h4 class="modal-title" id="myModalLabel">{% trans 'Repicate Course' %}</h4> | |
51 | 51 | </div> |
52 | 52 | <div class="modal-body"> |
53 | 53 | <section> | ... | ... |
courses/urls.py
... | ... | @@ -4,6 +4,7 @@ from . import views |
4 | 4 | urlpatterns = [ |
5 | 5 | url(r'^$', views.IndexView.as_view(), name='manage'), |
6 | 6 | url(r'^create/$', views.CreateCourseView.as_view(), name='create'), |
7 | + url(r'^replicate_course/(?P<slug>[\w_-]+)/$', views.ReplicateCourseView.as_view(), name='replicate_course'), | |
7 | 8 | url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateCourseView.as_view(), name='update'), |
8 | 9 | url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'), |
9 | 10 | url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteCourseView.as_view(), name='delete'), | ... | ... |
courses/views.py
... | ... | @@ -105,6 +105,38 @@ class CreateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,gener |
105 | 105 | context['now'] = date.today() |
106 | 106 | return context |
107 | 107 | |
108 | +class ReplicateCourseView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView): | |
109 | + | |
110 | + allowed_roles = ['professor', 'system_admin'] | |
111 | + login_url = reverse_lazy("core:home") | |
112 | + redirect_field_name = 'next' | |
113 | + template_name = 'course/replicate.html' | |
114 | + form_class = CourseForm | |
115 | + success_url = reverse_lazy('course:manage') | |
116 | + | |
117 | + def form_valid(self, form): | |
118 | + self.object = form.save() | |
119 | + self.object.professors.add(self.request.user) | |
120 | + return super(ReplicateCourseView, self).form_valid(form) | |
121 | + | |
122 | + def get_context_data(self, **kwargs): | |
123 | + context = super(ReplicateCourseView, self).get_context_data(**kwargs) | |
124 | + course = get_object_or_404(Course, slug = self.kwargs.get('slug')) | |
125 | + if has_role(self.request.user,'system_admin'): | |
126 | + courses = Course.objects.all() | |
127 | + elif has_role(self.request.user,'professor'): | |
128 | + courses = self.request.user.courses.all() | |
129 | + categorys_courses = CourseCategory.objects.all() | |
130 | + context['courses'] = courses | |
131 | + context['course'] = course | |
132 | + context['categorys_courses'] = categorys_courses | |
133 | + context['title'] = _("Replicate Course") | |
134 | + context['now'] = date.today() | |
135 | + return context | |
136 | + | |
137 | + def get_success_url(self): | |
138 | + return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) | |
139 | + | |
108 | 140 | class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
109 | 141 | |
110 | 142 | allowed_roles = ['professor', 'system_admin'] |
... | ... | @@ -136,8 +168,6 @@ class UpdateCourseView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
136 | 168 | def get_success_url(self): |
137 | 169 | return reverse_lazy('course:view', kwargs={'slug' : self.object.slug}) |
138 | 170 | |
139 | - | |
140 | - | |
141 | 171 | class DeleteCourseView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): |
142 | 172 | |
143 | 173 | allowed_roles = ['professor', 'system_admin'] | ... | ... |