#!../eu/peu
constant progname="Aanmelden Budodag" 

ifdef CGI_BIN
 putenv("PEUINC=../eu/include") 
 include FCGI.E 
elsedef
 include ../teams/FSERVER.E
enddef
include readf.e
include ../teams/FORMDEF.E

global sequence derror={"Foutje bestaat niet !",
                "Geen activiteit gegeven !",
                "Geen naam gegeven",
                "Niet geboren ?",
                "Geen correct eMail adres gegeven !"
                },
                dcomment={"Programma foutje",
                "",
                "",
                "Jaar mag '80 of 80 of 1980 zijn",
                "eMail moet min. @ en . bevatten"}               
include ../teams/FORMINS.E --d_error() , split()

-- externals 
-- menuvb:menu-open
-- formvb:editOrg,ontwerper

-- definitie van een external (geeft adres) :
-- atom editOrgID=routine_id("editOrg") 

sequence respbuf,respcmd,header=""  --worden gemaakt in decoder()

procedure response_to()
write_client("<pre>"&respbuf&"</pre>")
-- continue              
cmdbuf={}
end procedure 

function split_post(sequence file)
sequence input,output={},output1={},output2={}
 for i=1 to length(file) do
   input=sreadf(file[i],'=') -- zelfde als split alleen converteerd getallen
   if sequence(input) and length(input)>1 
   then output1=append(output1,input[1])
        output2=append(output2,input[2])
   end if
 end for
 if length(output1)!=0 then output={output1,output2} end if
return output
end function
 
function is_email_juist(sequence text)
integer atpos= find('@',text)
if atpos
then return find('.',text[atpos..])
else return 0
end if
end function

sequence year=fdate(),short_year=value(year[-2..$]) short_year=short_year[2] 
         year=value(year[-4..$]) year=year[2]
         
--       naam=1,geb=2,email=3 index van persoon 
--       zet naam e.d. leeg 
sequence persoon={{},{},{}} 
--       kata=1,sp3=2,skills=3 index van selectie
sequence selectie_text={"Kata Trainig","3-Sporten Trainig","Model-Skills Trainig"}
--       zet selectie op niet geseleteed
sequence selectie={0,0,0} 
integer  NOMAILFLAG -- wel of geen mail genereren
sequence errors     -- collectie van gekonstateerde fouten

procedure lees_page()
sequence post=split_post(split(POSTCMD,'\n'))
integer  i=1 
errors={1} -- default error voor geen selectie gegeven
if length(post)!=0 
then -- post is een sequence van 2 sequence . 
      --1=sequence van "name" 2=sequence van "value" uit submit form
     while  i<= length(post[1]) do 
     -- de selectie ligt als "name" onder 200 n.l. 101,102,103
     if post[1][i]<200
     then  errors={} 
           selectie[post[1][i]-100]=post[2][i]
     elsif post[1][i]=202 -- naam
     then if sequence(post[2][i]) and length(post[2][i])!=0
          then  persoon[post[1][i]-201]=post[2][i]          --naam
          else  errors=append(errors,post[1][i]-200)        --geen naam
          end if   
     elsif post[1][i]=203 -- geb
     then  if sequence(post[2][i])
           then  if length(post[2][i])=3
                 then post[2][i]=post[2][i][2..3]
                 end if
                 post[2][i]=value(post[2][i]) 
                 if post[2][i][1]
                 then errors=append(errors,post[1][i]-200) -- geen getal
                 else post[2][i]=post[2][i][2]
                 end if
           elsif post[2][i]<100 -- opgave '00 - '99 of 00 - 99
           then  if post[2][i]>=short_year--als year = 2015 dan short_year = 15
                 then post[2][i]+=1900 
                 else post[2][i]+=2000
                 end if
           end if 
           if find(post[1][i]-200,errors)=0 -- is al fout sla over
           then if post[2][i]<=year
                then persoon[post[1][i]-201]=sprintf("%u",post[2][i]) --geboren
                else errors=append(errors,post[1][i]-200)  -- niet bestand jaar
                end if                     
           end if
     elsif post[1][i]=204 -- mail
     then if sequence(post[2][i]) and length(post[2][i])!=0
          then -- mail moet min a-z[[a-z][0-9]]@a-z[[a-z][0-9]].a-z[[a-z][0-9]]
                if is_email_juist(post[2][i])
                then persoon[post[1][i]-201]=post[2][i]    --mail
                else errors=append(errors,post[1][i]-200)  -- ill mail
                end if 
          else  errors=append(errors,post[1][i]-200) -- no mail
          end if
     else -- must be hidden mail flag 
          NOMAILFLAG=post[2][i]  
     end if
     i+=1
     end while
else -- error of lege file 
     write_client("<h1>no data</h1>")   
end if 
end procedure              

procedure inschrijfing()
     lees_page() -- error check
     -- zijn er fouten ? 
     if length(errors) 
     then d_error(errors,{})
     elsif NOMAILFLAG -- wil je mail maken en versturen ?
     then -- gegeven opdr. nomail of mail is al verstuurd .
          write_client("<p><h2>er word geen mail gemaakt</h2>")
     else write_client("<p><h2>U krijgt een bevestigings mail</h2>")
          NOMAILFLAG=1
          add_hide(300,sprintf("%4.4i",NOMAILFLAG)) -- geen mail meer sturen
          -- maak en verzend mail als bevestiging en naar organisatie
     end if 
