Compare commits

...

350 Commits

Author SHA1 Message Date
Josh 993a872673 chore: modernize phpunit-autotest.xml
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-01-22 12:26:29 -05:00
Kate 677d42555e Merge pull request #57511 from nextcloud/fix/userplugin/rewrite 2026-01-21 15:10:11 +01:00
provokateurin bf49f62da3 feat(UserPlugin): Also full match on additional email addresses
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 14:36:37 +01:00
provokateurin 7539fdbb72 test(UserPlugin): Cover full match email with sharee enumeration limited to group
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 14:36:32 +01:00
provokateurin cfa25ece7e fix(UserPlugin): Rewrite from scratch
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 14:29:58 +01:00
provokateurin ad65bcb653 test(UserPlugin): Rewrite unit tests as integration tests
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 14:29:58 +01:00
provokateurin ae53c2016b test(ShareesContext): Reset all shareapi related system configs
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-21 14:19:36 +01:00
Nextcloud bot e2eb3bd5f7 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-21 00:18:14 +00:00
F. E Noel Nfebe 0e515dbe96 Merge pull request #57631 from nextcloud/fix/remove-share-permission-from-allow-editing
feat(sharing): remove share permission from "Allow editing" default
2026-01-20 22:20:33 +01:00
Ferdinand Thiessen bc98f61410 Merge pull request #57643 from nextcloud/chore/files
chore(files): add missing component import
2026-01-20 21:02:59 +01:00
nextcloud-command f3ddd0d967 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-20 19:16:46 +00:00
nfebe 80ab68369f test(sharing): expand advanced settings before accessing its elements
Tests that access elements inside the Advanced Settings section
(hide download, share label, grid view, etc.) must first click
"Advanced settings" to expand it. Previously these tests relied on
buggy auto-expand behavior that occurred when permissions didn't
match bundled values.

Signed-off-by: nfebe <fenn25.fn@gmail.com>
2026-01-20 19:39:55 +01:00
nfebe 2cdbd7fa15 fix(sharing): strip share permission before comparing to bundled perms
Handle backward compatibility when config.defaultPermissions includes
the SHARE permission (value 31) which was previously part of
BUNDLED_PERMISSIONS.ALL. Now that ALL no longer includes SHARE, the
comparison must strip SHARE before checking against bundled permissions.

This fixes an issue where the Advanced Settings section would be
auto-expanded for new shares, causing a toggle to close it instead
of opening it.

Signed-off-by: nfebe <fenn25.fn@gmail.com>
2026-01-20 19:30:47 +01:00
nfebe 8526999ad5 feat(sharing): remove share permission from "Allow editing" default
Remove PERMISSION_SHARE from bundled permissions for ALL and ALL_FILE.
Update quick share selector to consistently strip share permission
when comparing, ensuring backwards compatibility with existing shares.

Signed-off-by: nfebe <fenn25.fn@gmail.com>
2026-01-20 19:30:47 +01:00
Ferdinand Thiessen 71e5a8e717 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 18:33:36 +01:00
Ferdinand Thiessen 8270ccb017 chore(files): add missing component import
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 18:32:27 +01:00
Ferdinand Thiessen 81400d9021 Merge pull request #57598 from nextcloud/ci/timeout-setup
ci: add timeout for PHP setup
2026-01-20 18:22:05 +01:00
Louis 4fd59a272c Merge pull request #57327 from castillo92/patch-3
fix(settings): Improve sharing form labels
2026-01-20 17:41:11 +01:00
nextcloud-command 553c99ff74 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-20 16:51:27 +01:00
Castillo 263a96faec fix(settings): Improve sharing form labels
Signed-off-by: Castillo <37965565+castillo92@users.noreply.github.com>
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-20 16:37:10 +01:00
Benjamin Gaussorgues 9663465765 Merge pull request #57651 from nextcloud/release/33.0.0_beta_5 2026-01-20 16:27:20 +01:00
Benjamin Gaussorgues 41ec34c05e Merge pull request #57168 from abhinavohri/56572 2026-01-20 16:15:19 +01:00
Côme Chilliet a467589328 Merge pull request #57573 from nextcloud/fix/fix-beforezipcreatedlistener
fix(files_sharing): Fix BeforeZipCreatedListener path handling
2026-01-20 16:08:05 +01:00
Carl Schwan 4c79c2faff Merge pull request #57591 from nextcloud/carl/query-exception
refactor(QueryException): Remove most usage of QueryException
2026-01-20 15:59:56 +01:00
Joas Schilling b12987f210 Merge pull request #57658 from nextcloud/feat/noid/enable-totp-by-default
fix(apps): Enable TwoFactor TOTP by default
2026-01-20 15:25:08 +01:00
Louis Chmn e721556b9f chore: Compile assets
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-20 15:14:50 +01:00
Abhinav Ohri 0b405f108a refactor(files): remove success toast on file rename
Signed-off-by: Abhinav Ohri <abhinavohri13@gmail.com>
2026-01-20 15:04:21 +01:00
Côme Chilliet 0720e2644f chore: fix or suppress psalm errors for BeforeZipCreatedEvent
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-20 14:32:58 +01:00
Joas Schilling b05b58d3cf fix(apps): Enable TwoFactor TOTP by default
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-20 14:15:01 +01:00
Côme Chilliet 433e3da4d3 Merge pull request #56794 from nextcloud/feat/hide-developer-docs-conditionally
docs(settings): Removing the developerDocsUrl
2026-01-20 14:07:31 +01:00
Côme Chilliet 4e64c0774b Merge pull request #57653 from nextcloud/fix/fix-icon-ratio
fix(theming): Fix favicon and touchicon ratios
2026-01-20 14:03:57 +01:00
Joas Schilling 00c49cc8c4 Merge pull request #57561 from nextcloud/ci/noid/thin-matrix
ci(phpunit): thin out testing matrix
2026-01-20 13:26:43 +01:00
Côme Chilliet 67d93c6b04 fix(theming): Fix favicon and touchicon ratios
On some systems (depending on imagick version I think) the ratio would
 be messed up on the touchicon, favicon and link preview images.
