#!/bin/sh
#####################################################################
# File: /srv/www/admin/phonebook.cgi #
# Creationn: 20.06.2007 jk #
# Last Update: $Id$ #
#####################################################################
. /srv/www/include/cgi-helper
show_html_header "Phonebook"
. /var/run/phonebook.conf
if [ ! -f /var/run/phonebook.cgi.option-$REMOTE_USER ]
then
cp /var/run/phonebook.cgi.option /var/run/phonebook.cgi.option-$REMOTE_USER 2> /dev/null
fi
if [ "$FORM_action" != "" ]
then
echo $( sed "s/&action=[^&]*//g;s/\$/\&action=$FORM_action/" /var/run/phonebook.cgi.option-$REMOTE_USER ) > /var/run/phonebook.cgi.option-$REMOTE_USER
else
FORM_action=$( sed -n "s/.*&action=\([^&]*\).*/\1/p" /var/run/phonebook.cgi.option-$REMOTE_USER )
if [ "$FORM_action" = "" ]
then
FORM_action="opt_nr2name"
fi
fi
_opt_nr2name="Nummer zu Name"
_opt_phonebook="Phonebook"
_opt_statistik="Statistik"
_opt_log="Log"
show_tab_header "$_opt_nr2name" "$myname?action=opt_nr2name" \
"$_opt_phonebook" "$myname?action=opt_phonebook" \
"$_opt_statistik" "$myname?action=opt_statistik" \
"$_opt_log" "$myname?action=opt_log"
if [ "$FORM_action" != "opt_nr2name" ]
then echo "
"
fi
if [ "$FORM_action" = "opt_log" ]
then echo ""
fi
if [ "$FORM_action" = "opt_nr2name" ]
then
Controll="ok"
if [ "$FORM_Nummer" != "" ]
then
wert=$(echo "$FORM_Nummer" | sed -e 's/[^1234567890+]//g;s/^+49/0/;s/^+/00/;s/+//g' )
echo "Schlage $wert nach...
"
if [ "$FORM_suchen_phonebook" = "Nein" -a "$FORM_suchen_internet" = "Nein" ]
then
show_error "" "...wenn ich nirgendwo suchen soll, kann ich auch nichts finden! ;-)"
fi
if [ "$FORM_suchen_phonebook" != "Nein" ]
then
echo "Schlage im Phonebook nach...
"
grep "^$wert=" /etc/phonebook
if [ "$?" = "1" ]
then
show_error "" "...im Phonebook konnte nichts gefunden werden!
"
else
echo "
"
fi
phonebook_checkbox_J="checked"
phonebook_checkbox_N=""
else
phonebook_checkbox_J=""
phonebook_checkbox_N="checked"
fi
if [ "$FORM_suchen_internet" != "Nein" ]
then
echo "Schlage im Internet nach...
"
ergebnis=$( phonebookInetSearch.sh "$wert" -azh 2> /tmp/phonebook.error-$$ )
fehler=$( sed "s/ä/\ä/g;s/Ä/\Ä/g;s/ö/\ö/g;s/Ö/\ö/g;s/ü/\ü/g;s/Ü/\Ü/g;s/ß/\ß/g;" /tmp/phonebook.error-$$ )
rm /tmp/phonebook.error-$$
if [ "$fehler" != "" ]
then
echo "$fehler
"
show_error "" "...im Internet konnte nichts gefunden werden!
"
else
echo "$ergebnis
"
button="Ins Phonebook eintragen"
grep -q "^$wert=" /etc/phonebook
if [ "$?" = "0" ]
then
echo "Achtung:Im Phonebook befinden sich bereits Einträge mit dieser Nummer. Es wird empfohlen,"
echo "diese zu löchen bevor sie die gefundenen Daten übernehmen. Es handelt sich um folgende Einträge:
"
grep "^$wert=" /etc/phonebook | sed "s/^/ /"
echo "
"
echo "
"
button="Trotzdem ins Phonebook eintragen"
fi
echo ""
#echo "
"
fi
internet_checkbox_J="checked"
internet_checkbox_N=""
else
internet_checkbox_J=""
internet_checkbox_N="checked"
fi
echo "
"
fi
#Fr sinnvolle Werte bei den Ja/Nein Checkboxen zur Suche in Internet und Phonebook sorgen
if [ "$internet_checkbox_J$internet_checkbox_N" != "checked" ]; then internet_checkbox_J="checked"; internet_checkbox_N=""; fi
if [ "$phonebook_checkbox_J$phonebook_checkbox_N" != "checked" ]; then phonebook_checkbox_J="checked"; phonebook_checkbox_N=""; fi
#Die Eingabemaske zum suchen
echo "
"
fi
if [ "$FORM_action" = "opt_phonebook" ]
then
Controll="ok"
FORM_zeile=$( echo "$FORM_zeile" | sed "s/[^0-9]//g" ) #Zur Sicherheit
if [ "$FORM_change$FORM_changename" != "" -a "$FORM_zeile" != "" ]
then
change="$FORM_change=$FORM_changename"
#?dert die Zeile $FORM_zeile zu $change
show_info "" "Zeile $FORM_zeile wird geändert zu: $change
"
echo "Ändere Zeile $FORM_zeile vorher: $( sed -n "$FORM_zeile p" /etc/phonebook ) Zu: $change" >> $PHONEBOOK_LOG
sed -e "$FORM_zeile a\
$change" /etc/phonebook > /tmp/phonebookneu-$$
sed "$FORM_zeile d" /tmp/phonebookneu-$$ > /etc/phonebook
rm /tmp/phonebookneu-$$
fi
FORM_view=$( echo "$FORM_view" | sed "s/[^0-9]//g" ) #Zur Sicherheit
if [ "$FORM_view" != "" ]
then
zeile=$( sed -n "$FORM_view p" /etc/phonebook | sed "s/&/\&/g;s/\"/\"/g;s/\</g;s/>/\>/g" )
#?derungs Eingabemaske
zeilenummer=$( echo "$zeile" | sed "s/^\([^#=]*\)=.*$/\1/" )
zeilename=$( echo "$zeile" | sed "s/^\([^#=]*=\)//" )
echo "Bearbeiten: | "
echo ""
echo " |
| "
echo ""
echo " |
"
$FORM_kill="" #Da sich beim Killen die Zeilennummern ?dern wrden.
fi
FORM_kill=$( echo "$FORM_kill" | sed "s/[^0-9]//g" ) #Zur Sicherheit
if [ "$FORM_kill" != "" ]
then
#Löchen einer Zeile - definiert über Zeilennummer
zeile=$( sed -n "$FORM_kill p" /etc/phonebook )
echo "Lösche Zeile: $zeile" >> $PHONEBOOK_LOG
sed "$FORM_kill d" /etc/phonebook > /tmp/phonebookneu-$$
cat /tmp/phonebookneu-$$ > /etc/phonebook
rm /tmp/phonebookneu-$$
zeile=$( echo "$zeile" | sed "s/&/\&/g;s/\"/\"/g;s/\</g;s/>/\>/g;s/'/&39;/g" )
show_info "" "Lösche Zeile: $zeile"
echo "
'
fi
if [ "$FORM_neuerEintrag" = "ja" ]
then
#Formular für neuen Eintrag:
echo "Neuen Eintrag ins Phonebook einfügen:"
echo "
'
else
echo ""
fi
# Hinzufügen einer übergebenen Zeile am Ende des Phonebooks
if [ "$FORM_addname$FORM_addnummer" != "" ]
then
phonebookeintrag="$FORM_addnummer=$FORM_addname"
show_info "" "Füge Zeile ein: $phonebookeintrag"
echo "Füge Zeile ein: $phonebookeintrag" >> $PHONEBOOK_LOG
echo -e "$phonebookeintrag" >> /etc/phonebook
fi
#Phonebook anzeigen:
#Die Sortierung eventuell aus der Datei /var/run/phonebook.cgi.option-$REMOTE_USER nachladen
if [ "$FORM_sort" != "" ]
then
echo $( sed "s/&sort=[^&]*//g;s/\$/\&sort=$FORM_sort/" /var/run/phonebook.cgi.option-$REMOTE_USER ) > /var/run/phonebook.cgi.option-$REMOTE_USER
else
FORM_sort=$( sed -n "s/.*&sort=\([^&]*\).*/\1/p" /var/run/phonebook.cgi.option-$REMOTE_USER )
fi
# Die Ansicht-Checkboxen interpretieren eventuell aus /var/run/phonebook.cgi.option-$REMOTE_USER und anzeigen
if [ "$FORM_ansicht" = "" ]
then
FORM_ansicht=$( sed -n "s/.*&ansicht=\([^&]*\).*/\1/p" /var/run/phonebook.cgi.option-$REMOTE_USER )
else
if [ "$FORM_ansicht" != "klassisch" ]
then FORM_ansicht="komfort"
fi
echo $( sed "s/&ansicht=[^&]*//g;s/\$/\&ansicht=$FORM_ansicht/" /var/run/phonebook.cgi.option-$REMOTE_USER ) > /var/run/phonebook.cgi.option-$REMOTE_USER
fi
if [ "$FORM_ansicht" != "klassisch" ]
then ansicht_checkbox_Ko="checked"; ansicht_checkbox_Kl=""
else ansicht_checkbox_Ko=""; ansicht_checkbox_Kl="checked"
fi
# Die Suchanfrage eventuell aus der Datei /var/run/phonebook.cgi.option-$REMOTE_USER nachladen und erweitern, damit sie
# nicht durch die Nummerierung gestöt wird.
# Keine Suche wird duch "&grep=.*" bzw. "&grep=.%2A" ausgedrckt, da grep="" nicht von ungesetztem grep=...
# unterschieden werden kann.
if [ "$FORM_grep" = "" ]
then FORM_grep=$( sed -n "s/.*&grep=\([^&]*\).*/\1/p" /var/run/phonebook.cgi.option-$REMOTE_USER )
else echo $( sed "s/&grep=[^&]*//g;s/\$/\&grep=$FORM_grep/" /var/run/phonebook.cgi.option-$REMOTE_USER ) > /var/run/phonebook.cgi.option-$REMOTE_USER
fi
grepstring=$( echo "$FORM_grep" | sed "s/^[^^]/.*&/;s/^^//;s/^/[ ]*[0-9][0-9]* /" )
if [ "$FORM_maps" = "" ]
then FORM_maps=$( sed -n "s/.*&maps=\([^&]*\).*/\1/p" /var/run/phonebook.cgi.option-$REMOTE_USER )
else echo $( sed "s/&maps=[^&]*//g;s/\$/\&maps=$FORM_maps/" /var/run/phonebook.cgi.option-$REMOTE_USER ) > /var/run/phonebook.cgi.option-$REMOTE_USER
fi
# Suchfeld anzeigen
echo " | "
#Direktsuche Hanynummern
echo " | "
#Alle anzeigen = Suche beenden
echo ""
echo " |
"
#kenntlich machen, da?nicht alle Datens?ze angezeigt werden
if [ "$FORM_grep" != ".*" ]
then echo "Suchergebnis für: '$FORM_grep'
"
fi
echo "Zum Sortieren bitte auf 'Nummer' oder 'Name' im Tabellenkopf klicken. | "
echo " |
"
if [ -f "/etc/phonebook" ]
then
# Nach NamenSortiertes Phonebook: sed "h;s/^[^=]*=//;s/\$/==/;y/abcdefghijklmnopqrstuvwxyzäöüß/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜS/;s/^/~/;G" /etc/phonebook | tr -d "\n\r" | tr "~" "\n" | sort | sed "s/.*==//"
# z-a Sortierung mit sort -r Soriteren von Nummern mit sort-n
# Ansicht greift nach der Sortierung
if [ "$FORM_ansicht" != "klassisch" ]
then ansichtErzeuger=";s/^[ ]*//;s#\([0-9][0-9]*\)[ ]\(.*\)#\2 | #;s!^\([^=#<]*\)\([#<]\)!\1=\2!;s!=! | !;s/^/ | /;s!\(#[^<]*\)\1 | "
pregrepstring="[ ]*[0-9][0-9]* [^#=]*[^#0][^#=]*="
else ansichtErzeuger=";s/^[ ]*//;s#\([0-9][0-9]*\)[ ]\(.*\)# |
---|
\2 | bearbeiten | l\öschen |
#;s!\(#[^<]*\)\1\1|"
fi
#Die Erzugung der Phonebook-Ansicht erfolgt nach einem bestimmten Schema:
# 0) Die HTML-Tabellenkopfzeile erzuegen
# 1) Nummerierung (da später über die Zeilennummer das Bearbeiten und Löschen funktioniert
# 2) Filterung von Kommentarzeilen mit pregrepstring und gemäß der Suchabfrage mit grepstring
# 3) Voranstellen eines Sortierstrings (suboptimal, da die Zeichen nicht aufgefüllt werden)
# 4) Sortieren mit sort
# 5) Aufräumen und dann den ansichtErzeuger zur HTMl-Erzeugung verwenden
echo ""
case "$FORM_sort" in
"name")
echo "Nummer"
echo "$ansichtTrenner"
echo "Name ↓ | "
echo "bearbeiten | löchen |
"
nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" |
sed "s/~/_/g;h;s/#.*//;s/^[^=]*//;s/=//;s/\$/==/;y/abcdefghijklmnopqrstuvwxyzäöüß/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜS/;G;s/\$/~/" | tr -d "\n" | tr "~" "\n" | sort |
sed "s/.*==//$ansichtErzeuger"
;;
"nameR")
echo "Nummer"
echo "$ansichtTrenner"
echo "Name ↑ | "
echo "bearbeiten | löchen |
"
nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" |
sed "s/~/_/g;h;s/#.*//;s/^[^=]*//;s/=//;s/\$/==/;y/abcdefghijklmnopqrstuvwxyzäöüß/ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜS/;G;s/\$/~/" | tr -d "\n" | tr "~" "\n" | sort -r |
sed "s/.*==//$ansichtErzeuger"
;;
"number")
echo "Nummer ↓"
echo "$ansichtTrenner"
echo "Name | "
echo "bearbeiten | löchen |
"
nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" |
sed "s#^ *\([0-9][0-9]*\) *\([^ ].*\)\$#\2 \1#" | sort -n |
sed "s#\(.*\) \([0-9][0-9]*\)#\2 \1#$ansichtErzeuger"
;;
"numberR")
echo "Nummer ↑"
echo "$ansichtTrenner"
echo "Name | "
echo "bearbeiten | löchen |
"
nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" |
sed "s#^ *\([0-9][0-9]*\) *\([^ ].*\)\$#\2 \1#" | sort -nr |
sed "s#\(.*\) \([0-9][0-9]*\)#\2 \1#$ansichtErzeuger"
;;
*)
echo "Nummer"
echo "$ansichtTrenner"
echo "Name | "
echo "bearbeiten | löchen |
"
nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" | sed "$ansichtErzeuger"
;;
esac
echo "
"
else
show_error "" "Es konnte kein Phonebook auf dem Server gefunden werden!"
fi
# Auswahl Klassisch oder Komfort
echo "
"
echo ""
if [ "$FORM_maps" = "on" ]
then maps_on="checked"; maps_off=""
else maps_on=""; maps_off="checked"
fi
echo ""
fi
if [ "$FORM_action" = "opt_statistik" ]
then
Controll="ok"
grep "^[0-9][0-9]*=" /etc/phonebook > /tmp/phonebook.1-$$
AnzahlGesamt=$( grep -c "" /tmp/phonebook.1-$$ )
AnzahlIntern=$( grep -c "^[0-9][0-9][0-9]=" /tmp/phonebook.1-$$ )
grep -v "^[0-9][0-9][0-9]=" /tmp/phonebook.1-$$ > /tmp/phonebook.2-$$
AnzahlSond1=$( grep -c "^0*0[8-9]00" /tmp/phonebook.2-$$ )
AnzahlSond2=$( grep -c "^0*013" /tmp/phonebook.2-$$ )
AnzahlSond3=$( grep -c "^0*018" /tmp/phonebook.2-$$ )
grep -v "^0*0[8-9]00" /tmp/phonebook.2-$$ | grep -v "^0*018" | grep -v "^0*013" > /tmp/phonebook.1-$$
AnzahlSond=$( expr "$AnzahlSond1" "+" "$AnzahlSond2" "+" "$AnzahlSond3" )
AnzahlHandy=$( grep -c "^0*01[5-7][0-9][0-9]*=" /tmp/phonebook.1-$$ )
grep -v "^0*01[5-7][0-9][0-9]*=" /tmp/phonebook.1-$$ > /tmp/phonebook.2-$$
AnzahlRest=$( grep -c "" /tmp/phonebook.2-$$ )
rm /tmp/phonebook.1-$$ /tmp/phonebook.2-$$
#show_info "" "Gesamt: | $AnzahlGesamt |
Handynummer: | $AnzahlHandy |
Sonderrufnummern: | $AnzahlSond |
Interne Nummern: | $AnzahlIntern |
Festnetz und Rest: | $AnzahlRest |
"
echo "Gesamt: | $AnzahlGesamt |
"
echo "Handynummer: | $AnzahlHandy | anzeigen |
"
echo "Sonderrufnummern: | $AnzahlSond |
"
echo "Interne Nummern: | $AnzahlIntern | anzeigen |
"
echo "Festnetz und Rest: | $AnzahlRest |
"
echo "
"
fi
if [ "$FORM_action" = "opt_log" ]
then
Controll="ok"
if [ "$FORM_log" = "del" ]
then
echo "" >$PHONEBOOK_LOG
show_info "" "Log gelöscht"
fi
cat $PHONEBOOK_LOG | sed 's/$/
/' | sed "s!Lösche.*\$!&!" | sed "s!Füge.*\$!&!" | sed "s!Ändere.*\$!&!" | sed "s!:.*\$!&!"
fi
if [ "$FORM_action" = "createphonebook" ]
then
Controll="ok"
show_info "" "Phonebook wurde erstellt"
echo "0=no number" >/etc/phonebook
echo "00=no number" >>/etc/phonebook
fi
# Reparieren von Phonebooks mit alten Sonderzeichen
if [ "$FORM_repair" = "semikolon" ]
then sed "s/;/ /g" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Wandle Semikola in Leerzeichen."
fi
if [ "$FORM_repair" = "vertical" ]
then sed "s/|/ /g" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Wandle '|' in Leerzeichen."
fi
if [ "$FORM_repair" = "alt255" ]
then sed "s// /g" /etc/phonebook > /tmp/phonebook-$$ #komisches Sonderzeichen Alt-255 ""
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Wandle Alt+255 in Leerzeichen."
fi
if [ "$FORM_repair" = "komischezeile" ]
then cat /etc/phonebook | tr -d"" > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Entferne komische Zeile, die manchmal auftritt."
fi
if [ "$FORM_repair" = "html" ]
then sed "s/<[^>]*>//g" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Entferne HTML-Code aus /etc/phonebook."
fi
if [ "$FORM_repair" = "leerzeichen" ]
then sed "s/ */ /g" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Fasse mehrfache Leerzeichen zusammen."
fi
if [ "$FORM_repair" = "kommata_semikola" ]
then sed "/^[^#]/ s/,/;/g" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Alle Kommata werden in Semikola umgewandelt (außer in Kommentarzeilen)."
fi
if [ "$FORM_repair" = "kill_CR" ]
then cat /etc/phonebook | tr -d "\r" > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Alle "CR" = "\r" Returns werden entfernt."
fi
if [ "$FORM_repair" = "konvert_LF_CRLF" ]
then sed "s/$/$( echo -e "\r\n" )/" /etc/phonebook > /tmp/phonebook-$$
cat /tmp/phonebook-$$ > /etc/phonebook
rm /tmp/phonebook-$$
Controll="ok"
show_info "" "Alle "LF" = "\n" Returns werden zu (Windows kompatiblen) "CR LF" = "\r\n" konvertiert."
fi
if [ "$Controll" = "" ]
then
show_error "" "Link Existiert nicht!
Eventuell waren nicht alle notwendigen Felder ausgefüllt"
fi
show_tab_footer
show_html_footer