Commit graph

145 commits

Author SHA1 Message Date
Thorsten Bus 862b9f6c16 fix: build Vite assets in entrypoint for production (APP_ENV=production)
Eliminates dependency on node dev server for live site. Assets served
as static files from public/build/ instead of proxied through Vite.
2026-03-30 22:55:47 +02:00
Thorsten Bus 04ef0b08c8 refactor: entrypoint with WWWUSER/WWWGROUP for FPM UID/GID mapping
- Entrypoint remaps www-data to host UID/GID via WWWUSER/WWWGROUP env vars
- Moves composer install, storage setup, migrate into entrypoint
- Removes inline command from docker-compose
- Defaults to 1000:1000, configurable via .env
2026-03-30 22:37:02 +02:00
Thorsten Bus 3832aaa9d8 fix: chown storage to www-data for FPM write access 2026-03-30 22:35:20 +02:00
Thorsten Bus db15a71378 fix: pipe PHP/FPM errors to stderr for docker compose logs 2026-03-30 19:06:45 +02:00
Thorsten Bus 843553b743 change permission of gitignore files 2026-03-30 19:05:08 +02:00
Thorsten Bus dc536dd078 fix: join caddy external network, use expose instead of ports
Caddy reaches FPM via Docker network (pp-planer-app:9000) instead of
host port mapping. Removed broken app-public named volume.
2026-03-30 18:58:23 +02:00
Thorsten Bus 6c7c6c076d fix: Docker FPM on port 9000, proper healthcheck, runtime dep install
- Slim Dockerfile to env-only (deps install at container start via volume mount)
- Add FastCGI ping healthcheck instead of broken HTTP curl
- App startup: composer install + migrate + php-fpm
- Remove obsolete docker-compose version key
2026-03-30 17:29:32 +02:00
Thorsten Bus 07008f3f33 fix: install deps on container start (anonymous volumes mask host dirs) 2026-03-30 16:39:33 +02:00
Thorsten Bus 1eb4f1642f rename cts-work to pp-planer, move Dockerfile to build/, optimize dev scripts
- Rename all cts-work references to pp-planer (valet, sanctum, playwright, e2e, docs)
- Fix docker-compose build context to use project root with build/Dockerfile
- Add .dockerignore to exclude unnecessary files from Docker build
- start_dev.sh: stale PID cleanup, dependency checks, APP_KEY check, process health verification
- stop_dev.sh: fix set -e crash on arithmetic, report already-dead processes, idempotent exit
2026-03-30 16:00:02 +02:00
Thorsten Bus af9b8d1882 Merge branch 'cts-presenter-app' 2026-03-30 14:01:10 +02:00
Thorsten Bus 1ed8ca3ee7 ignore files 2026-03-30 14:00:08 +02:00
Thorsten Bus af46e1829d feat: switch propresenter/parser to remote VCS, add local dev toggle script
Replace path repository with VCS pointing to
git.stadtmission-butzbach.de/public/propresenter-php.git.
Add use_local_pp_lib.sh to toggle between remote and local checkout.
Fix test fixture paths after repo restructure (ref/ → doc/reference_samples/).
2026-03-30 13:45:42 +02:00
Thorsten Bus 2ba612072f fix: resolve 17 pre-existing test failures (path refs, Mockery alias mocks)
- Update propresenter ref path from ../propresenter-work/ to ../propresenter/
- Fix ProFileImportTest assertion for CCLI-based upsert behavior
- Replace Mockery alias mocks with testable subclass pattern in
  PlaylistExportTest, eliminating @runInSeparateProcess requirement
