shahondin1624 96172a880e feat: global unified search bar with category filtering (v0.4.0)
- New UnifiedSearchController and UnifiedSearchService backend API
  - Single endpoint GET /api/v1/search?q=...&category=...&limit=...
  - Searches across 6 categories: Mitglieder, Familien, Lager, Inventar, Unfälle, Beiträge
  - Highlighted match text with <mark> tags in results
  - Per-category result routing to appropriate detail views

- New SearchBar.vue component
  - Category filter chips (Alle, Mitglieder, Familien, Lager, Inventar, Unfälle, Beiträge)
  - Debounced search with 300ms delay
  - Keyboard navigation (arrow keys, enter, escape)
  - Stale request handling with request ID counter
  - Breadcrumb back navigation
  - Grouped results display with highlighted matches
  - Empty states and loading indicators

- Cleaned up inline search inputs from:
  - FamilyList.vue (removed member search text field)
  - Inventory.vue (removed general/stock search text fields)
  - PermissionSettings.vue (removed user filter text field)
  - FamilyDetail.vue (converted to client-side filtering)

- Removed client-side search actions from stores:
  - members.js (removed searchMembers)
  - families.js (removed searchFamilies)
  - general.js (removed searchText + filteredItems)
  - stock.js (removed searchText + filteredItems)

- Added search() methods to existing mappers:
  - LagerMapper::search() - searches camps by name, description, attending members
  - InjuryMapper::search() - searches injuries by description, activity, member name
  - GeneralMaterialMapper::search() - searches general material by name
  - StockItemMapper::search() - searches stock items by name
  - FeeRecordMapper::search() - searches fee records by member name

- Fixed pre-existing entity property type issue
  - Changed protected  to public  in GeneralMaterial, InventoryCategory,
    SaleRecord, StockItem, StockVariant entities

- Bumped version 0.3.2 → 0.4.0 in info.xml, webpack.config.js, main.js

(Closes #200)
2026-04-22 12:52:14 +02:00
2026-04-07 21:46:41 +02:00
2026-04-22 10:14:01 +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%