Commit 7ce54a3ae1f88b17f7bc9ae1947946da888bf5fb

Authored by Zambom
1 parent 2079e350

Refactoring users

amadeus/settings.py
... ... @@ -51,8 +51,10 @@ INSTALLED_APPS = [
51 51 's3direct',
52 52 'django_summernote',
53 53  
  54 + 'amadeus',
54 55 'users',
55 56 'localization',
  57 + 'notifications',
56 58 'log',
57 59  
58 60 ]
... ...
localization/migrations/0001_initial.py
1 1 # -*- coding: utf-8 -*-
2   -# Generated by Django 1.10 on 2016-12-19 17:20
  2 +# Generated by Django 1.10 on 2016-12-20 18:17
3 3 from __future__ import unicode_literals
4 4  
5 5 from django.db import migrations, models
... ...
users/admin.py
... ... @@ -1,10 +0,0 @@
1   -from django.contrib import admin
2   -from .models import User
3   -from .forms import UserForm
4   -
5   -class UserAdmin(admin.ModelAdmin):
6   - list_display = ['username', 'name', 'email', 'is_staff', 'is_active']
7   - search_fields = ['username', 'name', 'email']
8   - form = UserForm
9   -
10   -admin.site.register(User, UserAdmin)
users/forms.py
1 1 # coding=utf-8
2   -import os, re
3   -from datetime import date
4   -from pycpfcnpj import cpfcnpj
5   -from django.conf import settings
6 2 from django import forms
7 3 from django.utils.translation import ugettext_lazy as _
8 4 from rolepermissions.shortcuts import assign_role
9   -from django.contrib.auth.forms import UserCreationForm
10 5 from .models import User
11 6  
12 7 class Validation(forms.ModelForm):
13   - def clean_email(self):
14   - email = self.cleaned_data['email']
15   -
16   - if User.objects.filter(email = email).exists():
17   - raise forms.ValidationError(_('There is already a registered User with this e-mail'))
18   -
19   - return email
20   -
21   - def validate_cpf(self, cpf):
22   - cpf = ''.join(re.findall('\d', str(cpf)))
23   -
24   - if not cpf == '':
25   - if cpfcnpj.validate(cpf):
26   - return True
27   -
28   - return False
29   -
30   - return True
31   -
32   - def clean_cpf(self):
33   - cpf = self.cleaned_data['cpf']
34   -
35   - if not self.validate_cpf(cpf):
36   - raise forms.ValidationError(_('Please enter a valid CPF'))
37   -
38   - return cpf
39   -
40   - def clean_birth_date(self):
41   - birth_date = self.cleaned_data['birth_date']
42   -
43   - if not birth_date is None:
44   - if birth_date >= date.today():
45   - raise forms.ValidationError(_('Please enter a valid date'))
46   -
47   - return birth_date
48   -
49   -class ValidationRegister(Validation):
50 8 def clean_password(self):
51 9 password = self.cleaned_data.get('password')
52 10  
... ... @@ -70,35 +28,6 @@ class ValidationRegister(Validation):
70 28  
71 29 return password2
72 30  
73   -class UserForm(Validation):
74   - def save(self, commit=True):
75   - super(AdminUserForm, self).save(commit=False)
76   -
77   - self.instance.set_password(self.cleaned_data['password'])
78   - self.instance.save()
79   -
80   - if self.instance.is_staff:
81   - assign_role(self.instance, 'system_admin')
82   - elif self.instance.type_profile == 2:
83   - assign_role(self.instance, 'student')
84   - elif self.instance.type_profile == 1:
85   - assign_role(self.instance, 'professor')
86   - elif self.instance.type_profile == 3:
87   - assign_role(self.instance, 'coordinator')
88   -
89   - self.instance.save()
90   -
91   - return self.instance
92   -
93   - class Meta:
94   - model = User
95   - fields = ['username', 'name', 'email', 'password',
96   - 'birth_date', 'city', 'state', 'gender', 'type_profile', 'cpf', 'phone',
97   - 'image', 'titration', 'year_titration', 'institution', 'curriculum', 'is_staff', 'is_active']
98   - widgets = {
99   - 'password':forms.PasswordInput
100   - }
101   -
102 31 class RegisterUserForm(ValidationRegister):
103 32 password = forms.CharField(label=_('Password'), widget=forms.PasswordInput)
104 33 password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput)
... ... @@ -111,17 +40,12 @@ class RegisterUserForm(ValidationRegister):
111 40 self.instance.set_password(self.cleaned_data['password'])
112 41  
113 42 self.instance.save()
  43 +
  44 + if self.instance.type_profile == 2:
  45 + assign_role(self.instance, 'student')
