ArbeitszeitCheck - Releases

← App details

Nextcloud 33

ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Added

  • Development tooling: occ arbeitszeitcheck:generate-test-data CLI for deterministic demo data (time entries, absences, optional violations, demo app team) to exercise UI, reports, and workflows locally.

Fixed

  • Reports UI: Report type cards are no longer incorrectly disabled when a team-related scope is selected (team scopes still use the team report API where applicable).
  • Reports (tests): Team report CSV download test now reads download bodies via DataDownloadResponse::render() (Nextcloud API).
  • Team reports: Deduplicate user IDs before permission checks and aggregation to avoid double-counting when users appear in multiple teams.
  • Absence type badges: Stronger, theme-safe contrast for vacation / sick / home office / other badges (readable on pale Nextcloud palettes).

Changed

  • Compatibility (dev): Local development stacks aligned with Nextcloud 33.x (example: official nextcloud Docker image).
  • Reports layout: Reverted an overly aggressive “full width” parameter form rule that could interfere with scrolling/layout on the reports page.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Changelog

Fixed

  • Admin settings API URL handling: Prevented duplicate index.php/index.php path generation when a route URL is already pre-generated by Nextcloud.
  • Frontend error handling: Avoided unhandled Promise rejections in callback-based Utils.ajax() consumers after expected API failures.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Fixed

  • Routing/compatibility: Added indexApi() compatibility aliases for legacy endpoints to prevent 500 errors in the Nextcloud log.
  • PHP fatal errors: Fixed constructor signature issues in AbsenceService and ComplianceService that could crash the app when loading services or saving settings.
  • Reports security hardening: Hardened report preview endpoints with start <= end validation and a maximum date-range limit to reduce DoS risk from untrusted parameters.
  • Admin “whole organization” scope: Correctly handle admin organization scope (userId="" = all enabled users) and enforce access checks so preview/download data stays consistent.
  • Reports rendering: Improved Preview rendering for absence and compliance reports to match the actual report data structure.

Changed

  • Reports UI semantics: Team scope is limited to the team overview/export semantics that the backend actually returns (prevents misleading previews/downloads).
  • Organization download guidance: Added explicit UI messaging for organization scope download limitations until organization-wide export endpoints are implemented.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Fixed

  • ArbZG compliance: Corrected break check logic (9h/45min branch now reachable; check ≥9h before ≥6h)
  • Manager logic: employeeHasManager() now uses getManagerIdsForEmployee() instead of getColleagueIds()
  • Reporting: getTeamHoursSummary() respects period parameter (week/month)
  • Admin users: hasTimeEntriesToday is now per-user, not system-wide
  • UserSettingsMapper: Fixed falsy zero/empty-string handling in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: Moved exportUsers route above getUser to fix route shadowing
  • Version1009 migration: Replaced MySQL backtick SQL with portable QueryBuilder; use OCP\DB\Types
  • Duplicate notifier: Removed double registration from Application.php boot()
  • API security: Generic error messages instead of raw exception output (SubstituteController, GdprController)
  • PDF export: Returns HTTP 422 with clear message instead of silent CSV fallback
  • LIKE injection: WorkingTimeModelMapper::searchByName() uses escapeLikeParameter()
  • XSS: Modal titles escaped in components.js; compliance-violations.js innerHTML escaped
  • Admin-settings form: Added CSRF requesttoken
  • AbsenceService DI: Fixed constructor argument order (IDBConnection)
  • Admin holidays and settings: English source strings for l10n keys
  • UserDeletedListener: inject TeamMemberMapper and TeamManagerMapper
  • XSS: sanitise team names in admin-teams.js

Changed

  • CSS: Shadow-light variable, scoped resets, dark-mode color-mix fixes, semantic color variables, navigation height/z-index
  • Clock buttons: Double-submit guard (disabled during API calls)
  • initTimeline(): Max retry count (20) to prevent infinite loop
  • Accessibility: aria-label on header buttons, label for admin user search, aria-modal on welcome dialog, English l10n keys in navigation
  • Docs: Removed internal docs; added docs/README; corrected repo URLs
  • Manager dashboard: Injected l10n from PHP so JS translations work
  • Constants.php for magic numbers; user-facing error messages

