Commit 38acfa5355000dccb93f37b165063c4c50cc2bc9

Authored by fbormann
1 parent 68badb4b

fixed activity and material models, changed base.html on notifications

core/templates/base.html
... ... @@ -85,7 +85,14 @@
85 85 {% endif %}
86 86 {% endfor %}
87 87  
88   - <div> <p>See more</p> </div>
  88 + <li>
  89 + <a>
  90 + <div class="list-group-item">
  91 + <div class="row-content">
  92 + <p class="list-group-item-text">See More</p>
  93 + </div>
  94 + </a>
  95 + </li>
89 96 </ul>
90 97 </li>
91 98  
... ...
courses/migrations/0002_auto_20160926_0026.py 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-09-26 03:26
  3 +from __future__ import unicode_literals
  4 +
  5 +import autoslug.fields
  6 +from django.db import migrations, models
  7 +
  8 +
  9 +class Migration(migrations.Migration):
  10 +
  11 + dependencies = [
  12 + ('courses', '0001_initial'),
  13 + ]
  14 +
  15 + operations = [
  16 + migrations.CreateModel(
  17 + name='SubjectCategory',
  18 + fields=[
  19 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  20 + ('name', models.CharField(max_length=100, verbose_name='Name')),
  21 + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')),
  22 + ('description', models.TextField(blank=True, verbose_name='Description')),
  23 + ('subjects', models.ManyToManyField(to='courses.Subject')),
  24 + ],
  25 + options={
  26 + 'verbose_name_plural': 'subject categories',
  27 + 'verbose_name': 'subject category',
  28 + },
  29 + ),
  30 + migrations.RemoveField(
  31 + model_name='activity',
  32 + name='create_date',
  33 + ),
  34 + migrations.RemoveField(
  35 + model_name='material',
  36 + name='create_date',
  37 + ),
  38 + ]
... ...
courses/models.py
... ... @@ -88,7 +88,6 @@ It is one kind of possible resources available inside a Topic.
88 88 Activity is something that has a deadline and has to be delivered by the student
89 89 """
90 90 class Activity(Resource):
91   - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
92 91 topic = models.ForeignKey(Topic, verbose_name = _('Topic'))
93 92 limit_date = models.DateTimeField(_('Deliver Date'))
94 93 student = models.ForeignKey(User, verbose_name = _('student'))
... ... @@ -98,8 +97,21 @@ class Activity(Resource):
98 97 It represents any Material inside a topic, be it a file, a link, etc.
99 98 """
100 99 class Material(Resource):
101   - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
102 100 topic = models.ForeignKey(Topic, verbose_name = _('Topic'))
103 101 student = models.ForeignKey(User, verbose_name = _('student'))
104 102  
105 103  
  104 +
  105 +
  106 +"""
  107 +It is a category for each subject.
  108 +"""
  109 +class SubjectCategory(models.Model):
  110 + name = models.CharField(_('Name'), max_length= 100)
  111 + slug = AutoSlugField(_("Slug"),populate_from='name',unique=True)
  112 + description = models.TextField(_('Description'), blank = True)
  113 + subjects = models.ManyToManyField(Subject)
  114 +
  115 + class Meta:
  116 + verbose_name = _('subject category')
  117 + verbose_name_plural = _('subject categories')
