diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 62d2b7d..86d1d88 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -51,17 +51,67 @@ jobs: # ===================== # PROD DEPLOY (FTP) # ===================== - - name: Deploy to PROD via FTP + - name: Deploy to PROD via SSH if: github.ref == 'refs/heads/main' + env: + SSH_HOST: ${{ secrets.PROD_SSH_HOST }} + SSH_USER: ${{ secrets.PROD_SSH_USER }} + SSH_PORT: ${{ secrets.PROD_SSH_PORT }} + SSH_KEY: ${{ secrets.PROD_SSH_PRIVATE_KEY }} + HOST_WP_ROOT: ${{ secrets.PROD_HOST_WP_ROOT }} + HOST_ABS_PLUGIN_PATH: ${{ secrets.PROD_HOST_ABS_PLUGIN_PATH }} run: | + set -euo pipefail apt-get update - apt-get install -y lftp + # openssh-client to auth; tar for packaging with excludes + apt-get install -y openssh-client tar - lftp -u "${{ secrets.FTP_USER }},${{ secrets.FTP_PASS }}" ftp://${{ secrets.FTP_HOST }}:${{ secrets.FTP_PORT }} < ~/.ssh/prod_docker_key + chmod 600 ~/.ssh/prod_docker_key + + # Write SSH config so DOCKER_HOST can reference a named host + cat > ~/.ssh/config <> ~/.ssh/known_hosts || true + + # Create a tarball with excludes to avoid copying VCS and CI folders + TAR_FILE="/tmp/kc-plugin.tar.gz" + tar -czf "$TAR_FILE" \ + --exclude .git \ + --exclude .gitea \ + --exclude .github \ + --exclude Notes \ + --exclude "*.yml" \ + --exclude "*.yaml" \ + --exclude "*.md" \ + . + + # Choose target path: prefer absolute plugin path; otherwise derive from HOST_WP_ROOT + if [ -n "${HOST_ABS_PLUGIN_PATH}" ]; then + echo "Deploying to absolute host path: ${HOST_ABS_PLUGIN_PATH}" + REMOTE_PATH_DECL="PLUGIN_PATH=\"${HOST_ABS_PLUGIN_PATH%/}\"" + elif [ -n "${HOST_WP_ROOT}" ]; then + echo "Deploying to host path relative to remote home: \$HOME/${HOST_WP_ROOT%/}/wp-content/plugins/konficastle-workshopwahl" + REMOTE_PATH_DECL="PLUGIN_PATH=\$HOME/${HOST_WP_ROOT%/}/wp-content/plugins/konficastle-workshopwahl" + else + echo "Error: set PROD_HOST_ABS_PLUGIN_PATH (absolute) or PROD_HOST_WP_ROOT (relative)" >&2 + exit 1 + fi + + # Upload tarball to host home and extract + scp -o StrictHostKeyChecking=accept-new -o IdentitiesOnly=yes -i ~/.ssh/prod_docker_key "$TAR_FILE" prod-docker:~/kc-plugin.tar.gz + # Use \$HOME for remote expansion (tilde does not expand inside quotes) + ssh prod-docker "$REMOTE_PATH_DECL; mkdir -p \"\$PLUGIN_PATH\" && rm -rf \"\$PLUGIN_PATH\"/* && tar -xzf \"\$HOME/kc-plugin.tar.gz\" -C \"\$PLUGIN_PATH\" && rm -f \"\$HOME/kc-plugin.tar.gz\" && ls -la \"\$PLUGIN_PATH\" | head -n 50" diff --git a/README.md b/README.md index 157bba0..dad92b6 100644 --- a/README.md +++ b/README.md @@ -48,3 +48,7 @@ Dieses WordPress-Plugin ermöglicht die Verwaltung und Durchführung von Worksho Für Detailfragen zu Datenbankstruktur, Shortcodes oder Zuteilungslogik siehe die jeweiligen Dateien im `includes/`-Verzeichnis. +## Release Notes + +Siehe die ausführlichen Hinweise zur Version 1.0 in [RELEASE_NOTES.md](RELEASE_NOTES.md). + diff --git a/includes/admin-workshops.php b/includes/admin-workshops.php index a03c672..d06296f 100644 --- a/includes/admin-workshops.php +++ b/includes/admin-workshops.php @@ -10,8 +10,9 @@ function kc_workshops_page() { // Liste aller Wahlen für Auswahl $wahlen_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_wahlen ORDER BY id DESC"); - // Liste aller Phasen für Auswahl - $phasen_liste = $wpdb->get_results("SELECT * FROM {$prefix}kc_phasen ORDER BY nummer"); + // Phasen werden pro Wahl über die Spalte `anzahl_einheiten` in `kc_wahlen` bestimmt. + // Eine separate Tabelle `kc_phasen` wird nicht benötigt. + $phasen_liste = []; // Workshop löschen if (isset($_GET['delete_workshop'])) { diff --git a/includes/frontend-form.php b/includes/frontend-form.php index d0be839..a706958 100644 --- a/includes/frontend-form.php +++ b/includes/frontend-form.php @@ -5,14 +5,8 @@ add_shortcode('konficastle_workshopwahl', function($atts) { global $wpdb; - // KRITISCHER TEST: Ausgabe ganz am Anfang - //$debug_output = '
'; - //$debug_output .= '

DEBUG INFO

'; - //$debug_output .= 'Shortcode läuft!
'; - //$debug_output .= 'REQUEST_METHOD: ' . ($_SERVER['REQUEST_METHOD'] ?? 'NICHT GESETZT') . '
'; - //$debug_output .= 'POST vorhanden: ' . (empty($_POST) ? 'NEIN' : 'JA') . '
'; - //$debug_output .= 'POST Inhalt:
' . print_r($_POST, true) . '
'; - //$debug_output .= '
'; + // Optionales Debug-Ausgabe-Fragment (standardmäßig leer, um Warnungen zu vermeiden) + $debug_output = ''; $wahl = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}kc_wahlen WHERE id=%d", $wahl_id)); if(!$wahl || !$wahl->freigegeben) {