Commit e6860b2cd2d91bbb9e36638b724863ab943ff05e

Authored by Felipe Henrique de Almeida Bormann
1 parent 3d05b2c1

renamed courses app for categories

amadeus/settings.py
... ... @@ -55,7 +55,7 @@ INSTALLED_APPS = [
55 55 'users',
56 56 'notifications',
57 57 'log',
58   - 'courses'
  58 + 'categories'
59 59 ]
60 60  
61 61 MIDDLEWARE_CLASSES = [
... ...
amadeus/urls.py
... ... @@ -25,7 +25,7 @@ urlpatterns = [
25 25 url(r'^users/', include('users.urls', namespace = 'users')),
26 26 url(r'^admin/', admin.site.urls),
27 27 url(r'^$', index, name = 'home'),
28   - url(r'^courses/', include('courses.urls', namespace = 'courses')),
  28 + url(r'^categories/', include('categories.urls', namespace = 'categories')),
29 29 #API
30 30 url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
31 31 #S3Direct
... ...
amadeus/views.py
... ... @@ -3,6 +3,6 @@ from django.shortcuts import redirect
3 3  
4 4 def index(request):
5 5 if request.user.is_authenticated:
6   - return redirect('courses:index')
  6 + return redirect('categories:index')
7 7 else:
8 8 return redirect('users:login')
9 9 \ No newline at end of file
... ...
categories/__init__.py 0 → 100644
categories/admin.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
... ...
categories/apps.py 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +from django.apps import AppConfig
  2 +
  3 +
  4 +class CourseConfig(AppConfig):
  5 + name = 'categories'
... ...
categories/forms.py 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +from django import forms
  2 +from .models import Category
  3 +
  4 +class CategoryForm(forms.ModelForm):
  5 + class Meta:
  6 + model = Category
  7 + fields = ('category_father', 'name', 'description', 'visible', 'coordinators', )
... ...
categories/migrations/0001_initial.py 0 → 100644
... ... @@ -0,0 +1,38 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-12-21 03:51
  3 +from __future__ import unicode_literals
  4 +
  5 +import autoslug.fields
  6 +from django.conf import settings
  7 +from django.db import migrations, models
  8 +import django.db.models.deletion
  9 +
  10 +
  11 +class Migration(migrations.Migration):
  12 +
  13 + initial = True
  14 +
  15 + dependencies = [
  16 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  17 + ]
  18 +
  19 + operations = [
  20 + migrations.CreateModel(
  21 + name='Category',
  22 + fields=[
  23 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  24 + ('name', models.CharField(max_length=100, verbose_name='Name')),
  25 + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')),
  26 + ('description', models.CharField(max_length=300, verbose_name='description')),
  27 + ('visible', models.BooleanField(verbose_name='visible')),
  28 + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')),
  29 + ('modified_date', models.DateTimeField(auto_now_add=True, verbose_name='Modified Date')),
  30 + ('category_father', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_parent', to='categories.Category')),
  31 + ('coordinators', models.ManyToManyField(related_name='coordinators', to=settings.AUTH_USER_MODEL)),
  32 + ],
  33 + options={
  34 + 'verbose_name_plural': 'Categories',
  35 + 'verbose_name': 'Category',
  36 + },
  37 + ),
  38 + ]
... ...
categories/migrations/__init__.py 0 → 100644
categories/models.py 0 → 100644
... ... @@ -0,0 +1,23 @@
  1 +from django.db import models
  2 +from autoslug.fields import AutoSlugField
  3 +from django.utils.translation import ugettext_lazy as _
  4 +from users.models import User
  5 +
  6 +class Category(models.Model):
  7 + """Represents a Course """
  8 +
  9 + category_father = models.ForeignKey('Category', related_name =_("category_parent"), on_delete = models.CASCADE)
  10 + name = models.CharField(_("Name"), max_length = 100)
  11 + slug = AutoSlugField(_("Slug"),populate_from='name',unique=True)
  12 + description = models.CharField(_("description"), max_length = 300)
  13 + visible = models.BooleanField(_("visible"))
  14 + coordinators = models.ManyToManyField(User, related_name = _("coordinators"))
  15 + create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
  16 + modified_date = models.DateTimeField(_('Modified Date'), auto_now_add = True)
  17 +
  18 + class Meta:
  19 + verbose_name = _('Category')
  20 + verbose_name_plural = _('Categories')
  21 +
  22 + def __str__(self):
  23 + return self.name
0 24 \ No newline at end of file
... ...
categories/runtests.py 0 → 100644
... ... @@ -0,0 +1,14 @@
  1 +import os
  2 +import sys
  3 +
  4 +import django
  5 +from django.conf import settings
  6 +from django.test.utils import get_runner
  7 +
  8 +if __name__ == "__main__":
  9 + os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
  10 + django.setup()
  11 + TestRunner = get_runner(settings)
  12 + test_runner = TestRunner()
  13 + failures = test_runner.run_tests(["tests"])
  14 + sys.exit(bool(failures))
0 15 \ No newline at end of file
... ...
categories/templates/categories/create.html 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +{% extends 'course/index.html' %}
  2 +
  3 +{% load widget_tweaks static i18n permission_tags django_bootstrap_breadcrumbs %}
  4 +
  5 +{% block breadcrumbs %}
  6 + {{ block.super }}
  7 + {% breadcrumb 'Create Course' 'course:create' %}
  8 +{% endblock %}
  9 +
  10 +{% block content %}
  11 +<div class="card card-content">
  12 + <div class="card-body">
  13 + <form method="post" action="" enctype="multipart/form-data">
  14 + {% csrf_token %}
  15 + {% for field in form %}
  16 + <div class="form-group {% if form.has_error %} has-error {% endif %} is-fileinput">
  17 + {% if field.auto_id != 'id_public' %}
  18 + <label for="{{ field.auto_id }}">{{ field.label }}</label>
  19 + {% endif %}
  20 + {% if field.auto_id == 'id_init_register_date' or field.auto_id == 'id_end_register_date' or field.auto_id == 'id_init_date' or field.auto_id == 'id_end_date'%}
  21 + <input type="text" class="form-control date-picker" name="{{field.name}}" value="{{field.value|date}}" min="{{now|date:'SHORT_DATE_FORMAT'}}">
  22 + {% elif field.auto_id == 'id_public' %}
  23 + <div class="checkbox">
  24 + <label>
  25 + <input type="checkbox" name="{{field.name}}" {% if field.value %}checked="checked"{% endif %}><span class="checkbox-material"></span> {{field.name}}
  26 + </label>
  27 + </div>
  28 + {% else %}
  29 + {% render_field field class='form-control' %}
  30 + {% endif %}
  31 + <span class="help-block">{{ field.help_text }}</span>
  32 + {% if field.errors %}
  33 + <div class="row">
  34 + </br>
  35 + <div class="alert alert-danger alert-dismissible" role="alert">
  36 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  37 + <span aria-hidden="true">&times;</span>
  38 + </button>
  39 + <ul>
  40 + {% for error in field.errors %}
  41 + <li>{{ error }}</li>
  42 + {% endfor %}
  43 + </ul>
  44 + </div>
  45 + </div>
  46 + {% endif %}
  47 + </div>
  48 + {% endfor %}
  49 + <div class="row text-center">
  50 + <input type="submit" value="{% trans 'Create' %}" class="btn btn-primary btn-raised" />
  51 + </div>
  52 + </form>
  53 + </div>
  54 +</div>
  55 +</br>
  56 +</br>
  57 +</br>
  58 +<script type="text/javascript">
  59 + var locale = navigator.language || navigator.userLanguage;
  60 + $('.date-picker').datepicker({
  61 + language: locale,
  62 + });
  63 +</script>
  64 +{% endblock %}
0 65 \ No newline at end of file
... ...
categories/templates/categories/home.html 0 → 100755
... ... @@ -0,0 +1,33 @@
  1 +{% extends 'base.html' %}
  2 +
  3 +{% load static i18n django_bootstrap_breadcrumbs permission_tags %}
  4 +
  5 +
  6 +
  7 +{% block breadcrumbs %}
  8 + {% clear_breadcrumbs %}
  9 + {% breadcrumb 'Home' 'app:index' %}
  10 +{% endblock %}
  11 +
  12 +
  13 +{% block render_breadcrumbs %}
  14 + {% render_breadcrumbs %}
  15 +{% endblock %}
  16 +
  17 +{% block content %}
  18 + {% if user|has_role:'system_admin' %}
  19 + <h3>{% trans 'categories' %}</h3>
  20 + <div id="timeline">
  21 + {% include page_template %}
  22 + </div>
  23 + {% else %}
  24 + <div id="timeline">
  25 + {% include page_template %}
  26 + </div>
  27 + {% endif %}
  28 + <div id="loading" class="alert alert-primary" role="alert" style="display: none">
  29 + <center>
  30 + <span class="fa fa-spin fa-circle-o-notch"></span>
  31 + </center>
  32 + </div>
  33 +{% endblock %}
... ...
categories/templates/categories/home_admin_content.html 0 → 100755
... ... @@ -0,0 +1,8 @@
  1 +{% load static i18n %}
  2 +
  3 +{% for course in objects %}
  4 + <div class="panel panel-default courseHome">
  5 + <br><h4>{{ course }}</h4>
  6 + <a href="#" class="btn btn-outline-info">{% trans 'Edit' %}</a>
  7 + </div>
  8 +{% endfor %}
... ...
categories/templates/categories/home_teacher_student_content.html 0 → 100755
... ... @@ -0,0 +1,20 @@
  1 +{% load static i18n %}
  2 +
  3 +{% for notification in objects %}
  4 +
  5 +
  6 + <div class="well timeLine">
  7 +
  8 + <div class="row">
  9 + <div class="col-xs-2 col-md-1">
  10 + <img class="imgTimeLine" src="{{ notification.actor.image_url }}">
  11 + </div>
  12 + <div class="col-xs-10 col-md-11">
  13 + <h4 class="resource_inline"><b>{{ notification.actor.username }}</b></h4>
  14 + <p class="resource_inline">{{notification.message}} {% trans 'at' %} : <a href="#">{{ notification.action_resource.resource.name }}</a></p>
  15 + <p class="timePost"><i> {{ notification.datetime|timesince }} {% trans "ago" %} </i></p>
  16 + </div>
  17 + </div>
  18 +</div>
  19 +{% endfor %}
  20 +
... ...
categories/templates/categories/list.html 0 → 100755
... ... @@ -0,0 +1,67 @@
  1 +{% extends 'home.html' %}
  2 +
  3 +{% load static i18n permission_tags %}
  4 +{% load django_bootstrap_breadcrumbs %}
  5 +
  6 +{% block javascript%}
  7 + {{ block.super }}
  8 +{% endblock%}
  9 +
  10 +{% block breadcrumbs %}
  11 +
  12 +{{ block.super }}
  13 +{% breadcrumb 'categories' 'course:manage' %}
  14 +
  15 +{% endblock %}
  16 +
  17 +{% block content %}
  18 +{% if messages %}
  19 +{% for message in messages %}
  20 + <script type="text/javascript">
  21 + alertify.success('{{message}}');
  22 + </script>
  23 +{% endfor %}
  24 +{% endif %}
  25 +
  26 +<div class="col-md-12 cards-content">
  27 + <form id="searchform" method="get" accept-charset="utf-8">
  28 + <div class="input-group">
  29 + <div class="form-group is-empty">
  30 + <input type="text" class="form-control" placeholder="{% trans 'Search for categories' %}" name="q">
  31 + </div>
  32 + <span class="input-group-btn input-group-sm">
  33 + <button type="submit" class="btn btn-fab btn-fab-mini">
  34 + <i class="fa fa-search" aria-hidden="true"></i>
  35 + </button>
  36 + </span>
  37 + </div>
  38 + </form>
  39 +</div>
  40 +<!-- Code for listing categories -->
  41 +<div class="col-md-12 cards-content">
  42 + {% for category in categorys_categories %}
  43 + <div class="panel-group course-card-group">
  44 + <div class="panel panel-default">
  45 + <div class="panel-heading">
  46 + <div class="row">
  47 + <div class="col-md-12">
  48 + <h4 class="panel-title">
  49 + <a class="category-course-link" data-toggle="collapse" href="#{{category.slug}}">{{category.name}}</a>
  50 + </h4>
  51 + </div>
  52 + </div>
  53 + </div>
  54 + <div id="{{category.slug}}" class="panel-collapse collapse">
  55 + {% for course in category.course_category %}
  56 + {% include "course/course_card.html" %}
  57 + {% endfor %}
  58 + </div>
  59 + </div>
  60 + </div>
  61 + {% endfor %}
  62 +</div>
  63 +<div id="modal_course">
  64 +
  65 +</div>
  66 +<script type="text/javascript" src="{% static 'js/course.js' %}"></script>
  67 +{% endblock %}
... ...
categories/tests/__init__.py 0 → 100644
categories/tests/test_views.py 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +from django.test import TestCase, RequestFactory
  2 +from users.models import User
  3 +from django.contrib.auth.models import AnonymousUser
  4 +from .. import views
  5 +
  6 +class Index_Test(TestCase):
  7 +
  8 + def setUp(self):
  9 + self.factory = RequestFactory()
  10 + self.user = User.objects.create(username="felipe", email="felipe.bormann@gmail.com", password="teste")
  11 +
  12 + def test_index_get_auth(self):
  13 + request = self.factory.get('categories/')
  14 +
  15 + request.user = self.user
  16 +
  17 + response = views.IndexView.as_view()(request)
  18 +
  19 + self.assertEqual(response.status_code, 200)
  20 +
  21 + def test_index_get_unauth(self):
  22 +
  23 + request = self.factory.get('categories/')
  24 +
  25 + request.user = AnonymousUser()
  26 +
  27 + response = views.IndexView.as_view()(request)
  28 +
  29 + self.assertEqual(response.status_code, 302) #Which means it is been redirected to login page
0 30 \ No newline at end of file
... ...
categories/urls.py 0 → 100644
... ... @@ -0,0 +1,7 @@
  1 +from django.conf.urls import url
  2 +from . import views
  3 +
  4 +urlpatterns = [
  5 + url(r'^$', views.IndexView.as_view(), name='index'),
  6 +
  7 +]
0 8 \ No newline at end of file
... ...
categories/views.py 0 → 100644
... ... @@ -0,0 +1,69 @@
  1 +from django.shortcuts import render
  2 +from django.views.generic import ListView, CreateView
  3 +from .models import Category
  4 +from django.core.urlresolvers import reverse_lazy
  5 +from rolepermissions.verifications import has_role
  6 +
  7 +from django.utils.translation import ugettext_lazy as _
  8 +
  9 +from django.contrib.auth.mixins import LoginRequiredMixin
  10 +
  11 +from rolepermissions.mixins import HasRoleMixin
  12 +from .forms import CategoryForm
  13 +
  14 +class IndexView(LoginRequiredMixin, ListView):
  15 +
  16 + login_url = reverse_lazy("users:login")
  17 + redirect_field_name = 'next'
  18 + queryset = Category.objects.all()
  19 + template_name = 'categories/home.html'
  20 + context_object_name = 'categories'
  21 +
  22 +
  23 + def get_queryset(self):
  24 + result = super(IndexView, self).get_queryset()
  25 +
  26 +
  27 + return result
  28 +
  29 + def render_to_response(self, context, **response_kwargs):
  30 + if self.request.user.is_staff:
  31 + context['page_template'] = "categories/home_admin_content.html"
  32 + else:
  33 + context['page_template'] = "categories/home_teacher_student_content.html"
  34 +
  35 + context['title'] = _('Home')
  36 +
  37 + if self.request.is_ajax():
  38 + if self.request.user.is_staff:
  39 + self.template_name = "home_admin_content.html"
  40 + else:
  41 + self.template_name = "home_teacher_student_content.html"
  42 +
  43 + return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs)
  44 +
  45 + def get_context_data(self, **kwargs):
  46 + context = super(IndexView, self).get_context_data(**kwargs)
  47 + list_categories = None
  48 + if has_role(self.request.user,'system_admin'):
  49 + list_categories = self.get_queryset().order_by('name')
  50 + # categorys_categories = CourseCategory.objects.all()
  51 + elif has_role(self.request.user,'professor'):
  52 + pass
  53 + #list_categories = self.get_queryset().filter(professors__in = [self.request.user]).order_by('name')
  54 + # categorys_categories = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct()
  55 + elif has_role(self.request.user, 'student'):
  56 + pass
  57 + #list_categories = self.get_queryset().filter(students__in = [self.request.user]).order_by('name')
  58 +
  59 +
  60 + context['title'] = _('Categories')
  61 +
  62 + return context
  63 +
  64 +class createCategory(HasRoleMixin, CreateView):
  65 +
  66 + allowed_rules = ['system_admin']
  67 + login_url = reverse_lazy('users:login')
  68 + form_class = CategoryForm
  69 + template_name = 'categories/create.html'
... ...
courses/__init__.py
courses/admin.py
... ... @@ -1,3 +0,0 @@
1   -from django.contrib import admin
2   -
3   -# Register your models here.
courses/apps.py
... ... @@ -1,5 +0,0 @@
1   -from django.apps import AppConfig
2   -
3   -
4   -class CourseConfig(AppConfig):
5   - name = 'courses'
courses/migrations/0001_initial.py
... ... @@ -1,38 +0,0 @@
1   -# -*- coding: utf-8 -*-
2   -# Generated by Django 1.10 on 2016-12-21 03:51
3   -from __future__ import unicode_literals
4   -
5   -import autoslug.fields
6   -from django.conf import settings
7   -from django.db import migrations, models
8   -import django.db.models.deletion
9   -
10   -
11   -class Migration(migrations.Migration):
12   -
13   - initial = True
14   -
15   - dependencies = [
16   - migrations.swappable_dependency(settings.AUTH_USER_MODEL),
17   - ]
18   -
19   - operations = [
20   - migrations.CreateModel(
21   - name='Category',
22   - fields=[
23   - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
24   - ('name', models.CharField(max_length=100, verbose_name='Name')),
25   - ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')),
26   - ('description', models.CharField(max_length=300, verbose_name='description')),
27   - ('visible', models.BooleanField(verbose_name='visible')),
28   - ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')),
29   - ('modified_date', models.DateTimeField(auto_now_add=True, verbose_name='Modified Date')),
30   - ('category_father', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_parent', to='courses.Category')),
31   - ('coordinators', models.ManyToManyField(related_name='coordinators', to=settings.AUTH_USER_MODEL)),
32   - ],
33   - options={
34   - 'verbose_name_plural': 'Categories',
35   - 'verbose_name': 'Category',
36   - },
37   - ),
38   - ]
courses/migrations/__init__.py
courses/models.py
... ... @@ -1,23 +0,0 @@
1   -from django.db import models
2   -from autoslug.fields import AutoSlugField
3   -from django.utils.translation import ugettext_lazy as _
4   -from users.models import User
5   -
6   -class Category(models.Model):
7   - """Represents a Course """
8   -
9   - category_father = models.ForeignKey('Category', related_name =_("category_parent"), on_delete = models.CASCADE)
10   - name = models.CharField(_("Name"), max_length = 100)
11   - slug = AutoSlugField(_("Slug"),populate_from='name',unique=True)
12   - description = models.CharField(_("description"), max_length = 300)
13   - visible = models.BooleanField(_("visible"))
14   - coordinators = models.ManyToManyField(User, related_name = _("coordinators"))
15   - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True)
16   - modified_date = models.DateTimeField(_('Modified Date'), auto_now_add = True)
17   -
18   - class Meta:
19   - verbose_name = _('Category')
20   - verbose_name_plural = _('Categories')
21   -
22   - def __str__(self):
23   - return self.name
24 0 \ No newline at end of file
courses/runtests.py
... ... @@ -1,14 +0,0 @@
1   -import os
2   -import sys
3   -
4   -import django
5   -from django.conf import settings
6   -from django.test.utils import get_runner
7   -
8   -if __name__ == "__main__":
9   - os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
10   - django.setup()
11   - TestRunner = get_runner(settings)
12   - test_runner = TestRunner()
13   - failures = test_runner.run_tests(["tests"])
14   - sys.exit(bool(failures))
15 0 \ No newline at end of file
courses/templates/courses/home.html
... ... @@ -1,33 +0,0 @@
1   -{% extends 'base.html' %}
2   -
3   -{% load static i18n django_bootstrap_breadcrumbs permission_tags %}
4   -
5   -
6   -
7   -{% block breadcrumbs %}
8   - {% clear_breadcrumbs %}
9   - {% breadcrumb 'Home' 'app:index' %}
10   -{% endblock %}
11   -
12   -
13   -{% block render_breadcrumbs %}
14   - {% render_breadcrumbs %}
15   -{% endblock %}
16   -
17   -{% block content %}
18   - {% if user|has_role:'system_admin' %}
19   - <h3>{% trans 'Courses' %}</h3>
20   - <div id="timeline">
21   - {% include page_template %}
22   - </div>
23   - {% else %}
24   - <div id="timeline">
25   - {% include page_template %}
26   - </div>
27   - {% endif %}
28   - <div id="loading" class="alert alert-primary" role="alert" style="display: none">
29   - <center>
30   - <span class="fa fa-spin fa-circle-o-notch"></span>
31   - </center>
32   - </div>
33   -{% endblock %}
courses/templates/courses/home_admin_content.html
... ... @@ -1,8 +0,0 @@
1   -{% load static i18n %}
2   -
3   -{% for course in objects %}
4   - <div class="panel panel-default courseHome">
5   - <br><h4>{{ course }}</h4>
6   - <a href="#" class="btn btn-outline-info">{% trans 'Edit' %}</a>
7   - </div>
8   -{% endfor %}
courses/templates/courses/home_teacher_student_content.html
... ... @@ -1,20 +0,0 @@
1   -{% load static i18n %}
2   -
3   -{% for notification in objects %}
4   -
5   -
6   - <div class="well timeLine">
7   -
8   - <div class="row">
9   - <div class="col-xs-2 col-md-1">
10   - <img class="imgTimeLine" src="{{ notification.actor.image_url }}">
11   - </div>
12   - <div class="col-xs-10 col-md-11">
13   - <h4 class="resource_inline"><b>{{ notification.actor.username }}</b></h4>
14   - <p class="resource_inline">{{notification.message}} {% trans 'at' %} : <a href="#">{{ notification.action_resource.resource.name }}</a></p>
15   - <p class="timePost"><i> {{ notification.datetime|timesince }} {% trans "ago" %} </i></p>
16   - </div>
17   - </div>
18   -</div>
19   -{% endfor %}
20   -
courses/templates/courses/list.html
... ... @@ -1,66 +0,0 @@
1   -{% extends 'home.html' %}
2   -
3   -{% load static i18n permission_tags %}
4   -{% load django_bootstrap_breadcrumbs %}
5   -
6   -{% block javascript%}
7   - {{ block.super }}
8   -{% endblock%}
9   -
10   -{% block breadcrumbs %}
11   -
12   -{{ block.super }}
13   -{% breadcrumb 'Courses' 'course:manage' %}
14   -
15   -{% endblock %}
16   -
17   -{% block content %}
18   -{% if messages %}
19   -{% for message in messages %}
20   - <script type="text/javascript">
21   - alertify.success('{{message}}');
22   - </script>
23   -{% endfor %}
24   -{% endif %}
25   -
26   -<div class="col-md-12 cards-content">
27   - <form id="searchform" method="get" accept-charset="utf-8">
28   - <div class="input-group">
29   - <div class="form-group is-empty">
30   - <input type="text" class="form-control" placeholder="{% trans 'Search for Courses' %}" name="q">
31   - </div>
32   - <span class="input-group-btn input-group-sm">
33   - <button type="submit" class="btn btn-fab btn-fab-mini">
34   - <i class="fa fa-search" aria-hidden="true"></i>
35   - </button>
36   - </span>
37   - </div>
38   - </form>
39   -</div>
40   -<div class="col-md-12 cards-content">
41   - {% for category in categorys_courses %}
42   - <div class="panel-group course-card-group">
43   - <div class="panel panel-default">
44   - <div class="panel-heading">
45   - <div class="row">
46   - <div class="col-md-12">
47   - <h4 class="panel-title">
48   - <a class="category-course-link" data-toggle="collapse" href="#{{category.slug}}">{{category.name}}</a>
49   - </h4>
50   - </div>
51   - </div>
52   - </div>
53   - <div id="{{category.slug}}" class="panel-collapse collapse">
54   - {% for course in category.course_category %}
55   - {% include "course/course_card.html" %}
56   - {% endfor %}
57   - </div>
58   - </div>
59   - </div>
60   - {% endfor %}
61   -</div>
62   -<div id="modal_course">
63   -
64   -</div>
65   -<script type="text/javascript" src="{% static 'js/course.js' %}"></script>
66   -{% endblock %}
courses/tests/__init__.py
courses/tests/test_views.py
... ... @@ -1,29 +0,0 @@
1   -from django.test import TestCase, RequestFactory
2   -from users.models import User
3   -from django.contrib.auth.models import AnonymousUser
4   -from .. import views
5   -
6   -class Index_Test(TestCase):
7   -
8   - def setUp(self):
9   - self.factory = RequestFactory()
10   - self.user = User.objects.create(username="felipe", email="felipe.bormann@gmail.com", password="teste")
11   -
12   - def test_index_get_auth(self):
13   - request = self.factory.get('courses/')
14   -
15   - request.user = self.user
16   -
17   - response = views.IndexView.as_view()(request)
18   -
19   - self.assertEqual(response.status_code, 200)
20   -
21   - def test_index_get_unauth(self):
22   -
23   - request = self.factory.get('courses/')
24   -
25   - request.user = AnonymousUser()
26   -
27   - response = views.IndexView.as_view()(request)
28   -
29   - self.assertEqual(response.status_code, 302) #Which means it is been redirected to login page
30 0 \ No newline at end of file
courses/urls.py
... ... @@ -1,7 +0,0 @@
1   -from django.conf.urls import url
2   -from . import views
3   -
4   -urlpatterns = [
5   - url(r'^$', views.IndexView.as_view(), name='index'),
6   -
7   -]
8 0 \ No newline at end of file
courses/views.py
... ... @@ -1,60 +0,0 @@
1   -from django.shortcuts import render
2   -from django.views.generic import ListView
3   -from .models import Category
4   -from django.core.urlresolvers import reverse_lazy
5   -from rolepermissions.verifications import has_role
6   -
7   -from django.utils.translation import ugettext_lazy as _
8   -
9   -from django.contrib.auth.mixins import LoginRequiredMixin
10   -
11   -class IndexView(LoginRequiredMixin, ListView):
12   -
13   - login_url = reverse_lazy("users:login")
14   - redirect_field_name = 'next'
15   - queryset = Category.objects.all()
16   - template_name = 'courses/home.html'
17   - context_object_name = 'categories'
18   -
19   -
20   - def get_queryset(self):
21   - result = super(IndexView, self).get_queryset()
22   -
23   -
24   - return result
25   -
26   - def render_to_response(self, context, **response_kwargs):
27   - if self.request.user.is_staff:
28   - context['page_template'] = "courses/home_admin_content.html"
29   - else:
30   - context['page_template'] = "courses/home_teacher_student_content.html"
31   -
32   - context['title'] = _('Home')
33   -
34   - if self.request.is_ajax():
35   - if self.request.user.is_staff:
36   - self.template_name = "home_admin_content.html"
37   - else:
38   - self.template_name = "home_teacher_student_content.html"
39   -
40   - return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs)
41   -
42   - def get_context_data(self, **kwargs):
43   - context = super(IndexView, self).get_context_data(**kwargs)
44   - list_courses = None
45   - if has_role(self.request.user,'system_admin'):
46   - list_courses = self.get_queryset().order_by('name')
47   - # categorys_courses = CourseCategory.objects.all()
48   - elif has_role(self.request.user,'professor'):
49   - pass
50   - #list_courses = self.get_queryset().filter(professors__in = [self.request.user]).order_by('name')
51   - # categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct()
52   - elif has_role(self.request.user, 'student'):
53   - pass
54   - #list_courses = self.get_queryset().filter(students__in = [self.request.user]).order_by('name')
55   -
56   -
57   - context['title'] = _('Categories')
58   -
59   - return context
60   -