Commit 7ce54a3ae1f88b17f7bc9ae1947946da888bf5fb

Authored by Zambom
1 parent 2079e350

Refactoring users

amadeus/settings.py
@@ -51,8 +51,10 @@ INSTALLED_APPS = [ @@ -51,8 +51,10 @@ INSTALLED_APPS = [
51 's3direct', 51 's3direct',
52 'django_summernote', 52 'django_summernote',
53 53
  54 + 'amadeus',
54 'users', 55 'users',
55 'localization', 56 'localization',
  57 + 'notifications',
56 'log', 58 'log',
57 59
58 ] 60 ]
localization/migrations/0001_initial.py
1 # -*- coding: utf-8 -*- 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 from __future__ import unicode_literals 3 from __future__ import unicode_literals
4 4
5 from django.db import migrations, models 5 from django.db import migrations, models
users/admin.py
@@ -1,10 +0,0 @@ @@ -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 # coding=utf-8 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 from django import forms 2 from django import forms
7 from django.utils.translation import ugettext_lazy as _ 3 from django.utils.translation import ugettext_lazy as _
8 from rolepermissions.shortcuts import assign_role 4 from rolepermissions.shortcuts import assign_role
9 -from django.contrib.auth.forms import UserCreationForm  
10 from .models import User 5 from .models import User
11 6
12 class Validation(forms.ModelForm): 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 def clean_password(self): 8 def clean_password(self):
51 password = self.cleaned_data.get('password') 9 password = self.cleaned_data.get('password')
52 10
@@ -70,35 +28,6 @@ class ValidationRegister(Validation): @@ -70,35 +28,6 @@ class ValidationRegister(Validation):
70 28
71 return password2 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 class RegisterUserForm(ValidationRegister): 31 class RegisterUserForm(ValidationRegister):
103 password = forms.CharField(label=_('Password'), widget=forms.PasswordInput) 32 password = forms.CharField(label=_('Password'), widget=forms.PasswordInput)
104 password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput) 33 password2 = forms.CharField(label = _('Confirm Password'), widget = forms.PasswordInput)
@@ -111,17 +40,12 @@ class RegisterUserForm(ValidationRegister): @@ -111,17 +40,12 @@ class RegisterUserForm(ValidationRegister):
111 self.instance.set_password(self.cleaned_data['password']) 40 self.instance.set_password(self.cleaned_data['password'])
112 41
113 self.instance.save() 42 self.instance.save()
  43 +
  44 + if self.instance.type_profile == 2:
  45 + assign_role(self.instance, 'student')