This fixes it without breaking other systems.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-20 11:44:45 +01:00
Joas Schilling 313ac05a3b ci(external): Also test with some files related apps
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-20 11:44:14 +01:00
nextcloud-command c492b0db4a chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-20 09:57:20 +00:00
Worker Builder 6f66cf212b build(hub): 33.0.0 beta 5
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-20 09:38:20 +00:00
Ferdinand Thiessen d996029bec Merge pull request #57644 from nextcloud/chore/refactor-oc-eventsource
refactor(core): migrate `OC.EventSource` from jQuery to native API
2026-01-20 10:03:08 +01:00
Arsalan Ul Haq Sohni 02dc7f1f79 docs: remove developer documentation link
Signed-off-by: Arsalan Ul Haq Sohni <arsalan-ul-haq.sohni@strato.de>
2026-01-20 09:40:03 +01:00
Ferdinand Thiessen f8c88146b6 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 02:39:29 +01:00
Ferdinand Thiessen 6e29885128 refactor(core): migrate OC.EventSource from jQuery to native API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 02:35:34 +01:00
Ferdinand Thiessen 5d20278d06 ci: add timeout for PHP setup
Currently it sometimes deadlocks and then loads forever.
Should be safe to apply 5 minutes limit.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 02:34:52 +01:00
github-actions[bot] 8920dad2de Merge pull request #57637 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/nextcloud/dialogs-7.2.0
build(deps): bump @nextcloud/dialogs from 7.1.0 to 7.2.0 in /build/frontend-legacy
2026-01-20 02:24:59 +01:00
Ferdinand Thiessen bb33094bf2 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-20 01:42:04 +01:00
dependabot[bot] 304fe15a76 build(deps): bump @nextcloud/dialogs in /build/frontend-legacy
Bumps [@nextcloud/dialogs](https://github.com/nextcloud-libraries/nextcloud-dialogs) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-dialogs/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-dialogs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-dialogs/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/dialogs"
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 01:39:30 +01:00
Nextcloud bot c1dfdace98 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-20 00:14:00 +00:00
Joas Schilling cf453e5f57 Merge pull request #57566 from nextcloud/ci/noid/speedup-lint
ci(lint): Lint multiple files at once when possible
2026-01-19 20:22:07 +01:00
Christoph Wurst e5339543cf Merge pull request #57641 from nextcloud/fix/taskprocessing-cli-cast
fix(TaskProcessing): Fix occ commands to cast strings to integer
2026-01-19 19:04:40 +01:00
Ferdinand Thiessen 772471da4f Merge pull request #57642 from nextcloud/chore/xhr
chore: drop duplicated legacy Ajax error handling
2026-01-19 17:09:46 +01:00
Joas Schilling f5abf9296d ci(lint): Use multi file argument in lint
Since PHP 8.3 the linting command "php -l" can consume multiple files at once.
This drastically speeds up the time necessary for the linting from ~3 minutes
to few seconds.
By also running the linting on multiple cores, the time can be dropped to < 1s

Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-19 16:57:34 +01:00
Joas Schilling 6ea3c2ac84 chore: Bump 3rdparty
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-19 16:57:34 +01:00
github-actions[bot] 2b985ac053 Merge pull request #57634 from nextcloud/dependabot/npm_and_yarn/nextcloud/stylelint-config-3.2.0
build(deps-dev): bump @nextcloud/stylelint-config from 3.1.1 to 3.2.0
2026-01-19 15:56:02 +00:00
nextcloud-command 65351bde59 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-19 15:35:52 +00:00
Ferdinand Thiessen a3bd996e7c chore: drop duplicated legacy Ajax error handling
The XHR error handling was duplicated, as we already handle this in
`core/src/init.js` where we intercept Fetch API and XHR API.
So we can drop this jQuery specific duplicate.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-19 16:28:25 +01:00
github-actions[bot] 6b6fdc2bbf Merge pull request #57635 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/p-queue-9.1.0
build(deps): bump p-queue from 9.0.1 to 9.1.0 in /build/frontend-legacy
2026-01-19 15:26:54 +00:00
Ferdinand Thiessen 971cae8eef chore: add license files
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-19 15:01:31 +00:00
Ferdinand Thiessen 0001c3000e chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-19 15:40:09 +01:00
Ferdinand Thiessen 7ff0804e90 chore: adjust styles for new stylelint config
- replace renamed `word-wrap` with new name `overflow-wrap` (CSS3)
- use extensions for `@use`

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-19 15:33:39 +01:00
dependabot[bot] dd18425f78 build(deps-dev): bump @nextcloud/stylelint-config from 3.1.1 to 3.2.0
Bumps [@nextcloud/stylelint-config](https://github.com/nextcloud-libraries/stylelint-config) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/nextcloud-libraries/stylelint-config/releases)
- [Changelog](https://github.com/nextcloud-libraries/stylelint-config/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/stylelint-config/compare/v3.1.1...v3.2.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/stylelint-config"
  dependency-version: 3.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 15:33:39 +01:00
dependabot[bot] e09c70a74a build(deps): bump p-queue from 9.0.1 to 9.1.0 in /build/frontend-legacy
Bumps [p-queue](https://github.com/sindresorhus/p-queue) from 9.0.1 to 9.1.0.
- [Release notes](https://github.com/sindresorhus/p-queue/releases)
- [Commits](https://github.com/sindresorhus/p-queue/compare/v9.0.1...v9.1.0)

---
updated-dependencies:
- dependency-name: p-queue
  dependency-version: 9.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 15:22:25 +01:00
Marcel Klehr 1f12126715 fix(TaskProcessing): Fix occ commands to cast strings to integer
fixes #57111

Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2026-01-19 15:12:37 +01:00
grnd-alt 2c718d81e5 Merge pull request #54234 from nextcloud/fix/49673-less-confusing-unified-search-folder-picker
fix: update unified search folder picker text
2026-01-19 15:09:38 +01:00
grnd-alt 83eee50e95 chore: update nextcloud/dialogs to 7.2.0 in frontend-legacy
Signed-off-by: grnd-alt <git@belakkaf.net>
2026-01-19 13:56:42 +01:00
grnd-alt 0b99043b06 fix: update unified search folder picker text
Signed-off-by: grnd-alt <git@belakkaf.net>
2026-01-19 13:55:18 +01:00
Kate b273338183 Merge pull request #57439 from nextcloud/enh/50636/show-teams-memberships-profile 2026-01-19 13:52:00 +01:00
nextcloud-command 6067f1ca99 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-19 12:12:58 +00:00
Cristian Scheid ed486167d6 refactor: change method name from getMemberships to getTeamsForUser
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-01-19 12:10:15 +00:00
Cristian Scheid efd348fab1 refactor: use probeCircles instead of getCircles
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-01-19 12:10:15 +00:00
Cristian Scheid 3e7d68360a refactor: replace array_map with foreach to guarantee list<> type
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-01-19 12:10:15 +00:00
Cristian Scheid d3dd2f41d5 refactor: use list<> syntax and remove unecessary check
Co-authored-by: Kate <26026535+provokateurin@users.noreply.github.com>
Signed-off-by: Cristian Scheid <74515775+cristianscheid@users.noreply.github.com>
2026-01-19 12:10:15 +00:00
Cristian Scheid a109ed365f refactor: improve code quality and doc block in PersonalInfo
Co-authored-by: Côme Chilliet <91878298+come-nc@users.noreply.github.com>
Signed-off-by: Cristian Scheid <74515775+cristianscheid@users.noreply.github.com>
2026-01-19 12:10:14 +00:00
Cristian Scheid 7e1b5af9e8 chore: fix code style in PersonalInfo
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-01-19 12:10:14 +00:00
Cristian Scheid 5c1b795cb5 feat(profile): show Teams memberships on account details
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
2026-01-19 12:10:14 +00:00
Côme Chilliet 460d63772b fix(files_sharing): Switch back event path to be relative to user folder
This is clearly the original intent, the parameter name in ViewOnly is
 $userFolder, and the similar event for single file download uses
 paths relative to user folder as well.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-19 11:22:17 +01:00
github-actions[bot] 7fa568b453 Merge pull request #57636 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/babel/node-7.28.6
build(deps-dev): bump @babel/node from 7.28.0 to 7.28.6 in /build/frontend-legacy
2026-01-19 09:02:39 +01:00
github-actions[bot] 9d068e5e3f Merge pull request #57639 from nextcloud/dependabot/github_actions/github-actions-86cd8d4df5
build(deps): bump the github-actions group with 3 updates
2026-01-19 09:02:13 +01:00
github-actions[bot] 256ed95b08 Merge pull request #57638 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/libphonenumber-js-1.12.34
build(deps): bump libphonenumber-js from 1.12.31 to 1.12.34 in /build/frontend-legacy
2026-01-19 07:46:01 +00:00
nextcloud-command ee35782e8b chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-19 06:59:53 +00:00
dependabot[bot] e074f980e2 build(deps): bump libphonenumber-js in /build/frontend-legacy
Bumps [libphonenumber-js](https://gitlab.com/catamphetamine/libphonenumber-js) from 1.12.31 to 1.12.34.
- [Changelog](https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/CHANGELOG.md)
- [Commits](https://gitlab.com/catamphetamine/libphonenumber-js/compare/v1.12.31...v1.12.34)

---
updated-dependencies:
- dependency-name: libphonenumber-js
  dependency-version: 1.12.34
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 07:41:27 +01:00
dependabot[bot] 1063be7d38 build(deps): bump the github-actions group with 3 updates
Bumps the github-actions group with 3 updates: [github/codeql-action](https://github.com/github/codeql-action), [actions/setup-node](https://github.com/actions/setup-node) and [LizardByte/actions](https://github.com/lizardbyte/actions).


Updates `github/codeql-action` from 4.31.9 to 4.31.10
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/5d4e8d1aca955e8d8589aabd499c5cae939e33c7...cdefb33c0f6224e58673d9004f47f7cb3e328b89)

Updates `actions/setup-node` from 6.1.0 to 6.2.0
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/395ad3262231945c25e8478fd5baf05154b1d79f...6044e13b5dc448c55e2357c09f80417699197238)

Updates `LizardByte/actions` from 2025.1227.191137 to 2026.116.208
- [Release notes](https://github.com/lizardbyte/actions/releases)
- [Commits](https://github.com/lizardbyte/actions/compare/c2e99809a28d738261f986b884cad52fe3a91d5b...e6bc045033a5614035b66daafc38ff86faecb23a)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.31.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/setup-node
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: LizardByte/actions
  dependency-version: 2026.116.208
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 00:22:22 +00:00
Nextcloud bot 036bab5017 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-19 00:13:42 +00:00
dependabot[bot] 6425c6d107 build(deps-dev): bump @babel/node in /build/frontend-legacy
Bumps [@babel/node](https://github.com/babel/babel/tree/HEAD/packages/babel-node) from 7.28.0 to 7.28.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-node)

---
updated-dependencies:
- dependency-name: "@babel/node"
  dependency-version: 7.28.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 00:12:23 +00:00
Andy Scherzinger 853e895f4d Merge pull request #57164 from nextcloud/useMoreUpToDatePreviewImage
chore: Change preview image in README.md
2026-01-19 00:11:50 +01:00
Andy Scherzinger 2f4a6f1e8b Merge pull request #57082 from nextcloud/automated/noid/-update-min-supported-desktop-version
chore: Update minimum supported desktop version to 3.1.50
2026-01-18 23:40:30 +01:00
Andy Scherzinger 0ec75efdb2 Merge pull request #57296 from nextcloud/fix/add-icons-to-settings
fix(FilesAppSettings): Add icons to default view
2026-01-18 23:35:29 +01:00
nextcloud-command 6d978db663 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-18 22:10:06 +00:00
kramo c643bb7ee4 fix(FilesAppSettings): Add icons to default view
Signed-off-by: kramo <git@kramo.page>
2026-01-18 23:02:00 +01:00
nextcloud-command dd6a947a2a chore: Update minimum supported desktop version
Signed-off-by: GitHub <noreply@github.com>
2026-01-18 21:54:53 +01:00
Kate 31d82bf351 Merge pull request #57629 from nextcloud/chore/noid/hub26Winter 2026-01-18 18:39:00 +01:00
Andy Scherzinger 6f6291e21a chore(version): Hub 25 Autumn -> Hub 26 Winter
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2026-01-18 17:00:21 +01:00
github-actions[bot] 7c253500a3 Merge pull request #57473 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/sass-1.97.2
build(deps-dev): bump sass from 1.97.1 to 1.97.2 in /build/frontend-legacy
2026-01-18 15:18:55 +00:00
Ferdinand Thiessen 8be2fd1a04 Merge pull request #51593 from nextcloud/chore/support-longer-names
fix: support longer index and table names
2026-01-18 15:58:43 +01:00
github-actions[bot] 9524c6a543 Merge pull request #57472 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/msw-2.12.7
build(deps-dev): bump msw from 2.12.6 to 2.12.7 in /build/frontend-legacy
2026-01-18 14:54:26 +00:00
github-actions[bot] a57841e3b6 Merge pull request #57467 from nextcloud/dependabot/npm_and_yarn/eslint-plugin-cypress-5.2.1
build(deps-dev): bump eslint-plugin-cypress from 5.2.0 to 5.2.1
2026-01-18 15:46:21 +01:00
dependabot[bot] 33070ad57a build(deps-dev): bump sass in /build/frontend-legacy
Bumps [sass](https://github.com/sass/dart-sass) from 1.97.1 to 1.97.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.97.1...1.97.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.97.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 14:41:43 +00:00
dependabot[bot] c14fe998c4 build(deps-dev): bump msw in /build/frontend-legacy
Bumps [msw](https://github.com/mswjs/msw) from 2.12.6 to 2.12.7.
- [Release notes](https://github.com/mswjs/msw/releases)
- [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mswjs/msw/compare/v2.12.6...v2.12.7)

---
updated-dependencies:
- dependency-name: msw
  dependency-version: 2.12.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 14:38:07 +00:00
github-actions[bot] e96eb33ecd Merge pull request #57303 from nextcloud/dependabot/github_actions/github-actions-17597a4202
build(deps): bump the github-actions group across 1 directory with 11 updates
2026-01-18 15:35:56 +01:00
github-actions[bot] fbf557abde Merge pull request #57469 from nextcloud/dependabot/npm_and_yarn/sass-1.97.2
build(deps-dev): bump sass from 1.97.1 to 1.97.2
2026-01-18 15:19:02 +01:00
Ferdinand Thiessen 67eef32b07 fix(DB): support up to 63 character long table and index names
We do not support Oracle 11 anymore but at least Oracle 12c (12.2).
So the limitation is gone (Oracle now supports up to 128 character long
names).

Instead we are now limited by MySQL (64 characters) and PostgreSQL (63
characters).

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-18 14:50:34 +01:00
dependabot[bot] 425fb98e91 build(deps): bump the github-actions group across 1 directory with 11 updates
Bumps the github-actions group with 11 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [actions/checkout](https://github.com/actions/checkout) | `6.0.0` | `6.0.1` |
| [shivammathur/setup-php](https://github.com/shivammathur/setup-php) | `2.35.5` | `2.36.0` |
| [github/codeql-action](https://github.com/github/codeql-action) | `4.31.5` | `4.31.9` |
| [actions/setup-node](https://github.com/actions/setup-node) | `6.0.0` | `6.1.0` |
| [cypress-io/github-action](https://github.com/cypress-io/github-action) | `6.10.4` | `6.10.8` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `5.0.0` | `6.0.0` |
| [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.5.1` | `5.5.2` |
| [codecov/test-results-action](https://github.com/codecov/test-results-action) | `1.1.1` | `1.2.1` |
| [LizardByte/actions](https://github.com/lizardbyte/actions) | `2025.1028.23217` | `2025.1227.191137` |
| [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) | `7.0.9` | `8.0.0` |
| [actions/stale](https://github.com/actions/stale) | `10.1.0` | `10.1.1` |



Updates `actions/checkout` from 6.0.0 to 6.0.1
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3...8e8c483db84b4bee98b60c0593521ed34d9990e8)

Updates `shivammathur/setup-php` from 2.35.5 to 2.36.0
- [Release notes](https://github.com/shivammathur/setup-php/releases)
- [Commits](https://github.com/shivammathur/setup-php/compare/bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f...44454db4f0199b8b9685a5d763dc37cbf79108e1)

Updates `github/codeql-action` from 4.31.5 to 4.31.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/fdbfb4d2750291e159f0156def62b853c2798ca2...5d4e8d1aca955e8d8589aabd499c5cae939e33c7)

Updates `actions/setup-node` from 6.0.0 to 6.1.0
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/2028fbc5c25fe9cf00d9f06a71cc4710d4507903...395ad3262231945c25e8478fd5baf05154b1d79f)

Updates `cypress-io/github-action` from 6.10.4 to 6.10.8
- [Release notes](https://github.com/cypress-io/github-action/releases)
- [Changelog](https://github.com/cypress-io/github-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/cypress-io/github-action/compare/7ef72e250a9e564efb4ed4c2433971ada4cc38b4...2ad32e649e4db26c07674ebae31a297601dbcbaf)

Updates `actions/upload-artifact` from 5.0.0 to 6.0.0
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/330a01c490aca151604b8cf639adc76d48f6c5d4...b7c566a772e6b6bfb58ed0dc250532a479d7789f)

Updates `codecov/codecov-action` from 5.5.1 to 5.5.2
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/5a1091511ad55cbe89839c7260b706298ca349f7...671740ac38dd9b0130fbe1cec585b89eea48d3de)

Updates `codecov/test-results-action` from 1.1.1 to 1.2.1
- [Release notes](https://github.com/codecov/test-results-action/releases)
- [Commits](https://github.com/codecov/test-results-action/compare/47f89e9acb64b76debcd5ea40642d25a4adced9f...0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3)

Updates `LizardByte/actions` from 2025.1028.23217 to 2025.1227.191137
- [Release notes](https://github.com/lizardbyte/actions/releases)
- [Commits](https://github.com/lizardbyte/actions/compare/329b1bcefe1cbe1ef289177471c9f2b2af98e6ca...c2e99809a28d738261f986b884cad52fe3a91d5b)

Updates `peter-evans/create-pull-request` from 7.0.9 to 8.0.0
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/84ae59a2cdc2258d6fa0732dd66352dddae2a412...98357b18bf14b5342f975ff684046ec3b2a07725)

Updates `actions/stale` from 10.1.0 to 10.1.1
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/5f858e3efba33a5ca4407a664cc011ad407f2008...997185467fa4f803885201cee163a9f38240193d)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: shivammathur/setup-php
  dependency-version: 2.36.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: github/codeql-action
  dependency-version: 4.31.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/setup-node
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: cypress-io/github-action
  dependency-version: 6.10.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: actions/upload-artifact
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: codecov/codecov-action
  dependency-version: 5.5.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
- dependency-name: codecov/test-results-action
  dependency-version: 1.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: LizardByte/actions
  dependency-version: 2025.1227.191137
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: peter-evans/create-pull-request
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
- dependency-name: actions/stale
  dependency-version: 10.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 14:41:44 +01:00
dependabot[bot] 2134d998d4 build(deps-dev): bump eslint-plugin-cypress from 5.2.0 to 5.2.1
Bumps [eslint-plugin-cypress](https://github.com/cypress-io/eslint-plugin-cypress) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/cypress-io/eslint-plugin-cypress/releases)
- [Commits](https://github.com/cypress-io/eslint-plugin-cypress/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-cypress
  dependency-version: 5.2.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 13:41:39 +00:00
github-actions[bot] eb9a3d371a Merge pull request #57600 from nextcloud/dependabot/composer/vendor-bin/rector/rector/rector-2.3.1
build(deps-dev): bump rector/rector from 2.3.0 to 2.3.1 in /vendor-bin/rector
2026-01-18 12:58:05 +00:00
github-actions[bot] fb0f9d8763 Merge pull request #57466 from nextcloud/dependabot/npm_and_yarn/vite-64d30ac355
build(deps-dev): bump the vite group across 2 directories with 1 update
2026-01-18 12:44:01 +00:00
nextcloud-command bf74d5b111 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-18 11:53:25 +00:00
dependabot[bot] 8be0d421a1 build(deps-dev): bump rector/rector in /vendor-bin/rector
Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.3.0 to 2.3.1.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/2.3.0...2.3.1)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-version: 2.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 11:44:58 +00:00
dependabot[bot] 71f043604b build(deps-dev): bump the vite group across 2 directories with 1 update
Bumps the vite group with 1 update in the / directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).
Bumps the vite group with 1 update in the /build/frontend-legacy directory: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 7.3.0 to 7.3.1
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.1/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.1/packages/vite)

Updates `vite` from 7.3.0 to 7.3.1
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v7.3.1/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.3.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vite
- dependency-name: vite
  dependency-version: 7.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vite
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 12:44:34 +01:00
github-actions[bot] b5c4032134 Merge pull request #57607 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/babel/plugin-transform-private-methods-7.28.6
build(deps-dev): bump @babel/plugin-transform-private-methods from 7.27.1 to 7.28.6 in /build/frontend-legacy
2026-01-18 12:28:44 +01:00
github-actions[bot] 2a188ea169 Merge pull request #57605 from nextcloud/dependabot/npm_and_yarn/types/dockerode-4.0.0
build(deps-dev): bump @types/dockerode from 3.3.47 to 4.0.0
2026-01-18 12:19:06 +01:00
dependabot[bot] 0e78d316a2 build(deps-dev): bump sass from 1.97.1 to 1.97.2
Bumps [sass](https://github.com/sass/dart-sass) from 1.97.1 to 1.97.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.97.1...1.97.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.97.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 12:01:52 +01:00
dependabot[bot] 443a0600bd build(deps-dev): bump @types/dockerode from 3.3.47 to 4.0.0
Bumps [@types/dockerode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/dockerode) from 3.3.47 to 4.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/dockerode)

---
updated-dependencies:
- dependency-name: "@types/dockerode"
  dependency-version: 4.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 10:28:53 +00:00
github-actions[bot] bf73333a44 Merge pull request #57606 from nextcloud/dependabot/npm_and_yarn/zip.js/zip.js-2.8.15
build(deps-dev): bump @zip.js/zip.js from 2.8.14 to 2.8.15
2026-01-18 11:24:42 +01:00
Nextcloud bot 66000c17fa fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-18 00:13:26 +00:00
github-actions[bot] e7b642c1be Merge pull request #57602 from nextcloud/dependabot/npm_and_yarn/cypress-15.9.0
build(deps-dev): bump cypress from 15.8.1 to 15.9.0
2026-01-17 14:35:27 +01:00
github-actions[bot] 989e2206df Merge pull request #57608 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/nextcloud/vue-8.35.2
build(deps): bump @nextcloud/vue from 8.35.0 to 8.35.2 in /build/frontend-legacy
2026-01-17 13:00:09 +01:00
Ferdinand Thiessen 5137526923 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-17 12:28:05 +01:00
dependabot[bot] 5f8f6b3037 build(deps): bump @nextcloud/vue in /build/frontend-legacy
Bumps [@nextcloud/vue](https://github.com/nextcloud-libraries/nextcloud-vue) from 8.35.0 to 8.35.2.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-vue/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-vue/blob/v8.35.2/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-vue/compare/v8.35.0...v8.35.2)

---
updated-dependencies:
- dependency-name: "@nextcloud/vue"
  dependency-version: 8.35.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 12:25:55 +01:00
github-actions[bot] 8d168bd729 Merge pull request #57601 from nextcloud/dependabot/npm_and_yarn/vitest-19d2c6073a
build(deps-dev): bump the vitest group across 2 directories with 3 updates
2026-01-17 11:37:51 +01:00
Ferdinand Thiessen 5777b6605f Merge pull request #57586 from nextcloud/chore/update-files-rc0
chore: update `@nextcloud/files` to v4.0.0-rc.0
2026-01-17 11:30:59 +01:00
dependabot[bot] a043d950cd build(deps-dev): bump @babel/plugin-transform-private-methods
Bumps [@babel/plugin-transform-private-methods](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-private-methods) from 7.27.1 to 7.28.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.28.6/packages/babel-plugin-transform-private-methods)

---
updated-dependencies:
- dependency-name: "@babel/plugin-transform-private-methods"
  dependency-version: 7.28.6
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 02:12:07 +00:00
dependabot[bot] 27dd1a8548 build(deps-dev): bump @zip.js/zip.js from 2.8.14 to 2.8.15
Bumps [@zip.js/zip.js](https://github.com/gildas-lormeau/zip.js) from 2.8.14 to 2.8.15.
- [Release notes](https://github.com/gildas-lormeau/zip.js/releases)
- [Commits](https://github.com/gildas-lormeau/zip.js/compare/v2.8.14...v2.8.15)

---
updated-dependencies:
- dependency-name: "@zip.js/zip.js"
  dependency-version: 2.8.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 02:11:39 +00:00
dependabot[bot] 3197453d5f build(deps-dev): bump cypress from 15.8.1 to 15.9.0
Bumps [cypress](https://github.com/cypress-io/cypress) from 15.8.1 to 15.9.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/cypress-io/cypress/compare/v15.8.1...v15.9.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-version: 15.9.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 02:10:00 +00:00
dependabot[bot] edf0c40533 build(deps-dev): bump the vitest group across 2 directories with 3 updates
Bumps the vitest group with 1 update in the / directory: [@vitest/coverage-istanbul](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-istanbul).
Bumps the vitest group with 2 updates in the /build/frontend-legacy directory: [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) and [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8).


Updates `@vitest/coverage-istanbul` from 4.0.16 to 4.0.17
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/coverage-istanbul)

Updates `vitest` from 4.0.16 to 4.0.17
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/vitest)

Updates `vitest` from 4.0.16 to 4.0.17
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/vitest)

Updates `@vitest/coverage-v8` from 4.0.16 to 4.0.17
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.0.17/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-istanbul"
  dependency-version: 4.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vitest
- dependency-name: vitest
  dependency-version: 4.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vitest
- dependency-name: vitest
  dependency-version: 4.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vitest
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.0.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vitest
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 02:09:13 +00:00
Nextcloud bot 447d3272a5 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-17 00:13:34 +00:00
Ferdinand Thiessen fa7869504a chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 22:22:57 +01:00
Ferdinand Thiessen d3813798bf chore: update @nextcloud/files to v4.0.0-rc.0
- update library
- adjust sidebar tab handling

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 22:22:57 +01:00
Ferdinand Thiessen 60a43694cc Merge pull request #57352 from nextcloud/fix/active-files
fix(files): properly handle currently active node and files action hotkeys
2026-01-16 20:47:44 +01:00
Ferdinand Thiessen c9a7654a9d Merge pull request #57592 from nextcloud/refactor/oc-msg
refactor(core): migrate `OC.msg` away from jQuery
2026-01-16 18:29:24 +01:00
Ferdinand Thiessen 5597718a8d chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 18:06:15 +01:00
Ferdinand Thiessen b63aca792f test: move integration testing of hotkeys to Cypress
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 18:06:15 +01:00
Ferdinand Thiessen e19d0e4c12 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 17:51:13 +01:00
Ferdinand Thiessen f175e421b3 refactor(core): migrate OC.msg away from jQuery
Make the class jQuery free to be able to drop it as a dependency.
Also added some unit tests for it.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 17:48:49 +01:00
Ferdinand Thiessen 24b3059de7 refactor(systemtags): properly register hotkey in the files app
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 17:26:28 +01:00
Ferdinand Thiessen b135e36350 fix(files): properly register file action hotkeys
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 17:26:28 +01:00
Ferdinand Thiessen 03ffa39909 fix(files): properly handle currently active node
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 17:26:28 +01:00
Ferdinand Thiessen 6a67456574 Merge pull request #57594 from nextcloud/refactor/ocp-comments
refactor(core): migrate `OCP.Comments` away from jQuery
2026-01-16 17:25:52 +01:00
nextcloud-command c16a68a8bf chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-16 13:43:13 +00:00
Kate fb1dc43889 Merge pull request #57564 from nextcloud/feat/files_sharing/share-access-updated-event-multiple-users 2026-01-16 14:31:06 +01:00
Ferdinand Thiessen 1163638d3d refactor(core): migrate OCP.Comments away from jQuery
The API was not yet deprecated but is not used anymore,
so 1. added a deprecation so we can get rid of it in the future.
But until then we need to drop jQuery so refactored the code to use
vanilla JS.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 14:21:52 +01:00
Benjamin Gaussorgues 0ff9de1a06 Merge pull request #57404 from nextcloud/carl/fix-psalm-tests1 2026-01-16 14:09:36 +01:00
Benjamin Gaussorgues aba8a7ff86 Merge pull request #57549 from nextcloud/carl/optimize-getdirectory-content 2026-01-16 14:09:14 +01:00
Andy Scherzinger a7ea180317 Merge pull request #57576 from nextcloud/missing-cache-entry-data
fix: dont error on missing path_hash/checksum CacheEntry fields
2026-01-16 14:04:46 +01:00
Ferdinand Thiessen 5740f8e507 Merge pull request #57587 from nextcloud/chore/jquery-query
refactor: migrate `OC.*QueryString` from jQuery
2026-01-16 13:53:20 +01:00
Ferdinand Thiessen 1f3aaeecfe chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 12:40:05 +01:00
Ferdinand Thiessen 29a59c3822 refactor: migrate OC.*QueryString from jQuery
Use native `URLSearchParams` to remove jQuery and deprecate it.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 12:38:14 +01:00
Ferdinand Thiessen df2afa9565 Merge pull request #57584 from nextcloud/chore/appconfig-cleanup
refactor(core): migrate OCP.AppConfig from jQuery to axios
2026-01-16 12:35:23 +01:00
Carl Schwan 11cf69d8ba fix(psalm): Fix static analysis issues in apps/*/tests
There are still 1200 more to fix before we can enable static analysis
for the tests.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-16 12:00:51 +01:00
Carl Schwan 9a8d45d81f refactor(QueryException): Remove most usage of QueryException
This is preparation to move QueryException from OCP to OC as part of
Nextcloud 34.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-16 11:55:06 +01:00
Ferdinand Thiessen 31ae610bb1 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 11:19:20 +01:00
Ferdinand Thiessen bbe3d92a38 refactor(core): migrate OCP.AppConfig from jQuery to axios
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 11:17:02 +01:00
Carl Schwan eadcd1cc84 refactor: Use str_starts_with
Co-authored-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2026-01-16 10:58:16 +01:00
Stephan Orbaugh 3a9173015c Merge pull request #57525 from nextcloud/carl/usermountcache-loop-optimization
perf(UserMountCache): Optimize loop
2026-01-16 10:50:27 +01:00
Louis 2716b0f6a6 Merge pull request #57292 from nextcloud/feature/54562/files-sharing-authoritative
feat(files_sharing): implement partial mount providers
2026-01-16 10:37:36 +01:00
Louis Chmn b6e90acdb6 fix(DefaultSHareProvider): Specify join alias when accessing columns
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-16 08:32:14 +01:00
Louis Chmn 7323680779 feat(files_sharing): Add indexes for target on share and share_external
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-16 08:32:14 +01:00
Louis Chmn 7c9c74f4f0 feat(files_sharing): Implement partial mount providers
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-16 08:32:14 +01:00
Ferdinand Thiessen 5db140d101 Merge pull request #57393 from nextcloud/fix/viewer-sidebar
fix(files): properly handle viewer integration of sidebar
2026-01-16 02:13:50 +01:00
Ferdinand Thiessen b78699acd7 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 01:49:39 +01:00
Ferdinand Thiessen 6491f6ec9a fix(files): properly handle viewer integration of sidebar
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 01:45:44 +01:00
Ferdinand Thiessen 10661bf49f Merge pull request #57556 from nextcloud/refactor/updater
refactor(core): migrate web updater to Vue
2026-01-16 01:16:04 +01:00
Nextcloud bot 75a43ff352 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-16 00:13:48 +00:00
Simon L. fb8cf0d593 Merge pull request #57585 from nextcloud/rakekniven-patch-2
chore(i18n): Improved grammar
2026-01-16 00:43:05 +01:00
Ferdinand Thiessen bf190c4141 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 00:31:53 +01:00
Ferdinand Thiessen f7dad729e4 refactor(core): migrate web updater to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-16 00:29:19 +01:00
Ferdinand Thiessen 2a385fd5b8 Merge pull request #57571 from nextcloud/refactor/public-share-auth
refactor(core): migrate public share authentication to Vue
2026-01-16 00:21:19 +01:00
nextcloud-command 382a237fba chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-15 22:54:47 +00:00
Ferdinand Thiessen 48171a4f63 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 23:35:38 +01:00
rakekniven 678450a6c7 chore(i18n): Improved grammar
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2026-01-15 23:30:22 +01:00
Ferdinand Thiessen 752a62133a chore: fix or ignore linter issues
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 23:30:21 +01:00
rakekniven 86e142c051 chore(i18n): Improved grammar
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2026-01-15 23:26:48 +01:00
Ferdinand Thiessen ba0615b33e refactor(core): migrate public share authentication to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 23:26:19 +01:00
Arthur Schiwon 748206fc66 Merge pull request #57545 from nextcloud/release/33.0.0_beta_4
33.0.0 beta 4
2026-01-15 23:24:06 +01:00
Joas Schilling 80c16e76be Merge pull request #57579 from nextcloud/fix/57572/remove-only-existing-index
fix(mounts): only remove existing index
2026-01-15 23:14:51 +01:00
Ferdinand Thiessen 13718c4de1 Merge pull request #57565 from nextcloud/chore/remove-dead-code
chore(settings): remove dead legacy code
2026-01-15 23:04:22 +01:00
Sebastian Krupinski 4c6981b99b Merge pull request #56924 from nextcloud/feat/tentative-invitations
feat: automated appointment creation
2026-01-15 15:01:33 -05:00
SebastianKrupinski 16198d2b37 feat: automated appointment creation
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2026-01-15 13:31:44 -05:00
Maxence Lange 1628390ccf fix(mounts): only remove existing index
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-15 16:15:40 -01:00
Robin Appelman a79bf069a3 fix: dont error on missing path_hash/checksum cacheentry fields
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-15 18:02:41 +01:00
Côme Chilliet 5e693b5398 fix(files_sharing): Fix BeforeZipCreatedListener path handling
Path of directory is relative to root folder, not user folder.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-15 16:57:42 +01:00
Ferdinand Thiessen ddff2cbff2 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 16:20:36 +01:00
Ferdinand Thiessen 04fc1a4418 chore(settings): remove dead legacy code
The `security_password` was last used in the personal setting security
section, but already migrated to vue.
So it can be safely removed.

The styles can also be removed by moving the required ones directly to
the Vue component.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 16:13:35 +01:00
Benjamin Gaussorgues 0ff8b35578 Merge pull request #57550 from nextcloud/setup-path-not-found-fallback 2026-01-15 16:12:23 +01:00
Kate 3c498275e5 Merge pull request #57504 from nextcloud/implementCacheChunkGcTtl 2026-01-15 15:39:13 +01:00
Benjamin Gaussorgues 8f8b4411cd Merge pull request #57553 from nextcloud/getMountsForPath-args 2026-01-15 14:35:51 +01:00
Louis b9e670d1b4 Merge pull request #57552 from nextcloud/artonge/debt/files_sharing_unify_methods
debt(files_sharing): Unify `getSharedWithByPath` and `getSharedWith`
2026-01-15 14:21:26 +01:00
Andy Scherzinger 06b064e5f2 Merge pull request #57514 from nextcloud/carl/optimize-cacheentry
perf(files): Optimize CacheEntry creation
2026-01-15 12:57:42 +01:00
Carl Schwan 06827970a8 fix(cache): Handle groupfolder specific entries in cacheEntryFromData
Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-15 11:47:59 +01:00
Carl Schwan 0b8eae7789 perf(files): Optimize CacheEntry creation
Avoid many copy on writes and create array only once.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-15 11:47:41 +01:00
Robin Appelman 53b160ce9b fix: add some extra checks for getMountsForPath arguments
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-15 11:31:54 +01:00
Robin Appelman 83ac1c6030 fix: clearify meaning of getMountsForPath arguments
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-15 11:31:54 +01:00
provokateurin 653d2a05b4 feat(files_sharing): Support multiples users in UserShareAccessUpdatedEvent
Signed-off-by: provokateurin <kate@provokateurin.de>
2026-01-15 11:07:15 +01:00
Louis Chmn bba8e90c62 fix(files_sharing): Unify getSharedWithByPath and getSharedWith
Follow-up of https://github.com/nextcloud/server/pull/57285

This ensure that the behavior is the same and reduce code duplication.

Salvatore's version seems to be more optimized, but I prefer those change to be done separately and for both methods.

Signed-off-by: Louis Chmn <louis@chmn.me>
2026-01-15 10:22:44 +01:00
Joas Schilling 9545bfb419 ci(mariadb): Thin out mariadb matrix
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-15 09:26:42 +01:00
Joas Schilling a68fa8ba02 ci(coverage): Also don't upload coverage from object-storage tests
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-15 08:52:32 +01:00
Joas Schilling 666e5ee295 ci(external-storage): Only run storage tests when filesystem was modified
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-15 08:52:03 +01:00
Joas Schilling 44b76e64d2 ci(phpunit): Thin out DB matrix
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-15 08:51:15 +01:00
Ferdinand Thiessen 902d8b042a Merge pull request #57544 from nextcloud/refactor/mail-settings-vue
refactor(settings): migrate mail settings to Vue
2026-01-15 02:44:38 +01:00
Ferdinand Thiessen 6ec212fed1 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 02:12:03 +01:00
Ferdinand Thiessen 7d21350040 feat(settings): add option to allow self-signed mail certificates
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 02:12:03 +01:00
Ferdinand Thiessen 265d2c3f87 refactor(settings): migrate mail settings to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-15 02:12:03 +01:00
Nextcloud bot c9ac8cfd54 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-15 00:14:00 +00:00
Ferdinand Thiessen 55469c96c0 Merge pull request #57529 from nextcloud/chore/update-files-4-b9
chore(deps): update `@nextcloud/files` to v4.0.0-beta.9
2026-01-14 22:21:59 +01:00
Andy Scherzinger 524ee376e6 Merge pull request #57540 from nextcloud/fix-smb-sso-summary-name
chore: fix name of kerberos sso summary workflow
2026-01-14 18:36:15 +01:00
Robin Appelman 68cdd1b1ef fix: fallback to full user setup if we cant find the expected mount root
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 18:04:13 +01:00
Carl Schwan 27339601f6 perf(View): Optimize getDirectoryContent hot-loop
Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-14 18:03:51 +01:00
Andy Scherzinger abe5499e14 Merge pull request #57498 from nextcloud/carl/rename-imountproviderargs
refactor(files): Rename IMountProviderArgs
2026-01-14 17:50:43 +01:00
Andy Scherzinger 6a0e7e318b Merge pull request #57513 from nextcloud/carl/shareplugin
refactor(dav): Remove dead property
2026-01-14 17:50:22 +01:00
Worker Builder 1c9598d922 build(hub): 33.0.0 beta 4
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-14 14:07:00 +00:00
Robin Appelman 62d7165124 Merge pull request #57370 from nextcloud/authoritative-mount-setup
Authoritative mount setup
2026-01-14 14:19:03 +01:00
Robin Appelman 3cfdc26ae1 chore: fix name of kerberos sso summary workflow
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 13:12:32 +01:00
Robin Appelman 47530ef95f feat: add a debug config option to disable authoritative mount optimizations
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 13:03:01 +01:00
Ferdinand Thiessen cd3dbbb04c chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 12:37:01 +01:00
Ferdinand Thiessen 2940cd0bb8 chore(deps): update @nextcloud/files to v4.0.0-beta.9
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 12:35:21 +01:00
Ferdinand Thiessen 22ebf79e90 Merge pull request #57503 from nextcloud/chore/drop-moment
refactor: drop moment from new bundles
2026-01-14 12:33:56 +01:00
Robin Appelman 9fde2523e6 Merge pull request #57493 from nextcloud/smb-invalid-arg-unavailable
fix: handle InvalidArumentException as availability failure in smb->getFileInfo
2026-01-14 12:00:03 +01:00
Kate ad8576f02d Merge pull request #57185 from nextcloud/fix/fix-files-external-tests 2026-01-14 11:46:28 +01:00
Robin Appelman e5497c7731 fix: protect against infinite loops in setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 11:21:27 +01:00
Robin Appelman 6eb8e8d6fd Merge pull request #57519 from nextcloud/get-existing-api
feat: add api to get a user object without verifying they exist
2026-01-14 11:15:42 +01:00
github-actions[bot] a4cf7145cd Merge pull request #57471 from nextcloud/dependabot/npm_and_yarn/zip.js/zip.js-2.8.14
build(deps-dev): bump @zip.js/zip.js from 2.8.11 to 2.8.14
2026-01-14 11:13:41 +01:00
Kate 7d1b1de155 Merge pull request #54697 from nextcloud/fix/unit-test-for-storage-auto-expire-list 2026-01-14 11:00:33 +01:00
yemkareems fb2716ab4b fix: php lint fix
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:58:32 +05:30
Ferdinand Thiessen a623bffb00 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 10:27:02 +01:00
yemkareems f0b90e6378 fix: removed the message
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:57:02 +05:30
Ferdinand Thiessen 8ac1602402 refactor: drop moment from new bundles
On the Vue 3 side lets remove the dependency on Moment as this is a
pretty huge dependency. Instead use plain Intl API for formatting.

This reduces the bundle size by ~1.5MiB.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 10:25:37 +01:00
yemkareems 5f6a777c5b fix: refactored testBucketKeepsLatest to add invalid data assert
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:46:48 +05:30
grnd-alt dac8fe4034 Merge pull request #57405 from nextcloud/3rdparty/justinrainbow/json-schema
chore: update justinrainbow/json-schema to 6.6.4
2026-01-14 09:27:53 +01:00
Ferdinand Thiessen 891d0fc481 Merge pull request #57526 from nextcloud/refactor/loginflow-to-vue
refactor(core): migrate login flow ui from jQuery to Vue
2026-01-14 03:10:07 +01:00
dependabot[bot] 172698e61a build(deps-dev): bump @zip.js/zip.js from 2.8.11 to 2.8.14
Bumps [@zip.js/zip.js](https://github.com/gildas-lormeau/zip.js) from 2.8.11 to 2.8.14.
- [Release notes](https://github.com/gildas-lormeau/zip.js/releases)
- [Commits](https://github.com/gildas-lormeau/zip.js/compare/v2.8.11...v2.8.14)

---
updated-dependencies:
- dependency-name: "@zip.js/zip.js"
  dependency-version: 2.8.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-14 01:16:57 +01:00
Ferdinand Thiessen 942a92f072 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 01:15:01 +01:00
Ferdinand Thiessen d26ec02aa1 refactor(core): migrate login flow ui from jQuery to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 01:15:01 +01:00
Nextcloud bot a8369cdbee fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-14 00:13:54 +00:00
Ferdinand Thiessen 038d940df1 Merge pull request #57515 from nextcloud/refactor/encryption-vue3
refactor(encryption): migrate to Vue 3 and Typescript and script setup
2026-01-14 00:29:17 +01:00
Ferdinand Thiessen a2d0d8b26b chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 22:51:07 +01:00
Ferdinand Thiessen 108858daef refactor(encryption): migrate to Vue 3 and Typescript and script setup
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 22:49:18 +01:00
Ferdinand Thiessen ab8e4e60ea Merge pull request #57502 from nextcloud/chore/theming-js
refactor(theming): move from `js/` to `src/`
2026-01-13 22:41:44 +01:00
Ferdinand Thiessen c59ad1f847 Merge pull request #57355 from nextcloud/refactor/oc-settings
refactor: consolidate `OC.Settings`
2026-01-13 22:35:40 +01:00
nextcloud-command fa535d0e20 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-13 19:04:13 +00:00
Ferdinand Thiessen 41e1a995a9 refactor(theming): move from js/ to src/
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 18:47:28 +01:00
Carl Schwan 94dd919b88 perf(UserMountCache): Optimize loop
These loops since to be called around 60 000 times in one trace I saw.
So it makes sense to use the faster foreach construct.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-13 18:37:51 +01:00
Benjamin Gaussorgues 6248afe544 Merge pull request #57441 from nextcloud/release/33.0.0_beta_3 2026-01-13 16:58:49 +01:00
Benjamin Gaussorgues e3f951b804 Merge pull request #57455 from nextcloud/feat/nextcloudignore 2026-01-13 16:58:32 +01:00
Robin Appelman 467487ecd8 feat: dont reload authoritative mount providers when doing by-path setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 16:42:48 +01:00
Robin Appelman ae74dbef2b Merge pull request #56499 from nextcloud/authoritative-mount-provider-files_external
Add api for authoritative mount providers and implement it for files_external
2026-01-13 16:36:33 +01:00
Robin Appelman 663f6822c7 test: use a different smb image for smb testing
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 16:11:21 +01:00
Robin Appelman 5924a2e3ec feat: add api to get a user object without verifying they exist
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 15:59:07 +01:00
Ferdinand Thiessen bd664cb8fd chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 15:42:00 +01:00
Ferdinand Thiessen 805805767f refactor: consolidate OC.Settings
1. Remove unused legacy parts (no code match in the whole github
organization).
2. Consolidate `OC.Settings` in `core/src/OC` for consistency.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 15:41:59 +01:00
Ferdinand Thiessen 0fa396d0b8 Merge pull request #57509 from nextcloud/fix/use-strict-array-search
Use strict array search
2026-01-13 15:22:20 +01:00
Carl Schwan 5acb93a5be Merge pull request #57510 from nextcloud/carl/callback-optimization
perf(dav): Avoid getting DB Connection inside callback
2026-01-13 15:01:54 +01:00
Carl Schwan ea40ade012 refactor(dav): Remove dead property
The user folder is no longer used.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-13 14:09:05 +01:00
Maxence Lange 048037b629 Merge pull request #57495 from nextcloud/fix/noid/no-data-response
fix(ocm): empty response
2026-01-13 11:21:03 -01:00
Côme Chilliet f31f4eba7f chore: While at it use strict array search in build/integration
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:59 +01:00
Côme Chilliet dc843f6d0a fix: Use strict array search in other shipped apps as well
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:36 +01:00
Côme Chilliet 3c80b7f2b3 fix: Use strict array comparisons in lib/
To avoid surprises with corner cases.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:04 +01:00
Carl Schwan a1979c9cd1 perf(dav): Avoid getting DB Connection inside callback
Fetch it once outside instead and pass it to the callback.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-13 11:47:11 +01:00
Côme Chilliet c1dd559965 fix: Use strict array comparisons in user_ldap
Otherwise there are issues with string values looking like numbers.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:46:57 +01:00
Côme Chilliet 166febb940 fix(tests): Use absolute paths for files_external tests configuration files
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:07:27 +01:00
Joas Schilling 408f9e8256 Merge pull request #57491 from nextcloud/fix/taskprocessing-userfacingerrormessage-responsedef
fix(TaskProcessing): Expose userFacingErrorMessage on ResponseDefinitions#CoreTaskProcessingTask
2026-01-13 10:27:01 +01:00
grnd-alt 0461301597 chore: update justinrainbow/json-schema to 6.6.4
Signed-off-by: grnd-alt <git@belakkaf.net>
2026-01-13 10:14:53 +01:00
Git'Fellow df018cf994 fix(gc): Implement cache_chunk_gc_ttl
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2026-01-13 09:00:32 +01:00
Ferdinand Thiessen 08d4ccb36f Merge pull request #57237 from nextcloud/refactor/files-external-vue3-ts
refactor(files_external): migrate to script-setup and Vue 3
2026-01-13 03:04:49 +01:00
nextcloud-command 31957add33 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-13 01:33:19 +00:00
Ferdinand Thiessen e76f9284ce refactor(files_external): adjust files integration
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen a05c285979 feat(files_external): implement storage table
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 1ec308a9dd feat(files_external): provide new API to register AuthMechanisms
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 0e22ae1efe refactor(files_external): migrate public key auth to Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 5ed7c4fd97 fix(files_external): adjust settings
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 545c72becb chore: remove non working and legacy OAuth2 auth schema
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen e1133ec926 feat(files_external): Migrate settings to Vue
Template parameters are migrated to initial state, common state between admin and user settings is shared in the CommonSettingsTrait.
The template is cleaned and replaced with only a stub for the Vue mount.
Code only used for the frontend of the settings is moved from the MountConfig to the CommonSettingsTrait (the missing dependency messages).

On the frontend a wrapper view is created that currently holds the global credentials settings and the external storages settings.
- The global credentials sections is now a stand-alone sections - fully implemented.
- The external storages section holds the table + user config + warnings on missing dependencies

The legacy UI is temporarly renamed but will be removed in a following commit.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen d4674060dc fix(files_external): return correct type for new user defined storages
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 38ed0a8283 fix: hard type controllers where the type is required to match
Prevent HTTP 500 errors where a 400 would be the correct response

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 4c8b9deca0 feat(files_external): Move script loading to CommonSettingsTrait to reduce duplicated code between admin and user settings
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 5c652484e3 refactor(files_external): migrate files integration to script-setup and Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Nextcloud bot a5225bdf99 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-13 00:13:56 +00:00
Ferdinand Thiessen ac3d09d817 Merge pull request #57499 from nextcloud/feat/migrate-user-ldap-renew
refactor(user_ldap): migrate jQuery UI of password renewal to Vue
2026-01-12 22:56:09 +01:00
Ferdinand Thiessen 2c3872f325 Merge pull request #57095 from nextcloud/fix/public-upload
fix(files): ensure creating folders in public shares work
2026-01-12 22:31:47 +01:00
Ferdinand Thiessen bad5531860 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 21:48:13 +01:00
Ferdinand Thiessen 29e31ffdb1 refactor(user_ldap): migrate jQuery UI of password renewal to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 21:48:13 +01:00
nextcloud-command bdd379e82e chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 20:07:13 +00:00
Ferdinand Thiessen 8c93d4a9e1 fix(files): ensure creating folders in public shares work
The root of the webdav client needs to be the public share root,
as accessing the `/files` folder is not possible for public shares.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 20:39:54 +01:00
Ferdinand Thiessen 5f33fee58f Merge pull request #56941 from nextcloud/fix/importmaps
fix(template): add import map for JS module entry points
2026-01-12 20:38:58 +01:00
Kate 258b30606f Merge pull request #57357 from Freiheitswolke/fix/NavigationManager/Remove-break-to-return-all-defaultEntryIds 2026-01-12 19:29:18 +01:00
Marcel Klehr 1182b6d4f0 chore: Update openapi specs
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2026-01-12 18:32:33 +01:00
Marcel Klehr a45978789b fix(TaskProcessing): Expose userFacingErrorMessage on ResponseDefinitions#CoreTaskProcessingTask
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2026-01-12 18:32:33 +01:00
Carl Schwan 7b05c8f797 refactor(files): Rename IMountProviderArgs
It's not an interface so the I-prefix is inadequate.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-12 17:33:52 +01:00
Maxence Lange 42d745e17b fix(ocm): empty response
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-12 15:22:08 -01:00
Robin Appelman 4dcd4223de fix: make smb auth failure on forbidden exception more reliable
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-12 15:23:57 +01:00
Robin Appelman 43727cb72c fix: handle InvalidArumentException as availability failure in smb->getFileInfo
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-12 15:23:57 +01:00
Benjamin Gaussorgues 89166cbf9a Merge pull request #57054 from nextcloud/fix/federated-vue 2026-01-12 15:11:40 +01:00
Joas Schilling 6bdda55733 Merge pull request #57453 from nextcloud/feat/noid/qr-code-in-account-menu
Improve usability of QR code login
2026-01-12 14:01:10 +01:00
Ferdinand Thiessen f0e020f97d fix(template): add import map for JS module entry points
Currently apps are broken if they have exports in the JS entry point,
because they then will import from the entry point but because they do
not know about the Nextcloud cache buster they will import without cache
buster.

This results in two problem:
1. The module might be outdated (old cached)
2. The module is duplicated, so the module will be loaded twice and will
   have two different - out of sync - states. This also means it will
   re-run sideeffects of the entry point.

To fix this we generate an import map which basically maps the plain
entry point script to the script with cache buster added.

(Some background: Bundler will try to minimize chunks (reduce page
loading time) so they can inline modules into entry points and thus
extend the entry point exports and then this issue would be caused).

For example:
```js
// entry.mjs
console.error('called')

async function onClick() {
  await import('./chunk.mjs')
}

export const name = 'foo'

// chunk.mjs
import { name } from './entry.mjs'

console.error(name)
```

When calling `onClick` without this fix the output will be:
> called
> called
> foo

With this fix:
> called
> foo

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 13:34:11 +01:00
Joas Schilling 0e99c60da1 Merge pull request #57450 from nextcloud/3rdparty/sabre-vobject-iTipBroker-replies
fix: add send participation reply on fresh event patch
2026-01-12 12:27:43 +01:00
Benjamin Gaussorgues 98619ca6fb Merge pull request #56524 from nextcloud/fix/group-displayname-in-user-edit 2026-01-12 12:25:19 +01:00
Joas Schilling 8b4491ae1c fix: Add translation for temporary app password names
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-12 11:58:45 +01:00
Robin Appelman 2a2cd291d5 Merge pull request #57392 from nextcloud/user-share-access-event
feat: add event for apps that a users share access might have changed
2026-01-12 11:58:00 +01:00
Ferdinand Thiessen 835d507d64 Merge pull request #57354 from nextcloud/fix/comments-node-api
fix(comments): adjust Activity integration for changed Node API
2026-01-12 11:28:58 +01:00
nextcloud-command 954945a26b chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 10:10:52 +00:00
Joas Schilling f4acd8a7ab fix: Adjust and add new tests
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-12 11:07:44 +01:00
Benjamin Gaussorgues bd90e7c122 Merge pull request #57442 from nextcloud/carl/entity-id-type 2026-01-12 11:03:33 +01:00
Benjamin Gaussorgues 8d50027e78 Merge pull request #57142 from nextcloud/carl/dashboard-psalm 2026-01-12 11:03:17 +01:00
Ferdinand Thiessen 29488d6a78 fix(federatedfilesharing): pre must not be a child of p
Fix the problem reported:
> [plugin vite:vue] apps/federatedfilesharing/src/components/PersonalSettings.vue: <pre> cannot be child of <p>, according to HTML specifications.
> This can cause hydration errors or potentially disrupt future functionality.

`p` only allows inline elements, but pre is none.
We either need to use `div` instead of `p` or `code` instead of `pre`.
But in this case we want a block of code, so we use `div` and inner
`<pre><code>`.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 10:45:58 +01:00
Carl Schwan 716513164f Merge pull request #57452 from nextcloud/fix/noid/ldap-get-displayname-backend
fix: Make User_Proxy IGetDisplayNameBackend complient
2026-01-12 10:19:10 +01:00
Benjamin Gaussorgues e0e5cdf3e1 Merge pull request #57449 from nextcloud/feat/unstable/moving-out-of-unstable-signature 2026-01-12 09:39:21 +01:00
nextcloud-command 9e2058d199 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 08:38:06 +00:00
Ferdinand Thiessen a1503481f3 fix(comments): adjust Activity integration for changed Node API
The activity app integration was changed to use the files Node API
instead of the legacy FileInfo API. So the comments app needs to be
adjusted for it.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 09:23:57 +01:00
Benjamin Gaussorgues b9c3e47b82 feat(build): add .nextcloudignore file to match Krankerl behaviour
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-12 09:17:58 +01:00
Christoph Wurst 18a7369bb9 Merge pull request #57020 from abhinavohri/fix_warnings
fix: Reduce deprecation warnings in phpunit_nodb CI jobs
2026-01-12 08:58:26 +01:00
Abhinav Ohri f89613b507 refactor(testing): Rename mock trait classes for clarity
Signed-off-by: Abhinav Ohri <abhinavohri13@gmail.com>
2026-01-12 07:59:41 +01:00
Abhinav Ohri 252956d6b2 test: fix PHPUnit deprecations and mocking issues
Signed-off-by: Abhinav Ohri <abhinavohri13@gmail.com>
2026-01-12 07:59:41 +01:00
Nextcloud bot 3e9d2fe208 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-12 00:13:44 +00:00
Nextcloud bot 7335927bed fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-11 00:13:41 +00:00
SebastianKrupinski 6ce24383c2 fix: add send participation reply on fresh event patch
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2026-01-10 11:35:08 -05:00
nextcloud-command a17a4f4958 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-10 11:26:58 +01:00
Benjamin Frueh 2b97afa829 fix(settings): Display group displayName consistently when editing a user
Signed-off-by: Benjamin Frueh <benjamin.frueh@gmail.com>
2026-01-10 11:26:58 +01:00
Maxence Lange 327d691c23 feat(signed-request): moving out of unstable
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-09 20:16:24 -01:00
Maksim Sukharev 80f6856ce7 chore: Recompile assets
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
2026-01-09 19:07:08 +01:00
Joas Schilling 2510020b33 fix: Recompile openapi
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 927bea2b4d fix(psalm): Satisfy psalm
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 3713f40d5b fix(app-password): Require strict password confirmation
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling a82827dff5 feat(app-passwords): Add config to disallow creating app-passwords
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 6c20e3e103 fix(onetime): Allow longer duration via app config
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling bacb4323de fix: add app config to control onetime case
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling e7d0ed2020 fix(sessions): Hide one-time app passwords
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 6b121c37da feat: Allow to create one-time app passwords that only allow loading an app-password
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Marcel Müller 3b9ec2d119 feat(qrcode-login): Add QR code login option directly in the user menu
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
2026-01-09 19:07:07 +01:00
Marcel Müller f870041943 fix: Make User_Proxy IGetDisplayNameBackend complient
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
2026-01-09 18:31:55 +01:00
Robin Appelman 272d6141ca fix: improve handling updated storages
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:55 +01:00
Robin Appelman be3bbf22e0 fix: better applicable check for updating external mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:54 +01:00
Robin Appelman c14948f629 test: update cypress test for new files_external mount behavior
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:54 +01:00
Robin Appelman fa61c4c57d fix: don't error when checking login credential storage from cli
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:53 +01:00
Robin Appelman 6dd6d06606 fix: update external storage mounts on login
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:53 +01:00
Robin Appelman 9dffca2f07 fix: improve handling of unavailable storages
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:52 +01:00
Robin Appelman 73e84f9bf5 perf: cache root cache entries for external storage in MountCacheService
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:51 +01:00
Robin Appelman d64f7eb939 feat: listen to user/group events and update external storage mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:51 +01:00
Robin Appelman 5565cdb390 feat: make external storage mount provider authoritative
Signed-off-by: Robin Appelman <robin@icewind.nl>

# Conflicts:
#	apps/files_external/lib/AppInfo/Application.php
2026-01-09 17:53:50 +01:00
Robin Appelman 765d1af2a6 feat: yield user by id in IUserManager::getSeenUsers
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:49 +01:00
Robin Appelman c80c980e29 feat: add typed events for external storage config changes
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:49 +01:00
Robin Appelman e3551e576c feat: add api for authoritative mount providers to update the user mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:48 +01:00
Robin Appelman 198d500ac6 feat: add interface to mark mount providers as authoritative
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:42 +01:00
Carl Schwan 81a21fb718 refactor(entity): Don't type id
Some apps overwrite this and this breaks them.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-09 10:19:34 +01:00
Worker Builder 8265e4b489 build(hub): 33.0.0 beta 3
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-09 08:53:57 +00:00
Robin Appelman 534632334c feat: add event for apps that a users share access might have changed
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-07 17:18:16 +01:00
Côme Chilliet e6ac79d570 Merge branch 'master' into carl/dashboard-psalm
Signed-off-by: Côme Chilliet <91878298+come-nc@users.noreply.github.com>
2026-01-06 13:07:32 +01:00
Joda Stößer 16d8cc065a fix(NavigationManager): Remove break to return all defaultEntryIds
Otherwise only the first entry id is returned, breaking loading the value for the "Global Default App" option

Signed-off-by: Joda Stößer <git@simjo.st>
2026-01-06 02:41:37 +01:00
yemkareems 9ed9a317f5 fix: added Test\TestCase namespace for failing tests
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 12:01:13 +05:30
yemkareems 674381e8c1 fix: php cs fix run
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 11:23:19 +05:30
yemkareems bbbbc4de22 fix: offsets corrected, test added to have exact count when time is frozen and variable count when time is dynamic
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 11:16:43 +05:30
Git'Fellow 3593256e3d chore: Change preview image in README.md
Use a more up-to-date image (the same from the Nextcloud repo for consistency)

Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2025-12-18 08:36:02 +01:00
Carl Schwan 6111ecefbc refactor(dashboard): Fix all psalm issues
Signed-off-by: Carl Schwan <carl.schwan@nextcloud.com>
2025-12-17 14:58:47 +01:00
yemkareems 2ba3766bef Merge branch 'master' into fix/unit-test-for-storage-auto-expire-list 2025-09-30 17:58:16 +05:30
yemkareems fbd99cef8f fix: since removed and copy right text changed
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-09-29 17:03:05 +05:30
yemkareems 4914b4aff3 fix: added test to assert auto expire list preserve's version as per max_versions_per_interval
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-08-28 17:09:55 +05:30
2347 changed files with 47959 additions and 53775 deletions
+6 -4
View File
@@ -52,13 +52,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
@@ -81,13 +82,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
@@ -31,7 +31,7 @@ jobs:
- 'version.php'
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+3 -3
View File
@@ -32,18 +32,18 @@ jobs:
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
uses: github/codeql-action/init@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
config-file: ./.github/codeql-config.yml
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
uses: github/codeql-action/analyze@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10
with:
category: "/language:${{matrix.language}}"
+2 -2
View File
@@ -103,7 +103,7 @@ jobs:
key: git-repo
- name: Checkout ${{ needs.init.outputs.head_ref }}
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
# Needed to allow force push later
persist-credentials: true
@@ -124,7 +124,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
cache: npm
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
id: comment-branch
- name: Checkout ${{ steps.comment-branch.outputs.head_ref }}
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
fetch-depth: 0
+6 -6
View File
@@ -48,7 +48,7 @@ jobs:
exit 1
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
# We need to checkout submodules for 3rdparty
@@ -72,7 +72,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -160,7 +160,7 @@ jobs:
path: ./
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ needs.init.outputs.nodeVersion }}
@@ -171,7 +171,7 @@ jobs:
run: ./node_modules/cypress/bin/cypress install
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
uses: cypress-io/github-action@7ef72e250a9e564efb4ed4c2433971ada4cc38b4 # v6.10.4
uses: cypress-io/github-action@2ad32e649e4db26c07674ebae31a297601dbcbaf # v6.10.8
with:
# We already installed the dependencies in the init job
install: false
@@ -195,7 +195,7 @@ jobs:
SETUP_TESTING: ${{ matrix.containers == 'setup' && 'true' || '' }}
- name: Upload snapshots and videos
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: always()
with:
name: snapshots_${{ matrix.containers }}
@@ -218,7 +218,7 @@ jobs:
run: docker exec nextcloud-e2e-test-server_${{ env.APP_NAME }} tar -cvjf - data > data.tar
- name: Upload data archive
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
if: failure() && matrix.containers != 'component'
with:
name: nc_data_${{ matrix.containers }}
+17 -6
View File
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-ftp:
runs-on: ubuntu-latest
@@ -55,7 +65,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -71,7 +81,8 @@ jobs:
if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -104,14 +115,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-ftp
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-ftp
+22 -10
View File
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-s3-minio:
runs-on: ubuntu-latest
@@ -64,13 +74,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -104,14 +115,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-s3
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-s3
@@ -152,13 +163,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -185,14 +197,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-s3
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-s3
+17 -6
View File
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-sftp:
runs-on: ubuntu-latest
@@ -55,7 +65,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -67,7 +77,8 @@ jobs:
if [[ '${{ matrix.sftpd }}' == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp 'test:test:::data'; fi
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -93,14 +104,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-sftp
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-sftp
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-smb-kerberos:
runs-on: ubuntu-latest
@@ -46,13 +56,13 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Checkout user_saml
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/user_saml
@@ -107,7 +117,7 @@ jobs:
echo "$FILEPATH:"
docker exec --user 33 apache cat $FILEPATH
sftp-summary:
smb-kerberos-sso-summary:
runs-on: ubuntu-latest-low
needs: [changes, files-external-smb-kerberos]
+24 -7
View File
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-smb:
runs-on: ubuntu-latest
@@ -53,19 +63,26 @@ jobs:
services:
samba:
image: ghcr.io/nextcloud/continuous-integration-samba:latest # zizmor: ignore[unpinned-images]
image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0
env:
ACCOUNT_test: test
UID_test: 1000
SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes"
options: >-
--health-cmd=true
ports:
- 445:445
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -99,14 +116,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-smb
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-smb
+17 -6
View File
@@ -29,12 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-webdav-apache:
runs-on: ubuntu-latest
@@ -60,13 +70,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -97,14 +108,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-webdav
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-webdav
+17 -5
View File
@@ -29,11 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- 'apps/files_external/**'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
files-external-generic:
runs-on: ubuntu-latest
@@ -53,13 +64,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -85,14 +97,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-files-external-generic
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-files-external-generic
@@ -24,14 +24,14 @@ jobs:
require: write
- name: Checkout github_helper
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/github_helper
path: github_helper
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
path: server
@@ -74,6 +74,7 @@ jobs:
- name: Set up php 8.2
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: 8.2
coverage: none
+4 -3
View File
@@ -53,13 +53,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -70,7 +71,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Python
uses: LizardByte/actions/actions/setup_python@329b1bcefe1cbe1ef289177471c9f2b2af98e6ca # v2025.1028.23217
uses: LizardByte/actions/actions/setup_python@e6bc045033a5614035b66daafc38ff86faecb23a # v2026.116.208
with:
python-version: '2.7'
+3 -2
View File
@@ -52,13 +52,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+18 -8
View File
@@ -27,14 +27,23 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- '**/*.php'
- '**/lib/**'
- '**/tests/**'
- '**/vendor-bin/**'
- 'build/integration/**'
- '.php-cs-fixer.dist.php'
- 'vendor/**'
- 'vendor-bin/**'
- 'composer.json'
- 'composer.lock'
- 'build/integration/**'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
integration-s3-primary:
runs-on: ubuntu-latest
@@ -67,13 +76,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+5 -4
View File
@@ -97,14 +97,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Checkout Talk app
if: ${{ matrix.test-suite == 'videoverification_features' }}
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/spreed
@@ -113,7 +113,7 @@ jobs:
- name: Checkout Activity app
if: ${{ matrix.test-suite == 'sharing_features' }}
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
repository: nextcloud/activity
@@ -121,7 +121,8 @@ jobs:
ref: ${{ matrix.activity-versions }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
+2 -2
View File
@@ -56,7 +56,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -68,7 +68,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
+2 -1
View File
@@ -48,12 +48,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: 8.2
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+2 -1
View File
@@ -53,12 +53,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+2 -2
View File
@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -37,7 +37,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
+2 -2
View File
@@ -59,7 +59,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -71,7 +71,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
+3 -3
View File
@@ -58,7 +58,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -70,7 +70,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -90,7 +90,7 @@ jobs:
run: npm run test:coverage
- name: Collect coverage
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./coverage/lcov.info,./coverage/legacy/lcov.info
+2 -2
View File
@@ -56,7 +56,7 @@ jobs:
name: NPM build
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
@@ -68,7 +68,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
+3 -3
View File
@@ -34,7 +34,7 @@ jobs:
steps:
- name: Checkout
id: checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
@@ -48,7 +48,7 @@ jobs:
fallbackNpm: '^11.3'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
@@ -69,7 +69,7 @@ jobs:
- name: Create Pull Request
if: steps.checkout.outcome == 'success'
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: 'fix(deps): Fix npm audit'
+18 -11
View File
@@ -29,16 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- '**/appinfo/**'
- '**/lib/**'
- '**/templates/**'
- '**/tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
azure-primary-tests:
runs-on: ubuntu-latest
@@ -52,7 +58,7 @@ jobs:
php-versions: ['8.2', '8.3']
include:
- php-versions: '8.4'
coverage: true
coverage: ${{ github.event_name != 'pull_request' }}
name: php${{ matrix.php-versions }}-azure
@@ -73,13 +79,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -110,14 +117,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-azure
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-azure
+18 -11
View File
@@ -29,16 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- '**/appinfo/**'
- '**/lib/**'
- '**/templates/**'
- '**/tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
s3-primary-tests-minio:
runs-on: ubuntu-latest
@@ -52,7 +58,7 @@ jobs:
php-versions: ['8.2']
include:
- php-versions: '8.3'
coverage: true
coverage: ${{ github.event_name != 'pull_request' }}
name: php${{ matrix.php-versions }}-s3
@@ -74,13 +80,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -116,14 +123,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-s3
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-s3
+18 -11
View File
@@ -29,16 +29,22 @@ jobs:
src:
- '.github/workflows/**'
- '3rdparty/**'
- '**/appinfo/**'
- '**/lib/**'
- '**/templates/**'
- '**/tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
- '**.php'
- 'apps/files/lib/**'
- 'apps/files/tests/**'
- 'apps/files_external/**'
- 'apps/files_sharing/lib/**'
- 'apps/files_sharing/tests/**'
- 'apps/files_trashbin/lib/**'
- 'apps/files_trashbin/tests/**'
- 'apps/files_versions/lib/**'
- 'apps/files_versions/tests/**'
- 'lib/private/Files/**'
- 'lib/public/Files/**'
- 'tests/lib/Files/**'
swift-primary-tests:
runs-on: ubuntu-latest
@@ -52,7 +58,7 @@ jobs:
php-versions: ['8.2']
include:
- php-versions: '8.3'
coverage: true
coverage: ${{ github.event_name != 'pull_request' }}
name: php${{ matrix.php-versions }}-swift
@@ -71,13 +77,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -106,14 +113,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-swift
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-swift
+2 -1
View File
@@ -26,12 +26,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: '8.2'
extensions: ctype, curl, dom, fileinfo, gd, json, libxml, mbstring, openssl, pcntl, pdo, posix, session, simplexml, xml, xmlreader, xmlwriter, zip, zlib
+3 -2
View File
@@ -35,7 +35,7 @@ jobs:
exit 1
- name: Checkout server before PR
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -43,6 +43,7 @@ jobs:
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
@@ -98,7 +99,7 @@ jobs:
- name: Upload profiles
if: always()
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f
with:
name: profiles
path: |
+1 -1
View File
@@ -33,7 +33,7 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
+6 -5
View File
@@ -60,13 +60,13 @@ jobs:
fail-fast: false
matrix:
php-versions: ['8.2']
mariadb-versions: ['10.6', '10.11', '11.4', '11.8']
mariadb-versions: ['10.6']
include:
- php-versions: '8.3'
mariadb-versions: '10.11'
coverage: ${{ github.event_name != 'pull_request' }}
- php-versions: '8.4'
mariadb-versions: '11.8'
mariadb-versions: '11.4'
- php-versions: '8.5'
mariadb-versions: '11.8'
@@ -92,13 +92,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -131,14 +132,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-mariadb
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-mariadb
+5 -4
View File
@@ -72,13 +72,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -103,14 +104,14 @@ jobs:
- name: Upload code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.xml
flags: phpunit-memcached
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-memcached
+5 -4
View File
@@ -121,13 +121,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -161,14 +162,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-mysql
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-mysql
+5 -4
View File
@@ -60,7 +60,7 @@ jobs:
fail-fast: false
matrix:
php-versions: ['8.2']
mysql-versions: ['8.0', '8.4']
mysql-versions: ['8.0']
include:
- mysql-versions: '8.0'
php-versions: '8.3'
@@ -92,13 +92,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -131,14 +132,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-mysql
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-mysql
+5 -4
View File
@@ -75,13 +75,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -109,14 +110,14 @@ jobs:
- name: Upload nodb code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.nodb.xml
flags: phpunit-nodb
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-nodb
@@ -72,13 +72,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
+4 -5
View File
@@ -64,8 +64,6 @@ jobs:
php-versions: '8.2'
coverage: ${{ github.event_name != 'pull_request' }}
- oracle-versions: '21'
php-versions: '8.2'
- oracle-versions: '23'
php-versions: '8.3'
- oracle-versions: '23'
php-versions: '8.4'
@@ -101,13 +99,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -133,14 +132,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-oci
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-oci
+5 -4
View File
@@ -61,7 +61,7 @@ jobs:
matrix:
php-versions: ['8.2']
# To keep the matrix smaller we ignore PostgreSQL versions in between as we already test the minimum and the maximum
postgres-versions: ['14', '18']
postgres-versions: ['14']
include:
- php-versions: '8.3'
postgres-versions: '18'
@@ -92,13 +92,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -126,14 +127,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-postgres
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-postgres
+4 -3
View File
@@ -75,13 +75,14 @@ jobs:
steps:
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
timeout-minutes: 5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
@@ -110,14 +111,14 @@ jobs:
- name: Upload db code coverage
if: ${{ !cancelled() && matrix.coverage }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
with:
files: ./clover.db.xml
flags: phpunit-sqlite
- name: Upload test results
if: ${{ !cancelled() }}
uses: codecov/test-results-action@47f89e9acb64b76debcd5ea40642d25a4adced9f # v1.1.1
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
with:
flags: phpunit-sqlite
+1 -1
View File
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest-low
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
issues: write
steps:
- uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v9
- uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v9
with:
repo-token: ${{ secrets.COMMAND_BOT_PAT }}
stale-issue-message: >
+13 -9
View File
@@ -29,13 +29,14 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: '8.2'
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
@@ -60,13 +61,14 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: '8.2'
extensions: ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
@@ -84,7 +86,7 @@ jobs:
- name: Upload Security Analysis results to GitHub
if: always()
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v3
uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v3
with:
sarif_file: results.sarif
@@ -95,13 +97,14 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: '8.2'
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
@@ -126,13 +129,14 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8
with:
persist-credentials: false
submodules: true
- name: Set up php
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f #v2.35.5
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 #v2.36.0
timeout-minutes: 5
with:
php-version: '8.2'
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
+2 -2
View File
@@ -22,7 +22,7 @@ jobs:
name: update-ca-certificate-bundle-${{ matrix.branches }}
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
@@ -32,7 +32,7 @@ jobs:
run: curl --etag-compare build/ca-bundle-etag.txt --etag-save build/ca-bundle-etag.txt --output resources/config/ca-bundle.crt https://curl.se/ca/cacert.pem
- name: Create Pull Request
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: 'fix(security): Update CA certificate bundle'
@@ -22,7 +22,7 @@ jobs:
name: update-code-signing-crl-${{ matrix.branches }}
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
ref: ${{ matrix.branches }}
@@ -35,7 +35,7 @@ jobs:
run: openssl crl -verify -in resources/codesigning/root.crl -CAfile resources/codesigning/root.crt -noout
- name: Create Pull Request
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: 'fix(security): Update code signing revocation list'
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest-low
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
persist-credentials: false
submodules: true
@@ -107,7 +107,7 @@ jobs:
fi
- name: Create Pull Request
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412
uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725
if: steps.update-files.outputs.CHANGES_MADE == 'true'
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
+29
View File
@@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-only
# Files removed at build time
# Global exclude
.editorconfig
.git
.git-blame-ignore-revs
.gitattributes
.github
.gitignore
.gitmodules
.idea
.l10nignore
.nextcloudignore
.noopenapi
.tx
cypress
tests
# Server specific
/.devcontainer
/__mocks__
/__tests__
/autotest*.sh
/build
/config/config.php
/contribute
/data
+1 -1
View File
@@ -11,7 +11,7 @@
**A safe home for all your data.**
![](https://raw.githubusercontent.com/nextcloud/screenshots/master/nextcloud-hub-files-25-preview.png)
![](https://raw.githubusercontent.com/nextcloud/screenshots/master/nextcloud-hub-25-files.png)
## Why is this so awesome? 🤩
+8
View File
@@ -0,0 +1,8 @@
OC.L10N.register(
"cloud_federation_api",
{
"Cloud Federation API" : "API Federasi Cloud",
"Enable clouds to communicate with each other and exchange data" : "Memungkinkan cloud untuk saling berkomunikasi dan bertukar data",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "API Federasi Cloud memungkinkan berbagai instans Nextcloud untuk saling berkomunikasi dan bertukar data."
},
"nplurals=1; plural=0;");
+6
View File
@@ -0,0 +1,6 @@
{ "translations": {
"Cloud Federation API" : "API Federasi Cloud",
"Enable clouds to communicate with each other and exchange data" : "Memungkinkan cloud untuk saling berkomunikasi dan bertukar data",
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "API Federasi Cloud memungkinkan berbagai instans Nextcloud untuk saling berkomunikasi dan bertukar data."
},"pluralForm" :"nplurals=1; plural=0;"
}
@@ -10,13 +10,11 @@ declare(strict_types=1);
namespace OCA\CloudFederationAPI\Controller;
use JsonException;
use NCU\Security\Signature\Exceptions\IncomingRequestException;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\BruteForceProtection;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\Response;
use OCP\EventDispatcher\IEventDispatcher;
@@ -24,6 +22,7 @@ use OCP\IRequest;
use OCP\OCM\Events\OCMEndpointRequestEvent;
use OCP\OCM\Exceptions\OCMArgumentException;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\Exceptions\IncomingRequestException;
use Psr\Log\LoggerInterface;
class OCMRequestController extends Controller {
@@ -83,6 +82,6 @@ class OCMRequestController extends Controller {
);
$this->eventDispatcher->dispatchTyped($event);
return $event->getResponse() ?? new DataResponse('', Http::STATUS_NOT_FOUND);
return $event->getResponse() ?? new Response(Http::STATUS_NOT_FOUND);
}
}
@@ -7,12 +7,6 @@
namespace OCA\CloudFederationAPI\Controller;
use NCU\Federation\ISignedCloudFederationProvider;
use NCU\Security\Signature\Exceptions\IdentityNotFoundException;
use NCU\Security\Signature\Exceptions\IncomingRequestException;
use NCU\Security\Signature\Exceptions\SignatoryNotFoundException;
use NCU\Security\Signature\IIncomingSignedRequest;
use NCU\Security\Signature\ISignatureManager;
use OC\OCM\OCMSignatoryManager;
use OCA\CloudFederationAPI\Config;
use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
@@ -37,12 +31,18 @@ use OCP\Federation\Exceptions\ProviderDoesNotExistsException;
use OCP\Federation\ICloudFederationFactory;
use OCP\Federation\ICloudFederationProviderManager;
use OCP\Federation\ICloudIdManager;
use OCP\Federation\ISignedCloudFederationProvider;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\Exceptions\IdentityNotFoundException;
use OCP\Security\Signature\Exceptions\IncomingRequestException;
use OCP\Security\Signature\Exceptions\SignatoryNotFoundException;
use OCP\Security\Signature\IIncomingSignedRequest;
use OCP\Security\Signature\ISignatureManager;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Util;
use Psr\Log\LoggerInterface;
@@ -9,7 +9,6 @@ declare(strict_types=1);
namespace OCA\CloudFederationApi\Tests;
use NCU\Security\Signature\ISignatureManager;
use OCA\CloudFederationAPI\Config;
use OCA\CloudFederationAPI\Controller\RequestHandlerController;
use OCA\CloudFederationAPI\Db\FederatedInvite;
@@ -29,6 +28,7 @@ use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\ISignatureManager;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;
+12 -3
View File
@@ -5,24 +5,33 @@ OC.L10N.register(
"You commented" : "Anda berkomentar",
"{author} commented" : "{author} berkomentar",
"You commented on %1$s" : "Anda berkomentar pada %1$s",
"You commented on {file}" : "Anda berkomentar pada {file} ",
"You commented on {file}" : "Anda berkomentar pada {file}",
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
"{author} commented on {file}" : "{author} berkomentar pada {file}",
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
"Files" : "File",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\"",
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
"Edit comment" : "Sunting komentar",
"Delete comment" : "Hapus komentar",
"Cancel edit" : "Batal sunting",
"New comment" : "Komentar baru",
"Write a comment …" : "Tulis komentar …",
"Post comment" : "Posting komentar",
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
"No more messages" : "Tidak ada pesan lagi",
"Retry" : "Ulangi",
"_1 new comment_::_{unread} new comments_" : ["{unread} komentar baru"],
"Comment" : "Komentar",
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
"Comment deleted" : "Komentar dihapus",
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
"Write a comment …" : "Tulis komentar …"
},
"nplurals=1; plural=0;");
+12 -3
View File
@@ -3,24 +3,33 @@
"You commented" : "Anda berkomentar",
"{author} commented" : "{author} berkomentar",
"You commented on %1$s" : "Anda berkomentar pada %1$s",
"You commented on {file}" : "Anda berkomentar pada {file} ",
"You commented on {file}" : "Anda berkomentar pada {file}",
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
"{author} commented on {file}" : "{author} berkomentar pada {file}",
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
"Files" : "File",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\"",
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
"Edit comment" : "Sunting komentar",
"Delete comment" : "Hapus komentar",
"Cancel edit" : "Batal sunting",
"New comment" : "Komentar baru",
"Write a comment …" : "Tulis komentar …",
"Post comment" : "Posting komentar",
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
"No more messages" : "Tidak ada pesan lagi",
"Retry" : "Ulangi",
"_1 new comment_::_{unread} new comments_" : ["{unread} komentar baru"],
"Comment" : "Komentar",
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
"Comment deleted" : "Komentar dihapus",
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
"Write a comment …" : "Tulis komentar …"
},"pluralForm" :"nplurals=1; plural=0;"
}
+1
View File
@@ -17,6 +17,7 @@ OC.L10N.register(
"Delete comment" : "Reactie verwijderen",
"Cancel edit" : "Bewerking annuleren",
"New comment" : "Nieuwe reactie",
"Write a comment …" : "Schrijf een commentaar …",
"Post comment" : "Reactie plaatsen",
"@ for mentions, : for emoji, / for smart picker" : "@ voor vermeldingen, : voor emoji, / voor Smart Picker",
"Could not reload comments" : "Kon reactie niet opnieuw laden",
+1
View File
@@ -15,6 +15,7 @@
"Delete comment" : "Reactie verwijderen",
"Cancel edit" : "Bewerking annuleren",
"New comment" : "Nieuwe reactie",
"Write a comment …" : "Schrijf een commentaar …",
"Post comment" : "Reactie plaatsen",
"@ for mentions, : for emoji, / for smart picker" : "@ voor vermeldingen, : voor emoji, / voor Smart Picker",
"Could not reload comments" : "Kon reactie niet opnieuw laden",
+16 -8
View File
@@ -1,8 +1,10 @@
/**
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { INode } from '@nextcloud/files'
import moment from '@nextcloud/moment'
import { createPinia, PiniaVuePlugin } from 'pinia'
import Vue, { type ComponentPublicInstance } from 'vue'
@@ -19,7 +21,7 @@ let ActivityTabPluginInstance
*/
export function registerCommentsPlugins() {
window.OCA.Activity.registerSidebarAction({
mount: async (el, { fileInfo, reload }) => {
mount: async (el: HTMLElement, { node, reload }: { node: INode, reload: () => void }) => {
const pinia = createPinia()
if (!ActivityTabPluginView) {
@@ -32,10 +34,10 @@ export function registerCommentsPlugins() {
pinia,
propsData: {
reloadCallback: reload,
resourceId: fileInfo.id,
resourceId: node.fileid,
},
})
logger.info('Comments plugin mounted in Activity sidebar action', { fileInfo })
logger.info('Comments plugin mounted in Activity sidebar action', { node })
},
unmount: () => {
// destroy previous instance if available
@@ -45,9 +47,15 @@ export function registerCommentsPlugins() {
},
})
window.OCA.Activity.registerSidebarEntries(async ({ fileInfo, limit, offset }) => {
const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset })
logger.debug('Loaded comments', { fileInfo, comments })
window.OCA.Activity.registerSidebarEntries(async ({ node, limit, offset }: { node: INode, limit?: number, offset?: number }) => {
const { data: comments } = await getComments(
{ resourceType: 'files', resourceId: node.fileid },
{
limit,
offset: offset ?? 0,
},
)
logger.debug('Loaded comments', { node, comments })
const { default: CommentView } = await import('./views/ActivityCommentEntry.vue')
// @ts-expect-error Types are broken for Vue2
const CommentsViewObject = Vue.extend(CommentView)
@@ -62,7 +70,7 @@ export function registerCommentsPlugins() {
el: element,
propsData: {
comment,
resourceId: fileInfo.id,
resourceId: node.fileid,
reloadCallback: reload,
},
})
+14 -23
View File
@@ -11,7 +11,6 @@ import { t } from '@nextcloud/l10n'
import wrap from '@vue/web-component-wrapper'
import { createPinia, PiniaVuePlugin } from 'pinia'
import Vue from 'vue'
import FilesSidebarTab from './views/FilesSidebarTab.vue'
import { registerCommentsPlugins } from './comments-activity-tab.ts'
__webpack_nonce__ = getCSPNonce()
@@ -30,28 +29,20 @@ if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSi
iconSvgInline: MessageReplyText,
order: 50,
tagName,
enabled() {
if (!window.customElements.get(tagName)) {
setupSidebarTab()
}
return true
async onInit() {
const { default: FilesSidebarTab } = await import('./views/FilesSidebarTab.vue')
Vue.use(PiniaVuePlugin)
Vue.mixin({ pinia: createPinia() })
const webComponent = wrap(Vue, FilesSidebarTab)
// In Vue 2, wrap doesn't support disabling shadow. Disable with a hack
Object.defineProperty(webComponent.prototype, 'attachShadow', {
value() { return this },
})
Object.defineProperty(webComponent.prototype, 'shadowRoot', {
get() { return this },
})
window.customElements.define(tagName, webComponent)
},
})
}
/**
* Setup the sidebar tab as a web component
*/
function setupSidebarTab() {
Vue.use(PiniaVuePlugin)
Vue.mixin({ pinia: createPinia() })
const webComponent = wrap(Vue, FilesSidebarTab)
// In Vue 2, wrap doesn't support disabling shadow. Disable with a hack
Object.defineProperty(webComponent.prototype, 'attachShadow', {
value() { return this },
})
Object.defineProperty(webComponent.prototype, 'shadowRoot', {
get() { return this },
})
window.customElements.define(tagName, webComponent)
}
+3 -11
View File
@@ -11,24 +11,16 @@ import Comments from './Comments.vue'
const props = defineProps<{
node?: INode
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
active?: boolean
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
folder?: IFolder
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
view?: IView
}>()
defineExpose({ setActive })
const resourceId = computed(() => props.node?.fileid)
/**
* Set this tab as active
*
* @param active - The active state
*/
function setActive(active: boolean) {
return active
}
</script>
<template>
@@ -26,7 +26,7 @@ use Test\TestCase;
*
* @package OCA\Comments\Tests\Unit\AppInfo
*/
#[\PHPUnit\Framework\Attributes\Group('DB')]
#[\PHPUnit\Framework\Attributes\Group(name: 'DB')]
class ApplicationTest extends TestCase {
protected function setUp(): void {
parent::setUp();
@@ -27,7 +27,7 @@ class CommentersSorterTest extends TestCase {
/**
* @param $data
*/
#[\PHPUnit\Framework\Attributes\DataProvider('sortDataProvider')]
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'sortDataProvider')]
public function testSort($data): void {
$commentMocks = [];
foreach ($data['actors'] as $actorType => $actors) {
@@ -61,7 +61,7 @@ class EventHandlerTest extends TestCase {
];
}
#[\PHPUnit\Framework\Attributes\DataProvider('handledProvider')]
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'handledProvider')]
public function testHandled(string $eventType): void {
/** @var IComment|MockObject $comment */
$comment = $this->createMock(IComment::class);
@@ -51,7 +51,7 @@ class ListenerTest extends TestCase {
* @param string $eventType
* @param string $notificationMethod
*/
#[\PHPUnit\Framework\Attributes\DataProvider('eventProvider')]
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'eventProvider')]
public function testEvaluate(string $eventType, $notificationMethod): void {
/** @var IComment|MockObject $comment */
$comment = $this->createMock(IComment::class);
@@ -111,7 +111,7 @@ class ListenerTest extends TestCase {
$this->listener->evaluate($event);
}
#[\PHPUnit\Framework\Attributes\DataProvider('eventProvider')]
#[\PHPUnit\Framework\Attributes\DataProvider(methodName: 'eventProvider')]
public function testEvaluateNoMentions(string $eventType): void {
/** @var IComment|MockObject $comment */
$comment = $this->createMock(IComment::class);
+9
View File
@@ -0,0 +1,9 @@
OC.L10N.register(
"contactsinteraction",
{
"Recently contacted" : "Baru-baru ini dihubungi",
"Contacts Interaction" : "Interaksi Kontak",
"Manages interaction between accounts and contacts" : "Mengelola interaksi antara akun dan kontak",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Mengumpulkan data tentang interaksi akun dan kontak serta menyediakan buku alamat untuk data tersebut"
},
"nplurals=1; plural=0;");
+7
View File
@@ -0,0 +1,7 @@
{ "translations": {
"Recently contacted" : "Baru-baru ini dihubungi",
"Contacts Interaction" : "Interaksi Kontak",
"Manages interaction between accounts and contacts" : "Mengelola interaksi antara akun dan kontak",
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Mengumpulkan data tentang interaksi akun dan kontak serta menyediakan buku alamat untuk data tersebut"
},"pluralForm" :"nplurals=1; plural=0;"
}
@@ -17,7 +17,7 @@ use Sabre\VObject\Component\VCard;
use Sabre\VObject\UUIDUtil;
use Test\TestCase;
#[\PHPUnit\Framework\Attributes\Group('DB')]
#[\PHPUnit\Framework\Attributes\Group(name: 'DB')]
class RecentContactMapperTest extends TestCase {
private RecentContactMapper $recentContactMapper;
private ITimeFactory $time;
+4
View File
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Dasbor",
"Dashboard app" : "Aplikasi dasbor",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
"Weather" : "Cuaca",
"Status" : "Status",
"Good morning" : "Selamat pagi",
@@ -13,10 +14,13 @@ OC.L10N.register(
"Good evening, {name}" : "Selamat malam, {name}",
"Hello" : "Halo",
"Hello, {name}" : "Halo, {name}",
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
"Customize" : "Sesuaikan",
"Edit widgets" : "Edit widget",
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
"Weather service" : "Layanan cuaca",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
"Weather data from Met.no" : "Data cuaca dari Met.no",
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
+4
View File
@@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Dasbor",
"Dashboard app" : "Aplikasi dasbor",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
"Weather" : "Cuaca",
"Status" : "Status",
"Good morning" : "Selamat pagi",
@@ -11,10 +12,13 @@
"Good evening, {name}" : "Selamat malam, {name}",
"Hello" : "Halo",
"Hello, {name}" : "Halo, {name}",
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
"Customize" : "Sesuaikan",
"Edit widgets" : "Edit widget",
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
"Weather service" : "Layanan cuaca",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
"Weather data from Met.no" : "Data cuaca dari Met.no",
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
+1
View File
@@ -20,6 +20,7 @@ OC.L10N.register(
"Edit widgets" : "Widgets bewerken",
"Get more widgets from the App Store" : "Haal meer widgets op uit de App Store",
"Weather service" : "Weerberichten",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Voor je privacy worden de weergegevens namens jou opgevraagd door je {productName} server, zodat de weer dienst geen persoonlijke informatie ontvangt.",
"Weather data from Met.no" : "Weerbericht via Met.no",
"geocoding with Nominatim" : "geocoding met Nominatim",
"elevation data from OpenTopoData" : "hoogtedata via OpenTopoData",
+1
View File
@@ -18,6 +18,7 @@
"Edit widgets" : "Widgets bewerken",
"Get more widgets from the App Store" : "Haal meer widgets op uit de App Store",
"Weather service" : "Weerberichten",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Voor je privacy worden de weergegevens namens jou opgevraagd door je {productName} server, zodat de weer dienst geen persoonlijke informatie ontvangt.",
"Weather data from Met.no" : "Weerbericht via Met.no",
"geocoding with Nominatim" : "geocoding met Nominatim",
"elevation data from OpenTopoData" : "hoogtedata via OpenTopoData",
@@ -18,6 +18,7 @@ use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Config\IUserConfig;
use OCP\Dashboard\IAPIWidget;
use OCP\Dashboard\IAPIWidgetV2;
use OCP\Dashboard\IButtonWidget;
@@ -30,7 +31,6 @@ use OCP\Dashboard\Model\WidgetButton;
use OCP\Dashboard\Model\WidgetItem;
use OCP\Dashboard\Model\WidgetOptions;
use OCP\IConfig;
use OCP\IRequest;
/**
@@ -45,7 +45,7 @@ class DashboardApiController extends OCSController {
IRequest $request,
private IManager $dashboardManager,
private IAppConfig $appConfig,
private IConfig $config,
private IUserConfig $userConfig,
private ?string $userId,
private DashboardService $service,
) {
@@ -59,7 +59,7 @@ class DashboardApiController extends OCSController {
private function getShownWidgets(array $widgetIds): array {
if (empty($widgetIds)) {
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
$widgetIds = explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault));
$widgetIds = explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault));
}
return array_filter(
@@ -202,7 +202,7 @@ class DashboardApiController extends OCSController {
#[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
public function updateLayout(array $layout): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'layout', implode(',', $layout));
$this->userConfig->setValueString($this->userId, 'dashboard', 'layout', implode(',', $layout));
return new DataResponse(['layout' => $layout]);
}
@@ -230,7 +230,7 @@ class DashboardApiController extends OCSController {
#[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/statuses')]
public function updateStatuses(array $statuses): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
$this->userConfig->setValueString($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
return new DataResponse(['statuses' => $statuses]);
}
}
@@ -17,10 +17,10 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\FeaturePolicy;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
use OCP\Config\IUserConfig;
use OCP\Dashboard\IIconWidget;
use OCP\Dashboard\IManager;
use OCP\Dashboard\IWidget;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IRequest;
@@ -33,9 +33,9 @@ class DashboardController extends Controller {
string $appName,
IRequest $request,
private IInitialState $initialState,
private IEventDispatcher $eventDispatcher,
private IManager $dashboardManager,
private IConfig $config,
private IUserConfig $userConfig,
private IL10N $l10n,
private ?string $userId,
private DashboardService $service,
@@ -67,9 +67,9 @@ class DashboardController extends Controller {
$this->initialState->provideInitialState('statuses', $this->service->getStatuses());
$this->initialState->provideInitialState('layout', $this->service->getLayout());
$this->initialState->provideInitialState('appStoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
$this->initialState->provideInitialState('firstRun', $this->config->getUserValue($this->userId, 'dashboard', 'firstRun', '1') === '1');
$this->initialState->provideInitialState('firstRun', $this->userConfig->getValueBool($this->userId, 'dashboard', 'firstRun', true));
$this->initialState->provideInitialState('birthdate', $this->service->getBirthdate());
$this->config->setUserValue($this->userId, 'dashboard', 'firstRun', '0');
$this->userConfig->setValueBool($this->userId, 'dashboard', 'firstRun', false);
$response = new TemplateResponse('dashboard', 'index', [
'id-app-content' => '#app-dashboard',
@@ -12,12 +12,12 @@ use JsonException;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\PropertyDoesNotExistException;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IConfig;
use OCP\Config\IUserConfig;
use OCP\IUserManager;
class DashboardService {
public function __construct(
private IConfig $config,
private IUserConfig $userConfig,
private IAppConfig $appConfig,
private ?string $userId,
private IUserManager $userManager,
@@ -31,21 +31,24 @@ class DashboardService {
*/
public function getLayout(): array {
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
return array_values(array_filter(explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault)), fn (string $value) => $value !== ''));
return array_values(array_filter(
explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault)),
fn (string $value) => $value !== '')
);
}
/**
* @return list<string>
*/
public function getStatuses() {
$configStatuses = $this->config->getUserValue($this->userId, 'dashboard', 'statuses', '');
public function getStatuses(): array {
$configStatuses = $this->userConfig->getValueString($this->userId, 'dashboard', 'statuses');
try {
// Parse the old format
/** @var array<string, bool> $statuses */
$statuses = json_decode($configStatuses, true, 512, JSON_THROW_ON_ERROR);
// We avoid getting an empty array as it will not produce an object in UI's JS
return array_keys(array_filter($statuses, static fn (bool $value) => $value));
} catch (JsonException $e) {
} catch (JsonException) {
return array_values(array_filter(explode(',', $configStatuses), fn (string $value) => $value !== ''));
}
}
@@ -13,7 +13,7 @@ use OC\Accounts\Account;
use OCA\Dashboard\Service\DashboardService;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IConfig;
use OCP\Config\IUserConfig;
use OCP\IUser;
use OCP\IUserManager;
use PHPUnit\Framework\MockObject\MockObject;
@@ -21,7 +21,7 @@ use Test\TestCase;
class DashboardServiceTest extends TestCase {
private IConfig&MockObject $config;
private IUserConfig&MockObject $userConfig;
private IAppConfig&MockObject $appConfig;
private IUserManager&MockObject $userManager;
private IAccountManager&MockObject $accountManager;
@@ -30,13 +30,13 @@ class DashboardServiceTest extends TestCase {
protected function setUp(): void {
parent::setUp();
$this->config = $this->createMock(IConfig::class);
$this->userConfig = $this->createMock(IUserConfig::class);
$this->appConfig = $this->createMock(IAppConfig::class);
$this->userManager = $this->createMock(IUserManager::class);
$this->accountManager = $this->createMock(IAccountManager::class);
$this->service = new DashboardService(
$this->config,
$this->userConfig,
$this->appConfig,
'alice',
$this->userManager,
@@ -90,7 +90,7 @@ class DashboardServiceTest extends TestCase {
public function testGetBirthdateNoUserId(): void {
$service = new DashboardService(
$this->config,
$this->userConfig,
$this->appConfig,
null,
$this->userManager,
+376
View File
@@ -0,0 +1,376 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
"Tasks" : "Tugas",
"Personal" : "Pribadi",
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
"Untitled event" : "Acara tanpa judul",
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
"Busy" : "Sibuk",
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
"Contact birthdays" : "Ulang tahun kontak",
"Death of %s" : "Wafatnya %s",
"Untitled calendar" : "Kalender tanpa judul",
"Calendar:" : "Kalender:",
"Date:" : "Tanggal:",
"Where:" : "Tempat:",
"Description:" : "Deskripsi:",
"_%n year_::_%n years_" : ["%n tahun"],
"_%n month_::_%n months_" : ["%n bulan"],
"_%n day_::_%n days_" : ["%n hari"],
"_%n hour_::_%n hours_" : ["%n jam"],
"_%n minute_::_%n minutes_" : ["%n menit"],
"%s (in %s)" : "%s (dalam %s)",
"%s (%s ago)" : "%s (%s yang lalu)",
"Calendar: %s" : "Kalender: %s",
"Date: %s" : "Tanggal: %s",
"Description: %s" : "Deskripsi: %s",
"Where: %s" : "Di mana: %s",
"%1$s via %2$s" : "%1$s melalui %2$s",
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dalam %n menit pada %1$s untuk sepanjang hari"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dalam %n jam pada %1$s untuk sepanjang hari"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dalam %n hari pada %1$s untuk sepanjang hari"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dalam %n minggu pada %1$s untuk sepanjang hari"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dalam %n bulan pada %1$s untuk sepanjang hari"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dalam %n tahun pada %1$s untuk sepanjang hari"],
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dalam %n menit pada %1$s antara %2$s - %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dalam %n jam pada %1$s antara %2$s - %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Dalam %n hari pada %1$s antara %2$s - %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Dalam %n minggu pada %1$s antara %2$s - %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dalam %n bulan pada %1$s antara %2$s - %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Dalam %n tahun pada %1$s antara %2$s - %3$s"],
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
"Every Day for the entire day" : "Setiap hari sepanjang hari",
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
"In the past on %1$s" : "Di masa lalu pada %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Dalam %n menit pada %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Dalam %n jam pada %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Dalam %n hari pada %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["Dalam %n minggu pada %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Dalam %n bulan pada %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["Dalam %n tahun pada %1$s"],
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s dan %3$s"],
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
"Cancelled: %1$s" : "Dibatalkan: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
"Re: %1$s" : "Re: %1$s",
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
"Invitation: %1$s" : "Undangan: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
"Organizer:" : "Penyelenggara:",
"Attendees:" : "Peserta:",
"Title:" : "Judul:",
"When:" : "Kapan:",
"Location:" : "Lokasi:",
"Link:" : "Tautan:",
"Occurring:" : "Berlangsung:",
"Accept" : "Terima",
"Decline" : "Tolak",
"More options …" : "Opsi lainnya …",
"More options at %s" : "Opsi lainnya di %s",
"Monday" : "Senin",
"Tuesday" : "Selasa",
"Wednesday" : "Rabu",
"Thursday" : "Kamis",
"Friday" : "Jumat",
"Saturday" : "Sabtu",
"Sunday" : "Minggu",
"January" : "Januari",
"February" : "Februari",
"March" : "Maret",
"April" : "April",
"May" : "Mei",
"June" : "Juni",
"July" : "Juli",
"August" : "Agustus",
"September" : "September",
"October" : "Oktober",
"November" : "November",
"December" : "Desember",
"First" : "Pertama",
"Second" : "Kedua",
"Third" : "Ketiga",
"Fourth" : "Keempat",
"Fifth" : "Kelima",
"Last" : "Terakhir",
"Second Last" : "Kedua terakhir",
"Third Last" : "Ketiga terakhir",
"Fourth Last" : "Keempat terakhir",
"Fifth Last" : "Kelima terakhir",
"Contacts" : "Kontak",
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
"Could not write file contents" : "Tidak dapat menulis konten file",
"_%n byte_::_%n bytes_" : ["%n byte"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
"File not found: %1$s" : "File tidak ditemukan: %1$s",
"Invalid target path" : "Jalur tujuan tidak valid",
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
"Upgrade needed" : "Perlu peningkatan",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
"Events" : "Acara",
"Untitled task" : "Tugas tanpa judul",
"Completed on %s" : "Selesai pada %s",
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
"Due on %s" : "Jatuh tempo pada %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
"Example event - open me!" : "Acara contoh - buka saya!",
"System Address Book" : "Buku Alamat Sistem",
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
"DAV system address book" : "Buku alamat sistem DAV",
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
"Contacts and groups" : "Kontak dan grup",
"WebDAV" : "WebDAV",
"Absence saved" : "Ketidakhadiran disimpan",
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
"Absence cleared" : "Ketidakhadiran dihapus",
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
"First day" : "Hari pertama",
"Last day (inclusive)" : "Hari terakhir (termasuk)",
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
"Name of the replacement" : "Nama pengganti",
"Short absence status" : "Status ketidakhadiran singkat",
"Long absence Message" : "Pesan ketidakhadiran panjang",
"Save" : "Simpan",
"Disable absence" : "Nonaktifkan ketidakhadiran",
"Failed to load availability" : "Gagal memuat ketersediaan",
"Saved availability" : "Ketersediaan disimpan",
"Failed to save availability" : "Gagal menyimpan ketersediaan",
"to" : "untuk",
"Delete slot" : "Hapus slot",
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
"Add slot" : "Tambahkan slot",
"Weekdays" : "Hari kerja",
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
"Cancel" : "Batal",
"Import" : "Impor",
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
"Contact reset successfully" : "Kontak berhasil direset",
"Error while resetting contact" : "Kesalahan saat mereset kontak",
"Contact imported successfully" : "Kontak berhasil diimpor",
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
"Import contact" : "Impor kontak",
"Reset to default" : "Reset ke default",
"Import contacts" : "Impor kontak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
"Import calendar event" : "Impor acara kalender",
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
"Upload event" : "Unggah acara",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
"Calendar server" : "Server kalender",
"Send invitations to attendees" : "Kirim undangan kepada peserta",
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
"Send notifications for events" : "Kirim notifikasi untuk acara",
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
"Example content" : "Konten contoh",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
"Availability" : "Ketersediaan",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
"Absence" : "Ketidakhadiran",
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
"Tentative" : "Tentatif",
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dalam %n menit pada %1$s untuk sepanjang hari"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dalam %n jam pada %1$s untuk sepanjang hari"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dalam %n hari pada %1$s untuk sepanjang hari"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dalam %n minggu pada %1$s untuk sepanjang hari"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dalam %n bulan pada %1$s untuk sepanjang hari"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dalam %n tahun pada %1$s untuk sepanjang hari"],
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dalam %n menit pada %1$s antara %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dalam %n jam pada %1$s antara %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Dalam %n hari pada %1$s antara %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Dalam %n minggu pada %1$s antara %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dalam %n bulan pada %1$s antara %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Dalam %n tahun pada %1$s antara %2$s - %3$s"],
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Dalam %n menit pada %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Dalam %n jam pada %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["Dalam %n hari pada %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Dalam %n minggu pada %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["Dalam %n bulan pada %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["Dalam %n tahun pada %1$s"],
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s"],
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s dan %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s dan %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s dan %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s dan %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s dan %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s dan %3$s"],
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
"No results." : "Tidak ada hasil.",
"Start typing." : "Mulai mengetik.",
"Time zone:" : "Zona waktu:"
},
"nplurals=1; plural=0;");
+374
View File
@@ -0,0 +1,374 @@
{ "translations": {
"Calendar" : "Kalender",
"Tasks" : "Tugas",
"Personal" : "Pribadi",
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
"Untitled event" : "Acara tanpa judul",
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
"Busy" : "Sibuk",
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
"Contact birthdays" : "Ulang tahun kontak",
"Death of %s" : "Wafatnya %s",
"Untitled calendar" : "Kalender tanpa judul",
"Calendar:" : "Kalender:",
"Date:" : "Tanggal:",
"Where:" : "Tempat:",
"Description:" : "Deskripsi:",
"_%n year_::_%n years_" : ["%n tahun"],
"_%n month_::_%n months_" : ["%n bulan"],
"_%n day_::_%n days_" : ["%n hari"],
"_%n hour_::_%n hours_" : ["%n jam"],
"_%n minute_::_%n minutes_" : ["%n menit"],
"%s (in %s)" : "%s (dalam %s)",
"%s (%s ago)" : "%s (%s yang lalu)",
"Calendar: %s" : "Kalender: %s",
"Date: %s" : "Tanggal: %s",
"Description: %s" : "Deskripsi: %s",
"Where: %s" : "Di mana: %s",
"%1$s via %2$s" : "%1$s melalui %2$s",
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dalam %n menit pada %1$s untuk sepanjang hari"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dalam %n jam pada %1$s untuk sepanjang hari"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dalam %n hari pada %1$s untuk sepanjang hari"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dalam %n minggu pada %1$s untuk sepanjang hari"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dalam %n bulan pada %1$s untuk sepanjang hari"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dalam %n tahun pada %1$s untuk sepanjang hari"],
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dalam %n menit pada %1$s antara %2$s - %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dalam %n jam pada %1$s antara %2$s - %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Dalam %n hari pada %1$s antara %2$s - %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Dalam %n minggu pada %1$s antara %2$s - %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dalam %n bulan pada %1$s antara %2$s - %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Dalam %n tahun pada %1$s antara %2$s - %3$s"],
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
"Every Day for the entire day" : "Setiap hari sepanjang hari",
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
"In the past on %1$s" : "Di masa lalu pada %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Dalam %n menit pada %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Dalam %n jam pada %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Dalam %n hari pada %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["Dalam %n minggu pada %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Dalam %n bulan pada %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["Dalam %n tahun pada %1$s"],
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s dan %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s dan %3$s"],
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
"Cancelled: %1$s" : "Dibatalkan: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
"Re: %1$s" : "Re: %1$s",
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
"Invitation: %1$s" : "Undangan: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
"Organizer:" : "Penyelenggara:",
"Attendees:" : "Peserta:",
"Title:" : "Judul:",
"When:" : "Kapan:",
"Location:" : "Lokasi:",
"Link:" : "Tautan:",
"Occurring:" : "Berlangsung:",
"Accept" : "Terima",
"Decline" : "Tolak",
"More options …" : "Opsi lainnya …",
"More options at %s" : "Opsi lainnya di %s",
"Monday" : "Senin",
"Tuesday" : "Selasa",
"Wednesday" : "Rabu",
"Thursday" : "Kamis",
"Friday" : "Jumat",
"Saturday" : "Sabtu",
"Sunday" : "Minggu",
"January" : "Januari",
"February" : "Februari",
"March" : "Maret",
"April" : "April",
"May" : "Mei",
"June" : "Juni",
"July" : "Juli",
"August" : "Agustus",
"September" : "September",
"October" : "Oktober",
"November" : "November",
"December" : "Desember",
"First" : "Pertama",
"Second" : "Kedua",
"Third" : "Ketiga",
"Fourth" : "Keempat",
"Fifth" : "Kelima",
"Last" : "Terakhir",
"Second Last" : "Kedua terakhir",
"Third Last" : "Ketiga terakhir",
"Fourth Last" : "Keempat terakhir",
"Fifth Last" : "Kelima terakhir",
"Contacts" : "Kontak",
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
"Could not write file contents" : "Tidak dapat menulis konten file",
"_%n byte_::_%n bytes_" : ["%n byte"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
"File not found: %1$s" : "File tidak ditemukan: %1$s",
"Invalid target path" : "Jalur tujuan tidak valid",
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
"Upgrade needed" : "Perlu peningkatan",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
"Events" : "Acara",
"Untitled task" : "Tugas tanpa judul",
"Completed on %s" : "Selesai pada %s",
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
"Due on %s" : "Jatuh tempo pada %s",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
"Example event - open me!" : "Acara contoh - buka saya!",
"System Address Book" : "Buku Alamat Sistem",
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
"DAV system address book" : "Buku alamat sistem DAV",
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
"Contacts and groups" : "Kontak dan grup",
"WebDAV" : "WebDAV",
"Absence saved" : "Ketidakhadiran disimpan",
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
"Absence cleared" : "Ketidakhadiran dihapus",
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
"First day" : "Hari pertama",
"Last day (inclusive)" : "Hari terakhir (termasuk)",
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
"Name of the replacement" : "Nama pengganti",
"Short absence status" : "Status ketidakhadiran singkat",
"Long absence Message" : "Pesan ketidakhadiran panjang",
"Save" : "Simpan",
"Disable absence" : "Nonaktifkan ketidakhadiran",
"Failed to load availability" : "Gagal memuat ketersediaan",
"Saved availability" : "Ketersediaan disimpan",
"Failed to save availability" : "Gagal menyimpan ketersediaan",
"to" : "untuk",
"Delete slot" : "Hapus slot",
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
"Add slot" : "Tambahkan slot",
"Weekdays" : "Hari kerja",
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
"Cancel" : "Batal",
"Import" : "Impor",
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
"Contact reset successfully" : "Kontak berhasil direset",
"Error while resetting contact" : "Kesalahan saat mereset kontak",
"Contact imported successfully" : "Kontak berhasil diimpor",
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
"Import contact" : "Impor kontak",
"Reset to default" : "Reset ke default",
"Import contacts" : "Impor kontak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
"Import calendar event" : "Impor acara kalender",
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
"Upload event" : "Unggah acara",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
"Calendar server" : "Server kalender",
"Send invitations to attendees" : "Kirim undangan kepada peserta",
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
"Send notifications for events" : "Kirim notifikasi untuk acara",
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
"Example content" : "Konten contoh",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
"Availability" : "Ketersediaan",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
"Absence" : "Ketidakhadiran",
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
"Tentative" : "Tentatif",
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Dalam %n menit pada %1$s untuk sepanjang hari"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Dalam %n jam pada %1$s untuk sepanjang hari"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Dalam %n hari pada %1$s untuk sepanjang hari"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Dalam %n minggu pada %1$s untuk sepanjang hari"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Dalam %n bulan pada %1$s untuk sepanjang hari"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Dalam %n tahun pada %1$s untuk sepanjang hari"],
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Dalam %n menit pada %1$s antara %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Dalam %n jam pada %1$s antara %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Dalam %n hari pada %1$s antara %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Dalam %n minggu pada %1$s antara %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Dalam %n bulan pada %1$s antara %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Dalam %n tahun pada %1$s antara %2$s - %3$s"],
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Dalam %n menit pada %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Dalam %n jam pada %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["Dalam %n hari pada %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Dalam %n minggu pada %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["Dalam %n bulan pada %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["Dalam %n tahun pada %1$s"],
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s"],
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Dalam %n menit pada %1$s kemudian pada %2$s dan %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Dalam %n jam pada %1$s kemudian pada %2$s dan %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Dalam %n hari pada %1$s kemudian pada %2$s dan %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Dalam %n minggu pada %1$s kemudian pada %2$s dan %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Dalam %n bulan pada %1$s kemudian pada %2$s dan %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Dalam %n tahun pada %1$s kemudian pada %2$s dan %3$s"],
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
"No results." : "Tidak ada hasil.",
"Start typing." : "Mulai mengetik.",
"Time zone:" : "Zona waktu:"
},"pluralForm" :"nplurals=1; plural=0;"
}
+87
View File
@@ -73,7 +73,20 @@ OC.L10N.register(
"Where: %s" : "Waar: %s",
"%1$s via %2$s" : "%1$s via %2$s",
"In the past on %1$s for the entire day" : "In het verleden op %1$s gedurende de hele dag",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Over %n minuut op %1$s gedurende de hele dag","Over %n minuten op %1$s gedurende de hele dag"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Over %n uur op %1$s gedurende de hele dag","Over %n uur op %1$s gedurende de hele dag"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Over %n dag op %1$s gedurende de hele dag","Over %n dagen op %1$s gedurende de hele dag"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Over %n week op %1$s gedurende de hele dag","Over %n weken op %1$s gedurende de hele dag"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Over %n maand op %1$s gedurende de hele dag","Over %n maanden op %1$s gedurende de hele dag"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Over %n jaar op %1$s gedurende de hele dag","Over %n jaar op %1$s gedurende de hele dag"],
"In the past on %1$s between %2$s - %3$s" : "In het verleden op %1$s van %2$s tot %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Over %n minuut op %1$s van %2$s tot %3$s","Over %n minuten op %1$s van %2$s tot %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Over %n uur op %1$s van %2$s tot%3$s","Over %n uur op %1$s van %2$s tot %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Over %n dag op %1$s van %2$s tot %3$s","Over %n dagen op %1$s van %2$s tot %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Over %n week op %1$s van %2$s tot %3$s","Over %n weken op %1$s van %2$s tot %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Over %n maand op %1$s van %2$s tot %3$s","Over %n maanden op %1$s van %2$s tot %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Over %n jaar op %1$s van %2$s tot %3$s","Over %n jaar op %1$s van %2$s tot %3$s"],
"Could not generate when statement" : "Kon geen when-statement genereren",
"Every Day for the entire day" : "Elke dag gedurende de hele dag",
"Every Day for the entire day until %1$s" : "Elke dag gedurende de hele dag tot %1$s",
"Every Day between %1$s - %2$s" : "Elke dag van %1$s tot %2$s",
@@ -82,6 +95,7 @@ OC.L10N.register(
"Every %1$d Days for the entire day until %2$s" : "Elke %1$d dagen gedurende de hele dag tot %2$s",
"Every %1$d Days between %2$s - %3$s" : "Elke %1$d dagen van %2$s tot %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Elke %1$d dagen van %2$s tot %3$s, tot %4$s ",
"Could not generate event recurrence statement" : "Kan geen herhalingsinstructie voor gebeurtenis genereren",
"Every Week on %1$s for the entire day" : "Elke week op %1$s gedurende de hele dag",
"Every Week on %1$s for the entire day until %2$s" : "Elke week op %1$s gedurende de hele dag tot %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Elke week op %1$s van %2$s tot %3$s",
@@ -109,8 +123,27 @@ OC.L10N.register(
"On specific dates for the entire day until %1$s" : "Op specifieke dagen gedurende de hele dag tot %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Op specifieke dagen van %1$s tot %2$s, tot %3$s",
"In the past on %1$s" : "In het verleden op %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Over %n minuut om %1$s","Over %n minuten om %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Over %n uur om %1$s","Over %n uur om %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Over %n dag op %1$s","Over %n dagen op %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["Over %n week op %1$s","Over %n weken op %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Over %n maand op %1$s","Over %n maanden op %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["Over %n jaar op %1$s","Over %n jaar op %1$s"],
"In the past on %1$s then on %2$s" : "In het verleden op %1$s dan op %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Over %n minuut op %1$s dan op %2$s","Over %n minuten op %1$s dan op %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Over %n uur op %1$s dan op %2$s","Over %n uren op %1$s dan op %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Over %n dag op %1$s dan op %2$s","Over %n dagen op %1$s dan op %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Over %n week op %1$s dan op %2$s","Over %n weken op %1$s dan op %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Over %n maand op %1$s dan op %2$s","Over %n maanden op %1$s dan op %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Over %n jaar op %1$s dan op %2$s","Over %n jaar op %1$s dan op %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "In het verleden op %1$s dan op %2$s en %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Over %n minuut op %1$s dan op %2$s en %3$s","Over %n minuten op %1$s dan op %2$s en %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Over %n uur op %1$s dan op %2$s en %3$s","Over %n uur op %1$s dan op %2$s en %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Over %n dag op %1$s dan op %2$s en %3$s","Over %n dagen op %1$s dan op %2$s en %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Over %n week op %1$s dan op %2$s en %3$s","Over %n weken op %1$s dan op %2$s en %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Over %n maand op %1$s dan op %2$s en %3$s","Over %n maanden op %1$s dan op %2$s en %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Over %n jaar op %1$s dan op %2$s en %3$s","Over %n jaar op %1$s dan op %2$s en %3$s"],
"Could not generate next recurrence statement" : "Kan volgende herhalingsinstructie niet genereren",
"Cancelled: %1$s" : "Geannuleerd: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" is geannuleerd",
"Re: %1$s" : "Re: %1$s",
@@ -159,6 +192,9 @@ OC.L10N.register(
"Fifth" : "Vijfde",
"Last" : "Laatste",
"Second Last" : "Voorlaatste",
"Third Last" : "Derde Laatste",
"Fourth Last" : "Vierde Laatste",
"Fifth Last" : "Vijfde Laatste",
"Contacts" : "Contactpersonen",
"{actor} created address book {addressbook}" : "{actor} creëerde adresboek {addressbook}",
"You created address book {addressbook}" : "Je creëerde adresboek {addressbook}",
@@ -184,18 +220,28 @@ OC.L10N.register(
"{actor} updated contact {card} in address book {addressbook}" : "{actor} wijzigde contact {card} in adresboek {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Je wijzigde contact {card} in adresboek {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Een <strong>contactpersoon</strong> of <strong>adresboek</strong> is gewijzigd",
"System address book disabled" : "Systeem-adresboek uitgeschakeld",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Het systeem contacten adresboek is automatisch uitgeschakeld na een upgrade. Dit betekent dat het adresboek niet langer beschikbaar is voor de gebruikers in de contacten app of andere clients. Het systeem contacten adresboek is uitgeschakeld omdat het aantal contacten het maximaal aangeraden aantal contacten overschreed. Deze limiet is ingesteld om performantie problemen te voorkomen. Je kan het systeem-adresboek opnieuw inschakelen met volgend commando {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Systeem-adresboek met daarin alle accounts",
"File is not updatable: %1$s" : "Bestand kon niet worden geüpdatet %1$s",
"Failed to get storage for file" : "Opslag bestand ophalen mislukt",
"Could not write to final file, canceled by hook" : "Kon finaal bestand niet schrijven, geannuleerd door hook",
"Could not write file contents" : "Kon bestandsinhoud niet schrijven",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Fout tijdens het kopiëren naar de doel locatie (gekopieerd: %1$s, verwachte bestandsgrootte: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Verwachte bestandsgrootte van %1$s maar gelezen (van Nextcloud-client) en geschreven (naar Nextcloud-opslag) %2$s. Dit kan een netwerkprobleem zijn aan de verzendende kant of een probleem met het schrijven naar de opslag aan de serverkant.",
"Could not rename part file to final file, canceled by hook" : "Kon bestandsdeel niet hernoemen naar definitief bestand, geannuleerd door hook",
"Could not rename part file to final file" : "Kon bestandsdeel niet hernoemen naar definitief bestand",
"Failed to check file size: %1$s" : "Kon bestandsomvang niet controleren: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Kon bestand niet openen: %1$s (%2$d), bestand lijkt wel te bestaan",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Kon bestand niet openen: %1$s (%2$d), bestand lijkt niet te bestaan",
"Encryption not ready: %1$s" : "Versleuteling niet gereed: %1$s",
"Failed to open file: %1$s" : "Kon het bestand %1$s niet openen",
"Failed to unlink: %1$s" : "Kon link niet verwijderen: %1$s",
"Failed to write file contents: %1$s" : "Kon bestandsinhoud niet wegschrijven: %1$s",
"File not found: %1$s" : "Bestand niet gevonden: %1$s",
"Invalid target path" : "Ongeldig doel pad",
"System is in maintenance mode." : "Systeem in onderhoudsmodus.",
"Upgrade needed" : "Upgrade vereist",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Je %s moet worden geconfigureerd voor gebruik van HTTPS om CalDAV en CardDAV met iOS/macOS te kunnen gebruiken.",
@@ -211,10 +257,27 @@ OC.L10N.register(
"System Address Book" : "Systeem-adresboek",
"The system address book contains contact information for all users in your instance." : "Het systeem-adresboek bevat contactgegevens van alle gebruikers op jouw server.",
"Enable System Address Book" : "Systeem-adresboek inschakelen",
"DAV system address book" : "DAV systeem-adresboek",
"No outstanding DAV system address book sync." : "Geen uitstaande DAV systeem-adresboek synchronisatie.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "De DAV systeem-adresboek synchronisatie is niet uitgevoerd omdat jouw instantie meer dan 1000 gebruikers heeft of omdat een fout is opgetreden. Voer het handmatig uit door \"occ dav:sync-system-addressbook\" aan te roepen.",
"DAV system address book size" : "DAV systeem-adresboek grootte",
"The system address book is disabled" : "Het systeem-adresboek is uitgeschakeld",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Het systeem-adresboek is ingeschakeld, maar bevat meer dan de geconfigureerde limiet van %d contacten.",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Het systeem-adresboek is ingeschakeld en bevat minder dan de geconfigureerde limiet van %d contacten",
"WebDAV endpoint" : "WebDAV eindpunt",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Kan niet controleren of uw webserver correct is ingesteld om bestandssynchronisatie via WebDAV toe te staan. Controleer dit handmatig.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Je webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface niet goed lijkt te werken.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Jouw webserver is goed ingesteld om bestandssynchronisatie toe te staan via WebDAV.",
"Migrated calendar (%1$s)" : "Agenda gemigreerd (%1$s)",
"Calendars including events, details and attendees" : "Agenda's met afspraken, details en deelnemers",
"Contacts and groups" : "Contactpersonen en groepen",
"WebDAV" : "WebDAV",
"Absence saved" : "Afwezigheid opgeslagen",
"Failed to save your absence settings" : "Jouw afwezigheidsinstellingen opslaan is mislukt",
"Absence cleared" : "Afwezigheid gewist",
"Failed to clear your absence settings" : "Jouw afwezigheidsinstellingen wissen is mislukt",
"First day" : "Eerste dag",
"Last day (inclusive)" : "Laatste dag (inclusief)",
"Out of office replacement (optional)" : "Vervanger bij afwezigheid (optioneel)",
"Name of the replacement" : "Naam van de vervanger",
"Short absence status" : "Korte afwezigheidsstatus",
@@ -229,11 +292,28 @@ OC.L10N.register(
"No working hours set" : "Geen werkuren ingesteld",
"Add slot" : "Voeg slot toe",
"Weekdays" : "Weekdagen",
"Pick a start time for {dayName}" : "Kies een starttijd voor {dayName}",
"Pick a end time for {dayName}" : "Kies een eindtijd voor {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Stel de gebruikersstatus automatisch in op \"Niet storen\" buiten de beschikbaarheid om alle meldingen te dempen.",
"Cancel" : "Annuleren",
"Import" : "Import",
"Error while saving settings" : "Probleem tijdens het opslaan van instellingen",
"Contact reset successfully" : "Contact succesvol gereset",
"Error while resetting contact" : "Fout tijdens het resetten van contact",
"Contact imported successfully" : "Contact succesvol geïmporteerd",
"Error while importing contact" : "Fout bij het importeren van het contact",
"Import contact" : "Importeer contact",
"Reset to default" : "Herstellen naar standaard",
"Import contacts" : "Importeer contacten",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Door een nieuw .vcf bestand te importeren, zal het bestaande standaard contact verwijderen en vervangen worden door het nieuwe. Wil je doorgaan?",
"Failed to save example event creation setting" : "Kan voorbeeldinstelling voor gebeurtenis aanmaken niet opslaan",
"Failed to upload the example event" : "Kon de voorbeeld gebeurtenis niet uploaden",
"Custom example event was saved successfully" : "Aangepast voorbeeld afspraak is met succes opgeslagen",
"Failed to delete the custom example event" : "Kon aangepast voorbeeld afspraak niet verwijderen",
"Custom example event was deleted successfully" : "Aangepaste voorbeeld afspraak met succes verwijderd",
"Import calendar event" : "Importeer agenda afspraak",
"Uploading a new event will overwrite the existing one." : "Een nieuwe afspraak uploaden zal de bestaande overschrijven.",
"Upload event" : "Upload afspraak",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installeer ook de {calendarappstoreopen}Agenda app{linkclose}, of {calendardocopen}verbind je desktop & mobiel voor synchronisatie ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Zorg ervoor dat je de {emailopen}de e-mailserver{linkclose} correct instelt.",
"Calendar server" : "Agendaserver",
@@ -243,8 +323,13 @@ OC.L10N.register(
"Hence they will not be available immediately after enabling but will show up after some time." : "Hierdoor zullen ze niet meteen beschikbaar zijn na het inschakelen maar zullen na een tijdje verschijnen.",
"Send notifications for events" : "Versturen meldingen voor afspraken",
"Notifications are sent via background jobs, so these must occur often enough." : "Meldingen worden via achtergrondtaken verstuurd, dus die moeten vaak genoeg plaatsvinden.",
"Send reminder notifications to calendar sharees as well" : "Stuur ook herinneringsmeldingen naar personen die de agenda delen",
"Reminders are always sent to organizers and attendees." : "Herinneringen worden altijd verzonden naar organisatoren en deelnemers.",
"Enable notifications for events via push" : "Inschakelen push-melding voor afspraken",
"Example content" : "Voorbeeld inhoud",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Voorbeeld inhoud dient ter illustratie van de kenmerken van Nextcloud. Standaard inhoud wordt geleverd met Nextcloud, en can worden vervangen met aangepaste inhoud. ",
"Availability" : "Beschikbaarheid",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Als je werkuren configureert, zullen andere mensen zien wanneer je afwezig bent als ze een vergadering boeken.",
"Absence" : "Afwezigheid",
"Configure your next absence period." : "Configureer uw volgende afwezigheidsperiode.",
"There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.",
@@ -282,6 +367,8 @@ OC.L10N.register(
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Over een week op %1$s dan op %2$s en %3$s","Over %n weken op %1$s dan op %2$s en %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Over een maand op %1$s dan op %2$s en %3$s","Over %n maanden op %1$s then on %2$s and %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Over een jaar op %1$s dan op %2$s en %3$s","Over %n jaren op %1$s dan op %2$s en %3$s"],
"Could not open file: %1$s, file does seem to exist" : "Kon bestand niet openen: %1$s, bestand lijkt wel te bestaan",
"Could not open file: %1$s, file doesn't seem to exist" : "Kon bestand niet openen: %1$s, bestand lijkt niet te bestaan",
"No results." : "Geen resultaten.",
"Start typing." : "Start met typen.",
"Time zone:" : "Tijdzone:"
+87
View File
@@ -71,7 +71,20 @@
"Where: %s" : "Waar: %s",
"%1$s via %2$s" : "%1$s via %2$s",
"In the past on %1$s for the entire day" : "In het verleden op %1$s gedurende de hele dag",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Over %n minuut op %1$s gedurende de hele dag","Over %n minuten op %1$s gedurende de hele dag"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Over %n uur op %1$s gedurende de hele dag","Over %n uur op %1$s gedurende de hele dag"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Over %n dag op %1$s gedurende de hele dag","Over %n dagen op %1$s gedurende de hele dag"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Over %n week op %1$s gedurende de hele dag","Over %n weken op %1$s gedurende de hele dag"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Over %n maand op %1$s gedurende de hele dag","Over %n maanden op %1$s gedurende de hele dag"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Over %n jaar op %1$s gedurende de hele dag","Over %n jaar op %1$s gedurende de hele dag"],
"In the past on %1$s between %2$s - %3$s" : "In het verleden op %1$s van %2$s tot %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Over %n minuut op %1$s van %2$s tot %3$s","Over %n minuten op %1$s van %2$s tot %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Over %n uur op %1$s van %2$s tot%3$s","Over %n uur op %1$s van %2$s tot %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Over %n dag op %1$s van %2$s tot %3$s","Over %n dagen op %1$s van %2$s tot %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Over %n week op %1$s van %2$s tot %3$s","Over %n weken op %1$s van %2$s tot %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Over %n maand op %1$s van %2$s tot %3$s","Over %n maanden op %1$s van %2$s tot %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Over %n jaar op %1$s van %2$s tot %3$s","Over %n jaar op %1$s van %2$s tot %3$s"],
"Could not generate when statement" : "Kon geen when-statement genereren",
"Every Day for the entire day" : "Elke dag gedurende de hele dag",
"Every Day for the entire day until %1$s" : "Elke dag gedurende de hele dag tot %1$s",
"Every Day between %1$s - %2$s" : "Elke dag van %1$s tot %2$s",
@@ -80,6 +93,7 @@
"Every %1$d Days for the entire day until %2$s" : "Elke %1$d dagen gedurende de hele dag tot %2$s",
"Every %1$d Days between %2$s - %3$s" : "Elke %1$d dagen van %2$s tot %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Elke %1$d dagen van %2$s tot %3$s, tot %4$s ",
"Could not generate event recurrence statement" : "Kan geen herhalingsinstructie voor gebeurtenis genereren",
"Every Week on %1$s for the entire day" : "Elke week op %1$s gedurende de hele dag",
"Every Week on %1$s for the entire day until %2$s" : "Elke week op %1$s gedurende de hele dag tot %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Elke week op %1$s van %2$s tot %3$s",
@@ -107,8 +121,27 @@
"On specific dates for the entire day until %1$s" : "Op specifieke dagen gedurende de hele dag tot %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Op specifieke dagen van %1$s tot %2$s, tot %3$s",
"In the past on %1$s" : "In het verleden op %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["Over %n minuut om %1$s","Over %n minuten om %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["Over %n uur om %1$s","Over %n uur om %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["Over %n dag op %1$s","Over %n dagen op %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["Over %n week op %1$s","Over %n weken op %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["Over %n maand op %1$s","Over %n maanden op %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["Over %n jaar op %1$s","Over %n jaar op %1$s"],
"In the past on %1$s then on %2$s" : "In het verleden op %1$s dan op %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Over %n minuut op %1$s dan op %2$s","Over %n minuten op %1$s dan op %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Over %n uur op %1$s dan op %2$s","Over %n uren op %1$s dan op %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Over %n dag op %1$s dan op %2$s","Over %n dagen op %1$s dan op %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Over %n week op %1$s dan op %2$s","Over %n weken op %1$s dan op %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Over %n maand op %1$s dan op %2$s","Over %n maanden op %1$s dan op %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Over %n jaar op %1$s dan op %2$s","Over %n jaar op %1$s dan op %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "In het verleden op %1$s dan op %2$s en %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Over %n minuut op %1$s dan op %2$s en %3$s","Over %n minuten op %1$s dan op %2$s en %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Over %n uur op %1$s dan op %2$s en %3$s","Over %n uur op %1$s dan op %2$s en %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Over %n dag op %1$s dan op %2$s en %3$s","Over %n dagen op %1$s dan op %2$s en %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Over %n week op %1$s dan op %2$s en %3$s","Over %n weken op %1$s dan op %2$s en %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Over %n maand op %1$s dan op %2$s en %3$s","Over %n maanden op %1$s dan op %2$s en %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Over %n jaar op %1$s dan op %2$s en %3$s","Over %n jaar op %1$s dan op %2$s en %3$s"],
"Could not generate next recurrence statement" : "Kan volgende herhalingsinstructie niet genereren",
"Cancelled: %1$s" : "Geannuleerd: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" is geannuleerd",
"Re: %1$s" : "Re: %1$s",
@@ -157,6 +190,9 @@
"Fifth" : "Vijfde",
"Last" : "Laatste",
"Second Last" : "Voorlaatste",
"Third Last" : "Derde Laatste",
"Fourth Last" : "Vierde Laatste",
"Fifth Last" : "Vijfde Laatste",
"Contacts" : "Contactpersonen",
"{actor} created address book {addressbook}" : "{actor} creëerde adresboek {addressbook}",
"You created address book {addressbook}" : "Je creëerde adresboek {addressbook}",
@@ -182,18 +218,28 @@
"{actor} updated contact {card} in address book {addressbook}" : "{actor} wijzigde contact {card} in adresboek {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Je wijzigde contact {card} in adresboek {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Een <strong>contactpersoon</strong> of <strong>adresboek</strong> is gewijzigd",
"System address book disabled" : "Systeem-adresboek uitgeschakeld",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Het systeem contacten adresboek is automatisch uitgeschakeld na een upgrade. Dit betekent dat het adresboek niet langer beschikbaar is voor de gebruikers in de contacten app of andere clients. Het systeem contacten adresboek is uitgeschakeld omdat het aantal contacten het maximaal aangeraden aantal contacten overschreed. Deze limiet is ingesteld om performantie problemen te voorkomen. Je kan het systeem-adresboek opnieuw inschakelen met volgend commando {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Systeem-adresboek met daarin alle accounts",
"File is not updatable: %1$s" : "Bestand kon niet worden geüpdatet %1$s",
"Failed to get storage for file" : "Opslag bestand ophalen mislukt",
"Could not write to final file, canceled by hook" : "Kon finaal bestand niet schrijven, geannuleerd door hook",
"Could not write file contents" : "Kon bestandsinhoud niet schrijven",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Fout tijdens het kopiëren naar de doel locatie (gekopieerd: %1$s, verwachte bestandsgrootte: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Verwachte bestandsgrootte van %1$s maar gelezen (van Nextcloud-client) en geschreven (naar Nextcloud-opslag) %2$s. Dit kan een netwerkprobleem zijn aan de verzendende kant of een probleem met het schrijven naar de opslag aan de serverkant.",
"Could not rename part file to final file, canceled by hook" : "Kon bestandsdeel niet hernoemen naar definitief bestand, geannuleerd door hook",
"Could not rename part file to final file" : "Kon bestandsdeel niet hernoemen naar definitief bestand",
"Failed to check file size: %1$s" : "Kon bestandsomvang niet controleren: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Kon bestand niet openen: %1$s (%2$d), bestand lijkt wel te bestaan",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Kon bestand niet openen: %1$s (%2$d), bestand lijkt niet te bestaan",
"Encryption not ready: %1$s" : "Versleuteling niet gereed: %1$s",
"Failed to open file: %1$s" : "Kon het bestand %1$s niet openen",
"Failed to unlink: %1$s" : "Kon link niet verwijderen: %1$s",
"Failed to write file contents: %1$s" : "Kon bestandsinhoud niet wegschrijven: %1$s",
"File not found: %1$s" : "Bestand niet gevonden: %1$s",
"Invalid target path" : "Ongeldig doel pad",
"System is in maintenance mode." : "Systeem in onderhoudsmodus.",
"Upgrade needed" : "Upgrade vereist",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Je %s moet worden geconfigureerd voor gebruik van HTTPS om CalDAV en CardDAV met iOS/macOS te kunnen gebruiken.",
@@ -209,10 +255,27 @@
"System Address Book" : "Systeem-adresboek",
"The system address book contains contact information for all users in your instance." : "Het systeem-adresboek bevat contactgegevens van alle gebruikers op jouw server.",
"Enable System Address Book" : "Systeem-adresboek inschakelen",
"DAV system address book" : "DAV systeem-adresboek",
"No outstanding DAV system address book sync." : "Geen uitstaande DAV systeem-adresboek synchronisatie.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "De DAV systeem-adresboek synchronisatie is niet uitgevoerd omdat jouw instantie meer dan 1000 gebruikers heeft of omdat een fout is opgetreden. Voer het handmatig uit door \"occ dav:sync-system-addressbook\" aan te roepen.",
"DAV system address book size" : "DAV systeem-adresboek grootte",
"The system address book is disabled" : "Het systeem-adresboek is uitgeschakeld",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Het systeem-adresboek is ingeschakeld, maar bevat meer dan de geconfigureerde limiet van %d contacten.",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Het systeem-adresboek is ingeschakeld en bevat minder dan de geconfigureerde limiet van %d contacten",
"WebDAV endpoint" : "WebDAV eindpunt",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Kan niet controleren of uw webserver correct is ingesteld om bestandssynchronisatie via WebDAV toe te staan. Controleer dit handmatig.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Je webserver is nog niet goed ingesteld voor bestandssynchronisatie, omdat de WebDAV interface niet goed lijkt te werken.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Jouw webserver is goed ingesteld om bestandssynchronisatie toe te staan via WebDAV.",
"Migrated calendar (%1$s)" : "Agenda gemigreerd (%1$s)",
"Calendars including events, details and attendees" : "Agenda's met afspraken, details en deelnemers",
"Contacts and groups" : "Contactpersonen en groepen",
"WebDAV" : "WebDAV",
"Absence saved" : "Afwezigheid opgeslagen",
"Failed to save your absence settings" : "Jouw afwezigheidsinstellingen opslaan is mislukt",
"Absence cleared" : "Afwezigheid gewist",
"Failed to clear your absence settings" : "Jouw afwezigheidsinstellingen wissen is mislukt",
"First day" : "Eerste dag",
"Last day (inclusive)" : "Laatste dag (inclusief)",
"Out of office replacement (optional)" : "Vervanger bij afwezigheid (optioneel)",
"Name of the replacement" : "Naam van de vervanger",
"Short absence status" : "Korte afwezigheidsstatus",
@@ -227,11 +290,28 @@
"No working hours set" : "Geen werkuren ingesteld",
"Add slot" : "Voeg slot toe",
"Weekdays" : "Weekdagen",
"Pick a start time for {dayName}" : "Kies een starttijd voor {dayName}",
"Pick a end time for {dayName}" : "Kies een eindtijd voor {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Stel de gebruikersstatus automatisch in op \"Niet storen\" buiten de beschikbaarheid om alle meldingen te dempen.",
"Cancel" : "Annuleren",
"Import" : "Import",
"Error while saving settings" : "Probleem tijdens het opslaan van instellingen",
"Contact reset successfully" : "Contact succesvol gereset",
"Error while resetting contact" : "Fout tijdens het resetten van contact",
"Contact imported successfully" : "Contact succesvol geïmporteerd",
"Error while importing contact" : "Fout bij het importeren van het contact",
"Import contact" : "Importeer contact",
"Reset to default" : "Herstellen naar standaard",
"Import contacts" : "Importeer contacten",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Door een nieuw .vcf bestand te importeren, zal het bestaande standaard contact verwijderen en vervangen worden door het nieuwe. Wil je doorgaan?",
"Failed to save example event creation setting" : "Kan voorbeeldinstelling voor gebeurtenis aanmaken niet opslaan",
"Failed to upload the example event" : "Kon de voorbeeld gebeurtenis niet uploaden",
"Custom example event was saved successfully" : "Aangepast voorbeeld afspraak is met succes opgeslagen",
"Failed to delete the custom example event" : "Kon aangepast voorbeeld afspraak niet verwijderen",
"Custom example event was deleted successfully" : "Aangepaste voorbeeld afspraak met succes verwijderd",
"Import calendar event" : "Importeer agenda afspraak",
"Uploading a new event will overwrite the existing one." : "Een nieuwe afspraak uploaden zal de bestaande overschrijven.",
"Upload event" : "Upload afspraak",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installeer ook de {calendarappstoreopen}Agenda app{linkclose}, of {calendardocopen}verbind je desktop & mobiel voor synchronisatie ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Zorg ervoor dat je de {emailopen}de e-mailserver{linkclose} correct instelt.",
"Calendar server" : "Agendaserver",
@@ -241,8 +321,13 @@
"Hence they will not be available immediately after enabling but will show up after some time." : "Hierdoor zullen ze niet meteen beschikbaar zijn na het inschakelen maar zullen na een tijdje verschijnen.",
"Send notifications for events" : "Versturen meldingen voor afspraken",
"Notifications are sent via background jobs, so these must occur often enough." : "Meldingen worden via achtergrondtaken verstuurd, dus die moeten vaak genoeg plaatsvinden.",
"Send reminder notifications to calendar sharees as well" : "Stuur ook herinneringsmeldingen naar personen die de agenda delen",
"Reminders are always sent to organizers and attendees." : "Herinneringen worden altijd verzonden naar organisatoren en deelnemers.",
"Enable notifications for events via push" : "Inschakelen push-melding voor afspraken",
"Example content" : "Voorbeeld inhoud",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Voorbeeld inhoud dient ter illustratie van de kenmerken van Nextcloud. Standaard inhoud wordt geleverd met Nextcloud, en can worden vervangen met aangepaste inhoud. ",
"Availability" : "Beschikbaarheid",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Als je werkuren configureert, zullen andere mensen zien wanneer je afwezig bent als ze een vergadering boeken.",
"Absence" : "Afwezigheid",
"Configure your next absence period." : "Configureer uw volgende afwezigheidsperiode.",
"There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.",
@@ -280,6 +365,8 @@
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Over een week op %1$s dan op %2$s en %3$s","Over %n weken op %1$s dan op %2$s en %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Over een maand op %1$s dan op %2$s en %3$s","Over %n maanden op %1$s then on %2$s and %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Over een jaar op %1$s dan op %2$s en %3$s","Over %n jaren op %1$s dan op %2$s en %3$s"],
"Could not open file: %1$s, file does seem to exist" : "Kon bestand niet openen: %1$s, bestand lijkt wel te bestaan",
"Could not open file: %1$s, file doesn't seem to exist" : "Kon bestand niet openen: %1$s, bestand lijkt niet te bestaan",
"No results." : "Geen resultaten.",
"Start typing." : "Start met typen.",
"Time zone:" : "Tijdzone:"
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Parça dosyası sonuç dosyası olarak yeniden adlandırılamadı, bağlantı tarafından iptal edildi",
"Could not rename part file to final file" : "Parça dosyası sonuç dosyası olarak yeniden adlandırılamadı",
"Failed to check file size: %1$s" : "Dosya boyutu denetlenemedi: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünüyor",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünmüyor",
"Encryption not ready: %1$s" : "Şifreleme hazır değil: %1$s",
"Failed to open file: %1$s" : "Dosya açılamadı: %1$s",
"Failed to unlink: %1$s" : "Bağlantı kaldırılamadı: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Parça dosyası sonuç dosyası olarak yeniden adlandırılamadı, bağlantı tarafından iptal edildi",
"Could not rename part file to final file" : "Parça dosyası sonuç dosyası olarak yeniden adlandırılamadı",
"Failed to check file size: %1$s" : "Dosya boyutu denetlenemedi: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünüyor",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Dosya açılamadı: %1$s (%2$d), dosya var gibi görünmüyor",
"Encryption not ready: %1$s" : "Şifreleme hazır değil: %1$s",
"Failed to open file: %1$s" : "Dosya açılamadı: %1$s",
"Failed to unlink: %1$s" : "Bağlantı kaldırılamadı: %1$s",
+2 -2
View File
@@ -242,10 +242,10 @@ OC.L10N.register(
"Last day (inclusive)" : "Останній день (включно)",
"Out of office replacement (optional)" : "Заміна під час відсутності (необов'язково)",
"Name of the replacement" : "Ім'я заступника",
"Short absence status" : "Короткий статус відсутности",
"Short absence status" : "Коротке повідомлення про відсутність",
"Long absence Message" : "Довге повідомлення про відсутність",
"Save" : "Зберегти",
"Disable absence" : "Вимкнути відсутність",
"Disable absence" : "Вимкнути",
"Failed to load availability" : "Не вдалося завантажити доступність",
"Saved availability" : "Збережена наявність",
"Failed to save availability" : "Не вдалося зберегти наявність",
+2 -2
View File
@@ -240,10 +240,10 @@
"Last day (inclusive)" : "Останній день (включно)",
"Out of office replacement (optional)" : "Заміна під час відсутності (необов'язково)",
"Name of the replacement" : "Ім'я заступника",
"Short absence status" : "Короткий статус відсутности",
"Short absence status" : "Коротке повідомлення про відсутність",
"Long absence Message" : "Довге повідомлення про відсутність",
"Save" : "Зберегти",
"Disable absence" : "Вимкнути відсутність",
"Disable absence" : "Вимкнути",
"Failed to load availability" : "Не вдалося завантажити доступність",
"Saved availability" : "Збережена наявність",
"Failed to save availability" : "Не вдалося зберегти наявність",
+2 -2
View File
@@ -14,7 +14,7 @@ use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
use OCA\DAV\CalDAV\Integration\ICalendarProvider;
use OCA\DAV\CardDAV\Integration\IAddressBookProvider;
use OCP\App\IAppManager;
use OCP\AppFramework\QueryException;
use Psr\Container\ContainerExceptionInterface;
use Sabre\DAV\Collection;
use Sabre\DAV\ServerPlugin;
use function array_map;
@@ -229,7 +229,7 @@ class PluginManager {
private function createClass(string $className): object {
try {
return $this->container->get($className);
} catch (QueryException $e) {
} catch (ContainerExceptionInterface $e) {
if (class_exists($className)) {
return new $className();
}
+5 -4
View File
@@ -16,6 +16,8 @@ use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
use OCP\IConfig;
use OCP\Server;
use Psr\Log\LoggerInterface;
class UploadCleanup extends TimedJob {
@@ -47,8 +49,9 @@ class UploadCleanup extends TimedJob {
return;
}
// Remove if all files have an mtime of more than a day
$time = $this->time->getTime() - 60 * 60 * 24;
// Remove if all files have an mtime of more than a day or configured TTL
$ttl = Server::get(IConfig::class)->getSystemValueInt('cache_chunk_gc_ttl', 60 * 60 * 24);
$time = $this->time->getTime() - $ttl;
if (!($uploadFolder instanceof Folder)) {
$this->logger->error('Found a file inside the uploads folder. Uid: ' . $uid . ' folder: ' . $folder);
@@ -61,8 +64,6 @@ class UploadCleanup extends TimedJob {
/** @var File[] $files */
$files = $uploadFolder->getDirectoryListing();
// The folder has to be more than a day old
$initial = $uploadFolder->getMTime() < $time;
$expire = array_reduce($files, function (bool $carry, File $file) use ($time) {
@@ -9,8 +9,8 @@ declare(strict_types=1);
namespace OCA\DAV\CalDAV\Reminder;
use OCA\DAV\CalDAV\Reminder\NotificationProvider\ProviderNotAvailableException;
use OCP\AppFramework\QueryException;
use OCP\Server;
use Psr\Container\ContainerExceptionInterface;
/**
* Class NotificationProviderManager
@@ -55,7 +55,7 @@ class NotificationProviderManager {
* Registers a new provider
*
* @param string $providerClassName
* @throws QueryException
* @throws ContainerExceptionInterface
*/
public function registerProvider(string $providerClassName):void {
$provider = Server::get($providerClassName);
+1 -2
View File
@@ -15,7 +15,6 @@ use OCA\DAV\CardDAV\Integration\ExternalAddressBook;
use OCA\DAV\CardDAV\Integration\IAddressBookProvider;
use OCA\DAV\ConfigLexicon;
use OCA\Federation\TrustedServers;
use OCP\AppFramework\QueryException;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IGroupManager;
@@ -83,7 +82,7 @@ class UserAddressBooks extends \Sabre\CardDAV\AddressBookHome {
try {
$trustedServers = Server::get(TrustedServers::class);
$request = Server::get(IRequest::class);
} catch (QueryException|NotFoundExceptionInterface|ContainerExceptionInterface $e) {
} catch (NotFoundExceptionInterface|ContainerExceptionInterface $e) {
// nothing to do, the request / trusted servers don't exist
}
if ($addressBook['principaluri'] === 'principals/system/system') {
@@ -49,7 +49,7 @@ class BlockLegacyClientPlugin extends ServerPlugin {
return;
}
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.0.82');
$minimumSupportedDesktopVersion = $this->config->getSystemValueString('minimum.supported.desktop.version', '3.1.50');
$maximumSupportedDesktopVersion = $this->config->getSystemValueString('maximum.supported.desktop.version', '99.99.99');
// Check if the client is a desktop client
+3 -3
View File
@@ -17,7 +17,6 @@ use OCP\Accounts\IAccountManager;
use OCP\Accounts\IAccountProperty;
use OCP\Accounts\PropertyDoesNotExistException;
use OCP\App\IAppManager;
use OCP\AppFramework\QueryException;
use OCP\Constants;
use OCP\IConfig;
use OCP\IGroup;
@@ -27,6 +26,7 @@ use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\Share\IManager as IShareManager;
use Psr\Container\ContainerExceptionInterface;
use Sabre\DAV\Exception;
use Sabre\DAV\PropPatch;
use Sabre\DAVACL\PrincipalBackend\BackendInterface;
@@ -539,7 +539,7 @@ class Principal implements BackendInterface {
try {
$circle = Circles::detailsCircle($circleUniqueId, true);
} catch (QueryException $ex) {
} catch (ContainerExceptionInterface $ex) {
return null;
} catch (CircleNotFoundException $ex) {
return null;
@@ -563,7 +563,7 @@ class Principal implements BackendInterface {
* @param string $principal
* @return array
* @throws Exception
* @throws QueryException
* @throws ContainerExceptionInterface
* @suppress PhanUndeclaredClassMethod
*/
public function getCircleMembership($principal):array {
+2 -1
View File
@@ -150,12 +150,13 @@ class Server extends \Sabre\DAV\Server {
string $pluginName,
string $eventName,
): callable {
$connection = \OCP\Server::get(Connection::class);
return function (PropFind $propFind, INode $node) use (
$callBack,
$pluginName,
$eventName,
$connection,
): bool {
$connection = \OCP\Server::get(Connection::class);
$queriesBefore = $connection->getStats()['executed'];
$result = $callBack($propFind, $node);
$queriesAfter = $connection->getStats()['executed'];
@@ -180,7 +180,6 @@ class ServerFactory {
$server->addPlugin(new SharesPlugin(
$tree,
$this->userSession,
$userFolder,
\OCP\Server::get(\OCP\Share\IManager::class)
));
$server->addPlugin(new CommentPropertiesPlugin(\OCP\Server::get(ICommentsManager::class), $this->userSession));
+3 -12
View File
@@ -32,12 +32,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
public const SHARETYPES_PROPERTYNAME = '{http://owncloud.org/ns}share-types';
public const SHAREES_PROPERTYNAME = '{http://nextcloud.org/ns}sharees';
/**
* Reference to main server object
*
* @var \Sabre\DAV\Server
*/
private $server;
private \Sabre\DAV\Server $server;
private string $userId;
/** @var IShare[][] */
@@ -54,8 +49,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
public function __construct(
private Tree $tree,
private IUserSession $userSession,
private Folder $userFolder,
IUserSession $userSession,
private IManager $shareManager,
) {
$this->userId = $userSession->getUser()->getUID();
@@ -206,10 +200,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
$propFind->handle(self::SHARETYPES_PROPERTYNAME, function () use ($sabreNode): ShareTypeList {
$shares = $this->getShares($sabreNode);
$shareTypes = array_unique(array_map(function (IShare $share) {
return $share->getShareType();
}, $shares));
$shareTypes = array_unique(array_map(static fn (IShare $share): int => $share->getShareType(), $shares));
return new ShareTypeList($shareTypes);
});
+1 -1
View File
@@ -123,7 +123,7 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin {
$isFav = false;
$tags = $this->getTags($fileId);
if ($tags) {
$favPos = array_search(self::TAG_FAVORITE, $tags);
$favPos = array_search(self::TAG_FAVORITE, $tags, true);
if ($favPos !== false) {
$isFav = true;
unset($tags[$favPos]);
-1
View File
@@ -336,7 +336,6 @@ class Server {
$this->server->addPlugin(new SharesPlugin(
$this->server->tree,
$userSession,
$userFolder,
$shareManager,
));
$this->server->addPlugin(new CommentPropertiesPlugin(
+2 -2
View File
@@ -151,8 +151,8 @@ async function save() {
.grid-table {
display: grid;
margin-bottom: 32px;
grid-column-gap: 24px;
grid-row-gap: 6px;
column-gap: 24px;
row-gap: 6px;
grid-template-columns: min-content auto min-content;
max-width: 500px;
}
@@ -28,7 +28,7 @@ use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;
#[\PHPUnit\Framework\Attributes\Group('DB')]
#[\PHPUnit\Framework\Attributes\Group(name: 'DB')]
class CalDavSharingBackendTest extends TestCase {
private IDBConnection $db;
@@ -14,7 +14,7 @@ use OCP\IDBConnection;
use OCP\Server;
use Test\TestCase;
#[\PHPUnit\Framework\Attributes\Group('DB')]
#[\PHPUnit\Framework\Attributes\Group(name: 'DB')]
class SharingMapperTest extends TestCase {
private SharingMapper $mapper;

Some files were not shown because too many files have changed in this diff Show More