Commit fa30fa76b7cdfbb7fd0ceff4f475f1727c276c7a
1 parent
d6f77fae
Exists in
master
and in
5 other branches
Improved and made Mixin 100% functional, still need decorator and improve messages #41
Showing
10 changed files
with
110 additions
and
54 deletions
Show diff stats
app/views.py
@@ -28,40 +28,11 @@ class AppIndex(LoginRequiredMixin, LogMixin, TemplateView, NotificationMixin): | @@ -28,40 +28,11 @@ class AppIndex(LoginRequiredMixin, LogMixin, TemplateView, NotificationMixin): | ||
28 | context['courses'] = Course.objects.filter(user = self.request.user) | 28 | context['courses'] = Course.objects.filter(user = self.request.user) |
29 | 29 | ||
30 | context['title'] = 'Amadeus' | 30 | context['title'] = 'Amadeus' |
31 | - self.createNotification("teste") | ||
32 | - notifications = Notification.objects.filter(user= self.request.user, read=False) | 31 | + #super(AppIndex, self).createNotification("teste", not_resource="home", resource_link="users") |
33 | 32 | ||
33 | + notifications = Notification.objects.filter(user= self.request.user, read=False) | ||
34 | context['notifications'] = notifications | 34 | context['notifications'] = notifications |
35 | - print(notifications) | ||
36 | - | 35 | + |
37 | return self.response_class(request = self.request, template = template, context = context, using = self.template_engine, **response_kwargs) | 36 | return self.response_class(request = self.request, template = template, context = context, using = self.template_engine, **response_kwargs) |
38 | 37 | ||
39 | - def createNotification(self, mensagem='', actor=None, users = User.objects.all(), not_action = '', not_resource=''): #the default will be a broadcast | ||
40 | - action = Action.objects.filter(name = not_action) | ||
41 | - resource = Resource.objects.filter(name = self.not_resource) | ||
42 | - print(action) | ||
43 | - if not action: | ||
44 | - action = Action(name = self.not_action) | ||
45 | - action.save() | ||
46 | - else: | ||
47 | - action = action[0] | ||
48 | - | ||
49 | - if not resource: | ||
50 | - resource = Resource(name = self.not_resource) | ||
51 | - resource.save() | ||
52 | - else: | ||
53 | - resource = resource[0] | ||
54 | - | ||
55 | - action_resource = Action_Resource.objects.filter(action = action, resource = resource) | ||
56 | - | ||
57 | - if not action_resource: | ||
58 | - action_resource = Action_Resource(action = action, resource = resource) | ||
59 | - action_resource.save() | ||
60 | - else: | ||
61 | - action_resource = action_resource[0] | ||
62 | - | ||
63 | - for user in users: | ||
64 | - print(user) | ||
65 | - notification = Notification(user=user, actor= actor, message=mensagem, action_resource= action_resource) | ||
66 | - notification.save() | ||
67 | 38 |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-12 14:36 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('core', '0004_auto_20160908_1151'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AddField( | ||
16 | + model_name='resource', | ||
17 | + name='link', | ||
18 | + field=models.CharField(default='', max_length=100, unique=True, verbose_name='URL'), | ||
19 | + ), | ||
20 | + ] |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-12 14:38 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('core', '0005_resource_link'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AlterField( | ||
16 | + model_name='resource', | ||
17 | + name='link', | ||
18 | + field=models.CharField(default='', max_length=100, verbose_name='URL'), | ||
19 | + ), | ||
20 | + ] |
@@ -0,0 +1,19 @@ | @@ -0,0 +1,19 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-12 14:51 | ||
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', '0006_auto_20160912_1138'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.RemoveField( | ||
16 | + model_name='resource', | ||
17 | + name='link', | ||
18 | + ), | ||
19 | + ] |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-12 14:52 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('core', '0007_remove_resource_link'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AddField( | ||
16 | + model_name='resource', | ||
17 | + name='link', | ||
18 | + field=models.CharField(default='', max_length=100, verbose_name='URL'), | ||
19 | + ), | ||
20 | + ] |
core/mixins.py
@@ -44,32 +44,33 @@ class NotificationMixin(object): | @@ -44,32 +44,33 @@ class NotificationMixin(object): | ||
44 | not_action = '' | 44 | not_action = '' |
45 | not_resource = '' | 45 | not_resource = '' |
46 | 46 | ||
47 | - def createNotification(message='', actor=None, users = User.objects.all(), not_action = '', not_resource=''): #the default will be a broadcast | 47 | + def createNotification(self, message='', actor=None, users = User.objects.all(), not_action = '', not_resource='', resource_link=''): #the default will be a broadcast |
48 | action = Action.objects.filter(name = self.not_action) | 48 | action = Action.objects.filter(name = self.not_action) |
49 | - resource = Resource.objects.filter(name = self.not_resource) | ||
50 | - | ||
51 | - if not action: | 49 | + resource = Resource.objects.filter(name = not_resource) |
50 | + | ||
51 | + if action.exists(): | ||
52 | + action = action[0] | ||
53 | + else: | ||
52 | action = Action(name = self.not_action) | 54 | action = Action(name = self.not_action) |
53 | action.save() | 55 | action.save() |
54 | - else: | ||
55 | - action = action[0] | ||
56 | 56 | ||
57 | - if not resource: | ||
58 | - resource = Resource(name = self.not_resource) | ||
59 | - resource.save() | ||
60 | - else: | 57 | + if resource.exists(): |
61 | resource = resource[0] | 58 | resource = resource[0] |
59 | + else: | ||
60 | + resource = Resource(name = self.not_resource, link= resource_link) | ||
61 | + resource.save() | ||
62 | 62 | ||
63 | action_resource = Action_Resource.objects.filter(action = action, resource = resource) | 63 | action_resource = Action_Resource.objects.filter(action = action, resource = resource) |
64 | 64 | ||
65 | - if not action_resource: | 65 | + if action_resource.exists(): |
66 | + action_resource = action_resource[0] | ||
67 | + else: | ||
66 | action_resource = Action_Resource(action = action, resource = resource) | 68 | action_resource = Action_Resource(action = action, resource = resource) |
67 | action_resource.save() | 69 | action_resource.save() |
68 | - else: | ||
69 | - action_resource = action_resource[0] | ||
70 | 70 | ||
71 | for user in users: | 71 | for user in users: |
72 | notification = Notification(user=user, actor= actor, message=message, action_resource= action_resource) | 72 | notification = Notification(user=user, actor= actor, message=message, action_resource= action_resource) |
73 | + notification.save() | ||
73 | 74 | ||
74 | 75 | ||
75 | def dispatch(self, request, *args, **kwargs): | 76 | def dispatch(self, request, *args, **kwargs): |
core/models.py
@@ -29,11 +29,14 @@ class Resource(models.Model): | @@ -29,11 +29,14 @@ class Resource(models.Model): | ||
29 | @name: name of the resource affected, it will be unique because a resource can be affecte | 29 | @name: name of the resource affected, it will be unique because a resource can be affecte |
30 | by a huge amount of actions | 30 | by a huge amount of actions |
31 | @created_date: The date the resource was created | 31 | @created_date: The date the resource was created |
32 | + @link: Which URL made that resource able to find | ||
32 | """ | 33 | """ |
33 | 34 | ||
34 | name = models.CharField(_('Name'), max_length =100, unique=True) | 35 | name = models.CharField(_('Name'), max_length =100, unique=True) |
35 | created_date = models.DateField(_('Created Date'), auto_now_add=True) | 36 | created_date = models.DateField(_('Created Date'), auto_now_add=True) |
36 | - | 37 | + link = models.CharField(_('URL'), max_length =100, default="") |
38 | + | ||
39 | + | ||
37 | class Meta: | 40 | class Meta: |
38 | verbose_name = "Resource" | 41 | verbose_name = "Resource" |
39 | verbose_name_plural = "Resources" | 42 | verbose_name_plural = "Resources" |
core/templates/base.html
@@ -59,7 +59,7 @@ | @@ -59,7 +59,7 @@ | ||
59 | {% for notification in notifications %} | 59 | {% for notification in notifications %} |
60 | {% if notification.actor %} <!-- if the notification has a user--> | 60 | {% if notification.actor %} <!-- if the notification has a user--> |
61 | <li> | 61 | <li> |
62 | - <a><div class="list-group-item"> | 62 | + <a href="{{ notification.action_resource.resource.link }}"><div class="list-group-item"> |
63 | <div class="row-picture"> | 63 | <div class="row-picture"> |
64 | <img class="circle" src="http://lorempixel.com/56/56/people/1" alt="icon"> | 64 | <img class="circle" src="http://lorempixel.com/56/56/people/1" alt="icon"> |
65 | <div class="least-content pull-right">{{ notification.datetime }}</div> | 65 | <div class="least-content pull-right">{{ notification.datetime }}</div> |
@@ -72,7 +72,7 @@ | @@ -72,7 +72,7 @@ | ||
72 | </li> | 72 | </li> |
73 | {% else %} | 73 | {% else %} |
74 | <li> | 74 | <li> |
75 | - <a> | 75 | + <a href="{{ notification.action_resource.resource.link }}"> |
76 | <div class="list-group-item"> | 76 | <div class="list-group-item"> |
77 | <div class="row-action-primary"> | 77 | <div class="row-action-primary"> |
78 | <i class="material-icons">folder</i> | 78 | <i class="material-icons">folder</i> |
core/views.py
@@ -9,6 +9,7 @@ from django.views.generic import CreateView, UpdateView | @@ -9,6 +9,7 @@ from django.views.generic import CreateView, UpdateView | ||
9 | from django.http import HttpResponse | 9 | from django.http import HttpResponse |
10 | from django.core.mail import send_mail,BadHeaderError | 10 | from django.core.mail import send_mail,BadHeaderError |
11 | from django.conf import settings | 11 | from django.conf import settings |
12 | +from core.mixins import NotificationMixin | ||
12 | 13 | ||
13 | from rolepermissions.shortcuts import assign_role | 14 | from rolepermissions.shortcuts import assign_role |
14 | 15 | ||
@@ -25,7 +26,7 @@ def index(request): | @@ -25,7 +26,7 @@ def index(request): | ||
25 | return render(request, "index.html", context) | 26 | return render(request, "index.html", context) |
26 | 27 | ||
27 | 28 | ||
28 | -class RegisterUser(CreateView): | 29 | +class RegisterUser(CreateView, NotificationMixin): |
29 | model = User | 30 | model = User |
30 | form_class = RegisterUserForm | 31 | form_class = RegisterUserForm |
31 | template_name = 'register_user.html' | 32 | template_name = 'register_user.html' |
courses/views.py
@@ -13,9 +13,10 @@ from django.db.models import Q | @@ -13,9 +13,10 @@ from django.db.models import Q | ||
13 | 13 | ||
14 | from .forms import CourseForm, CategoryForm, SubjectForm,TopicForm | 14 | from .forms import CourseForm, CategoryForm, SubjectForm,TopicForm |
15 | from .models import Course, Subject, Category,Topic | 15 | from .models import Course, Subject, Category,Topic |
16 | +from core.mixins import NotificationMixin | ||
16 | 17 | ||
17 | 18 | ||
18 | -class IndexView(LoginRequiredMixin, generic.ListView): | 19 | +class IndexView(LoginRequiredMixin, NotificationMixin, generic.ListView): |
19 | 20 | ||
20 | login_url = reverse_lazy("core:home") | 21 | login_url = reverse_lazy("core:home") |
21 | redirect_field_name = 'next' | 22 | redirect_field_name = 'next' |
@@ -30,7 +31,7 @@ class IndexView(LoginRequiredMixin, generic.ListView): | @@ -30,7 +31,7 @@ class IndexView(LoginRequiredMixin, generic.ListView): | ||
30 | 31 | ||
31 | return context | 32 | return context |
32 | 33 | ||
33 | -class CreateView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView): | 34 | +class CreateView(LoginRequiredMixin, HasRoleMixin, NotificationMixin,generic.edit.CreateView): |
34 | 35 | ||
35 | allowed_roles = ['professor', 'system_admin'] | 36 | allowed_roles = ['professor', 'system_admin'] |
36 | login_url = reverse_lazy("core:home") | 37 | login_url = reverse_lazy("core:home") |
@@ -73,7 +74,7 @@ class UpdateView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | @@ -73,7 +74,7 @@ class UpdateView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): | ||
73 | 74 | ||
74 | return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) | 75 | return self.response_class(request=self.request, template=self.get_template_names(), context=context, using=self.template_engine) |
75 | 76 | ||
76 | -class View(LoginRequiredMixin, generic.DetailView): | 77 | +class View(LoginRequiredMixin, NotificationMixin, generic.DetailView): |
77 | 78 | ||
78 | login_url = reverse_lazy("core:home") | 79 | login_url = reverse_lazy("core:home") |
79 | redirect_field_name = 'next' | 80 | redirect_field_name = 'next' |
@@ -89,7 +90,7 @@ class View(LoginRequiredMixin, generic.DetailView): | @@ -89,7 +90,7 @@ class View(LoginRequiredMixin, generic.DetailView): | ||
89 | 90 | ||
90 | return context | 91 | return context |
91 | 92 | ||
92 | -class DeleteView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | 93 | +class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView): |
93 | 94 | ||
94 | allowed_roles = ['professor', 'system_admin'] | 95 | allowed_roles = ['professor', 'system_admin'] |
95 | login_url = reverse_lazy("core:home") | 96 | login_url = reverse_lazy("core:home") |
@@ -220,7 +221,7 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | @@ -220,7 +221,7 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): | ||
220 | context['topics'] = subject.topics.all() | 221 | context['topics'] = subject.topics.all() |
221 | return context | 222 | return context |
222 | 223 | ||
223 | -class CreateTopicView(LoginRequiredMixin, HasRoleMixin, generic.edit.CreateView): | 224 | +class CreateTopicView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.edit.CreateView): |
224 | 225 | ||
225 | allowed_roles = ['professor', 'system_admin','student'] | 226 | allowed_roles = ['professor', 'system_admin','student'] |
226 | login_url = reverse_lazy("core:home") | 227 | login_url = reverse_lazy("core:home") |