Added

  • Version1010 migration: Compound indices on at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Changed

  • Long-term refactor: Replaced all \OC::$server usage with proper OCP APIs and constructor injection
  • CSPService: Injected ContentSecurityPolicyNonceManager via constructor
  • Controllers: Removed manual cspNonce (configureCSP handles it); injected IURLGenerator, IConfig where needed
  • PageController: Injected IURLGenerator, IConfig; passes urlGenerator to templates
  • HealthController: Injected IDBConnection for database check
  • ProjectCheckIntegrationService: Injected LoggerInterface instead of OC::$server->getLogger()
  • Templates: Replaced \OC::$server with \OCP\Server::get() (OCP public API)
  • Added GitHub Actions release workflow (.github/workflows/release.yml)
  • Updated PageControllerTest with full constructor mocks
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32

Nextcloud 32

ArbeitszeitCheck 1.1.6
Release Details
UpdatedMarch 27, 2026, 6:08 p.m.
Changelog

Added

  • Development tooling: occ arbeitszeitcheck:generate-test-data CLI for deterministic demo data (time entries, absences, optional violations, demo app team) to exercise UI, reports, and workflows locally.

Fixed

  • Reports UI: Report type cards are no longer incorrectly disabled when a team-related scope is selected (team scopes still use the team report API where applicable).
  • Reports (tests): Team report CSV download test now reads download bodies via DataDownloadResponse::render() (Nextcloud API).
  • Team reports: Deduplicate user IDs before permission checks and aggregation to avoid double-counting when users appear in multiple teams.
  • Absence type badges: Stronger, theme-safe contrast for vacation / sick / home office / other badges (readable on pale Nextcloud palettes).

Changed

  • Compatibility (dev): Local development stacks aligned with Nextcloud 33.x (example: official nextcloud Docker image).
  • Reports layout: Reverted an overly aggressive “full width” parameter form rule that could interfere with scrolling/layout on the reports page.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturehE0UvSaJEnunYMHOd5u3aR+5MyAg2Pl78l3t75Fx494nh6CzImBfoaswZXb9agJ6Iz1orktgFsKlTqfZoSGNxuZHRiRjcbtC+LsLLQsjONX5i5UOXK6crz87+6TEDAPkgdr318s+w9qHvTic2kdcdx+rpqbBSMIAgU/GuVZjyp4wtCV2Ti9VFR1pFzAlmH95b6WVCQCdTYmWs7LsLY//midoEYCd8JXSicLvr2nobqTL/soYZdR/39931AgpiUO5B9Rd0Wo7NVhk8C59bmlNqkLa8UDZHTZ/Eseks/njP9CdRsgdaUiqIm3libscOPzoFg2abyJpIZUV/nV8acOq8dh/XNNVRuLxxHs5v5FcByrnuxE4G1IbyC/FtB1KFRQlGF+rwwSEzBKdkNCdH5zbJ//gEgRfjZJb/Ijtma9+14jeRub/oLHQx0Mkh27aVMBPbqDI8LeuOLWo4Gbd4RXFknth02gSZpk1/Ko4uE90R44RcO2YUS58qvKQkickIoDEQId9w55FIEyP7LIAZa2bXl9qYZAA+CHCwixsBKi3a+yADg/wWaN4roVQ4LobTjp1adPOOVWbTHSemHRgEsqpboMxRXcrRWan8pNiQrnvTbJwIu9i3Q6zgHtHXe6RviFMzwiMJQTdvLhhHuANr9Lt04cCZjPS2dWfjGCZKVfo7hM=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.5
Release Details
UpdatedMarch 26, 2026, 6:57 p.m.
Changelog

