verwandte-Kategorien-Filter gefixt

Navigation hinzugefuegt
This commit is contained in:
io 2004-11-15 03:43:30 +00:00
parent 90255cea97
commit 78a9acad47
4 changed files with 103 additions and 42 deletions

View file

@ -24,7 +24,7 @@ Chemistry Science
Clock Utility Clock Utility
ConsoleOnly ConsoleOnly
ContactManagement Office ContactManagement Office
Contruction Education Construction Education
Core Core
Database Office Development AudioVideo Database Office Development AudioVideo
Debugger Development Debugger Development

View file

@ -0,0 +1,6 @@
Network News Monitor
Development Java Qt GTK Motif Utility
Graphics VectorGraphics Rastergraphics OCR
Construction 3DGraphics
Engineering Construction 3DGraphics Geology Physics
Graphics FlowChart

View file

@ -2,7 +2,7 @@
set -u set -u
KATEG_FILES="`dirname $0`/kategorien-norm.lst `dirname $0`/kategorien-debian.lst" KATEG_FILES="`dirname $0`/kategorien-norm.lst `dirname $0`/kategorien-debian.lst `dirname $0`/kategorien-verwandte.lst"
#READ_DESKTOP_DIR="/var/lib/menu-xdg/applications/menu-xdg" #READ_DESKTOP_DIR="/var/lib/menu-xdg/applications/menu-xdg"
READ_DESKTOP_DIR="/usr/share/applications" READ_DESKTOP_DIR="/usr/share/applications"
WRITE_DESKTOP_DIR="`dirname $0`/desktop-files" WRITE_DESKTOP_DIR="`dirname $0`/desktop-files"
@ -10,14 +10,22 @@ WRITE_DESKTOP_DIR="`dirname $0`/desktop-files"
DATA_FILE="/tmp/database.dat" DATA_FILE="/tmp/database.dat"
EINTRAEGE_PRO_SEITE=10 EINTRAEGE_PRO_SEITE=10
exec -- 2>&1 exec -- 2>/tmp/output
#set -x
############# Menue-Verwaltung ################ ############# Menue-Verwaltung ################
filter_empty()
{
sed -r '/^[[:space:]]*$/d ; s/^[[:space:]]*// ; s/[[:space:]]*$//'
}
hole_app_liste() hole_app_liste()
{ {
find "$READ_DESKTOP_DIR" -type f -name \*.desktop | while read a find "$READ_DESKTOP_DIR" -type f -name \*.desktop | while read a
do basename "${a%.desktop}" do basename "${a%.desktop}"
done | sort | nl done | filter_empty | sort | nl
} }
@ -27,46 +35,40 @@ lade_app_kategs()
{ {
DDATEI=`find $READ_DESKTOP_DIR -type f -name $1.desktop` DDATEI=`find $READ_DESKTOP_DIR -type f -name $1.desktop`
if [ -e "$DATA_FILE" ] && grep -q "^$1=" "$DATA_FILE" if [ -e "$DATA_FILE" ] && grep -q "^$1=" "$DATA_FILE"
then grep "^$1=" "$DATA_FILE" | cut -d "=" -f 2 then grep "^$1=" "$DATA_FILE" | cut -d "=" -f 2 | tr " " "\n"
else [ -e "$DDATEI" ] && grep "^Categories=" "$DDATEI" | cut -d "=" -f 2 | tr "\n" " " | tr ";" " " else [ -e "$DDATEI" ] && grep "^Categories=" "$DDATEI" | cut -d "=" -f 2 | tr ";" "\n"
fi fi | filter_empty | sort | uniq
} }
hole_kateg_liste() hole_kateg_liste()
{ {
cat $KATEG_FILES | cut -f 1 | sort | uniq cat $KATEG_FILES | cut -f 1 | filter_empty | sort | uniq
} }
# liefert eine Liste von Kategorien zurueck, die entweder auf die angegebene verweisen oder # liefert eine Liste von Kategorien zurueck, die entweder auf die angegebene verweisen oder
# solche, auf die sie selbst verweist # solche, auf die sie selbst verweist
# nicht-standard-konforme Kategorien (X-???-???) werden herausgefiltert
# Parameter: die zu bearbeitende Kategorie # Parameter: die zu bearbeitende Kategorie
hole_verwandte_kategs() hole_verwandte_kategs()
{ {
( (
[ -z "$1" ] && return
# erstmal die verweisenden: # erstmal die verweisenden:
cat $KATEG_FILES | sed 's/$/\t/' | grep "[[:space:]]$1[[:space:]]" | cut -f 1 cat $KATEG_FILES | sed 's/$/\t/' | grep "[[:space:]]$1[[:space:]]" | cut -f 1
# dann die, auf die verwiesen wird: # dann die, auf die verwiesen wird:
cat $KATEG_FILES | grep "^$1[[:space:]]" | cut -f 2-30 | tr "\t" "\n" cat $KATEG_FILES | grep "^$1[[:space:]]" | cut -f 2-30 | tr "\t" "\n" | tr " " "\n"
) | sort | uniq ) | grep -v "^X-" | filter_empty | sort | uniq
} }
# liefert alle Kategorien zurueck, die mit den bisherigen Kategorien der Anwendung verwandt sind, # liefert alle Kategorien zurueck, die mit den bisherigen Kategorien der Anwendung verwandt sind,
# ihr jedoch noch nicht zugeordnet wurden # ihr jedoch noch nicht zugeordnet wurden
hole_verwandte_kategs_der_app() hole_verwandte_kategs_der_app()
{ {
local APP_KATEGS="`lade_app_kategs $1`" #local FILTER=`lade_app_kategs "$1" | sed 's#^#/# ; s#$#/d;#' | tr "\n" " "`
( local FILTER=`lade_app_kategs "$1" | sed 's#^.*$#/&/d; #' | tr "\n" " "`
# zweimal die eingetragenen Kategorien, damit diese auf jeden Fall rausgefiltert werden lade_app_kategs "$1" | while read a; do hole_verwandte_kategs "$a"; done | sed "$FILTER" | filter_empty | sort | uniq
echo "$APP_KATEGS"
echo "$APP_KATEGS"
(
for a in $APP_KATEGS
do hole_verwandte_kategs $a
done
) | sort | uniq
) | sort | uniq -u
} }
@ -97,8 +99,8 @@ speichere_formdaten()
local NEUE_KATEGS local NEUE_KATEGS
local APP_NAME local APP_NAME
for a in $EINTRAEGE for a in $EINTRAEGE
do NEUE_KATEGS=`echo "$POST_DATA" | grep "^text_kategs_$a" | cut -d '=' -f 2 | tr '+' ' ' | tr ' ' '\n'` do NEUE_KATEGS=`echo "$POST_DATA" | grep "^text_kategs_$a=" | cut -d '=' -f 2 | tr '+' ' ' | tr ' ' '\n'`
NEUE_KATEGS="$NEUE_KATEGS\n`echo -e \"$POST_DATA\" | grep ^liste_kateg[123]_$a | cut -d '=' -f 2`" NEUE_KATEGS="$NEUE_KATEGS\n`echo -e \"$POST_DATA\" | grep "^liste_kateg[123]_$a=" | cut -d '=' -f 2`"
NEUE_KATEGS=`echo -e "$NEUE_KATEGS" | sort | uniq | tr '\n' ' '` NEUE_KATEGS=`echo -e "$NEUE_KATEGS" | sort | uniq | tr '\n' ' '`
APP_NAME=`app_num2name $a` APP_NAME=`app_num2name $a`
NEUE_ZEILE=`echo -e "$APP_NAME=$NEUE_KATEGS" | sed -r 's/[[:space:]]+/ /g; s/=[[:space:]]/=/'` NEUE_ZEILE=`echo -e "$APP_NAME=$NEUE_KATEGS" | sed -r 's/[[:space:]]+/ /g; s/=[[:space:]]/=/'`
@ -125,7 +127,7 @@ debug_zeige_alle_apps()
{ {
for a in `hole_app_liste` for a in `hole_app_liste`
do echo -en "$a\t-\t" do echo -en "$a\t-\t"
lade_app_kategs "$a" lade_app_kategs "$a" | tr "\n" " "
echo echo
done done
} }
@ -144,12 +146,55 @@ html_header()
echo "<BODY>" echo "<BODY>"
} }
html_footer() html_footer()
{ {
echo "</BODY>" echo "</BODY>"
echo "</HTML>" echo "</HTML>"
} }
html_nav()
{
echo '<DIV ALIGN="CENTER"><TABLE BORDER="0" CELLPADDING="20"><TR>'
echo "<FORM ACTION=\"`basename $0`\" METHOD=\"GET\">"
echo ' <TD>Kategorie: <BR><SELECT NAME="kateg_filter">'
echo ' <OPTION VALUE="">alle</OPTION>'
for a in $ALLE_KATEGS
do if [ "$a" = "$KATEG_FILTER" ]
then echo " <OPTION SELECTED>$a</OPTION>"
else echo " <OPTION>$a</OPTION>"
fi
done
echo ' </SELECT></TD>'
echo ' <TD>Eintr&auml;ge je Seite:<BR><SELECT NAME="eintraege_pro_seite">'
for a in 10 25 50 100 500 1000
do if [ "$a" = "$EINTRAEGE_PRO_SEITE" ]
then echo " <OPTION SELECTED>$a</OPTION>"
else echo " <OPTION>$a</OPTION>"
fi
done
echo ' </SELECT>'
echo ' </TD>'
echo ' <TD>Beginne bei Eintrag:<BR><SELECT NAME="app_start_nr">'
for a in 1 10 25 100 500
do if [ "$a" = "$APP_START_NR" ]
then echo " <OPTION SELECTED>$a</OPTION>"
else echo " <OPTION>$a</OPTION>"
fi
done
echo ' </SELECT>'
echo ' </TD>'
echo ' <TD><INPUT TYPE="SUBMIT" VALUE="Anzeigen"></TD>'
echo '</FORM></TR></TABLE></DIV>'
echo '<HR>'
}
# zwei Paramater: # zwei Paramater:
# (1) _all_ ODER Name der Anwendung, zu der nur die noch nicht verwendeten Verwandten eingetragen werden sollen # (1) _all_ ODER Name der Anwendung, zu der nur die noch nicht verwendeten Verwandten eingetragen werden sollen
# (2) der Name der HTML-Auswahlliste (entspricht dem spaeteren Variablennamen des Inhalts) # (2) der Name der HTML-Auswahlliste (entspricht dem spaeteren Variablennamen des Inhalts)
@ -157,14 +202,10 @@ html_kateg_liste()
{ {
echo "<SELECT NAME=\"$2\" SIZE=\"1\">" echo "<SELECT NAME=\"$2\" SIZE=\"1\">"
echo " <OPTION></OPTION>" echo " <OPTION></OPTION>"
local LISTE
if [ $1 = "_all_" ] if [ $1 = "_all_" ]
then LISTE="$ALLE_KATEGS" then echo -e "$ALLE_KATEGS"
else LISTE="`hole_verwandte_kategs_der_app $1`" else hole_verwandte_kategs_der_app "$1"
fi fi | while read a; do echo " <OPTION>$a</OPTION>"; done
for a in $LISTE
do echo " <OPTION>$a</OPTION>"
done
echo "</SELECT>" echo "</SELECT>"
echo echo
} }
@ -176,7 +217,7 @@ html_apps_config()
local APP_NAME=`app_num2name $1` local APP_NAME=`app_num2name $1`
echo " <TR>" echo " <TR>"
echo " <TD>$APP_NAME</TD>" echo " <TD>$APP_NAME</TD>"
echo " <TD><INPUT NAME=\"text_kategs_$1\" SIZE=\"30\" VALUE=\"`lade_app_kategs $APP_NAME`\"></TD>" echo " <TD><INPUT NAME=\"text_kategs_$1\" SIZE=\"50\" VALUE=\"`lade_app_kategs $APP_NAME | tr '\n' ' '`\"></TD>"
echo " <TD>`html_kateg_liste $APP_NAME liste_kateg1_$1`</TD>" echo " <TD>`html_kateg_liste $APP_NAME liste_kateg1_$1`</TD>"
echo " <TD>`html_kateg_liste $APP_NAME liste_kateg2_$1`</TD>" echo " <TD>`html_kateg_liste $APP_NAME liste_kateg2_$1`</TD>"
echo " <TD>`html_kateg_liste _all_ liste_kateg3_$1`</TD>" echo " <TD>`html_kateg_liste _all_ liste_kateg3_$1`</TD>"
@ -185,10 +226,10 @@ html_apps_config()
# als Parameter ist die Nummer der ersten Anwendung der Liste erforderlich # als Parameter ist die Nummer der ersten Anwendung der Liste erforderlich
html_formular() html_edit_liste()
{ {
echo -n '<FORM NAME="Kategorien-Zuordnung" METHOD="POST"' echo -n '<FORM NAME="Kategorien-Zuordnung" METHOD="POST"'
echo " ACTION=\"`basename $0`?action=speichern&app_start_nr=$APP_START_NR\">" echo " ACTION=\"`basename $0`?action=speichern&app_start_nr=$APP_START_NR&eintraege_pro_seite=$EINTRAEGE_PRO_SEITE&kateg_filter=$KATEG_FILTER\">"
echo "<TABLE BORDER=\"0\">" echo "<TABLE BORDER=\"0\">"
echo " <TR>" echo " <TR>"
echo " <TH>Programm</TH>" echo " <TH>Programm</TH>"
@ -199,14 +240,28 @@ html_formular()
echo " </TR>" echo " </TR>"
local uebrig=$EINTRAEGE_PRO_SEITE local uebrig=$EINTRAEGE_PRO_SEITE
echo -e "$ALLE_APPS" | sed 1,$((APP_START_NR-1))d | while [ $uebrig -gt 0 ] && read num name echo -e "$ALLE_APPS\n" | sed -n "$((APP_START_NR)),$((APP_START_NR+EINTRAEGE_PRO_SEITE-1))p" | while read num name
do html_apps_config $num do [ -n "$num" ] && html_apps_config $num
uebrig=$((uebrig-1)) uebrig=$((uebrig-1))
done done
echo "</TABLE>" echo "</TABLE>"
echo '<DIV ALIGN="CENTER"><INPUT TYPE="SUBMIT" VALUE=" Speichern "></DIV>' echo '<DIV ALIGN="CENTER"><INPUT TYPE="SUBMIT" VALUE=" Speichern "></DIV>'
echo "</FORM>" echo "</FORM>"
if [ $APP_START_NR -gt 1 -o $((APP_START_NR+EINTRAEGE_PRO_SEITE-1)) -lt `hole_anzahl_apps` ]
then echo '<P><BR><DIV ALIGN="CENTER">'
if [ $APP_START_NR -gt 1 ]
then local PREV_START_NR=$((APP_START_NR-EINTRAEGE_PRO_SEITE))
[ "$PREV_START_NR" -lt 1 ] && PREV_START_NR=1
echo "<A HREF=\"`basename $0`?app_start_nr=$PREV_START_NR&eintraege_pro_seite=$EINTRAEGE_PRO_SEITE&kateg_filter=$KATEG_FILTER\">vorherige Seite</A>"
fi
if [ $((APP_START_NR+EINTRAEGE_PRO_SEITE-1)) -lt `hole_anzahl_apps` ]
then local NEXT_START_NR=$((APP_START_NR+EINTRAEGE_PRO_SEITE))
echo "<A HREF=\"`basename $0`?app_start_nr=$NEXT_START_NR&eintraege_pro_seite=$EINTRAEGE_PRO_SEITE&kateg_filter=$KATEG_FILTER\">n&auml;chste Seite</A>"
fi
echo "</DIV></P>"
fi
} }
############# cgi-Zeug ############# ############# cgi-Zeug #############
@ -226,14 +281,17 @@ hole_parameter()
############# los geht es! ############ ############# los geht es! ############
html_header
ALLE_KATEGS=`hole_kateg_liste` ALLE_KATEGS=`hole_kateg_liste`
ALLE_APPS=`hole_app_liste` ALLE_APPS=`hole_app_liste`
KATEG_FILTER=`hole_parameter kateg_filter ""` KATEG_FILTER=`hole_parameter kateg_filter ""`
[ -n "$KATEG_FILTER" ] && ALLE_APPS=`filter_apps_nach_kateg "$KATEG_FILTER"` [ -n "$KATEG_FILTER" ] && ALLE_APPS=`filter_apps_nach_kateg "$KATEG_FILTER"`
APP_START_NR=`hole_parameter app_start_nr 1`
EINTRAEGE_PRO_SEITE=`hole_parameter eintraege_pro_seite $EINTRAEGE_PRO_SEITE`
html_header
html_nav
ACTION=`hole_parameter action formular` ACTION=`hole_parameter action formular`
@ -241,10 +299,7 @@ case "$ACTION" in
speichern|formular) speichern|formular)
[ "$ACTION" = "speichern" ] && speichere_formdaten [ "$ACTION" = "speichern" ] && speichere_formdaten
APP_START_NR=`hole_parameter app_start_nr 1` html_edit_liste
html_formular
html_footer
;; ;;
*) *)
echo '<H1><DIV ALIGN="CENTER">Fehlerhafte Aktion (' echo '<H1><DIV ALIGN="CENTER">Fehlerhafte Aktion ('