diff --git a/amadeus/settings.py b/amadeus/settings.py index df078e5..1375de7 100644 --- a/amadeus/settings.py +++ b/amadeus/settings.py @@ -55,7 +55,7 @@ INSTALLED_APPS = [ 'users', 'notifications', 'log', - 'courses' + 'categories' ] MIDDLEWARE_CLASSES = [ diff --git a/amadeus/urls.py b/amadeus/urls.py index 7d46856..47add98 100644 --- a/amadeus/urls.py +++ b/amadeus/urls.py @@ -25,7 +25,7 @@ urlpatterns = [ url(r'^users/', include('users.urls', namespace = 'users')), url(r'^admin/', admin.site.urls), url(r'^$', index, name = 'home'), - url(r'^courses/', include('courses.urls', namespace = 'courses')), + url(r'^categories/', include('categories.urls', namespace = 'categories')), #API url(r'^o/', include('oauth2_provider.urls', namespace='oauth2_provider')), #S3Direct diff --git a/amadeus/views.py b/amadeus/views.py index 1f6b34e..3e5adc9 100644 --- a/amadeus/views.py +++ b/amadeus/views.py @@ -3,6 +3,6 @@ from django.shortcuts import redirect def index(request): if request.user.is_authenticated: - return redirect('courses:index') + return redirect('categories:index') else: return redirect('users:login') \ No newline at end of file diff --git a/categories/__init__.py b/categories/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/categories/__init__.py diff --git a/categories/admin.py b/categories/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/categories/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/categories/apps.py b/categories/apps.py new file mode 100644 index 0000000..559d48c --- /dev/null +++ b/categories/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CourseConfig(AppConfig): + name = 'categories' diff --git a/categories/forms.py b/categories/forms.py new file mode 100644 index 0000000..f2e13ae --- /dev/null +++ b/categories/forms.py @@ -0,0 +1,7 @@ +from django import forms +from .models import Category + +class CategoryForm(forms.ModelForm): + class Meta: + model = Category + fields = ('category_father', 'name', 'description', 'visible', 'coordinators', ) diff --git a/categories/migrations/0001_initial.py b/categories/migrations/0001_initial.py new file mode 100644 index 0000000..4a1e5cc --- /dev/null +++ b/categories/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10 on 2016-12-21 03:51 +from __future__ import unicode_literals + +import autoslug.fields +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='Name')), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')), + ('description', models.CharField(max_length=300, verbose_name='description')), + ('visible', models.BooleanField(verbose_name='visible')), + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), + ('modified_date', models.DateTimeField(auto_now_add=True, verbose_name='Modified Date')), + ('category_father', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_parent', to='categories.Category')), + ('coordinators', models.ManyToManyField(related_name='coordinators', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Categories', + 'verbose_name': 'Category', + }, + ), + ] diff --git a/categories/migrations/__init__.py b/categories/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/categories/migrations/__init__.py diff --git a/categories/models.py b/categories/models.py new file mode 100644 index 0000000..18d9d7c --- /dev/null +++ b/categories/models.py @@ -0,0 +1,23 @@ +from django.db import models +from autoslug.fields import AutoSlugField +from django.utils.translation import ugettext_lazy as _ +from users.models import User + +class Category(models.Model): + """Represents a Course """ + + category_father = models.ForeignKey('Category', related_name =_("category_parent"), on_delete = models.CASCADE) + name = models.CharField(_("Name"), max_length = 100) + slug = AutoSlugField(_("Slug"),populate_from='name',unique=True) + description = models.CharField(_("description"), max_length = 300) + visible = models.BooleanField(_("visible")) + coordinators = models.ManyToManyField(User, related_name = _("coordinators")) + create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) + modified_date = models.DateTimeField(_('Modified Date'), auto_now_add = True) + + class Meta: + verbose_name = _('Category') + verbose_name_plural = _('Categories') + + def __str__(self): + return self.name \ No newline at end of file diff --git a/categories/runtests.py b/categories/runtests.py new file mode 100644 index 0000000..6859ee8 --- /dev/null +++ b/categories/runtests.py @@ -0,0 +1,14 @@ +import os +import sys + +import django +from django.conf import settings +from django.test.utils import get_runner + +if __name__ == "__main__": + os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings' + django.setup() + TestRunner = get_runner(settings) + test_runner = TestRunner() + failures = test_runner.run_tests(["tests"]) + sys.exit(bool(failures)) \ No newline at end of file diff --git a/categories/templates/categories/create.html b/categories/templates/categories/create.html new file mode 100644 index 0000000..2fc6aa7 --- /dev/null +++ b/categories/templates/categories/create.html @@ -0,0 +1,64 @@ +{% extends 'course/index.html' %} + +{% load widget_tweaks static i18n permission_tags django_bootstrap_breadcrumbs %} + +{% block breadcrumbs %} + {{ block.super }} + {% breadcrumb 'Create Course' 'course:create' %} +{% endblock %} + +{% block content %} +
+
+
+ {% csrf_token %} + {% for field in form %} +
+ {% if field.auto_id != 'id_public' %} + + {% endif %} + {% 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'%} + + {% elif field.auto_id == 'id_public' %} +
+ +
+ {% else %} + {% render_field field class='form-control' %} + {% endif %} + {{ field.help_text }} + {% if field.errors %} +
+
+ +
+ {% endif %} +
+ {% endfor %} +
+ +
+
+
+
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/categories/templates/categories/home.html b/categories/templates/categories/home.html new file mode 100755 index 0000000..4a28119 --- /dev/null +++ b/categories/templates/categories/home.html @@ -0,0 +1,33 @@ +{% extends 'base.html' %} + +{% load static i18n django_bootstrap_breadcrumbs permission_tags %} + + + +{% block breadcrumbs %} + {% clear_breadcrumbs %} + {% breadcrumb 'Home' 'app:index' %} +{% endblock %} + + +{% block render_breadcrumbs %} + {% render_breadcrumbs %} +{% endblock %} + +{% block content %} + {% if user|has_role:'system_admin' %} +

{% trans 'categories' %}

+
+ {% include page_template %} +
+ {% else %} +
+ {% include page_template %} +
+ {% endif %} + +{% endblock %} diff --git a/categories/templates/categories/home_admin_content.html b/categories/templates/categories/home_admin_content.html new file mode 100755 index 0000000..0ac29ac --- /dev/null +++ b/categories/templates/categories/home_admin_content.html @@ -0,0 +1,8 @@ +{% load static i18n %} + +{% for course in objects %} +
+

{{ course }}

+ {% trans 'Edit' %} +
+{% endfor %} diff --git a/categories/templates/categories/home_teacher_student_content.html b/categories/templates/categories/home_teacher_student_content.html new file mode 100755 index 0000000..c98ccb3 --- /dev/null +++ b/categories/templates/categories/home_teacher_student_content.html @@ -0,0 +1,20 @@ +{% load static i18n %} + +{% for notification in objects %} + + +
+ +
+
+ +
+
+

{{ notification.actor.username }}

+

{{notification.message}} {% trans 'at' %} : {{ notification.action_resource.resource.name }}

+

{{ notification.datetime|timesince }} {% trans "ago" %}

+
+
+
+{% endfor %} + diff --git a/categories/templates/categories/list.html b/categories/templates/categories/list.html new file mode 100755 index 0000000..8f55800 --- /dev/null +++ b/categories/templates/categories/list.html @@ -0,0 +1,67 @@ +{% extends 'home.html' %} + +{% load static i18n permission_tags %} +{% load django_bootstrap_breadcrumbs %} + +{% block javascript%} + {{ block.super }} +{% endblock%} + +{% block breadcrumbs %} + +{{ block.super }} +{% breadcrumb 'categories' 'course:manage' %} + +{% endblock %} + +{% block content %} +{% if messages %} +{% for message in messages %} + +{% endfor %} +{% endif %} + +
+
+
+
+ +
+ + + +
+
+
+ +
+ {% for category in categorys_categories %} +
+
+
+
+ +
+
+
+ {% for course in category.course_category %} + {% include "course/course_card.html" %} + {% endfor %} +
+
+
+ {% endfor %} +
+ + +{% endblock %} diff --git a/categories/tests/__init__.py b/categories/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/categories/tests/__init__.py diff --git a/categories/tests/test_views.py b/categories/tests/test_views.py new file mode 100644 index 0000000..a93c226 --- /dev/null +++ b/categories/tests/test_views.py @@ -0,0 +1,29 @@ +from django.test import TestCase, RequestFactory +from users.models import User +from django.contrib.auth.models import AnonymousUser +from .. import views + +class Index_Test(TestCase): + + def setUp(self): + self.factory = RequestFactory() + self.user = User.objects.create(username="felipe", email="felipe.bormann@gmail.com", password="teste") + + def test_index_get_auth(self): + request = self.factory.get('categories/') + + request.user = self.user + + response = views.IndexView.as_view()(request) + + self.assertEqual(response.status_code, 200) + + def test_index_get_unauth(self): + + request = self.factory.get('categories/') + + request.user = AnonymousUser() + + response = views.IndexView.as_view()(request) + + self.assertEqual(response.status_code, 302) #Which means it is been redirected to login page \ No newline at end of file diff --git a/categories/urls.py b/categories/urls.py new file mode 100644 index 0000000..c416d2f --- /dev/null +++ b/categories/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url +from . import views + +urlpatterns = [ + url(r'^$', views.IndexView.as_view(), name='index'), + +] \ No newline at end of file diff --git a/categories/views.py b/categories/views.py new file mode 100644 index 0000000..e1f1303 --- /dev/null +++ b/categories/views.py @@ -0,0 +1,69 @@ +from django.shortcuts import render +from django.views.generic import ListView, CreateView +from .models import Category +from django.core.urlresolvers import reverse_lazy +from rolepermissions.verifications import has_role + +from django.utils.translation import ugettext_lazy as _ + +from django.contrib.auth.mixins import LoginRequiredMixin + +from rolepermissions.mixins import HasRoleMixin +from .forms import CategoryForm + +class IndexView(LoginRequiredMixin, ListView): + + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + queryset = Category.objects.all() + template_name = 'categories/home.html' + context_object_name = 'categories' + + + def get_queryset(self): + result = super(IndexView, self).get_queryset() + + + return result + + def render_to_response(self, context, **response_kwargs): + if self.request.user.is_staff: + context['page_template'] = "categories/home_admin_content.html" + else: + context['page_template'] = "categories/home_teacher_student_content.html" + + context['title'] = _('Home') + + if self.request.is_ajax(): + if self.request.user.is_staff: + self.template_name = "home_admin_content.html" + else: + self.template_name = "home_teacher_student_content.html" + + return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs) + + def get_context_data(self, **kwargs): + context = super(IndexView, self).get_context_data(**kwargs) + list_categories = None + if has_role(self.request.user,'system_admin'): + list_categories = self.get_queryset().order_by('name') + # categorys_categories = CourseCategory.objects.all() + elif has_role(self.request.user,'professor'): + pass + #list_categories = self.get_queryset().filter(professors__in = [self.request.user]).order_by('name') + # categorys_categories = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct() + elif has_role(self.request.user, 'student'): + pass + #list_categories = self.get_queryset().filter(students__in = [self.request.user]).order_by('name') + + + context['title'] = _('Categories') + + return context + +class createCategory(HasRoleMixin, CreateView): + + allowed_rules = ['system_admin'] + login_url = reverse_lazy('users:login') + form_class = CategoryForm + template_name = 'categories/create.html' diff --git a/courses/__init__.py b/courses/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/courses/__init__.py +++ /dev/null diff --git a/courses/admin.py b/courses/admin.py deleted file mode 100644 index 8c38f3f..0000000 --- a/courses/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/courses/apps.py b/courses/apps.py deleted file mode 100644 index f41d025..0000000 --- a/courses/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class CourseConfig(AppConfig): - name = 'courses' diff --git a/courses/migrations/0001_initial.py b/courses/migrations/0001_initial.py deleted file mode 100644 index 62b0ce7..0000000 --- a/courses/migrations/0001_initial.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10 on 2016-12-21 03:51 -from __future__ import unicode_literals - -import autoslug.fields -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100, verbose_name='Name')), - ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='name', unique=True, verbose_name='Slug')), - ('description', models.CharField(max_length=300, verbose_name='description')), - ('visible', models.BooleanField(verbose_name='visible')), - ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Creation Date')), - ('modified_date', models.DateTimeField(auto_now_add=True, verbose_name='Modified Date')), - ('category_father', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_parent', to='courses.Category')), - ('coordinators', models.ManyToManyField(related_name='coordinators', to=settings.AUTH_USER_MODEL)), - ], - options={ - 'verbose_name_plural': 'Categories', - 'verbose_name': 'Category', - }, - ), - ] diff --git a/courses/migrations/__init__.py b/courses/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/courses/migrations/__init__.py +++ /dev/null diff --git a/courses/models.py b/courses/models.py deleted file mode 100644 index 18d9d7c..0000000 --- a/courses/models.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.db import models -from autoslug.fields import AutoSlugField -from django.utils.translation import ugettext_lazy as _ -from users.models import User - -class Category(models.Model): - """Represents a Course """ - - category_father = models.ForeignKey('Category', related_name =_("category_parent"), on_delete = models.CASCADE) - name = models.CharField(_("Name"), max_length = 100) - slug = AutoSlugField(_("Slug"),populate_from='name',unique=True) - description = models.CharField(_("description"), max_length = 300) - visible = models.BooleanField(_("visible")) - coordinators = models.ManyToManyField(User, related_name = _("coordinators")) - create_date = models.DateTimeField(_('Creation Date'), auto_now_add = True) - modified_date = models.DateTimeField(_('Modified Date'), auto_now_add = True) - - class Meta: - verbose_name = _('Category') - verbose_name_plural = _('Categories') - - def __str__(self): - return self.name \ No newline at end of file diff --git a/courses/runtests.py b/courses/runtests.py deleted file mode 100644 index 6859ee8..0000000 --- a/courses/runtests.py +++ /dev/null @@ -1,14 +0,0 @@ -import os -import sys - -import django -from django.conf import settings -from django.test.utils import get_runner - -if __name__ == "__main__": - os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings' - django.setup() - TestRunner = get_runner(settings) - test_runner = TestRunner() - failures = test_runner.run_tests(["tests"]) - sys.exit(bool(failures)) \ No newline at end of file diff --git a/courses/templates/courses/home.html b/courses/templates/courses/home.html deleted file mode 100755 index af0e028..0000000 --- a/courses/templates/courses/home.html +++ /dev/null @@ -1,33 +0,0 @@ -{% extends 'base.html' %} - -{% load static i18n django_bootstrap_breadcrumbs permission_tags %} - - - -{% block breadcrumbs %} - {% clear_breadcrumbs %} - {% breadcrumb 'Home' 'app:index' %} -{% endblock %} - - -{% block render_breadcrumbs %} - {% render_breadcrumbs %} -{% endblock %} - -{% block content %} - {% if user|has_role:'system_admin' %} -

{% trans 'Courses' %}

-
- {% include page_template %} -
- {% else %} -
- {% include page_template %} -
- {% endif %} - -{% endblock %} diff --git a/courses/templates/courses/home_admin_content.html b/courses/templates/courses/home_admin_content.html deleted file mode 100755 index 0ac29ac..0000000 --- a/courses/templates/courses/home_admin_content.html +++ /dev/null @@ -1,8 +0,0 @@ -{% load static i18n %} - -{% for course in objects %} -
-

{{ course }}

- {% trans 'Edit' %} -
-{% endfor %} diff --git a/courses/templates/courses/home_teacher_student_content.html b/courses/templates/courses/home_teacher_student_content.html deleted file mode 100755 index c98ccb3..0000000 --- a/courses/templates/courses/home_teacher_student_content.html +++ /dev/null @@ -1,20 +0,0 @@ -{% load static i18n %} - -{% for notification in objects %} - - -
- -
-
- -
-
-

{{ notification.actor.username }}

-

{{notification.message}} {% trans 'at' %} : {{ notification.action_resource.resource.name }}

-

{{ notification.datetime|timesince }} {% trans "ago" %}

-
-
-
-{% endfor %} - diff --git a/courses/templates/courses/list.html b/courses/templates/courses/list.html deleted file mode 100755 index e225fb9..0000000 --- a/courses/templates/courses/list.html +++ /dev/null @@ -1,66 +0,0 @@ -{% extends 'home.html' %} - -{% load static i18n permission_tags %} -{% load django_bootstrap_breadcrumbs %} - -{% block javascript%} - {{ block.super }} -{% endblock%} - -{% block breadcrumbs %} - -{{ block.super }} -{% breadcrumb 'Courses' 'course:manage' %} - -{% endblock %} - -{% block content %} -{% if messages %} -{% for message in messages %} - -{% endfor %} -{% endif %} - -
-
-
-
- -
- - - -
-
-
-
- {% for category in categorys_courses %} -
-
-
-
- -
-
-
- {% for course in category.course_category %} - {% include "course/course_card.html" %} - {% endfor %} -
-
-
- {% endfor %} -
- - -{% endblock %} diff --git a/courses/tests/__init__.py b/courses/tests/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/courses/tests/__init__.py +++ /dev/null diff --git a/courses/tests/test_views.py b/courses/tests/test_views.py deleted file mode 100644 index 7f44af4..0000000 --- a/courses/tests/test_views.py +++ /dev/null @@ -1,29 +0,0 @@ -from django.test import TestCase, RequestFactory -from users.models import User -from django.contrib.auth.models import AnonymousUser -from .. import views - -class Index_Test(TestCase): - - def setUp(self): - self.factory = RequestFactory() - self.user = User.objects.create(username="felipe", email="felipe.bormann@gmail.com", password="teste") - - def test_index_get_auth(self): - request = self.factory.get('courses/') - - request.user = self.user - - response = views.IndexView.as_view()(request) - - self.assertEqual(response.status_code, 200) - - def test_index_get_unauth(self): - - request = self.factory.get('courses/') - - request.user = AnonymousUser() - - response = views.IndexView.as_view()(request) - - self.assertEqual(response.status_code, 302) #Which means it is been redirected to login page \ No newline at end of file diff --git a/courses/urls.py b/courses/urls.py deleted file mode 100644 index c416d2f..0000000 --- a/courses/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.conf.urls import url -from . import views - -urlpatterns = [ - url(r'^$', views.IndexView.as_view(), name='index'), - -] \ No newline at end of file diff --git a/courses/views.py b/courses/views.py deleted file mode 100644 index 8cdf51d..0000000 --- a/courses/views.py +++ /dev/null @@ -1,60 +0,0 @@ -from django.shortcuts import render -from django.views.generic import ListView -from .models import Category -from django.core.urlresolvers import reverse_lazy -from rolepermissions.verifications import has_role - -from django.utils.translation import ugettext_lazy as _ - -from django.contrib.auth.mixins import LoginRequiredMixin - -class IndexView(LoginRequiredMixin, ListView): - - login_url = reverse_lazy("users:login") - redirect_field_name = 'next' - queryset = Category.objects.all() - template_name = 'courses/home.html' - context_object_name = 'categories' - - - def get_queryset(self): - result = super(IndexView, self).get_queryset() - - - return result - - def render_to_response(self, context, **response_kwargs): - if self.request.user.is_staff: - context['page_template'] = "courses/home_admin_content.html" - else: - context['page_template'] = "courses/home_teacher_student_content.html" - - context['title'] = _('Home') - - if self.request.is_ajax(): - if self.request.user.is_staff: - self.template_name = "home_admin_content.html" - else: - self.template_name = "home_teacher_student_content.html" - - return self.response_class(request = self.request, template = self.template_name, context = context, using = self.template_engine, **response_kwargs) - - def get_context_data(self, **kwargs): - context = super(IndexView, self).get_context_data(**kwargs) - list_courses = None - if has_role(self.request.user,'system_admin'): - list_courses = self.get_queryset().order_by('name') - # categorys_courses = CourseCategory.objects.all() - elif has_role(self.request.user,'professor'): - pass - #list_courses = self.get_queryset().filter(professors__in = [self.request.user]).order_by('name') - # categorys_courses = CourseCategory.objects.filter(course_category__professors__name = self.request.user.name).distinct() - elif has_role(self.request.user, 'student'): - pass - #list_courses = self.get_queryset().filter(students__in = [self.request.user]).order_by('name') - - - context['title'] = _('Categories') - - return context - -- libgit2 0.21.2