Fixed

  • Admin settings API URL handling: Prevented duplicate index.php/index.php path generation when a route URL is already pre-generated by Nextcloud.
  • Frontend error handling: Avoided unhandled Promise rejections in callback-based Utils.ajax() consumers after expected API failures.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturedkvj+LT0qxzHO59iXnzyYCXDEgfS9OMri9yD8QWcQqS/VPzNKFBHIHDqX/2JmnEuQFM6sKf+jyx0QORDIAC4h2XiZoUlJe+MHgZQGGqa/mA/SGFQtwzlxWw2A4Drm1ioGkOIwhGo5Ny0zIogawfyhPtDQX7Mjj2K9x5+OSHQKtQs8LGRiyy7EsVJUC4fWworktCvuqRYpvR+rY2GfSu0CcWWZVItcEYqAfDFl3UvmWag299QrF1g7SOVY1EcoDH2B+O2mOwXwj6JjWNhz4iUkdcbkthaHPwZ12cUTOYLOtopIILuRTdlXiYWqYvLn24yZUObqmS0LbNcyzAF8gF8LDOmp08FxRCo6NY4L9HJcvgaR4qDkOpiC1aj/9FK8LmRnmdOvH9FHIqr2P6eBP4uoetMWoMbW3QAqvizVMDYPe96Qj1m/Cwp2ogV5+D0JOt1Ms02LGHZ3pcBp0vojoUu52pdP+dXL1d0ZN4rzSPEVQboJllQz4dyahtQ55l2EuDdk6VVf35oOPFLt5HqIF84tFYbY4moxafMunMI2lSWeRj0jCxApnTcrjuWDRuG8Q/fv3Za2gtkSsx9XNLPAb6YNOrgKFEeZRtSIp7L2V6shwxn9H4PG2uETboUm44RWkoZO+JZFtNTTlZpij4B5mRvo/OamgruxwI6YgplBQXObSw=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.4
Release Details
UpdatedMarch 26, 2026, 6:40 p.m.
Changelog

Fixed

  • Routing/compatibility: Added indexApi() compatibility aliases for legacy endpoints to prevent 500 errors in the Nextcloud log.
  • PHP fatal errors: Fixed constructor signature issues in AbsenceService and ComplianceService that could crash the app when loading services or saving settings.
  • Reports security hardening: Hardened report preview endpoints with start <= end validation and a maximum date-range limit to reduce DoS risk from untrusted parameters.
  • Admin “whole organization” scope: Correctly handle admin organization scope (userId="" = all enabled users) and enforce access checks so preview/download data stays consistent.
  • Reports rendering: Improved Preview rendering for absence and compliance reports to match the actual report data structure.

Changed

  • Reports UI semantics: Team scope is limited to the team overview/export semantics that the backend actually returns (prevents misleading previews/downloads).
  • Organization download guidance: Added explicit UI messaging for organization scope download limitations until organization-wide export endpoints are implemented.
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureB+kiXQiNbiYsWVOlB3wiTffKZj021JMzAUzhQRYuwQmpszoGICQ7cCChEeggNXAMuOsRrPkznqB190jArt5Sfp7zKL5I3Z7IjyH6ur4aAqf6Tddq93/6Vb4W4ud9G30AJhkh3X0PBZ98bcOPcrxiaMrOqHryaIkcQ0os1pJnCAZ5v/zmUZGz/rVHxc0VNUGGvJZnx8Odwgd0r9z3McM4r9LL7n9+CrwtDMOVS/fUwAapkdaqM381pkLCa5BHM8VJd+ARz7Tt8rPVuVBwXDR9pkq38eoD9tQ61QVbCqrfsf4/8LgcbNlrHjWVRrAtUirX38JlJgFBKvmzaORvsgylNFggcrZ7sIx4o29kPPkFWZaUee0TKI/uc3WlThNIj/i4+sVTZ2Um23cfon/wr/sHByJIMOsFrw60s6RPm/XjAxeTnJbrm61ms9a0kKTodDR7puH0guqBQJX/CTJUQxcoPmKcfVqqblI2Ll/efOzi/BHYEEuiMGRVfYmuwtlALuFODD8ALFhf8EYmnB2EyCTLJwR+1bSUQF6/a/p4PP9cVSRKDbfYY3rpSU/QXbM3XTn3fET1dqE98FWEqPK6iNKdoMrcsZ4gkKNMNYKpAjMB9kbemHOVPNCIDVTIkYsVQO/edieH4N3EPouwzLWCvQVqWpb8h7SPbTslAhg45WtVByU=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.3
Release Details
UpdatedMarch 19, 2026, 2:41 p.m.
Changelog