- Use DI (app()) for PlaylistExportService in controller for testability
- All 302 tests pass (was 285 pass + 17 fail)
2026-03-30 12:43:50 +02:00
Thorsten Bus 0e3c647cfc feat: probundle export with media, image upscaling, upload dimension warnings
- Fix probundle exports missing images (double slides/ prefix in storage path)
- Replace manual ZipArchive with PresentationBundle + ProBundleWriter from parser plugin
- Add per-agenda-item download route and buttons for songs and slide items
- Remove text layer from image-only slides in .pro generation
- Fix image conversion: upscale small images, black bars on 2 sides max (contain)
- Add upload warnings for non-16:9 and sub-1920x1080 images (German, non-blocking)
- Update SlideFactory and all tests to use slides/ prefix in stored_filename
- Add 11 new tests (agenda download, image conversion, upload warnings)
2026-03-30 10:29:37 +02:00
Thorsten Bus 63f40f8364 feat(ui): click left pill scrolls to and highlights right preview 2026-03-29 17:42:55 +02:00
Thorsten Bus b8b92f094e feat(ui): add MASTER arrangement, fix slide upload/thumbnail bugs, add slide preview with navigation
- Add virtual MASTER arrangement to all songs (read-only, shows all groups in song order, clonable)
- Fix drop zone staying open after slide upload and thumbnail 403 (double slides/ path)
- Add click-to-preview overlay with download button, prev/next navigation, and slide counter
- Add X delete button with confirmation dialog and hover tooltip preview on agenda thumbnails
- Fix arrangement select not updating after add/clone (emit + re-fetch pattern)
- Move InformationBlock below agenda; announcement row scrolls to it instead of showing upload
- Create storage symlink (public/storage -> storage/app/public)
2026-03-29 17:41:26 +02:00
Thorsten Bus 852231ae01 fix(ui): ArrangementDialog drag whole box, persist changes across switch, hover highlight
- Remove drag handle restriction — entire pill box is now draggable
- Keep local copy of arrangements so edits survive switching between
  arrangements (was reading stale props after switch-back)
- Highlight corresponding left pill when hovering right lyric preview
2026-03-29 16:34:30 +02:00
Thorsten Bus 78b8fc2e3d refactor(ui): convert agenda list to table with proper data formatting
- Replace card-based agenda layout with a 6-column table (Nr, Zeit, Dauer, Titel, Verantwortlich, Aktionen)
- Fix isHeaderType to only match type=header, not all non-song items
- Format start time from ISO 8601 to HH:MM (Europe/Berlin)
- Format duration from seconds string to H:MM
- Fix responsible parsing for CTS data structure ({text, persons[{person:{title}}]})
- Move unmatched song search/assign UI into ArrangementDialog popup
- Add colored row backgrounds (song/sermon/announcement/slides) with left border
- Invert header rows to dark grey background with white text
2026-03-29 16:32:30 +02:00
Thorsten Bus 6d337d8b6a fix(ui): fix ArrangementDialog data mapping and close behavior
- Transform arrangement data in Edit.vue to flat {id, name, color, slides}
  format expected by ArrangementDialog (was passing raw Eloquent structure
  with nested arrangement_groups[].group instead of flat .groups[])
- Stop arrangement select change from closing the dialog (only close on X)
- Fallback to all available groups when no arrangement selected (Master)
2026-03-29 15:39:38 +02:00
Thorsten Bus a33f2d3f4f feat(ui): show position, time, duration and responsible on agenda items 2026-03-29 15:26:32 +02:00
Thorsten Bus 41426ff25b add better errorhandling for cts sync 2026-03-29 15:24:13 +02:00
Thorsten Bus 4c119b647d feat: add has_agenda flag to services and guard agenda sync
Events without an agenda in ChurchTools now gracefully set has_agenda=false
instead of throwing errors during sync. The edit/finalize buttons are
disabled in the frontend for services without an agenda.

Also fixes missing cts_song_id column on service_songs table.
2026-03-29 15:22:32 +02:00
Thorsten Bus c7f5845b80 chore: mark edit-page-restructure plan as complete 2026-03-29 15:03:27 +02:00
Thorsten Bus 34aec530d2 fix(ui): show arrangement name in SongAgendaItem pill header 2026-03-29 12:33:53 +02:00
Thorsten Bus 665212fbea refactor(cleanup): remove deprecated block components
The ModerationBlock, SermonBlock, and SongsBlock Vue components are no longer
imported or used in the Edit.vue page after Task 12 restructuring. Removed
deprecated files, keeping ArrangementConfigurator which is still used by
SongEditModal and ArrangementDialog.
2026-03-29 12:28:58 +02:00
Thorsten Bus 6964931286 test(e2e): Playwright tests for restructured edit page 2026-03-29 12:26:11 +02:00
Thorsten Bus fb1e51361f test(php): update existing tests for agenda model
- Fix uploaded_at in InformationBlockTest and ServiceControllerTest
  (Faker ignores Carbon::setTestNow, generating future dates that fail
  the uploaded_at <= service.date filter)
