Subversion Repositories wimsdev

Rev

Rev 10549 | Rev 10702 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

!! search old technical variable. variable without values are forget

olddon=!record 0 of wimshome/s2/$wims_session/oldtechvar.don
!if $olddon=$empty or $subjob=$empty
    olddon=!sh cd $wims_home/log/classes/$tv_Sclass/.users/;\
grep -r user__ * | awk -F= '$$2!=""{print $$0}'
    olddon=!replace internal :!set user__ by , in $olddon
    olddon=!replace internal = by , in $olddon
    !if $olddon=$empty
        !writefile wimshome/s2/$wims_session/oldtechvar.don EMPTY
    !else
        !writefile wimshome/s2/$wims_session/oldtechvar.don $olddon
    !endif
!endif
!if EMPTY=$olddon
    !reset olddon
!endif
nb=!linecnt $olddon
!if $nb<=0
    error=nooldvar
    job=listvar
    !changeto $job.proc
    !exit
!endif

listclsuser=$empty
nuser=!recordcnt wimshome/log/classes/$wims_class/.userlist
!if $nuser>0
    !for k=1 to $nuser
        u=!record $k of wimshome/log/classes/$wims_class/.userlist
        listclsuser=!append item $(u[3]) to $listclsuser
    !next k
!endif
listlocalname=!item $tv_listlocal of $tv_listname

!! ------ description of variables used:
!! listforbname1 : contient les noms de variables non chargeable car affectés également à des participants extérieurs à la classe
!! listforbname2 : le nom est déjà utilisé comme une variable globale (non modifiable localement)
!! listforbname3 : nom de variable non exploitable ou liste des valeurs trop longue.
!! listnew : variable ajoutable en variable locale
!! listmodify : variable locale modifiable
!! listlogin_$name : contient la liste des logins contenant une valeur pour la variable name
!! listval_$name : liste des différentes valeurs trouvées pour la variable name

!for k=1 to $nb
    l=!line $k of $olddon
    !distribute item $l into varuser,varname,varval
    name2=!text select 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ in $varname
    name2=!nospace $name2
    n=!charcnt $name2
    !if $n>$MAXcharname or $n<1
        listforbname3=!listunion $listforbname3 and $varname
    !else
        varname=$name2
        !if $varname notitemof $tv_listallname
            # eventualy a new vartech
            listnew=!listunion $listnew and $varname
            # precheck condition of localisation (no participant use it outside class)
            !if $varuser notitemof $listclsuser
                listforbname1=!listunion $listforbname1 and $varname
            !endif
        !else
            !if $varname isitemof $listlocalname
                listmodify=!listunion $listmodify and $varname
            !else
                listforbname2=!listunion $listforbname2 and $varname
            !endif
        !endif
    !endif
!next k
listnew=!listcomplement $listforbname1 in $listnew
!! check list of value for new techvar
!for k in $listnew
    newval=!sh grep $k $wims_home/s2/$wims_session/oldtechvar.don
    newval=!column 3 of $newval
    newval=!listuniq $newval
    nb=!itemcnt $newval
    !if $nb>$MAXnbvalue
        listnew=!listcomplement $k in $listnew
        listforbname3=!listunion $listforbname3 and $k
    !endif
!next k
!! check list of value for modify techvar
!for k in $listmodify
    newval=!sh grep $k $wims_home/s2/$wims_session/oldtechvar.don
    newval=!column 3 of $newval
    num=!positionof item $techvar in $tv_listname
    don=!record $num of wimshome/log/classes/$wims_class/.techvar
    oldval=!line 2 of $don
    val=!listuniq $newval,$oldval
    nb=!itemcnt $val
    !if $nb>$MAXnbvalue
        listmodify=!listcomplement $k in $listmodify
        listforbname3=!listunion $listforbname3 and $k
    !endif
!next k

!!debug olddon : $olddon\
!!listforbname1 : $listforbname1\
!!listforbname2 : $listforbname2\
!!listforbname3 : $listforbname3\
!!listnew : $listnew \
!!listmodify : $listmodify

!if $listnew$listforbname1$listforbname2$listmodify=$empty
    error=nooldvar
    job=listvar
    !changeto $job.proc
    !exit
!endif

!! --------------------------- le processus make est à reprendre avec les nouvelles variables.

!if $subjob=make
    nb=!itemcnt $tv_listlocal
    !if $nb>=$MAXtechvar
        error=toomanytechvar
        !reset subjob
        !exit
    !endif
    !if $techvar notitemof $listnew
        error=oldvar_badvar
        !reset subjob
        !exit
    !endif
    num=!replace internal / by A in $wims_class
    !increase nb
    num=$(num)_$nb
    liste=!sh grep $techvar $wims_home/s2/$wims_session/oldtechvar.don
    !if $liste=$empty
        error=oldvar_nouser
        !reset subjob
        !exit
    !endif
!! make the new technical variable
    listval=!column 3 of $liste
    listval=!listuniq $listval
    nbval=!itemcnt $listval
    !if $nbval>$MAXnbvalue
       error=badoldvaluesnb
       !reset subjob
       !exit
    !endif
    !fileappend wimshome/log/classes/$wims_class/.techvar :$techvar\
$listval
    !fileappend wimshome/log/classes/$tv_Sclass/.indextechvar :$techvar,$wims_class,$[$nb]
!! put value in participant file.
    nb=!linecnt $liste
    !for k=1 to $nb
        udon=!line $k of $liste
        !distribute item $udon into login,bb,val
        !setdef !set user_techvar_$num=$val in wimshome/log/classes/$tv_Sclass/.users/$login
        listlogin=!append item $login to $listlogin
    !next k
    !restart module=adm/class/techvar
!endif

!if $subjob=modify
    !if $techvar notitemof $listmodify
        error=oldvar_badvar
        !reset subjob
        !exit
    !endif
    liste=!sh grep $techvar $wims_home/s2/$wims_session/oldtechvar.don
    !if $liste=$empty
        error=oldvar_nouser
        !reset subjob
        !exit
    !endif
    nb=!linecnt $liste
    num=!positionof item $techvar in $tv_listname
    num=$(tv_listtechvar[$num;3])
    cls=!replace internal / by A in $wims_class
    !for k=1 to $nb
        udon=!line $k of $liste
        !distribute item $udon into login,bb,val
        !setdef !set user_techvar_$(cls)_$num=$val in wimshome/log/classes/$tv_Sclass/.users/$login
        listlogin=!append item $login to $listlogin
    !next k
!! modify list of values (if necessary) of technical variable
    listval=!column 3 of $liste
    listval=!listuniq $listval
    don=!record $num of wimshome/log/classes/$wims_class/.techvar
    oldval=!line 2 of $don
    new=!listcomplement $oldval in $listval
    !if $new!=$empty
        nb=!recordcnt wimshome/log/classes/$wims_class/.techvar
        output=$empty
        !for k=1 to $nb
            tmp=!record $k of wimshome/log/classes/$wims_class/.techvar
            !if $k=$num
                tmp=!replace line number 2 by $oldval,$new in $tmp
            !endif
            output=!append line :$tmp to $output
        !next k
        !filewrite wimshome/log/classes/$wims_class/.techvar $output
    !endif
    !restart module=adm/class/techvar&job=userlist
!endif

!!debug detectee : $listoldtmp \
!!chargeable : $listold\
!!mauvais nom : $listbadname\
!!nom deja en utilisation et non modifiable: $listforbname