#!/usr/bin/env bash # htmlviewer-directediting installer # Applies the HTML-in-iOS-App patches to a Nextcloud container. # Usage: ./install.sh # default container: nextcloud1-app-1 # Idempotent: safe to re-run after app updates. # # This version is CORE-CLEAN: the Nextcloud text app is NOT patched. # The htmlviewer app registers its editor under the hard-coded app # editor id "eurooffice" ("Öffnen mit Office" via long press). Plain # tap on an HTML file still opens the source view (iOS default) — # single-tap auto-open would require patching the text app, see # README.md "Varianten". set -euo pipefail CONTAINER="${1:-nextcloud1-app-1}" APP="/var/www/html/custom_apps/htmlviewer" TEXT="/var/www/html/apps/text/lib/DirectEditing/TextDirectEditor.php" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" echo "=== htmlviewer-directediting installer (core-clean) ===" echo "Container: $CONTAINER" # 0. Sanity docker exec "$CONTAINER" test -d "$APP" || { echo "ERROR: htmlviewer app not found at $APP"; exit 1; } # 1. RESTORE original text app if it was patched by an earlier install if docker exec "$CONTAINER" test -f /tmp/TextDirectEditor.php.bak-htmlproject; then echo "--- restoring original TextDirectEditor.php from backup" docker exec "$CONTAINER" bash -c "cp /tmp/TextDirectEditor.php.bak-htmlproject $TEXT" else echo "--- no text-app backup found; nothing to restore (good)" fi # 2. Deploy htmlviewer files TMPDIR_ON_HOST=$(mktemp -d) cp patches/htmlviewer/*.php "$TMPDIR_ON_HOST/" docker cp "$TMPDIR_ON_HOST/HtmlDirectEditor.php" "$CONTAINER:$APP/lib/DirectEditing/HtmlDirectEditor.php" docker cp "$TMPDIR_ON_HOST/HtmlDirectEditorBridge.php" "$CONTAINER:$APP/lib/DirectEditing/HtmlDirectEditorBridge.php" docker cp "$TMPDIR_ON_HOST/DirectController.php" "$CONTAINER:$APP/lib/Controller/DirectController.php" docker cp "$TMPDIR_ON_HOST/RegisterDirectEditorListener.php" "$CONTAINER:$APP/lib/Listeners/RegisterDirectEditorListener.php" docker cp "$TMPDIR_ON_HOST/directEditing-template.php" "$CONTAINER:$APP/templates/directEditing.php" docker exec "$CONTAINER" chown www-data:www-data \ "$APP/lib/DirectEditing/HtmlDirectEditor.php" \ "$APP/lib/DirectEditing/HtmlDirectEditorBridge.php" \ "$APP/lib/Controller/DirectController.php" \ "$APP/lib/Listeners/RegisterDirectEditorListener.php" \ "$APP/templates/directEditing.php" rm -rf "$TMPDIR_ON_HOST" # 3. Register in Application.php + routes.php (idempotent) docker cp patches/htmlviewer/patch_app.py "$CONTAINER:/tmp/patch_app.py" docker exec "$CONTAINER" python3 /tmp/patch_app.py # 4. Lint + restart for f in "$APP/lib/DirectEditing/HtmlDirectEditor.php" \ "$APP/lib/DirectEditing/HtmlDirectEditorBridge.php" \ "$APP/lib/Controller/DirectController.php" \ "$APP/lib/Listeners/RegisterDirectEditorListener.php" \ "$APP/templates/directEditing.php"; do docker exec "$CONTAINER" php -l "$f" done echo "=== Restarting container ===" docker restart "$CONTAINER" echo "=== Done. iOS: long press HTML file -> 'Öffnen mit Office' renders the page. ==="