#!/usr/bin/perl # # Copyright 1999 by Leopold Toetsch # # This program is free for private use. Private use means, you # may install and run this program on your home/office computer(s). # But you are not allowed to use this program on public webservers. # # For commercial usage on public webservers contact the author. # # Version # 1.00 1999.08.30 # 1.10 1999.09.04 use GD 1.21 with PNG graphics # 1.11 1999.09.06 run's now with mod_perl use CGI qw(:standard); use CGI::Carp 'fatalsToBrowser'; #use Carp; #local $SIG{__WARN__} = \&Carp::cluck; use strict; use GD 1.21; use IO::Handle; use vars qw ( $use_sockets $server $MKTEMP $ISDNRATE $CODEF $LOGO $docroot $CC); use vars qw ($_VBNS $sortv); # socket stuff $use_sockets=1; use Socket; # path for unix socket $server='/tmp/isdnrate'; # configure adjusts these n/y :-( # Country $CC='de'; $CC='at'; $CODEF= "/usr/lib/isdn/code-$CC.dat"; $MKTEMP= '/bin/mktemp'; $ISDNRATE='/usr/bin/isdnrate'; $LOGO="(c) 1999 www.Tel-R.at"; $_VBNS=$CC eq 'at' ? '1':'0'; $docroot=$ENV{'DOCUMENT_ROOT'}; #@probe_zones = qw ( 01 01 02245 0732 07667 05574 ); #AT #@probe_zones = qw ( 030 030 03302 033200 089 ); #DE # number of mobil funk with diff charge #@mobil_nums = qw ( 0663 0664 0676 0699 ); #AT # rest should be ok use vars qw ( $tempdir $tempdir_url $DEFLEN $debug $LEER $DEFBEST ); $tempdir = "$docroot/tmp"; $tempdir_url = '/tmp'; $DEFLEN=60; $DEFBEST=30; $debug=0; $LEER='--kein--'; # end configurable use vars qw ( %towns @countries %url $len $TITLE $weekly $daily @names $help $mix $info ); # cgi # some security things $CGI::POST_MAX=1000; $CGI::DISABLE_UPLOADS=1; # global data %towns = ($LEER => $LEER); use subs qw { footer html_header hrg }; # main $|=1; $TITLE="Tel-R.at"; $help=$sortv=0; $weekly=$daily=$help=$mix= $info=0; @names=param(); foreach (@names) { my $v = param($_); $v =~ s/[^\w\d.:, +\-~ÄÖÜäöüß]//g; $v =~ s/^-//; # no options in params param($_, $v) } if ($debug) { html_header('debug',1); print(hr, dump()); print(hr); } if (param('info')) { html_header("$TITLE - Info",0); &info(param('info')); } elsif (param('list')) { html_header("$TITLE - Providerliste",0); &list(param('list')); } elsif (param('det') ne '') { my $what = param('det'); my @t = ('Ausland','Inland'); html_header("$TITLE - $t[$what]",0); &det($what, param('prov')); } else { $weekly=param('graf') =~ /Wo/; $daily=param('graf') =~ /Tag/; $mix=param('mix'); my $subt = $mix?"Gesprächsmix":$daily?"Tagesverlauf": $weekly?"Wochenverlauf":"Einzelgespräch"; $subt = 'Hilfe' if(param('help')); html_header("$TITLE - $subt",param('help')<3?1:0); if (((param('town') && param('town') !~ /--/) || param('gettown')) && !$mix) { &read_towns; } if (((param('country') && param('country') !~ /--/) || param('getcountry')) && !$mix) { &read_countries; } $help=0; push(@names, 'help_tel.x') if (@names && !param('tel') && !param('town') && !param('country') && !param('gettown') && !param('getcountry') && !param('mix') && !param('help')); foreach (@names) { if (/help_(.*?)\.x/) { show_help($1); $help=1; last; } } if (param('help')) { $help=param('help'); &help_all($help); } if (param('clear')) { # clear mix my $n; param('mix',$mix=10); param('from',''); foreach $n (0..$mix-1) { foreach ('tel','oft','len','dday') { param("$_$n", ''); } #for } param('best',$DEFBEST); param('prov',''); param('xprov',''); param('_3D','on') } if (!$help && ( (param()>1 && $mix) || param())) { &print_table if(param('tab')); &make_graf if(param('graf')); } if (param('more.x')) { $mix+=10 ; param('mix', $mix); } if (!param() || ($mix && param()==1)) { param('best',$DEFBEST); param('_3D','on'); param('now','on'); param('len',$DEFLEN); } elsif ($help < 3) { print(p, hrg, h3('Neue Eingabe')); } &print_form if($help != 3); footer; &clean_up; } 1; # subs sub make_a { #('/telrate/index.html','Startseite','start') my($url, $t, $g) = @_; a({-href=>$url , -onmouseover=>"swap('$g',1)",-onmouseout=>"swap('$g',0)"}, $t,img({-src=>"${g}0.jpg", -border=>0, width=>80, -name => $g,height=>40,-hspace=>10, -alt=>$t})); } sub hrg { img({-src=>"hr.gif", -width=>600, -height=>4, -alt=>'-----'}); } # footer sub footer { my($pnum) = $_[0]; my($t); if ($pnum && ($t=&get_info($pnum, 'TarifChanged'))) { $t = "Tarife zuletzt gewartet am $t."; } print( hrg,p, span({-class=>'sm'}, 'Alle Angaben ohne Gewähr. Alle Preise inkl. Mwst. ',$t,br, 'Die Tarife der Provider ändern sich häufig und können daher ', 'eventuell falsch sein. In diesem Falle wenden ', 'Sie sich bitte')); if ($pnum && ($t=&get_info($pnum, 'Maintainer'))) { my ($e, $n); if ($t =~ /(.*?)\s*<(.*?)>/) { $e = $t; $n = $1; } else { $e = $n = $t; } print(span({-class=>'sm'},' an den Maintainer der Tarife ', a({-href=>"mailto:$e?subject=Tarife $pnum"},$n),' oder')); } print( span({-class=>'sm'}, ul(li('in Österreich an ', a({-href=>'mailto:reinelt@eunet.at?subject=Tarife'}, 'Michael Reinelt')), li('in Deutschland an ', a({-href=>'mailto:rate-de@Joker.E.Ruhr.de?subject=Tarife'}, 'die deutsche ISDN-Rate Crew'))), 'oder an den Autor dieses Pogrammes ', a({-href=>'mailto:lt@toetsch.at?subject=Tarife'},'Leopold Tötsch'),'.'), p,hrg,p, make_a('index.html','Startseite','start') ); my $url= url(); $url =~ s/&help.*?=\w+//g; if ($mix || $help == 3) { print(make_a($url, 'Einzelgespräch', 'eg')); } if (!$mix || $help == 3) { $url .= '?mix=10'; print(make_a($url, 'Gesprächsmix','gm')); } print (br) if ($help==3 && !param('list')); print(make_a('info.html', 'Info, Hilfe','info')); if (!param('list')) { $url =~ s/\?.*//g; $url .= '?list=1'; print(make_a($url, 'Providerliste','list')); } print(end_html); } sub html_header { my($title, $use_script) = @_; my $script; print(header); $script = q( NS4 = document.layers ? 1 : 0; IE4 = document.all ? 1 : 0; ver4 = (NS4 || IE4) ? 1 : 0; function pl(img) { if(!ver4) return 0; var a=new Image(); a.src='http://). server_name . q(/telrate/'+img+'.jpg'; return a; } eg0=pl("eg0"); eg1=pl("eg1"); gm0=pl("gm0"); gm1=pl("gm1"); info0=pl("info0"); info1=pl("info1"); list0=pl("list0"); list1=pl("list1"); start0=pl("start0"); start1=pl("start1"); function swap(what,on) { if(!ver4) return; var i=on?"1":"0"; document[what].src=eval(what+i+'.src'); } function init() {} ); if ($use_script) { $script .= q( tim = 0; function startt() { if(document.form.Start.value=='Start') { tim=setInterval("run()",1000); document.form.len.value=0; document.form.Start.value='Stop'; document.form.now.checked=false; j=new Date(); document.form.day.value=j.getDate()+'.'+(j.getMonth()+1)+'.'+j.getYear(); document.form.hour.value=j.getHours()+':'+j.getMinutes()+':'+j.getSeconds(); } else { clearInterval(tim); document.form.Start.value='Start'; } } function run() { document.form.len.value++; } );} if ($use_script||$mix) { $script .= q( function init() { if(ver4) init_tt(); } sty="font-family:sans serif;font-size:9pt"; refs=new Array('help_from','help_tel','help_len','help_tab','help_graf', 'help_tag','help_prov','help_mix'); txts=new Array('Ihre Vorwahl
z.B.02345', 'Telefonnummer
z.B.
2345 Ortsnetz
03456 Anderer Ort
'+ '00156789 Ausland
+1 56789 Ausland
China Ausland', 'Gesprächsdauer
60 Sekunden
2m 30 2 Minten 30'+ '
optional Zeitpunkt des Gesprächs', 'Tabelle
mit Kostenaufstellung und Links zu weiterer Inforrmation über die Provider', 'Grafik
der Kosten und Links zu Details der Provider', 'Tagesverlauf
bzw. Wochenverlauf der Kosten', 'Provider
z.B.
1033,10050', 'Telefonnummer
z.B.
2345 Ortsnetz
03456 Anderer Ort
'+ '00156789 Ausland
+1 56789 Ausland
China Ausland
'+ 'Anzahl der Gespräche
'+ 'Gesprächsdauer
60 Sekunden
2m 30 2 Minten 30' ); );#q } if ($use_script||$mix) { $script .= qq! if(ver4) document.write("