Rev 14139 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
# GetSheetScores
# Donne les notes de l'ensemble des utilisateurs pour la feuille $qsheet
# Pour commencer, on verifie la classe
!read scripts/check.class
!if $error!=$empty
!exit
!endif
# Puis la feuille
type=sheets
!read scripts/check.proc
!if $error!=$empty
!exit
!endif
sheet_properties=!lines2items $qproperties\
sheet_status=!item 1 of $sheet_properties
!if $sheet_status<1 or $sheet_status>2
error=Sheet #$qsheet must be active
!exit
!endif
nbsheets=!recordcnt wimshome/log/classes/$qclass/sheets/.sheets
active_index=0
nb_active=0
!for i=1 to $nbsheets
sheet_properties=!record $i of wimshome/log/classes/$qclass/sheets/.sheets
status=!line 1 of $sheet_properties
!if $status>=1 and $status<=2
!advance nb_active
!endif
!if $qsheet=$i
active_index=$nb_active
!endif
!next i
class_superclass=!defof class_superclass in $classdeffile
# Un utilisateur est toujours stocké dans la superclasse, pas dans la sous-classe.
!if $class_superclass != $empty
users_dir = wimshome/log/classes/$class_superclass/.users
!else
users_dir = wimshome/log/classes/$qclass/.users
!endif
!read adm/class/mkuserlist $qclass
usercnt=!recordcnt wimshome/log/classes/$qclass/.userlist
!if $usercnt=0
error=There is no user in this class
!exit
!endif
!default option=login,name,allscores
option=!singlespace $option
option=!lower $dl
sheet_mean_quality=0
sheet_mean_percent=0
sheet_max_percent =0
sheet_max_quality =0
!writefile wimshome/sessions/$wims_session/data.scores \
!for u=1 to $usercnt
l=!record $u of wimshome/log/classes/$qclass/.userlist
quser=!item 3 of $l
lastname=!item 1 of $l
firstname=!item 2 of $l
!defread $users_dir/$quser
#getscorepercent fournit les donnes globales de la feuille : pourcentage de realisation et qualite
sheet_summaries=!getscorepercent user=$quser class=$qclass
sheet_summaries=!line $qsheet of $sheet_summaries
#user_percent pourcentage des points cumulés
# (en abrégé "cumul" : valeur sur 100 qui correspond à 100*I0 dans les formules données dans l'aide de wims)
user_percent=!word 1 of $sheet_summaries
#user_quality qualité (valeur sur 10 correspond à 10*Q dans les formules)
user_quality=!word 2 of $sheet_summaries
#user_best niveau de réussite (en abrégé "Réussite" :
# valeur sur 100 qui correspond à 100*I1 dans les formules)
user_best =!word 3 of $sheet_summaries
#user_level niveau d'acquisition (en abrégé "Acquis" :
# valeur sur 100 qui correspond à 100*I2 dans les formules)
user_level =!word 4 of $sheet_summaries
sheet_mean_quality = $[$sheet_mean_quality + $user_quality]
sheet_mean_percent = $[$sheet_mean_percent + $user_percent]
!default user_percent=0
!default user_quality=0
!default user_best=0
!default user_level=0
!if $user_percent>$sheet_max_percent
sheet_max_percent=$user_percent
!endif
!if $user_quality>$sheet_max_quality
sheet_max_quality=$user_quality
!endif
## correspondance avec les scores affichés dans WIMS :
# score -> I0
# best -> I1
# level -> I2
# mean -> Q
got_detail = !getscore user=$quser class=$qclass sheet=$qsheet
best_detail = !getscorebest user=$quser class=$qclass sheet=$qsheet
level_detail = !getscorelevel user=$quser class=$qclass sheet=$qsheet
mean_detail = !getscoremean user=$quser class=$qclass sheet=$qsheet
remain = !getscoreremain user=$quser class=$qclass sheet=$qsheet
last_detail = !getscorelast user=$quser class=$qclass sheet=$qsheet
try_detail = !getscoretry user=$quser class=$qclass sheet=$qsheet
!for v in got_detail, mean_detail, remain, best_detail, level_detail, last_detail, try_detail
$v=!trim $($v)
!if $v != $empty
$v=!wordstoitems $($v)
$v=[$($v)]
!else
$v=""
!endif
!next v
new_line = :"id":"$quser", "first_name":"$firstname", "last_name":"$lastname", "user_percent":$user_percent, "user_quality":$user_quality, "user_level":$user_level, "user_best":$user_best, "got_detail":$got_detail, "mean_detail":$mean_detail, "remain":$remain, "best_detail":$best_detail, "level_detail":$level_detail, "last_detail":$last_detail, "try_detail":$try_detail
# Pour des raisons de performance (wims interdit des variables trop gourmandes), on enregistre maintenant les donnees dans un fichier, toutes les 50 lignes
data_scores = !append line $new_line to $data_scores
!ifval $u % 50 = 0
!appendfile wimshome/sessions/$wims_session/data.scores $data_scores
data_scores = $empty
!endif
!next u
!appendfile wimshome/sessions/$wims_session/data.scores $data_scores
sheet_mean_quality=$[$sheet_mean_quality/$usercnt]
sheet_mean_percent=$[$sheet_mean_percent/$usercnt]
requires = !record 0 of wimshome/log/classes/$qclass/sheets/.require
requires = !line $qsheet of $requires
score_status=!getscorestatus class=$qclass
severity=!record 0 of wimshome/log/classes/$qclass/sheets/.severity
scoremax=!line 1 of $severity
!default scoremax=10
severity=!line $qsheet+1 of $severity
!distribute words $severity into weight,formulaA,formulaB
df_severity=!defof DF_SEVERITY in wimshome/public_html/bases/sys/define.conf
!distribute word $df_severity into t1,t2,t3
!default weight = $t1
!default formulaA = $t2
!default formulaB = $t3
!set formula_list=!record 0 of adm/class/sheetformula
formulaA=!item $formulaA+1 of $formula_list
weights = !record 0 of wimshome/log/classes/$qclass/sheets/.weight
weights = !line $qsheet of $weights