shahondin1624 139f014c29
Database Portability Tests / Unit Tests (PlatformHelper) (pull_request) Failing after 42s
Database Portability Tests / Integration (mysql) (pull_request) Has been skipped
Database Portability Tests / Integration (postgres) (pull_request) Has been skipped
Database Portability Tests / Integration (sqlite) (pull_request) Has been skipped
Database Portability Tests / Verify no MySQL-specific SQL (pull_request) Successful in 4s
feat: extend Abfrage-Builder with NOT, visual brackets, and full field coverage (Closes #194)
Backend (QueryService):
- AST supports optional `not: true` flag on groups and leaves, translated
  to SQL `NOT (...)` wrappers; existing queries without `not` unchanged
- New member fields: notizen, zusatz_notizen, einwilligung_datum,
  juleica_nummer, juleica_ablaufdatum
- New related-entity fields via EXISTS subqueries: telefon, email,
  familie_name, beitrag_bezahlt_jahr, beitrag_offen_jahr, beitrag_betrag,
  lager_teilnahme, lager_name, verletzung_vorhanden
- Allergien (verschlüsselt): server-side decrypt-and-filter for content
  operators; pure SQL null/empty check for is_empty/is_not_empty; audit
  log records field+op+user but never the value
- Fields now carry a `group` label for grouped rendering in the UI
- Depth cap kept at 10 (Backend-Validierung) - no hard frontend limit

Frontend (QueryBuilder.vue):
- NICHT toggle on each leaf condition (¬ button) and on each group header
- Visual brackets `(` `)` rendered around nested groups
- "Klammer auflösen" button that lifts children into the parent when
  logic is compatible and the group isn't negated
- Fields dropdown grouped by category (Mitglied, Adresse, Kontakt,
  Familie, Beiträge, Lager, Gesundheit)
- Encrypted fields flagged with 🔒 badge
- Removed hard `depth < 3` nesting cap

Tests: 25 new QueryService tests covering NOT semantics, EXISTS joins,
allergien decrypt path, audit-log value masking, and backwards
compatibility with legacy ASTs. All 1118 unit + 13 integration tests pass.

Version bumped to 0.2.8 in all three locations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 20:16:43 +02:00
2026-04-07 21:46:41 +02:00
2026-04-07 21:46:41 +02:00

Mitgliederverwaltung

A Nextcloud app for managing members, families, fees, camps and more for scouting associations (Pfadfindervereine). Integrates with Nextcloud Calendar, Contacts and Files.

Prerequisites

  • Docker & Docker Compose
  • Node.js (for building the frontend)

Quick Start

# 1. Create your .env from the example and adjust passwords
cp .env.example .env

# 2. Build frontend + vendor deps, start containers, install Nextcloud, enable app
make deploy

Nextcloud will be available at http://localhost:8080. Log in with the NEXTCLOUD_ADMIN_USER / NEXTCLOUD_ADMIN_PASSWORD from your .env.

Make Targets

Target Description
make deploy Full first-time setup: install deps, build frontend, start containers, install Nextcloud, copy & enable app
make redeploy Rebuild frontend and re-copy the app into a running Nextcloud (use after code changes)
make build Install deps and build the frontend (production)
make deps Install npm and Composer dependencies only
make up Start containers in the background
make down Stop containers
make logs Tail Nextcloud container logs
make clean Stop containers and delete all volumes (full reset)
make package Build and create a distributable tar.gz (optionally Ed25519-signed)
make release Package, tag, and upload as a Gitea release

Production Installation

To install on an existing Nextcloud 28+ instance (without Docker):

  1. Download the latest release tarball from the Releases page, or build it yourself with make package
  2. Extract into your Nextcloud custom_apps directory:
    tar -xzf mitgliederverwaltung-*.tar.gz -C /path/to/nextcloud/custom_apps/
    chown -R www-data:www-data /path/to/nextcloud/custom_apps/mitgliederverwaltung
    
  3. Enable the app:
    sudo -u www-data php /path/to/nextcloud/occ app:enable mitgliederverwaltung
    

Development Workflow

After the initial make deploy, the typical cycle is:

# Watch for frontend changes (auto-rebuilds on save)
npm run watch

# After changes, copy the rebuilt app into the running container
make redeploy

npm Scripts

Script Description
npm run build Production webpack build
npm run dev Development webpack build (once)
npm run watch Development build with file watching

Environment Variables

Copy .env.example to .env and set your values:

Variable Description
MYSQL_ROOT_PASSWORD MariaDB root password
MYSQL_DATABASE Database name (default: nextcloud)
MYSQL_USER Database user (default: nextcloud)
MYSQL_PASSWORD Database user password
NEXTCLOUD_ADMIN_USER Nextcloud admin username
NEXTCLOUD_ADMIN_PASSWORD Nextcloud admin password

Architecture

  • Backend: PHP (Nextcloud app framework), served by Nextcloud 28 (Apache)
  • Frontend: Vue 3 + Pinia + Vue Router, using @nextcloud/vue components
  • Database: MariaDB 10.11
  • Build: Webpack 5, Babel, Sass

License

AGPL

S
Description
Nextcloud app for managing scout group (Pfadfinderverein) members — member data, families, fees, camps, and Nextcloud integrations
Readme 3.1 MiB
v0.5.2 Latest
2026-04-22 20:28:09 +02:00
Languages
PHP 80.6%
Vue 14%
JavaScript 4.2%
Python 0.6%
Makefile 0.6%