Subversion Repositories wimsdev

Rev

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

#MKUSERLIST
# Constructs .userlist file in specified class (wims_class by default)
#    also constructs .userlist_external if needed

uclass=$wims_read_parm
!default uclass=$wims_class

!if user notwordof $wims_prefix
 wims_prefix=$wims_prefix user
!endif

:mkstart
supclass=!defof class_superclass in wimshome/log/classes/$uclass/.def
reset class_lvl

!if $supclass!=$empty and $supclass!=$uclass
 supertype=!defof class_type in wimshome/log/classes/$supclass/.def
 typename=!defof class_typename in wimshome/log/classes/$uclass/.def
 !if $typename iswordof level program
  !exit
 !endif

 !if $typename issametext course
  class_parent=!defof class_parent in wimshome/log/classes/$uclass/.def
  !if $class_parent!=$empty
   i=!defof class_ocourses in wimshome/log/classes/$class_parent/.def
   i=!makelist $wims_superclass/x for x in $i
   !if $uclass isitemof $i
    uclass=$class_parent
    !goto mkstart
   !endif
  !endif
  clist=$uclass

 !else
  !if / isin $uclass
   class_lvl=!translate internal / to , in $uclass
   class_lvl=$(class_lvl[1])/$(class_lvl[2])
   !if $class_lvl=$uclass
    class_lvl=
    clist=$supclass,$uclass
   !else
    clist=$supclass,$class_lvl,$uclass
   !endif
  !else
   clist=!listuniq $supclass,$uclass
  !endif
 !endif
!else
 typename=class
 clist=$uclass
 supclass=$uclass
!endif

mul_userdir=wimshome/log/classes/$supclass/.users
mul_userdir2=$wims_home/log/classes/$supclass/.users


## On range la liste des utilisateurs par paquets de 1000 (userlist_0, userlist_1, etc...)
start=0
userlist_$start=!sh cd $mul_userdir2; ls 2>/dev/null | head -1000
userlist_$start=!words2items $(userlist_$start)

userlist_lastcnt=!itemcnt $(userlist_$start)

!while $userlist_lastcnt>999
 !advance start
 userlist_$start=!sh cd $mul_userdir2; ls 2>/dev/null | tail -n +$(start)001 | head -1000
 userlist_$start=!words2items $(userlist_$start)
 userlist_lastcnt=!itemcnt $(userlist_$start)
!endwhile

# On supprime une eventuelle liste temporaire "userlist*.raw" dans chaque classe
!for c in $clist
 !sh rm -f $wims_home/log/classes/$c/.userlist.raw 2>/dev/null
 !sh rm -f $wims_home/log/classes/$c/.userlist_external.raw 2>/dev/null
!next

# On parcourt nos paquets de 1000 users
!for N=0 to $start
 !for u in $(userlist_$N)
  !reset user_firstname, user_lastname, user_supervisable,\
        user_class, user_participate, user_exists, user_external_auth
  !readdef $mul_userdir/$u

!!TODO  better to make a special list for user_supervisable who participates
!!( suppress to add supervisor who are registered as participant to appear in userlist)

  !if $user_exists=yes and $user_supervisable!=yes
   userline=:$user_lastname,$user_firstname,$u

   !reset userline_external
   !if $user_external_auth!=$empty
     userline_external=$user_external_auth:$u
   !endif

   !if $typename=course
    !readdef wimshome/log/classes/$uclass/.users/$u
    !if $user_class!=$empty
     !appendfile wimshome/log/classes/$uclass/.userlist.raw $userline,$user_class
     !if $userline_external!=$empty
       !appendfile wimshome/log/classes/$uclass/.userlist_external.raw $userline_external
     !endif
    !endif
   !else

    !if $supclass=$uclass or $uclass isitemof $user_participate
     !appendfile wimshome/log/classes/$uclass/.userlist.raw $userline
     !if $userline_external!=$empty
       !appendfile wimshome/log/classes/$uclass/.userlist_external.raw $userline_external
     !endif
   !endif

    !if $supclass!=$uclass
     !appendfile wimshome/log/classes/$supclass/.userlist.raw $userline
     !if $userline_external!=$empty
       !appendfile wimshome/log/classes/$supclass/.userlist_external.raw $userline_external
     !endif
     !if $class_lvl!=$empty and $class_lvl/ isin $user_participate
      !appendfile wimshome/log/classes/$class_lvl/.userlist.raw $userline
       !if $userline_external!=$empty
        !appendfile wimshome/log/classes/$class_lvl/.userlist_external.raw $userline_external
       !endif
     !endif
    !endif

   !endif

  !endif

 !next u
!next N

basedir=$wims_home/log/classes
basedir2=wimshome/log/classes
!for c in $clist
 !sh sort -f $basedir/$c/.userlist.raw >$basedir/$c/.userlist 2>/dev/null\
  rm -f $basedir/$c/.userlist.raw 2>/dev/null\
  rm -f $basedir/$c/.usernextlist.raw 2>/dev/null\
  rm -f $basedir/$c/.userprevlist.raw 2>/dev/null

 !sh sort -f $basedir/$c/.userlist_external.raw >$basedir/$c/.userlist_external 2>/dev/null\
  rm -f $basedir/$c/.userlist_external.raw 2>/dev/null

 !set nbuser_=!recordcnt $basedir2/$c/.userlist
 !writefile $basedir2/$c/.usernextlist.raw
 !writefile $basedir2/$c/.userprevlist.raw
 !set firstuser=!record 1 of $basedir2/$c/.userlist
 !set firstuser1=$firstuser
 !for l = 2 to $nbuser_
    !set nextuser=!record $l of $basedir2/$c/.userlist
    !appendfile $basedir2/$c/.usernextlist.raw $(firstuser[3]):$(nextuser[3])
    !appendfile $basedir2/$c/.userprevlist.raw $(nextuser[3]):$(firstuser[3])
    !set firstuser=$nextuser
 !next
 !appendfile $basedir2/$c/.usernextlist.raw $(firstuser[3]):$(firstuser1[3])
 !appendfile $basedir2/$c/.userprevlist.raw $(firstuser1[3]):$(firstuser[3])
  !sh mv $basedir/$c/.usernextlist.raw $basedir/$c/.usernextlist\
   mv $basedir/$c/.userprevlist.raw $basedir/$c/.userprevlist
!next c

!read adm/class/stat