Commit 5927b6dd0f2d7de9d5fab3619623a9df96863f44

Authored by Jailson Dias
1 parent e0e9c3fb

Home course for teacher and student, issue #49

courses/migrations/0012_course_students.py 0 → 100644
... ... @@ -0,0 +1,22 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-09-15 02:57
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +
  8 +
  9 +class Migration(migrations.Migration):
  10 +
  11 + dependencies = [
  12 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  13 + ('courses', '0011_auto_20160914_2126'),
  14 + ]
  15 +
  16 + operations = [
  17 + migrations.AddField(
  18 + model_name='course',
  19 + name='students',
  20 + field=models.ManyToManyField(related_name='courses_student', to=settings.AUTH_USER_MODEL, verbose_name='Students'),
  21 + ),
  22 + ]
... ...
courses/models.py
... ... @@ -31,6 +31,7 @@ class Course(models.Model):
31 31 image = models.ImageField(verbose_name = _('Image'), blank = True, upload_to = 'courses/')
32 32 category = models.ForeignKey(Category, verbose_name = _('Category'))
33 33 professors = models.ManyToManyField(User,verbose_name=_('Professors'), related_name='courses')
  34 + students = models.ManyToManyField(User,verbose_name=_('Students'), related_name='courses_student')
34 35  
35 36 class Meta:
36 37 ordering = ('create_date','name')
... ...
courses/templates/course/view.html
1   -{% extends 'course/index.html' %}
  1 +{% extends 'base.html' %}
2 2  
3 3 {% load static i18n permission_tags %}
4 4 {% load django_bootstrap_breadcrumbs %}
5 5  
  6 +{% block style %}
  7 + <link rel="stylesheet" href="{% static 'css/course/course.css' %}">
  8 +{% endblock style %}
  9 +
