Subversion Repositories wimsdev

Rev

Rev 17470 | Blame | Compare with Previous | Last modification | View Log | RSS feed

!! -------- check user
user=$wims_user
clsfile=wimshome/log/classes/$wims_class/swork/averagescore
Clsfile=$wims_home/log/classes/$wims_class/swork/averagescore
ufile=wimshome/log/classes/$wims_class/swork/averagescore.$user
Ufile=$wims_home/log/classes/$wims_class/swork/averagescore.$user
time1=!record 0 of $ufile
time1=!line 1 of $time1
!distribute word $time1 into time1,majdate,bl
!default time1=0
test=!fileexists $ufile
!if $test=yes and ($[$wims_nowseconds-$time1]<3600*$swork_refreshtiming or ($swork_allowrefresh=1 and $refresh!=1))
  !exit
!endif
!readproc proc/loguserwork.proc $user
time2=!record 0 of $clsfile
time2=!word 1 of $time2
!default time2=0
!if $[$wims_nowseconds-$time2]<3600
  userlist=$user
!else
  !reset userlist
  !for k=1 to $nbuser
    d=!record $k of wimshome/log/classes/$wims_class/.userlist
    userlist=!append item $(d[3]) to $userlist
  !next k
  !writefile $clsfile $wims_nowseconds $wims_now
  !! generation indice de difficulte of each exercise
  !sh export exostat_dirbase exostat_types exostat_classes\
    exostat_dirbase=$wims_home/log/classes\
    exostat_types="score"\
    exostat_classes="$wims_class"\
    ../bin/exostat >$wims_home/log/classes/$wims_class/exostat
  !reset indice
  t=!recordcnt wimshome/log/classes/$wims_class/exostat
  ms=1
  me=0
  max=0
  !for k=1 to $t
    dt=!record $k of wimshome/log/classes/$wims_class/exostat
    !distribute word $dt into bl,s,e,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,bl,i
    !if $s>$ms
      ne=!recordcnt wimshome/log/classes/$wims_class/sheets/.sheet$ms
      me=!itemcnt $ligne
      !ifval $me<$ne
        !for j=1 to $[$ne-$me]
          ligne=!append item - to $ligne
        !next j
      !endif
      indice=!append line $ligne to $indice
      !reset ligne
      ms=$s
      me=0
    !endif
    !ifval $e>$me+1
      !for j=1 to $[$e-$me-1]
        ligne=!append item - to $ligne
      !next j
    !endif
    !if $i>0
      ligne=!append item $i to $ligne
      max=$[max($max,$i)]
    !else
      ligne=!append item - to $ligne
    !endif
    me=$e
  !next k
  time2=yes
  !! ------ fin de generation
  indice=!replace internal - by $max in $indice
!endif
time1=$wims_nowseconds
!writefile $ufile $wims_nowseconds $wims_now 10000000
majdate=$wims_now
nbuser=!recordcnt wimshome/log/classes/$wims_class/.userlist
!for sh=1 to $nbsheet
  dtsh=!record $sh of wimshome/log/classes/$wims_class/sheets/.sheets
  stat=!line 1 of $dtsh
  !if $stat!=0
    nbexo=!recordcnt wimshome/log/classes/$wims_class/sheets/.sheet$sh
    average=!values 0 for v=1 to $nbexo
    count=$average
    max=$average
    average2=$average
    lsev=!line $[$sh+1] of $severity
    !distribute word $lsev into swei,rule,indic
    formula=!item $rule of $formulas
    wei=!getscoreweight user=$user sheet=$sh
    wei=!words2items $wei
    totwei=!replace internal , by + in $wei
    totwei=$[$totwei]
    !reset useraverage
    !for dtu in $userlist
      lq=!getscoremean user=$dtu sheet=$sh
      !if $indic=0
        li=!getscore user=$dtu sheet=$sh
        re=!getscorerequire user=$dtu sheet=$sh
      !else
        !if $indic=1
          li=!getscorebest user=$dtu sheet=$sh
          re=!getscorerequire user=$dtu sheet=$sh
        !else
          li=!getscorelevel user=$dtu sheet=$sh
          re=!values 1 for v=1 to $nbexo
          re=!items2words $re
        !endif
      !endif
      !!calcul du score pour chaque exo
      !reset lave lmax lcount lave2
      !for k=1 to $nbexo
        ewei=!word $k of $wei
        elq=!word $k of $lq
        eli=!word $k of $li
        rei=!word $k of $re
        !if $rei!=0
          ave=!replace internal I by $[$eli/10/$rei] in $formula
        !else
          ave=!replace internal I by 1 in $formula
        !endif
        ave=!replace internal Q by $[$elq/10] in $ave
        ave=$[rint($ave*1000)]
        !if $dtu=$user
          useraverage=!append item $ave to $useraverage
        !endif
        try=!getscoretry user=$dtu sheet=$sh work=$k
        !if $try>0
          cnt=$[$(count[$k])+1]
          lcount=!append item $cnt to $lcount
        !else
          lcount=!append item $(count[$k]) to $lcount
        !endif
        lmax=!append item $[max($ave,$(max[$k]))] to $lmax
        ave=$[$(ave)+$(average[$k])]
        lave=!append item $ave to $lave
      !next k
      count=$lcount
      average=$lave
      max=$lmax
    !next dtu
    !reset tmp tmp2
    !if $time2!=yes
      tmp=!record $sh of $clsfile
    !endif
    !for k=1 to $nbexo
      !if $time2=yes
        ave=$[rint($(average[$k])/$nbuser)]
        !if $(count[$k])!=0
          ave2=$[rint($(average[$k])/$(count[$k]))]
        !else
          ave2=0
        !endif
        m=$[rint($(max[$k]))]
        ind=$(indice[$sh;$k])
        tmp=!append line $sh $k $ave $m $ave2 $ind to $tmp
      !else
        ave=!line $k of $tmp
        m=!word 4 of $ave
        ave2=!word 5 of $ave
        ind=!word 6 of $ave
        !default ind=1
        ave=!word 3 of $ave
      !endif
      !if $(wei[$k])!=0 and $swei!=0
        val=$[rint(100*($ave - $(useraverage[$k])) *$swei * $(wei[$k])/($totwei*$ind))]
        !if $val<=0
          val=-1000
        !endif
      !else
        !if $swei!=0
          val=$[-10000*$swei]
        !else
          val=-10000
        !endif
      !endif
      m2=$[rint(100*($m - $(useraverage[$k])) *$swei * $(wei[$k])/($totwei*$ind))]
      !appendfile $ufile :$sh $k $val $m2 $ave $m $ave2
    !next k
    !if $time2=yes
      !appendfile $clsfile :$tmp
    !endif
  !else
    !if $time2=yes
      !appendfile $clsfile :
    !endif
  !endif
!next sh

!sh sort -n -r -k 3 -k 4 $Ufile > $wims_home/sessions/$wimss_session/tmp.swork;\
    mv -f $wims_home/sessions/$wimss_session/tmp.swork $Ufile