Subversion Repositories wimsdev

Rev

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


# This line prevents clashes of users with same login.
adduser_replace=nopass
wims_priv_cryptpass=allow
wims_deposit=!word 1 of $wims_deposit
!if $wims_deposit=$empty
  !exit
!endif

!if / isin $wims_deposit or .. isin $wims_deposit
  error=bad_filename
  !exit
!endif

d=!translate . to $ $ in $wims_deposit
d=!word -1 of $d
!if $d notwordof csv tsv txt
  error=bad_filename
  !exit
!endif

sdir=$wims_home/$wims_sesdir
t=!exec ftype $sdir/user-deposit
!if $t=$empty
  !exit
!endif
!if $t=binary
  error=binary_upload
  !exit
!endif

!sh grep . $sdir/user-deposit | awk '{print ":"$$0}' | tr '     "' ', ' >$sdir/user_deposit
file=wimshome/$wims_sesdir/user_deposit

!read csv/gotlogin $file,login

!if $gotlogin=$empty
  !read adm/class/initclass $wims_class,auth
  !if $auth_method notitemof $auth_method_list
    error=no_login
    !exit
  !else
    !read csv/gotlogin $file,external_auth
    !if $(gotexternal_auth)=$empty
      error=no_login_external_auth
      !exit
    !else
      extern=yes
    !endif
  !endif
!endif

remark=
!if sheet isin $types or exam isin $types or average isin $types
  remark=$remark noauto
!endif

prop=no
!if noauto iswordof $remark
  !!or manual isin $types prop are changed now.
  remark=$remark noprop
!else
  !! pourquoi cette condition ???
  !if firstname isitemof $types and lastname isitemof $types
    prop=yes
  !endif
  !read adm/class/userremain.proc
!endif

!if manual isin $types
  manual=yes
!endif

replacelist=$types
types=!replace , by ,up_ in up_$types
types_cnt=!itemcnt $types
gotcnt=!itemcnt $loglist
propcnt=0
gradecnt=0
!reset missing erased bad added change badlogin
processed=yes
!! on parcourt la liste des lignes des bons logins
!for i = 1 to $gotcnt
  l=$(loglist[$i])
  l__=$(logtest[$i])
  !reset up_firstname,up_lastname,up_email,up_password,up_comments,up_regnum,up_photourl,\
    up_vars,up_participate,up_external_auth,up_supervise,up_supervisable
  !! fill in the fields ...
  !distribute items $(dep_$l__) into $types
  !for m = 1 to $types_cnt
    typ=$(types[$m])
    !if Aup_var_ isin A$typ
      typ1=!replace internal up_var_ by  in $typ
      !if $typ1 isitemof $tv_listlocalname
        up_vars=!append line $typ1=$($typ) to $up_vars
      !endif
    !endif
  !next m
  up_vars=!lines2rows $up_vars
  !if $extern=yes
    up_external_auth=!lowercase $l
    l=!lookup $l in wimshome/$sclassdir/.userlist_external
    !if $l=$empty
      l=!lookup $l in wimshome/$sclassdir/.teacherlist_external
    !endif
    !if $l=$empty
      !if $idp_method=ldap
        !!define login_method
        !read adm/class/initldap
      !endif
      !read adm/class/hashlogin $up_external_auth,$wims_class,$login_method
      l=$login
      !default up_password=!randint 1999999,3000000
    !endif
  !endif extern=yes

  !! $l is now the login in all cases
  exist=!defof user_exists in wimshome/$userdir/$l
  existsup=$exist
  !if $existsup=yes
    lfname=!defof user_lastname,user_firstname,user_external_auth in wimshome/$userdir/$l
    !default up_firstname=$(lfname[2])
    !default up_lastname=$(lfname[1])
    !default up_external_auth=$(lfname[3])
    !if $up_firstname!=$empty and $up_lastname!=$empty
      prop=yes
    !endif
  !else
    !!FIXME
    !if $idp_method isitemof $idp_method_list and ($up_firstname=$empty or $up_lastname=$empty)
      !! I am not sure of what we must do : priority to the idp or to the modification of the teacher ?
      !distribute item $up_firstname, $up_lastname into up_firstname_ , $up_lastname_
      !read adm/class/idp_$idp_method $up_external_auth
      !if $up_lastname_!=$empty
        up_lastname=$up_lastname_
      !endif
      !if $up_firstname_!=$empty
        up_firstname=$up_firstname_
      !endif
      !if $up_firstname!=$empty and $up_lastname!=$empty
        prop=yes
      !endif
    !endif
  !endif
  !if $wims_superclass!=$empty and $wims_superclass!=$wims_class
    participate=!defof user_participate in wimshome/$userdir/$l
    !if $wims_class notitemof $participate
      !if $wims_typename=course
        tmp=!defof class_parent in wimshome/log/classes/$wims_class/.def
        !if $(tmp)!=$empty and $tmp notitemof $participate
          exist=
        !endif
        !reset tmp
      !else
        exist=
      !endif
    !endif
  !endif
  !if $exist=yes
    !if $prop=yes
      !read adm/class/adduser $l
    !endif
  !else
    exist2=!defof user_exists in wimshome/$userdir/.$l
    !if $exist2=yes
      erased=!append item $l to $erased
    !else
      missing=!append item $l to $missing
      !! ici aussi on a besoin d'avoir le nom et prenom
      !if $existsup=yes or ($up_firstname!=$empty and $up_lastname!=$empty and $up_password!=$empty)
        !if $prop=yes
          !if $userremain>0
            !read adm/class/adduser $l
            !if $l notitemof $bad
              added=!append item $l to $added
                    userremain=$[$userremain-1]
            !endif  l notitemof bad
          !else
            remark=$remark full
          !endif userremain
        !endif prop=yes
      !else
        !if $up_password=$empty
          pass_missing=yes
        !endif
      !endif firstname ... non empty
    !endif exist2=yes
  !endif exist=yes
