#!/usr/bin/perl # # Yönetici şifresini doğru giren kullanıcıların seçimleri doğrultusunda # raporlar üretir. Kullanıcılar raporlar konusundaki seçimlerini # rapor_menu.pl programının görüntülediği formda belirtirler. # # Önce bu programı çalıştırmak isteyen kullanıcının bir önceki # adımda şifreyi dogru girmiş olup olmadığını kontrol etmek lazım. require "fonksiyonlar.pl"; $cookie = $ENV{'HTTP_COOKIE'}; $yetkili=0; $yetkili=1 if ($cookie=~ /sifre\=dogru/); # # Henüz şifreyi girmemişse şifre giriş sayfasına gönderelim if ( !$yetkili ) { print "Location: /i-kaynak/sifre_sor.html\n\n"; exit; } # Şifreyi doğru girmiş, raporları üretebiliriz. # Kullanıcının yaptığı seçimlerin belirlenmesi işleri: $gelen_bilgi = <STDIN>; # gelen_bilgi içinde SIRALAMA=TARIH_SIRALI&EGITIM=Hepsi&GOREV=Sekreterlik gibi # bir satır olmalı. @ciftler = split("&", $gelen_bilgi); foreach $cift (@ciftler) { # ($alan_adi, $degeri) = split("=", $cift); $degeri =~ tr/+/ /; $degeri =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $form{$alan_adi} = $degeri; } $siralama_tipi = "T"; # Sırala tipini "Tarihe göre" diye kabul et $siralama_tipi = "I" if ($form{'SIRALAMA'} eq "ISIM_SIRALI" ); html_baslat(); # Başvuruları sakladığımız çağrışımlı liste dosyasını aç dbmopen(%BASVURULAR, "basvurular", 0600) or hata ("Basvuru dosyası açılamadı!"); # Sıradan tüm kayıtları elden geçir. İstenen şartlara uyan kayıtları bir # liste içinde topla. Liste tamamlanınca sort deyimiyle kolayca # sıralayabilmek için listeye yerleştirirken sıralama tipine uygun olan # olan alanı kaydın başına ekleyerek yerleştir. @siralanacak=(); while ( ($anahtar, $dbm_kaydi) = each(%BASVURULAR)) { # # form_sakla.pl programında yaptığımız paketi çöz ($ad_soyad, $cinsiyet, $d_tarihi, $e_posta, $egitim, $son_okul, $meslek, $gorev, $adres1, $adres2, $adres3, $tel, $ip_adresi, $basvuru_tarihi, $basvuru_saati) = unpack ("A30A1A10A40A32A32A32A32A32A32A32A32A16A10A5", $dbm_kaydi); ($gun,$ay,$yil) = split("/", $basvuru_tarihi); ($saat,$dakika) = split(":", $basvuru_saati); # # Kayıt isteklere uygun mu? if ( ($form{'EGITIM'} ne "Hepsi" ) and ($egitim ne $form{'EGITIM'}) ) { next; # Bu kayit aradigimiz kritere uygun degil } if ( ($form{'GOREV'} ne "Hepsi" ) and ($gorev ne $form{'GOREV'}) ) { next; # Bu kayit aradigimiz kritere uygun degil } $siralama_anahtari = $ad_soyad; if ($siralama_tipi eq "T" ) { $siralama_anahtari = $yil . $ay . $gun . $saat . $dakika; } $siralanacak_kayit = $siralama_anahtari."-".$anahtar."-".$dbm_kaydi; push(@siralanacak, $siralanacak_kayit); } @sirali = sort(@siralanacak); reverse (@sirali) if ($siralama_tipi eq "T"); # En yeni başvuru en üste # gelsin diye. # # Bulunan kayitlari gostermeye basla $bulunan_kayit_sayisi = @sirali; if ($bulunan_kayit_sayisi == 0) { print "<p>Aradığınız özelliklerde kayıt bulunamadı<p>\n"; print "<hr>"; &html_kapat; exit; } print "<TITLE>CGI AS Insan Kaynakları</TITLE>\n"; print "<center><img src=\"/i_kaynak/logo.gif\">\n"; print "<p><font size=\"+2\"><b>Başvuru Listesi</b></font><br>\n"; print "(Alfabetik Sıralı)" if $siralama_tipi eq "I"; print "(Başvuru Tarihine Göre Sıralı)" if $siralama_tipi eq "T"; print "<br><font size=\"-2\">"; ($sn, $dk, $saat, $gun, $ay, $yil) = localtime(); $yil = $yil +1900; $ay = $ay + 1; $ay = "0".$ay if ($ay < 10); # 3. ay 03. ay olsun diye $gun = "0".$gun if ($gun < 10); # ayın 8'i 08'i olsun diye $saat = "0".$saat if ($saat < 10); # ayın 8'i 08'i olsun diye $dk = "0".$dk if ($dk < 10); # ayın 8'i 08'i olsun diye print "$gun/$ay/$yil $saat:$dk</font><p>\n"; print <<_SON_; <table width="90%" border="0" cellpadding="1" cellspacing="1"> <tr><td><b>Adı, Soyadı</b></td><td><b>Tarih</b></td> <td><b>Mesleği</b></td><td><b>İstediği Görev</b></td> <td><b>Öğrenim Durumu</b></td><td> </td> </tr> _SON_ foreach $kayit(@sirali) { # # İstenen şartları karşılayan tüm kayıtları bir HTML tablosunun # satırları olarak düzenlemeliyiz. Başvuru sahibinin adını # tıklanabilir bir link olarak görüntüleyeceğiz. Bu link tıklandığında # başvurunun ayrıntılarına geçeceğiz. Bunu yapabilmek için # her başvurunun linkini o başvuru için "goster.pl" programını # çalıştıracak şekilde düzenlemeliyiz. # Her başvurunun kendi anahtarını goster.pl programına parametre # olarak geçirirsek (bunun için GET metodunu kullanabiliriz) sorun # kalmayacaktır. # # Kayıtları silmek için tıklanması gereken linkleri de aynı mantıkla # düzenleyebiliriz. # ($siralama_anahtari, $anahtar, $dbm_kaydi) = split("-", $kayit); ($ad_soyad, $cinsiyet, $d_tarihi, $e_posta, $egitim, $son_okul, $meslek, $gorev, $adres1, $adres2, $adres3, $tel, $ip_adresi, $basvuru_tarihi, $basvuru_saati) = unpack ("A30A1A10A40A32A32A32A32A32A32A32A32A16A10A5", $dbm_kaydi); print "<tr>"; # # Basvuru sahibinin adı tıklandığında ayrıntıları görüntülenecek # olan kaydın anahtarını goster.pl programına GET metoduyla # aktarabiliriz. # Ayrıntılar yeni bir web sayfasında görünsün ve içindeki bir # link tıklanarak kapatılabilsin istiyoruz. Biliyorsunuz bunun # çalışabilmesi için yeni pencerenin Javascript ile açılması # gerekiyor. $java_komutu = "javascript:void(window.open("; $java_komutu .= "\'/cgi-bin/i_kaynak/goster.pl?anahtar="; $java_komutu .= $anahtar."\',\'yeni\',\'width=500,height=400,menubar=yes"; $java_komutu .= ",scrollbars=yes,resizable=yes\'))"; print "<td><a href=\"$java_komutu\">$ad_soyad</a></td>"; print "<td>$gun/$ay/$yil</td>"; print "<td>$meslek</td>"; print "<td>$gorev</td>"; print "<td>$egitim</td>"; # # Asık surat ikonu tıklandığında silinecek olan kaydın # anahtarını goster.pl programına GET metoduyla aktarabiliriz. print "<td><a href=\"/cgi-bin/i_kaynak/sil.pl?anahtar=$anahtar\">"; print " <img src=\"/i_kaynak/sil.gif\" border=\"0\" Alt=\"Sil\"></td>\n"; print "</tr>\n"; } # # Bulunan kayıtların görüntülenmesi tamamlandı. sayfanın kalanına ait # HTML kodunu da yaz ve çık print <<_SON_; </table> <p><a href="/cgi-bin/i_kaynak/rapor_menu.pl">Raporlar Menüsüne dönüş<a> </center> </body></html> _SON_ exit;