1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
|
# mkuserlist
# Constructs .userlist file in specified class (wims_class by default)
# constructs .usernextlist and .userprevlist
# also constructs .userlist_external if needed
uclass=$wims_read_parm
!default uclass=$wims_class
# What's the point of $wims_prefix ?
!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
!!case of program can occur in case of intercourse
!if $typename iswordof level
!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
tn=!defof class_typename in wimshome/log/classes/$class_parent/.def
!!!if $tn=program
!! clist=$class_parent
!!!endif
!endif
clist=!listuniq $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
pack_size = 500
## On range la liste des utilisateurs par paquets de $pack_size (userlist_0, userlist_1, etc...)
start=0
userlist_$start=!sh cd $mul_userdir2; ls 2>/dev/null | head -$pack_size
userlist_$start=!words2items $(userlist_$start)
userlist_lastcnt=!itemcnt $(userlist_$start)
!while $userlist_lastcnt>$[$pack_size-1]
!advance start
userlist_$start=!sh cd $mul_userdir2; ls 2>/dev/null | tail -n +$[$start*$pack_size+1] | head -$pack_size
userlist_$start=!words2items $(userlist_$start)
userlist_lastcnt=!itemcnt $(userlist_$start)
!endwhile
## On supprime une eventuelle liste temporaire "userlist*.raw" dans chaque classe
## just junk
!for c in $clist
!sh rm -f $wims_home/log/classes/$c/.userlist.raw 2>/dev/null\
rm -f $wims_home/log/classes/$c/.userlist_external.raw 2>/dev/null
!next
## On parcourt nos paquets de $pack_size 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
obl=!defof class_ocourses in wimshome/log/classes/$class_parent/.def
obl=!makelist $wims_superclass/x for x in $obl
!if $uclass isitemof $user_participate and $uclass notitemof $obl
user_class=!replace internal $supclass/ by in $class_parent
!setdef !set user_class=$user_class in wimshome/log/classes/$uclass/.users/$u
!endif
!endif
!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
### do it for the $supclass ? could be done many times if not in a group ?
!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
## do it for the intermediaire class ? could be done many times
!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\
sort -f $basedir/$c/.userlist_external.raw > $basedir/$c/.userlist_external 2>/dev/null\
rm -f $basedir/$c/.userlist_external.raw 2>/dev/null
!next
## Now the files .userlist and .userlist_external are created in the classes of $clist,
## so in the sup classes of $uclass. Do we need to do that (it is done many times for
## the portal ...
## do now the .usernextlist and .userprevlist only in the class $uclass
## in fact, there is only one class in $uclass. Leave the loop for the moment
!for c in $uclass
!sh rm -f $basedir/$c/.usernextlist.raw 2>/dev/null\
rm -f $basedir/$c/.userprevlist.raw 2>/dev/null
!set nbuser_=!recordcnt $basedir2/$c/.userlist
!if $nbuser_=0
!break
!endif
record_start = 1
remaining = $nbuser_ - 1
## On parcourt nos users par paquets de $pack_size
!while $remaining > 0
nb_processing = $[min($remaining, $pack_size)]
record_end = $[$record_start+$nb_processing]
list_n=!record $record_start to $record_end of $basedir2/$c/.userlist
list_n=!column 3 of $list_n
nextuser=!makelist $$(list_n[x]), $$(list_n[x+1]); for x=1 to $nb_processing
nextuser=!nospace $nextuser
nextuser=!replace internal ;, by ; in $nextuser
prevuser=!nospace $(nextuser[;2,1])
prevuser=!rows2lines $prevuser
prevuser=!replace internal , by : in $prevuser
nextuser=!rows2lines $nextuser
nextuser=!replace internal , by : in $nextuser
!appendfile $basedir2/$c/.usernextlist.raw $nextuser
!appendfile $basedir2/$c/.userprevlist.raw $prevuser
record_start = $record_start + $nb_processing
remaining = $remaining - $nb_processing
!endwhile
first_user = !record 1 of $basedir2/$c/.userlist
first_user = !item 3 of $first_user
last_user = !record -1 of $basedir2/$c/.userlist
last_user = !item 3 of $last_user
!appendfile $basedir2/$c/.usernextlist.raw $last_user:$first_user
!appendfile $basedir2/$c/.userprevlist.raw $first_user:$last_user
!sh mv $basedir/$c/.usernextlist.raw $basedir/$c/.usernextlist\
mv $basedir/$c/.userprevlist.raw $basedir/$c/.userprevlist
!next c
|