#!/usr/bin/perl
###################################################
# Kuntorastien WWW-päivitysohjelma		  #
# Copyright Matti Tahvonen 			  #
# matti.tahvonen@paimionrasti.fi		  #
###################################################

## KONFIGUROINTIOSA ##
$viikkorastienNimi ="Peimarin Rastit";
$yllapitaja ="Ilkka Aakula";
$yllapitajaEmail ="ilkka.aakula\@tietoenator.com";
$ekaviikko = 13;
$vikaviikko = 43;
$datahakemisto = "/home/paimionrasti/public_html/peimari";
$tulosalihakemisto = "tulokset";
$indeksi = "index.shtml";
$indeksiURL = "http://www.paimionrasti.fi/peimari/index.shtml";
$ohjelmaURL = "http://www.paimionrasti.fi/peimari/kuntorasti.pl";
$headerTiedosto ="header.html";
$footerTiedosto ="footer.html";
$Salasana ="wwwtulos";
$sendmail = "/usr/sbin/sendmail -t";
$sender = "peimarinrastit\@paimionrasti.fi";


#Tämän alle periaatteessa ei tarvi koskea.
############################################################

## PÄÄOHJELMA ##
&print_header;
&lue_parametrit;

if ($FORM{'viikko'} > 0 && $FORM{'viikko'} < 53 && $FORM{'salasana'} eq "$Salasana") {
  if ($FORM{'toiminto'} eq "muokkaa") {
	
    open(TULOKSET,"$datahakemisto/$tulosalihakemisto/$FORM{'viikko'}.shtml");
    $tulosrivi = <TULOKSET>;
    close (TULOKSET);
	
    if ($tulosrivi eq "") {
      &lisaa_tiedot;
    } else {
      &muokkaa_tietoja;
    }
  } elsif ($FORM{'toiminto'} eq "poistalinkki") {
    &poista_linkki;
  } elsif ($FORM{'toiminto'} eq "kirjoita") {
    &kirjoita_tiedot;
  } elsif ($FORM{'toiminto'} eq "email") {
    &email;
  } else {
    print "<H1>Vittu! toiminta vituiks! Hälytä maza paikalle.</H1>";
  }
} else {
  if ($salasana ne "") {
    print "<H1>Salasana väärin.</H1>";
  }
  &kysy_viikko;
}

&print_footer;

## ALIOHJELMAT ##

sub email{

  $FORM{'viesti_kl'} =~ s/\r//g;
  $FORM{'otsikko_kl'} =~ s/\r//g;
  $FORM{'otsikko_sss'} =~ s/\r//g;
  $FORM{'otsikko_kl'} =~ s/\n//g;
  $FORM{'otsikko_sss'} =~ s/\n//g;

    
  open (MAIL,"|$sendmail");
  print MAIL "To: $FORM{'email_kl'}\n";
  print MAIL "From: $sender\n";
  print MAIL "Subject: $FORM{'otsikko_kl'}\n";
  print MAIL "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  print MAIL "$FORM{'viesti_kl'}\n\n";
  close MAIL;

  open (MAIL,"|$sendmail");
  print MAIL "To: $FORM{'email_sss'}\n";
  print MAIL "From: $sender\n";       
  print MAIL "Subject: $FORM{'otsikko_sss'}\n";
  print MAIL "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  print MAIL "$FORM{'viesti_sss'}\n\n";     
  close MAIL;

  print "<H2>Tiedot lähteneet lehtiin</H2>";
}

sub lue_parametrit{
  local($name,$value);

  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

  @pairs = split(/&/, $buffer);

  foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);

    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

    $value =~ s/\0//g;
    $value =~ s/<!--(.|\n)*-->//g;

    $value =~ s/<([^>]|\n)*>//g;
    $value =~ s/\r//g;
    if ($name eq "juttu") {
      $value =~ s/\n/<BR>/g;
    }
	  
    $FORM{$name} = $value;
  }
}

## Lukee tiedot tiedostoista ##

