Patch title: Release 92 bulk changes
Abstract:
File: /appli/forum.pli
Key:
    Removed line
    Added line
   
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/protocol/common/mime.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "/pliant/fullpliant/user.pli"


function post_message f d m freq
  arg_rw Data:Forum f ; arg_rw Data:ForumDebate d ; arg Data
  var Str base := f:path+"out/"+freq+generate_id
  var Str subject
  if freq="i"
    if (exists f:subject:(d:subject))
      subject := f:subject:(d:subject):label+": "+d:title
    else
      subject := d title
  eif freq="h"
    subject := f:title+" - hourly report"
  eif freq="d"
    subject := f:title+" - daily report"
  eif freq="w"
    subject := f:title+" - weekly report"
  var Str boundary := (repeat 8 "-")
  for (var Int i) 1 (max 128\8\uInt:size 1)
    var uInt rnd ; memory_strong_random addressof:rnd Int:si
    boundary += string rnd "radix 36"
  if freq<>"i"
    var List:Str keys
    each dd f:debate
      var CBool some := false
      each mm dd:message
        if (mm:report search freq -1)=(-1)
          some := true
      if some
        keys += keyof dd
    if not (exists keys:first)
      return
  var DateTime now := datetime
  (var Stream s) open base+".tmp" out+mkdir+safe
  s writeline "From: "+f:from
  s writeline "Subject: "+subject
  s writeline "Date: "+rfc1123_date:now
  s writeline "X-Mailer: Pliant forum "+string:pliant_releas
  s writeline "MIME-Version: 1.0"
  s writeline "Content-Type: multipart/mixed; boundary=[dq]"
  s writeline ""
  s writeline "This is a multi-part message in MIME format."
  s writeline boundary
  s writeline "Content-Type: text/html; charset=iso-8859-1"
  s writeline ""
  s writeline "<!DOCTYPE HTML PUBLIC [dq]-//W3C//DTD HTML 3.
  s writeline "<html>"
  s writeline "<head>"
  s writeline "<title>"+html_encode:subject+"</title>"
  s writeline "</head>"
  s writeline "<body>"
  if freq="i"
    s writeline "<table>"
    post_debate f d 1 s
    post_message m s
    s writeline "</table>"
  else
    var Pointer:Str k :> keys first
    s writeline "<p>"
    while exists:k
      var Data:ForumDebate dd :> f:debate k
      if (exists f:subject:(dd:subject))
        s writeline "<i>"+(html_encode f:subject:(dd:subject
      s writeline "<a href=[dq]#"+k+"[dq]>"+html_encode:(shu
      k :> keys next k
    s writeline "</p>"
    var Pointer:Str k :> keys first
    while exists:k
      s writeline "<p>"
      s writeline "<a name=[dq]"+k+"[dq]></a>"
      s writeline "<table>"
      var Int count := 0
      each mm f:debate:k:message
        if (mm:report search freq -1)=(-1)
          count += 1
      post_debate f f:debate:k count s
      each mm f:debate:k:message
        if (mm:report search freq -1)=(-1)
          post_message mm s
          mm report := mm:report+freq
      s writeline "</table>"
      s writeline "</p>"
      k :> keys next k
  s writeline "</body>"
  s writeline "</html>"
  s writeline boundary+"--"
  s writeline ""
  s close
  var (Link Database:MailMeta) db :> new Database:MailMeta
  db load base+".pdb"
  var Data:MailMeta meta :> db data
  meta push
  meta queued_on := now
  meta from := f from
  each su f:subscriber
    if su:frequency=freq
      meta:target create keyof:su
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"
module "/pliant/protocol/common/mime.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "/pliant/fullpliant/user.pli"


function post_message f d m freq
  arg_rw Data:Forum f ; arg_rw Data:ForumDebate d ; arg Data
  var Str base := f:path+"out/"+freq+generate_id
  var Str subject
  if freq="i"
    if (exists f:subject:(d:subject))
      subject := f:subject:(d:subject):label+": "+d:title
    else
      subject := d title
  eif freq="h"
    subject := f:title+" - hourly report"
  eif freq="d"
    subject := f:title+" - daily report"
  eif freq="w"
    subject := f:title+" - weekly report"
  var Str boundary := (repeat 8 "-")
  for (var Int i) 1 (max 128\8\uInt:size 1)
    var uInt rnd ; memory_strong_random addressof:rnd Int:si
    boundary += string rnd "radix 36"
  if freq<>"i"
    var List:Str keys
    each dd f:debate
      var CBool some := false
      each mm dd:message
        if (mm:report search freq -1)=(-1)
          some := true
      if some
        keys += keyof dd
    if not (exists keys:first)
      return
  var DateTime now := datetime
  (var Stream s) open base+".tmp" out+mkdir+safe
  s writeline "From: "+f:from
  s writeline "Subject: "+subject
  s writeline "Date: "+rfc1123_date:now
  s writeline "X-Mailer: Pliant forum "+string:pliant_releas
  s writeline "MIME-Version: 1.0"
  s writeline "Content-Type: multipart/mixed; boundary=[dq]"
  s writeline ""
  s writeline "This is a multi-part message in MIME format."
  s writeline boundary
  s writeline "Content-Type: text/html; charset=iso-8859-1"
  s writeline ""
  s writeline "<!DOCTYPE HTML PUBLIC [dq]-//W3C//DTD HTML 3.
  s writeline "<html>"
  s writeline "<head>"
  s writeline "<title>"+html_encode:subject+"</title>"
  s writeline "</head>"
  s writeline "<body>"
  if freq="i"
    s writeline "<table>"
    post_debate f d 1 s
    post_message m s
    s writeline "</table>"
  else
    var Pointer:Str k :> keys first
    s writeline "<p>"
    while exists:k
      var Data:ForumDebate dd :> f:debate k
      if (exists f:subject:(dd:subject))
        s writeline "<i>"+(html_encode f:subject:(dd:subject
      s writeline "<a href=[dq]#"+k+"[dq]>"+html_encode:(shu
      k :> keys next k
    s writeline "</p>"
    var Pointer:Str k :> keys first
    while exists:k
      s writeline "<p>"
      s writeline "<a name=[dq]"+k+"[dq]></a>"
      s writeline "<table>"
      var Int count := 0
      each mm f:debate:k:message
        if (mm:report search freq -1)=(-1)
          count += 1
      post_debate f f:debate:k count s
      each mm f:debate:k:message
        if (mm:report search freq -1)=(-1)
          post_message mm s
          mm report := mm:report+freq
      s writeline "</table>"
      s writeline "</p>"
      k :> keys next k
  s writeline "</body>"
  s writeline "</html>"
  s writeline boundary+"--"
  s writeline ""
  s close
  var (Link Database:MailMeta) db :> new Database:MailMeta
  db load base+".pdb"
  var Data:MailMeta meta :> db data
  meta push
  meta queued_on := now
  meta from := f from
  each su f:subscriber
    if su:frequency=freq
      meta:target create keyof:su
      meta:target:(keyof:su) box := su mailbox
      meta:target:(keyof su) box := su mailbox
  db store
  file_move base+".tmp" base+".mail"
  if freq="i"
    forward_mail base+".mail" true "forward a just posted fo


  db store
  file_move base+".tmp" base+".mail"
  if freq="i"
    forward_mail base+".mail" true "forward a just posted fo