2016-06-30 01:39:07 +00:00
from django . db import models
2016-07-03 12:36:51 +00:00
from django . forms import ModelForm , Form
2016-07-02 02:40:24 +00:00
from django import forms
2016-07-06 00:56:30 +00:00
import re
2016-06-30 01:39:07 +00:00
2016-07-03 00:15:17 +00:00
from django . utils import timezone
2016-07-03 12:36:51 +00:00
from topologie . models import Room
2016-07-03 13:26:44 +00:00
def remove_user_room ( room ) :
""" Déménage de force l ' ancien locataire de la chambre """
try :
user = User . objects . get ( room = room )
except User . DoesNotExist :
return
user . room = None
user . save ( )
2016-07-06 00:56:30 +00:00
def linux_user_validator ( login ) :
""" Validation du pseudo pour respecter les contraintes unix """
UNIX_LOGIN_PATTERN = re . compile ( " ^[a-z_][a-z0-9_-]*[$]?$ " )
if not UNIX_LOGIN_PATTERN . match ( login ) :
raise forms . ValidationError (
" , ce pseudo ( ' %(label)s ' ) contient des carractères interdits " ,
params = { ' label ' : login } ,
)
2016-06-30 01:39:07 +00:00
class User ( models . Model ) :
STATE_ACTIVE = 0
STATE_DEACTIVATED = 1
STATE_ARCHIVED = 2
STATES = (
2016-06-30 18:18:06 +00:00
( 0 , ' STATE_ACTIVE ' ) ,
( 1 , ' STATE_DEACTIVATED ' ) ,
( 2 , ' STATE_ARCHIVED ' ) ,
2016-06-30 01:39:07 +00:00
)
name = models . CharField ( max_length = 255 )
surname = models . CharField ( max_length = 255 )
2016-07-06 10:02:49 +00:00
pseudo = models . CharField ( max_length = 32 , unique = True , help_text = " Doit contenir uniquement des lettres, chiffres, ou tirets " , validators = [ linux_user_validator ] )
2016-06-30 01:39:07 +00:00
email = models . EmailField ( )
2016-07-05 09:33:27 +00:00
school = models . ForeignKey ( ' School ' , on_delete = models . PROTECT , null = False , blank = False )
2016-07-04 15:54:52 +00:00
comment = models . CharField ( help_text = " Commentaire, promo " , max_length = 255 , blank = True )
2016-07-03 12:36:51 +00:00
room = models . OneToOneField ( ' topologie.Room ' , on_delete = models . PROTECT , blank = True , null = True )
2016-06-30 01:39:07 +00:00
pwd_ssha = models . CharField ( max_length = 255 )
pwd_ntlm = models . CharField ( max_length = 255 )
2016-06-30 23:03:28 +00:00
state = models . IntegerField ( choices = STATES , default = STATE_ACTIVE )
2016-07-02 23:29:26 +00:00
registered = models . DateTimeField ( auto_now_add = True )
2016-06-30 01:39:07 +00:00
2016-06-30 23:03:28 +00:00
def __str__ ( self ) :
2016-07-02 02:40:24 +00:00
return self . pseudo
2016-06-30 01:39:07 +00:00
2016-07-02 00:42:04 +00:00
class Right ( models . Model ) :
user = models . ForeignKey ( ' User ' , on_delete = models . PROTECT )
right = models . ForeignKey ( ' ListRight ' , on_delete = models . PROTECT )
class Meta :
unique_together = ( " user " , " right " )
2016-07-02 02:40:24 +00:00
def __str__ ( self ) :
return str ( self . user ) + " - " + str ( self . right )
2016-06-30 01:39:07 +00:00
class School ( models . Model ) :
name = models . CharField ( max_length = 255 )
2016-06-30 23:03:28 +00:00
def __str__ ( self ) :
return self . name
2016-07-02 00:42:04 +00:00
class ListRight ( models . Model ) :
listright = models . CharField ( max_length = 255 )
def __str__ ( self ) :
return self . listright
2016-07-02 19:57:31 +00:00
class Ban ( models . Model ) :
user = models . ForeignKey ( ' User ' , on_delete = models . PROTECT )
raison = models . CharField ( max_length = 255 )
2016-07-02 23:29:26 +00:00
date_start = models . DateTimeField ( auto_now_add = True )
2016-07-05 14:30:46 +00:00
date_end = models . DateTimeField ( help_text = ' %d / % m/ % y % H: % M: % S ' )
2016-07-02 19:57:31 +00:00
def __str__ ( self ) :
return str ( self . user ) + ' ' + str ( self . raison )
2016-07-04 18:04:11 +00:00
class Whitelist ( models . Model ) :
user = models . ForeignKey ( ' User ' , on_delete = models . PROTECT )
raison = models . CharField ( max_length = 255 )
date_start = models . DateTimeField ( auto_now_add = True )
2016-07-05 14:30:46 +00:00
date_end = models . DateTimeField ( help_text = ' %d / % m/ % y % H: % M: % S ' )
2016-07-04 18:04:11 +00:00
def __str__ ( self ) :
return str ( self . user ) + ' ' + str ( self . raison )
2016-06-30 01:46:31 +00:00
class InfoForm ( ModelForm ) :
2016-07-03 13:26:44 +00:00
force = forms . BooleanField ( label = " Forcer le déménagement ? " , initial = False , required = False )
2016-07-01 09:08:35 +00:00
def __init__ ( self , * args , * * kwargs ) :
super ( InfoForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' name ' ] . label = ' Nom '
2016-07-04 20:45:30 +00:00
self . fields [ ' surname ' ] . label = ' Prénom '
self . fields [ ' school ' ] . label = ' Établissement '
2016-07-04 15:54:52 +00:00
self . fields [ ' comment ' ] . label = ' Commentaire '
self . fields [ ' room ' ] . label = ' Chambre '
2016-07-05 09:33:27 +00:00
self . fields [ ' room ' ] . empty_label = " Pas de chambre "
self . fields [ ' school ' ] . empty_label = " Séléctionner un établissement "
2016-07-01 09:08:35 +00:00
2016-07-03 13:26:44 +00:00
def clean_force ( self ) :
if self . cleaned_data . get ( ' force ' , False ) :
remove_user_room ( self . cleaned_data . get ( ' room ' ) )
return
2016-06-30 01:46:31 +00:00
class Meta :
model = User
2016-07-04 15:54:52 +00:00
fields = [ ' name ' , ' surname ' , ' pseudo ' , ' email ' , ' school ' , ' comment ' , ' room ' ]
2016-06-30 01:46:31 +00:00
2016-07-05 09:33:27 +00:00
class UserForm ( InfoForm ) :
class Meta ( InfoForm . Meta ) :
fields = ' __all__ '
2016-06-30 01:46:31 +00:00
class PasswordForm ( ModelForm ) :
class Meta :
model = User
fields = [ ' pwd_ssha ' , ' pwd_ntlm ' ]
2016-07-01 09:08:35 +00:00
class StateForm ( ModelForm ) :
2016-06-30 01:46:31 +00:00
class Meta :
model = User
fields = [ ' state ' ]
2016-06-30 01:39:07 +00:00
class SchoolForm ( ModelForm ) :
class Meta :
model = School
fields = [ ' name ' ]
2016-07-02 00:42:04 +00:00
2016-07-06 17:45:36 +00:00
def __init__ ( self , * args , * * kwargs ) :
super ( SchoolForm , self ) . __init__ ( * args , * * kwargs )
2016-07-08 00:25:12 +00:00
self . fields [ ' name ' ] . label = ' Établissement '
2016-07-06 17:45:36 +00:00
class DelSchoolForm ( ModelForm ) :
schools = forms . ModelMultipleChoiceField ( queryset = School . objects . all ( ) , label = " Etablissements actuels " , widget = forms . CheckboxSelectMultiple )
class Meta :
exclude = [ ' name ' ]
model = School
2016-07-02 00:42:04 +00:00
class RightForm ( ModelForm ) :
def __init__ ( self , * args , * * kwargs ) :
super ( RightForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' right ' ] . label = ' Droit '
2016-07-05 09:33:27 +00:00
self . fields [ ' right ' ] . empty_label = " Choisir un nouveau droit "
2016-07-02 00:42:04 +00:00
class Meta :
model = Right
2016-07-04 20:37:04 +00:00
fields = [ ' right ' ]
2016-07-02 02:40:24 +00:00
class DelRightForm ( ModelForm ) :
rights = forms . ModelMultipleChoiceField ( queryset = Right . objects . all ( ) , label = " Droits actuels " , widget = forms . CheckboxSelectMultiple )
class Meta :
model = Right
exclude = [ ' user ' , ' right ' ]
2016-07-02 19:17:21 +00:00
2016-07-02 19:57:31 +00:00
class BanForm ( ModelForm ) :
def __init__ ( self , * args , * * kwargs ) :
super ( BanForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' date_end ' ] . label = ' Date de fin '
class Meta :
model = Ban
exclude = [ ' user ' ]
2016-07-03 00:15:17 +00:00
def clean_date_end ( self ) :
date_end = self . cleaned_data [ ' date_end ' ]
if date_end < timezone . now ( ) :
raise forms . ValidationError ( " Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps " )
return date_end
2016-07-03 12:36:51 +00:00
2016-07-04 18:04:11 +00:00
class WhitelistForm ( ModelForm ) :
def __init__ ( self , * args , * * kwargs ) :
super ( WhitelistForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' date_end ' ] . label = ' Date de fin '
class Meta :
model = Whitelist
exclude = [ ' user ' ]
def clean_date_end ( self ) :
date_end = self . cleaned_data [ ' date_end ' ]
if date_end < timezone . now ( ) :
raise forms . ValidationError ( " Triple buse, la date de fin ne peut pas être avant maintenant... Re2o ne voyage pas dans le temps " )
return date_end
2016-07-03 12:36:51 +00:00
class ProfilForm ( Form ) :
user = forms . CharField ( label = ' Ok ' , max_length = 100 )