114 46  
115 47 return self.instance
116 48  
117 49 class Meta:
118 50 model = User
119   - fields = ['username', 'name', 'email',]
120   -
121   -class UpdateProfileForm(Validation):
122   -
123   - class Meta:
124   - model = User
125   - fields = ['username', 'name', 'email', 'birth_date', 'city',
126   - 'state', 'gender', 'cpf', 'phone', 'image', 'titration',
127   - 'year_titration', 'institution', 'curriculum']
  51 + fields = ['username', 'name', 'last_name', 'social_name',]
... ...
users/migrations/0001_initial.py
1 1 # -*- coding: utf-8 -*-
2   -# Generated by Django 1.10 on 2016-12-19 17:21
  2 +# Generated by Django 1.10 on 2016-12-20 18:17
3 3 from __future__ import unicode_literals
4 4  
5 5 import django.contrib.auth.models
6 6 import django.core.validators
7 7 from django.db import migrations, models
8   -import django.db.models.deletion
9 8 import re
10 9  
11 10  
... ... @@ -15,7 +14,6 @@ class Migration(migrations.Migration):
15 14  
16 15 dependencies = [
17 16 ('auth', '0008_alter_user_username_max_length'),
18   - ('localization', '0001_initial'),
19 17 ]
20 18  
21 19 operations = [
... ... @@ -26,25 +24,18 @@ class Migration(migrations.Migration):
26 24 ('password', models.CharField(max_length=128, verbose_name='password')),
27 25 ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
28 26 ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
29   - ('username', models.CharField(help_text='A short name that will be used to identify you in the platform and to access it', max_length=35, unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[\\w.@+-]+$', 32), 'Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .', 'invalid')], verbose_name='Login')),
30   - ('email', models.EmailField(max_length=254, unique=True, verbose_name='Mail')),
31   - ('name', models.CharField(max_length=100, verbose_name='Name')),
32   - ('gender', models.CharField(blank=True, choices=[('M', 'Male'), ('F', 'Female')], max_length=1, null=True, verbose_name='Gender')),
  27 + ('email', models.EmailField(help_text='Your email address that will be used to access the platform', max_length=254, unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[\\w.@+-]+$', 32), 'Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .', 'invalid')], verbose_name='Mail')),
  28 + ('username', models.CharField(max_length=100, verbose_name='Name')),
  29 + ('last_name', models.CharField(max_length=100, verbose_name='Last Name')),
  30 + ('social_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='Social Name')),
  31 + ('description', models.TextField(blank=True, verbose_name='Description')),
33 32 ('image', models.ImageField(blank=True, null=True, upload_to='users/', verbose_name='Photo')),
34   - ('birth_date', models.DateField(blank=True, null=True, verbose_name='Birth Date')),
35   - ('phone', models.CharField(blank=True, max_length=30, verbose_name='Phone')),
36   - ('cpf', models.CharField(blank=True, max_length=15, null=True, verbose_name='CPF')),
37   - ('type_profile', models.IntegerField(blank=True, choices=[(1, 'Professor'), (2, 'Student')], null=True, verbose_name='Type')),
38   - ('titration', models.CharField(blank=True, max_length=50, null=True, verbose_name='Titration')),
39   - ('year_titration', models.CharField(blank=True, max_length=4, null=True, verbose_name='Year of titration')),
40   - ('institution', models.CharField(blank=True, max_length=50, null=True, verbose_name='Institution')),
41   - ('curriculum', models.FileField(blank=True, null=True, upload_to='users/curriculum/', verbose_name='Curriculum')),
  33 + ('type_profile', models.IntegerField(blank=True, choices=[(1, 'Professor'), (2, 'Student'), (3, 'Coordinator')], null=True, verbose_name='Type')),
42 34 ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')),
  35 + ('show_email', models.IntegerField(choices=[(1, 'Allow everyone to see my address'), (2, 'Only classmates can see my address'), (3, 'Nobody can see my address')], null=True, verbose_name='Show email?')),
43 36 ('is_staff', models.BooleanField(default=False, verbose_name='Administrator')),
44 37 ('is_active', models.BooleanField(default=True, verbose_name='Active')),
45   - ('city', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='localization.City', verbose_name='City')),
46 38 ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
47   - ('state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='localization.State', verbose_name='State')),
48 39 ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
49 40 ],
50 41 options={
... ...
users/migrations/0002_auto_20161219_2218.py
... ... @@ -1,20 +0,0 @@
1   -# -*- coding: utf-8 -*-
2   -# Generated by Django 1.10 on 2016-12-20 01:18
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   - ('users', '0001_initial'),
12   - ]
13   -
14   - operations = [
15   - migrations.AlterField(
16   - model_name='user',
17   - name='type_profile',
18   - field=models.IntegerField(blank=True, choices=[(1, 'Professor'), (2, 'Student'), (3, 'Coordinator')], null=True, verbose_name='Type'),
19   - ),
20   - ]
users/models.py
... ... @@ -6,37 +6,28 @@ from django.utils.translation import ugettext_lazy as _
6 6 from django.contrib.auth.models import AbstractBaseUser, UserManager, PermissionsMixin
7 7 from django.contrib.staticfiles.templatetags.staticfiles import static
8 8  
9   -from localization.models import City, State
10   -
11 9 class User(AbstractBaseUser, PermissionsMixin):
12 10  
13   - username = models.CharField(_('Login'), max_length = 35, unique = True, validators = [
  11 + email = models.EmailField(_('Mail'), unique = True, validators = [
14 12 validators.RegexValidator(
15 13 re.compile('^[\w.@+-]+$'),
16 14 _('Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .')
17 15 , 'invalid'
18 16 )
19   - ], help_text = _('A short name that will be used to identify you in the platform and to access it'))
20   - email = models.EmailField(_('Mail'), unique = True)
21   - name = models.CharField(_('Name'), max_length = 100)
22   - city = models.ForeignKey(City, verbose_name = _('City'), blank = True, null = True)
23   - state = models.ForeignKey(State, verbose_name = _('State'), blank = True, null = True)
24   - gender = models.CharField(_('Gender'), max_length = 1, choices = (('M', _('Male')), ('F', _('Female'))), blank=True, null=True)
  17 + ], help_text = _('Your email address that will be used to access the platform'))
  18 + username = models.CharField(_('Name'), max_length = 100)
  19 + last_name = models.CharField(_('Last Name'), max_length = 100)
  20 + social_name = models.CharField(_('Social Name'), max_length = 100, blank = True, null = True)
  21 + description = models.TextField(_('Description'), blank = True)
25 22 image = models.ImageField(verbose_name = _('Photo'), null=True, blank = True, upload_to = 'users/')
26   - birth_date = models.DateField(_('Birth Date'), null=True, blank=True)
27   - phone = models.CharField(_('Phone'), max_length = 30, blank = True)
28   - cpf = models.CharField(_('CPF'), max_length = 15, blank=True, null=True)
29 23 type_profile = models.IntegerField(_('Type'), null = True, blank = True, choices = ((1, _('Professor')), (2, _('Student')), (3, _('Coordinator'))))
30   - titration = models.CharField(_('Titration'), max_length = 50, blank = True, null = True)
31   - year_titration = models.CharField(_('Year of titration'), max_length = 4, blank = True, null = True)
32   - institution = models.CharField(_('Institution'), max_length = 50, blank=True, null=True)
33   - curriculum = models.FileField(verbose_name = _('Curriculum'), upload_to='users/curriculum/', null=True, blank=True)
34 24 date_created = models.DateTimeField(_('Create Date'), auto_now_add = True)
  25 + show_email = models.IntegerField(_('Show email?'), null = True, choices = ((1, _('Allow everyone to see my address')), (2, _('Only classmates can see my address')), (3, _('Nobody can see my address'))))
35 26 is_staff = models.BooleanField(_('Administrator'), default = False)
36 27 is_active = models.BooleanField(_('Active'), default = True)
37 28  
38   - USERNAME_FIELD = 'username'
39   - REQUIRED_FIELDS = ['email']
  29 + USERNAME_FIELD = 'email'
  30 + REQUIRED_FIELDS = ['username', 'last_name']
40 31  
41 32 objects = UserManager()
42 33  
... ... @@ -45,7 +36,7 @@ class User(AbstractBaseUser, PermissionsMixin):
45 36 verbose_name_plural = _('Users')
46 37  
47 38 def __str__(self):
48   - return self.name or self.username
  39 + return self.social_name or self.username
49 40  
50 41 def save(self, *args, **kwargs):
51 42 if not self.is_staff and self.type_profile is None:
... ... @@ -53,9 +44,6 @@ class User(AbstractBaseUser, PermissionsMixin):
53 44  
54 45 super(User, self).save(*args, **kwargs)
55 46  
56   - def get_short_name(self):
57   - return self.name
58   -
59 47 @property
60 48 def image_url(self):
61 49 if self.image and hasattr(self.image, 'url'):
... ...
users/templates/users/login.html
... ... @@ -41,8 +41,8 @@
41 41 {% csrf_token %}
42 42 <div class="col-md-10 col-md-offset-1">
43 43 <div class="form-group">
44   - <label for="inputEmail" class="control-label"> {% trans 'Username' %}</label>
45   - <input form="form-login" for="inputSmall" type="text" name="username" class="form-control" placeholder="{% trans 'Username' %}" id="inputEmail" value="{% if username %}{{username}}{% endif %}">
  44 + <label for="inputEmail" class="control-label"> {% trans 'Email' %}</label>
  45 + <input form="form-login" for="inputSmall" type="text" name="email" class="form-control" placeholder="{% trans 'Email' %}" id="inputEmail" value="{% if username %}{{username}}{% endif %}">
46 46 </div>
47 47 </div>
48 48 <div class="col-md-10 col-md-offset-1">
... ... @@ -51,20 +51,13 @@
51 51 <input form="form-login" for="inputSmall" type="password" name="password" class="form-control" id="inputPassword" placeholder="{% trans 'Password' %}">
52 52 </div>
53 53 </div>
54   - <div class="col-md-10 col-md-offset-1">
55   - <div class="checkbox">
56   - <label>
57   - <input type="checkbox" name="checkbox"><span class="checkbox-material"></span> {% trans 'Remember Email' %}
58   - </label>
59   - </div>
60   - </div>
61 54 </form>
62 55 <div class="row">
63 56 <div class="col-md-5 col-xs-6 col-sm-6 col-lg-5 col-lg-offset-1 col-md-offset-1 text-center">
64 57 <button type="submite" class="btn btn-success btn-raised btn-block" form="form-login" style="position: initial;"> {% trans 'Log in' %} </button>
65 58 </div>
66 59 <div class="col-md-5 col-xs-6 col-sm-6 col-lg-5 text-center">
67   - <a class="btn btn-default btn-raised btn-block" href="#" formaction="#" style="position: initial;">{% trans 'Guest' %}</a>
  60 + <a class="btn btn-default btn-raised btn-block" href="#" formaction="#" style="position: initial;">{% trans 'Sign Up' %}</a>
68 61 </div>
69 62 </div>
70 63 <div class="row">
... ... @@ -74,7 +67,6 @@
74 67 </div>
75 68 </div>
76 69 </div>
77   - <a class="btn btn-raised btn-primary btn-block" href="#">{% trans 'Sign Up' %} </a>
78 70 </div>
79 71 </div>
80 72  
... ...
users/urls.py
... ... @@ -2,21 +2,7 @@ from django.conf.urls import url
2 2  
3 3 from . import views
4 4  
5   -
6 5 urlpatterns = [
7 6 url(r'^login/$', views.login, name='login'),
8   - #url(r'^$', views.UsersListView.as_view(), name='manage'),
9   - url(r'^create/$', views.Create.as_view(), name='create'),
10   - url(r'^edit/(?P<username>[\w_-]+)/$', views.Update.as_view(), name='update'),
11   - url(r'^view/(?P<username>[\w_-]+)/$', views.View.as_view(), name='view'),
12   - url(r'^delete/(?P<username>[\w_-]+)/$', views.delete_user, name='delete'),
13   - url(r'^remove/(?P<username>[\w_-]+)/$', views.remove_account, name='remove'),
14   - url(r'^profile/$', views.Profile.as_view(), name='profile'),
15   - url(r'^search/$', views.SearchView.as_view(), name='search'),
16   - #
17   - url(r'^profile/update/$', views.UpdateProfile.as_view(), name='update_profile'),
18   - url(r'^profile/change_password/$', views.Change_password.as_view(), name='change_password'),
19   - url(r'^profile/remove_account/$', views.Remove_account.as_view(), name='remove_account'),
20   - url(r'^profile/delete/$', views.DeleteUser.as_view(), name='delete_profile'),
21   -
  7 +
22 8 ]
... ...
users/views.py
... ... @@ -3,8 +3,9 @@ from django.db.models import Q
3 3 from django.views import generic
4 4 from django.contrib import messages
5 5 from rolepermissions.mixins import HasRoleMixin
  6 +from django.contrib.auth import authenticate, login as login_user
6 7 from django.contrib.auth.mixins import LoginRequiredMixin
7   -from django.core.urlresolvers import reverse_lazy
  8 +from django.core.urlresolvers import reverse, reverse_lazy
8 9 from django.utils.translation import ugettext_lazy as _
9 10 from rolepermissions.shortcuts import assign_role
10 11 from rolepermissions.verifications import has_role
... ... @@ -12,7 +13,6 @@ from itertools import chain
12 13 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
13 14  
14 15 from .models import User
15   -from .forms import UserForm, UpdateProfileForm
16 16  
17 17  
18 18 #API IMPORTS
... ... @@ -21,204 +21,204 @@ from .serializers import UserSerializer
21 21 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
22 22  
23 23 # ================ ADMIN =======================
24   -class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView):
25   -
26   - allowed_roles = ['system_admin']
27   - #login_url = reverse_lazy("core:home")
28   - redirect_field_name = 'next'
29   - template_name = 'list_users.html'
30   - context_object_name = 'users'
31   - paginate_by = 10
32   -
33   - def get_queryset(self):
34   - search = self.request.GET.get('search', None)
35   -
36   - if search is None:
37   - users = User.objects.all().order_by('name').exclude( username = self.request.user.username)
38   - else:
39   - users = User.objects.filter(Q(username = search) | Q(name = search) | Q(name__icontains = search) | Q(username__icontains = search)).exclude( username = self.request.user.username)
40   -
41   - return users
42   -
43   - def get_context_data (self, **kwargs):
44   - context = super(UsersListView, self).get_context_data(**kwargs)
45   - context['title'] = 'Manage Users'
46   - return context
47   -
48   -class Create(HasRoleMixin, LoginRequiredMixin, generic.edit.CreateView):
49   -
50   - allowed_roles = ['system_admin']
51   - #login_url = reverse_lazy("core:home")
52   - redirect_field_name = 'next'
53   - template_name = 'users/create.html'
54   - form_class = UserForm
55   - context_object_name = 'acc'
56   - success_url = reverse_lazy('users:manage')
57   -
58   - def form_valid(self, form):
59   - self.object = form.save()
60   -
61   - if self.object.type_profile == 2:
62   - assign_role(self.object, 'student')
63   - elif self.object.type_profile == 1:
64   - assign_role(self.object, 'professor')
65   - elif self.object.is_staff:
66   - assign_role(self.object, 'system_admin')
67   -
68   - self.object.save()
69   -
70   - messages.success(self.request, ('User ')+self.object.name+(' created successfully!'))
71   -
72   - return super(Create, self).form_valid(form)
73   - def get_context_data (self, **kwargs):
74   - context = super(Create, self).get_context_data(**kwargs)
75   - context['title'] = "Add User"
76   - return context
77   -
78   -class Update(HasRoleMixin, LoginRequiredMixin, generic.UpdateView):
79   -
80   - allowed_roles = ['system_admin']
81   - #login_url = reverse_lazy("core:home")
82   - redirect_field_name = 'next'
83   - template_name = 'users/update.html'
84   - slug_field = 'username'
85   - slug_url_kwarg = 'username'
86   - context_object_name = 'acc'
87   - model = User
88   - form_class = UserForm
89   - success_url = reverse_lazy('users:manage')
90   -
91   - def form_valid(self, form):
92   - self.object = form.save(commit = False)
93   -
94   - if self.object.type_profile == 2:
95   - assign_role(self.object, 'student')
96   - elif self.object.type_profile == 1:
97   - assign_role(self.object, 'professor')
98   - elif self.object.is_staff:
99   - assign_role(self.object, 'system_admin')
100   -
101   - self.object.save()
102   -
103   - messages.success(self.request, _('User ')+self.object.name+_(' updated successfully!'))
104   -
105   - return super(Update, self).form_valid(form)
106   -
107   - def get_context_data (self, **kwargs):
108   - context = super(Update, self).get_context_data(**kwargs)
109   - context['title'] = "Update User"
110   - return context
111   -
112   -class View(LoginRequiredMixin, generic.DetailView):
113   -
114   - #login_url = reverse_lazy("core:home")
115   - redirect_field_name = 'next'
116   - model = User
117   - context_object_name = 'acc'
118   - template_name = 'users/view.html'
119   - slug_field = 'username'
120   - slug_url_kwarg = 'username'
121   -
122   - def get_context_data (self, **kwargs):
123   - context = super(View, self).get_context_data(**kwargs)
124   - context['title'] = "User"
125   - return context
126   -
127   -def delete_user(request,username):
128   - user = get_object_or_404(User,username = username)
129   - user.delete()
130   - messages.success(request,_("User deleted Successfully!"))
131   - return redirect('users:manage')
132   -
133   -def remove_account(request,username):
134   - user = get_object_or_404(User,username = username)
135   - user.delete()
136   - messages.success(request,_("User deleted Successfully!"))
137   - #return redirect('core:logout')
138   -
139   -class Change_password(generic.TemplateView):
140   - template_name = 'users/change_password.html'
141   -
142   - def get_context_data (self, **kwargs):
143   - context = super(Change_password, self).get_context_data(**kwargs)
144   - context['title'] = "Change Password"
145   - return context
146   -
147   -class Remove_account(generic.TemplateView):
148   - template_name = 'users/remove_account.html'
149   -
150   - def get_context_data (self, **kwargs):
151   - context = super(Remove_account, self).get_context_data(**kwargs)
152   - context['title'] = "Remove Account"
153   - return context
154   -
155   -class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView):
156   - #login_url = reverse_lazy("core:home")
157   - template_name = 'users/edit_profile.html'
158   - form_class = UpdateProfileForm
159   - success_url = reverse_lazy('users:profile')
160   -
161   - def get_object(self):
162   - user = get_object_or_404(User, username = self.request.user.username)
163   - return user
164   -
165   - def get_context_data(self, **kwargs):
166   - context = super(UpdateProfile, self).get_context_data(**kwargs)
167   - context['title'] = 'Update Profile'
  24 +# class UsersListView(HasRoleMixin, LoginRequiredMixin, generic.ListView):
  25 +
  26 +# allowed_roles = ['system_admin']
  27 +# #login_url = reverse_lazy("core:home")
  28 +# redirect_field_name = 'next'
  29 +# template_name = 'list_users.html'
  30 +# context_object_name = 'users'
  31 +# paginate_by = 10
  32 +
  33 +# def get_queryset(self):
  34 +# search = self.request.GET.get('search', None)
  35 +
  36 +# if search is None:
  37 +# users = User.objects.all().order_by('name').exclude( username = self.request.user.username)
  38 +# else:
  39 +# users = User.objects.filter(Q(username = search) | Q(name = search) | Q(name__icontains = search) | Q(username__icontains = search)).exclude( username = self.request.user.username)
  40 +
  41 +# return users
  42 +
  43 +# def get_context_data (self, **kwargs):
  44 +# context = super(UsersListView, self).get_context_data(**kwargs)
  45 +# context['title'] = 'Manage Users'
  46 +# return context
  47 +
  48 +# class Create(HasRoleMixin, LoginRequiredMixin, generic.edit.CreateView):
  49 +
  50 +# allowed_roles = ['system_admin']
  51 +# #login_url = reverse_lazy("core:home")
  52 +# redirect_field_name = 'next'
  53 +# template_name = 'users/create.html'
  54 +# form_class = UserForm
  55 +# context_object_name = 'acc'
  56 +# success_url = reverse_lazy('users:manage')
  57 +
  58 +# def form_valid(self, form):
  59 +# self.object = form.save()
  60 +
  61 +# if self.object.type_profile == 2:
  62 +# assign_role(self.object, 'student')
  63 +# elif self.object.type_profile == 1:
  64 +# assign_role(self.object, 'professor')
  65 +# elif self.object.is_staff:
  66 +# assign_role(self.object, 'system_admin')
  67 +
  68 +# self.object.save()
  69 +
  70 +# messages.success(self.request, ('User ')+self.object.name+(' created successfully!'))
  71 +
  72 +# return super(Create, self).form_valid(form)
  73 +# def get_context_data (self, **kwargs):
  74 +# context = super(Create, self).get_context_data(**kwargs)
  75 +# context['title'] = "Add User"
  76 +# return context
  77 +
  78 +# class Update(HasRoleMixin, LoginRequiredMixin, generic.UpdateView):
  79 +
  80 +# allowed_roles = ['system_admin']
  81 +# #login_url = reverse_lazy("core:home")
  82 +# redirect_field_name = 'next'
  83 +# template_name = 'users/update.html'
  84 +# slug_field = 'username'
  85 +# slug_url_kwarg = 'username'
  86 +# context_object_name = 'acc'
  87 +# model = User
  88 +# form_class = UserForm
  89 +# success_url = reverse_lazy('users:manage')
  90 +
  91 +# def form_valid(self, form):
  92 +# self.object = form.save(commit = False)
  93 +
  94 +# if self.object.type_profile == 2:
  95 +# assign_role(self.object, 'student')
  96 +# elif self.object.type_profile == 1:
  97 +# assign_role(self.object, 'professor')
  98 +# elif self.object.is_staff:
  99 +# assign_role(self.object, 'system_admin')
  100 +
  101 +# self.object.save()
  102 +
  103 +# messages.success(self.request, _('User ')+self.object.name+_(' updated successfully!'))
  104 +
  105 +# return super(Update, self).form_valid(form)
  106 +
  107 +# def get_context_data (self, **kwargs):
  108 +# context = super(Update, self).get_context_data(**kwargs)
  109 +# context['title'] = "Update User"
  110 +# return context
  111 +
  112 +# class View(LoginRequiredMixin, generic.DetailView):
  113 +
  114 +# #login_url = reverse_lazy("core:home")
  115 +# redirect_field_name = 'next'
  116 +# model = User
  117 +# context_object_name = 'acc'
  118 +# template_name = 'users/view.html'
  119 +# slug_field = 'username'
  120 +# slug_url_kwarg = 'username'
  121 +
  122 +# def get_context_data (self, **kwargs):
  123 +# context = super(View, self).get_context_data(**kwargs)
  124 +# context['title'] = "User"
  125 +# return context
  126 +
  127 +# def delete_user(request,username):
  128 +# user = get_object_or_404(User,username = username)
  129 +# user.delete()
  130 +# messages.success(request,_("User deleted Successfully!"))
  131 +# return redirect('users:manage')
  132 +
  133 +# def remove_account(request,username):
  134 +# user = get_object_or_404(User,username = username)
  135 +# user.delete()
  136 +# messages.success(request,_("User deleted Successfully!"))
  137 +# #return redirect('core:logout')
  138 +
  139 +# class Change_password(generic.TemplateView):
  140 +# template_name = 'users/change_password.html'
  141 +
  142 +# def get_context_data (self, **kwargs):
  143 +# context = super(Change_password, self).get_context_data(**kwargs)
  144 +# context['title'] = "Change Password"
  145 +# return context
  146 +
  147 +# class Remove_account(generic.TemplateView):
  148 +# template_name = 'users/remove_account.html'
  149 +
  150 +# def get_context_data (self, **kwargs):
  151 +# context = super(Remove_account, self).get_context_data(**kwargs)
  152 +# context['title'] = "Remove Account"
  153 +# return context
  154 +
  155 +# class UpdateProfile(LoginRequiredMixin, generic.edit.UpdateView):
  156 +# #login_url = reverse_lazy("core:home")
  157 +# template_name = 'users/edit_profile.html'
  158 +# form_class = UpdateProfileForm
  159 +# success_url = reverse_lazy('users:profile')
  160 +
  161 +# def get_object(self):
  162 +# user = get_object_or_404(User, username = self.request.user.username)
  163 +# return user
  164 +
  165 +# def get_context_data(self, **kwargs):
  166 +# context = super(UpdateProfile, self).get_context_data(**kwargs)
  167 +# context['title'] = 'Update Profile'
168 168  
169   - context['form'] = UpdateProfileForm(instance = self.object)
  169 +# context['form'] = UpdateProfileForm(instance = self.object)
170 170  
171   - return context
  171 +# return context
172 172  
173   - def form_valid(self, form):
174   - form.save()
175   - messages.success(self.request, _('Profile edited successfully!'))
  173 +# def form_valid(self, form):
  174 +# form.save()
  175 +# messages.success(self.request, _('Profile edited successfully!'))
176 176  
177   - return super(UpdateProfile, self).form_valid(form)
  177 +# return super(UpdateProfile, self).form_valid(form)
178 178  
179   -class DeleteUser(LoginRequiredMixin, generic.edit.DeleteView):
180   - allowed_roles = ['student']
181   - #login_url = reverse_lazy("core:home")
182   - model = User
  179 +# class DeleteUser(LoginRequiredMixin, generic.edit.DeleteView):
  180 +# allowed_roles = ['student']
  181 +# #login_url = reverse_lazy("core:home")
  182 +# model = User
183 183  
184   - #success_url = reverse_lazy('core:index')
185   - success_message = "Deleted Successfully"
  184 +# #success_url = reverse_lazy('core:index')
  185 +# success_message = "Deleted Successfully"
186 186  
187   - def get_queryset(self):
188   - user = get_object_or_404(User, username = self.request.user.username)
189   - return user
  187 +# def get_queryset(self):
  188 +# user = get_object_or_404(User, username = self.request.user.username)
  189 +# return user
190 190  
191 191  
192   -class Profile(LoginRequiredMixin, generic.DetailView):
  192 +# class Profile(LoginRequiredMixin, generic.DetailView):
193 193  
194   - #login_url = reverse_lazy("core:home")
195   - redirect_field_name = 'next'
196   - context_object_name = 'user'
197   - template_name = 'users/profile.html'
  194 +# #login_url = reverse_lazy("core:home")
  195 +# redirect_field_name = 'next'
  196 +# context_object_name = 'user'
  197 +# template_name = 'users/profile.html'
198 198  
199   - def get_object(self):
200   - user = get_object_or_404(User, username = self.request.user.username)
201   - return user
  199 +# def get_object(self):
  200 +# user = get_object_or_404(User, username = self.request.user.username)
  201 +# return user
202 202  
203   - def get_context_data (self, **kwargs):
204   - context = super(Profile, self).get_context_data(**kwargs)
205   - context['title'] = "Profile"
206   - return context
  203 +# def get_context_data (self, **kwargs):
  204 +# context = super(Profile, self).get_context_data(**kwargs)
  205 +# context['title'] = "Profile"
  206 +# return context
207 207  
208   -class SearchView(LoginRequiredMixin, generic.ListView):
  208 +# class SearchView(LoginRequiredMixin, generic.ListView):
209 209  
210   - #login_url = reverse_lazy("core:home")
211   - redirect_field_name = 'next'
212   - queryset = None
213   - template_name = 'users/search.html'
214   - paginate_by = 10
  210 +# #login_url = reverse_lazy("core:home")
  211 +# redirect_field_name = 'next'
  212 +# queryset = None
  213 +# template_name = 'users/search.html'
  214 +# paginate_by = 10
215 215  
216   - def get_context_data(self, **kwargs):
217   - context = super(SearchView, self).get_context_data(**kwargs)
218   - search = self.request.GET.get('search', None)
  216 +# def get_context_data(self, **kwargs):
  217 +# context = super(SearchView, self).get_context_data(**kwargs)
  218 +# search = self.request.GET.get('search', None)
219 219  
220 220  
221   - return context
  221 +# return context
222 222  
223 223  
224 224 def login(request):
... ... @@ -226,7 +226,7 @@ def login(request):
226 226 context['title'] = 'Log In'
227 227  
228 228 if request.POST:
229   - username = request.POST['username']
  229 + username = request.POST['email']
230 230 password = request.POST['password']
231 231 user = authenticate(username=username, password=password)
232 232 if user is not None:
... ...