Subversion Repositories wimsdev

Rev

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