sub muokkaa_tietoja {

  print <<EndOfHTML;
	<H3>Muokkaat viikon $FORM{'viikko'}	tietoja:</H3>
	<form action=$ohjelmaURL method=post>
	<input type=hidden name=viikko value=$FORM{'viikko'}>
EndOfHTML
  ;
		
  open(TULOKSET,"$datahakemisto/$tulosalihakemisto/$FORM{'viikko'}.shtml") || die $!;
  @tulokset = <TULOKSET>;
  close(TULOKSET);

  foreach (@tulokset) {
    chomp($_);
    if (/<!--tulokset-->/i) {
      if ($inarea == 0) {
	$inarea = 1;
	print "Tulokset<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"tulokset\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
      } else {
	$inarea = 0;print "\n</TEXTAREA><BR>\n";
      }
    } elsif (/<!--otsikko-->/i) {
      if ($inarea == 0) {
	$inarea = 1;
	print "Otsikko<BR><TEXTAREA ROWS=\"1\" COLS=\"40\" NAME=\"otsikko\">\n";
      } else {
	$inarea = 0;print "\n</TEXTAREA><BR>\n";
      }
    } elsif (/<!--jarjestelijat-->/i) {
        if ($inarea == 0) {
  	$inarea = 1;$injarj = 1;
  	print "Järjestelijät muodossa (tarvitaan joukkuepeimariin) <pre>Sukunimi Etunimi<br>Sukunimi2 Etunimi2</pre><br><TEXTAREA ROWS=\"8\" COLS=\"40\" NAME=\"jarjestelijat\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
        } else {
  	$inarea = 0;$injarj = 0;print "\n</TEXTAREA><BR>\n";
        }
    } elsif (/<!--juttu-->/i) {
      if ($inarea == 0) {
	$inarea = 1; $juttuflagi=1;
	print "Juttu<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"juttu\">\n";
      } else {
	$inarea = 0;$juttuflagi=0;print "\n</TEXTAREA><BR>\n";
      }
    } else {
      if ($inarea == 1 && $juttuflagi == 1) {
	#chomp($_);
	s/<BR>//g;
	print "$_";
	} elsif ($inarea == 1 && $injarj == 1) {
    	s/<!--//g;
    	s/-->//g;
    	s/  1 //g;
    	chomp($_);
    	print "$_\r\n";
    } elsif ($inarea == 1) {
	chomp($_);
	s/\r//g;
	print "$_\r\n";
      }
    }
  }				#end foreach
   
  open(VA,"$datahakemisto/$tulosalihakemisto/$FORM{'viikko'}va.shtml") || die $!;
  @va = <VA>;
  close(VA);
	
  foreach (@va) {
    chomp($_);
    if (/<!--va-->/i) {
      if ($inarea == 0) {
	$inarea = 1;
	print "Väliajat<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"va\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
      } else {
	$inarea = 0;print "\n</TEXTAREA><BR>\n";
      }
    } else {
      if ($inarea == 1) {
	      chomp($_);
	      s/\r//g;
	      print "$_\r\n";
      }  
    }
  }				#end foreach

  print "Valmistele email lähetettäväksi paikallislehtiin: <input name='email_lehtiin' type=checkbox value='joo' ><BR>\n";
  print "Salasana: <input name='salasana' type=password size=24 maxlength=20 ><BR>\n";
  print "<input name='toiminto' value='kirjoita' type=hidden >\n";
  print "<input type=submit value='Tallenna nettisivuille ja esikatsele E-mail paikallislehtiin' class=input></form>\n";
}

sub lisaa_tiedot {

  print <<EndOfHTML;
	<H3>Muokkaat viikon $FORM{'viikko'}	tapahtumia:</H3>
	<form action=$ohjelmaURL method=post>
	<input type=hidden name=viikko value=$FORM{'viikko'}>
EndOfHTML
  ;

  print "Otsikko<BR><TEXTAREA ROWS=\"1\" COLS=\"40\" NAME=\"otsikko\">\n";  
  print "\n</TEXTAREA><BR>\n";

  print "Juttu<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"juttu\">\n";
  print "\n</TEXTAREA><BR>\n";
  
  print "Järjestelijät muodossa (tarvitaan joukkuepeimariin) <pre>Sukunimi Etunimi<br>Sukunimi2 Etunimi2</pre><br><TEXTAREA ROWS=\"8\" COLS=\"40\" NAME=\"jarjestelijat\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
  print "</TEXTAREA><BR>\n";


  print "Tulokset<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"tulokset\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
  print "\n</TEXTAREA><BR>\n";
	
  print "Väliajat<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"va\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">\n";
  print "\n</TEXTAREA><BR>\n";

  print "Valmistele E-mail lähetettäväksi paikallislehtiin: <input name='email_lehtiin' type=checkbox value='joo' ><BR>\n";         
  print "Salasana: <input name='salasana' type=password size=24 maxlength=20 ><BR>\n";
  print "<input name='toiminto' value='kirjoita' type=hidden >\n";
  print "<input type=submit value='Tallenna nettisivuille ja esikatsele E-mail paikallislehtiin' class=input></form>\n";


}

