Commit f83e8bdfbe8af81bbf8a861f6d20aa9d51d88b10
1 parent
29df64f6
Exists in
master
and in
5 other branches
actually built the topics index page, still has improvements to do so #50
Showing
8 changed files
with
213 additions
and
19 deletions
Show diff stats
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-16 04:26 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('core', '0008_resource_link'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.RenameField( | ||
16 | + model_name='resource', | ||
17 | + old_name='link', | ||
18 | + new_name='url', | ||
19 | + ), | ||
20 | + ] |
@@ -0,0 +1,48 @@ | @@ -0,0 +1,48 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-16 04:26 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.conf import settings | ||
6 | +from django.db import migrations, models | ||
7 | +import django.db.models.deletion | ||
8 | + | ||
9 | + | ||
10 | +class Migration(migrations.Migration): | ||
11 | + | ||
12 | + dependencies = [ | ||
13 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
14 | + ('core', '0009_auto_20160916_0126'), | ||
15 | + ('courses', '0012_course_students'), | ||
16 | + ] | ||
17 | + | ||
18 | + operations = [ | ||
19 | + migrations.CreateModel( | ||
20 | + name='Activity', | ||
21 | + fields=[ | ||
22 | + ('resource_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Resource')), | ||
23 | + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), | ||
24 | + ('limit_date', models.DateTimeField(verbose_name='Deliver Date')), | ||
25 | + ('grade', models.IntegerField(verbose_name='grade')), | ||
26 | + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student', to=settings.AUTH_USER_MODEL, verbose_name='student')), | ||
27 | + ], | ||
28 | + bases=('core.resource',), | ||
29 | + ), | ||
30 | + migrations.CreateModel( | ||
31 | + name='Link', | ||
32 | + fields=[ | ||
33 | + ('resource_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Resource')), | ||
34 | + ('url_field', models.CharField(max_length=300, verbose_name='url')), | ||
35 | + ], | ||
36 | + bases=('core.resource',), | ||
37 | + ), | ||
38 | + migrations.AddField( | ||
39 | + model_name='topic', | ||
40 | + name='visible', | ||
41 | + field=models.BooleanField(default=False, verbose_name='Visible'), | ||
42 | + ), | ||
43 | + migrations.AddField( | ||
44 | + model_name='activity', | ||
45 | + name='topic', | ||
46 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='topic', to='courses.Topic', verbose_name='Topic'), | ||
47 | + ), | ||
48 | + ] |
courses/templates/course/index.html
@@ -54,7 +54,9 @@ | @@ -54,7 +54,9 @@ | ||
54 | {% for course in courses %} | 54 | {% for course in courses %} |
55 | <div class="row well well-inverse"> | 55 | <div class="row well well-inverse"> |
56 | <div class="col-md-2"> | 56 | <div class="col-md-2"> |
57 | - <img src="{{ course.image.url }}" class="img-responsive" /> | 57 | + {% if course.image %} |
58 | + <img src="{{ course.image.url }}" class="img-responsive" /> | ||
59 | + {% endif %} | ||
58 | </div> | 60 | </div> |
59 | <div class="col-md-10"> | 61 | <div class="col-md-10"> |
60 | <div class="row"> | 62 | <div class="row"> |
courses/templates/course/view.html
@@ -64,22 +64,24 @@ | @@ -64,22 +64,24 @@ | ||
64 | <div class="panel panel-info"> | 64 | <div class="panel panel-info"> |
65 | <div class="panel-heading"> | 65 | <div class="panel-heading"> |
66 | <div class="row"> | 66 | <div class="row"> |
67 | -<div class="col-md-10"> | 67 | + <a href="{% url 'course:view_subject' subject.slug %}"> |
68 | + <div class="col-md-10"> | ||
68 | 69 | ||
69 | - <h3 class="panel-title"><a href="{% url 'course:view_subject' subject.slug %}"></a>{{subject}}</h3> | 70 | + <h3 class="panel-title">{{subject}}</h3> |
70 | 71 | ||
71 | - </div> | ||
72 | - <div class="col-md-2 text-right"> | ||
73 | - {% if user|has_role:'professor, system_admin' %} | ||
74 | - <a href="{% url 'course:update_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-default"> | ||
75 | - <span class="glyphicon glyphicon-edit"></span> | ||
76 | - </a> | ||
77 | - <a href="{% url 'course:delete_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-danger"> | ||
78 | - <span class="glyphicon glyphicon-trash"></span> | ||
79 | - </a> | ||
80 | - {% endif %} | ||
81 | - </div> | ||
82 | -</div> | 72 | + </div> |
73 | + </a> | ||
74 | + <div class="col-md-2 text-right"> | ||
75 | + {% if user|has_role:'professor, system_admin' %} | ||
76 | + <a href="{% url 'course:update_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-default"> | ||
77 | + <span class="glyphicon glyphicon-edit"></span> | ||
78 | + </a> | ||
79 | + <a href="{% url 'course:delete_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-danger"> | ||
80 | + <span class="glyphicon glyphicon-trash"></span> | ||
81 | + </a> | ||
82 | + {% endif %} | ||
83 | + </div> | ||
84 | + </div> | ||
83 | </div> | 85 | </div> |
84 | <div class="panel-body"> | 86 | <div class="panel-body"> |
85 | <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} | 87 | <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %} |
courses/templates/subject/index.html
@@ -7,7 +7,12 @@ | @@ -7,7 +7,12 @@ | ||
7 | <ol class="breadcrumb"> | 7 | <ol class="breadcrumb"> |
8 | <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | 8 | <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> |
9 | <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> | 9 | <li><a href="{% url 'course:view' course.slug %}">{{ course }}</a></li> |
10 | - <li class="active">{% trans 'Manage Subjects' %}</li> | 10 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} |
11 | + <li class="active">{% trans 'Manage Subjects' %}</li> | ||
12 | + {% else %} | ||
13 | + <li class="active">{{ subject.name }}</li> | ||
14 | + {% endif %} | ||
15 | + | ||
11 | </ol> | 16 | </ol> |
12 | {% endblock %} | 17 | {% endblock %} |
13 | 18 | ||
@@ -67,8 +72,10 @@ | @@ -67,8 +72,10 @@ | ||
67 | {% include "subject/form_view_student.html" %} | 72 | {% include "subject/form_view_student.html" %} |
68 | {% endif %} | 73 | {% endif %} |
69 | {% endfor %} | 74 | {% endfor %} |
75 | + {% if user|has_role:'system_admin' or topic.owner == user%} | ||
76 | + <a name="create_topic" class="btn btn-primary btn-md btn-block" href="{% url 'course:create_topic' subject.slug %}">{% trans "Create Topic" %}</a> | ||
77 | + {% endif %} | ||
70 | 78 | ||
71 | - <a name="create_topic" class="btn btn-primary btn-md btn-block" href="{% url 'course:create_topic' subject.slug %}">{% trans "Create Topic" %}</a> | ||
72 | {% endblock %} | 79 | {% endblock %} |
73 | 80 | ||
74 | {% block rightbar %} | 81 | {% block rightbar %} |
@@ -0,0 +1,89 @@ | @@ -0,0 +1,89 @@ | ||
1 | +{% extends 'base.html' %} | ||
2 | + | ||
3 | +{% load static i18n permission_tags %} | ||
4 | + | ||
5 | +{% block breadcrumbs %} | ||
6 | + | ||
7 | + <ol class="breadcrumb"> | ||
8 | + <li><a href="{% url 'app:index' %}">{% trans 'Home' %}</a></li> | ||
9 | + <li><a href="{% url 'course:view_subject' subject.slug %}">{{ subject }}</a></li> | ||
10 | + {% if user|has_role:'professor' or user|has_role:'system_admin' %} | ||
11 | + <li class="active">{% trans 'Manage Topic' %}</li> | ||
12 | + {% else %} | ||
13 | + <li class="active">{{ topic.name }}</li> | ||
14 | + {% endif %} | ||
15 | + | ||
16 | + </ol> | ||
17 | +{% endblock %} | ||
18 | + | ||
19 | +{% block sidebar %} | ||
20 | + | ||
21 | + <div class="panel panel-primary"> | ||
22 | + | ||
23 | + <div class="panel-heading"> | ||
24 | + <h3 class="panel-title">{{course}}</h3> | ||
25 | + </div> | ||
26 | + | ||
27 | + <div class="panel-body"> | ||
28 | + <!--{% for subject in subjects %} | ||
29 | + <div class="row"> | ||
30 | + <div class="col-md-12 col-sm-12"> | ||
31 | + {{subject}} | ||
32 | + </div> | ||
33 | + </div> | ||
34 | + {% endfor %}--> | ||
35 | + </div> | ||
36 | + </div> | ||
37 | + | ||
38 | + | ||
39 | +{% endblock %} | ||
40 | + | ||
41 | +{% block content %} | ||
42 | + <div class="panel panel-info"> | ||
43 | + <div class="panel-heading"> | ||
44 | + <div class="row"> | ||
45 | + <div class="col-md-7 col-sm-7"> | ||
46 | + <h3>{{subject}}</h3> | ||
47 | + </div> | ||
48 | + <div class="col-md-2 col-sm-2"> | ||
49 | + {% if user|has_role:'system_admin' or user in subject.professors %} | ||
50 | + <a href="{% url 'course:update_subject' subject.slug%}" class="btn">{% trans "edit" %}</a> | ||
51 | + {% endif %} | ||
52 | + </div> | ||
53 | + <div class="col-md-3 col-sm-3"> | ||
54 | + {% if user|has_role:'system_admin' or user in subject.professors %} | ||
55 | + <a href="{% url 'course:delete_subject' subject.slug%}" class="btn">{% trans "delete" %}</a> | ||
56 | + {% endif %} | ||
57 | + </div> | ||
58 | + </div> | ||
59 | + </div> | ||
60 | + <div class="panel-body"> | ||
61 | + <p> | ||
62 | + {{subject.description|linebreaks}} | ||
63 | + </p> | ||
64 | + </div> | ||
65 | + </div> | ||
66 | +<!--{% for topic in topics %} | ||
67 | + {% if user|has_role:'system_admin' or topic.owner == user%} | ||
68 | + {% include "subject/form_view_teacher.html" %} | ||
69 | + {% else %} | ||
70 | + {% include "subject/form_view_student.html" %} | ||
71 | + {% endif %} | ||
72 | +{% endfor %} | ||
73 | + {% if user|has_role:'system_admin' or topic.owner == user%} | ||
74 | + <a name="create_topic" class="btn btn-primary btn-md btn-block" href="{% url 'course:create_topic' subject.slug %}">{% trans "Create Topic" %}</a> | ||
75 | + {% endif %} | ||
76 | + | ||
77 | +{% endblock %}--> | ||
78 | + | ||
79 | +{% block rightbar %} | ||
80 | + | ||
81 | + <div class="panel panel-warning"> | ||
82 | + <div class="panel-heading"> | ||
83 | + <h3 class="panel-title">{% trans "Pending Stuffs" %}</h3> | ||
84 | + </div> | ||
85 | + <div class="panel-body"> | ||
86 | + | ||
87 | + </div> | ||
88 | + </div> | ||
89 | +{% endblock rightbar %} |
courses/urls.py
@@ -15,9 +15,10 @@ urlpatterns = [ | @@ -15,9 +15,10 @@ urlpatterns = [ | ||
15 | url(r'^categories/(?P<slug>[\w_-]+)/$', views.ViewCat.as_view(), name='view_cat'), | 15 | url(r'^categories/(?P<slug>[\w_-]+)/$', views.ViewCat.as_view(), name='view_cat'), |
16 | url(r'^categories/delete/(?P<slug>[\w_-]+)/$', views.DeleteCatView.as_view(), name='delete_cat'), | 16 | url(r'^categories/delete/(?P<slug>[\w_-]+)/$', views.DeleteCatView.as_view(), name='delete_cat'), |
17 | url(r'^subjects/(?P<slug>[\w_-]+)/$', views.SubjectsView.as_view(), name='view_subject'), | 17 | url(r'^subjects/(?P<slug>[\w_-]+)/$', views.SubjectsView.as_view(), name='view_subject'), |
18 | - url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'), | ||
19 | - url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'), | ||
20 | url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'), | 18 | url(r'^subjects/create/(?P<slug>[\w_-]+)/$', views.CreateSubjectView.as_view(), name='create_subject'), |
21 | url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'), | 19 | url(r'^subjects/update/(?P<slug>[\w_-]+)/$', views.UpdateSubjectView.as_view(), name='update_subject'), |
22 | url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'), | 20 | url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'), |
21 | + url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'), | ||
22 | + url(r'^topics/update/(?P<slug>[\w_-]+)/$', views.UpdateTopicView.as_view(), name='update_topic'), | ||
23 | + url(r'^topics/(?P<slug>[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic') | ||
23 | ] | 24 | ] |
courses/views.py
@@ -236,6 +236,29 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | @@ -236,6 +236,29 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | ||
236 | context['topics'] = subject.topics.all() | 236 | context['topics'] = subject.topics.all() |
237 | return context | 237 | return context |
238 | 238 | ||
239 | +class TopicsView(LoginRequiredMixin, generic.ListView): | ||
240 | + | ||
241 | + login_url = reverse_lazy("core:home") | ||
242 | + redirect_field_name = 'next' | ||
243 | + template_name = 'topic/index.html' | ||
244 | + context_object_name = 'topics' | ||
245 | + model = Topic | ||
246 | + | ||
247 | + def get_queryset(self): | ||
248 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
249 | + subject = topic.subject | ||
250 | + context = subject.topics.filter(visible=True) | ||
251 | + #if (self.request.user in subject.professors.all() or has_role(self.request.user,'system_admin')): | ||
252 | + #context = subject.topics.all() <- Change it By Activities | ||
253 | + return context | ||
254 | + | ||
255 | + def get_context_data(self, **kwargs): | ||
256 | + topic = get_object_or_404(Topic, slug = self.kwargs.get('slug')) | ||
257 | + context = super(TopicsView, self).get_context_data(**kwargs) | ||
258 | + context['topic'] = topic | ||
259 | + context['subject'] = topic.subject | ||
260 | + return context | ||
261 | + | ||
239 | class CreateTopicView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.edit.CreateView): | 262 | class CreateTopicView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.edit.CreateView): |
240 | 263 | ||
241 | allowed_roles = ['professor', 'system_admin'] | 264 | allowed_roles = ['professor', 'system_admin'] |
@@ -384,3 +407,5 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | @@ -384,3 +407,5 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | ||
384 | 407 | ||
385 | def get_success_url(self): | 408 | def get_success_url(self): |
386 | return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.course.subjects.all()[0].slug}) | 409 | return reverse_lazy('course:view_subject', kwargs={'slug' : self.object.course.subjects.all()[0].slug}) |
410 | + | ||
411 | + |