Fixed

  • ArbZG compliance: Corrected break check logic (9h/45min branch now reachable; check ≥9h before ≥6h)
  • Manager logic: employeeHasManager() now uses getManagerIdsForEmployee() instead of getColleagueIds()
  • Reporting: getTeamHoursSummary() respects period parameter (week/month)
  • Admin users: hasTimeEntriesToday is now per-user, not system-wide
  • UserSettingsMapper: Fixed falsy zero/empty-string handling in getIntegerSetting, getFloatSetting, getStringSetting
  • Routing: Moved exportUsers route above getUser to fix route shadowing
  • Version1009 migration: Replaced MySQL backtick SQL with portable QueryBuilder; use OCP\DB\Types
  • Duplicate notifier: Removed double registration from Application.php boot()
  • API security: Generic error messages instead of raw exception output (SubstituteController, GdprController)
  • PDF export: Returns HTTP 422 with clear message instead of silent CSV fallback
  • LIKE injection: WorkingTimeModelMapper::searchByName() uses escapeLikeParameter()
  • XSS: Modal titles escaped in components.js; compliance-violations.js innerHTML escaped
  • Admin-settings form: Added CSRF requesttoken
  • AbsenceService DI: Fixed constructor argument order (IDBConnection)
  • Admin holidays and settings: English source strings for l10n keys
  • UserDeletedListener: inject TeamMemberMapper and TeamManagerMapper
  • XSS: sanitise team names in admin-teams.js

Changed

  • CSS: Shadow-light variable, scoped resets, dark-mode color-mix fixes, semantic color variables, navigation height/z-index
  • Clock buttons: Double-submit guard (disabled during API calls)
  • initTimeline(): Max retry count (20) to prevent infinite loop
  • Accessibility: aria-label on header buttons, label for admin user search, aria-modal on welcome dialog, English l10n keys in navigation
  • Docs: Removed internal docs; added docs/README; corrected repo URLs
  • Manager dashboard: Injected l10n from PHP so JS translations work
  • Constants.php for magic numbers; user-facing error messages

Added

  • Version1010 migration: Compound indices on at_entries, at_violations, at_holidays, at_absences
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignaturePf3DfgKP/j8T95ElL4ORpuPFeD3UHt901udriCVI1yQdyRJDTp5Z8tHcaFpLRjjmjW8c1nFIEjrFVTjl5UNnPTTWzwf1+Woci/TtIHa7lDkMftxjIIVMf7khRJ6NGriUQD1WVS6Hqdi+FWafgnIqn7dO728K+lB3rFSlgoCoQgQpjjJ/D+N5yynIi44wiD7F8PngozN58wUdWoW02zBX3W+ndpEZXmrY2srqPndhBrlg4cOrE8cWSUFe9wtwSaopkDZPSl85Wsg7nwDOJGV1JaFzDdBxyHATs3kxJnsntXePI1j/O8bcWR69o45JkDY458TsiA0qweFMx5A3Ioh5K0Rrp4UQREthUP83sEzQCIo9ztzB3oeFr1sAs+/dfauAPLsHWNG3NO70fZ82RnsRKuhklTbL8RQ6gc2a3rqrOLSPypyLsv6+UxyoKwm41cggNl4UnhyUhoa33IjBiEoZDXTfB2d+fNZoTXkOYZdDTKcC9bNMc+mo8guNkTxqAYw8Ian0V7vmLs0uBJ9JYyyy5k8AUd+8ijMokWm/2VKPCbDga4mmZevp3KqSpVOqXYBJXmMzJH2Vf+LXZYjRHTScFQ92bXVz7VRRNoz+LEtZy4QYIT9u+YCIvu7ddT5RZmA08HIWU52W/jWQQiKraZE/Nw8Ks4VQBfB6TX+wDCGadBs=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.2
Release Details
UpdatedMarch 11, 2026, 11:36 a.m.
Changelog