sub kirjoita_tiedot {

  open(HEADER,"$datahakemisto/$headerTiedosto") || die $!;
  @header = <HEADER>;
  close(HEADER);
  open(FOOTER,"$datahakemisto/$footerTiedosto") || die $!;
  @footer = <FOOTER>;
  close(FOOTER);

  open(TULOKSET, ">$datahakemisto/$tulosalihakemisto/$FORM{'viikko'}.shtml");
  print TULOKSET "@header\n";
	
  print TULOKSET "<H1><!--otsikko-->\n$FORM{'otsikko'}\n<!--otsikko--></H1>\n";

  print TULOKSET "<P>\n";      
  print TULOKSET "<!--juttu-->\n";      
  print TULOKSET "$FORM{'juttu'}\n";      
  print TULOKSET "<!--juttu-->\n";      
  print TULOKSET "</P>\n";      

  print TULOKSET "\n<!--\n99km\n-->\n";      

  print TULOKSET "<!--jarjestelijat-->\n<!--\n";
  @jarj = split(/\n/,$FORM{'jarjestelijat'});
  foreach $j (@jarj) {
      chomp($j);
      if ($j ne '') {
          print TULOKSET "  1 $j\n";
      }
  }
  print TULOKSET "\n-->\n<!--jarjestelijat-->\n";      


  print TULOKSET "<P>\n";      
  print TULOKSET "<A HREF=\"$FORM{'viikko'}va.shtml\">Väliajat</A><BR>\n";      
  print TULOKSET "</P>\n";      


  print TULOKSET "<P>\n";      
  print TULOKSET "<PRE><!--tulokset-->\n";      
  print TULOKSET "$FORM{'tulokset'}\n";      
  print TULOKSET "<!--tulokset--></PRE>\n";      
  print TULOKSET "</P>\n";      


  print TULOKSET "@footer\n";      
  close(TULOKSET);

  open(VA, ">$datahakemisto/$tulosalihakemisto/$FORM{'viikko'}va.shtml");
  print VA "@header\n";
	
  print VA "<H1><!--otsikko-->\n$FORM{'otsikko'}\n<!--otsikko--></H1>\n";
    
  print VA "<P>\n";      
  print VA "<A HREF=\"$FORM{'viikko'}.shtml\">Tulokset ja juttu</A><BR>\n";      
  print VA "</P>\n";      


  print VA "<P>\n";      
  print VA "<B>Väliajat</B><BR>\n";      
  print VA "<PRE><!--va-->\n";      
  print VA "$FORM{'va'}\n";      
  print VA "<!--va--></PRE>\n";      
  print VA "</P>\n";      

  print VA "@footer\n";      
  close(VA);

  &lisaa_linkki;
  print "<H1>Tietosi on tallennettu. Tarkista muutokset!</H1>";
  print "<A HREF=\"$indeksiURL\" target=\"_blank\">Indeksisivu</A>";

  if ($FORM{'email_lehtiin'} eq "joo") {
    &email_lehtiin;
  }
}

