Gibt die neuesten 10 Kommentare aus, die im Wiki eingegeben wurden.
Der Name des Scripts wäre besser display_kommentare ....
Wird am Besten als User postgresql ausgeführt.
Das Script stellt nicht nur die letzten 10 Kommentare dar, sondern gibt eine
Benachrichtigung bei neuen Kommentaren per email
mit nocache Parameter am Link, mit aktuellen Zeitstempel
und fügt ihn als Query-Parameter an die URL an.
Dadurch wird der Link mit dem Cache-Busting-Parameter erstellt.
Sprich, die Seite wird frisch geladen und nicht aus dem Cache gezeigt.
#!/bin/bash
# generate_kommentare.sh
# by bed
# Mit dem Script behebe ich einen Mangel in Wikijs,
# denn man hat keine Möglichkeit festzustellen, ob und wo es neue Kommentare gibt.
# $Revision: 1.6 $
# Definiere die Ziel-HTML-Datei
OUTPUT_FILE="/var/www/domain.de/web/show_kommentare.html"
# Erstelle eine temporäre Datei für die SQL-Ausgabe
TEMP_SQL_OUTPUT="/tmp/kommentare_output.html"
# Finde die letzte Kommentar-ID in der Ziel-HTML-Datei
LAST_MAXID=$(grep -oP 'right">\K\d+' "${OUTPUT_FILE}" | head -1)
# Definiere die SQL-Abfrage und leite die Ausgabe in die temporäre Datei um
psql -d wikijsdb -c "\pset format html" -c "
SELECT
c.id AS comment_id,
c.content AS Kommentar,
p.title AS Seiten_Titel,
c.name AS author_name,
c.email AS author_email,
c.\"createdAt\" AS comment_created_at
FROM
comments c
JOIN
pages p ON c.\"pageId\" = p.id
ORDER BY
c.\"createdAt\" DESC
LIMIT
10;
" > ${TEMP_SQL_OUTPUT}
# Lese die SQL-Ausgabe aus der temporären Datei
RESULT=$(cat ${TEMP_SQL_OUTPUT})
# Extrahiere nur den relevanten Tabelleninhalt
RESULT=$(echo "${RESULT}" | sed -n '/<table/,/<\/table>/p' | sed '1d; ${d}')
# Erstelle den HTML-Inhalt
HTML_CONTENT=$(cat <<EOF
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Neueste Kommentare</title>
<style>
table {
width: 100%;
border-collapse: collapse;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
h1{
text-align: center;
}
</style>
</head>
<body>
<h1>Neueste Kommentare im wiki</h1>
<table>
$(echo "${RESULT}")
</table>
</body>
</html>
EOF
)
# Schreibe den HTML-Inhalt in die Zieldatei
echo "${HTML_CONTENT}" > ${OUTPUT_FILE}
# Finde die aktuelle Kommentar-ID in der neuen HTML-Datei
MAXID=$(grep -oP 'right">\K\d+' "${OUTPUT_FILE}" | head -1)
# Prüfe, ob ein neuer Kommentar hinzugekommen ist
if [ "${MAXID}" -gt "${LAST_MAXID}" ]; then
echo -e "Es gibt einen neuen Kommentar im Wiki.\nBesuche https://domain.de/kommentare.html?nocache=$(date +%Y-%m-%d-%H:%M)" | mail -s "Neuer Kommentar" bed@domain.de
fi
# Berechtigung setzen, falls erforderlich
chmod 644 ${OUTPUT_FILE}
# Lösche die temporäre Datei
rm ${TEMP_SQL_OUTPUT}
#echo "Die HTML-Datei wurde erstellt: ${OUTPUT_FILE}"