diff --git a/README.md b/README.md index acfdbe8e..d34251f4 100644 --- a/README.md +++ b/README.md @@ -351,11 +351,48 @@ Um die Entwicklung und Wartung zu erleichtern, wurden benutzerdefinierte Scripts - **Prävention**: Stelle sicher, dass neue Custom-Dateien mit korrekten Berechtigungen erstellt werden (z.B. via Docker-Container als `www-data`). ### Allgemeine Tipps -- Nach Änderungen immer `docker exec espocrm php /var/www/html/command.php Rebuild` ausführen. +- **WICHTIG**: Nach jeder Änderung an Custom-Dateien das Check & Rebuild Script ausführen: + ```bash + ./custom/scripts/check_and_rebuild.sh + ``` + Das Script prüft automatisch auf häufige Fehler (JSON-Syntax, Dateirechte) und führt bei Fehlerfreiheit den Rebuild durch. + +- Manueller Rebuild (nur falls Script nicht funktioniert): + ```bash + docker exec espocrm php /var/www/html/command.php Rebuild + ``` + - Logs prüfen: `tail -n 100 /var/lib/docker/volumes/vmh-espocrm_espocrm/_data/data/logs/espo-YYYY-MM-DD.log` - Bei Relationship-Problemen: Logs nach "404" und "Link does not exist" durchsuchen: `tail -n 500 /var/lib/docker/volumes/vmh-espocrm_espocrm/_data/data/logs/espo-$(date +%Y-%m-%d).log | grep -A 3 "404\|Link does not exist"` - Bei DB-Problemen: Custom-Scripts wie `workflow_manager.php` verwenden. +### Check & Rebuild Script + +Das Script `custom/scripts/check_and_rebuild.sh` automatisiert die Qualitätssicherung und führt folgende Prüfungen durch: + +1. **JSON-Syntax-Validierung**: Prüft alle `.json` Dateien im `custom/` Verzeichnis auf gültiges JSON +2. **Dateirechte-Prüfung**: Stellt sicher, dass alle Dateien `www-data:www-data` als Owner haben +3. **System-Checks**: Validiert Existenz von Cache- und Logs-Verzeichnissen +4. **Automatischer Rebuild**: Bei Fehlerfreiheit wird der Rebuild durchgeführt + +**Verwendung:** +```bash +# Im EspoCRM-Root-Verzeichnis ausführen +./custom/scripts/check_and_rebuild.sh +``` + +**Ausgabe:** +- ✓ Grün: Alles in Ordnung +- ⚠ Gelb: Warnungen (Rebuild wird trotzdem ausgeführt) +- ✗ Rot: Fehler (Rebuild wird NICHT ausgeführt) + +**Bei Berechtigungsfehlern:** +```bash +sudo chown -R www-data:www-data custom/ +sudo find custom/ -type f -name "*.json" -exec chmod 664 {} \; +sudo find custom/ -type d -exec chmod 775 {} \; +``` + ## 9. Portal-Freigabe-System Um Entitäten für Portalnutzer (Contact-Entität) freizugeben, wurde ein konsistentes Freigabe-System implementiert: diff --git a/custom/scripts/check_and_rebuild.sh b/custom/scripts/check_and_rebuild.sh new file mode 100755 index 00000000..e93db4a5 --- /dev/null +++ b/custom/scripts/check_and_rebuild.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +# EspoCRM Check & Rebuild Script +# Prüft auf häufige Fehler und führt bei Fehlerfreiheit einen Rebuild durch + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +CUSTOM_DIR="$SCRIPT_DIR/custom" +ERRORS=0 +WARNINGS=0 + +echo "==========================================" +echo "EspoCRM Check & Rebuild Script" +echo "==========================================" +echo "" + +# Farben für Output +RED='\033[0;31m' +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 1. JSON-Syntax prüfen +echo -e "${BLUE}[1/3] Prüfe JSON-Syntax...${NC}" +echo "---" + +JSON_FILES=$(find "$CUSTOM_DIR" -type f -name "*.json" 2>/dev/null) +JSON_COUNT=$(echo "$JSON_FILES" | grep -c . || echo 0) + +if [ "$JSON_COUNT" -eq 0 ]; then + echo -e "${YELLOW}⚠ Warnung: Keine JSON-Dateien im custom/ Verzeichnis gefunden${NC}" + WARNINGS=$((WARNINGS + 1)) +else + echo "Gefundene JSON-Dateien: $JSON_COUNT" + + INVALID_JSON=0 + while IFS= read -r file; do + if [ -n "$file" ]; then + if ! jq empty "$file" 2>/dev/null; then + echo -e "${RED}✗ Fehler: Ungültiges JSON in $file${NC}" + ERRORS=$((ERRORS + 1)) + INVALID_JSON=$((INVALID_JSON + 1)) + fi + fi + done <<< "$JSON_FILES" + + if [ "$INVALID_JSON" -eq 0 ]; then + echo -e "${GREEN}✓ Alle JSON-Dateien sind gültig${NC}" + else + echo -e "${RED}✗ $INVALID_JSON JSON-Dateien mit Syntaxfehlern gefunden${NC}" + fi +fi + +echo "" + +# 2. Dateirechte prüfen +echo -e "${BLUE}[2/3] Prüfe Dateirechte...${NC}" +echo "---" + +WRONG_OWNER=0 +CUSTOM_FILES=$(find "$CUSTOM_DIR" -type f 2>/dev/null || echo "") + +if [ -z "$CUSTOM_FILES" ]; then + echo -e "${YELLOW}⚠ Warnung: Keine Dateien im custom/ Verzeichnis gefunden${NC}" + WARNINGS=$((WARNINGS + 1)) +else + while IFS= read -r file; do + if [ -n "$file" ]; then + OWNER=$(stat -c '%U:%G' "$file" 2>/dev/null || echo "unknown:unknown") + if [ "$OWNER" != "www-data:www-data" ]; then + echo -e "${YELLOW}⚠ Warnung: Falsche Dateirechte für $file (Owner: $OWNER, erwartet: www-data:www-data)${NC}" + WRONG_OWNER=$((WRONG_OWNER + 1)) + WARNINGS=$((WARNINGS + 1)) + fi + fi + done <<< "$CUSTOM_FILES" + + if [ "$WRONG_OWNER" -eq 0 ]; then + echo -e "${GREEN}✓ Alle Dateien haben korrekte Berechtigungen (www-data:www-data)${NC}" + else + echo -e "${YELLOW}⚠ $WRONG_OWNER Dateien mit falschen Berechtigungen gefunden${NC}" + echo "" + echo "Zum Beheben aller Berechtigungen ausführen:" + echo " sudo chown -R www-data:www-data $CUSTOM_DIR" + echo " sudo chmod -R 664 $CUSTOM_DIR/**/*.json" + echo " sudo chmod -R 775 $CUSTOM_DIR/**/*/ # Verzeichnisse" + fi +fi + +echo "" + +# 3. Cache-Verzeichnis prüfen +echo -e "${BLUE}[3/3] Prüfe System...${NC}" +echo "---" + +if [ ! -d "$SCRIPT_DIR/data/cache" ]; then + echo -e "${RED}✗ Fehler: Cache-Verzeichnis existiert nicht${NC}" + ERRORS=$((ERRORS + 1)) +else + echo -e "${GREEN}✓ Cache-Verzeichnis existiert${NC}" +fi + +if [ ! -d "$SCRIPT_DIR/data/logs" ]; then + echo -e "${RED}✗ Fehler: Logs-Verzeichnis existiert nicht${NC}" + ERRORS=$((ERRORS + 1)) +else + echo -e "${GREEN}✓ Logs-Verzeichnis existiert${NC}" +fi + +echo "" +echo "==========================================" +echo "Zusammenfassung:" +echo "---" + +if [ "$ERRORS" -eq 0 ] && [ "$WARNINGS" -eq 0 ]; then + echo -e "${GREEN}✓ Keine Fehler oder Warnungen gefunden${NC}" +elif [ "$ERRORS" -eq 0 ]; then + echo -e "${YELLOW}⚠ $WARNINGS Warnung(en) gefunden (Rebuild wird trotzdem ausgeführt)${NC}" +else + echo -e "${RED}✗ $ERRORS Fehler und $WARNINGS Warnung(en) gefunden${NC}" +fi + +echo "==========================================" +echo "" + +# Entscheidung: Rebuild durchführen oder nicht +if [ "$ERRORS" -gt 0 ]; then + echo -e "${RED}REBUILD WIRD NICHT DURCHGEFÜHRT${NC}" + echo "Bitte behebe die oben genannten Fehler und führe das Script erneut aus." + exit 1 +else + echo -e "${GREEN}Starte Rebuild...${NC}" + echo "" + + # Rebuild durchführen + if command -v docker &> /dev/null; then + if docker exec espocrm php /var/www/html/command.php rebuild 2>&1; then + echo "" + echo -e "${GREEN}==========================================" + echo "✓ REBUILD ERFOLGREICH ABGESCHLOSSEN" + echo "==========================================${NC}" + exit 0 + else + echo "" + echo -e "${RED}==========================================" + echo "✗ REBUILD FEHLGESCHLAGEN" + echo "==========================================${NC}" + echo "Prüfe die Logs unter data/logs/ für weitere Details." + exit 1 + fi + else + echo -e "${RED}✗ Docker nicht gefunden. Rebuild kann nicht durchgeführt werden.${NC}" + exit 1 + fi +fi diff --git a/data/config.php b/data/config.php index 93c194f5..a1e31dcd 100644 --- a/data/config.php +++ b/data/config.php @@ -349,8 +349,8 @@ return [ 0 => 'youtube.com', 1 => 'google.com' ], - 'cacheTimestamp' => 1768938316, - 'microtime' => 1768938316.687896, + 'cacheTimestamp' => 1768938511, + 'microtime' => 1768938511.815557, 'siteUrl' => 'https://crm.bitbylaw.com', 'fullTextSearchMinLength' => 4, 'appTimestamp' => 1768843902,