- Add agenda item association tests to ModerationBlockTest (3 new tests)
- Add agenda item association tests to SermonBlockTest (3 new tests)
- Verify legacy slides without agenda item still work

Test results: 12 failures (down from 14 baseline), all pre-existing
(ProPresenter parser path issues + suite ordering flake)
2026-03-29 12:26:05 +02:00
Thorsten Bus e88079e211 feat(ui): update service list status columns for agenda model 2026-03-29 12:18:50 +02:00
Thorsten Bus 18d0d6f965 feat(export): wire agenda export into download flow 2026-03-29 12:17:50 +02:00
Thorsten Bus 45955b70a2 feat(ui): add slide upload on agenda items 2026-03-29 12:12:58 +02:00
Thorsten Bus f78d20fc59 feat(ui): restructure Edit.vue with agenda view 2026-03-29 12:11:58 +02:00
Thorsten Bus d2eef5abe2 feat(ui): add agenda settings to Settings page 2026-03-29 12:10:46 +02:00
Thorsten Bus e9901a6f9b feat(ui): add AgendaItemRow and SongAgendaItem components 2026-03-29 12:07:15 +02:00
Thorsten Bus 2d90621cca feat(ui): redesign ArrangementDialog with lyric preview 2026-03-29 12:07:02 +02:00
Thorsten Bus de431d29cc feat(export): agenda-ordered playlist export 2026-03-29 11:59:38 +02:00
Thorsten Bus 88661c6bef feat(sync): sync all CTS agenda items (not just songs) 2026-03-29 11:54:50 +02:00
Thorsten Bus 0b671956d6 feat(controller): pass agenda items to edit page 2026-03-29 11:48:28 +02:00
Thorsten Bus 2d70026a20 refactor(model): update finalizationStatus for agenda model 2026-03-29 11:46:54 +02:00
Thorsten Bus 7a71b8b2de chore(debug): add CTS agenda type discovery command 2026-03-29 11:39:24 +02:00
Thorsten Bus 1f367b6f37 feat(settings): add agenda configuration keys 2026-03-29 11:37:33 +02:00
Thorsten Bus 03224ffa06 feat(service): add AgendaMatcherService with wildcard namesmatching 2026-03-29 11:37:06 +02:00
Thorsten Bus 31d7634dbf feat(db): add service_agenda_items table + slides FK migration 2026-03-29 11:34:55 +02:00
Thorsten Bus 5cf0c43241 add start/stop dev scripts 2026-03-29 10:49:07 +02:00
Thorsten Bus 894e26f37d fix(test): use deterministic uploaded_at in ServiceControllerTest
Faker's dateTimeBetween ignores Carbon::setTestNow, producing dates
after the frozen test time. This caused the info_slides_count
assertion to fail non-deterministically when the system date diverged
from the test-frozen date.
2026-03-06 10:28:27 +01:00
Thorsten Bus c36fdf2d50 chore: update sisyphus plans, evidence, and boulder state 2026-03-06 10:26:00 +01:00
Thorsten Bus 341af42158 docs: update AGENTS.md with repo structure, build commands, and code style 2026-03-06 10:25:54 +01:00
Thorsten Bus 2a23f0d210 docs: sync AGENTS.md with orchestration repo updates 2026-03-06 10:25:35 +01:00
Thorsten Bus 044b94b080 refactor(export): use in-memory content for zip bundle and playlist entries
Replace file-path-based zip entries with in-memory content via
file_get_contents. Rename .pro entry to 'data' (raw protobuf),
add addStoredEntry() helper with CM_STORE compression, and remove
temp directory management.
2026-03-06 10:25:21 +01:00
Thorsten Bus fa3162b2b7 docs: add build commands and architecture overview to AGENTS.md
Add build/test/lint commands, architecture overview, PHP/Vue/test
code style conventions, and key project constraints. Include dompdf
config, vite HMR note, and sisyphus evidence files.
2026-03-02 23:03:14 +01:00
Thorsten Bus 149389a382 fix(test): add deterministic order values in SongPdfTest
Specify explicit order values for SongGroup factories to avoid unique
constraint violations on the composite (song_id, order) key when
faker generates duplicate random values.
2026-03-02 23:02:58 +01:00