sub email_lehtiin {

  print "<form action=$ohjelmaURL method=post>\n
	<input type=hidden name=viikko value=$FORM{'viikko'}>";
	
  @rivit = split(/\n/,$FORM{'tulokset'});

  foreach $rivi (@rivit) {
    $_=$rivi;
    if (/^((\d.*)|(RR.*))$/) {
      $kunnallislehti = "$kunnallislehti  $1 "; $laskuri=0;
    }
    elsif (/\s(\d+)\s+([^\d\s]+|[^\d\s]+ [^\d\s]+) (\S+) +(\d) (\d\d) (\d\d)\s*$/) {
      $laskuri++;
      if ($laskuri<21) { $kunnallislehti = "$kunnallislehti$1\) $3 $2 $4.$5.$6";}
      if($laskuri<20) {$kunnallislehti = "$kunnallislehti, ";}
    }
    elsif (/\s(\d+)\s+([^\d\s]+|[^\d\s]+ [^\d\s]+) (\S+) +(\d+) (\d\d)\s*$/) {
      $laskuri++;
      if ($laskuri<21) {$kunnallislehti = "$kunnallislehti$1\) $3 $2 $4.$5";}
      if($laskuri<20) {$kunnallislehti = "$kunnallislehti, ";}
    }
  }

  foreach $rivi (@rivit) {
    $_=$rivi;
    if (/^((\d.*)|(RR.*))$/) {
      $sss = "$sss  $1 "; $laskuri=0;
    } 
    elsif (/\s(\d+)\s+([^\d\s]+|[^\d\s]+ [^\d\s]+) (\S+) +(\d) (\d\d) (\d\d)\s*$/) {
      $laskuri++; 
      if ($laskuri<16) {$sss = "$sss$1\) $3 $2 $4.$5.$6";} 
      if($laskuri<15) {$sss = "$sss, ";}
    }
    elsif (/\s(\d+)\s+([^\d\s]+|[^\d\s]+ [^\d\s]+) (\S+) +(\d+) (\d\d)\s*$/) {
      $laskuri++; 
      if ($laskuri<16) {$sss = "$sss$1\) $3 $2 $4.$5";}
      if($laskuri<15) {$sss = "$sss, ";}
    }
  }
	
  $FORM{'juttu'} =~ s/<BR>//g;
	
  print <<EndOfHTML;
	<H2>Tulokset lehteen</H2>
	<H3>
Ohjelma valmisteli aineistosta seuraavat emailit joiden pitäisi olla lähes
valmiit paikallislehtiin lähetettäväksi. Tarkista että tulokset ovat ok ja
muokkaa (tarvittaessa) lehtiin lähteviä tietoja. Kirjoita SSS:n viestiin
tiivistetty juttu (paikka, osanottajamäärä, ratamestari...). Lisää SSS:n
tulosten perään informaatio seuraavista Peimarin rasteista (ks. kalenterista
seuraava paikka ja opastus) esim. seuraavasti: \"Opastus seuraaville Peimarin
rasteille 22.05 Alvar Aallontieltä Paimion sairaalan kohdalta\". Huomaa, että
viestit lähtevät osoitteesta peimarinrastit\@paimionrasti.fi. Mahdollisia
kysymyksiä varten olisi hyvä jos pistäisit omat yhteystietosi viestiosan
loppuun. 
	Jos olet jo aiemmin lähettänyt tulokset, älä lähetä uudelleen vaan sulje tämä ikkuna. 
	<form action=$ohjelmaURL method=post>
	<input type=hidden name=viikko value=$FORM{'viikko'}>
EndOfHTML
  ;
  print "<HR>";
	
  print "Vastaanottaja:<BR><TEXTAREA ROWS=\"1\" COLS=\"40\" NAME=\"email_kl\">toimitus\@kunnallislehti.fi</TEXTAREA><BR>\n";
  print "Otsikko<BR><TEXTAREA ROWS=\"1\" COLS=\"100\" NAME=\"otsikko_kl\">$FORM{'otsikko'}</TEXTAREA><BR>\n";
  print "Viesti<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"viesti_kl\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">$FORM{'otsikko'}\n\n$FORM{'juttu'}$kunnallislehti</TEXTAREA><BR>\n";
	
  print "<HR>";
  print "Vastaanottaja:<BR><TEXTAREA ROWS=\"1\" COLS=\"40\" NAME=\"email_sss\">sss.urheilu\@sss.fi</TEXTAREA><BR>\n";
  print "Otsikko<BR><TEXTAREA ROWS=\"1\" COLS=\"100\" NAME=\"otsikko_sss\">Peimarin Rastit vk $FORM{'viikko'}</TEXTAREA><BR>\n";
  print "Viesti<BR><TEXTAREA ROWS=\"20\" COLS=\"100\" NAME=\"viesti_sss\" STYLE=\" font-family:  Courier, Courier New, Monaco;\">Peimarin Rastit vk $FORM{'viikko'}\n\n$sss</TEXTAREA><BR>\n";

  print "Salasana: <input name='salasana' type=password size=24 maxlength=20 ><BR>\n";
  print "<input name='toiminto' value='email' type=hidden >\n";
  print "<input type=submit value='Lähetä' class=input></form>\n";

}

sub poista_linkki {
  open(INDEXI, "$datahakemisto/$indeksi");
  @rivit = <INDEXI>;
  close(INDEXI);
	
  open(INDEXI, ">$datahakemisto/$indeksi");
  foreach (@rivit) {
    chomp($_);
    if (/<!--tapahtuma-->/i) {
      $tieto = $_;		
      $tieto =~ s/<\/TD><TD>/;/g;
      $tieto =~ s/<([^>]|\n)*>//g;
      @tiedot = split (/;/,$tieto);
      if ($tiedot[0] eq $FORM{'viikko'}) {
	print INDEXI "<!--tapahtuma--><TR><TD>$tiedot[0]</TD><TD>$tiedot[1]</TD><TD>$tiedot[2]</TD><TD>$tiedot[3]</TD><TD>$tiedot[4]</TD></TR>\n";
      } else {
	print INDEXI "$_\n";
      }
		
    } else {
      print INDEXI "$_\n";
    }
  }

  print "<H1>Linkki poistettu indeksi-sivulta. Tarkista muutokset!</H1>\n";
  print "<A HREF=\"$indeksiURL\">Indeksisivu</A>\n";	
}

sub lisaa_linkki {
  open(INDEXI, "$datahakemisto/$indeksi");
  @rivit = <INDEXI>;
  close(INDEXI);
	
  open(INDEXI, ">$datahakemisto/$indeksi");
  foreach (@rivit) {
    chomp($_);
    if (/<!--tapahtuma-->/i) {
      $tieto = $_;		
      $tieto =~ s/<\/TD><TD>/;/g;
      $tieto =~ s/<([^>]|\n)*>//g;
      @tiedot = split (/;/,$tieto);
      if ($tiedot[0] eq $FORM{'viikko'}) {
	print INDEXI "<!--tapahtuma--><TR><TD>$tiedot[0]</TD><TD>$tiedot[1]</TD><TD><A HREF=\"$tulosalihakemisto/$tiedot[0].shtml\">$tiedot[2]</A></TD><TD>$tiedot[3]</TD><TD>$tiedot[4]</TD></TR>\n";
      } else {
	print INDEXI "$_\n";
      }
		
    } else {
      print INDEXI "$_\n";
    }
  }
}

sub kysy_viikko {
  print "<form action=$ohjelmaURL method=post><input type=hidden name=sc value=3>\n";
  print "Viikko: <select name=\"viikko\">\n";
  for ($i=$ekaviikko; $i<$vikaviikko+1; $i++) {
    print "<option value=\"$i\">$i</option>\n";
  }
  print "</select>\n";
  print "Salasana: <input name='salasana' type=password size=24 maxlength=20 ><BR>\n";
  print "Toiminto: <select name=\"toiminto\">\n";
  print "<option value=\"muokkaa\">Muokkaa tai lisää tiedot</option><option value=\"poistalinkki\">Poista linkki</option>";
  print "</select>";
  print "<input type=submit value='Lähetä' class=input></form>\n";
}

sub print_header {
  open(HEADER,"$datahakemisto/$headerTiedosto") || die $!;
  @header = <HEADER>;
  print "Content-type: text/html\n\n";
  print "@header \n";
  close(HEADER);
  print "<B>ViikkorastiWeb</B>, kuntorastien tulosjulkaisuohjelma, \&copy; <A HREF=\"mailto:matti.tahvonen\@paimionrasti.fi\">Matti Tahvonen</A><BR>\n";
  print "<B>$viikkorastienNimi</B>, ongelmatilanteissa ota yhteys ylläpitäjään:<A HREF=\"mailto:$yllapitajaEmail\">$yllapitaja</A><BR>\n";

}

sub print_footer {
  open(FOOTER,"$datahakemisto/$footerTiedosto") || die $!;
  @footer = <FOOTER>;
  print "@footer \n";
  close(FOOTER);
}