!next l
!if $change!=$empty
  !read adm/class/mkuserlist
  !if $classtype isin 24
    !read adm/gateway/mkteacherlist
  !endif
  !read adm/class/stat
  wims_class_log=spreadsheet userinfo by $wims_realuser
!endif
missing=!listcomplement $added in $missing
change=!listcomplement $added in $change
added=!listcomplement $missing in $added

!if $manual=yes
  fn=wimshome/log/classes/$wims_class/.grades
  fu=wimshome/log/classes/$wims_class/.userlist
  l=!record 1 of $fn
  t=!line 2 of $l
  n=!itemcnt $t
  n=$[$n-2]
  !if $n<1
    error=no_manual
    !exit
  !endif
  otypes=nn
  !for i=1 to $n
    otypes=$otypes,o_$i
  !next i
  first=$l
  cnt=!recordcnt $fn
  list_grades=$empty
  !for u=2 to $cnt
    l=!record $u of $fn
    uu=!item 1 of $l
    list_grades=!append item $uu to $list_grades
    orig_$uu=!item 2 to -1 of $l
  !next u
  !writefile $fn :$first
  cnt=!recordcnt $fu
  list_user=$empty
  joker=--
  !for i=1 to $cnt
    l_=!record $i of $fu
    u=!item 3 of $l_
    list_user=!append item $u to $list_user
    !distribute items $(dep_$u) into $types
    !distribute items $(orig_$u) into $otypes
    t_=!defof user_firstname user_lastname in wimshome/$userdir/$u
    !for i=1 to $n
      l_=$[$(up_manual$i)]
      !if NaN isin $l_ or Inf isin $l_ or $l_<0 or $l_>100000 or $(up_manual$i)=$empty
        l_=$joker
      !endif
      !default l_=$(o_$i)
      !default l_=$joker
      t_=!append item $l_ to $t_
    !next i
    t_=!replace internal $joker by $empty in $t_
    !appendfile $fn :$u,$t_
  !next u
  list_deleted=!listcomplement $list_user in $list_grades
  !if $list_deleted!=$empty
    nbdel=!itemcnt $list_deleted
    !for k=1 to $nbdel
      !appendfile $fn :$(list_deleted[$k]),$(orig_$(list_deleted[$k]))
    !next k
  !endif
  wims_class_log=spreadsheet grades by $wims_realuser
!endif