6 10 {% block breadcrumbs %}
7 11  
8 12 {{ block.super }}
... ... @@ -10,104 +14,81 @@
10 14  
11 15 {% endblock %}
12 16  
13   -
14 17 {% block sidebar %}
15   -
16   -{{block.super}}
17   -<div class="row">
18   - <div class="col-md-12">
19   - <div class="panel panel-primary navigation">
20   - <div class="panel-heading">
21   - <h5>{% trans 'Subjects' %}</h5>
22   - </div>
23   - <div class="panel-body">
24   - <ul class="nav nav-pills nav-stacked">
25   - {% for subject in subjects %}
26   - <li><a href="">{{subject.name}}</a></li>
27   - {% endfor %}
28   - </ul>
29   - </div>
30   - </div>
31   - </div>
  18 +<div class="panel panel-primary navigation">
  19 + <div class="panel-heading">
  20 + <h5>{% trans "Menu" %}</h5>
  21 + </div>
  22 + <div class="panel-body">
  23 + <ul class="nav nav-pills nav-stacked">
  24 + <li><a href="{% url 'app:index' %}">{% trans "Home" %}</a></li>
  25 + <li><a href="{% url 'users:profile' %}">{% trans "Profile" %}</a></li>
  26 + {# <li><a href="">{% trans "Courses" %}</a></li>#}
  27 + </ul>
  28 + </div>
  29 +</div>
  30 +{% if courses.count > 0 %}
  31 +<div class="panel panel-primary navigation">
  32 + <div class="panel-heading">
  33 + <h5>{% trans "Courses" %}</h5>
  34 + </div>
  35 + <div class="panel-body">
  36 + <ul class="nav nav-pills nav-stacked">
  37 + {% for course in courses %}
  38 + <li><a href="{% url 'course:view' course.slug %}">{{course}}</a></li>
  39 + {% endfor %}
  40 + </ul>
  41 + </div>
32 42 </div>
33   -<!--<div class="list-group">
34   - <a href="{% url 'course:manage' %}" class="list-group-item">
35   - {% trans 'Courses' %}
36   - </a>
37   - <a href="{% url 'course:view' course.slug %}" class="list-group-item active">
38   - {% trans 'Course Info' %}
39   - </a>
40   - <a href="" class="list-group-item">
41   - {% trans 'Manage Modules' %}
42   - </a>
43   - {% if user|has_role:'professor, system_admin' %}
44   - <a href="{% url 'course:create' %}" class="list-group-item">
45   - {% trans 'Create Course' %}
46   - </a>
47   - <a href="{% url 'course:update' course.slug %}" class="list-group-item">
48   - {% trans 'Edit Course' %}
49   - </a>
50   - <a href="#" class="list-group-item">
51   - {% trans 'Participants' %}
52   - </a>
53   - <a href="" class="list-group-item">
54   - {% trans 'Course avaliations' %}
55   - </a>
56   - <a href="" class="list-group-item">
57   - {% trans 'Duplicate Course' %}
58   - </a>
59   - <a href="{% url 'course:delete' course.slug %}" class="list-group-item">
60   - {% trans 'Delete Course' %}
61   - </a>
62   - {% endif %}
63   - </div> -->
  43 +{% endif %}
64 44 {% endblock %}
65 45  
66 46 {% block content %}
  47 +<h3>{% trans "Subjects" %}</h3>
  48 +{% for subject in subjects %}
  49 + <div class="panel panel-info">
  50 + <div class="panel-heading">
  51 + <div class="row">
  52 +<div class="col-md-10">
67 53  
68   -<div class="row">
69   - <div class="col-sm-3">
70   - <img src="{{ course.image.url }}" class="img-responsive" />
71   - </div>
72   - <div class="col-sm-9">
73   - <h4>{{ course }}</h4>
74   - <span class="label label-info">{{ course.category }}</span>
75   - <span class="label label-warning">{{ course.max_students }} alunos no máximo</span>
76   - <p>
77   - <strong>{% trans 'Subscribes:' %} </strong> <em>de</em> <u>{{ course.init_register_date }}</u> <em>até</em> <u>{{ course.end_register_date }}</u>
78   - </p>
79   - <p>
80   - <strong>{% trans 'Period:' %} </strong> <em>de</em> <u>{{ course.init_date }}</u> <em>até</em> <u>{{ course.end_date }}</u>
81   - </p>
82   - </div>
83   - </div>
84   - <div class="row">
85   - <div class="col-sm-12">
86   - <p>
87   - <strong>{% trans 'Objectives:' %} </strong> {{ course.objectivies|linebreaks }}
88   - </p>
89   - <p>
90   - <strong>{% trans 'Work Plan:' %} </strong> {{ course.content|linebreaks }}
91   - </p>
92   - </div>
93   - </div>
94   - <div class="row">
95   - <div class="col-md-12">
96   - <h3>Subjects</h3>
97   - {% for subject in subjects %}
98   - <div class="panel panel-info">
99   - <div class="panel-heading">
100   - <h3 class="panel-title">Subject 1</h3>
101   - </div>
102   - <div class="panel-body">
103   - Dummy Info
104   - </div>
105   - </div>
106   - {% endfor %}
107   - </div>
108   - </div>
  54 + <h3 class="panel-title"><a href="{% url 'course:view_subject' subject.slug %}"></a>{{subject}}</h3>
109 55  
  56 + </div>
  57 + <div class="col-md-2 text-right">
  58 + {% if user|has_role:'professor, system_admin' %}
  59 + <a href="{% url 'course:update_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-default">
  60 + <span class="glyphicon glyphicon-edit"></span>
  61 + </a>
  62 + <a href="{% url 'course:delete_subject' subject.slug %}" style="padding: 3px; margin: 3px;" class="btn btn-sm btn-danger">
  63 + <span class="glyphicon glyphicon-trash"></span>
  64 + </a>
  65 + {% endif %}
  66 + </div>
  67 +</div>
  68 + </div>
  69 + <div class="panel-body">
  70 + <p><b>{% trans "Professor" %}: </b>{% for professor in subject.professors.all %}{% if not forloop.first %},{% endif %}
  71 + {{professor}}{% if forloop.last %}.{% endif %}{% endfor %}</p>
  72 + <p>
  73 + <b>{% trans "Description" %}: </b>
  74 + <i>
  75 + {{subject.description}}
  76 + </i>
  77 + </p>
  78 + <div class="row">
  79 + <div class="col-xs-6 col-md-6">
  80 + {# <p><b>{% trans "Begining" %}: </b>{{subject.init_date}}</p>#}
  81 + </div>
  82 + <div class="col-xs-6 col-md-6">
  83 + {# <p><b>End: </b>23/08/2019</p>#}
  84 + </div>
  85 + </div>
  86 + </div>
  87 + </div>
  88 +{% endfor %}
110 89 {% endblock %}
111 90  
  91 +
112 92 {% block rightbar %}
  93 +
113 94 {% endblock rightbar %}
... ...
courses/urls.py
... ... @@ -6,7 +6,7 @@ urlpatterns = [
6 6 url(r'^$', views.IndexView.as_view(), name='manage'),
7 7 url(r'^create/$', views.CreateView.as_view(), name='create'),
8 8 url(r'^edit/(?P<slug>[\w_-]+)/$', views.UpdateView.as_view(), name='update'),
9   - url(r'^(?P<slug>[\w_-]+)/$', views.View.as_view(), name='view'),
  9 + url(r'^(?P<slug>[\w_-]+)/$', views.CourseView.as_view(), name='view'),
10 10 url(r'^delete/(?P<slug>[\w_-]+)/$', views.DeleteView.as_view(), name='delete'),
11 11 url(r'^category/(?P<slug>[\w_-]+)/$', views.FilteredView.as_view(), name='filter'),
12 12 url(r'^categories/$', views.IndexCatView.as_view(), name='manage_cat'),
... ...
courses/views.py
... ... @@ -75,7 +75,7 @@ class UpdateView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView):
75 75  
76 76 return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine)
77 77  
78   -class View(LoginRequiredMixin, NotificationMixin, generic.DetailView):
  78 +class CourseView(LoginRequiredMixin, NotificationMixin, generic.DetailView):
79 79  
80 80 login_url = reverse_lazy("core:home")
81 81 redirect_field_name = 'next'
... ... @@ -84,11 +84,25 @@ class View(LoginRequiredMixin, NotificationMixin, generic.DetailView):
84 84 template_name = 'course/view.html'
85 85  
86 86 def get_context_data(self, **kwargs):
87   - context = super(View, self).get_context_data(**kwargs)
  87 + context = super(CourseView, self).get_context_data(**kwargs)
88 88 course = get_object_or_404(Course, slug = self.kwargs.get('slug'))
89   - subjects = Subject.objects.filter(Q(visible=True) | Q(professors__in=[self.request.user]) | Q(course = course))
  89 + if has_role(self.request.user,'system_admin'):
  90 + subjects = Subject.objects.all()
  91 + elif has_role(self.request.user,'professor'):
  92 + subjects = course.subjects.filter(professors__in=[self.request.user])
  93 + elif has_role(self.request.user, 'student'):
  94 + subjects = course.subjects.filter(visible=True)
90 95 context['subjects'] = subjects
91 96  
  97 + if has_role(self.request.user,'system_admin'):
  98 + courses = Course.objects.all()
  99 + elif has_role(self.request.user,'professor'):
  100 + courses = self.request.user.courses.all()
  101 + elif has_role(self.request.user, 'student'):
  102 + courses = self.request.user.courses_student.all()
  103 + context['courses'] = courses
  104 + context['title'] = course.name
  105 +
92 106 return context
93 107  
94 108 class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView):
... ...