Changed

  • Long-term refactor: Replaced all \OC::$server usage with proper OCP APIs and constructor injection
  • CSPService: Injected ContentSecurityPolicyNonceManager via constructor
  • Controllers: Removed manual cspNonce (configureCSP handles it); injected IURLGenerator, IConfig where needed
  • PageController: Injected IURLGenerator, IConfig; passes urlGenerator to templates
  • HealthController: Injected IDBConnection for database check
  • ProjectCheckIntegrationService: Injected LoggerInterface instead of OC::$server->getLogger()
  • Templates: Replaced \OC::$server with \OCP\Server::get() (OCP public API)
  • Added GitHub Actions release workflow (.github/workflows/release.yml)
  • Updated PageControllerTest with full constructor mocks
Licenses GNU Affero General Public License v3.0 or later
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
SignatureVdOLtKkuJFOvqioRam3iZGmEiSQrA4Xc99thIdm97dMKFlfHskcRIG34rWiqftbbIh+6CgWWxu+YdQOLSV63qOtZ7rH/rl1x5hnhaR4GBDbTtnE/frmfTJYlpHlKVw9KSyniEEAE30lLl5tuYA/4myl+9N6abL+9oJpQo8nAY2oApVgdJQFHPvUPeaJ6q0Qb6GUkOTwZo/UgmT0cIqTL7Ymkvkp3OGE1nRr2hD+T5aFyXu0E3IfS5m+eete4Xdn5TcSYzWVB3oBdMxmRTUtracW4ar/ZstAIwsVxmrLcW4/2AgvUQrrAZ87EBNNoiekUF+nJogWpFeh1n6lN7ZbuUSQJaQtlquovukPbnOgO1AAFe3EMG2DmBtlbyn/jt8/DY5ql8VTDp62eKDJxYTodidjAQYkqMEve7XuTtPgrNwG9c4hFNYS5fIGz07ER4otxErRKC25d89ql/bkSDre0IZPw/gTgdEjx71iD/UZBf9b2tzhMKpNfdtlkT0BV1mNOa376kZzYOk9DcpAaOgobPK00gb3ZeeODGn29N8LEvEAI5SCoa1m7eT4B0KbMQNtgDEUNZrrvRf3Tzpb0mL2QUmf5i3sn10IjQ6KdTDor1xWFEYIF03M240Dw5ml/UUrDgvXI9WZ1BzgyNDe2HAVeNPb9akpPHUWYkoe+uOoaf7A=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32
PHP>=8.1.0,<8.5.0
ArbeitszeitCheck 1.1.1
Release Details
UpdatedMarch 10, 2026, 10:18 p.m.
Changelog

