#!/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 "
" echo "" echo "" echo "" echo "

" button="Trotzdem ins Phonebook eintragen" fi echo "
" echo "" echo "" echo "" echo "
" #echo "
" #echo "" #echo "" #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 "
" echo "Name zu folgender Rufnummer suchen:" echo "" echo "
" echo "Suchen im Phonebook? Ja  " echo "Nein
" echo "Suchen im Internet (Das Örtliche)? Ja  " echo "Nein
" #echo " gefundenen Namen ins Phonebook übernehmen. (disabled)
' echo "
" 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" ) #?derungs Eingabemaske zeilenummer=$( echo "$zeile" | sed "s/^\([^#=]*\)=.*$/\1/" ) zeilename=$( echo "$zeile" | sed "s/^\([^#=]*=\)//" ) echo "
Bearbeiten:" echo "
" echo "" echo "" echo "" echo "" echo "" echo "
" echo "
" echo "
" echo "" echo "" echo "" 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/'/&39;/g" ) show_info "" "Lösche Zeile: $zeile" echo "
" echo '' echo "" echo '' echo '

' fi if [ "$FORM_neuerEintrag" = "ja" ] then #Formular für neuen Eintrag: echo "Neuen Eintrag ins Phonebook einfügen:" echo "
" echo '' echo '' echo '
Nummer: Name:' echo '
' echo '


' else echo "
" 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 "
Suchen:" echo "" echo "" echo "
" echo "" echo "
" echo "" echo "
" echo "
" #kenntlich machen, da?nicht alle Datens?ze angezeigt werden if [ "$FORM_grep" != ".*" ] then echo "Suchergebnis für: '$FORM_grep'
" fi echo "" echo "
Zum Sortieren bitte auf 'Nummer' oder 'Name' im Tabellenkopf klicken.
" 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]*\)[ ]\(.*\)#\2bearbeitenl\ö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 "" echo "" 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 "" echo "" 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 "" echo "" 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 "" echo "" 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 "" echo "" nl -ba -s" " /etc/phonebook | grep "$pregrepstring" | grep "$grepstring" | sed "$ansichtErzeuger" ;; esac echo "
Nummer" echo "$ansichtTrenner" echo "Name ↓bearbeitenlöchen
Nummer" echo "$ansichtTrenner" echo "Name ↑bearbeitenlöchen
Nummer ↓" echo "$ansichtTrenner" echo "Namebearbeitenlöchen
Nummer ↑" echo "$ansichtTrenner" echo "Namebearbeitenlöchen
Nummer" echo "$ansichtTrenner" echo "Namebearbeitenlöchen
" else show_error "" "Es konnte kein Phonebook auf dem Server gefunden werden!
" fi # Auswahl Klassisch oder Komfort echo "
" echo "
" echo "" echo "" echo "" echo "" echo "
Ansicht:KomfortKlassisch
" if [ "$FORM_maps" = "on" ] then maps_on="checked"; maps_off="" else maps_on=""; maps_off="checked" fi echo "
" echo "" echo "" echo "" echo "" echo "
Adressen auf Google-maps linken:AnAus
" 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 "" echo "" echo "" echo "" echo "" echo "
Gesamt:$AnzahlGesamt
Handynummer:$AnzahlHandyanzeigen
Sonderrufnummern:$AnzahlSond
Interne Nummern:$AnzahlInternanzeigen
Festnetz und Rest:$AnzahlRest
" 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