2016-06-30 03:39:07 +02:00
from django . db import models
2016-07-03 14:36:51 +02:00
from django . forms import ModelForm , Form
2016-07-02 04:40:24 +02:00
from django import forms
2016-07-06 02:56:30 +02:00
import re
2016-06-30 03:39:07 +02:00
2016-07-03 02:15:17 +02:00
from django . utils import timezone
2016-07-03 14:36:51 +02:00
from topologie . models import Room
2016-07-03 15:26:44 +02: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 02:56:30 +02: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 03:39:07 +02:00
class User ( models . Model ) :
STATE_ACTIVE = 0
STATE_DEACTIVATED = 1
STATE_ARCHIVED = 2
STATES = (
2016-06-30 20:18:06 +02:00
( 0 , ' STATE_ACTIVE ' ) ,
( 1 , ' STATE_DEACTIVATED ' ) ,
( 2 , ' STATE_ARCHIVED ' ) ,
2016-06-30 03:39:07 +02:00
)
name = models . CharField ( max_length = 255 )
surname = models . CharField ( max_length = 255 )
2016-07-06 12:02:49 +02: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 03:39:07 +02:00
email = models . EmailField ( )
2016-07-05 11:33:27 +02:00
school = models . ForeignKey ( ' School ' , on_delete = models . PROTECT , null = False , blank = False )
2016-07-04 17:54:52 +02:00
comment = models . CharField ( help_text = " Commentaire, promo " , max_length = 255 , blank = True )
2016-07-03 14:36:51 +02:00
room = models . OneToOneField ( ' topologie.Room ' , on_delete = models . PROTECT , blank = True , null = True )
2016-06-30 03:39:07 +02:00
pwd_ssha = models . CharField ( max_length = 255 )
pwd_ntlm = models . CharField ( max_length = 255 )
2016-07-01 01:03:28 +02:00
state = models . IntegerField ( choices = STATES , default = STATE_ACTIVE )
2016-07-03 01:29:26 +02:00
registered = models . DateTimeField ( auto_now_add = True )
2016-06-30 03:39:07 +02:00
2016-07-01 01:03:28 +02:00
def __str__ ( self ) :
2016-07-02 04:40:24 +02:00
return self . pseudo
2016-06-30 03:39:07 +02:00
2016-07-02 02:42:04 +02: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 04:40:24 +02:00
def __str__ ( self ) :
return str ( self . user ) + " - " + str ( self . right )
2016-06-30 03:39:07 +02:00
class School ( models . Model ) :
name = models . CharField ( max_length = 255 )
2016-07-01 01:03:28 +02:00
def __str__ ( self ) :
return self . name
2016-07-02 02:42:04 +02:00
class ListRight ( models . Model ) :
listright = models . CharField ( max_length = 255 )
def __str__ ( self ) :
return self . listright
2016-07-02 21:57:31 +02:00
class Ban ( models . Model ) :
user = models . ForeignKey ( ' User ' , on_delete = models . PROTECT )
raison = models . CharField ( max_length = 255 )
2016-07-03 01:29:26 +02:00
date_start = models . DateTimeField ( auto_now_add = True )
2016-07-05 16:30:46 +02:00
date_end = models . DateTimeField ( help_text = ' %d / % m/ % y % H: % M: % S ' )
2016-07-02 21:57:31 +02:00
def __str__ ( self ) :
return str ( self . user ) + ' ' + str ( self . raison )
2016-07-04 20:04:11 +02: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 16:30:46 +02:00
date_end = models . DateTimeField ( help_text = ' %d / % m/ % y % H: % M: % S ' )
2016-07-04 20:04:11 +02:00
def __str__ ( self ) :
return str ( self . user ) + ' ' + str ( self . raison )
2016-06-30 03:46:31 +02:00
class InfoForm ( ModelForm ) :
2016-07-03 15:26:44 +02:00
force = forms . BooleanField ( label = " Forcer le déménagement ? " , initial = False , required = False )
2016-07-01 11:08:35 +02:00
def __init__ ( self , * args , * * kwargs ) :
super ( InfoForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' name ' ] . label = ' Nom '
2016-07-04 22:45:30 +02:00
self . fields [ ' surname ' ] . label = ' Prénom '
self . fields [ ' school ' ] . label = ' Établissement '
2016-07-04 17:54:52 +02:00
self . fields [ ' comment ' ] . label = ' Commentaire '
self . fields [ ' room ' ] . label = ' Chambre '
2016-07-05 11:33:27 +02:00
self . fields [ ' room ' ] . empty_label = " Pas de chambre "
self . fields [ ' school ' ] . empty_label = " Séléctionner un établissement "
2016-07-01 11:08:35 +02:00
2016-07-03 15:26:44 +02:00
def clean_force ( self ) :
if self . cleaned_data . get ( ' force ' , False ) :
remove_user_room ( self . cleaned_data . get ( ' room ' ) )
return
2016-06-30 03:46:31 +02:00
class Meta :
model = User
2016-07-04 17:54:52 +02:00
fields = [ ' name ' , ' surname ' , ' pseudo ' , ' email ' , ' school ' , ' comment ' , ' room ' ]
2016-06-30 03:46:31 +02:00
2016-07-05 11:33:27 +02:00
class UserForm ( InfoForm ) :
class Meta ( InfoForm . Meta ) :
fields = ' __all__ '
2016-06-30 03:46:31 +02:00
class PasswordForm ( ModelForm ) :
class Meta :
model = User
fields = [ ' pwd_ssha ' , ' pwd_ntlm ' ]
2016-07-01 11:08:35 +02:00
class StateForm ( ModelForm ) :
2016-06-30 03:46:31 +02:00
class Meta :
model = User
fields = [ ' state ' ]
2016-06-30 03:39:07 +02:00
class SchoolForm ( ModelForm ) :
class Meta :
model = School
fields = [ ' name ' ]
2016-07-02 02:42:04 +02:00
2016-07-06 19:45:36 +02:00
def __init__ ( self , * args , * * kwargs ) :
super ( SchoolForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' name ' ] . label = ' Établissement à ajouter '
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 02:42:04 +02:00
class RightForm ( ModelForm ) :
def __init__ ( self , * args , * * kwargs ) :
super ( RightForm , self ) . __init__ ( * args , * * kwargs )
self . fields [ ' right ' ] . label = ' Droit '
2016-07-05 11:33:27 +02:00
self . fields [ ' right ' ] . empty_label = " Choisir un nouveau droit "
2016-07-02 02:42:04 +02:00
class Meta :
model = Right
2016-07-04 22:37:04 +02:00
fields = [ ' right ' ]
2016-07-02 04:40:24 +02: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 21:17:21 +02:00
2016-07-02 21:57:31 +02: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 02:15:17 +02: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 14:36:51 +02:00
2016-07-04 20:04:11 +02: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 14:36:51 +02:00
class ProfilForm ( Form ) :
user = forms . CharField ( label = ' Ok ' , max_length = 100 )