Rev 16427 | Blame | Compare with Previous | Last modification | View Log | RSS feed
# AddClass
# Let you create a new class, or a group of classes, or a subclass in a group
!read adm/class/limits
!if $qclass!=$empty
qclass=$[$qclass]
!if NaN isin $qclass or $qclass<11111 or $qclass>10^9
error=bad class id
!exit
!endif
!endif
!if $qclass=$empty
:recode
cd=!randint 10^6,10^7-1
test=!defof class_defined in wimshome/log/classes/$cd/.def
!if $test=yes
!goto recode
!endif
!else
test=!defof class_defined in wimshome/log/classes/$qclass/.def
# Si la classe existe :
!if $test=yes
!read scripts/check.class
!if $error!=$empty
!exit
!endif
!readdef $classdeffile
!if $class_type!=2
# You can't add a subclass inside an independent class
# limitation subclasses in a group class
error=class $qclass not a groupement
!exit
!endif
class_nbsubclasses=!recordcnt wimshome/log/classes/$qclass/.subclasses
:new_sub_id
!advance class_nbsubclasses
# If $qclass exists and is a group, we add a subclass inside it.
cd=$qclass/$class_nbsubclasses
classdeffile=wimshome/log/classes/$cd/.def
test=!defof class_defined in $classdeffile
!if $test=yes
# If a subclass has been deleted before, nb_subclass may not correspond to the next available subclass. So we use the next free ID.
!goto new_sub_id
!endif
!else
# Si la classe n'existe pas, on la cree (cela ne peut ĂȘtre qu'un groupement/class individuelle).
cd=$qclass
!endif
!endif
data1=!nonempty lines $data1
data2=!nonempty lines $data2
n1=!linecnt $data1
n2=!linecnt $data2
!for i=1 to $n1
l=!line $i of $data1
l=!translate = to $\
$ in $l
!distribute lines $l into n_,v_
cl_$n_=$v_
!next i
!for i=1 to $n2
l=!line $i of $data2
l=!translate = to $\
$ in $l
!distribute lines $l into n_,v_
su_$n_=$v_
!next i
!for field in cl_description, cl_institution, cl_supervisor, cl_email, cl_password,\
su_lastname, su_firstname, su_password
# Remove unwanted chars
$field=!translate ,!$$"< to $ $ in $($field)
$field=!singlespace $($field)
$field=!trim $($field)
!if $($field) = $empty
error=incomplete (or forbidden chars) in data $field ($($field))
!exit
!endif
!! Remove cl_ or su_ in front of field name
fname = !char 4 to -1 of $field
n=!charcnt $($field)
!! Avoid fields with a minimun length
!if $n<$(min_$fname) and $fname notitemof location
error=data $field too short (<$(min_$fname))
!exit
!endif
!! fields with a maximum length
!if $n>$(max_$fname)
!if $fname isitemof password
error=data $field too long (>$(max_$fname))
!exit
!else
!! truncate
$field=!char 1 to $(max_$fname) of $($field)
!endif
!endif
!! fields with a pattern
!if $fname isitemof email and @ notin $($field)
error=data $field must be a valid email
!exit
!endif
!next field
# make cl_typename in function of cl_type in a individual class or groupement
# 0 -> class
# 1 -> class
# 2 -> group
!if $qclass!=$empty and $cd!=$qclass
cl_type=1
!else
!bound cl_type within 0,2 default 0
!endif
cl_typename = !item ($cl_type+1) of $classtypes
!if $cl_type > 1 and / isin $cd
error=superclass $qclass already exists
!exit
!else
!if / isin $cd
cl_superclass=$qclass
cl_parent=$qclass
!endif
!endif
log = !sh cd $wims_home/log/classes\
mkdir -p $cd\
cd $cd\
mkdir -p .users sheets exams score noscore freeworks freeworksdata\
echo 4 >version
# la date de creation de la classe est automatiquement la date du jour.
cl_creation=!char 1 to 8 of $wims_now
cl_creation=!eval $cl_creation
!default cl_expiration=$[$cl_creation+10000]
!bound cl_limit between integer 1 and 500 default 30
langs=!words2items $wims_site_languages
!bound cl_lang within $langs default en
!default cl_level=H4
!default cl_theme=standard
!default cl_css=-theme-
!default cl_creator=$httpd_REMOTE_ADDR
!default cl_scorecolor=#ffffff, #ff0000, #ff0000, #ff0000, #ffa500, #ffa500, #fff500, #d2ff00, #b9ff00, #2fc42f, #259425
!writefile wimshome/log/classes/$cd/.def !set class_connections=+$ident/$rclass+ $(cl_connections) \
!set class_defined=yes\
!set class_creation=$cl_creation
!for t in $classdefs
!appendfile wimshome/log/classes/$cd/.def !set class_$t=$(cl_$t)
!next t
!writefile wimshome/log/classes/$cd/supervisor !set user_lastname=$su_lastname\
!set user_firstname=$su_firstname\
!set user_password=$su_password\
!set user_email=$cl_email\
!set user_exists=yes
!if $cssfile!=$empty
!writefile wimshome/log/classes/$cd/css $cssfile
!endif
!if $logofile!=$empty
!writefile wimshome/log/classes/$cd/logo $logofile
!endif
log = !sh cd $wims_home/log/classes; ./.build-index $qclass