114 46
115 return self.instance 47 return self.instance
116 48
117 class Meta: 49 class Meta:
118 model = User 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 # -*- coding: utf-8 -*- 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 from __future__ import unicode_literals 3 from __future__ import unicode_literals
4 4
5 import django.contrib.auth.models 5 import django.contrib.auth.models
6 import django.core.validators 6 import django.core.validators
7 from django.db import migrations, models 7 from django.db import migrations, models
8 -import django.db.models.deletion  
9 import re 8 import re
10 9
11 10
@@ -15,7 +14,6 @@ class Migration(migrations.Migration): @@ -15,7 +14,6 @@ class Migration(migrations.Migration):
15 14
16 dependencies = [ 15 dependencies = [
17 ('auth', '0008_alter_user_username_max_length'), 16 ('auth', '0008_alter_user_username_max_length'),
18 - ('localization', '0001_initial'),  
19 ] 17 ]
20 18
21 operations = [ 19 operations = [
@@ -26,25 +24,18 @@ class Migration(migrations.Migration): @@ -26,25 +24,18 @@ class Migration(migrations.Migration):
26 ('password', models.CharField(max_length=128, verbose_name='password')), 24 ('password', models.CharField(max_length=128, verbose_name='password')),
27 ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), 25 ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
28 ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), 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 ('image', models.ImageField(blank=True, null=True, upload_to='users/', verbose_name='Photo')), 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 ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), 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 ('is_staff', models.BooleanField(default=False, verbose_name='Administrator')), 36 ('is_staff', models.BooleanField(default=False, verbose_name='Administrator')),
44 ('is_active', models.BooleanField(default=True, verbose_name='Active')), 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 ('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')), 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 ('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')), 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 options={ 41 options={
users/migrations/0002_auto_20161219_2218.py
@@ -1,20 +0,0 @@ @@ -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,37 +6,28 @@ from django.utils.translation import ugettext_lazy as _
6 from django.contrib.auth.models import AbstractBaseUser, UserManager, PermissionsMixin 6 from django.contrib.auth.models import AbstractBaseUser, UserManager, PermissionsMixin
7 from django.contrib.staticfiles.templatetags.staticfiles import static 7 from django.contrib.staticfiles.templatetags.staticfiles import static
8 8
9 -from localization.models import City, State  
10 -  
11 class User(AbstractBaseUser, PermissionsMixin): 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 validators.RegexValidator( 12 validators.RegexValidator(
15 re.compile('^[\w.@+-]+$'), 13 re.compile('^[\w.@+-]+$'),
16 _('Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .') 14 _('Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .')
17 , 'invalid' 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 image = models.ImageField(verbose_name = _('Photo'), null=True, blank = True, upload_to = 'users/') 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 type_profile = models.IntegerField(_('Type'), null = True, blank = True, choices = ((1, _('Professor')), (2, _('Student')), (3, _('Coordinator')))) 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 date_created = models.DateTimeField(_('Create Date'), auto_now_add = True) 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 is_staff = models.BooleanField(_('Administrator'), default = False) 26 is_staff = models.BooleanField(_('Administrator'), default = False)
36 is_active = models.BooleanField(_('Active'), default = True) 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 objects = UserManager() 32 objects = UserManager()
42 33
@@ -45,7 +36,7 @@ class User(AbstractBaseUser, PermissionsMixin): @@ -45,7 +36,7 @@ class User(AbstractBaseUser, PermissionsMixin):
45 verbose_name_plural = _('Users') 36 verbose_name_plural = _('Users')
46 37
47 def __str__(self): 38 def __str__(self):
48 - return self.name or self.username 39 + return self.social_name or self.username
49 40
50 def save(self, *args, **kwargs): 41 def save(self, *args, **kwargs):
51 if not self.is_staff and self.type_profile is None: 42 if not self.is_staff and self.type_profile is None:
@@ -53,9 +44,6 @@ class User(AbstractBaseUser, PermissionsMixin): @@ -53,9 +44,6 @@ class User(AbstractBaseUser, PermissionsMixin):
53 44
54 super(User, self).save(*args, **kwargs) 45 super(User, self).save(*args, **kwargs)
55 46
56 - def get_short_name(self):  
57 - return self.name  
58 -  
59 @property 47 @property
60 def image_url(self): 48 def image_url(self):
61 if self.image and hasattr(self.image, 'url'): 49 if self.image and hasattr(self.image, 'url'):
users/templates/users/login.html
@@ -41,8 +41,8 @@ @@ -41,8 +41,8 @@
41 {% csrf_token %} 41 {% csrf_token %}
42 <div class="col-md-10 col-md-offset-1"> 42 <div class="col-md-10 col-md-offset-1">
43 <div class="form-group"> 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 </div> 46 </div>
47 </div> 47 </div>
48 <div class="col-md-10 col-md-offset-1"> 48 <div class="col-md-10 col-md-offset-1">
@@ -51,20 +51,13 @@ @@ -51,20 +51,13 @@
51 <input form="form-login" for="inputSmall" type="password" name="password" class="form-control" id="inputPassword" placeholder="{% trans 'Password' %}"> 51 <input form="form-login" for="inputSmall" type="password" name="password" class="form-control" id="inputPassword" placeholder="{% trans 'Password' %}">
52 </div> 52 </div>
53 </div> 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 </form> 54 </form>
62 <div class="row"> 55 <div class="row">
63 <div class="col-md-5 col-xs-6 col-sm-6 col-lg-5 col-lg-offset-1 col-md-offset-1 text-center"> 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 <button type="submite" class="btn btn-success btn-raised btn-block" form="form-login" style="position: initial;"> {% trans 'Log in' %} </button> 57 <button type="submite" class="btn btn-success btn-raised btn-block" form="form-login" style="position: initial;"> {% trans 'Log in' %} </button>
65 </div> 58 </div>
66 <div class="col-md-5 col-xs-6 col-sm-6 col-lg-5 text-center"> 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 </div> 61 </div>
69 </div> 62 </div>
70 <div class="row"> 63 <div class="row">
@@ -74,7 +67,6 @@ @@ -74,7 +67,6 @@
74 </div> 67 </div>
75 </div> 68 </div>
76 </div> 69 </div>
77 - <a class="btn btn-raised btn-primary btn-block" href="#">{% trans 'Sign Up' %} </a>  
78 </div> 70 </div>
79 </div> 71 </div>
80 72
@@ -2,21 +2,7 @@ from django.conf.urls import url @@ -2,21 +2,7 @@ from django.conf.urls import url
2 2
3 from . import views 3 from . import views
4 4
5 -  
6 urlpatterns = [ 5 urlpatterns = [
7 url(r'^login/$', views.login, name='login'), 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,8 +3,9 @@ from django.db.models import Q
3 from django.views import generic 3 from django.views import generic
4 from django.contrib import messages 4 from django.contrib import messages
5 from rolepermissions.mixins import HasRoleMixin 5 from rolepermissions.mixins import HasRoleMixin
  6 +from django.contrib.auth import authenticate, login as login_user
6 from django.contrib.auth.mixins import LoginRequiredMixin 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 from django.utils.translation import ugettext_lazy as _ 9 from django.utils.translation import ugettext_lazy as _
9 from rolepermissions.shortcuts import assign_role 10 from rolepermissions.shortcuts import assign_role
10 from rolepermissions.verifications import has_role 11 from rolepermissions.verifications import has_role
@@ -12,7 +13,6 @@ from itertools import chain @@ -12,7 +13,6 @@ from itertools import chain
12 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 13 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
13 14
14 from .models import User 15 from .models import User
15 -from .forms import UserForm, UpdateProfileForm  
16 16
17 17
18 #API IMPORTS 18 #API IMPORTS
@@ -21,204 +21,204 @@ from .serializers import UserSerializer @@ -21,204 +21,204 @@ from .serializers import UserSerializer
21 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly 21 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
22 22
23 # ================ ADMIN ======================= 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 def login(request): 224 def login(request):
@@ -226,7 +226,7 @@ def login(request): @@ -226,7 +226,7 @@ def login(request):
226 context['title'] = 'Log In' 226 context['title'] = 'Log In'
227 227
228 if request.POST: 228 if request.POST:
229 - username = request.POST['username'] 229 + username = request.POST['email']
230 password = request.POST['password'] 230 password = request.POST['password']
231 user = authenticate(username=username, password=password) 231 user = authenticate(username=username, password=password)
232 if user is not None: 232 if user is not None: