#!/usr/bin/perl
#
# CGI A.S. Personel Tel/e-Posta Rehberi Uygulamasında 
# kullanılan alt programlar

sub form_verilerini_al {
  #
  # CGI parametrelerini ayıklayıp çıkarır.
  # Her form alanı için "adi-degeri" çiftlerini
  # bir çağrişimli listede geri gönderir.
  # Bu çağrışımlı listede alan adları "anahtar",
  # alan değerleri "değer" olarak yer alır.
  # Örneğin $form{'asoyadi'} = "Ayfer" olur.
  #
  my ($cgi_satiri, @ciftler, $cift, $alan_degeri, $alan_adi);
  
  #
  # Form'da ACTION=POST belirtildiyse, form alan verilerini içeren
  # cgi_satiri <STDIN>'den okunmalıdır.
  # ACTION=GET seçildiyse form alan bilgilerini içeren cgi_satiri
  # 'QUERY_STRING' ortam değişkeninde gelir.
  #
  # Form'da seçilmiş olan ACTION tipi "REQUEST_METHOD" ortam 
  # değişkeninde gelir.

  $form_metodu = $ENV{'REQUEST_METHOD'};

  if ($form_metodu eq "GET"){
      $cgi_satiri = $ENV{'QUERY_STRING'};
  }
  elsif ($form_metodu eq "POST"){
      read(STDIN, $cgi_satiri, $ENV{'CONTENT_LENGTH'});
  }
  #
  # "cgi_satiri" içinde "adi=Can+U&%F0ur&soyadi=Ayfer&tel=2345673"
  # gibi bir dizi olacaktır.
  # Bu dizide özel karakterler (Türkçe karakterler) ve noktalama
  # işaretleri &HH şeklinde onaltılık sistemde kodlanmıışdır.
  # Her özel işaret ASCII tablosundaki sayısal koduyla kodlanır.
  #
  # Alan değerleri içinde "boşluk" varsa "+" işaretiyle kodlanmış
  # olacaktır.

  # "&" işaretiyle ayrılmış olan alan_adi=alan_degeri çiftlerini
  # ayirmalıyız:
  
  @ciftler = split(/&/, $cgi_satiri);
  foreach $cift (@ciftler) {
     #
     # Her "alan_adi=alan_degeri" ciftini "=" işaretiyle 
     # parçalayarak alan adlarını ve değerlerini elde edebiliriz.

     ($alan_adi, $alan_degeri) = split(/=/, $cift);
     
     #
     # "+" ile kodlanmış boşluklar varsa onları " "'la değiştir.
     $alan_degeri =~ tr/\+/ /;

     # %HH şeklinde kodlanmış özel karakterler varsa, sayısal ASCII 
     # kod değerini kullanarak karakterin kandisine dönüştür.

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

     # alan adını ve değerini çağrışımlı listeye yerleştir.
     #
     $FORM_BILGILERI{$alan_adi} = $alan_degeri;
  }

  #
  return %FORM_BILGILERI;
}


sub hata {
    # 
    # parametresi olarak gelen karakter dizisini bir hata mesajı
    # sayfası olarak görüntüler

    $mesaj = shift;    # Parametreyi $mesaj değişkenine al

    print "Content-type: text/html\n\n";
    print <<_SON_;
    <html><body>

    <p><table width="300">
    <tr><td align="center">
        <b>Sistem Hatası!</b><p>$mesaj
        </td>
    </tr>
    </table>
    </body>
    </html>
_SON_

exit;
}


sub css {
# 
# HTML kodları iiçnde yer alan CSS komutlarını gönderir
#
print <<_SON_;

<style>
A { color: rgb(0,0,0);
      font-size: 10pt;
            font-weight: bold;
          text-decoration: none;
      }
        A:link    { color: rgb(16,16,16)}
  A:visited { color: rgb(16,16,16)}
    A:active  { color: rgb(16,16,16)}
      A:hover   { color: rgb(32,32,255); text-decoration: underline}
      
        body {  margin-left: 10%;
          margin-right: 10%;
            color: black;
              background: white;
                font-family: Verdana, Arial, Helvetica, Swiss;
	  }
    table { border-top: ridge 3px darkgreen;
              border-bottom:  ridge 3px darkgreen;
        }


</style>
_SON_

}
1;