1 |
dpavlin |
1.1 |
#!/usr/local/bin/perl -w |
2 |
|
|
|
3 |
|
|
use Net::LDAP; |
4 |
|
|
use Net::LDAP::LDIF; |
5 |
|
|
use CGI qw/:standard/; |
6 |
|
|
use CGI::Carp qw(fatalsToBrowser); |
7 |
|
|
|
8 |
|
|
# ldap server host |
9 |
|
|
$host = 'sun.lan'; |
10 |
|
|
# e-mail address to mail report to: |
11 |
|
|
$email = 'dpavlin@sun.lan'; |
12 |
|
|
# log file |
13 |
|
|
$log = '/tmp/vizitke.log'; |
14 |
|
|
|
15 |
|
|
$ldap = Net::LDAP->new($host,port=>389) || die "$@"; |
16 |
|
|
|
17 |
|
|
$ldap->bind; # anonymous |
18 |
|
|
|
19 |
|
|
%labels = ('givenname'=>'ime', |
20 |
|
|
'sn'=>'prezime', |
21 |
|
|
'cn'=>'ime i prezime'); |
22 |
|
|
|
23 |
dpavlin |
1.2 |
%utf2iso_tab = ( |
24 |
|
|
0x0161 => '¹', 0x0111 => 'ð', 0x010d => 'è', 0x0107 => 'æ', 0x017e => '¾', |
25 |
|
|
0x0160 => '©', 0x0110 => 'Ð', 0x010c => 'È', 0x0106 => 'Æ', 0x017d => '®' |
26 |
|
|
); |
27 |
dpavlin |
1.1 |
|
28 |
dpavlin |
1.3 |
%iso2utf_tab = ( |
29 |
|
|
'¹' => 0x0161, 'ð' => 0x0111, 'è' => 0x010d, 'æ' => 0x0107, '¾' => 0x017e, |
30 |
|
|
'©' => 0x0160, 'Ð' => 0x0110, 'È' => 0x010c, 'Æ' => 0x0106, '®' => 0x017d |
31 |
|
|
); |
32 |
|
|
|
33 |
dpavlin |
1.2 |
sub utf2iso { |
34 |
dpavlin |
1.3 |
local($_)=@_; |
35 |
|
|
s/([\xC0-\xDF])([\x80-\xBF])/$utf2iso_tab{unpack("c",$1)<<6&0x07C0|unpack("c",$2)&0x003F}/ge; |
36 |
|
|
s/([\xE0-\xEF])([\x80-\xBF])([\x80-\xBF])/$utf2iso_tab{unpack("c",$1)<<12&0xF000|unpack("c",$2)<<6&0x0FC0|unpack("c",$3)&0x003F}/ge; |
37 |
|
|
s/([\xF0-\xF7])([\x80-\xBF])([\x80-\xBF])([\x80-\xBF])/$utf2iso_tab{unpack("c",$1)<<18&0x1C0000|unpack("c",$2)<<12&0x3F000|unpack("c",$3)<<6&0x0FC0|unpack("c",$4)&0x003F}/ge; |
38 |
|
|
return $_; |
39 |
|
|
} |
40 |
|
|
sub iso2utf { |
41 |
|
|
local($_)=@_; |
42 |
|
|
|
43 |
|
|
sub utf8 { |
44 |
|
|
local($_)=@_; |
45 |
|
|
return $_ < 0x80 ? chr($_) : |
46 |
|
|
$_ < 0x800 ? chr($_>>6&0x3F|0xC0) . chr($_&0x3F|0x80) : |
47 |
|
|
chr($_>>12&0x0F|0xE0).chr($_>>6&0x3F|0x80).chr($_&0x3F|0x80); |
48 |
dpavlin |
1.2 |
} |
49 |
dpavlin |
1.3 |
s/([¹ðè澩ÐÈÆ®])/utf8($iso2utf_tab{$1})/ge; |
50 |
|
|
return $_; |
51 |
dpavlin |
1.2 |
} |
52 |
|
|
|
53 |
|
|
print |
54 |
dpavlin |
1.3 |
header(-type => 'text/html;charset=ISO-8859-2'), |
55 |
dpavlin |
1.1 |
start_html('Naruèivanje vizitki'), |
56 |
|
|
start_form, |
57 |
|
|
"Upi¹ite svoje ",popup_menu(-name=>'what', |
58 |
|
|
-values=>['givenname','sn','cn'], |
59 |
|
|
-default=>'cn', |
60 |
|
|
-labels=>\%labels), |
61 |
|
|
textfield(-name=>'search',-default=>'*'),br, |
62 |
|
|
"Broj komada koje naruèujete ", |
63 |
|
|
textfield(-name=>'kom',-size=>4,-default=>10),br, |
64 |
|
|
submit(-value=>"Naruèi"),p |
65 |
|
|
end_form; |
66 |
|
|
|
67 |
|
|
if(param()) { |
68 |
|
|
$mesg = $ldap->search ( |
69 |
|
|
base => 'o=agrokor.hr', |
70 |
dpavlin |
1.3 |
filter => param('what').'='.iso2utf(param('search')) |
71 |
dpavlin |
1.1 |
); |
72 |
|
|
my $max = $mesg->count; |
73 |
|
|
if ($max > 1) { |
74 |
|
|
param('what','cn'); # reset what='cn' |
75 |
|
|
print "Broj osoba koje odgovaraju upitu: ",$mesg->count,br, |
76 |
|
|
b("Odaberite samo jednu!"), |
77 |
|
|
start_form, |
78 |
|
|
hidden(-name=>'what',-value=>'cn'), |
79 |
|
|
hidden(-name=>'kom'), |
80 |
|
|
p; |
81 |
|
|
for($i = 0 ; $i < $max ; $i++) { |
82 |
|
|
my $entry = $mesg->entry($i); |
83 |
|
|
my ($mail) = $entry->get('mail'); # array, take first |
84 |
dpavlin |
1.2 |
my ($cn)=utf2iso($entry->get('cn')); |
85 |
dpavlin |
1.1 |
push @radio_vals,$cn; |
86 |
|
|
$radio_labels{$cn}=$cn; |
87 |
|
|
} |
88 |
|
|
print radio_group(-name=>'search', |
89 |
|
|
-values=>\@radio_vals, |
90 |
|
|
-linebreak=>'true', |
91 |
|
|
-default=>\$radio_vals[0], |
92 |
|
|
-labels=>\%radio_labels), |
93 |
|
|
submit(-value=>"Odaberi"),p |
94 |
|
|
end_form; |
95 |
|
|
} elsif ($max==0) { |
96 |
|
|
print b("Nije naðena niti jedna osoba"); |
97 |
|
|
} else { |
98 |
|
|
my $entry = $mesg->entry(0); |
99 |
dpavlin |
1.3 |
my @data = ( utf2iso($entry->get('cn')) ); |
100 |
dpavlin |
1.1 |
sub add_opt { |
101 |
|
|
($label,$data) = @_; |
102 |
|
|
if ($data) { |
103 |
dpavlin |
1.3 |
push @data,"$label ".utf2iso($data); |
104 |
dpavlin |
1.1 |
} |
105 |
|
|
} |
106 |
|
|
add_opt "",$entry->get('ou'); |
107 |
|
|
add_opt "",$entry->get('postaladdress'); |
108 |
|
|
add_opt "soba: ",$entry->get('roomnumber'); |
109 |
|
|
add_opt "e-mail: ",$entry->get('mail'); |
110 |
|
|
add_opt "tel: ",$entry->get('telephonenumber'); |
111 |
|
|
add_opt "fax: ",$entry->get('facsimiletelephonenumber'); |
112 |
|
|
# add_opt ": ",$entry->get(''); |
113 |
dpavlin |
1.3 |
push @data,"Narud¾ba za ".param("kom")." komada\n"; |
114 |
dpavlin |
1.1 |
print join("<br>\n",@data); |
115 |
|
|
open(MAIL,"|/usr/lib/sendmail $email"); |
116 |
|
|
print MAIL join("\n",@data); |
117 |
|
|
close(MAIL); |
118 |
|
|
open(LOG,">> $log"); |
119 |
|
|
print LOG "\nVrijeme zahtjeva: ".localtime(time)."\n"; |
120 |
|
|
print LOG join("\t\n",@data); |
121 |
|
|
close(LOG); |
122 |
|
|
} |
123 |
|
|
} |
124 |
dpavlin |
1.2 |
|