Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 03464f1429 | |||
| fafac38f74 | |||
| 8cd70560d9 | |||
| 5149a333cb | |||
| 61aad3f1e8 | |||
| b0a523b999 | |||
| 616447413e | |||
| 8404324774 | |||
| 4a902b477e | |||
| 6ec00d3df8 | |||
| 42cb346efd | |||
| a178acfa1c | |||
| 5999d77893 | |||
| bf31fa9dc7 | |||
| 668246d380 | |||
| 9e09cddf9b |
+11
-11
@@ -24,8 +24,8 @@ package-lock.json @nextcloud/server-dependabot
|
||||
|
||||
# App maintainers
|
||||
/apps/admin_audit/appinfo/info.xml @luka-nextcloud @blizzz
|
||||
/apps/cloud_federation_api/appinfo/info.xml @nfebe @mejo-
|
||||
/apps/comments/appinfo/info.xml @edward-ly @sorbaugh
|
||||
/apps/cloud_federation_api/appinfo/info.xml @mejo-
|
||||
/apps/comments/appinfo/info.xml @edward-ly @Pytal
|
||||
/apps/contactsinteraction/appinfo/info.xml @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/lib @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/tests @kesselb @SebastianKrupinski
|
||||
@@ -36,21 +36,21 @@ package-lock.json @nextcloud/server-dependabot
|
||||
/apps/dav/tests/unit/CardDAV @hamza221 @SebastianKrupinski
|
||||
/apps/encryption/appinfo/info.xml @come-nc @icewind1991
|
||||
/apps/federatedfilesharing/appinfo/info.xml @icewind1991 @danxuliu
|
||||
/apps/federation/appinfo/info.xml @nfebe @sorbaugh
|
||||
/apps/files/appinfo/info.xml @skjnldsv @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @nfebe
|
||||
/apps/federation/appinfo/info.xml @nfebe
|
||||
/apps/files/appinfo/info.xml @skjnldsv @Pytal @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @nfebe
|
||||
/apps/files_external/appinfo/info.xml @icewind1991 @artonge
|
||||
/apps/files_reminders/appinfo/info.xml @skjnldsv @sorbaugh
|
||||
/apps/files_reminders/appinfo/info.xml @Pytal
|
||||
/apps/files_sharing/appinfo/info.xml @skjnldsv @come-nc
|
||||
/apps/files_trashbin/appinfo/info.xml @icewind1991 @sorbaugh
|
||||
/apps/files_trashbin/appinfo/info.xml @Pytal @icewind1991
|
||||
/apps/files_versions/appinfo/info.xml @artonge @icewind1991
|
||||
/apps/oauth2/appinfo/info.xml @julien-nc @ChristophWurst
|
||||
/apps/provisioning_api/appinfo/info.xml @provokateurin @nickvergessen
|
||||
/apps/settings/appinfo/info.xml @JuliaKirschenheuter @sorbaugh
|
||||
/apps/sharebymail/appinfo/info.xml @Altahrim @skjnldsv
|
||||
/apps/settings/appinfo/info.xml @Pytal @JuliaKirschenheuter
|
||||
/apps/sharebymail/appinfo/info.xml @Altahrim
|
||||
/apps/systemtags/appinfo/info.xml @Antreesy @marcelklehr
|
||||
/apps/theming/appinfo/info.xml @skjnldsv @juliusknorr
|
||||
/apps/twofactor_backupcodes/appinfo/info.xml @st3iny @miaulalala @ChristophWurst
|
||||
/apps/updatenotification/appinfo/info.xml @JuliaKirschenheuter @sorbaugh
|
||||
/apps/updatenotification/appinfo/info.xml @Pytal @JuliaKirschenheuter
|
||||
/apps/user_ldap/appinfo/info.xml @come-nc @blizzz
|
||||
/apps/user_status/appinfo/info.xml @Antreesy @nickvergessen
|
||||
/apps/weather_status/appinfo/info.xml @julien-nc @juliusknorr
|
||||
@@ -80,8 +80,8 @@ package-lock.json @nextcloud/server-dependabot
|
||||
/core/routes.php @Altahrim @nextcloud/server-backend
|
||||
|
||||
# OpenAPI
|
||||
openapi*.json @provokateurin @nextcloud/server-backend
|
||||
ResponseDefinitions.php @provokateurin @nextcloud/server-backend
|
||||
openapi*.json @provokateurin
|
||||
ResponseDefinitions.php @provokateurin
|
||||
|
||||
# Talk team
|
||||
/lib/private/Comments @nickvergessen @nextcloud/talk-backend
|
||||
|
||||
@@ -81,7 +81,7 @@ updates:
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
open-pull-requests-limit: 10
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
@@ -121,7 +121,6 @@ updates:
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable29
|
||||
labels:
|
||||
- "3. to review"
|
||||
@@ -141,7 +140,6 @@ updates:
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable30
|
||||
labels:
|
||||
- "3. to review"
|
||||
@@ -161,7 +159,6 @@ updates:
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable31
|
||||
labels:
|
||||
- "3. to review"
|
||||
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
cache: npm
|
||||
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
fallbackNpm: "^10"
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
path: ./
|
||||
|
||||
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ needs.init.outputs.nodeVersion }}
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
run: ./node_modules/cypress/bin/cypress install
|
||||
|
||||
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
|
||||
uses: cypress-io/github-action@108b8684ae52e735ff7891524cbffbcd4be5b19f # v6.7.16
|
||||
uses: cypress-io/github-action@9c318d4f950c2f0ff2e96fa4dc4279e5706efd8e # v6.7.14
|
||||
with:
|
||||
# We already installed the dependencies in the init job
|
||||
install: false
|
||||
@@ -143,7 +143,7 @@ jobs:
|
||||
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
|
||||
|
||||
- name: Upload snapshots and videos
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
||||
if: always()
|
||||
with:
|
||||
name: snapshots_videos_${{ matrix.containers }}
|
||||
@@ -156,7 +156,7 @@ jobs:
|
||||
run: docker logs nextcloud-cypress-tests_${{ env.APP_NAME }} > nextcloud.log
|
||||
|
||||
- name: Upload NC logs
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_logs_${{ matrix.containers }}
|
||||
@@ -167,7 +167,7 @@ jobs:
|
||||
run: docker exec nextcloud-cypress-tests_${{ env.APP_NAME }} tar -cvjf - data > data.tar
|
||||
|
||||
- name: Upload data dir archive
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
|
||||
if: failure() && matrix.containers != 'component'
|
||||
with:
|
||||
name: nc_data_${{ matrix.containers }}
|
||||
|
||||
@@ -73,7 +73,6 @@ jobs:
|
||||
|
||||
php-versions: ['8.1']
|
||||
spreed-versions: ['main']
|
||||
activity-versions: ['master']
|
||||
|
||||
services:
|
||||
redis:
|
||||
@@ -105,14 +104,6 @@ jobs:
|
||||
path: apps/spreed
|
||||
ref: ${{ matrix.spreed-versions }}
|
||||
|
||||
- name: Checkout Activity app
|
||||
if: ${{ matrix.test-suite == 'sharing_features' }}
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
repository: nextcloud/activity
|
||||
path: apps/activity
|
||||
ref: ${{ matrix.activity-versions }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v3
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -117,7 +117,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -145,7 +145,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v3
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -66,7 +66,7 @@ jobs:
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284 # v7.0.7
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(deps): Fix npm audit'
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
|
||||
- name: Upload profiles
|
||||
if: always()
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
||||
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1
|
||||
with:
|
||||
name: profiles
|
||||
path: |
|
||||
|
||||
@@ -28,7 +28,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@271a8d0340265f705b14b6d32b9829c1cb33d45e
|
||||
uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(security): Update CA certificate bundle'
|
||||
|
||||
@@ -31,7 +31,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@271a8d0340265f705b14b6d32b9829c1cb33d45e
|
||||
uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'fix(security): Update code signing revocation list'
|
||||
|
||||
@@ -102,7 +102,7 @@ jobs:
|
||||
fi
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e
|
||||
uses: peter-evans/create-pull-request@dd2324fc52d5d43c699a5636bcf19fceaa70c284
|
||||
if: steps.update-files.outputs.CHANGES_MADE == 'true'
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
@@ -167,10 +167,6 @@ Files: apps/dav/tests/unit/test_fixtures/caldav-search-limit-timerange-1.ics app
|
||||
Copyright: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
Files: apps/dav/lib/ExampleContentFiles/exampleContact.vcf
|
||||
Copyright: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-or-later
|
||||
|
||||
Files: composer.json composer.lock .github/CODEOWNERS __tests__/tsconfig.json tsconfig.json build/integration/composer.* vendor-bin/*/composer.json vendor-bin/*/composer.lock apps/*/composer/composer.json apps/*/composer/composer.lock apps/*/composer/composer/installed.json
|
||||
Copyright: 2011-2016 ownCloud, Inc., 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-only OR AGPL-3.0-or-later
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
before_commands:
|
||||
- 'git submodule update --init --recursive'
|
||||
|
||||
build:
|
||||
nodes:
|
||||
analysis:
|
||||
tests:
|
||||
override:
|
||||
- php-scrutinizer-run
|
||||
|
||||
checks:
|
||||
php:
|
||||
excluded_dependencies:
|
||||
- etsy/phan
|
||||
|
||||
filter:
|
||||
excluded_paths:
|
||||
- '3rdparty/*'
|
||||
- 'apps/*/3rdparty/*'
|
||||
- 'apps/*/vendor/*'
|
||||
- 'l10n/*'
|
||||
- 'core/l10n/*'
|
||||
- 'apps/*/l10n/*'
|
||||
- 'apps/*/tests/*'
|
||||
- 'lib/l10n/*'
|
||||
- 'core/vendor/*'
|
||||
- 'core/js/tests/lib/*.js'
|
||||
- 'core/js/tests/specs/*.js'
|
||||
- 'core/js/jquery-showpassword.js'
|
||||
- 'core/js/jquery-tipsy.js'
|
||||
- 'core/js/placeholders.js'
|
||||
- 'settings/l10n/*'
|
||||
- 'tests/*'
|
||||
- 'build/*'
|
||||
- 'lib/composer/*'
|
||||
|
||||
imports:
|
||||
- javascript
|
||||
- php
|
||||
@@ -5,6 +5,7 @@
|
||||
-->
|
||||
# Nextcloud Server ☁
|
||||
[](https://api.reuse.software/info/github.com/nextcloud/server)
|
||||
[](https://scrutinizer-ci.com/g/nextcloud/server/?branch=master)
|
||||
[](https://codecov.io/gh/nextcloud/server)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/209)
|
||||
[](https://contribute.design/nextcloud/server)
|
||||
|
||||
@@ -2,6 +2,6 @@ OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Auditēšana / Žurnalizēšana",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nodrošina Nextcloud žurnalēšanas spējas, piemēram, datņu piekļuves žurnalēšanu vai citas jūtīgas darbības."
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nodrošina Nextcloud žurnalizēšanas iespējas, piemēram, faila piekļuves žurnalizēšanu vai citas sensitīvas darbības."
|
||||
},
|
||||
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Auditēšana / Žurnalizēšana",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nodrošina Nextcloud žurnalēšanas spējas, piemēram, datņu piekļuves žurnalēšanu vai citas jūtīgas darbības."
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nodrošina Nextcloud žurnalizēšanas iespējas, piemēram, faila piekļuves žurnalizēšanu vai citas sensitīvas darbības."
|
||||
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
|
||||
}
|
||||
@@ -2,6 +2,6 @@ OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Auditoria / Registro",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece recursos de registro para o Nextcloud, como acessos a arquivos de registro ou outras ações sensíveis."
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece habilidades de registro para o NextCloud, como acessos de arquivo de log ou ações sensíveis."
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Auditoria / Registro",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece recursos de registro para o Nextcloud, como acessos a arquivos de registro ou outras ações sensíveis."
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Fornece habilidades de registro para o NextCloud, como acessos de arquivo de log ou ações sensíveis."
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Praćenje / Beleženje",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Daje Nextcloudu mogućnost beleženja, poput pristupa fajlovima ili drugih osetljivih radnji."
|
||||
},
|
||||
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
|
||||
@@ -1,5 +0,0 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Praćenje / Beleženje",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Daje Nextcloudu mogućnost beleženja, poput pristupa fajlovima ili drugih osetljivih radnji."
|
||||
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
<name>Cloud Federation API</name>
|
||||
<summary>Enable clouds to communicate with each other and exchange data</summary>
|
||||
<description>The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.</description>
|
||||
<version>1.15.0</version>
|
||||
<version>1.16.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Bjoern Schiessle</author>
|
||||
<namespace>CloudFederationAPI</namespace>
|
||||
|
||||
@@ -20,11 +20,11 @@ return [
|
||||
'verb' => 'POST',
|
||||
'root' => '/ocm',
|
||||
],
|
||||
// [
|
||||
// 'name' => 'RequestHandler#inviteAccepted',
|
||||
// 'url' => '/invite-accepted',
|
||||
// 'verb' => 'POST',
|
||||
// 'root' => '/ocm',
|
||||
// ]
|
||||
[
|
||||
'name' => 'RequestHandler#inviteAccepted',
|
||||
'url' => '/invite-accepted',
|
||||
'verb' => 'POST',
|
||||
'root' => '/ocm',
|
||||
]
|
||||
],
|
||||
];
|
||||
|
||||
@@ -11,5 +11,9 @@ return array(
|
||||
'OCA\\CloudFederationAPI\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
|
||||
'OCA\\CloudFederationAPI\\Config' => $baseDir . '/../lib/Config.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => $baseDir . '/../lib/Controller/RequestHandlerController.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => $baseDir . '/../lib/Db/FederatedInvite.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => $baseDir . '/../lib/Db/FederatedInviteMapper.php',
|
||||
'OCA\\CloudFederationAPI\\Events\\FederatedInviteAcceptedEvent' => $baseDir . '/../lib/Events/FederatedInviteAcceptedEvent.php',
|
||||
'OCA\\CloudFederationAPI\\Migration\\Version1016Date202502262004' => $baseDir . '/../lib/Migration/Version1016Date202502262004.php',
|
||||
'OCA\\CloudFederationAPI\\ResponseDefinitions' => $baseDir . '/../lib/ResponseDefinitions.php',
|
||||
);
|
||||
|
||||
@@ -26,6 +26,10 @@ class ComposerStaticInitCloudFederationAPI
|
||||
'OCA\\CloudFederationAPI\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
|
||||
'OCA\\CloudFederationAPI\\Config' => __DIR__ . '/..' . '/../lib/Config.php',
|
||||
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => __DIR__ . '/..' . '/../lib/Controller/RequestHandlerController.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => __DIR__ . '/..' . '/../lib/Db/FederatedInvite.php',
|
||||
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => __DIR__ . '/..' . '/../lib/Db/FederatedInviteMapper.php',
|
||||
'OCA\\CloudFederationAPI\\Events\\FederatedInviteAcceptedEvent' => __DIR__ . '/..' . '/../lib/Events/FederatedInviteAcceptedEvent.php',
|
||||
'OCA\\CloudFederationAPI\\Migration\\Version1016Date202502262004' => __DIR__ . '/..' . '/../lib/Migration/Version1016Date202502262004.php',
|
||||
'OCA\\CloudFederationAPI\\ResponseDefinitions' => __DIR__ . '/..' . '/../lib/ResponseDefinitions.php',
|
||||
);
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "API de Nuvem Federada",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permitir que as nuvens se comuniquem entre si e troquem dados",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permite que diferentes nuvens se comuniquem entre si e troquem dados",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "A API de Nuvem Federada permite que várias instâncias do Nextcloud se comuniquem entre si e troquem dados."
|
||||
},
|
||||
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "API de Nuvem Federada",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permitir que as nuvens se comuniquem entre si e troquem dados",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Permite que diferentes nuvens se comuniquem entre si e troquem dados",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "A API de Nuvem Federada permite que várias instâncias do Nextcloud se comuniquem entre si e troquem dados."
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
}
|
||||
@@ -19,7 +19,7 @@ use OCP\OCM\IOCMProvider;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class Capabilities implements ICapability {
|
||||
public const API_VERSION = '1.1'; // informative, real version.
|
||||
public const API_VERSION = '1.1.0';
|
||||
|
||||
public function __construct(
|
||||
private IURLGenerator $urlGenerator,
|
||||
@@ -40,16 +40,19 @@ class Capabilities implements ICapability {
|
||||
* endPoint: string,
|
||||
* publicKey?: array{
|
||||
* keyId: string,
|
||||
* publicKeyPem: string,
|
||||
* publicKeyPem: string
|
||||
* },
|
||||
* provider: string,
|
||||
* resourceTypes: list<array{
|
||||
* name: string,
|
||||
* shareTypes: list<string>,
|
||||
* protocols: array<string, string>
|
||||
* }>,
|
||||
* version: string
|
||||
* }
|
||||
* }
|
||||
* version: string,
|
||||
* capabilities: array{
|
||||
* }
|
||||
* }
|
||||
* } OCM provider information
|
||||
* @throws OCMArgumentException
|
||||
*/
|
||||
public function getCapabilities() {
|
||||
@@ -57,6 +60,7 @@ class Capabilities implements ICapability {
|
||||
|
||||
$this->provider->setEnabled(true);
|
||||
$this->provider->setApiVersion(self::API_VERSION);
|
||||
$this->provider->setCapabilities(['/invite-accepted', '/notifications', '/shares']);
|
||||
|
||||
$pos = strrpos($url, '/');
|
||||
if ($pos === false) {
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Controller;
|
||||
|
||||
use NCU\Federation\ISignedCloudFederationProvider;
|
||||
@@ -15,15 +17,21 @@ use NCU\Security\Signature\IIncomingSignedRequest;
|
||||
use NCU\Security\Signature\ISignatureManager;
|
||||
use OC\OCM\OCMSignatoryManager;
|
||||
use OCA\CloudFederationAPI\Config;
|
||||
use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
|
||||
use OCA\CloudFederationAPI\Events\FederatedInviteAcceptedEvent;
|
||||
use OCA\CloudFederationAPI\ResponseDefinitions;
|
||||
use OCA\FederatedFileSharing\AddressHandler;
|
||||
use OCA\Federation\TrustedServers;
|
||||
use OCP\AppFramework\Controller;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\Attribute\BruteForceProtection;
|
||||
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
|
||||
use OCP\AppFramework\Http\Attribute\OpenAPI;
|
||||
use OCP\AppFramework\Http\Attribute\PublicPage;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Federation\Exceptions\ActionNotSupportedException;
|
||||
use OCP\Federation\Exceptions\AuthenticationFailedException;
|
||||
use OCP\Federation\Exceptions\BadRequestException;
|
||||
@@ -61,12 +69,16 @@ class RequestHandlerController extends Controller {
|
||||
private IURLGenerator $urlGenerator,
|
||||
private ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
private Config $config,
|
||||
private IEventDispatcher $dispatcher,
|
||||
private FederatedInviteMapper $federatedInviteMapper,
|
||||
private readonly AddressHandler $addressHandler,
|
||||
private readonly IAppConfig $appConfig,
|
||||
private ICloudFederationFactory $factory,
|
||||
private ICloudIdManager $cloudIdManager,
|
||||
private readonly ISignatureManager $signatureManager,
|
||||
private readonly OCMSignatoryManager $signatoryManager,
|
||||
private TrustedServers $trustedServers,
|
||||
private ITimeFactory $timeFactory,
|
||||
) {
|
||||
parent::__construct($appName, $request);
|
||||
}
|
||||
@@ -107,7 +119,8 @@ class RequestHandlerController extends Controller {
|
||||
}
|
||||
|
||||
// check if all required parameters are set
|
||||
if ($shareWith === null ||
|
||||
if (
|
||||
$shareWith === null ||
|
||||
$name === null ||
|
||||
$providerId === null ||
|
||||
$resourceType === null ||
|
||||
@@ -213,6 +226,99 @@ class RequestHandlerController extends Controller {
|
||||
return new JSONResponse($responseData, Http::STATUS_CREATED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Inform the sender that an invitation was accepted to start sharing
|
||||
*
|
||||
* Inform about an accepted invitation so the user on the sender provider's side
|
||||
* can initiate the OCM share creation. To protect the identity of the parties,
|
||||
* for shares created following an OCM invitation, the user id MAY be hashed,
|
||||
* and recipients implementing the OCM invitation workflow MAY refuse to process
|
||||
* shares coming from unknown parties.
|
||||
*
|
||||
* @param string $recipientProvider The address of the recipent's provider
|
||||
* @param string $token The token used for the invitation
|
||||
* @param string $userId The userId of the recipient at the recipient's provider
|
||||
* @param string $email The email address of the recipient
|
||||
* @param string $name The display name of the recipient
|
||||
*
|
||||
* @return JSONResponse<Http::STATUS_OK|Http::STATUS_FORBIDDEN|Http::STATUS_BAD_REQUEST|Http::STATUS_CONFLICT, array{email?: null|string, error?: true, message?: string, name?: string, userID?: string}, array{}>
|
||||
*
|
||||
* Note: Not implementing 404 Invitation token does not exist, instead using 400
|
||||
* 200: Invitation accepted
|
||||
* 400: Invalid token
|
||||
* 403: Invitation token does not exist
|
||||
* 409: User is already known by the OCM provider
|
||||
* spec link: https://cs3org.github.io/OCM-API/docs.html?branch=v1.1.0&repo=OCM-API&user=cs3org#/paths/~1invite-accepted/post
|
||||
*/
|
||||
#[PublicPage]
|
||||
#[NoCSRFRequired]
|
||||
#[BruteForceProtection(action: 'inviteAccepted')]
|
||||
public function inviteAccepted(string $recipientProvider, string $token, string $userId, string $email, string $name): JSONResponse {
|
||||
$this->logger->debug('Invite accepted for ' . $userId . ' with token ' . $token . ' and email ' . $email . ' and name ' . $name);
|
||||
|
||||
$updated = $this->timeFactory->getTime();
|
||||
|
||||
if ($token === '') {
|
||||
$response = new JSONResponse(['message' => 'Invalid or non existing token', 'error' => true], Http::STATUS_BAD_REQUEST);
|
||||
$response->throttle();
|
||||
return $response;
|
||||
}
|
||||
if (!$this->trustedServers->isTrustedServer($recipientProvider)) {
|
||||
$response = ['message' => 'Remote server not trusted', 'error' => true];
|
||||
$status = Http::STATUS_FORBIDDEN;
|
||||
return new JSONResponse($response, $status);
|
||||
}
|
||||
try {
|
||||
$invitation = $this->federatedInviteMapper->findByToken($token);
|
||||
} catch (DoesNotExistException) {
|
||||
$response = ['message' => 'Invalid or non existing token', 'error' => true];
|
||||
$status = Http::STATUS_BAD_REQUEST;
|
||||
$response = new JSONResponse($response, $status);
|
||||
$response->throttle();
|
||||
return $response;
|
||||
}
|
||||
if ($invitation->isAccepted() === true) {
|
||||
$response = ['message' => 'Invite already accepted', 'error' => true];
|
||||
$status = Http::STATUS_CONFLICT;
|
||||
return new JSONResponse($response, $status);
|
||||
}
|
||||
|
||||
if (!empty($invitation->getExpiredAt()) && $updated > $invitation->getExpiredAt()) {
|
||||
$response = ['message' => 'Invitation expired', 'error' => true];
|
||||
$status = Http::STATUS_BAD_REQUEST;
|
||||
return new JSONResponse($response, $status);
|
||||
}
|
||||
|
||||
|
||||
$localUser = $this->userManager->get($invitation->getUserId());
|
||||
if ($localUser === null) {
|
||||
$response = ['message' => 'Invalid or non existing token', 'error' => true];
|
||||
$status = Http::STATUS_BAD_REQUEST;
|
||||
$response = new JSONResponse($response, $status);
|
||||
$response->throttle();
|
||||
return $response;
|
||||
}
|
||||
$sharedFromEmail = $localUser->getPrimaryEMailAddress();
|
||||
$sharedFromDisplayName = $localUser->getDisplayName();
|
||||
|
||||
$response = ['userID' => $localUser->getUID(), 'email' => $sharedFromEmail, 'name' => $sharedFromDisplayName];
|
||||
$status = Http::STATUS_OK;
|
||||
|
||||
|
||||
$invitation->setAccepted(true);
|
||||
$invitation->setRecipientEmail($email);
|
||||
$invitation->setRecipientName($name);
|
||||
$invitation->setRecipientProvider($recipientProvider);
|
||||
$invitation->setRecipientUserId($userId);
|
||||
$invitation->setAcceptedAt($updated);
|
||||
$invitation = $this->federatedInviteMapper->update($invitation);
|
||||
|
||||
$event = new FederatedInviteAcceptedEvent($invitation);
|
||||
$this->dispatcher->dispatchTyped($event);
|
||||
|
||||
return new JSONResponse($response, $status);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a notification about an existing share
|
||||
*
|
||||
@@ -233,7 +339,8 @@ class RequestHandlerController extends Controller {
|
||||
#[BruteForceProtection(action: 'receiveFederatedShareNotification')]
|
||||
public function receiveNotification($notificationType, $resourceType, $providerId, ?array $notification) {
|
||||
// check if all required parameters are set
|
||||
if ($notificationType === null ||
|
||||
if (
|
||||
$notificationType === null ||
|
||||
$resourceType === null ||
|
||||
$providerId === null ||
|
||||
!is_array($notification)
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Db;
|
||||
|
||||
use OCP\AppFramework\Db\Entity;
|
||||
use OCP\DB\Types;
|
||||
|
||||
/**
|
||||
* @method bool isAccepted()
|
||||
* @method void setAccepted(bool $accepted)
|
||||
* @method ?int getAcceptedAt()
|
||||
* @method void setAcceptedAt(int $acceptedAt)
|
||||
* @method ?int getCreatedAt()
|
||||
* @method void setCreatedAt(int $createdAt)
|
||||
* @method ?int getExpiredAt()
|
||||
* @method void setExpiredAt(int $expiredAt)
|
||||
* @method ?string getRecipientEmail()
|
||||
* @method void setRecipientEmail(string $recipientEmail)
|
||||
* @method ?string getRecipientName()
|
||||
* @method void setRecipientName(string $recipientName)
|
||||
* @method ?string getRecipientProvider()
|
||||
* @method void setRecipientProvider(string $recipientProvider)
|
||||
* @method ?string getRecipientUserId()
|
||||
* @method void setRecipientUserId(string $recipientUserId)
|
||||
* @method string getToken()
|
||||
* @method void setToken(string $token)
|
||||
* @method ?string getUserId()
|
||||
* @method void setUserId(string $userId)
|
||||
*/
|
||||
|
||||
class FederatedInvite extends Entity {
|
||||
/**
|
||||
* @var bool $accepted
|
||||
*/
|
||||
protected $accepted;
|
||||
/**
|
||||
* @var ?int $acceptedAt
|
||||
*/
|
||||
protected $acceptedAt;
|
||||
/**
|
||||
* @var int $createdAt
|
||||
*/
|
||||
protected $createdAt;
|
||||
/**
|
||||
* @var ?int $expiredAt
|
||||
*/
|
||||
protected $expiredAt;
|
||||
/**
|
||||
* @var ?string $recipientEmail
|
||||
*/
|
||||
protected $recipientEmail;
|
||||
/**
|
||||
* @var ?string $recipientName
|
||||
*/
|
||||
protected $recipientName;
|
||||
/**
|
||||
* @var ?string $recipientProvider
|
||||
*/
|
||||
protected $recipientProvider;
|
||||
/**
|
||||
* @var ?string $recipientUserId
|
||||
*/
|
||||
protected $recipientUserId;
|
||||
/**
|
||||
* @var string $token
|
||||
*/
|
||||
protected $token;
|
||||
/**
|
||||
* @var string $userId
|
||||
*/
|
||||
protected $userId;
|
||||
|
||||
public function __construct() {
|
||||
$this->addType('accepted', Types::BOOLEAN);
|
||||
$this->addType('acceptedAt', Types::BIGINT);
|
||||
$this->addType('createdAt', Types::BIGINT);
|
||||
$this->addType('expiredAt', Types::BIGINT);
|
||||
$this->addType('recipientEmail', Types::STRING);
|
||||
$this->addType('recipientName', Types::STRING);
|
||||
$this->addType('recipientProvider', Types::STRING);
|
||||
$this->addType('recipientUserId', Types::STRING);
|
||||
$this->addType('token', Types::STRING);
|
||||
$this->addType('userId', Types::STRING);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Db;
|
||||
|
||||
use OCP\AppFramework\Db\QBMapper;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
|
||||
/**
|
||||
* @template-extends QBMapper<FederatedInvite>
|
||||
*/
|
||||
class FederatedInviteMapper extends QBMapper {
|
||||
public const TABLE_NAME = 'federated_invites';
|
||||
|
||||
public function __construct(IDBConnection $db) {
|
||||
parent::__construct($db, self::TABLE_NAME);
|
||||
}
|
||||
|
||||
public function findByToken(string $token): ?FederatedInvite {
|
||||
/** @var IQueryBuilder $qb */
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
$qb->select('*')
|
||||
->from('federated_invites')
|
||||
->where($qb->expr()->eq('token', $qb->createNamedParameter($token)));
|
||||
return $this->findEntity($qb);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Events;
|
||||
|
||||
use OCA\CloudFederationAPI\Db\FederatedInvite;
|
||||
use OCP\EventDispatcher\Event;
|
||||
|
||||
class FederatedInviteAcceptedEvent extends Event {
|
||||
public function __construct(
|
||||
private FederatedInvite $invitation,
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function getInvitation(): FederatedInvite {
|
||||
return $this->invitation;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationAPI\Migration;
|
||||
|
||||
use Closure;
|
||||
use OCP\DB\ISchemaWrapper;
|
||||
use OCP\DB\Types;
|
||||
use OCP\Migration\IOutput;
|
||||
use OCP\Migration\SimpleMigrationStep;
|
||||
|
||||
class Version1016Date202502262004 extends SimpleMigrationStep {
|
||||
/**
|
||||
* @param IOutput $output
|
||||
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
|
||||
* @param array $options
|
||||
* @return null|ISchemaWrapper
|
||||
*/
|
||||
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) {
|
||||
/** @var ISchemaWrapper $schema */
|
||||
|
||||
|
||||
$schema = $schemaClosure();
|
||||
$table_name = 'federated_invites';
|
||||
|
||||
if (!$schema->hasTable($table_name)) {
|
||||
$table = $schema->createTable($table_name);
|
||||
$table->addColumn('id', Types::BIGINT, [
|
||||
'autoincrement' => true,
|
||||
'notnull' => true,
|
||||
'length' => 11,
|
||||
'unsigned' => true,
|
||||
]);
|
||||
$table->addColumn('user_id', Types::STRING, [
|
||||
'notnull' => true,
|
||||
'length' => 64,
|
||||
|
||||
]);
|
||||
// https://saturncloud.io/blog/what-is-the-maximum-length-of-a-url-in-different-browsers/#maximum-url-length-in-different-browsers
|
||||
// We use the least common denominator, the minimum length supported by browsers
|
||||
$table->addColumn('recipient_provider', Types::STRING, [
|
||||
'notnull' => false,
|
||||
'length' => 2083,
|
||||
]);
|
||||
$table->addColumn('recipient_user_id', Types::STRING, [
|
||||
'notnull' => false,
|
||||
'length' => 1024,
|
||||
]);
|
||||
$table->addColumn('recipient_name', Types::STRING, [
|
||||
'notnull' => false,
|
||||
'length' => 1024,
|
||||
]);
|
||||
// https://www.directedignorance.com/blog/maximum-length-of-email-address
|
||||
$table->addColumn('recipient_email', Types::STRING, [
|
||||
'notnull' => false,
|
||||
'length' => 320,
|
||||
]);
|
||||
$table->addColumn('token', Types::STRING, [
|
||||
'notnull' => true,
|
||||
'length' => 60,
|
||||
]);
|
||||
$table->addColumn('accepted', Types::BOOLEAN, [
|
||||
'notnull' => false,
|
||||
'default' => false
|
||||
]);
|
||||
$table->addColumn('created_at', Types::BIGINT, [
|
||||
'notnull' => true,
|
||||
]);
|
||||
|
||||
$table->addColumn('expired_at', Types::BIGINT, [
|
||||
'notnull' => false,
|
||||
]);
|
||||
|
||||
$table->addColumn('accepted_at', Types::BIGINT, [
|
||||
'notnull' => false,
|
||||
]);
|
||||
|
||||
|
||||
$table->setPrimaryKey(['id']);
|
||||
return $schema;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -46,8 +46,10 @@
|
||||
"apiVersion",
|
||||
"enabled",
|
||||
"endPoint",
|
||||
"provider",
|
||||
"resourceTypes",
|
||||
"version"
|
||||
"version",
|
||||
"capabilities"
|
||||
],
|
||||
"properties": {
|
||||
"apiVersion": {
|
||||
@@ -77,6 +79,9 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"provider": {
|
||||
"type": "string"
|
||||
},
|
||||
"resourceTypes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -107,6 +112,9 @@
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
},
|
||||
"capabilities": {
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -396,6 +404,190 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"/index.php/ocm/invite-accepted": {
|
||||
"post": {
|
||||
"operationId": "request_handler-invite-accepted",
|
||||
"summary": "Inform the sender that an invitation was accepted to start sharing",
|
||||
"description": "Inform about an accepted invitation so the user on the sender provider's side can initiate the OCM share creation. To protect the identity of the parties, for shares created following an OCM invitation, the user id MAY be hashed, and recipients implementing the OCM invitation workflow MAY refuse to process shares coming from unknown parties.\nNote: Not implementing 404 Invitation token does not exist, instead using 400 spec link: https://cs3org.github.io/OCM-API/docs.html?branch=v1.1.0&repo=OCM-API&user=cs3org#/paths/~1invite-accepted/post",
|
||||
"tags": [
|
||||
"request_handler"
|
||||
],
|
||||
"security": [
|
||||
{},
|
||||
{
|
||||
"bearer_auth": []
|
||||
},
|
||||
{
|
||||
"basic_auth": []
|
||||
}
|
||||
],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"recipientProvider",
|
||||
"token",
|
||||
"userId",
|
||||
"email",
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"recipientProvider": {
|
||||
"type": "string",
|
||||
"description": "The address of the recipent's provider"
|
||||
},
|
||||
"token": {
|
||||
"type": "string",
|
||||
"description": "The token used for the invitation"
|
||||
},
|
||||
"userId": {
|
||||
"type": "string",
|
||||
"description": "The userId of the recipient at the recipient's provider"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the recipient"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The display name of the recipient"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "Invitation accepted",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"type": "boolean",
|
||||
"enum": [
|
||||
true
|
||||
]
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"userID": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"403": {
|
||||
"description": "Invitation token does not exist",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"type": "boolean",
|
||||
"enum": [
|
||||
true
|
||||
]
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"userID": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"400": {
|
||||
"description": "Invalid token",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"type": "boolean",
|
||||
"enum": [
|
||||
true
|
||||
]
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"userID": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"409": {
|
||||
"description": "User is already known by the OCM provider",
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"email": {
|
||||
"type": "string",
|
||||
"nullable": true
|
||||
},
|
||||
"error": {
|
||||
"type": "boolean",
|
||||
"enum": [
|
||||
true
|
||||
]
|
||||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"type": "string"
|
||||
},
|
||||
"userID": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\CloudFederationApi\Tests;
|
||||
|
||||
use NCU\Security\Signature\ISignatureManager;
|
||||
use OC\OCM\OCMSignatoryManager;
|
||||
use OCA\CloudFederationAPI\Config;
|
||||
use OCA\CloudFederationAPI\Controller\RequestHandlerController;
|
||||
use OCA\CloudFederationAPI\Db\FederatedInvite;
|
||||
use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
|
||||
use OCA\FederatedFileSharing\AddressHandler;
|
||||
use OCA\Federation\TrustedServers;
|
||||
use OCP\AppFramework\Http;
|
||||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Federation\ICloudFederationFactory;
|
||||
use OCP\Federation\ICloudFederationProviderManager;
|
||||
use OCP\Federation\ICloudIdManager;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IRequest;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Test\TestCase;
|
||||
|
||||
class RequestHandlerControllerTest extends TestCase {
|
||||
private IRequest&MockObject $request;
|
||||
private LoggerInterface&MockObject $logger;
|
||||
private IUserManager&MockObject $userManager;
|
||||
private IGroupManager&MockObject $groupManager;
|
||||
private IURLGenerator&MockObject $urlGenerator;
|
||||
private ICloudFederationProviderManager&MockObject $cloudFederationProviderManager;
|
||||
private Config&MockObject $config;
|
||||
private IEventDispatcher&MockObject $eventDispatcher;
|
||||
private FederatedInviteMapper&MockObject $federatedInviteMapper;
|
||||
private AddressHandler&MockObject $addressHandler;
|
||||
private IAppConfig&MockObject $appConfig;
|
||||
private ICloudFederationFactory&MockObject $cloudFederationFactory;
|
||||
private ICloudIdManager&MockObject $cloudIdManager;
|
||||
private ISignatureManager&MockObject $signatureManager;
|
||||
private OCMSignatoryManager&MockObject $signatoryManager;
|
||||
private TrustedServers&MockObject $trustedServers;
|
||||
private ITimeFactory&MockObject $timeFactory;
|
||||
|
||||
private RequestHandlerController $requestHandlerController;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->request = $this->createMock(IRequest::class);
|
||||
$this->logger = $this->createMock(LoggerInterface::class);
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->groupManager = $this->createMock(IGroupManager::class);
|
||||
$this->urlGenerator = $this->createMock(IURLGenerator::class);
|
||||
$this->cloudFederationProviderManager = $this->createMock(ICloudFederationProviderManager::class);
|
||||
$this->config = $this->createMock(Config::class);
|
||||
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
|
||||
$this->federatedInviteMapper = $this->createMock(FederatedInviteMapper::class);
|
||||
$this->addressHandler = $this->createMock(AddressHandler::class);
|
||||
$this->appConfig = $this->createMock(IAppConfig::class);
|
||||
$this->cloudFederationFactory = $this->createMock(ICloudFederationFactory::class);
|
||||
$this->cloudIdManager = $this->createMock(ICloudIdManager::class);
|
||||
$this->signatureManager = $this->createMock(ISignatureManager::class);
|
||||
$this->signatoryManager = $this->createMock(OCMSignatoryManager::class);
|
||||
$this->trustedServers = $this->createMock(TrustedServers::class);
|
||||
$this->timeFactory = $this->createMock(ITimeFactory::class);
|
||||
|
||||
$this->requestHandlerController = new RequestHandlerController(
|
||||
'cloud_federation_api',
|
||||
$this->request,
|
||||
$this->logger,
|
||||
$this->userManager,
|
||||
$this->groupManager,
|
||||
$this->urlGenerator,
|
||||
$this->cloudFederationProviderManager,
|
||||
$this->config,
|
||||
$this->eventDispatcher,
|
||||
$this->federatedInviteMapper,
|
||||
$this->addressHandler,
|
||||
$this->appConfig,
|
||||
$this->cloudFederationFactory,
|
||||
$this->cloudIdManager,
|
||||
$this->signatureManager,
|
||||
$this->signatoryManager,
|
||||
$this->trustedServers,
|
||||
$this->timeFactory,
|
||||
);
|
||||
}
|
||||
|
||||
public function testInviteAccepted(): void {
|
||||
$token = 'token';
|
||||
$trusted_server = 'http://127.0.0.1';
|
||||
$userId = 'userId';
|
||||
$invite = new FederatedInvite();
|
||||
$invite->setCreatedAt(1);
|
||||
$invite->setUserId($userId);
|
||||
$invite->setToken($token);
|
||||
|
||||
$this->trustedServers->expects(self::once())
|
||||
->method('isTrustedServer')
|
||||
->with($trusted_server)
|
||||
->willReturn(true);
|
||||
|
||||
$this->federatedInviteMapper->expects(self::once())
|
||||
->method('findByToken')
|
||||
->with($token)
|
||||
->willReturn($invite);
|
||||
|
||||
$this->federatedInviteMapper->expects(self::once())
|
||||
->method('update')
|
||||
->willReturnArgument(0);
|
||||
|
||||
$user = $this->createMock(IUser::class);
|
||||
$user->method('getUID')
|
||||
->willReturn($userId);
|
||||
$user->method('getPrimaryEMailAddress')
|
||||
->willReturn('email');
|
||||
$user->method('getDisplayName')
|
||||
->willReturn('displayName');
|
||||
|
||||
$this->userManager->expects(self::once())
|
||||
->method('get')
|
||||
->with($userId)
|
||||
->willReturn($user);
|
||||
|
||||
$recipientProvider = $trusted_server;
|
||||
$recipientId = 'remote';
|
||||
$recipientEmail = 'remote@example.org';
|
||||
$recipientName = 'Remote Remoteson';
|
||||
$response = ['userID' => $userId, 'email' => 'email', 'name' => 'displayName'];
|
||||
$json = new JSONResponse($response, Http::STATUS_OK);
|
||||
|
||||
$this->assertEquals($json, $this->requestHandlerController->inviteAccepted($recipientProvider, $token, $recipientId, $recipientEmail, $recipientName));
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@ OC.L10N.register(
|
||||
"{author} commented on {file}" : "{author} a commenté sur {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Commentaires</strong> sur les fichiers",
|
||||
"Files" : "Fichiers",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Vous avez été mentionné dans « {file} », dans un commentaire d'un compte qui a été supprimé depuis",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Vous avez été mentionné sur « {file} », dans un commentaire par un compte qui depuis a été supprimé",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vous a mentionné dans un commentaire sur « {file} »",
|
||||
"Files app plugin to add comments to files" : "Plugin Fichiers app pour ajouter des commentaires aux fichiers",
|
||||
"Edit comment" : "Modifier le commentaire",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"{author} commented on {file}" : "{author} a commenté sur {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Commentaires</strong> sur les fichiers",
|
||||
"Files" : "Fichiers",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Vous avez été mentionné dans « {file} », dans un commentaire d'un compte qui a été supprimé depuis",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Vous avez été mentionné sur « {file} », dans un commentaire par un compte qui depuis a été supprimé",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vous a mentionné dans un commentaire sur « {file} »",
|
||||
"Files app plugin to add comments to files" : "Plugin Fichiers app pour ajouter des commentaires aux fichiers",
|
||||
"Edit comment" : "Modifier le commentaire",
|
||||
|
||||
@@ -2,7 +2,7 @@ OC.L10N.register(
|
||||
"contactsinteraction",
|
||||
{
|
||||
"Recently contacted" : "Contactados recentemente",
|
||||
"Contacts Interaction" : "Interação de Contatos",
|
||||
"Contacts Interaction" : "Interação de contatos",
|
||||
"Manages interaction between accounts and contacts" : "Gerencia a interação entre contas e contatos",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Colete dados sobre interações de contas e contatos e forneça um catálogo de endereços para os dados"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Contactados recentemente",
|
||||
"Contacts Interaction" : "Interação de Contatos",
|
||||
"Contacts Interaction" : "Interação de contatos",
|
||||
"Manages interaction between accounts and contacts" : "Gerencia a interação entre contas e contatos",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Colete dados sobre interações de contas e contatos e forneça um catálogo de endereços para os dados"
|
||||
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
|
||||
|
||||
@@ -74,7 +74,6 @@
|
||||
|
||||
<settings>
|
||||
<admin>OCA\DAV\Settings\CalDAVSettings</admin>
|
||||
<admin>OCA\DAV\Settings\ExampleContentSettings</admin>
|
||||
<personal>OCA\DAV\Settings\AvailabilitySettings</personal>
|
||||
</settings>
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ return [
|
||||
['name' => 'invitation_response#decline', 'url' => '/invitation/decline/{token}', 'verb' => 'GET'],
|
||||
['name' => 'invitation_response#options', 'url' => '/invitation/moreOptions/{token}', 'verb' => 'GET'],
|
||||
['name' => 'invitation_response#processMoreOptionsResult', 'url' => '/invitation/moreOptions/{token}', 'verb' => 'POST'],
|
||||
['name' => 'example_content#setDefaultContact', 'url' => '/api/defaultcontact/contact', 'verb' => 'PUT'],
|
||||
['name' => 'example_content#setEnableDefaultContact', 'url' => '/api/defaultcontact/config', 'verb' => 'PUT'],
|
||||
],
|
||||
'ocs' => [
|
||||
['name' => 'direct#getUrl', 'url' => '/api/v1/direct', 'verb' => 'POST'],
|
||||
|
||||
@@ -61,8 +61,7 @@ $authPlugin = new \Sabre\DAV\Auth\Plugin($authBackend);
|
||||
$bearerAuthPlugin = new BearerAuth(
|
||||
Server::get(IUserSession::class),
|
||||
Server::get(ISession::class),
|
||||
Server::get(IRequest::class),
|
||||
Server::get(IConfig::class),
|
||||
Server::get(IRequest::class)
|
||||
);
|
||||
$authPlugin->addBackend($bearerAuthPlugin);
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ $filesDropPlugin = new FilesDropPlugin();
|
||||
|
||||
// Define root url with /public.php/dav/files/TOKEN
|
||||
/** @var string $baseuri defined in public.php */
|
||||
preg_match('/(^files\/[a-z0-9-_]+)/i', substr($requestUri, strlen($baseuri)), $match);
|
||||
preg_match('/(^files\/[a-z0-9-]+)/i', substr($requestUri, strlen($baseuri)), $match);
|
||||
$baseuri = $baseuri . $match[0];
|
||||
|
||||
$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
|
||||
@@ -221,7 +221,6 @@ return array(
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => $baseDir . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => $baseDir . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => $baseDir . '/../lib/Controller/DirectController.php',
|
||||
'OCA\\DAV\\Controller\\ExampleContentController' => $baseDir . '/../lib/Controller/ExampleContentController.php',
|
||||
'OCA\\DAV\\Controller\\InvitationResponseController' => $baseDir . '/../lib/Controller/InvitationResponseController.php',
|
||||
'OCA\\DAV\\Controller\\OutOfOfficeController' => $baseDir . '/../lib/Controller/OutOfOfficeController.php',
|
||||
'OCA\\DAV\\Controller\\UpcomingEventsController' => $baseDir . '/../lib/Controller/UpcomingEventsController.php',
|
||||
@@ -356,11 +355,9 @@ return array(
|
||||
'OCA\\DAV\\Server' => $baseDir . '/../lib/Server.php',
|
||||
'OCA\\DAV\\ServerFactory' => $baseDir . '/../lib/ServerFactory.php',
|
||||
'OCA\\DAV\\Service\\AbsenceService' => $baseDir . '/../lib/Service/AbsenceService.php',
|
||||
'OCA\\DAV\\Service\\DefaultContactService' => $baseDir . '/../lib/Service/DefaultContactService.php',
|
||||
'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => $baseDir . '/../lib/Settings/Admin/SystemAddressBookSettings.php',
|
||||
'OCA\\DAV\\Settings\\AvailabilitySettings' => $baseDir . '/../lib/Settings/AvailabilitySettings.php',
|
||||
'OCA\\DAV\\Settings\\CalDAVSettings' => $baseDir . '/../lib/Settings/CalDAVSettings.php',
|
||||
'OCA\\DAV\\Settings\\ExampleContentSettings' => $baseDir . '/../lib/Settings/ExampleContentSettings.php',
|
||||
'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => $baseDir . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',
|
||||
'OCA\\DAV\\SetupChecks\\WebdavEndpoint' => $baseDir . '/../lib/SetupChecks/WebdavEndpoint.php',
|
||||
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => $baseDir . '/../lib/Storage/PublicOwnerWrapper.php',
|
||||
|
||||
@@ -236,7 +236,6 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
|
||||
'OCA\\DAV\\Controller\\BirthdayCalendarController' => __DIR__ . '/..' . '/../lib/Controller/BirthdayCalendarController.php',
|
||||
'OCA\\DAV\\Controller\\DirectController' => __DIR__ . '/..' . '/../lib/Controller/DirectController.php',
|
||||
'OCA\\DAV\\Controller\\ExampleContentController' => __DIR__ . '/..' . '/../lib/Controller/ExampleContentController.php',
|
||||
'OCA\\DAV\\Controller\\InvitationResponseController' => __DIR__ . '/..' . '/../lib/Controller/InvitationResponseController.php',
|
||||
'OCA\\DAV\\Controller\\OutOfOfficeController' => __DIR__ . '/..' . '/../lib/Controller/OutOfOfficeController.php',
|
||||
'OCA\\DAV\\Controller\\UpcomingEventsController' => __DIR__ . '/..' . '/../lib/Controller/UpcomingEventsController.php',
|
||||
@@ -371,11 +370,9 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\Server' => __DIR__ . '/..' . '/../lib/Server.php',
|
||||
'OCA\\DAV\\ServerFactory' => __DIR__ . '/..' . '/../lib/ServerFactory.php',
|
||||
'OCA\\DAV\\Service\\AbsenceService' => __DIR__ . '/..' . '/../lib/Service/AbsenceService.php',
|
||||
'OCA\\DAV\\Service\\DefaultContactService' => __DIR__ . '/..' . '/../lib/Service/DefaultContactService.php',
|
||||
'OCA\\DAV\\Settings\\Admin\\SystemAddressBookSettings' => __DIR__ . '/..' . '/../lib/Settings/Admin/SystemAddressBookSettings.php',
|
||||
'OCA\\DAV\\Settings\\AvailabilitySettings' => __DIR__ . '/..' . '/../lib/Settings/AvailabilitySettings.php',
|
||||
'OCA\\DAV\\Settings\\CalDAVSettings' => __DIR__ . '/..' . '/../lib/Settings/CalDAVSettings.php',
|
||||
'OCA\\DAV\\Settings\\ExampleContentSettings' => __DIR__ . '/..' . '/../lib/Settings/ExampleContentSettings.php',
|
||||
'OCA\\DAV\\SetupChecks\\NeedsSystemAddressBookSync' => __DIR__ . '/..' . '/../lib/SetupChecks/NeedsSystemAddressBookSync.php',
|
||||
'OCA\\DAV\\SetupChecks\\WebdavEndpoint' => __DIR__ . '/..' . '/../lib/SetupChecks/WebdavEndpoint.php',
|
||||
'OCA\\DAV\\Storage\\PublicOwnerWrapper' => __DIR__ . '/..' . '/../lib/Storage/PublicOwnerWrapper.php',
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "أرسل إشعارات للتذكير إلى المشتركين بالتقويم كذلك",
|
||||
"Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.",
|
||||
"Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عن طريق أسلوب دفع الإشعارات Push",
|
||||
"Cancel" : "إلغاء",
|
||||
"Import" : "إستيراد",
|
||||
"Error while saving settings" : "خطأ أثناء حفظ الإعدادات",
|
||||
"Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ",
|
||||
"Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال",
|
||||
"Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ",
|
||||
"Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال",
|
||||
"Example Content" : "نموذج للمحتوى",
|
||||
"Set example content to be created on new user first login." : "عيِّن نموذجاً للمحتوى ليتم إنشاؤه عند تسجيل المستخدِم دخوله لأول مرةٍ.",
|
||||
"Import contact" : "استيراد جهة اتصال",
|
||||
"Reset to default contact" : "إعادة التعيين لجهة اتصال تلقائية ",
|
||||
"Import contacts" : "استيراد جهات اتصال",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "أرسل إشعارات للتذكير إلى المشتركين بالتقويم كذلك",
|
||||
"Reminders are always sent to organizers and attendees." : "إشعارات التذكير يتم إرسالها دائماً إلى مُنظّم أو مُنظّمي الحدث و المستهدفين بحضوره.",
|
||||
"Enable notifications for events via push" : "تمكين الإشعارات حول الأحداث عن طريق أسلوب دفع الإشعارات Push",
|
||||
"Cancel" : "إلغاء",
|
||||
"Import" : "إستيراد",
|
||||
"Error while saving settings" : "خطأ أثناء حفظ الإعدادات",
|
||||
"Contact reset successfully" : "تمّت إعادة تعيين جهة الاتصال بنجاحٍ",
|
||||
"Error while resetting contact" : "خطأ أثناء إعادة تعيين جهة الاتصال",
|
||||
"Contact imported successfully" : "تمّ استيراد جهة الاتصال بنجاحٍ",
|
||||
"Error while importing contact" : "خطأ أثناء استيراد جهة الاتصال",
|
||||
"Example Content" : "نموذج للمحتوى",
|
||||
"Set example content to be created on new user first login." : "عيِّن نموذجاً للمحتوى ليتم إنشاؤه عند تسجيل المستخدِم دخوله لأول مرةٍ.",
|
||||
"Import contact" : "استيراد جهة اتصال",
|
||||
"Reset to default contact" : "إعادة التعيين لجهة اتصال تلقائية ",
|
||||
"Import contacts" : "استيراد جهات اتصال",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "استيراد ملف .cvf جديد سوف يؤدي إلى حذف جهات الاتصال التلقائية الحالية واستبدالها بالجديدة. هل ترغب في الاستمرار؟",
|
||||
"There was an error updating your attendance status." : "حدث خطأ في تحديث حالة حضورك.",
|
||||
"Please contact the organizer directly." : "يرجى الاتصال بالمنظم مباشرةً",
|
||||
"Are you accepting the invitation?" : "هل تقبل الدعوة؟",
|
||||
|
||||
@@ -211,9 +211,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes",
|
||||
"Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Hebo un error mentanto se guardaba la configuración",
|
||||
"There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.",
|
||||
"Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.",
|
||||
"Are you accepting the invitation?" : "¿Aceptes la invitación?",
|
||||
|
||||
@@ -209,9 +209,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Unvia tamién avisos de recordatoriu pa les persones coles que se compartiere'l calendariu",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios únviense siempres a organizadores y asistentes",
|
||||
"Enable notifications for events via push" : "Acriva los avisos automáticos pa los eventos",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Hebo un error mentanto se guardaba la configuración",
|
||||
"There was an error updating your attendance status." : "Hebo un error al anovar l'estáu de l'asistencia.",
|
||||
"Please contact the organizer directly." : "Ponte en contautu direutamente cola organización.",
|
||||
"Are you accepting the invitation?" : "¿Aceptes la invitación?",
|
||||
|
||||
@@ -192,9 +192,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Изпращане на известия за напомняния и до споделящите календар",
|
||||
"Reminders are always sent to organizers and attendees." : "Напомнянията винаги се изпращат до организаторите и присъстващите.",
|
||||
"Enable notifications for events via push" : "Активиране на известията за събития чрез push",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
"Error while saving settings" : "Грешка при запазване на настройките",
|
||||
"There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.",
|
||||
"Please contact the organizer directly." : "Моля, свържете се директно с организатора.",
|
||||
"Are you accepting the invitation?" : "Приемате ли поканата?",
|
||||
|
||||
@@ -190,9 +190,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Изпращане на известия за напомняния и до споделящите календар",
|
||||
"Reminders are always sent to organizers and attendees." : "Напомнянията винаги се изпращат до организаторите и присъстващите.",
|
||||
"Enable notifications for events via push" : "Активиране на известията за събития чрез push",
|
||||
"Cancel" : "Отказ",
|
||||
"Import" : "Импортиране /внасяне/",
|
||||
"Error while saving settings" : "Грешка при запазване на настройките",
|
||||
"There was an error updating your attendance status." : "Възникна грешка при актуализиране на състоянието на присъствието Ви.",
|
||||
"Please contact the organizer directly." : "Моля, свържете се директно с организатора.",
|
||||
"Are you accepting the invitation?" : "Приемате ли поканата?",
|
||||
|
||||
@@ -306,9 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari",
|
||||
"Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.",
|
||||
"Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments",
|
||||
"Cancel" : "Cancel·la",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "S'ha produït un error en desar els paràmetres",
|
||||
"There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.",
|
||||
"Please contact the organizer directly." : "Contacteu amb l'organització directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
|
||||
@@ -304,9 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Envia també notificacions de recordatori als usuaris amb qui s'ha compartit el calendari",
|
||||
"Reminders are always sent to organizers and attendees." : "Sempre s'envien recordatoris als organitzadors i als assistents.",
|
||||
"Enable notifications for events via push" : "Habilita les notificacions automàtiques per als esdeveniments",
|
||||
"Cancel" : "Cancel·la",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "S'ha produït un error en desar els paràmetres",
|
||||
"There was an error updating your attendance status." : "S'ha produït un error en actualitzar l'estat d'assistència.",
|
||||
"Please contact the organizer directly." : "Contacteu amb l'organització directament.",
|
||||
"Are you accepting the invitation?" : "Accepteu la invitació?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Poslat připomínky také těm, kteří mají tento sdílený kalendář připojený",
|
||||
"Reminders are always sent to organizers and attendees." : "Připomínky jsou vždy poslány organizátorům a účastníkům.",
|
||||
"Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push",
|
||||
"Cancel" : "Storno",
|
||||
"Import" : "Naimportovat",
|
||||
"Error while saving settings" : "Chyba při ukládání nastavení",
|
||||
"Contact reset successfully" : "Kontakt úspěšně resetován",
|
||||
"Error while resetting contact" : "Chyba při resetování kontaktu",
|
||||
"Contact imported successfully" : "Kontakt úspěšně naimportován",
|
||||
"Error while importing contact" : "Chyba při importování kontaktu",
|
||||
"Example Content" : "Obsah pro ukázku",
|
||||
"Set example content to be created on new user first login." : "Nastavit obsah pro ukázku, který vytvořit při prvním přihlášení nového uživatele.",
|
||||
"Import contact" : "Importovat kontakt",
|
||||
"Reset to default contact" : "Vrátit na výchozí kontakt",
|
||||
"Import contacts" : "Importovat kontakty",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?",
|
||||
"There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.",
|
||||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Poslat připomínky také těm, kteří mají tento sdílený kalendář připojený",
|
||||
"Reminders are always sent to organizers and attendees." : "Připomínky jsou vždy poslány organizátorům a účastníkům.",
|
||||
"Enable notifications for events via push" : "Upozorňovat na události prostřednictvím služby push",
|
||||
"Cancel" : "Storno",
|
||||
"Import" : "Naimportovat",
|
||||
"Error while saving settings" : "Chyba při ukládání nastavení",
|
||||
"Contact reset successfully" : "Kontakt úspěšně resetován",
|
||||
"Error while resetting contact" : "Chyba při resetování kontaktu",
|
||||
"Contact imported successfully" : "Kontakt úspěšně naimportován",
|
||||
"Error while importing contact" : "Chyba při importování kontaktu",
|
||||
"Example Content" : "Obsah pro ukázku",
|
||||
"Set example content to be created on new user first login." : "Nastavit obsah pro ukázku, který vytvořit při prvním přihlášení nového uživatele.",
|
||||
"Import contact" : "Importovat kontakt",
|
||||
"Reset to default contact" : "Vrátit na výchozí kontakt",
|
||||
"Import contacts" : "Importovat kontakty",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Naimportování nového .vcf souboru smaže stávající výchozí kontakt a nahradí ho novým. Chcete pokračovat?",
|
||||
"There was an error updating your attendance status." : "Vyskytla se chyba při aktualizaci vašeho stavu účasti.",
|
||||
"Please contact the organizer directly." : "Kontaktujte organizátora přímo.",
|
||||
"Are you accepting the invitation?" : "Přijímáte pozvání?",
|
||||
|
||||
@@ -303,9 +303,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Send også påmindelsesmeddelelser til kalenderdelinger",
|
||||
"Reminders are always sent to organizers and attendees." : "Påmindelser sendes altid til arrangører og deltagere.",
|
||||
"Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push",
|
||||
"Cancel" : "Annuller",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Der opstod en fejl under lagring af indstillinger",
|
||||
"There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.",
|
||||
"Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
|
||||
@@ -301,9 +301,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Send også påmindelsesmeddelelser til kalenderdelinger",
|
||||
"Reminders are always sent to organizers and attendees." : "Påmindelser sendes altid til arrangører og deltagere.",
|
||||
"Enable notifications for events via push" : "Aktiver notifikationer for begivenheder via push",
|
||||
"Cancel" : "Annuller",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Der opstod en fejl under lagring af indstillinger",
|
||||
"There was an error updating your attendance status." : "Der opstod en fejl under opdatering af din fremmødestatus.",
|
||||
"Please contact the organizer directly." : "Kontakt venligst arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Accepter du invitationen?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden",
|
||||
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt erfolgreich importiert",
|
||||
"Error while importing contact" : "Fehler beim Import des Kontakts",
|
||||
"Example Content" : "Beispielinhalt",
|
||||
"Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.",
|
||||
"Import contact" : "Kontakt importieren",
|
||||
"Reset to default contact" : "Standardkontakt zurücksetzen",
|
||||
"Import contacts" : "Kontakte importieren",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die freigegebenen Kalender senden",
|
||||
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt erfolgreich importiert",
|
||||
"Error while importing contact" : "Fehler beim Import des Kontakts",
|
||||
"Example Content" : "Beispielinhalt",
|
||||
"Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.",
|
||||
"Import contact" : "Kontakt importieren",
|
||||
"Reset to default contact" : "Standardkontakt zurücksetzen",
|
||||
"Import contacts" : "Kontakte importieren",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren deines Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die Kalenderfreigaben senden",
|
||||
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt importiert",
|
||||
"Error while importing contact" : "Fehler beim Import des Kontakts",
|
||||
"Example Content" : "Beispielinhalt",
|
||||
"Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.",
|
||||
"Import contact" : "Kontakt importieren",
|
||||
"Reset to default contact" : "Standardkontakt zurücksetzen",
|
||||
"Import contacts" : "Kontakte importieren",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Erinnerungsbenachrichtigungen auch an die Kalenderfreigaben senden",
|
||||
"Reminders are always sent to organizers and attendees." : "Erinnerungen werden immer an Organisatoren und Teilnehmer gesendet.",
|
||||
"Enable notifications for events via push" : "Benachrichtigungen für Termine per Push aktivieren",
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt importiert",
|
||||
"Error while importing contact" : "Fehler beim Import des Kontakts",
|
||||
"Example Content" : "Beispielinhalt",
|
||||
"Set example content to be created on new user first login." : "Beispielinhalte festlegen, die bei der ersten Anmeldung eines neuen Benutzers erstellt werden sollen.",
|
||||
"Import contact" : "Kontakt importieren",
|
||||
"Reset to default contact" : "Standardkontakt zurücksetzen",
|
||||
"Import contacts" : "Kontakte importieren",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Durch das Importieren einer neuen VCF-Datei wird der vorhandene Standardkontakt gelöscht und durch den neuen ersetzt. Fortsetzen?",
|
||||
"There was an error updating your attendance status." : "Es ist ein Fehler beim Aktualisieren Ihres Teilnehmerstatus aufgetreten.",
|
||||
"Please contact the organizer directly." : "Bitte den Organisator direkt kontaktieren.",
|
||||
"Are you accepting the invitation?" : "Die Einladung annehmen?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organisers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "Cancel",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"Contact reset successfully" : "Contact reset successfully",
|
||||
"Error while resetting contact" : "Error while resetting contact",
|
||||
"Contact imported successfully" : "Contact imported successfully",
|
||||
"Error while importing contact" : "Error while importing contact",
|
||||
"Example Content" : "Example Content",
|
||||
"Set example content to be created on new user first login." : "Set example content to be created on new user first login.",
|
||||
"Import contact" : "Import contact",
|
||||
"Reset to default contact" : "Reset to default contact",
|
||||
"Import contacts" : "Import contacts",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organiser directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organisers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "Cancel",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"Contact reset successfully" : "Contact reset successfully",
|
||||
"Error while resetting contact" : "Error while resetting contact",
|
||||
"Contact imported successfully" : "Contact imported successfully",
|
||||
"Error while importing contact" : "Error while importing contact",
|
||||
"Example Content" : "Example Content",
|
||||
"Set example content to be created on new user first login." : "Set example content to be created on new user first login.",
|
||||
"Import contact" : "Import contact",
|
||||
"Reset to default contact" : "Reset to default contact",
|
||||
"Import contacts" : "Import contacts",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organiser directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -301,9 +301,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar los ajustes",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -299,9 +299,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Activar notificaciones push para eventos",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar los ajustes",
|
||||
"There was an error updating your attendance status." : "Ha habido un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente con el organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -195,9 +195,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración.",
|
||||
"There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente al organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -193,9 +193,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorios a los asistentes del calendario también",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios siempre se envían a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración.",
|
||||
"There was an error updating your attendance status." : "Hubo un error al actualizar tu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacta directamente al organizador.",
|
||||
"Are you accepting the invitation?" : "¿Aceptas la invitación?",
|
||||
|
||||
@@ -236,9 +236,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración",
|
||||
"There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacte al organizador directamente.",
|
||||
"Are you accepting the invitation?" : "¿Acepta la invitación?",
|
||||
|
||||
@@ -234,9 +234,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar recordatorio también a los usuarios con los que se comparte el calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Los recordatorios se envían siempre a los organizadores y asistentes.",
|
||||
"Enable notifications for events via push" : "Habilitar notificaciones para eventos mediante push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Error al guardar la configuración",
|
||||
"There was an error updating your attendance status." : "Ocurrió un error al actualizar su estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Por favor, contacte al organizador directamente.",
|
||||
"Are you accepting the invitation?" : "¿Acepta la invitación?",
|
||||
|
||||
@@ -301,9 +301,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere",
|
||||
"Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.",
|
||||
"Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat",
|
||||
"Cancel" : "Utzi",
|
||||
"Import" : "Inportatu",
|
||||
"Error while saving settings" : "Errorea ezarpenak gordetzean",
|
||||
"There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.",
|
||||
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
|
||||
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
|
||||
|
||||
@@ -299,9 +299,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere",
|
||||
"Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.",
|
||||
"Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat",
|
||||
"Cancel" : "Utzi",
|
||||
"Import" : "Inportatu",
|
||||
"Error while saving settings" : "Errorea ezarpenak gordetzean",
|
||||
"There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.",
|
||||
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
|
||||
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
|
||||
|
||||
@@ -193,9 +193,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "ردکردن",
|
||||
"Import" : "وارد کردن",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organizer directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -191,9 +191,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "ردکردن",
|
||||
"Import" : "وارد کردن",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organizer directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -272,9 +272,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Envoyez également des notifications de rappel aux personnes partageant le calendrier",
|
||||
"Reminders are always sent to organizers and attendees." : "Des rappels sont toujours envoyés aux organisateurs et aux participants.",
|
||||
"Enable notifications for events via push" : "Activer les notifications push pour les évènements",
|
||||
"Cancel" : "Annuler",
|
||||
"Import" : "Importation",
|
||||
"Error while saving settings" : "Erreur lors de l'enregistrement des paramètres",
|
||||
"There was an error updating your attendance status." : "Une erreur s'est produite lors de la mise à jour de votre statut de présence.",
|
||||
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
|
||||
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
|
||||
|
||||
@@ -270,9 +270,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Envoyez également des notifications de rappel aux personnes partageant le calendrier",
|
||||
"Reminders are always sent to organizers and attendees." : "Des rappels sont toujours envoyés aux organisateurs et aux participants.",
|
||||
"Enable notifications for events via push" : "Activer les notifications push pour les évènements",
|
||||
"Cancel" : "Annuler",
|
||||
"Import" : "Importation",
|
||||
"Error while saving settings" : "Erreur lors de l'enregistrement des paramètres",
|
||||
"There was an error updating your attendance status." : "Une erreur s'est produite lors de la mise à jour de votre statut de présence.",
|
||||
"Please contact the organizer directly." : "Merci de contacter l'organisateur directement.",
|
||||
"Are you accepting the invitation?" : "Acceptez-vous l'invitation ?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Seol fógraí meabhrúcháin chuig scaireanna féilire freisin",
|
||||
"Reminders are always sent to organizers and attendees." : "Seoltar meabhrúcháin chuig na heagraithe agus an lucht freastail i gcónaí.",
|
||||
"Enable notifications for events via push" : "Cumasaigh fógraí le haghaidh imeachtaí trí bhrú",
|
||||
"Cancel" : "Cealaigh",
|
||||
"Import" : "Iompórtáil",
|
||||
"Error while saving settings" : "Earráid agus na socruithe á sábháil",
|
||||
"Contact reset successfully" : "D'éirigh le hathshocrú teagmhála",
|
||||
"Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú",
|
||||
"Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí",
|
||||
"Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil",
|
||||
"Example Content" : "Ábhar Samplach",
|
||||
"Set example content to be created on new user first login." : "Socraigh ábhar samplach le cruthú ar an gcéad logáil isteach úsáideora nua.",
|
||||
"Import contact" : "Iompórtáil teagmhála",
|
||||
"Reset to default contact" : "Athshocraigh go teagmhálaí réamhshocraithe",
|
||||
"Import contacts" : "Teagmhálaithe a allmhairiú",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?",
|
||||
"There was an error updating your attendance status." : "Tharla earráid agus do stádas freastail á nuashonrú.",
|
||||
"Please contact the organizer directly." : "Téigh i dteagmháil leis an eagraí go díreach le do thoil.",
|
||||
"Are you accepting the invitation?" : "An bhfuil tú ag glacadh leis an gcuireadh?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Seol fógraí meabhrúcháin chuig scaireanna féilire freisin",
|
||||
"Reminders are always sent to organizers and attendees." : "Seoltar meabhrúcháin chuig na heagraithe agus an lucht freastail i gcónaí.",
|
||||
"Enable notifications for events via push" : "Cumasaigh fógraí le haghaidh imeachtaí trí bhrú",
|
||||
"Cancel" : "Cealaigh",
|
||||
"Import" : "Iompórtáil",
|
||||
"Error while saving settings" : "Earráid agus na socruithe á sábháil",
|
||||
"Contact reset successfully" : "D'éirigh le hathshocrú teagmhála",
|
||||
"Error while resetting contact" : "Earráid agus an teagmhálaí á athshocrú",
|
||||
"Contact imported successfully" : "D'éirigh le hiompórtáil an teagmhálaí",
|
||||
"Error while importing contact" : "Earráid agus an teagmhálaí á iompórtáil",
|
||||
"Example Content" : "Ábhar Samplach",
|
||||
"Set example content to be created on new user first login." : "Socraigh ábhar samplach le cruthú ar an gcéad logáil isteach úsáideora nua.",
|
||||
"Import contact" : "Iompórtáil teagmhála",
|
||||
"Reset to default contact" : "Athshocraigh go teagmhálaí réamhshocraithe",
|
||||
"Import contacts" : "Teagmhálaithe a allmhairiú",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Má dhéantar comhad .vcf nua a iompórtáil, scriosfar an teagmhálaí réamhshocraithe atá ann cheana féin agus cuirfear an ceann nua ina ionad. Ar mhaith leat leanúint ar aghaidh?",
|
||||
"There was an error updating your attendance status." : "Tharla earráid agus do stádas freastail á nuashonrú.",
|
||||
"Please contact the organizer directly." : "Téigh i dteagmháil leis an eagraí go díreach le do thoil.",
|
||||
"Are you accepting the invitation?" : "An bhfuil tú ag glacadh leis an gcuireadh?",
|
||||
|
||||
@@ -303,9 +303,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar notificacións de lembrete tamén aos que comparten calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Os lembretes envíanselle sempre aos organizadores e aos asistentes.",
|
||||
"Enable notifications for events via push" : "Activar o envío de notificacións emerxentes para eventos",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Produciuse un erro ao gardar os axustes",
|
||||
"There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Contacte directamente co organizador.",
|
||||
"Are you accepting the invitation?" : "Acepta Vde. o convite?",
|
||||
|
||||
@@ -301,9 +301,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar notificacións de lembrete tamén aos que comparten calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "Os lembretes envíanselle sempre aos organizadores e aos asistentes.",
|
||||
"Enable notifications for events via push" : "Activar o envío de notificacións emerxentes para eventos",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
"Error while saving settings" : "Produciuse un erro ao gardar os axustes",
|
||||
"There was an error updating your attendance status." : "Produciuse un erro ao actualizar o seu estado de asistencia.",
|
||||
"Please contact the organizer directly." : "Contacte directamente co organizador.",
|
||||
"Are you accepting the invitation?" : "Acepta Vde. o convite?",
|
||||
|
||||
@@ -260,9 +260,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Emlékeztető értesítések küldése azoknak is, akikkel a naptár meg van osztva",
|
||||
"Reminders are always sent to organizers and attendees." : "Az értesítések mindig a szervezőknek és a résztvevőknek lesznek elküldve.",
|
||||
"Enable notifications for events via push" : "Leküldéses értesítések engedélyezése az eseményekhez",
|
||||
"Cancel" : "Mégse",
|
||||
"Import" : "Importálás",
|
||||
"Error while saving settings" : "Hiba a beállítások mentése során",
|
||||
"There was an error updating your attendance status." : "Hiba történt a részvételi állapotának frissítése során.",
|
||||
"Please contact the organizer directly." : "Vegye fel a kapcsolatot közvetlenül a szervezővel.",
|
||||
"Are you accepting the invitation?" : "Elfogadja az meghívást?",
|
||||
|
||||
@@ -258,9 +258,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Emlékeztető értesítések küldése azoknak is, akikkel a naptár meg van osztva",
|
||||
"Reminders are always sent to organizers and attendees." : "Az értesítések mindig a szervezőknek és a résztvevőknek lesznek elküldve.",
|
||||
"Enable notifications for events via push" : "Leküldéses értesítések engedélyezése az eseményekhez",
|
||||
"Cancel" : "Mégse",
|
||||
"Import" : "Importálás",
|
||||
"Error while saving settings" : "Hiba a beállítások mentése során",
|
||||
"There was an error updating your attendance status." : "Hiba történt a részvételi állapotának frissítése során.",
|
||||
"Please contact the organizer directly." : "Vegye fel a kapcsolatot közvetlenül a szervezővel.",
|
||||
"Are you accepting the invitation?" : "Elfogadja az meghívást?",
|
||||
|
||||
@@ -303,9 +303,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Senda einnig tilkynningar til þeirra sem deila dagatalinu",
|
||||
"Reminders are always sent to organizers and attendees." : "Áminningar eru alltaf sendar til skipuleggjenda og þátttakenda.",
|
||||
"Enable notifications for events via push" : "Senda tilkynningar fyrir atburði sem ýtitilkynningar",
|
||||
"Cancel" : "Hætta við",
|
||||
"Import" : "Flytja inn",
|
||||
"Error while saving settings" : "Villa við að vista stillingar",
|
||||
"There was an error updating your attendance status." : "Það kom upp villa við að uppfæra mætingarstöðu þína.",
|
||||
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
|
||||
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
|
||||
|
||||
@@ -301,9 +301,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Senda einnig tilkynningar til þeirra sem deila dagatalinu",
|
||||
"Reminders are always sent to organizers and attendees." : "Áminningar eru alltaf sendar til skipuleggjenda og þátttakenda.",
|
||||
"Enable notifications for events via push" : "Senda tilkynningar fyrir atburði sem ýtitilkynningar",
|
||||
"Cancel" : "Hætta við",
|
||||
"Import" : "Flytja inn",
|
||||
"Error while saving settings" : "Villa við að vista stillingar",
|
||||
"There was an error updating your attendance status." : "Það kom upp villa við að uppfæra mætingarstöðu þína.",
|
||||
"Please contact the organizer directly." : "Hafðu samband beint við skipuleggjendurna.",
|
||||
"Are you accepting the invitation?" : "Ætlar þú að samþykkja boðið?",
|
||||
|
||||
@@ -223,9 +223,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Cancel" : "Annulla",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
|
||||
"There was an error updating your attendance status." : "Si è verificato un errore durante l'aggiornamento dello stato della tua partecipazione.",
|
||||
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
|
||||
@@ -221,9 +221,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
|
||||
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
|
||||
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
|
||||
"Cancel" : "Annulla",
|
||||
"Import" : "Importa",
|
||||
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
|
||||
"There was an error updating your attendance status." : "Si è verificato un errore durante l'aggiornamento dello stato della tua partecipazione.",
|
||||
"Please contact the organizer directly." : "Contatta direttamente l'amministratore.",
|
||||
"Are you accepting the invitation?" : "Accetti l'invito?",
|
||||
|
||||
@@ -306,19 +306,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "カレンダー共有にもリマインダー通知を送信する",
|
||||
"Reminders are always sent to organizers and attendees." : "リマインダーを常に作成者と出席者に送信します。",
|
||||
"Enable notifications for events via push" : "イベントのプッシュ通知を有効にする",
|
||||
"Cancel" : "キャンセル",
|
||||
"Import" : "インポート",
|
||||
"Error while saving settings" : "設定の保存中にエラーが発生",
|
||||
"Contact reset successfully" : "連絡先のリセットが正常に完了しました",
|
||||
"Error while resetting contact" : "連絡先のリセット中にエラーが発生しました",
|
||||
"Contact imported successfully" : "連絡先のインポートが正常に完了しました",
|
||||
"Error while importing contact" : "連絡先のインポート中にエラーが発生しました",
|
||||
"Example Content" : "サンプルコンテンツ",
|
||||
"Set example content to be created on new user first login." : "新規ユーザの初回ログイン時に作成されるサンプルコンテンツを設定します。",
|
||||
"Import contact" : "連絡先のインポート",
|
||||
"Reset to default contact" : "デフォルトの連絡先にリセットする",
|
||||
"Import contacts" : "連絡先のインポート",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?",
|
||||
"There was an error updating your attendance status." : "出席状況の更新中にエラーが発生しました。",
|
||||
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
|
||||
"Are you accepting the invitation?" : "招待を受け入れていますか?",
|
||||
|
||||
@@ -304,19 +304,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "カレンダー共有にもリマインダー通知を送信する",
|
||||
"Reminders are always sent to organizers and attendees." : "リマインダーを常に作成者と出席者に送信します。",
|
||||
"Enable notifications for events via push" : "イベントのプッシュ通知を有効にする",
|
||||
"Cancel" : "キャンセル",
|
||||
"Import" : "インポート",
|
||||
"Error while saving settings" : "設定の保存中にエラーが発生",
|
||||
"Contact reset successfully" : "連絡先のリセットが正常に完了しました",
|
||||
"Error while resetting contact" : "連絡先のリセット中にエラーが発生しました",
|
||||
"Contact imported successfully" : "連絡先のインポートが正常に完了しました",
|
||||
"Error while importing contact" : "連絡先のインポート中にエラーが発生しました",
|
||||
"Example Content" : "サンプルコンテンツ",
|
||||
"Set example content to be created on new user first login." : "新規ユーザの初回ログイン時に作成されるサンプルコンテンツを設定します。",
|
||||
"Import contact" : "連絡先のインポート",
|
||||
"Reset to default contact" : "デフォルトの連絡先にリセットする",
|
||||
"Import contacts" : "連絡先のインポート",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "新しい .vcf ファイルをインポートすると、既存のデフォルト連絡先が削除され、新しいものに置き換えられます。続行しますか?",
|
||||
"There was an error updating your attendance status." : "出席状況の更新中にエラーが発生しました。",
|
||||
"Please contact the organizer directly." : "主催者に直接お問い合わせください。",
|
||||
"Are you accepting the invitation?" : "招待を受け入れていますか?",
|
||||
|
||||
@@ -207,9 +207,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "Cancel",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organizer directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -205,9 +205,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Send reminder notifications to calendar sharees as well",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Enable notifications for events via push",
|
||||
"Cancel" : "Cancel",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Error while saving settings",
|
||||
"There was an error updating your attendance status." : "There was an error updating your attendance status.",
|
||||
"Please contact the organizer directly." : "Please contact the organizer directly.",
|
||||
"Are you accepting the invitation?" : "Are you accepting the invitation?",
|
||||
|
||||
@@ -208,9 +208,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "캘린더 공유자에게도 미리 알림 보내기",
|
||||
"Reminders are always sent to organizers and attendees." : "미리 알림은 주최자와 참석자에게 항상 전송됩니다.",
|
||||
"Enable notifications for events via push" : "일정에 대한 푸시 알림 활성화",
|
||||
"Cancel" : "취소",
|
||||
"Import" : "가져오기",
|
||||
"Error while saving settings" : "설정 저장 중 오류 발생",
|
||||
"There was an error updating your attendance status." : "참석 상태를 업데이트하는 중 오류가 발생했습니다.",
|
||||
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
|
||||
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
|
||||
|
||||
@@ -206,9 +206,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "캘린더 공유자에게도 미리 알림 보내기",
|
||||
"Reminders are always sent to organizers and attendees." : "미리 알림은 주최자와 참석자에게 항상 전송됩니다.",
|
||||
"Enable notifications for events via push" : "일정에 대한 푸시 알림 활성화",
|
||||
"Cancel" : "취소",
|
||||
"Import" : "가져오기",
|
||||
"Error while saving settings" : "설정 저장 중 오류 발생",
|
||||
"There was an error updating your attendance status." : "참석 상태를 업데이트하는 중 오류가 발생했습니다.",
|
||||
"Please contact the organizer directly." : "주최자에게 직접 연락하십시오.",
|
||||
"Are you accepting the invitation?" : "초대를 수락하시겠습니까?",
|
||||
|
||||
@@ -197,8 +197,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот",
|
||||
"Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.",
|
||||
"Enable notifications for events via push" : "Овозможи известувања за настани преку push",
|
||||
"Cancel" : "Откажи",
|
||||
"Import" : "Увези",
|
||||
"There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.",
|
||||
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
|
||||
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
|
||||
|
||||
@@ -195,8 +195,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Испратете известувања за потсетници и до споделувањата на календарот",
|
||||
"Reminders are always sent to organizers and attendees." : "Секогаш се испраќаат потсетници до организаторите и до присутните.",
|
||||
"Enable notifications for events via push" : "Овозможи известувања за настани преку push",
|
||||
"Cancel" : "Откажи",
|
||||
"Import" : "Увези",
|
||||
"There was an error updating your attendance status." : "Настана грешка при ажурирање на вашето присуство.",
|
||||
"Please contact the organizer directly." : "Контактирајте го организаторот директно.",
|
||||
"Are you accepting the invitation?" : "Дали ја прифаќате поканата?",
|
||||
|
||||
@@ -263,9 +263,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Send påminnelsesvarsler til kalenderdelinger også",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Aktiver varsler for hendelser via push",
|
||||
"Cancel" : "Avbryt",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Feil ved lagring av innstillinger",
|
||||
"There was an error updating your attendance status." : "Det oppsto en feil under oppdateringen av oppmøtestatusen din.",
|
||||
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
|
||||
|
||||
@@ -261,9 +261,6 @@
|
||||
"Send reminder notifications to calendar sharees as well" : "Send påminnelsesvarsler til kalenderdelinger også",
|
||||
"Reminders are always sent to organizers and attendees." : "Reminders are always sent to organizers and attendees.",
|
||||
"Enable notifications for events via push" : "Aktiver varsler for hendelser via push",
|
||||
"Cancel" : "Avbryt",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Feil ved lagring av innstillinger",
|
||||
"There was an error updating your attendance status." : "Det oppsto en feil under oppdateringen av oppmøtestatusen din.",
|
||||
"Please contact the organizer directly." : "Ta kontakt med arrangøren direkte.",
|
||||
"Are you accepting the invitation?" : "Aksepterer du invitasjonen?",
|
||||
|
||||
@@ -179,9 +179,6 @@ OC.L10N.register(
|
||||
"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.",
|
||||
"Enable notifications for events via push" : "Inschakelen push-melding voor afspraken",
|
||||
"Cancel" : "Annuleren",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Probleem tijdens het opslaan van instellingen",
|
||||
"There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.",
|
||||
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
|
||||
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
|
||||
|
||||
@@ -177,9 +177,6 @@
|
||||
"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.",
|
||||
"Enable notifications for events via push" : "Inschakelen push-melding voor afspraken",
|
||||
"Cancel" : "Annuleren",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Probleem tijdens het opslaan van instellingen",
|
||||
"There was an error updating your attendance status." : "Er trad een fout op bij het bijwerken van je deelnamestatus.",
|
||||
"Please contact the organizer directly." : "Neem rechtstreeks contact op met de organisator.",
|
||||
"Are you accepting the invitation?" : "Neem je de uitnodiging aan?",
|
||||
|
||||
@@ -231,9 +231,6 @@ OC.L10N.register(
|
||||
"Send reminder notifications to calendar sharees as well" : "Wysyłaj przypomnienia również do udostępnionych kalendarzy",
|
||||
"Reminders are always sent to organizers and attendees." : "Przypomnienia są zawsze wysyłane do organizatorów i uczestników.",
|
||||
"Enable notifications for events via push" : "Włącz powiadomienia o zdarzeniach poprzez Push",
|
||||
"Cancel" : "Anuluj",
|
||||
"Import" : "Importuj",
|
||||
"Error while saving settings" : "Błąd podczas zapisywania ustawień",
|
||||
"There was an error updating your attendance status." : "Wystąpił błąd zmiany stanu uczestnictwa",
|
||||
"Please contact the organizer directly." : "Skontaktuj się bezpośrednio z orgnizatorem.",
|
||||
"Are you accepting the invitation?" : "Czy akceptujesz zaproszenie?",
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user