This repository was archived by the owner on May 29, 2026. It is now read-only.
Development to beta#1303
Merged
Merged
Conversation
…ints
Adds all new API routes to routes.php:
- Email relations: GET/POST/DELETE /emails, GET /emails/search
- Calendar events: GET/POST /events, POST /events/link, DELETE /events/{eventId}
- Contacts: GET/POST/PUT/DELETE /contacts, GET /contacts/{uid}/objects
- Deck cards: GET/POST/DELETE /deck, GET /deck/boards/{boardId}/objects
- Unified: GET /relations
Closes #1090
All 9 tasks implemented with 48 unit tests across 5 test files.
Displays OpenRegister objects referencing the selected file in a semantic <ul> list with register/schema context and links to object detail pages. Shows NcLoadingIcon during API calls, NcEmptyContent for empty/error states. Uses @nextcloud/axios and @nextcloud/router for API calls and URL generation. Closes #1101
…s, approval chains, test hooks Implements the workflow-operations change (#1005): Backend: - WorkflowExecution entity/mapper for persisting hook execution history - ScheduledWorkflow entity/mapper and ScheduledWorkflowJob TimedJob - ApprovalChain/ApprovalStep entities, mappers, and ApprovalService - WorkflowExecutionController with filtered list, detail, and admin delete - ScheduledWorkflowController with full CRUD - ApprovalController with chain CRUD, step approve/reject, and progress queries - testHook dry-run endpoint on WorkflowEngineController - ExecutionHistoryCleanupJob for configurable retention pruning - HookExecutor modified to persist execution history alongside logging - Three database migrations for new tables - Routes registered in routes.php, TimedJobs in Application.php boot()
Vue components: - SchemaWorkflowTab — main tab for schema workflow settings - HookList/HookForm — hook CRUD in schema settings - TestHookDialog — dry-run test modal with JSON editor - WorkflowExecutionPanel/Detail — execution history table and detail view - ScheduledWorkflowPanel — scheduled workflow management - ApprovalChainPanel/ApprovalStepList — approval chain config and step progress Unit tests (10 test files): - Entity tests for WorkflowExecution, ScheduledWorkflow, ApprovalChain, ApprovalStep - ApprovalServiceTest with role verification and status checks - Controller tests for WorkflowExecution, ScheduledWorkflow, Approval - BackgroundJob tests for ScheduledWorkflowJob and ExecutionHistoryCleanupJob
Create MyAccount.vue page at /mijn-account with sections for: - Password change (with backend capability detection) - Avatar upload/delete (with file type validation) - Notification preferences (toggles and digest frequency) - Activity timeline (paginated, filterable by type) - API token management (create, list, revoke with clipboard) - Personal data export (GDPR, with rate limit feedback) - Account deactivation (double confirmation with username) All components use Nextcloud Vue, NL Design System tokens, and i18n.
Mark all OpenRegister-scoped tasks as completed. Phases 4-7 marked as out of scope (separate repos). Added spec.md and plan.json with GitHub issue cross-references.
…atus Archives completed change to openspec/changes/archive/2026-03-25-archival-destruction-workflow/. Updates main spec implementation status to reflect Phase 1 completion.
Displays extraction status, chunk count, entity breakdown (expandable), risk level with accessible color-coded badges (text always visible), anonymization status, and an Extract Now button for unextracted files. Uses CSS variables for all colors (no hardcoded values, WCAG AA compliant). Closes #1103
- Register ObjectReferenceProvider in Application::register() alongside the existing search provider registration - Add IReferenceManager and IURLGenerator to ObjectService constructor - Invalidate reference cache in saveObject() after successful persistence to ensure Smart Picker previews refresh when objects are updated Closes #1123
Implements ADiscoverableReferenceProvider and ISearchableReferenceProvider to enable OpenRegister objects in the Nextcloud Smart Picker. Features: - URL pattern matching for hash-routed UI, API, and direct object URLs - Rich object resolution with title, description, schema/register context - Deep link registry integration for consuming-app URL resolution - Per-user caching with register/schema/uuid cache prefix - Graceful error handling preventing metadata leakage on RBAC failures - Up to 4 preview properties extracted from object data Closes #1122
Add 28 new test methods across UserControllerTest and UserServiceProfileActionsTest covering: - Password change (success, incorrect, rate limited, unsupported) - Avatar upload/delete (success, unsupported type/size, backend) - Notification preferences (defaults, stored, invalid digest) - Activity history (success, pagination) - API token CRUD (create, list masked, revoke, max limit, not found) - Account deactivation (request, duplicate, status, cancel) - Data export (rate limiting) - Authentication checks on all endpoints
Adds translations for all user-visible strings in the Register Objects and Extraction sidebar tab components, including tab names, empty states, error messages, button labels, status labels, and risk level labels.
- Create ObjectReferenceWidget.vue with card-style preview rendering (icon, title, schema/register subtitle, properties, updated timestamp) - Create init.ts with lazy-loaded widget registration via @nextcloud/vue-richtext - Add 'reference' entry point to webpack.config.js - Add @nextcloud/vue-richtext dependency - Use CSS custom properties for NL Design System compatibility - Responsive layout with WCAG AA contrast compliance Closes #1124
All backend (16), frontend (9), and unit test (2) tasks completed. Integration tests deferred as they require a running Nextcloud instance.
- Add _tmlo JSON metadata column to MagicMapper getMetadataColumns - Add tmlo to metadata field mapping for magic table insert/hydration - Add buildTmloFilterConditionsSql for tmlo.* query parameters - Support exact match on tmlo.archiefstatus, tmlo.archiefnominatie, etc. - Support date range on tmlo.archiefactiedatum[from]/[to] - Closes #1147, closes #1148
Mark spec status as implemented. All backend endpoints, frontend components, and unit tests are complete. Integration tests deferred to running Nextcloud environment.
- Add English strings: Register Objects, Unknown Object, View object - Add/fix Dutch translations: Register Objecten, Onbekend object, Onbekend register, Onbekend schema, Object bekijken - Fix existing untranslated Dutch strings for Unknown Register/Schema Closes #1125
- TmloServiceTest: 18 tests covering populateDefaults, validateStatusTransition, validateFieldValues, calculateArchiefactiedatum, getSchemaDefaults, isTmloEnabled - TmloExportTest: 7 tests covering generateMdtoXml, generateBatchMdtoXml, missing metadata error, XML escaping, batch skip logic - ObjectEntityTmloTest: 7 tests covering tmlo getter defaults, set/get round-trip, getObjectArray, jsonSerialize, hydrate, null reset, full field set - Closes #1149, closes #1150, closes #1151
20 test methods covering: - getId, getTitle, getOrder, getSupportedSearchProviderIds, getIconUrl - matchReference for hash-routed, API, direct URLs (with/without index.php) - matchReference for non-matching URLs (different server, non-OR paths) - resolveReference success with rich object data - resolveReference returns null for object-not-found - resolveReference returns null on authorization exception - resolveReference returns null for non-matching URL - getCachePrefix format (registerId/schemaId/uuid) - getCachePrefix fallback for non-matching URL - getCacheKey returns userId and empty string for anonymous - parseReference extracts correct register/schema/uuid from API URL Closes #1126
…metadata' into spec
…er-accessor-removals-3 fix(nc34): replace removed \OC::$server named accessors with constructor DI + enforcement
…ix-empty-string-date-conversion
…-compatibility-multischemas fix(MagicMapper): CAST(col AS CHAR) for MariaDB in UNION queries
Fixed datepicker not sending the selected date and showing the date when editing
…ix-empty-string-date-conversion
…ing-date-conversion Fix empty-string date fields silently becoming "now" + document property-level RBAC
…ccess Co-authored-by: Robert Zondervan <robert@conduction.nl>
…k state; drop _limit ceiling
Listing `/api/objects/{r}/{s}/{id}/files` was capped at _limit=100 and
returned HTTP 500 whenever a single file was NC-locked. Root cause: the
ownership probe in `FileValidationHandler::checkOwnership()` called
`$file->getContent()` for every file in the loop — an O(file-size) read
that also acquired a shared lock and threw `LockedException` on any
locked file.
Changes:
- `FileValidationHandler::checkOwnership()` uses `Node::isReadable()`
(permission-bitmask check against oc_filecache, no byte read, no lock)
- `FileFormattingHandler::formatFiles()` wraps per-file formatting in a
`try/catch LockedException`; locked files no longer crash the listing
- `FileFormattingHandler::formatFile()` appends `locked` / `lock`
metadata only for authenticated callers (via ILockManager +
IUserSession); anonymous callers get the pre-change envelope
- `_limit` upper ceiling removed: `max(1, (int)$limit)` (default 30,
floor 1, no cap)
- Unit tests cover isReadable probe, lock envelope (authenticated /
anonymous / provider-unavailable), LockedException resilience, and
_limit boundaries
- Docs: `docs/Features/files.md` documents new fields, auth gate, and
the removed ceiling
Refs #1295
…operand fix: resolve $now in raw SQL RBAC conditions, unblocking date-based access
…ix-object-files-listing-lock-and-limit
…les-listing-lock-and-limit fix(files): drop _limit cap; survive NC-locked files; expose lock state (auth-gated)
…protection Test branch-protection-test
…flow Fixed branch-protection-workflow
SudoThijn
approved these changes
Apr 22, 2026
bbrands02
approved these changes
Apr 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.