#!/bin/sh
#
# ein kleines Web-Interface, um die trac-admin-Konsole zu verwenden
#

set -u

# parent-URL der trac-Projekte
TRACURL="/trac"
# das trac-admin-Program
TRACADMIN="/usr/bin/trac-admin"
# das Verzeichnis, das alle trac-Projekte enthaelt
REPOS_ROOT="/data/trac"
# die URL der css-Datei von trac
CSSURL=/trac-shared/css/trac.css

############# Funktionen ###################

hole_uebergabe()
# Parameter: Name der Variablen
# extrahiert eine Variable aus dem Query-String
{
	# Parameter holen | in Zeilen aufspalten | die richtige rausfiltern | nur den Wert nehmen | ausmaskierte "+/ " wiedereinsetzen
	echo "$QUERY_STRING" | sed "s/&/\n/g" | grep "^$1=" | cut -d "=" -f 2 | sed "s/+/ /g; s/%2B/+/g"
}

hole_project_name()
# ermittelt den Namen des aktuellen Projekts
# entweder: aus dem HTTP_REFERER (vorherige Seite in der History) -> beim ersten Aufruf der Konsole
# oder: aus der Formular-Variable -> nach jedem ausgefuehrten Konsolen-Kommando
{
	local proj=`hole_uebergabe trac_project`
	if [ -z "$proj" ]
		then	# hole den Projektnamen aus der History
			local ref=`set | grep "^HTTP_REFERER=" | cut -d "=" -f 2`
			proj=`echo "$ref" | sed "s#^.*$TRACURL/\([^/]*\).*#\1#"`
	  fi
	echo "$proj"
}


########## es geht los #################

echo 'Content-Type: text/html'
echo

# Header anzeigen
echo '<html><head>'
echo '<title>TracAdmin-Konsole (handgemacht)</title>'
echo '<link rel="stylesheet" type="text/css" href="'$CSSURL'">'
echo '<style type="text/css">'
echo '</head><body>'

# den Namen des trac-Projekts ermitteln
# das geht erst nach dem Header, da diese Ermittlung eventuell eine Fehlermeldung produziert
TRAC_PROJECT=`hole_project_name`
[ -z "$TRAC_PROJECT" -o ! -d "$REPOS_ROOT/$TRAC_PROJECT" ] && echo "ungueltiges trac-Projekt ($TRAC_PROJECT)" && exit 1

# das REPOS-Verzeichnis setzen
REPOS="$REPOS_ROOT/$TRAC_PROJECT"

# die Ueberschrift
echo
echo '<p style="text-align:right;text-style:italic"><a href="'$TRACURL/$TRAC_PROJECT'" title="zur sch&ouml;nen Oberfl&auml;che">'
echo 'zur&uuml;ck zur trac-Oberfl&auml;che</a></p>'
echo '<h1 style="margin:5px; top-margin:7%">'
echo 'Die Mini-TracAdmin-Konsole f&uuml;r <i>'$TRAC_PROJECT'</i>:</h1>'

# das Formular
echo '<form style="text-align:center; background-color:lightgray; padding:5px; margin:5px"'
echo 'action="'$SCRIPT_NAME'" method="get">'
echo 'Argumente f&uuml;r <tt>trac-admin</tt>:'
echo '<input name="commandline" type="text" size="50">'
echo '<input type="submit" name="submit" value=" Ausfuehren ">'
echo '<input type="hidden" name="trac_project" value="'$TRAC_PROJECT'">'
echo '</form>'

################ pruefe, ob Parameter reinkamen #################
para=`hole_uebergabe commandline`

# falls eine Befehlszeile uebergeben wurde, wird sie ausgefuehrt und die Ausgabe angezeigt
if [ -n "$para" ]
	then	FARBE="lightgreen"
		output=`"$TRACADMIN" "$REPOS" "$para"`
		echo -e "$output" | grep -q '^\*\*' && FARBE=red
		echo '<div style="background-color:'$FARBE'; padding:5px; font-family:monospace; margin:5px">'
		echo -e "$output" | sed "s/$/<BR>/"
		echo '</div>'
  fi

# den Hilfe-Text des tracadmin-Programms anzeigen
echo
echo '<div style="padding:5px; margin:5px; background-color:lightblue;font-family:monospace;">'
"$TRACADMIN" "$REPOS" help | sed "s/$/<br>/"
echo '</div></body></html>'