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 | 28 | context['courses'] = Course.objects.filter(user = self.request.user) |
29 | 29 | |
30 | 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 | 34 | context['notifications'] = notifications |
35 | - print(notifications) | |
36 | - | |
35 | + | |
37 | 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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 | 44 | not_action = '' |
45 | 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 | 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 | 54 | action = Action(name = self.not_action) |
53 | 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 | 58 | resource = resource[0] |
59 | + else: | |
60 | + resource = Resource(name = self.not_resource, link= resource_link) | |
61 | + resource.save() | |
62 | 62 | |
63 | 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 | 68 | action_resource = Action_Resource(action = action, resource = resource) |
67 | 69 | action_resource.save() |
68 | - else: | |
69 | - action_resource = action_resource[0] | |
70 | 70 | |
71 | 71 | for user in users: |
72 | 72 | notification = Notification(user=user, actor= actor, message=message, action_resource= action_resource) |
73 | + notification.save() | |
73 | 74 | |
74 | 75 | |
75 | 76 | def dispatch(self, request, *args, **kwargs): | ... | ... |
core/models.py
... | ... | @@ -29,11 +29,14 @@ class Resource(models.Model): |
29 | 29 | @name: name of the resource affected, it will be unique because a resource can be affecte |
30 | 30 | by a huge amount of actions |
31 | 31 | @created_date: The date the resource was created |
32 | + @link: Which URL made that resource able to find | |
32 | 33 | """ |
33 | 34 | |
34 | 35 | name = models.CharField(_('Name'), max_length =100, unique=True) |
35 | 36 | created_date = models.DateField(_('Created Date'), auto_now_add=True) |
36 | - | |
37 | + link = models.CharField(_('URL'), max_length =100, default="") | |
38 | + | |
39 | + | |
37 | 40 | class Meta: |
38 | 41 | verbose_name = "Resource" |
39 | 42 | verbose_name_plural = "Resources" | ... | ... |
core/templates/base.html
... | ... | @@ -59,7 +59,7 @@ |
59 | 59 | {% for notification in notifications %} |
60 | 60 | {% if notification.actor %} <!-- if the notification has a user--> |
61 | 61 | <li> |
62 | - <a><div class="list-group-item"> | |
62 | + <a href="{{ notification.action_resource.resource.link }}"><div class="list-group-item"> | |
63 | 63 | <div class="row-picture"> |
64 | 64 | <img class="circle" src="http://lorempixel.com/56/56/people/1" alt="icon"> |
65 | 65 | <div class="least-content pull-right">{{ notification.datetime }}</div> |
... | ... | @@ -72,7 +72,7 @@ |
72 | 72 | </li> |
73 | 73 | {% else %} |
74 | 74 | <li> |
75 | - <a> | |
75 | + <a href="{{ notification.action_resource.resource.link }}"> | |
76 | 76 | <div class="list-group-item"> |
77 | 77 | <div class="row-action-primary"> |
78 | 78 | <i class="material-icons">folder</i> | ... | ... |
core/views.py
... | ... | @@ -9,6 +9,7 @@ from django.views.generic import CreateView, UpdateView |
9 | 9 | from django.http import HttpResponse |
10 | 10 | from django.core.mail import send_mail,BadHeaderError |
11 | 11 | from django.conf import settings |
12 | +from core.mixins import NotificationMixin | |
12 | 13 | |
13 | 14 | from rolepermissions.shortcuts import assign_role |
14 | 15 | |
... | ... | @@ -25,7 +26,7 @@ def index(request): |
25 | 26 | return render(request, "index.html", context) |
26 | 27 | |
27 | 28 | |
28 | -class RegisterUser(CreateView): | |
29 | +class RegisterUser(CreateView, NotificationMixin): | |
29 | 30 | model = User |
30 | 31 | form_class = RegisterUserForm |
31 | 32 | template_name = 'register_user.html' | ... | ... |
courses/views.py
... | ... | @@ -13,9 +13,10 @@ from django.db.models import Q |
13 | 13 | |
14 | 14 | from .forms import CourseForm, CategoryForm, SubjectForm,TopicForm |
15 | 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 | 21 | login_url = reverse_lazy("core:home") |
21 | 22 | redirect_field_name = 'next' |
... | ... | @@ -30,7 +31,7 @@ class IndexView(LoginRequiredMixin, generic.ListView): |
30 | 31 | |
31 | 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 | 36 | allowed_roles = ['professor', 'system_admin'] |
36 | 37 | login_url = reverse_lazy("core:home") |
... | ... | @@ -73,7 +74,7 @@ class UpdateView(LoginRequiredMixin, HasRoleMixin, generic.UpdateView): |
73 | 74 | |
74 | 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 | 79 | login_url = reverse_lazy("core:home") |
79 | 80 | redirect_field_name = 'next' |
... | ... | @@ -89,7 +90,7 @@ class View(LoginRequiredMixin, generic.DetailView): |
89 | 90 | |
90 | 91 | return context |
91 | 92 | |
92 | -class DeleteView(LoginRequiredMixin, HasRoleMixin, generic.DeleteView): | |
93 | +class DeleteView(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.DeleteView): | |
93 | 94 | |
94 | 95 | allowed_roles = ['professor', 'system_admin'] |
95 | 96 | login_url = reverse_lazy("core:home") |
... | ... | @@ -220,7 +221,7 @@ class SubjectsView(LoginRequiredMixin, generic.ListView): |
220 | 221 | context['topics'] = subject.topics.all() |
221 | 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 | 226 | allowed_roles = ['professor', 'system_admin','student'] |
226 | 227 | login_url = reverse_lazy("core:home") | ... | ... |