end procedure

procedure aanmelding()
write_client("oh wat mooi")
add_form("_ta")
add_table(0,2,90,1)
-- text waarover gaat het
add_row(108,2,100,3,0)
add_text(108,1,"Ik wil mij opgeven voor (meerde keuzen mogelijk)")
-- keuze met check
add_row(108,2,30,0,0)
add_check(109,'k',101,selectie_text[1],selectie[1],selectie_text[1])
add_col(108,2,30,0,0)
add_check(109,'s',102,selectie_text[2],selectie[2],selectie_text[2])
add_col(108,2,30,0,0) 
add_check(109,'m',103,selectie_text[3],selectie[3],selectie_text[3])
-- vraag om eigen ID gegevens
add_row(108,1,30,0,0)
add_text(108,1,"Mijn naam is : ") add_input_text(1000,'n',25,202,persoon[1])
add_col(108,2,30,0,0) 
add_text(108,1," geboorte jaar : ") add_input_text(1000,'n',4,203,persoon[2])
add_col(108,2,30,0,0) 
add_text(108,1," mijn eMail is : ") add_input_text(1000,'n',30,204,persoon[3])
-- div=error leeg /div                                   
add_row(0,2,0,3,0)
write_client("<dev id=\"error\">")
add_hide(300,sprintf("%4.4i",NOMAILFLAG)) -- geen mail mee sturen
write_client(" ")
write_client("</dev>")
--
add_row(108,2,100,3,0)
d_oke_reset_niets()
write_client("</table>")
write_client("</form>")
-- zet alle variablen in een sequence om te kunnen reloaden .   
end procedure
integer main_pageID=routine_id("aanmelding") -- init page

procedure open_inschrijving() -- setup page 
       if respcmd="nomail"
       then NOMAILFLAG=1
       else NOMAILFLAG=0
       end if
       new_page(progname,"?MF.CSS","silver")
       -- schrijf het menu en schrijf opening 
       program(progname,"0.0",0,main_pageID) -- geen menu
end procedure     

-- voor niet CGI_BIN geldt :
-- loep totdat een quit commando wordt gegeven
-- als cmdbuf leeg is de volgende command_from_client
-- anders kijk of het commando bestaat .
-- Dus iedere procedure/functie moet een opdracht in cmdbuf zetten !!
-- cmdbuf={} haal opdracht van browser
-- cmdbuf=xx gebruiker bepaald
-- voor CGI_BIN geldt :
-- commando staat in cmdbuf 
-- systeem beeind na 1 commando
--
-- Voor beide optie wordt de data altijd via POST verstuurd . 
--
-- <menufoo> -->  <menu> -->  <foo>
-- menutab schrijft <menu> alsmede <foo>
-- menunew schrijft <menu> en geen <foo>
--
 
function command_decoder()
constant onbekend="<center><h1>Onbekende opdracht</h1><br><h2>Commando = "  
integer index
while length(cmdbuf) do  
  -- internal command heeft de structuur opdracht?parameters
  index=find('?',cmdbuf)
  if index then
  respcmd=cmdbuf[1..index-1] respbuf=cmdbuf[index+1..]
  else
  respcmd=cmdbuf             respbuf="" 
  end if 
  -- een XMLHTTPreg welke beantwoord wordt met HTTP blijkt te worden genegeerd .
  -- bedenk dat de namen voor XMLHTTP en HTTP altijd verschilend zijn .
  if find('_',respcmd) then
    --(XMLHTTPreq)  deze moeten allen worden benoemd !
    if    respcmd="_n"   then write_client(header&"error| ") write_client(" ") cmdbuf={} -- do nothing [X] venster sluiten , maakt formfield leeg
    elsif respcmd="_ta"  then write_client(header&"error| ") inschrijfing() cmdbuf={} -- formulier ingevult
    else  respbuf=onbekend&respcmd&"</h2></center>"
          write_client(header&"foo|") response_to() cmdbuf={}--unknown command
    end if
  
  else 
    --(HTTPreq)     geen XMLHTTPreq dan moet het behandeld worden als HTTPreq
    if respcmd="4" or lower(respcmd)="quit" 
    then 
         return 0 --quit server
    elsif respcmd="index" -- default opdracht
    then
         -- openings pagina
         open_inschrijving()
         cmdbuf={}
    else
         -- openings pagina
         open_inschrijving()          
         cmdbuf={}
    end if
  end if
end while  
return 1 
end function   

-- main program 
ifdef CGI_BIN
if command_from_client() then
     if nph_flag 
     then header=""
     else header="Content-type: text/plain\n\n" 
     end if
     if command_decoder()   
     then close_page()  -- close van new_page (beetje vreemd voor XMLHTTP)
     else quitserver()
     end if   
end if    
elsedef 
netserver()-- init sever
while 1 do -- run server until close session 
     command_from_client()
     if command_decoder()   
     then close_page()   -- close van new_page (beetje vreemd voor XMLHTTP)
     else quitserver() exit
     end if   
end while
enddef