... ...
courses/templates/subject_category/index.html 0 → 100644
... ... @@ -0,0 +1,77 @@
  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 +
  10 +
  11 + </ol>
  12 +{% endblock %}
  13 +
  14 +{% block sidebar %}
  15 +
  16 + <div class="panel panel-primary">
  17 +
  18 + <div class="panel-heading">
  19 + <h3 class="panel-title">{{course}}</h3>
  20 + </div>
  21 +
  22 + <div class="panel-body">
  23 + {% for category in subject_categories %}
  24 + <div class="row">
  25 + <div class="col-md-12 col-sm-12">
  26 + <a href="" class="btn btn-default text-left">{{subject}}</a>
  27 + </div>
  28 + </div>
  29 + {% endfor %}
  30 + </div>
  31 + </div>
  32 +
  33 + {% if user|has_role:'system_admin' or user|has_role:'professor' %}
  34 + <a href="" class="btn btn-primary btn-md btn-block">{% trans "Create Subject Category" %}</a>
  35 + {% endif %}
  36 +{% endblock %}
  37 +
  38 +{% block content %}
  39 + <div class="panel panel-info">
  40 + <div class="panel-heading">
  41 + <div class="row">
  42 + <div class="col-md-7 col-sm-7">
  43 + <h3>{{subject}}</h3>
  44 + </div>
  45 + <div class="col-md-2 col-sm-2">
  46 + {% if user|has_role:'system_admin' or user in subject.professors %}
  47 + <a href="" class="btn">{% trans "edit" %}</a>
  48 + {% endif %}
  49 + </div>
  50 + <div class="col-md-3 col-sm-3">
  51 + {% if user|has_role:'system_admin' or user in subject.professors %}
  52 + <a href="" class="btn">{% trans "delete" %}</a>
  53 + {% endif %}
  54 + </div>
  55 + </div>
  56 + </div>
  57 + <div class="panel-body">
  58 + <p>
  59 + {{subject.description|linebreaks}}
  60 + </p>
  61 + </div>
  62 + </div>
  63 +
  64 +
  65 +{% endblock %}
  66 +
  67 +{% block rightbar %}
  68 +
  69 + <div class="panel panel-warning">
  70 + <div class="panel-heading">
  71 + <h3 class="panel-title">{% trans "Pending Stuffs" %}</h3>
  72 + </div>
  73 + <div class="panel-body">
  74 +
  75 + </div>
  76 + </div>
  77 +{% endblock rightbar %}
0 78 \ No newline at end of file
... ...
courses/urls.py
... ... @@ -20,5 +20,6 @@ urlpatterns = [
20 20 url(r'^subjects/delete/(?P<slug>[\w_-]+)/$', views.DeleteSubjectView.as_view(), name='delete_subject'),
21 21 url(r'^topics/create/(?P<slug>[\w_-]+)/$', views.CreateTopicView.as_view(), name='create_topic'),
22 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 + url(r'^topics/(?P<slug>[\w_-]+)/$', views.TopicsView.as_view(), name='view_topic'),
  24 + url(r'^subjects/categories$',views.IndexSubjectCategoryView.as_view(), name='subject_category_index'),
24 25 ]
... ...
courses/views.py
... ... @@ -12,7 +12,7 @@ from django.db.models import Q
12 12 from rolepermissions.verifications import has_object_permission
13 13  
14 14 from .forms import CourseForm, UpdateCourseForm, CategoryForm, SubjectForm,TopicForm
15   -from .models import Course, Subject, Category,Topic
  15 +from .models import Course, Subject, Category,Topic, SubjectCategory
16 16 from core.mixins import NotificationMixin
17 17 from users.models import User
18 18  
... ... @@ -441,3 +441,16 @@ class DeleteSubjectView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView):
441 441  
442 442 def get_success_url(self):
443 443 return reverse_lazy('course:view', kwargs={'slug' : self.object.course.slug})
  444 +
  445 +class IndexSubjectCategoryView(LoginRequiredMixin, generic.ListView):
  446 + allowed_roles = ['professor', 'system_admin']
  447 + login_url = reverse_lazy("core:home")
  448 + redirect_field_name = 'next'
  449 + model = SubjectCategory
  450 + template_name = 'subject_category/index.html'
  451 + paginate_by = 10
  452 +
  453 + def get_context_data(self, **kwargs):
  454 + context = super(IndexSubjectCategoryView, self).get_context_data(**kwargs)
  455 + context['subject_categories'] = SubjectCategory.objects.all()
  456 + return context
444 457 \ No newline at end of file
... ...