Fixed

  • Resolved duplicate route names in absence API (absence#store, absence#show, absence#update, absence#delete)
  • Corrected settings class names in info.xml to use full OCA namespace
  • Added declare(strict_types=1) to routes.php

Changed

  • Removed non-existent screenshot references from info.xml until real screenshots are captured
Licenses AGPLv3+
Certificate-----BEGIN CERTIFICATE-----
MIIECzCCAvMCAhMPMA0GCSqGSIb3DQEBCwUAMHsxCzAJBgNVBAYTAkRFMRswGQYD
VQQIDBJCYWRlbi1XdWVydHRlbWJlcmcxFzAVBgNVBAoMDk5leHRjbG91ZCBHbWJI
MTYwNAYDVQQDDC1OZXh0Y2xvdWQgQ29kZSBTaWduaW5nIEludGVybWVkaWF0ZSBB
dXRob3JpdHkwHhcNMjYwMzEwMTIwNDQ1WhcNMzYwNjE1MTIwNDQ1WjAbMRkwFwYD
VQQDDBBhcmJlaXRzemVpdGNoZWNrMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
CgKCAgEA36f1UVsSAVpJMWTBc3IuCLVx3o3I+F7k9uVZWcg7swgv9RXZcoEqU1/F
s0SsmAa/27dliUZ68Mse/lObGhzUOBwHHG9dhPOJfIDV/8uKs3KiorcwezBjDHIM
s5PZM7ctDBd8VNid2tbIJ+YFJiyYoI4i7adOCoHCVGi5Imhi7IyyujcVH/gbxE+G
dyq3eebXh5gtrLwJTd9emekdJ4ZzwqccCDllPu+bQrpX9rhX0uZpcK4y4VElHPdd
lFv2VTotgovqTvRFTpyxgfeJI5qvQ6okq6RNRUmPJ7tk6Zy9bzOYP1DEkb2jsIGX
IT5Sc60sz33pso2VFnX37A5j3gULwfgMrA9jMlRgfvFq/gxgGKwv4xTqMcKdROUr
emgDDSAOq9DmChtFskw/0KgndaxgfpxKiC5+H8242gja0j8+pWaYzeOp0qTWWjoE
LJEV++w+krRQDv/LlUoRn8E+mg+svGSlvVDD/DDhqQAGEHrmd5Zm4DqmnJjyaPnc
LA9FJdhor5aD8da8iXMXFxiT8dZsC7CvMS42O3XrEzsbcANp3C4/jdJx7jdZC+lf
c/19I677hewMPomWQGwzFZyrGdQsQykaQYVqJdKOIVpT7HlVrlIZ/FzBPIAR6u+I
g1gY8z+20I8Nl7g9Px/3/RMygomMwzPW6Vl8mUVI1YbsrzoQBP0CAwEAATANBgkq
hkiG9w0BAQsFAAOCAQEAEPOiRKIE7zPVDVMHs8zw/t/fChrAbSSO69EvdiWft+a1
bwtUM2vwORm3rHUwLLtRHGTCAX5DxzQOzscd0RPpI42D7d0CygC0aq912caAcI48
RuCY5/dbXSnfrAPHo4AWwo5dCbLsM6/FE3OjX8wA6J14P3q6me1IdEmWN1wVFeB7
WUhP3rJizFsOOL9L7PYFCYCCj5n/ZF3PXTeMzaz93lFq/M7xo6+KoFfloChYvctz
t8zYxalL4ExEegIGDkw1bk5MCVoL5E3dMaK8CpzcuDgGRe7z17C5GKRB9021g6Kn
VpcU+y0BR1hn8QEQrFxEkxoONJDCuK0nmvZJpb2TMQ==
-----END CERTIFICATE-----
Signaturec6nuFK9N2O61bf1GpNWz2G2FDt1GzTRzd2pXna6x5E/HI/m1e1dt8TheGnhfgYm/TY/o/W539hak3svOJbJmoJr/kmd7xVWRGnZH/PDBjROe5kwRIwWdZlR3z7DiOyTsZo44DBLvVFEaRMAjF4PpVpJxTIA0xV59d3YJHyFZXbMPxSvAbZu43bAjWU6kVGmfaKUOrW5d592aApbxQ+mwJS7LwFMXlxGSzyCTwYL3bMkwormPPS64RTJtrPhvImU09ACMsjwgERAuFGlvbGj8CiuXzAWoO7ISyxcsqiaw1jnA5OIlJ+hnQhUdYHtkIzdwNHxw4ItSBL3pSJjhwIyrs4zZRMkOVjTqDluDfmvbx3Ir9cglVHlMGGTOOJtuyU0PmL0Fo9HZ2R0Noz9w8T3cpetxRG+B+mSWapUblbM+BT6aIvfHMjSzvI0qjwzcczwVzkYJISHReObwYFpeVs5W7cW1gXY2mx42Q/fPqDkrM5wEiuYJ98QG7Y67uhYZce9wmAp0Pygx0UJILj4fNPLuA27hVOp3++x0rOxhEl1A4v0tgiX5pVRYK3qwf1vHFl3zSGgldQs2WUmJ6CoPWbIE6hzmtRUGMzSOnKEK+2eLHej/Edzdo75nVZd6maKXVAY1L+z74IK61HvJ6kQ0QXFO7urWBZJg+IfxzR6W4mrvZnY=
Signature digestsha512
Dependencies
Required Nextcloud versions >=32.0.0,<37.0.0
Minimum Integer bits32