Patch title: Release 90 bulk changes
Abstract:
File: /fullpliant/login.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/fullpliant/user.pli"


function is_administrator user -> admin
  arg Str user ; arg CBool admin
  var Data:User u :> user_database:data:user user
  each r u:right
    if r:right="administrator"
      return true
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/fullpliant/user.pli"


function is_administrator user -> admin
  arg Str user ; arg CBool admin
  var Data:User u :> user_database:data:user user
  each r u:right
    if r:right="administrator"
      return true
  each t u:template
    each r user_database:data:user:t:right
      if r:right="administrator"
        return true
  admin := false


function user_update user first_name name abstract password_
  arg Str user first_name name abstract password_md5 server 
  remote server
    control c is_password_server:c
    control c not is_administrator:user
    share status
    user_database:data:user create user
    user_database2:data:user create user
    user_secret_database:data:user create user
    var Data:User u :> user_database:data:user user
    u first_name := first_name
    u name := name
    u abstract := abstract
    user_secret_database:data:user:user password_md5 := pass
  local_streaming s
    each r user_database:data:user:user:right
      s writeline "right "+(string keyof:r)+" "+(string r:au
  admin := false


function user_update user first_name name abstract password_
  arg Str user first_name name abstract password_md5 server 
  remote server
    control c is_password_server:c
    control c not is_administrator:user
    share status
    user_database:data:user create user
    user_database2:data:user create user
    user_secret_database:data:user create user
    var Data:User u :> user_database:data:user user
    u first_name := first_name
    u name := name
    u abstract := abstract
    user_secret_database:data:user:user password_md5 := pass
  local_streaming s
    each r user_database:data:user:user:right
      s writeline "right "+(string keyof:r)+" "+(string r:au
    each t user_database:data:user:user:template
      s writeline "template "+(string keyof:t)+" "+string:t
  remote_streaming s
    var Data:User u :> user_database:data:user user
  remote_streaming s
    var Data:User u :> user_database:data:user user
    var (Dictionary Str Void) lines
    var (Dictionary Str Void) lines templates
    while not s:atend
    while not s:atend
      if (s:readline parse "right" (var Str id) (var Str aut
        u:right create id
        var Data:UserRight r :> u:right id
        r auth := auth+"3" 0 ; r ip := ip ; r server := serv
      if (s:readline parse "right" (var Str id) (var Str auth) (var Str ip) (var Str server) (var Str right))
        if right<>"administrator"
          u:right create id
          var Data:UserRight r :> u:right id
          r auth := auth+"3" 0 ; r ip := ip ; r server := server ; r right := right
        lines insert id void
        lines insert id void
      eif (s:readline parse "template" (var Str id) (var Str template))
        if not is_administrator:template
          u:template create id
          u:template id := template
        templates insert id void
    each r u:right
      if not exists:(lines first keyof:r)
        u:right delete keyof:r
    each r u:right
      if not exists:(lines first keyof:r)
        u:right delete keyof:r
    each t u:template
      if not exists:(templates first keyof:t)
        u:template delete keyof:t
  success
    status := success
  failure
    status := failure


export login_record
export user_update user_change_password user_delete
  success
    status := success
  failure
    status := failure


export login_record
export user_update user_change_password user_delete