Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c89e3c2f74 | |||
| 084487bdd5 | |||
| 6f2722c15b |
+4
-2
@@ -16,9 +16,11 @@
|
||||
*.ts @nextcloud/server-frontend
|
||||
|
||||
# dependency management
|
||||
package.json @nextcloud/server-dependabot @nextcloud/server-frontend
|
||||
package.json @nextcloud/server-dependabot
|
||||
package-lock.json @nextcloud/server-dependabot
|
||||
/dist @nextcloud/server-dependabot
|
||||
|
||||
# Compiled assets only - no owner set to not spam on automated dependency updates
|
||||
/dist
|
||||
|
||||
# App maintainers
|
||||
/apps/admin_audit/appinfo/info.xml @luka-nextcloud @blizzz
|
||||
|
||||
+228
-124
@@ -1,8 +1,233 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
# Linting and coding style
|
||||
- package-ecosystem: composer
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# cs-fixer
|
||||
- package-ecosystem: composer
|
||||
directory: "/vendor-bin/cs-fixer"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:10"
|
||||
timezone: Europe/Copenhagen
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# openapi-extractor
|
||||
- package-ecosystem: composer
|
||||
directory: "/vendor-bin/openapi-extractor"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:20"
|
||||
timezone: Europe/Brussels
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
- "provokateurin"
|
||||
|
||||
# psalm
|
||||
- package-ecosystem: composer
|
||||
directory: "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:30"
|
||||
timezone: Europe/Madrid
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# phpunit
|
||||
- package-ecosystem: composer
|
||||
directory: "/vendor-bin/phpunit"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:40"
|
||||
timezone: Europe/Madrid
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# Main master npm
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
|
||||
# Testing master npm
|
||||
- package-ecosystem: npm
|
||||
directory: "/build"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
|
||||
# Testing master composer
|
||||
- package-ecosystem: composer
|
||||
directory: "/build/integration"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable29
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable30
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
target-branch: stable31
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
|
||||
- package-ecosystem: composer
|
||||
directory: "/build/integration"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
target-branch: stable29
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
# ignore all GitHub linguist patch updates
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor", "version-update:semver-patch"]
|
||||
|
||||
- package-ecosystem: composer
|
||||
directory: "/build/integration"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
target-branch: stable30
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
# ignore all GitHub linguist patch updates
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor", "version-update:semver-patch"]
|
||||
|
||||
- package-ecosystem: composer
|
||||
directory: "/build/integration"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
target-branch: stable31
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
ignore:
|
||||
# ignore all GitHub linguist patch updates
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor", "version-update:semver-patch"]
|
||||
|
||||
# GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
@@ -16,127 +241,6 @@ updates:
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
reviewers:
|
||||
- "nextcloud/server-dependabot"
|
||||
|
||||
# Main composer (linting, testing, openapi)
|
||||
- package-ecosystem: composer
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/integration"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
- "/vendor-bin/rector"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
|
||||
# Main master npm frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
|
||||
# Latest stable release
|
||||
# Composer dependencies for linting and testing
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable31
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/integration"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:30"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# Latest stable branch
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable31
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:30"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
# Older stable releases
|
||||
|
||||
# Composer dependencies for linting and testing
|
||||
- package-ecosystem: composer
|
||||
target-branch: stable30
|
||||
directories:
|
||||
- "/"
|
||||
- "/build/integration"
|
||||
- "/vendor-bin/cs-fixer"
|
||||
- "/vendor-bin/openapi-extractor"
|
||||
- "/vendor-bin/phpunit"
|
||||
- "/vendor-bin/psalm"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
ignore:
|
||||
# only patch updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major", "version-update:semver-minor"]
|
||||
|
||||
# frontend dependencies
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable30
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "04:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 20
|
||||
labels:
|
||||
- "3. to review"
|
||||
- "feature: dependencies"
|
||||
# Disable automatic rebasing because without a build CI will likely fail anyway
|
||||
rebase-strategy: "disabled"
|
||||
ignore:
|
||||
# no major updates on stable branches
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
@@ -36,7 +36,6 @@ jobs:
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
- build/autoloaderchecker.sh
|
||||
|
||||
autoloader:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -58,7 +57,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
@@ -67,6 +66,9 @@ jobs:
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Check auto loaders
|
||||
run: bash ./build/autoloaderchecker.sh
|
||||
|
||||
@@ -87,7 +89,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
@@ -108,9 +110,6 @@ jobs:
|
||||
- name: Check that all and only expected files are included
|
||||
run: php ./build/files-checker.php
|
||||
|
||||
- name: Check that all shipped apps are linted by psalm
|
||||
run: sh ./build/psalm-checker.sh
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.package-engines-versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -94,56 +94,11 @@ jobs:
|
||||
matrix:
|
||||
# Run multiple copies of the current job in parallel
|
||||
# Please increase the number or runners as your tests suite grows (0 based index for e2e tests)
|
||||
containers: ['component', 'setup', '0', '1', '2', '3', '4', '5', '6', '7']
|
||||
containers: ["component", '0', '1', '2', '3', '4', '5', '6', '7']
|
||||
# Hack as strategy.job-total includes the component and GitHub does not allow math expressions
|
||||
# Always align this number with the total of e2e runners (max. index + 1)
|
||||
total-containers: [8]
|
||||
|
||||
services:
|
||||
mysql:
|
||||
# Only start mysql if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/nextcloud/continuous-integration-mysql-8.4:latest' || ''}}
|
||||
ports:
|
||||
- '3306/tcp'
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: oc_autotest
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
|
||||
mariadb:
|
||||
# Only start mariadb if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'mariadb:11.4' || ''}}
|
||||
ports:
|
||||
- '3306/tcp'
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: oc_autotest
|
||||
options: --health-cmd="mariadb-admin ping" --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
postgres:
|
||||
# Only start postgres if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/nextcloud/continuous-integration-postgres-17:latest' || ''}}
|
||||
ports:
|
||||
- '5432/tcp'
|
||||
env:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: rootpassword
|
||||
POSTGRES_DB: nextcloud
|
||||
options: --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
oracle:
|
||||
# Only start oracle if we are running the setup tests
|
||||
image: ${{matrix.containers == 'setup' && 'ghcr.io/gvenzl/oracle-free:23' || ''}}
|
||||
ports:
|
||||
- '1521'
|
||||
env:
|
||||
ORACLE_PASSWORD: oracle
|
||||
options: --health-cmd healthcheck.sh --health-interval 20s --health-timeout 10s --health-retries 10
|
||||
|
||||
name: runner ${{ matrix.containers }}
|
||||
|
||||
steps:
|
||||
@@ -155,7 +110,7 @@ jobs:
|
||||
path: ./
|
||||
|
||||
- name: Set up node ${{ needs.init.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
with:
|
||||
node-version: ${{ needs.init.outputs.nodeVersion }}
|
||||
|
||||
@@ -186,7 +141,6 @@ jobs:
|
||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||
SPLIT: ${{ matrix.total-containers }}
|
||||
SPLIT_INDEX: ${{ matrix.containers == 'component' && 0 || matrix.containers }}
|
||||
SETUP_TESTING: ${{ matrix.containers == 'setup' && 'true' || '' }}
|
||||
|
||||
- name: Upload snapshots and videos
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -96,22 +96,15 @@ jobs:
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/FtpTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-ftp
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-ftp
|
||||
|
||||
- name: ftpd logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -94,22 +94,15 @@ jobs:
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/Amazons3Test.php \
|
||||
apps/files_external/tests/Storage/VersionedAmazonS3Test.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
@@ -147,7 +140,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -168,22 +161,15 @@ jobs:
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/Amazons3Test.php \
|
||||
apps/files_external/tests/Storage/VersionedAmazonS3Test.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-s3
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
if [[ '${{ matrix.sftpd }}' == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp 'test:test:::data'; fi
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -85,22 +85,15 @@ jobs:
|
||||
run: composer run test:files_external -- \
|
||||
apps/files_external/tests/Storage/SftpTest.php \
|
||||
apps/files_external/tests/Storage/SFTP_KeyTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-sftp
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-sftp
|
||||
|
||||
- name: sftpd logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -83,18 +83,6 @@ jobs:
|
||||
run: |
|
||||
apps/files_external/tests/sso-setup/test-sso-smb.sh ${{ env.DC_IP }}
|
||||
|
||||
- name: Show logs DC
|
||||
if: always()
|
||||
run: |
|
||||
docker logs dc
|
||||
echo "------------"
|
||||
docker exec dc cat /var/log/samba/log.samba
|
||||
|
||||
- name: Show logs Apache
|
||||
if: always()
|
||||
run: |
|
||||
docker logs apache
|
||||
|
||||
- name: Show logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -90,22 +90,15 @@ jobs:
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- --verbose \
|
||||
apps/files_external/tests/Storage/SmbTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v4.1.1
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-smb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-smb
|
||||
|
||||
files-external-smb-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-smb]
|
||||
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -87,22 +87,15 @@ jobs:
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- --verbose \
|
||||
apps/files_external/tests/Storage/WebdavTest.php \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v4.1.1
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-webdav
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-webdav
|
||||
|
||||
files-external-webdav-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-webdav-apache]
|
||||
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -75,22 +75,15 @@ jobs:
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:files_external -- \
|
||||
--log-junit junit.xml \
|
||||
${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-files-external-generic
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-files-external-generic
|
||||
|
||||
files-external-summary:
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, files-external-generic ]
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
@@ -114,7 +114,7 @@ jobs:
|
||||
ref: ${{ matrix.activity-versions }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
|
||||
@@ -63,7 +63,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v3
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v3
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up php8.1
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: 8.1
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
@@ -56,7 +56,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
fallbackNpm: '^10'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -99,14 +99,10 @@ jobs:
|
||||
run: npm run test:coverage --if-present
|
||||
|
||||
- name: Collect coverage
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v4.3.1
|
||||
with:
|
||||
files: ./coverage/lcov.info
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
|
||||
jsunit:
|
||||
runs-on: ubuntu-latest
|
||||
needs: [versions, changes]
|
||||
@@ -121,7 +117,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
with:
|
||||
node-version: ${{ needs.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -149,7 +145,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up node ${{ needs.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v3
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # 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@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
||||
uses: actions/setup-node@cdca7365b2dadb8aad0a33bc7601856ffabcc48e # v4.3.0
|
||||
with:
|
||||
node-version: ${{ steps.versions.outputs.nodeVersion }}
|
||||
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
- name: Fix npm audit
|
||||
id: npm-audit
|
||||
uses: nextcloud-libraries/npm-audit-action@1b1728b2b4a7a78d69de65608efcf4db0e3e42d0 # v0.2.0
|
||||
uses: nextcloud-libraries/npm-audit-action@2a60bd2e79cc77f2cc4d9a3fe40f1a69896f3a87 # v0.1.0
|
||||
|
||||
- name: Run npm ci and npm run build
|
||||
if: steps.checkout.outcome == 'success'
|
||||
|
||||
@@ -74,7 +74,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -101,21 +101,15 @@ jobs:
|
||||
OBJECT_STORE: azure
|
||||
OBJECT_STORE_KEY: nextcloud
|
||||
OBJECT_STORE_SECRET: bmV4dGNsb3Vk
|
||||
run: composer run test -- --group PRIMARY-azure --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
run: composer run test -- --group PRIMARY-azure ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-azure
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-azure
|
||||
|
||||
- name: Azurite logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -107,21 +107,15 @@ jobs:
|
||||
OBJECT_STORE: s3
|
||||
OBJECT_STORE_KEY: nextcloud
|
||||
OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ=
|
||||
run: composer run test -- --group PRIMARY-s3 --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
run: composer run test -- --group PRIMARY-s3 ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-s3
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-s3
|
||||
|
||||
- name: S3 logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -97,21 +97,15 @@ jobs:
|
||||
env:
|
||||
OBJECT_STORE: swift
|
||||
OBJECT_STORE_SECRET: veryfast
|
||||
run: composer run test -- --group PRIMARY-swift --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
run: composer run test -- --group PRIMARY-swift ${{ matrix.coverage && ' --coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-swift
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-swift
|
||||
|
||||
- name: Swift logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype, curl, dom, fileinfo, gd, json, libxml, mbstring, openssl, pcntl, pdo, posix, session, simplexml, xml, xmlreader, xmlwriter, zip, zlib
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
ref: ${{ github.event.pull_request.base.ref }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
sudo apt-get install -y ffmpeg imagemagick libmagickcore-6.q16-3-extra
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: ctype, curl, dom, fileinfo, gd, imagick, intl, json, mbstring, openssl, pdo_sqlite, posix, sqlite, xml, zip, apcu
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -120,21 +120,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mariadb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-mariadb
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -97,21 +97,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit memcached tests
|
||||
run: composer run test -- --group Memcache,Memcached --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
run: composer run test -- --group Memcache,Memcached ${{ matrix.coverage && '--coverage-clover ./clover.xml' || '' }}
|
||||
|
||||
- name: Upload code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.xml
|
||||
flags: phpunit-memcached
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-memcached
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -125,7 +125,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -155,21 +155,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -120,21 +120,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -103,21 +103,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit nodb testsuite
|
||||
run: composer run test -- --exclude-group DB,SLOWDB --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.nodb.xml' || '' }}
|
||||
run: composer run test -- --exclude-group DB,SLOWDB ${{ matrix.coverage && ' --coverage-clover ./clover.nodb.xml' || '' }}
|
||||
|
||||
- name: Upload nodb code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.nodb.xml
|
||||
flags: phpunit-nodb
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-nodb
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -75,7 +75,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
|
||||
@@ -103,7 +103,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -125,21 +125,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-oci
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-oci
|
||||
|
||||
- name: Run repair steps
|
||||
run: |
|
||||
./occ maintenance:repair --include-expensive
|
||||
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -115,21 +115,15 @@ jobs:
|
||||
php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0
|
||||
|
||||
- name: PHPUnit database tests
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-postgres
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-postgres
|
||||
|
||||
- name: Run repair steps
|
||||
run: |
|
||||
./occ maintenance:repair --include-expensive
|
||||
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
@@ -101,21 +101,15 @@ jobs:
|
||||
run: ./occ app:list && echo "======= System config =======" && ./occ config:list system
|
||||
|
||||
- name: PHPUnit database tests
|
||||
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
||||
run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@ad3126e916f78f00edff4ed0317cf185271ccc2d # v5.4.2
|
||||
uses: codecov/codecov-action@v5.4.0
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-sqlite
|
||||
|
||||
- name: Upload test results
|
||||
if: ${{ !cancelled() }}
|
||||
uses: codecov/test-results-action@f2dba722c67b86c6caa034178c6e4d35335f6706 # v1.1.0
|
||||
with:
|
||||
flags: phpunit-sqlite
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
|
||||
@@ -30,7 +30,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
@@ -60,7 +60,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
@@ -94,7 +94,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
@@ -124,7 +124,7 @@ jobs:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@cf4cade2721270509d5b1c766ab3549210a39a2a #v2.33.0
|
||||
uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 #v2.32.0
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
|
||||
@@ -131,10 +131,6 @@ Files: build/stubs/pcntl.php build/stubs/zip.php
|
||||
Copyright: 2022 JetBrains
|
||||
License: Apache-2.0
|
||||
|
||||
Files: build/stubs/excimer.php
|
||||
Copyright: 2019 Wikimedia Foundation
|
||||
License: Apache-2.0
|
||||
|
||||
Files: core/js/mimetypelist.js core/js/core.json themes/example/core/img
|
||||
Copyright: 2016 ownCloud, Inc., 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
License: AGPL-3.0-only
|
||||
|
||||
+1
-1
Submodule 3rdparty updated: e0a509739b...d8eb3e1e51
@@ -67,7 +67,7 @@
|
||||
- Bernhard Posselt <dev@bernhard-posselt.com>
|
||||
- Bernhard Reiter <ockham@raz.or.at>
|
||||
- Bill McGonigle <bill-github.com@bfccomputing.com>
|
||||
- Daniel Niccoli <daniel.niccoli@gmail.com>
|
||||
- Birk Borkason <daniel.niccoli@gmail.com>
|
||||
- Bjoern Schiessle <bjoern@schiessle.org>
|
||||
- Björn Schießle <bjoern@schiessle.org>
|
||||
- Bjørn Forsman <bjorn.forsman@gmail.com>
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Aodit / Kerzhlevr"
|
||||
},
|
||||
"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");
|
||||
@@ -1,4 +0,0 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Aodit / Kerzhlevr"
|
||||
},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
|
||||
}
|
||||
@@ -10,6 +10,7 @@ namespace OCA\AdminAudit\Actions;
|
||||
use OC\Files\Node\NonExistingFile;
|
||||
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeReadEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
@@ -25,6 +26,9 @@ use Psr\Log\LoggerInterface;
|
||||
* @package OCA\AdminAudit\Actions
|
||||
*/
|
||||
class Files extends Action {
|
||||
|
||||
private array $renamedNodes = [];
|
||||
|
||||
/**
|
||||
* Logs file read actions
|
||||
*/
|
||||
@@ -48,16 +52,31 @@ class Files extends Action {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*/
|
||||
public function beforeRename(BeforeNodeRenamedEvent $event): void {
|
||||
try {
|
||||
$source = $event->getSource();
|
||||
$this->renamedNodes[$source->getId()] = $source;
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file rename: ' . $e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*/
|
||||
public function afterRename(NodeRenamedEvent $event): void {
|
||||
try {
|
||||
$target = $event->getTarget();
|
||||
$source = $event->getSource();
|
||||
$originalSource = $this->renamedNodes[$target->getId()];
|
||||
$params = [
|
||||
'newid' => $target->getId(),
|
||||
'oldpath' => $source->getPath(),
|
||||
'oldpath' => $originalSource->getPath(),
|
||||
'newpath' => $target->getPath(),
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
|
||||
@@ -8,6 +8,16 @@ declare(strict_types=1);
|
||||
namespace OCA\AdminAudit\Actions;
|
||||
|
||||
class Versions extends Action {
|
||||
public function rollback(array $params): void {
|
||||
$this->log('Version "%s" of "%s" was restored.',
|
||||
[
|
||||
'version' => $params['revision'],
|
||||
'path' => $params['path']
|
||||
],
|
||||
['version', 'path']
|
||||
);
|
||||
}
|
||||
|
||||
public function delete(array $params): void {
|
||||
$this->log('Version "%s" was deleted.',
|
||||
['path' => $params['path']],
|
||||
|
||||
@@ -27,7 +27,6 @@ use OCA\AdminAudit\Listener\GroupManagementEventListener;
|
||||
use OCA\AdminAudit\Listener\SecurityEventListener;
|
||||
use OCA\AdminAudit\Listener\SharingEventListener;
|
||||
use OCA\AdminAudit\Listener\UserManagementEventListener;
|
||||
use OCA\Files_Versions\Events\VersionRestoredEvent;
|
||||
use OCP\App\Events\AppDisableEvent;
|
||||
use OCP\App\Events\AppEnableEvent;
|
||||
use OCP\App\Events\AppUpdateEvent;
|
||||
@@ -42,6 +41,7 @@ use OCP\Console\ConsoleEvent;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\Events\Node\BeforeNodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeReadEvent;
|
||||
use OCP\Files\Events\Node\BeforeNodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
@@ -110,7 +110,6 @@ class Application extends App implements IBootstrap {
|
||||
|
||||
// File events
|
||||
$context->registerEventListener(BeforePreviewFetchedEvent::class, FileEventListener::class);
|
||||
$context->registerEventListener(VersionRestoredEvent::class, FileEventListener::class);
|
||||
|
||||
// Security events
|
||||
$context->registerEventListener(TwoFactorProviderChallengePassed::class, SecurityEventListener::class);
|
||||
@@ -169,6 +168,13 @@ class Application extends App implements IBootstrap {
|
||||
private function fileHooks(IAuditLogger $logger, IEventDispatcher $eventDispatcher): void {
|
||||
$fileActions = new Files($logger);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeRenamedEvent::class,
|
||||
function (BeforeNodeRenamedEvent $event) use ($fileActions): void {
|
||||
$fileActions->beforeRename($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeRenamedEvent::class,
|
||||
function (NodeRenamedEvent $event) use ($fileActions): void {
|
||||
@@ -214,6 +220,7 @@ class Application extends App implements IBootstrap {
|
||||
|
||||
private function versionsHooks(IAuditLogger $logger): void {
|
||||
$versionsActions = new Versions($logger);
|
||||
Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
|
||||
Util::connectHook('\OCP\Versions', 'delete', $versionsActions, 'delete');
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ declare(strict_types=1);
|
||||
namespace OCA\AdminAudit\Listener;
|
||||
|
||||
use OCA\AdminAudit\Actions\Action;
|
||||
use OCA\Files_Versions\Events\VersionRestoredEvent;
|
||||
use OCP\EventDispatcher\Event;
|
||||
use OCP\EventDispatcher\IEventListener;
|
||||
use OCP\Files\InvalidPathException;
|
||||
@@ -20,14 +19,12 @@ use OCP\Server;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
* @template-implements IEventListener<BeforePreviewFetchedEvent|VersionRestoredEvent>
|
||||
* @template-implements IEventListener<BeforePreviewFetchedEvent>
|
||||
*/
|
||||
class FileEventListener extends Action implements IEventListener {
|
||||
public function handle(Event $event): void {
|
||||
if ($event instanceof BeforePreviewFetchedEvent) {
|
||||
$this->beforePreviewFetched($event);
|
||||
} elseif ($event instanceof VersionRestoredEvent) {
|
||||
$this->versionRestored($event);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,18 +54,4 @@ class FileEventListener extends Action implements IEventListener {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs when a version is restored
|
||||
*/
|
||||
private function versionRestored(VersionRestoredEvent $event): void {
|
||||
$version = $event->getVersion();
|
||||
$this->log('Version "%s" of "%s" was restored.',
|
||||
[
|
||||
'version' => $version->getRevisionId(),
|
||||
'path' => $version->getVersionPath()
|
||||
],
|
||||
['version', 'path']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "Asl faylni o'chirishda kutilmagan xatolik yuz berdi.",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Bulutlar bir-biri bilan aloqa qilish va ma'lumot almashish imkonini beradi",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
@@ -1,6 +0,0 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "Asl faylni o'chirishda kutilmagan xatolik yuz berdi.",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Bulutlar bir-biri bilan aloqa qilish va ma'lumot almashish imkonini beradi",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cloud Federation API turli xil Nextcloud misollariga bir-biri bilan muloqot qilish va ma'lumotlarni almashish imkonini beradi."
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -12,14 +12,13 @@ use NCU\Security\Signature\Exceptions\IdentityNotFoundException;
|
||||
use NCU\Security\Signature\Exceptions\SignatoryException;
|
||||
use OC\OCM\OCMSignatoryManager;
|
||||
use OCP\Capabilities\ICapability;
|
||||
use OCP\Capabilities\IInitialStateExcludedCapability;
|
||||
use OCP\IAppConfig;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\OCM\Exceptions\OCMArgumentException;
|
||||
use OCP\OCM\IOCMProvider;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class Capabilities implements ICapability, IInitialStateExcludedCapability {
|
||||
class Capabilities implements ICapability {
|
||||
public const API_VERSION = '1.1'; // informative, real version.
|
||||
|
||||
public function __construct(
|
||||
@@ -55,13 +54,15 @@ class Capabilities implements ICapability, IInitialStateExcludedCapability {
|
||||
*/
|
||||
public function getCapabilities() {
|
||||
$url = $this->urlGenerator->linkToRouteAbsolute('cloud_federation_api.requesthandlercontroller.addShare');
|
||||
$pos = strrpos($url, '/');
|
||||
if ($pos === false) {
|
||||
throw new OCMArgumentException('generated route should contain a slash character');
|
||||
}
|
||||
|
||||
$this->provider->setEnabled(true);
|
||||
$this->provider->setApiVersion(self::API_VERSION);
|
||||
|
||||
$pos = strrpos($url, '/');
|
||||
if ($pos === false) {
|
||||
throw new OCMArgumentException('generated route should contains a slash character');
|
||||
}
|
||||
|
||||
$this->provider->setEndPoint(substr($url, 0, $pos));
|
||||
|
||||
$resource = $this->provider->createNewResourceType();
|
||||
@@ -86,6 +87,6 @@ class Capabilities implements ICapability, IInitialStateExcludedCapability {
|
||||
$this->logger->warning('cannot generate local signatory', ['exception' => $e]);
|
||||
}
|
||||
|
||||
return ['ocm' => $this->provider->jsonSerialize()];
|
||||
return ['ocm' => json_decode(json_encode($this->provider->jsonSerialize()), true)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
namespace OCA\CloudFederationAPI;
|
||||
|
||||
use OCP\Federation\ICloudFederationProviderManager;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
/**
|
||||
* Class config
|
||||
@@ -19,7 +18,6 @@ class Config {
|
||||
|
||||
public function __construct(
|
||||
private ICloudFederationProviderManager $cloudFederationProviderManager,
|
||||
private LoggerInterface $logger,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -34,7 +32,6 @@ class Config {
|
||||
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
|
||||
return $provider->getSupportedShareTypes();
|
||||
} catch (\Exception $e) {
|
||||
$this->logger->error('Failed to create federation provider', ['exception' => $e]);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ class RequestHandlerController extends Controller {
|
||||
*/
|
||||
private function getHostFromFederationId(string $entry): string {
|
||||
if (!str_contains($entry, '@')) {
|
||||
throw new IncomingRequestException('entry ' . $entry . ' does not contain @');
|
||||
throw new IncomingRequestException('entry ' . $entry . ' does not contains @');
|
||||
}
|
||||
$rightPart = substr($entry, strrpos($entry, '@') + 1);
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ OC.L10N.register(
|
||||
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos",
|
||||
"Files" : "Arquivos",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Você foi mencionado em \"{file}\", em um comentário de uma conta que já foi excluída",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mencionou você em um comentário sobre \"{file}\"",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mencionou você em um comentário em \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Complemento do aplicativo Files para adicionar comentários",
|
||||
"Edit comment" : "Editar comentário",
|
||||
"Delete comment" : "Excluir comentário",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"<strong>Comments</strong> for files" : "<strong>Comentários</strong> para arquivos",
|
||||
"Files" : "Arquivos",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Você foi mencionado em \"{file}\", em um comentário de uma conta que já foi excluída",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mencionou você em um comentário sobre \"{file}\"",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} mencionou você em um comentário em \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Complemento do aplicativo Files para adicionar comentários",
|
||||
"Edit comment" : "Editar comentário",
|
||||
"Delete comment" : "Excluir comentário",
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -23,17 +20,30 @@ use OCP\Files\Node;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Share\IShareHelper;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class ListenerTest extends TestCase {
|
||||
protected IManager&MockObject $activityManager;
|
||||
protected IUserSession&MockObject $session;
|
||||
protected IAppManager&MockObject $appManager;
|
||||
protected IMountProviderCollection&MockObject $mountProviderCollection;
|
||||
protected IRootFolder&MockObject $rootFolder;
|
||||
protected IShareHelper&MockObject $shareHelper;
|
||||
protected Listener $listener;
|
||||
|
||||
/** @var Listener */
|
||||
protected $listener;
|
||||
|
||||
/** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $activityManager;
|
||||
|
||||
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $session;
|
||||
|
||||
/** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $appManager;
|
||||
|
||||
/** @var IMountProviderCollection|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $mountProviderCollection;
|
||||
|
||||
/** @var IRootFolder|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $rootFolder;
|
||||
|
||||
/** @var IShareHelper|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $shareHelper;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -66,7 +76,7 @@ class ListenerTest extends TestCase {
|
||||
->method('getObjectType')
|
||||
->willReturn('files');
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
$event->expects($this->any())
|
||||
->method('getComment')
|
||||
@@ -75,13 +85,13 @@ class ListenerTest extends TestCase {
|
||||
->method('getEvent')
|
||||
->willReturn(CommentsEvent::EVENT_ADD);
|
||||
|
||||
/** @var IUser|MockObject $ownerUser */
|
||||
/** @var IUser|\PHPUnit\Framework\MockObject\MockObject $ownerUser */
|
||||
$ownerUser = $this->createMock(IUser::class);
|
||||
$ownerUser->expects($this->any())
|
||||
->method('getUID')
|
||||
->willReturn('937393');
|
||||
|
||||
/** @var MockObject $mount */
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject $mount */
|
||||
$mount = $this->createMock(ICachedMountFileInfo::class);
|
||||
$mount->expects($this->any())
|
||||
->method('getUser')
|
||||
@@ -123,7 +133,7 @@ class ListenerTest extends TestCase {
|
||||
->method('getUser')
|
||||
->willReturn($ownerUser);
|
||||
|
||||
/** @var MockObject $activity */
|
||||
/** @var \PHPUnit\Framework\MockObject\MockObject $activity */
|
||||
$activity = $this->createMock(IEvent::class);
|
||||
$activity->expects($this->exactly(count($al['users'])))
|
||||
->method('setAffectedUser');
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
@@ -9,12 +7,7 @@ declare(strict_types=1);
|
||||
*/
|
||||
namespace OCA\Comments\Tests\Unit\AppInfo;
|
||||
|
||||
use OCA\Comments\Activity\Filter;
|
||||
use OCA\Comments\Activity\Listener;
|
||||
use OCA\Comments\Activity\Provider;
|
||||
use OCA\Comments\Activity\Setting;
|
||||
use OCA\Comments\AppInfo\Application;
|
||||
use OCA\Comments\Controller\NotificationsController;
|
||||
use OCA\Comments\Notification\Notifier;
|
||||
use OCP\IUserManager;
|
||||
use OCP\IUserSession;
|
||||
@@ -45,12 +38,12 @@ class ApplicationTest extends TestCase {
|
||||
$c = $app->getContainer();
|
||||
|
||||
$services = [
|
||||
NotificationsController::class,
|
||||
Filter::class,
|
||||
Listener::class,
|
||||
Provider::class,
|
||||
Setting::class,
|
||||
\OCA\Comments\Notification\Listener::class,
|
||||
'OCA\Comments\Controller\NotificationsController',
|
||||
'OCA\Comments\Activity\Filter',
|
||||
'OCA\Comments\Activity\Listener',
|
||||
'OCA\Comments\Activity\Provider',
|
||||
'OCA\Comments\Activity\Setting',
|
||||
'OCA\Comments\Notification\Listener',
|
||||
Notifier::class,
|
||||
];
|
||||
|
||||
|
||||
@@ -8,12 +8,13 @@ namespace OCA\Comments\Tests\Unit\Collaboration;
|
||||
use OCA\Comments\Collaboration\CommentersSorter;
|
||||
use OCP\Comments\IComment;
|
||||
use OCP\Comments\ICommentsManager;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class CommentersSorterTest extends TestCase {
|
||||
protected ICommentsManager&MockObject $commentsManager;
|
||||
protected CommentersSorter $sorter;
|
||||
/** @var ICommentsManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $commentsManager;
|
||||
/** @var CommentersSorter */
|
||||
protected $sorter;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -54,7 +55,7 @@ class CommentersSorterTest extends TestCase {
|
||||
$this->assertEquals($data['expected'], $workArray);
|
||||
}
|
||||
|
||||
public static function sortDataProvider(): array {
|
||||
public function sortDataProvider() {
|
||||
return [[
|
||||
[
|
||||
#1 – sort properly and otherwise keep existing order
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
|
||||
@@ -24,16 +22,26 @@ use OCP\IUser;
|
||||
use OCP\IUserSession;
|
||||
use OCP\Notification\IManager;
|
||||
use OCP\Notification\INotification;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class NotificationsTest extends TestCase {
|
||||
protected ICommentsManager&MockObject $commentsManager;
|
||||
protected IRootFolder&MockObject $rootFolder;
|
||||
protected IUserSession&MockObject $session;
|
||||
protected IManager&MockObject $notificationManager;
|
||||
protected IURLGenerator&MockObject $urlGenerator;
|
||||
protected NotificationsController $notificationsController;
|
||||
/** @var NotificationsController */
|
||||
protected $notificationsController;
|
||||
|
||||
/** @var ICommentsManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $commentsManager;
|
||||
|
||||
/** @var IRootFolder|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $rootFolder;
|
||||
|
||||
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $session;
|
||||
|
||||
/** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $notificationManager;
|
||||
|
||||
/** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $urlGenerator;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -73,6 +81,10 @@ class NotificationsTest extends TestCase {
|
||||
|
||||
$this->urlGenerator->expects($this->exactly(2))
|
||||
->method('linkToRoute')
|
||||
->withConsecutive(
|
||||
['comments.Notifications.view', ['id' => '42']],
|
||||
['core.login.showLoginForm', ['redirect_url' => 'link-to-comment']]
|
||||
)
|
||||
->willReturnMap([
|
||||
['comments.Notifications.view', ['id' => '42'], 'link-to-comment'],
|
||||
['core.login.showLoginForm', ['redirect_url' => 'link-to-comment'], 'link-to-login'],
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -13,32 +10,43 @@ use OCA\Comments\Listener\CommentsEventListener;
|
||||
use OCA\Comments\Notification\Listener as NotificationListener;
|
||||
use OCP\Comments\CommentsEvent;
|
||||
use OCP\Comments\IComment;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class EventHandlerTest extends TestCase {
|
||||
protected ActivityListener&MockObject $activityListener;
|
||||
protected NotificationListener&MockObject $notificationListener;
|
||||
protected CommentsEventListener $eventHandler;
|
||||
/** @var CommentsEventListener */
|
||||
protected $eventHandler;
|
||||
|
||||
/** @var ActivityListener|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $activityListener;
|
||||
|
||||
/** @var NotificationListener|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $notificationListener;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->activityListener = $this->createMock(ActivityListener::class);
|
||||
$this->notificationListener = $this->createMock(NotificationListener::class);
|
||||
$this->activityListener = $this->getMockBuilder(ActivityListener::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->notificationListener = $this->getMockBuilder(NotificationListener::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->eventHandler = new CommentsEventListener($this->activityListener, $this->notificationListener);
|
||||
}
|
||||
|
||||
public function testNotFiles(): void {
|
||||
/** @var IComment|MockObject $comment */
|
||||
$comment = $this->createMock(IComment::class);
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->once())
|
||||
->method('getObjectType')
|
||||
->willReturn('smiles');
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->getMockBuilder(CommentsEvent::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$event->expects($this->once())
|
||||
->method('getComment')
|
||||
->willReturn($comment);
|
||||
@@ -48,7 +56,7 @@ class EventHandlerTest extends TestCase {
|
||||
$this->eventHandler->handle($event);
|
||||
}
|
||||
|
||||
public static function handledProvider(): array {
|
||||
public function handledProvider() {
|
||||
return [
|
||||
[CommentsEvent::EVENT_DELETE],
|
||||
[CommentsEvent::EVENT_UPDATE],
|
||||
@@ -59,16 +67,19 @@ class EventHandlerTest extends TestCase {
|
||||
|
||||
/**
|
||||
* @dataProvider handledProvider
|
||||
* @param string $eventType
|
||||
*/
|
||||
public function testHandled(string $eventType): void {
|
||||
/** @var IComment|MockObject $comment */
|
||||
$comment = $this->createMock(IComment::class);
|
||||
public function testHandled($eventType): void {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->once())
|
||||
->method('getObjectType')
|
||||
->willReturn('files');
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->getMockBuilder(CommentsEvent::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$event->expects($this->atLeastOnce())
|
||||
->method('getComment')
|
||||
->willReturn($comment);
|
||||
|
||||
@@ -14,19 +14,25 @@ use OCP\IURLGenerator;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Notification\IManager;
|
||||
use OCP\Notification\INotification;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class ListenerTest extends TestCase {
|
||||
protected IManager&MockObject $notificationManager;
|
||||
protected IUserManager&MockObject $userManager;
|
||||
protected IURLGenerator&MockObject $urlGenerator;
|
||||
protected Listener $listener;
|
||||
/** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $notificationManager;
|
||||
|
||||
/** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $userManager;
|
||||
|
||||
/** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $urlGenerator;
|
||||
|
||||
/** @var Listener */
|
||||
protected $listener;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->notificationManager = $this->createMock(IManager::class);
|
||||
$this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
|
||||
$this->listener = new Listener(
|
||||
@@ -35,7 +41,7 @@ class ListenerTest extends TestCase {
|
||||
);
|
||||
}
|
||||
|
||||
public static function eventProvider(): array {
|
||||
public function eventProvider() {
|
||||
return [
|
||||
[CommentsEvent::EVENT_ADD, 'notify'],
|
||||
[CommentsEvent::EVENT_UPDATE, 'notify'],
|
||||
@@ -50,8 +56,8 @@ class ListenerTest extends TestCase {
|
||||
* @param string $notificationMethod
|
||||
*/
|
||||
public function testEvaluate($eventType, $notificationMethod): void {
|
||||
/** @var IComment|MockObject $comment */
|
||||
$comment = $this->createMock(IComment::class);
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
->method('getObjectType')
|
||||
->willReturn('files');
|
||||
@@ -72,8 +78,10 @@ class ListenerTest extends TestCase {
|
||||
->method('getId')
|
||||
->willReturn('1234');
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->getMockBuilder(CommentsEvent::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$event->expects($this->once())
|
||||
->method('getComment')
|
||||
->willReturn($comment);
|
||||
@@ -81,8 +89,8 @@ class ListenerTest extends TestCase {
|
||||
->method(('getEvent'))
|
||||
->willReturn($eventType);
|
||||
|
||||
/** @var INotification|MockObject $notification */
|
||||
$notification = $this->createMock(INotification::class);
|
||||
/** @var INotification|\PHPUnit\Framework\MockObject\MockObject $notification */
|
||||
$notification = $this->getMockBuilder(INotification::class)->getMock();
|
||||
$notification->expects($this->any())
|
||||
->method($this->anything())
|
||||
->willReturn($notification);
|
||||
@@ -98,24 +106,26 @@ class ListenerTest extends TestCase {
|
||||
|
||||
$this->userManager->expects($this->exactly(6))
|
||||
->method('userExists')
|
||||
->willReturnMap([
|
||||
['foobar', true],
|
||||
['barfoo', true],
|
||||
['foo@bar.com', true],
|
||||
['bar@foo.org@foobar.io', true],
|
||||
['23452-4333-54353-2342', true],
|
||||
['yolo', true]
|
||||
]);
|
||||
->withConsecutive(
|
||||
['foobar'],
|
||||
['barfoo'],
|
||||
['foo@bar.com'],
|
||||
['bar@foo.org@foobar.io'],
|
||||
['23452-4333-54353-2342'],
|
||||
['yolo']
|
||||
)
|
||||
->willReturn(true);
|
||||
|
||||
$this->listener->evaluate($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider eventProvider
|
||||
* @param string $eventType
|
||||
*/
|
||||
public function testEvaluateNoMentions(string $eventType): void {
|
||||
/** @var IComment|MockObject $comment */
|
||||
$comment = $this->createMock(IComment::class);
|
||||
public function testEvaluateNoMentions($eventType): void {
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
->method('getObjectType')
|
||||
->willReturn('files');
|
||||
@@ -126,8 +136,10 @@ class ListenerTest extends TestCase {
|
||||
->method('getMentions')
|
||||
->willReturn([]);
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->getMockBuilder(CommentsEvent::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$event->expects($this->once())
|
||||
->method('getComment')
|
||||
->willReturn($comment);
|
||||
@@ -149,8 +161,8 @@ class ListenerTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testEvaluateUserDoesNotExist(): void {
|
||||
/** @var IComment|MockObject $comment */
|
||||
$comment = $this->createMock(IComment::class);
|
||||
/** @var IComment|\PHPUnit\Framework\MockObject\MockObject $comment */
|
||||
$comment = $this->getMockBuilder(IComment::class)->getMock();
|
||||
$comment->expects($this->any())
|
||||
->method('getObjectType')
|
||||
->willReturn('files');
|
||||
@@ -164,8 +176,10 @@ class ListenerTest extends TestCase {
|
||||
->method('getId')
|
||||
->willReturn('1234');
|
||||
|
||||
/** @var CommentsEvent|MockObject $event */
|
||||
$event = $this->createMock(CommentsEvent::class);
|
||||
/** @var CommentsEvent|\PHPUnit\Framework\MockObject\MockObject $event */
|
||||
$event = $this->getMockBuilder(CommentsEvent::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$event->expects($this->once())
|
||||
->method('getComment')
|
||||
->willReturn($comment);
|
||||
@@ -173,8 +187,8 @@ class ListenerTest extends TestCase {
|
||||
->method(('getEvent'))
|
||||
->willReturn(CommentsEvent::EVENT_ADD);
|
||||
|
||||
/** @var INotification|MockObject $notification */
|
||||
$notification = $this->createMock(INotification::class);
|
||||
/** @var INotification|\PHPUnit\Framework\MockObject\MockObject $notification */
|
||||
$notification = $this->getMockBuilder(INotification::class)->getMock();
|
||||
$notification->expects($this->any())
|
||||
->method($this->anything())
|
||||
->willReturn($notification);
|
||||
@@ -189,7 +203,9 @@ class ListenerTest extends TestCase {
|
||||
|
||||
$this->userManager->expects($this->once())
|
||||
->method('userExists')
|
||||
->with('foobar')
|
||||
->withConsecutive(
|
||||
['foobar']
|
||||
)
|
||||
->willReturn(false);
|
||||
|
||||
$this->listener->evaluate($event);
|
||||
|
||||
@@ -1,7 +1,4 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
@@ -26,16 +23,26 @@ use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
class NotifierTest extends TestCase {
|
||||
protected IFactory&MockObject $l10nFactory;
|
||||
protected IL10N&MockObject $l;
|
||||
protected IRootFolder&MockObject $folder;
|
||||
protected ICommentsManager&MockObject $commentsManager;
|
||||
protected IURLGenerator&MockObject $url;
|
||||
protected IUserManager&MockObject $userManager;
|
||||
protected INotification&MockObject $notification;
|
||||
protected IComment&MockObject $comment;
|
||||
protected Notifier $notifier;
|
||||
protected string $lc = 'tlh_KX';
|
||||
/** @var Notifier */
|
||||
protected $notifier;
|
||||
/** @var IFactory|MockObject */
|
||||
protected $l10nFactory;
|
||||
/** @var IL10N|MockObject */
|
||||
protected $l;
|
||||
/** @var IRootFolder|MockObject */
|
||||
protected $folder;
|
||||
/** @var ICommentsManager|MockObject */
|
||||
protected $commentsManager;
|
||||
/** @var IURLGenerator|MockObject */
|
||||
protected $url;
|
||||
/** @var IUserManager|MockObject */
|
||||
protected $userManager;
|
||||
/** @var INotification|MockObject */
|
||||
protected $notification;
|
||||
/** @var IComment|MockObject */
|
||||
protected $comment;
|
||||
/** @var string */
|
||||
protected $lc = 'tlh_KX';
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
@@ -68,8 +75,9 @@ class NotifierTest extends TestCase {
|
||||
public function testPrepareSuccess(): void {
|
||||
$fileName = 'Gre\'thor.odp';
|
||||
$displayName = 'Huraga';
|
||||
$message = '@Huraga mentioned you in a comment on "Gre\'thor.odp"';
|
||||
|
||||
/** @var Node&MockObject $node */
|
||||
/** @var Node|MockObject $node */
|
||||
$node = $this->createMock(Node::class);
|
||||
$node
|
||||
->expects($this->atLeastOnce())
|
||||
@@ -184,6 +192,7 @@ class NotifierTest extends TestCase {
|
||||
|
||||
public function testPrepareSuccessDeletedUser(): void {
|
||||
$fileName = 'Gre\'thor.odp';
|
||||
$message = 'You were mentioned on "Gre\'thor.odp", in a comment by an account that has since been deleted';
|
||||
|
||||
/** @var Node|MockObject $node */
|
||||
$node = $this->createMock(Node::class);
|
||||
|
||||
@@ -21,8 +21,12 @@ use Test\TestCase;
|
||||
* @group DB
|
||||
*/
|
||||
class RecentContactMapperTest extends TestCase {
|
||||
private RecentContactMapper $recentContactMapper;
|
||||
private ITimeFactory $time;
|
||||
|
||||
/** @var RecentContactMapper */
|
||||
private $recentContactMapper;
|
||||
|
||||
/** @var ITimeFactory */
|
||||
private $time;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
OC.L10N.register(
|
||||
"dashboard",
|
||||
{
|
||||
"Dashboard" : "Töölaud/Juhtpaneel",
|
||||
"Dashboard app" : "Töölaua/juhtpaneeli rakendus",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Alusta oma päeva teadlikult\n\nNextcloudi avaleht on su päeva alguspunkt, mis annab ülevaate eelseisvatest kohtumistest, kiireloomulistest kirjadest, vestlussõnumitest, sissetulevatest päringutest, viimastest säutsudest ja paljust muust! Inimesed saavad lisada neile meeldivaid vidinaid ja muuta tausta oma maitse järgi.",
|
||||
"Dashboard" : "Töölaud",
|
||||
"Dashboard app" : "Töölaua rakendus",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Alustage oma päeva teadlikult\n\nNextcloudi avaleht on su päeva alguspunkt, mis annab ülevaate eelseisvatest kohtumistest, kiireloomulistest meilidest, vestlussõnumitest, sissetulevatest päringutest, viimastest säutsudest ja paljust muust! Inimesed saavad lisada neile meeldivaid vidinaid ja muuta tausta oma maitse järgi.",
|
||||
"Weather" : "Ilm",
|
||||
"Status" : "Olek",
|
||||
"Status" : "Staatus",
|
||||
"Good morning" : "Tere hommikust",
|
||||
"Good morning, {name}" : "Tere hommikust, {name}",
|
||||
"Good afternoon" : "Tere päevast",
|
||||
@@ -16,14 +16,14 @@ OC.L10N.register(
|
||||
"Hello, {name}" : "Tere, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Palju õnne sünnipäevaks 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Palju õnne, {name} 🥳🤩🎂🎉",
|
||||
"\"{title} icon\"" : "„{title} ikoon“",
|
||||
"\"{title} icon\"" : "\"{title} ikoon\"",
|
||||
"Customize" : "Kohanda",
|
||||
"Edit widgets" : "Muuda vidinaid",
|
||||
"Edit widgets" : "Redigeeri vidinaid",
|
||||
"Get more widgets from the App Store" : "Hangi rohkem vidinaid Rakenduste Poest",
|
||||
"Weather service" : "Ilmateenus",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Sinu privaatsuse huvides küsib su nimel ilmaandmeid Nextcloudi server, nii et ilmateenistus ei saa isiklikku teavet.",
|
||||
"Weather data from Met.no" : "Ilmaandmed Met.no-st",
|
||||
"geocoding with Nominatim" : "geoprogrammeerimine Nominatimiga",
|
||||
"elevation data from OpenTopoData" : "kõrgusandmed OpenTopoDatast"
|
||||
"geocoding with Nominatim" : "geoprogrammeerimine Nominatim-iga",
|
||||
"elevation data from OpenTopoData" : "kõrgusandmed OpenTopoData-st"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{ "translations": {
|
||||
"Dashboard" : "Töölaud/Juhtpaneel",
|
||||
"Dashboard app" : "Töölaua/juhtpaneeli rakendus",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Alusta oma päeva teadlikult\n\nNextcloudi avaleht on su päeva alguspunkt, mis annab ülevaate eelseisvatest kohtumistest, kiireloomulistest kirjadest, vestlussõnumitest, sissetulevatest päringutest, viimastest säutsudest ja paljust muust! Inimesed saavad lisada neile meeldivaid vidinaid ja muuta tausta oma maitse järgi.",
|
||||
"Dashboard" : "Töölaud",
|
||||
"Dashboard app" : "Töölaua rakendus",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Alustage oma päeva teadlikult\n\nNextcloudi avaleht on su päeva alguspunkt, mis annab ülevaate eelseisvatest kohtumistest, kiireloomulistest meilidest, vestlussõnumitest, sissetulevatest päringutest, viimastest säutsudest ja paljust muust! Inimesed saavad lisada neile meeldivaid vidinaid ja muuta tausta oma maitse järgi.",
|
||||
"Weather" : "Ilm",
|
||||
"Status" : "Olek",
|
||||
"Status" : "Staatus",
|
||||
"Good morning" : "Tere hommikust",
|
||||
"Good morning, {name}" : "Tere hommikust, {name}",
|
||||
"Good afternoon" : "Tere päevast",
|
||||
@@ -14,14 +14,14 @@
|
||||
"Hello, {name}" : "Tere, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Palju õnne sünnipäevaks 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Palju õnne, {name} 🥳🤩🎂🎉",
|
||||
"\"{title} icon\"" : "„{title} ikoon“",
|
||||
"\"{title} icon\"" : "\"{title} ikoon\"",
|
||||
"Customize" : "Kohanda",
|
||||
"Edit widgets" : "Muuda vidinaid",
|
||||
"Edit widgets" : "Redigeeri vidinaid",
|
||||
"Get more widgets from the App Store" : "Hangi rohkem vidinaid Rakenduste Poest",
|
||||
"Weather service" : "Ilmateenus",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Sinu privaatsuse huvides küsib su nimel ilmaandmeid Nextcloudi server, nii et ilmateenistus ei saa isiklikku teavet.",
|
||||
"Weather data from Met.no" : "Ilmaandmed Met.no-st",
|
||||
"geocoding with Nominatim" : "geoprogrammeerimine Nominatimiga",
|
||||
"elevation data from OpenTopoData" : "kõrgusandmed OpenTopoDatast"
|
||||
"geocoding with Nominatim" : "geoprogrammeerimine Nominatim-iga",
|
||||
"elevation data from OpenTopoData" : "kõrgusandmed OpenTopoData-st"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -3,7 +3,7 @@ OC.L10N.register(
|
||||
{
|
||||
"Dashboard" : "Painel",
|
||||
"Dashboard app" : "Aplicativo Painel",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Comece o dia informado \n\nO Painel do Nextcloud (Nextcloud Dashboard) é o seu ponto de partida do dia, oferecendo uma visão geral de seus próximos agendamentos, e-mails urgentes, mensagens de bate-papo, tickets recebidos, tweets mais recentes e muito mais! As pessoas podem adicionar os widgets que desejarem e alterar o plano de fundo de acordo com sua preferência.",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Comece o dia informado \n\nO Nextcloud Dashboard é o seu ponto de partida do dia, oferecendo uma visão geral de seus próximos agendamentos, e-mails urgentes, mensagens de bate-papo, tickets recebidos, tweets mais recentes e muito mais! As pessoas podem adicionar os widgets que desejarem e alterar o plano de fundo de acordo com sua preferência.",
|
||||
"Weather" : "Clima",
|
||||
"Status" : "Status",
|
||||
"Good morning" : "Bom dia",
|
||||
@@ -16,10 +16,10 @@ OC.L10N.register(
|
||||
"Hello, {name}" : "Olá, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Feliz Aniversário 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Feliz Aniversário, {name} 🥳🤩🎂🎉",
|
||||
"\"{title} icon\"" : "\"ícone de {title} \"",
|
||||
"\"{title} icon\"" : "\"{title} icon\"",
|
||||
"Customize" : "Personalizar",
|
||||
"Edit widgets" : "Editar widgets",
|
||||
"Get more widgets from the App Store" : "Obtenha mais widgets na Loja de Aplicativos",
|
||||
"Get more widgets from the App Store" : "Obtenha mais widgets na App Store",
|
||||
"Weather service" : "Serviço de Clima",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Para sua privacidade, as informações de Tempo são solicitadas pelo servidor Nextcloud de forma que o serviço de Tempo não receba suas informações pessoais.",
|
||||
"Weather data from Met.no" : "Dados de Tempo do Met.no",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ "translations": {
|
||||
"Dashboard" : "Painel",
|
||||
"Dashboard app" : "Aplicativo Painel",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Comece o dia informado \n\nO Painel do Nextcloud (Nextcloud Dashboard) é o seu ponto de partida do dia, oferecendo uma visão geral de seus próximos agendamentos, e-mails urgentes, mensagens de bate-papo, tickets recebidos, tweets mais recentes e muito mais! As pessoas podem adicionar os widgets que desejarem e alterar o plano de fundo de acordo com sua preferência.",
|
||||
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Comece o dia informado \n\nO Nextcloud Dashboard é o seu ponto de partida do dia, oferecendo uma visão geral de seus próximos agendamentos, e-mails urgentes, mensagens de bate-papo, tickets recebidos, tweets mais recentes e muito mais! As pessoas podem adicionar os widgets que desejarem e alterar o plano de fundo de acordo com sua preferência.",
|
||||
"Weather" : "Clima",
|
||||
"Status" : "Status",
|
||||
"Good morning" : "Bom dia",
|
||||
@@ -14,10 +14,10 @@
|
||||
"Hello, {name}" : "Olá, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "Feliz Aniversário 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "Feliz Aniversário, {name} 🥳🤩🎂🎉",
|
||||
"\"{title} icon\"" : "\"ícone de {title} \"",
|
||||
"\"{title} icon\"" : "\"{title} icon\"",
|
||||
"Customize" : "Personalizar",
|
||||
"Edit widgets" : "Editar widgets",
|
||||
"Get more widgets from the App Store" : "Obtenha mais widgets na Loja de Aplicativos",
|
||||
"Get more widgets from the App Store" : "Obtenha mais widgets na App Store",
|
||||
"Weather service" : "Serviço de Clima",
|
||||
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Para sua privacidade, as informações de Tempo são solicitadas pelo servidor Nextcloud de forma que o serviço de Tempo não receba suas informações pessoais.",
|
||||
"Weather data from Met.no" : "Dados de Tempo do Met.no",
|
||||
|
||||
@@ -13,8 +13,6 @@ OC.L10N.register(
|
||||
"Good evening, {name}" : "Bună seara, {name}",
|
||||
"Hello" : "Bună",
|
||||
"Hello, {name}" : "Bună, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "La mulți ani 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "La mulți ani, {name} 🥳🤩🎂🎉",
|
||||
"Customize" : "Personalizează",
|
||||
"Edit widgets" : "Editează widget",
|
||||
"Get more widgets from the App Store" : "Obține mai multe widget-uri din App Store",
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
"Good evening, {name}" : "Bună seara, {name}",
|
||||
"Hello" : "Bună",
|
||||
"Hello, {name}" : "Bună, {name}",
|
||||
"Happy birthday 🥳🤩🎂🎉" : "La mulți ani 🥳🤩🎂🎉",
|
||||
"Happy birthday, {name} 🥳🤩🎂🎉" : "La mulți ani, {name} 🥳🤩🎂🎉",
|
||||
"Customize" : "Personalizează",
|
||||
"Edit widgets" : "Editează widget",
|
||||
"Get more widgets from the App Store" : "Obține mai multe widget-uri din App Store",
|
||||
|
||||
@@ -40,7 +40,7 @@ class DashboardServiceTest extends TestCase {
|
||||
);
|
||||
}
|
||||
|
||||
public function testGetBirthdate(): void {
|
||||
public function testGetBirthdate() {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$this->userManager->method('get')
|
||||
->willReturn($user);
|
||||
@@ -61,7 +61,7 @@ class DashboardServiceTest extends TestCase {
|
||||
$this->assertEquals('2024-12-10T00:00:00.000Z', $birthdate);
|
||||
}
|
||||
|
||||
public function testGetBirthdatePropertyDoesNotExist(): void {
|
||||
public function testGetBirthdatePropertyDoesNotExist() {
|
||||
$user = $this->createMock(IUser::class);
|
||||
$this->userManager->method('get')
|
||||
->willReturn($user);
|
||||
@@ -75,7 +75,7 @@ class DashboardServiceTest extends TestCase {
|
||||
$this->assertEquals('', $birthdate);
|
||||
}
|
||||
|
||||
public function testGetBirthdateUserNotFound(): void {
|
||||
public function testGetBirthdateUserNotFound() {
|
||||
$this->userManager->method('get')
|
||||
->willReturn(null);
|
||||
|
||||
@@ -84,7 +84,7 @@ class DashboardServiceTest extends TestCase {
|
||||
$this->assertEquals('', $birthdate);
|
||||
}
|
||||
|
||||
public function testGetBirthdateNoUserId(): void {
|
||||
public function testGetBirthdateNoUserId() {
|
||||
$service = new DashboardService(
|
||||
$this->config,
|
||||
null,
|
||||
|
||||
@@ -55,16 +55,13 @@
|
||||
</repair-steps>
|
||||
|
||||
<commands>
|
||||
<command>OCA\DAV\Command\ClearCalendarUnshares</command>
|
||||
<command>OCA\DAV\Command\CreateAddressBook</command>
|
||||
<command>OCA\DAV\Command\CreateCalendar</command>
|
||||
<command>OCA\DAV\Command\CreateSubscription</command>
|
||||
<command>OCA\DAV\Command\DeleteCalendar</command>
|
||||
<command>OCA\DAV\Command\DeleteSubscription</command>
|
||||
<command>OCA\DAV\Command\ExportCalendar</command>
|
||||
<command>OCA\DAV\Command\FixCalendarSyncCommand</command>
|
||||
<command>OCA\DAV\Command\ListAddressbooks</command>
|
||||
<command>OCA\DAV\Command\ListCalendarShares</command>
|
||||
<command>OCA\DAV\Command\ListCalendars</command>
|
||||
<command>OCA\DAV\Command\ListSubscriptions</command>
|
||||
<command>OCA\DAV\Command\MoveCalendar</command>
|
||||
|
||||
@@ -68,7 +68,7 @@ $requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
$linkCheckPlugin = new PublicLinkCheckPlugin();
|
||||
$filesDropPlugin = new FilesDropPlugin();
|
||||
|
||||
$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
$isAjax = in_array('XMLHttpRequest', explode(',', $_SERVER['HTTP_X_REQUESTED_WITH'] ?? ''));
|
||||
/** @var FederatedShareProvider $shareProvider */
|
||||
$federatedShareProvider = Server::get(FederatedShareProvider::class);
|
||||
|
||||
@@ -68,7 +68,7 @@ $authPlugin->addBackend($bearerAuthPlugin);
|
||||
|
||||
$requestUri = Server::get(IRequest::class)->getRequestUri();
|
||||
|
||||
$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function () {
|
||||
$server = $serverFactory->createServer($baseuri, $requestUri, $authPlugin, function () {
|
||||
// use the view for the logged in user
|
||||
return Filesystem::getView();
|
||||
});
|
||||
|
||||
@@ -14,15 +14,12 @@ use OCA\DAV\Files\Sharing\FilesDropPlugin;
|
||||
use OCA\DAV\Files\Sharing\PublicLinkCheckPlugin;
|
||||
use OCA\DAV\Storage\PublicOwnerWrapper;
|
||||
use OCA\DAV\Storage\PublicShareWrapper;
|
||||
use OCA\DAV\Upload\ChunkingPlugin;
|
||||
use OCA\DAV\Upload\ChunkingV2Plugin;
|
||||
use OCA\FederatedFileSharing\FederatedShareProvider;
|
||||
use OCP\BeforeSabrePubliclyLoadedEvent;
|
||||
use OCP\Constants;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\Mount\IMountManager;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\IDBConnection;
|
||||
use OCP\IPreview;
|
||||
@@ -78,8 +75,12 @@ $serverFactory = new ServerFactory(
|
||||
$linkCheckPlugin = new PublicLinkCheckPlugin();
|
||||
$filesDropPlugin = new FilesDropPlugin();
|
||||
|
||||
// Define root url with /public.php/dav/files/TOKEN
|
||||
/** @var string $baseuri defined in public.php */
|
||||
$server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin, function (\Sabre\DAV\Server $server) use ($authBackend, $linkCheckPlugin, $filesDropPlugin) {
|
||||
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) {
|
||||
// GET must be allowed for e.g. showing images and allowing Zip downloads
|
||||
if ($server->httpRequest->getMethod() !== 'GET') {
|
||||
// If this is *not* a GET request we only allow access to public DAV from AJAX or when Server2Server is allowed
|
||||
@@ -141,8 +142,6 @@ $server = $serverFactory->createServer(true, $baseuri, $requestUri, $authPlugin,
|
||||
|
||||
$server->addPlugin($linkCheckPlugin);
|
||||
$server->addPlugin($filesDropPlugin);
|
||||
$server->addPlugin(new ChunkingV2Plugin(Server::get(ICacheFactory::class)));
|
||||
$server->addPlugin(new ChunkingPlugin());
|
||||
|
||||
// allow setup of additional plugins
|
||||
$event = new BeforeSabrePubliclyLoadedEvent($server);
|
||||
|
||||
@@ -16,7 +16,6 @@ return array(
|
||||
'OCA\\DAV\\BackgroundJob\\CalendarRetentionJob' => $baseDir . '/../lib/BackgroundJob/CalendarRetentionJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupDirectLinksJob' => $baseDir . '/../lib/BackgroundJob/CleanupDirectLinksJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupInvitationTokenJob' => $baseDir . '/../lib/BackgroundJob/CleanupInvitationTokenJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupOrphanedChildrenJob' => $baseDir . '/../lib/BackgroundJob/CleanupOrphanedChildrenJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\DeleteOutdatedSchedulingObjects' => $baseDir . '/../lib/BackgroundJob/DeleteOutdatedSchedulingObjects.php',
|
||||
'OCA\\DAV\\BackgroundJob\\EventReminderJob' => $baseDir . '/../lib/BackgroundJob/EventReminderJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\GenerateBirthdayCalendarBackgroundJob' => $baseDir . '/../lib/BackgroundJob/GenerateBirthdayCalendarBackgroundJob.php',
|
||||
@@ -64,7 +63,6 @@ return array(
|
||||
'OCA\\DAV\\CalDAV\\EventReader' => $baseDir . '/../lib/CalDAV/EventReader.php',
|
||||
'OCA\\DAV\\CalDAV\\EventReaderRDate' => $baseDir . '/../lib/CalDAV/EventReaderRDate.php',
|
||||
'OCA\\DAV\\CalDAV\\EventReaderRRule' => $baseDir . '/../lib/CalDAV/EventReaderRRule.php',
|
||||
'OCA\\DAV\\CalDAV\\Export\\ExportService' => $baseDir . '/../lib/CalDAV/Export/ExportService.php',
|
||||
'OCA\\DAV\\CalDAV\\FreeBusy\\FreeBusyGenerator' => $baseDir . '/../lib/CalDAV/FreeBusy/FreeBusyGenerator.php',
|
||||
'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => $baseDir . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\IRestorable' => $baseDir . '/../lib/CalDAV/IRestorable.php',
|
||||
@@ -155,16 +153,13 @@ return array(
|
||||
'OCA\\DAV\\CardDAV\\UserAddressBooks' => $baseDir . '/../lib/CardDAV/UserAddressBooks.php',
|
||||
'OCA\\DAV\\CardDAV\\Validation\\CardDavValidatePlugin' => $baseDir . '/../lib/CardDAV/Validation/CardDavValidatePlugin.php',
|
||||
'OCA\\DAV\\CardDAV\\Xml\\Groups' => $baseDir . '/../lib/CardDAV/Xml/Groups.php',
|
||||
'OCA\\DAV\\Command\\ClearCalendarUnshares' => $baseDir . '/../lib/Command/ClearCalendarUnshares.php',
|
||||
'OCA\\DAV\\Command\\CreateAddressBook' => $baseDir . '/../lib/Command/CreateAddressBook.php',
|
||||
'OCA\\DAV\\Command\\CreateCalendar' => $baseDir . '/../lib/Command/CreateCalendar.php',
|
||||
'OCA\\DAV\\Command\\CreateSubscription' => $baseDir . '/../lib/Command/CreateSubscription.php',
|
||||
'OCA\\DAV\\Command\\DeleteCalendar' => $baseDir . '/../lib/Command/DeleteCalendar.php',
|
||||
'OCA\\DAV\\Command\\DeleteSubscription' => $baseDir . '/../lib/Command/DeleteSubscription.php',
|
||||
'OCA\\DAV\\Command\\ExportCalendar' => $baseDir . '/../lib/Command/ExportCalendar.php',
|
||||
'OCA\\DAV\\Command\\FixCalendarSyncCommand' => $baseDir . '/../lib/Command/FixCalendarSyncCommand.php',
|
||||
'OCA\\DAV\\Command\\ListAddressbooks' => $baseDir . '/../lib/Command/ListAddressbooks.php',
|
||||
'OCA\\DAV\\Command\\ListCalendarShares' => $baseDir . '/../lib/Command/ListCalendarShares.php',
|
||||
'OCA\\DAV\\Command\\ListCalendars' => $baseDir . '/../lib/Command/ListCalendars.php',
|
||||
'OCA\\DAV\\Command\\ListSubscriptions' => $baseDir . '/../lib/Command/ListSubscriptions.php',
|
||||
'OCA\\DAV\\Command\\MoveCalendar' => $baseDir . '/../lib/Command/MoveCalendar.php',
|
||||
@@ -286,7 +281,6 @@ return array(
|
||||
'OCA\\DAV\\Files\\RootCollection' => $baseDir . '/../lib/Files/RootCollection.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => $baseDir . '/../lib/Files/Sharing/FilesDropPlugin.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => $baseDir . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\RootCollection' => $baseDir . '/../lib/Files/Sharing/RootCollection.php',
|
||||
'OCA\\DAV\\Listener\\ActivityUpdaterListener' => $baseDir . '/../lib/Listener/ActivityUpdaterListener.php',
|
||||
'OCA\\DAV\\Listener\\AddMissingIndicesListener' => $baseDir . '/../lib/Listener/AddMissingIndicesListener.php',
|
||||
'OCA\\DAV\\Listener\\AddressbookListener' => $baseDir . '/../lib/Listener/AddressbookListener.php',
|
||||
|
||||
@@ -31,7 +31,6 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\BackgroundJob\\CalendarRetentionJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CalendarRetentionJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupDirectLinksJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupDirectLinksJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupInvitationTokenJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupInvitationTokenJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\CleanupOrphanedChildrenJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupOrphanedChildrenJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\DeleteOutdatedSchedulingObjects' => __DIR__ . '/..' . '/../lib/BackgroundJob/DeleteOutdatedSchedulingObjects.php',
|
||||
'OCA\\DAV\\BackgroundJob\\EventReminderJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/EventReminderJob.php',
|
||||
'OCA\\DAV\\BackgroundJob\\GenerateBirthdayCalendarBackgroundJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/GenerateBirthdayCalendarBackgroundJob.php',
|
||||
@@ -79,7 +78,6 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\CalDAV\\EventReader' => __DIR__ . '/..' . '/../lib/CalDAV/EventReader.php',
|
||||
'OCA\\DAV\\CalDAV\\EventReaderRDate' => __DIR__ . '/..' . '/../lib/CalDAV/EventReaderRDate.php',
|
||||
'OCA\\DAV\\CalDAV\\EventReaderRRule' => __DIR__ . '/..' . '/../lib/CalDAV/EventReaderRRule.php',
|
||||
'OCA\\DAV\\CalDAV\\Export\\ExportService' => __DIR__ . '/..' . '/../lib/CalDAV/Export/ExportService.php',
|
||||
'OCA\\DAV\\CalDAV\\FreeBusy\\FreeBusyGenerator' => __DIR__ . '/..' . '/../lib/CalDAV/FreeBusy/FreeBusyGenerator.php',
|
||||
'OCA\\DAV\\CalDAV\\ICSExportPlugin\\ICSExportPlugin' => __DIR__ . '/..' . '/../lib/CalDAV/ICSExportPlugin/ICSExportPlugin.php',
|
||||
'OCA\\DAV\\CalDAV\\IRestorable' => __DIR__ . '/..' . '/../lib/CalDAV/IRestorable.php',
|
||||
@@ -170,16 +168,13 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\CardDAV\\UserAddressBooks' => __DIR__ . '/..' . '/../lib/CardDAV/UserAddressBooks.php',
|
||||
'OCA\\DAV\\CardDAV\\Validation\\CardDavValidatePlugin' => __DIR__ . '/..' . '/../lib/CardDAV/Validation/CardDavValidatePlugin.php',
|
||||
'OCA\\DAV\\CardDAV\\Xml\\Groups' => __DIR__ . '/..' . '/../lib/CardDAV/Xml/Groups.php',
|
||||
'OCA\\DAV\\Command\\ClearCalendarUnshares' => __DIR__ . '/..' . '/../lib/Command/ClearCalendarUnshares.php',
|
||||
'OCA\\DAV\\Command\\CreateAddressBook' => __DIR__ . '/..' . '/../lib/Command/CreateAddressBook.php',
|
||||
'OCA\\DAV\\Command\\CreateCalendar' => __DIR__ . '/..' . '/../lib/Command/CreateCalendar.php',
|
||||
'OCA\\DAV\\Command\\CreateSubscription' => __DIR__ . '/..' . '/../lib/Command/CreateSubscription.php',
|
||||
'OCA\\DAV\\Command\\DeleteCalendar' => __DIR__ . '/..' . '/../lib/Command/DeleteCalendar.php',
|
||||
'OCA\\DAV\\Command\\DeleteSubscription' => __DIR__ . '/..' . '/../lib/Command/DeleteSubscription.php',
|
||||
'OCA\\DAV\\Command\\ExportCalendar' => __DIR__ . '/..' . '/../lib/Command/ExportCalendar.php',
|
||||
'OCA\\DAV\\Command\\FixCalendarSyncCommand' => __DIR__ . '/..' . '/../lib/Command/FixCalendarSyncCommand.php',
|
||||
'OCA\\DAV\\Command\\ListAddressbooks' => __DIR__ . '/..' . '/../lib/Command/ListAddressbooks.php',
|
||||
'OCA\\DAV\\Command\\ListCalendarShares' => __DIR__ . '/..' . '/../lib/Command/ListCalendarShares.php',
|
||||
'OCA\\DAV\\Command\\ListCalendars' => __DIR__ . '/..' . '/../lib/Command/ListCalendars.php',
|
||||
'OCA\\DAV\\Command\\ListSubscriptions' => __DIR__ . '/..' . '/../lib/Command/ListSubscriptions.php',
|
||||
'OCA\\DAV\\Command\\MoveCalendar' => __DIR__ . '/..' . '/../lib/Command/MoveCalendar.php',
|
||||
@@ -301,7 +296,6 @@ class ComposerStaticInitDAV
|
||||
'OCA\\DAV\\Files\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/RootCollection.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\FilesDropPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/FilesDropPlugin.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\PublicLinkCheckPlugin' => __DIR__ . '/..' . '/../lib/Files/Sharing/PublicLinkCheckPlugin.php',
|
||||
'OCA\\DAV\\Files\\Sharing\\RootCollection' => __DIR__ . '/..' . '/../lib/Files/Sharing/RootCollection.php',
|
||||
'OCA\\DAV\\Listener\\ActivityUpdaterListener' => __DIR__ . '/..' . '/../lib/Listener/ActivityUpdaterListener.php',
|
||||
'OCA\\DAV\\Listener\\AddMissingIndicesListener' => __DIR__ . '/..' . '/../lib/Listener/AddMissingIndicesListener.php',
|
||||
'OCA\\DAV\\Listener\\AddressbookListener' => __DIR__ . '/..' . '/../lib/Listener/AddressbookListener.php',
|
||||
|
||||
@@ -250,9 +250,6 @@ OC.L10N.register(
|
||||
"Completed on %s" : "Fuldført den %s",
|
||||
"Due on %s by %s" : "Forfalder på %s til %s",
|
||||
"Due on %s" : "Forfalder på %s",
|
||||
"System Address Book" : "System adressebog",
|
||||
"The system address book contains contact information for all users in your instance." : "System adressebogen indeholder kontaktoplysninger for alle brugere i din instans.",
|
||||
"Enable System Address Book" : "Aktivér System adressebog",
|
||||
"DAV system address book" : "DAV system adressebog",
|
||||
"No outstanding DAV system address book sync." : "Ingen udestående synkronisering af DAV-systemets adressebog.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressebogssynkronisering er ikke kørt endnu, da din instans har mere end 1000 brugere, eller fordi der opstod en fejl. Kør det manuelt ved at kalde \"occ dav:sync-system-addressbook\".",
|
||||
@@ -309,16 +306,6 @@ OC.L10N.register(
|
||||
"Cancel" : "Annuller",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Der opstod en fejl under lagring af indstillinger",
|
||||
"Contact reset successfully" : "Kontakten blev nulstillet",
|
||||
"Error while resetting contact" : "Fejl under nulstilling af kontakt",
|
||||
"Contact imported successfully" : "Kontakten blev importeret",
|
||||
"Error while importing contact" : "Fejl under import af kontakt",
|
||||
"Example Content" : "Eksempelindhold",
|
||||
"Set example content to be created on new user first login." : "Indstil eksempel på indhold, der skal oprettes ved ny brugers første login.",
|
||||
"Import contact" : "Importér kontakt",
|
||||
"Reset to default contact" : "Nulstil til standardkontakt",
|
||||
"Import contacts" : "Importér kontakter",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?",
|
||||
"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?",
|
||||
|
||||
@@ -248,9 +248,6 @@
|
||||
"Completed on %s" : "Fuldført den %s",
|
||||
"Due on %s by %s" : "Forfalder på %s til %s",
|
||||
"Due on %s" : "Forfalder på %s",
|
||||
"System Address Book" : "System adressebog",
|
||||
"The system address book contains contact information for all users in your instance." : "System adressebogen indeholder kontaktoplysninger for alle brugere i din instans.",
|
||||
"Enable System Address Book" : "Aktivér System adressebog",
|
||||
"DAV system address book" : "DAV system adressebog",
|
||||
"No outstanding DAV system address book sync." : "Ingen udestående synkronisering af DAV-systemets adressebog.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV-systemets adressebogssynkronisering er ikke kørt endnu, da din instans har mere end 1000 brugere, eller fordi der opstod en fejl. Kør det manuelt ved at kalde \"occ dav:sync-system-addressbook\".",
|
||||
@@ -307,16 +304,6 @@
|
||||
"Cancel" : "Annuller",
|
||||
"Import" : "Importer",
|
||||
"Error while saving settings" : "Der opstod en fejl under lagring af indstillinger",
|
||||
"Contact reset successfully" : "Kontakten blev nulstillet",
|
||||
"Error while resetting contact" : "Fejl under nulstilling af kontakt",
|
||||
"Contact imported successfully" : "Kontakten blev importeret",
|
||||
"Error while importing contact" : "Fejl under import af kontakt",
|
||||
"Example Content" : "Eksempelindhold",
|
||||
"Set example content to be created on new user first login." : "Indstil eksempel på indhold, der skal oprettes ved ny brugers første login.",
|
||||
"Import contact" : "Importér kontakt",
|
||||
"Reset to default contact" : "Nulstil til standardkontakt",
|
||||
"Import contacts" : "Importér kontakter",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Import af en ny .vcf-fil vil slette den eksisterende standardkontakt og erstatte den med den nye. Vil du fortsætte?",
|
||||
"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?",
|
||||
|
||||
+16
-16
@@ -186,9 +186,9 @@ OC.L10N.register(
|
||||
"November" : "November",
|
||||
"December" : "Dezember",
|
||||
"First" : "Erste",
|
||||
"Second" : "Zweite",
|
||||
"Third" : "Dritte",
|
||||
"Fourth" : "Vierte",
|
||||
"Second" : "2.",
|
||||
"Third" : "3.",
|
||||
"Fourth" : "4.",
|
||||
"Fifth" : "Fünften",
|
||||
"Last" : "Letzte",
|
||||
"Second Last" : "Vorletztes",
|
||||
@@ -255,11 +255,11 @@ OC.L10N.register(
|
||||
"Enable System Address Book" : "Systemadressbuch aktivieren",
|
||||
"DAV system address book" : "DAV-Systemadressbuch",
|
||||
"No outstanding DAV system address book sync." : "Keine ausstehende Synchronisierung des DAV-Systemadressbuchs",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Die Synchronisierung des DAV-Systemadressbuchs wurde noch nicht ausgeführt, da diese Instanz mehr als 1000 Benutzer hat oder weil ein Fehler aufgetreten ist. Bitte manuell ausführen, mittels \"occ dav:sync-system-addressbook\".",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Die Synchronisierung des DAV-Systemadressbuchs wurde noch nicht ausgeführt, da deine Instanz mehr als 1000 Benutzer hat oder weil ein Fehler aufgetreten ist. Bitte führe sie manuell aus, indem du \"occ dav:sync-system-addressbook\" ausführst.",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Es konnte nicht überprüft werden, ob der Webserver ordnungsgemäß eingerichtet ist, um Dateisynchronisation über WebDAV zu ermöglichen. Bitte dies manuell überprüfen.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Der Webserver ist noch nicht hinreichend für Datei-Synchronisierung konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Der Webserver ist ordnungsgemäß eingerichtet um Dateisynchronisation über WebDAV zu ermöglichen.",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Es konnte nicht überprüft werden, ob dein Webserver ordnungsgemäß eingerichtet ist, um Dateisynchronisation über WebDAV zu ermöglichen. Bitte überprüfe dies manuell.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisierung konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Dein Webserver ist ordnungsgemäß eingerichtet um Dateisynchronisation über WebDAV zu ermöglichen.",
|
||||
"Migrated calendar (%1$s)" : "Migrierter Kalender (%1$s)",
|
||||
"Calendars including events, details and attendees" : "Kalender mit Terminen, Details und Teilnehmern",
|
||||
"Contacts and groups" : "Kontakte und Gruppen",
|
||||
@@ -273,14 +273,14 @@ OC.L10N.register(
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Start typing." : "Beginne mit Schreiben",
|
||||
"Short absence status" : "Kurze Abwesenheits Meldung",
|
||||
"Long absence Message" : "Lange Abwesenheits Meldung",
|
||||
"Save" : "Speichern",
|
||||
"Disable absence" : "Abwesenheit deaktivieren",
|
||||
"Failed to load availability" : "Verfügbarkeit konnte nicht geladen werden",
|
||||
"Disable absence" : "Abwesenheitmeldungen deaktivieren",
|
||||
"Failed to load availability" : "Fehler beim Laden der Verfügbarkeit",
|
||||
"Saved availability" : "Verfügbarkeit gespeichert",
|
||||
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
|
||||
"Failed to save availability" : "Fehler beim Speichern der Verfügbarkeit",
|
||||
"Time zone:" : "Zeitzone:",
|
||||
"to" : "an",
|
||||
"Delete slot" : "Slot löschen",
|
||||
@@ -291,7 +291,7 @@ OC.L10N.register(
|
||||
"Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setze den Benutzerstatus außerhalb deiner Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.",
|
||||
"Availability" : "Verfügbarkeit",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten konfigurierst, können andere Benutzer sehen, wann du nicht im Büro bist, wenn sie eine Besprechung buchen.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installiere außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinde deinen Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
@@ -309,9 +309,9 @@ OC.L10N.register(
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt zurückgesetzt",
|
||||
"Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt importiert",
|
||||
"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.",
|
||||
|
||||
+16
-16
@@ -184,9 +184,9 @@
|
||||
"November" : "November",
|
||||
"December" : "Dezember",
|
||||
"First" : "Erste",
|
||||
"Second" : "Zweite",
|
||||
"Third" : "Dritte",
|
||||
"Fourth" : "Vierte",
|
||||
"Second" : "2.",
|
||||
"Third" : "3.",
|
||||
"Fourth" : "4.",
|
||||
"Fifth" : "Fünften",
|
||||
"Last" : "Letzte",
|
||||
"Second Last" : "Vorletztes",
|
||||
@@ -253,11 +253,11 @@
|
||||
"Enable System Address Book" : "Systemadressbuch aktivieren",
|
||||
"DAV system address book" : "DAV-Systemadressbuch",
|
||||
"No outstanding DAV system address book sync." : "Keine ausstehende Synchronisierung des DAV-Systemadressbuchs",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Die Synchronisierung des DAV-Systemadressbuchs wurde noch nicht ausgeführt, da diese Instanz mehr als 1000 Benutzer hat oder weil ein Fehler aufgetreten ist. Bitte manuell ausführen, mittels \"occ dav:sync-system-addressbook\".",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Die Synchronisierung des DAV-Systemadressbuchs wurde noch nicht ausgeführt, da deine Instanz mehr als 1000 Benutzer hat oder weil ein Fehler aufgetreten ist. Bitte führe sie manuell aus, indem du \"occ dav:sync-system-addressbook\" ausführst.",
|
||||
"WebDAV endpoint" : "WebDAV-Endpunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Es konnte nicht überprüft werden, ob der Webserver ordnungsgemäß eingerichtet ist, um Dateisynchronisation über WebDAV zu ermöglichen. Bitte dies manuell überprüfen.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Der Webserver ist noch nicht hinreichend für Datei-Synchronisierung konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Der Webserver ist ordnungsgemäß eingerichtet um Dateisynchronisation über WebDAV zu ermöglichen.",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Es konnte nicht überprüft werden, ob dein Webserver ordnungsgemäß eingerichtet ist, um Dateisynchronisation über WebDAV zu ermöglichen. Bitte überprüfe dies manuell.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisierung konfiguriert, da die WebDAV-Schnittstelle vermutlich nicht funktioniert.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Dein Webserver ist ordnungsgemäß eingerichtet um Dateisynchronisation über WebDAV zu ermöglichen.",
|
||||
"Migrated calendar (%1$s)" : "Migrierter Kalender (%1$s)",
|
||||
"Calendars including events, details and attendees" : "Kalender mit Terminen, Details und Teilnehmern",
|
||||
"Contacts and groups" : "Kontakte und Gruppen",
|
||||
@@ -271,14 +271,14 @@
|
||||
"Out of office replacement (optional)" : "Abwesenheitsvertretung (optional)",
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse",
|
||||
"Start typing." : "Mit dem Schreiben beginnen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Start typing." : "Beginne mit Schreiben",
|
||||
"Short absence status" : "Kurze Abwesenheits Meldung",
|
||||
"Long absence Message" : "Lange Abwesenheits Meldung",
|
||||
"Save" : "Speichern",
|
||||
"Disable absence" : "Abwesenheit deaktivieren",
|
||||
"Failed to load availability" : "Verfügbarkeit konnte nicht geladen werden",
|
||||
"Disable absence" : "Abwesenheitmeldungen deaktivieren",
|
||||
"Failed to load availability" : "Fehler beim Laden der Verfügbarkeit",
|
||||
"Saved availability" : "Verfügbarkeit gespeichert",
|
||||
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
|
||||
"Failed to save availability" : "Fehler beim Speichern der Verfügbarkeit",
|
||||
"Time zone:" : "Zeitzone:",
|
||||
"to" : "an",
|
||||
"Delete slot" : "Slot löschen",
|
||||
@@ -289,7 +289,7 @@
|
||||
"Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setze den Benutzerstatus außerhalb deiner Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.",
|
||||
"Availability" : "Verfügbarkeit",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten angibst, können andere beim Buchen einer Besprechung sehen, wann du nicht im Büro bist.",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn du deine Arbeitszeiten konfigurierst, können andere Benutzer sehen, wann du nicht im Büro bist, wenn sie eine Besprechung buchen.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richte deinen nächsten Abwesenheitszeitraum ein.",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installiere außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinde deinen Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
@@ -307,9 +307,9 @@
|
||||
"Cancel" : "Abbrechen",
|
||||
"Import" : "Importieren",
|
||||
"Error while saving settings" : "Fehler beim Speichern der Einstellungen",
|
||||
"Contact reset successfully" : "Kontakt zurückgesetzt",
|
||||
"Contact reset successfully" : "Kontakt erfolgreich zurückgesetzt",
|
||||
"Error while resetting contact" : "Fehler beim Zurücksetzen des Kontakts",
|
||||
"Contact imported successfully" : "Kontakt importiert",
|
||||
"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.",
|
||||
|
||||
@@ -274,26 +274,26 @@ OC.L10N.register(
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstaus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
"Disable absence" : "Abwesenheit deaktivieren",
|
||||
"Failed to load availability" : "Verfügbarkeit konnte nicht geladen werden",
|
||||
"Failed to load availability" : "Laden der Verfügbarkeit fehlgeschlagen",
|
||||
"Saved availability" : "Verfügbarkeit gespeichert",
|
||||
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
|
||||
"Failed to save availability" : "Fehler beim Speichern der Verfügbarkeit",
|
||||
"Time zone:" : "Zeitzone:",
|
||||
"to" : "an",
|
||||
"Delete slot" : "Zeitfenster löschen",
|
||||
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
|
||||
"No working hours set" : "Arbeitsfreie Stunden gesetzt",
|
||||
"Add slot" : "Zeitfenster hinzufügen",
|
||||
"Weekdays" : "Wochentage",
|
||||
"Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen",
|
||||
"Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setzen Sie den Benutzerstatus außerhalb Ihrer Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.",
|
||||
"Availability" : "Verfügbarkeit",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können Andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installieren Sie außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinden Sie Ihren Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stellen Sie sicher, dass Sie {emailopen}den E-Mail Server{linkclose} ordnungsgemäß eingerichtet haben.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
|
||||
@@ -272,26 +272,26 @@
|
||||
"Name of the replacement" : "Name der Vertretung",
|
||||
"No results." : "Keine Ergebnisse.",
|
||||
"Start typing." : "Anfangen zu tippen.",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstatus",
|
||||
"Short absence status" : "Kurzer Abwesenheitsstaus",
|
||||
"Long absence Message" : "Lange Abwesenheitsnachricht",
|
||||
"Save" : "Speichern",
|
||||
"Disable absence" : "Abwesenheit deaktivieren",
|
||||
"Failed to load availability" : "Verfügbarkeit konnte nicht geladen werden",
|
||||
"Failed to load availability" : "Laden der Verfügbarkeit fehlgeschlagen",
|
||||
"Saved availability" : "Verfügbarkeit gespeichert",
|
||||
"Failed to save availability" : "Verfügbarkeit konnte nicht gespeichert werden",
|
||||
"Failed to save availability" : "Fehler beim Speichern der Verfügbarkeit",
|
||||
"Time zone:" : "Zeitzone:",
|
||||
"to" : "an",
|
||||
"Delete slot" : "Zeitfenster löschen",
|
||||
"No working hours set" : "Keine Arbeitszeiten konfiguriert",
|
||||
"No working hours set" : "Arbeitsfreie Stunden gesetzt",
|
||||
"Add slot" : "Zeitfenster hinzufügen",
|
||||
"Weekdays" : "Wochentage",
|
||||
"Pick a start time for {dayName}" : "Eine Startzeit für {dayName} wählen",
|
||||
"Pick a end time for {dayName}" : "Eine Endezeit für {dayName} wählen",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Setzen Sie den Benutzerstatus außerhalb Ihrer Verfügbarkeit automatisch auf \"Nicht stören\", um alle Benachrichtigungen stumm zu schalten.",
|
||||
"Availability" : "Verfügbarkeit",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Wenn Sie Ihre Arbeitszeiten angeben, können Andere beim Buchen einer Besprechung sehen, wann Sie nicht im Büro sind.",
|
||||
"Absence" : "Abwesenheit",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein.",
|
||||
"Configure your next absence period." : "Richten Sie ihren nächsten Abwesenheitszeitraum ein",
|
||||
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installieren Sie außerdem die {calendarappstoreopen}Kalender-App{linkclose} oder {calendardocopen}verbinden Sie Ihren Desktop & Mobilgerät zur Synchronisierung ↗{linkclose}.",
|
||||
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Bitte stellen Sie sicher, dass Sie {emailopen}den E-Mail Server{linkclose} ordnungsgemäß eingerichtet haben.",
|
||||
"Calendar server" : "Kalender-Server",
|
||||
|
||||
+19
-172
@@ -2,7 +2,7 @@ OC.L10N.register(
|
||||
"dav",
|
||||
{
|
||||
"Calendar" : "Kalender",
|
||||
"Tasks" : "Ülesanded",
|
||||
"Todos" : "Ülesanded",
|
||||
"Personal" : "Isiklik",
|
||||
"{actor} created calendar {calendar}" : "{actor} lõi kalendri {calendar}",
|
||||
"You created calendar {calendar}" : "Sa lõid kalendri {calendar}",
|
||||
@@ -10,10 +10,6 @@ OC.L10N.register(
|
||||
"You deleted calendar {calendar}" : "Sa kustutasid kalendri {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} uuendas kalendrit {calendar}",
|
||||
"You updated calendar {calendar}" : "Sa uuendasid kalendrit {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} taastas kalendri {calendar}",
|
||||
"You restored calendar {calendar}" : "Sina taastasid kalendri {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Sina jagasid „{calendar}“ kalendrit avaliku lingina",
|
||||
"You removed public link for calendar {calendar}" : "Sa eemaldasid „{calendar}“ kalendri avaliku lingi",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} jagas kalendrit {calendar} sinuga",
|
||||
"You shared calendar {calendar} with {user}" : "Sa jagasid kalendrit {calendar} kasutajaga {user}",
|
||||
"{actor} shared calendar {calendar} with {user}" : "{actor} jagas kalendrit {calendar} kasutajaga {user}",
|
||||
@@ -25,190 +21,41 @@ OC.L10N.register(
|
||||
"{actor} shared calendar {calendar} with group {group}" : "{actor} jagas kalendrit {calendar} grupiga {group}",
|
||||
"You unshared calendar {calendar} from group {group}" : "Sa lõpetasid kalendri {calendar} jagamise grupiga {group}",
|
||||
"{actor} unshared calendar {calendar} from group {group}" : "{actor} lõpetas kalendri {calendar} jagamise grupiga {group}",
|
||||
"Untitled event" : "Ilma nimeta sündmus",
|
||||
"{actor} created event {event} in calendar {calendar}" : "{actor} lõi sündmuse {event} kalendrisse {calendar}",
|
||||
"You created event {event} in calendar {calendar}" : "Sa lõid sündmuse {event} kalendrisse {calendar}",
|
||||
"{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}",
|
||||
"You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}",
|
||||
"Busy" : "Hõivatud",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse",
|
||||
"You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} kustutas {todo} ülesande {calendar} loendist",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Sina kustutasid {todo} ülesande {calendar} loendist",
|
||||
"{actor} updated to-do {todo} in list {calendar}" : "{actor} uuendas {todo} ülesannnet {calendar} loendist",
|
||||
"You updated to-do {todo} in list {calendar}" : "Sina uuendasid {todo} ülesannet {calendar} loendist",
|
||||
"{actor} solved to-do {todo} in list {calendar}" : "{actor} lahendas {todo} ülesande {calendar} loendist",
|
||||
"You solved to-do {todo} in list {calendar}" : "Sina lahendasid {todo} ülesande {calendar} loendist",
|
||||
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} avas uuesti {todo} ülesande {calendar} loendist",
|
||||
"You reopened to-do {todo} in list {calendar}" : "Sina avasid uuesti {todo} ülesande {calendar} loendist",
|
||||
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} teisaldas {todo} ülesande {sourceCalendar} loendist {targetCalendar} loendisse",
|
||||
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Sina teisaldasid {todo} ülesande {sourceCalendar} loendist {targetCalendar} loendisse",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontaktid ja ülesanded",
|
||||
"{actor} created todo {todo} in list {calendar}" : "{actor} lõi ülesande {todo} nimekirjas {calendar}",
|
||||
"You created todo {todo} in list {calendar}" : "Sa lõid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} deleted todo {todo} from list {calendar}" : "{actor} kustutas ülesande {todo} nimekirjast {calendar}",
|
||||
"You deleted todo {todo} from list {calendar}" : "Sa kustutasid ülesande {todo} nimekirjast {calendar}",
|
||||
"{actor} updated todo {todo} in list {calendar}" : "{actor} uuendas ülesande {todo} nimekirjas {calendar}",
|
||||
"You updated todo {todo} in list {calendar}" : "Sa uuendasid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} solved todo {todo} in list {calendar}" : "{actor} lõpetas ülesande {todo} nimekirjas {calendar}",
|
||||
"You solved todo {todo} in list {calendar}" : "Sa lõpetasid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} reopened todo {todo} in list {calendar}" : "{actor} taasavas ülesande {todo} nimekirjas {calendar}",
|
||||
"You reopened todo {todo} in list {calendar}" : "Sa taasavasid ülesande {todo} nimekirjas {calendar}",
|
||||
"A <strong>calendar</strong> was modified" : " <strong>Kalendrit</strong> muudeti",
|
||||
"A calendar <strong>event</strong> was modified" : "Kalendri <strong>sündmust </strong> muudeti",
|
||||
"A calendar <strong>to-do</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti",
|
||||
"A calendar <strong>todo</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti",
|
||||
"Contact birthdays" : "Kontaktide sünnipäevad",
|
||||
"Death of %s" : "%s surm",
|
||||
"Untitled calendar" : "Nimetu kalender",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Kuupäev:",
|
||||
"Where:" : "Kus:",
|
||||
"Description:" : "Kirjeldus:",
|
||||
"_%n year_::_%n years_" : ["%n aasta","%n aastat"],
|
||||
"_%n month_::_%n months_" : ["%n kuu","%n kuud"],
|
||||
"_%n day_::_%n days_" : ["%n päev","%n päeva"],
|
||||
"_%n hour_::_%n hours_" : ["%n tund","%n tundi"],
|
||||
"_%n minute_::_%n minutes_" : ["%n minut","%n minutit"],
|
||||
"%s (in %s)" : "%s (%s pärast)",
|
||||
"%s (%s ago)" : "%s (%s eest)",
|
||||
"Calendar: %s" : "Kalender: %s",
|
||||
"Date: %s" : "Kuupäev: %s",
|
||||
"Description: %s" : "Kirjeldus: %s",
|
||||
"Where: %s" : "Kus: %s",
|
||||
"%1$s via %2$s" : "%1$s %2$s kaudu",
|
||||
"Cancelled: %1$s" : "Tühistatud: %1$s",
|
||||
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "„%1$s“ on nõustunud sinu kutsega",
|
||||
"%1$s has tentatively accepted your invitation" : "„%1$s“ on esialgselt nõustunud sinu kutsega",
|
||||
"%1$s has declined your invitation" : "„%1$s“ on sinu kutsest keeldunud",
|
||||
"%1$s has responded to your invitation" : "„%1$s“ on vastanud sinu kutsele",
|
||||
"Invitation updated: %1$s" : "Kutse on uuendatud: %1$s",
|
||||
"%1$s updated the event \"%2$s\"" : "„%1$s“ uuendas sündmust „%2$s“",
|
||||
"Invitation: %1$s" : "Kutse: %1$s",
|
||||
"%1$s would like to invite you to \"%2$s\"" : "„%1$s“ soovib saata sulle „%2$s“ kutset",
|
||||
"Organizer:" : "Korraldaja:",
|
||||
"Attendees:" : "Osalejad:",
|
||||
"Title:" : "Pealkiri:",
|
||||
"When:" : "Millal:",
|
||||
"Invitation canceled" : "Kutse on tühistatud",
|
||||
"Invitation updated" : "Kutse uuendatud",
|
||||
"Location:" : "Asukoht:",
|
||||
"Link:" : "Link:",
|
||||
"Accept" : "Nõustu",
|
||||
"Decline" : "Keeldu",
|
||||
"More options …" : "Täiendavad valikud…",
|
||||
"More options at %s" : "Lisavalikud: %s",
|
||||
"Monday" : "Esmaspäev",
|
||||
"Tuesday" : "Teisipäev",
|
||||
"Wednesday" : "Kolmapäev",
|
||||
"Thursday" : "Neljapäev",
|
||||
"Friday" : "Reede",
|
||||
"Saturday" : "Laupäev",
|
||||
"Sunday" : "Pühapäev",
|
||||
"January" : "Jaanuar",
|
||||
"February" : "Veebruar",
|
||||
"March" : "Märts",
|
||||
"April" : "Aprill",
|
||||
"May" : "Mai",
|
||||
"June" : "Juuni",
|
||||
"July" : "Juuli",
|
||||
"August" : "August",
|
||||
"September" : "September",
|
||||
"October" : "Oktoober",
|
||||
"November" : "November",
|
||||
"December" : "Detsember",
|
||||
"First" : "Esimene",
|
||||
"Second" : "Teine",
|
||||
"Third" : "Kolmas",
|
||||
"Fourth" : "Neljas",
|
||||
"Fifth" : "Viies",
|
||||
"Last" : "Viimane",
|
||||
"Contacts" : "Kontaktid",
|
||||
"You created address book {addressbook}" : "Sa lõid aadressiraamatu „{addressbook}“",
|
||||
"{actor} deleted address book {addressbook}" : "„{actor}“ kustutas „{addressbook}“ aadressiraamatu",
|
||||
"You deleted address book {addressbook}" : "Sa kustutasid aadressiraamatu „{addressbook}“",
|
||||
"You shared address book {addressbook} with {user}" : "Sa jagasid „{addressbook}“ aadressiraamatut kasutajaga „{user}“",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Sa kustutasid „{card}“ kontakti „{addressbook}“ aadressiraamatus",
|
||||
"You updated contact {card} in address book {addressbook}" : "Sa uuendasid „{card}“ kontakti „{addressbook}“ aadressiraamatus",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Kontakti</strong> või <strong>aadressiraamatut</strong> muudeti",
|
||||
"Accounts" : "Kasutajakontod",
|
||||
"System address book which holds all accounts" : "Süsteemne aadressiraamat, kus leiduvad kõik kasutajakontod",
|
||||
"File is not updatable: %1$s" : "Fail pole uuendatav: %1$s",
|
||||
"Failed to get storage for file" : "Failile ei õnnestunud eraldada andmeruumi",
|
||||
"Could not write file contents" : "Ei õnnestunud kirjutada faili sisu",
|
||||
"_%n byte_::_%n bytes_" : ["%n bait","%n baiti"],
|
||||
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
|
||||
"Could not open file: %1$s, file does seem to exist" : "„%1$s“ faili avamine ei õnnestunud - aga tundub, et ta on olemas",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "„%1$s“ faili avamine ei õnnestunud - tundub, et teda pole olemas",
|
||||
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
|
||||
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
|
||||
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Faili sisu salvestamine ei õnnestunud: %1$s",
|
||||
"File not found: %1$s" : "Faili ei leidu: %1$s",
|
||||
"Invalid target path" : "Vigane sihtasukoht",
|
||||
"System is in maintenance mode." : "Server on hooldusrežiimis.",
|
||||
"Upgrade needed" : "Uuendus on vajalik",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Selleks, et sinu %s toimiks iOS-is/macOS-is CalDAV-i ja CardDAV-iga peab https olema seadistatud.",
|
||||
"Configures a CalDAV account" : "Seadistab CalDAV-i kasutajakonto",
|
||||
"Configures a CardDAV account" : "Seadistab CardDAV-i kasutajakonto",
|
||||
"Events" : "Sündmused",
|
||||
"Untitled task" : "Ilma nimeta pealkiri",
|
||||
"Completed on %s" : "Lõpetatud %s",
|
||||
"Due on %s by %s" : "Tähtaeg: %s, täitjaks %s",
|
||||
"Due on %s" : "Tähtaeg: %s",
|
||||
"System Address Book" : "Süsteemne aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.",
|
||||
"Enable System Address Book" : "Kasuta süsteemset aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemne aadressiraamat",
|
||||
"WebDAV endpoint" : "WebDAV-i teenuse otspunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Ei õnnestunud kontrollida, kas sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel. Palun kontrolli seda käsitsi.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Sinu veebiserver pole veel failide sünkroniseerimiseks vajalikult seadistatud, kuna WebDAV liides paistab olevat katki.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel.",
|
||||
"Calendars including events, details and attendees" : "Kalendrid, sealhulgas sündmused, üksikasjad ja osalejad",
|
||||
"Contacts and groups" : "Kontaktid ja grupid",
|
||||
"Tasks" : "Ülesanded",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Absence saved" : "Äraoleku teave on salvestatud",
|
||||
"Failed to save your absence settings" : "Sinu äraoleku seadistuste salvestamine ei õnnestunud",
|
||||
"Absence cleared" : "Äraolek on eemaldatud",
|
||||
"Failed to clear your absence settings" : "Sinu äraoleku seadistuste eemaldamine ei õnnestunud",
|
||||
"First day" : "Esimene päev",
|
||||
"Last day (inclusive)" : "Viimane päev (kaasaarvatud)",
|
||||
"Out of office replacement (optional)" : "Asendaja äraoleku ajaks (valikuline)",
|
||||
"Name of the replacement" : "Asendaja nimi",
|
||||
"No results." : "Vasteid ei leitud.",
|
||||
"Start typing." : "Alusta kirjutamist.",
|
||||
"Short absence status" : "Äraoleku lühinimi",
|
||||
"Long absence Message" : "Äraoleku pikk sõnum",
|
||||
"Save" : "Salvesta",
|
||||
"Disable absence" : "Lülita äraolek välja",
|
||||
"Failed to load availability" : "Saadavuse laadimine ei õnnestunud",
|
||||
"Saved availability" : "Saadavus on salvestatud",
|
||||
"Failed to save availability" : "Saadavuse salvestamine ei õnnestunud",
|
||||
"Time zone:" : "Ajavöönd:",
|
||||
"to" : "saaja",
|
||||
"Delete slot" : "Kustuta ajavahemik",
|
||||
"No working hours set" : "Tööajad on sisestamata",
|
||||
"Add slot" : "Lisa ajavahemik",
|
||||
"Weekdays" : "Nädalapäevad",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.",
|
||||
"Availability" : "Saadavus",
|
||||
"Absence" : "Äraolek",
|
||||
"Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.",
|
||||
"Calendar server" : "Kalendriserver",
|
||||
"Send invitations to attendees" : "Saada osalejatele kutsed",
|
||||
"Automatically generate a birthday calendar" : "Koosta sünnipäevade kalender automaatselt",
|
||||
"Send notifications for events" : "Saada sündmuste teavitusi",
|
||||
"Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused",
|
||||
"Cancel" : "Tühista",
|
||||
"Import" : "Impordi",
|
||||
"Error while saving settings" : "Viga seadistuste salvestamisel",
|
||||
"Contact reset successfully" : "Kontakti lähtestamine õnnestus",
|
||||
"Error while resetting contact" : "Viga kontakti lähtestamisel",
|
||||
"Contact imported successfully" : "Kontakti importimine õnnestus",
|
||||
"Error while importing contact" : "Viga kontakti importimisel",
|
||||
"Example Content" : "Sisunäidis",
|
||||
"Set example content to be created on new user first login." : "Kirjelda näidissisu, mis uue kasutaja esimesel sisselogimisel luuakse.",
|
||||
"Import contact" : "Impordi kontakt",
|
||||
"Reset to default contact" : "Lähtesta vaikimisi kontakstiks",
|
||||
"Import contacts" : "Impordi kontaktid",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?",
|
||||
"There was an error updating your attendance status." : "Sinu osalemise oleku muutmisel tekkis viga.",
|
||||
"Please contact the organizer directly." : "Palun võta ühendust korraldajaga otse.",
|
||||
"Are you accepting the invitation?" : "Kas sa nõustud kutsega?",
|
||||
"Tentative" : "Esialgne",
|
||||
"Your attendance was updated successfully." : "Sinu osalemise oleku muutmine õnnestus.",
|
||||
"Time:" : "Aeg:",
|
||||
"Could not open file" : "Ei õnnestunud avada faili"
|
||||
"Save" : "Salvesta",
|
||||
"Send invitations to attendees" : "Saada osalejatele kutsed",
|
||||
"Hello %s," : "Tere %s,",
|
||||
"When:" : "Millal:"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
+19
-172
@@ -1,6 +1,6 @@
|
||||
{ "translations": {
|
||||
"Calendar" : "Kalender",
|
||||
"Tasks" : "Ülesanded",
|
||||
"Todos" : "Ülesanded",
|
||||
"Personal" : "Isiklik",
|
||||
"{actor} created calendar {calendar}" : "{actor} lõi kalendri {calendar}",
|
||||
"You created calendar {calendar}" : "Sa lõid kalendri {calendar}",
|
||||
@@ -8,10 +8,6 @@
|
||||
"You deleted calendar {calendar}" : "Sa kustutasid kalendri {calendar}",
|
||||
"{actor} updated calendar {calendar}" : "{actor} uuendas kalendrit {calendar}",
|
||||
"You updated calendar {calendar}" : "Sa uuendasid kalendrit {calendar}",
|
||||
"{actor} restored calendar {calendar}" : "{actor} taastas kalendri {calendar}",
|
||||
"You restored calendar {calendar}" : "Sina taastasid kalendri {calendar}",
|
||||
"You shared calendar {calendar} as public link" : "Sina jagasid „{calendar}“ kalendrit avaliku lingina",
|
||||
"You removed public link for calendar {calendar}" : "Sa eemaldasid „{calendar}“ kalendri avaliku lingi",
|
||||
"{actor} shared calendar {calendar} with you" : "{actor} jagas kalendrit {calendar} sinuga",
|
||||
"You shared calendar {calendar} with {user}" : "Sa jagasid kalendrit {calendar} kasutajaga {user}",
|
||||
"{actor} shared calendar {calendar} with {user}" : "{actor} jagas kalendrit {calendar} kasutajaga {user}",
|
||||
@@ -23,190 +19,41 @@
|
||||
"{actor} shared calendar {calendar} with group {group}" : "{actor} jagas kalendrit {calendar} grupiga {group}",
|
||||
"You unshared calendar {calendar} from group {group}" : "Sa lõpetasid kalendri {calendar} jagamise grupiga {group}",
|
||||
"{actor} unshared calendar {calendar} from group {group}" : "{actor} lõpetas kalendri {calendar} jagamise grupiga {group}",
|
||||
"Untitled event" : "Ilma nimeta sündmus",
|
||||
"{actor} created event {event} in calendar {calendar}" : "{actor} lõi sündmuse {event} kalendrisse {calendar}",
|
||||
"You created event {event} in calendar {calendar}" : "Sa lõid sündmuse {event} kalendrisse {calendar}",
|
||||
"{actor} deleted event {event} from calendar {calendar}" : "{actor} kustutas sündmuse {event} kalendrist {calendar}",
|
||||
"You deleted event {event} from calendar {calendar}" : "Sa kustutasid sündmuse {event} kalendrist {calendar}",
|
||||
"{actor} updated event {event} in calendar {calendar}" : "{actor} uuendas sündmust {event} kalendris {calendar}",
|
||||
"You updated event {event} in calendar {calendar}" : "Sa uuendasid sündmust {event} kalendris {calendar}",
|
||||
"Busy" : "Hõivatud",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} lisas {todo} ülesande {calendar} loendissse",
|
||||
"You created to-do {todo} in list {calendar}" : "Sina lisasid {todo} ülesande {calendar} loendisse",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} kustutas {todo} ülesande {calendar} loendist",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Sina kustutasid {todo} ülesande {calendar} loendist",
|
||||
"{actor} updated to-do {todo} in list {calendar}" : "{actor} uuendas {todo} ülesannnet {calendar} loendist",
|
||||
"You updated to-do {todo} in list {calendar}" : "Sina uuendasid {todo} ülesannet {calendar} loendist",
|
||||
"{actor} solved to-do {todo} in list {calendar}" : "{actor} lahendas {todo} ülesande {calendar} loendist",
|
||||
"You solved to-do {todo} in list {calendar}" : "Sina lahendasid {todo} ülesande {calendar} loendist",
|
||||
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} avas uuesti {todo} ülesande {calendar} loendist",
|
||||
"You reopened to-do {todo} in list {calendar}" : "Sina avasid uuesti {todo} ülesande {calendar} loendist",
|
||||
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} teisaldas {todo} ülesande {sourceCalendar} loendist {targetCalendar} loendisse",
|
||||
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Sina teisaldasid {todo} ülesande {sourceCalendar} loendist {targetCalendar} loendisse",
|
||||
"Calendar, contacts and tasks" : "Kalender, kontaktid ja ülesanded",
|
||||
"{actor} created todo {todo} in list {calendar}" : "{actor} lõi ülesande {todo} nimekirjas {calendar}",
|
||||
"You created todo {todo} in list {calendar}" : "Sa lõid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} deleted todo {todo} from list {calendar}" : "{actor} kustutas ülesande {todo} nimekirjast {calendar}",
|
||||
"You deleted todo {todo} from list {calendar}" : "Sa kustutasid ülesande {todo} nimekirjast {calendar}",
|
||||
"{actor} updated todo {todo} in list {calendar}" : "{actor} uuendas ülesande {todo} nimekirjas {calendar}",
|
||||
"You updated todo {todo} in list {calendar}" : "Sa uuendasid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} solved todo {todo} in list {calendar}" : "{actor} lõpetas ülesande {todo} nimekirjas {calendar}",
|
||||
"You solved todo {todo} in list {calendar}" : "Sa lõpetasid ülesande {todo} nimekirjas {calendar}",
|
||||
"{actor} reopened todo {todo} in list {calendar}" : "{actor} taasavas ülesande {todo} nimekirjas {calendar}",
|
||||
"You reopened todo {todo} in list {calendar}" : "Sa taasavasid ülesande {todo} nimekirjas {calendar}",
|
||||
"A <strong>calendar</strong> was modified" : " <strong>Kalendrit</strong> muudeti",
|
||||
"A calendar <strong>event</strong> was modified" : "Kalendri <strong>sündmust </strong> muudeti",
|
||||
"A calendar <strong>to-do</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti",
|
||||
"A calendar <strong>todo</strong> was modified" : "Kalendri <strong>ülesannet</strong> muudeti",
|
||||
"Contact birthdays" : "Kontaktide sünnipäevad",
|
||||
"Death of %s" : "%s surm",
|
||||
"Untitled calendar" : "Nimetu kalender",
|
||||
"Calendar:" : "Kalender:",
|
||||
"Date:" : "Kuupäev:",
|
||||
"Where:" : "Kus:",
|
||||
"Description:" : "Kirjeldus:",
|
||||
"_%n year_::_%n years_" : ["%n aasta","%n aastat"],
|
||||
"_%n month_::_%n months_" : ["%n kuu","%n kuud"],
|
||||
"_%n day_::_%n days_" : ["%n päev","%n päeva"],
|
||||
"_%n hour_::_%n hours_" : ["%n tund","%n tundi"],
|
||||
"_%n minute_::_%n minutes_" : ["%n minut","%n minutit"],
|
||||
"%s (in %s)" : "%s (%s pärast)",
|
||||
"%s (%s ago)" : "%s (%s eest)",
|
||||
"Calendar: %s" : "Kalender: %s",
|
||||
"Date: %s" : "Kuupäev: %s",
|
||||
"Description: %s" : "Kirjeldus: %s",
|
||||
"Where: %s" : "Kus: %s",
|
||||
"%1$s via %2$s" : "%1$s %2$s kaudu",
|
||||
"Cancelled: %1$s" : "Tühistatud: %1$s",
|
||||
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
|
||||
"Re: %1$s" : "Re: %1$s",
|
||||
"%1$s has accepted your invitation" : "„%1$s“ on nõustunud sinu kutsega",
|
||||
"%1$s has tentatively accepted your invitation" : "„%1$s“ on esialgselt nõustunud sinu kutsega",
|
||||
"%1$s has declined your invitation" : "„%1$s“ on sinu kutsest keeldunud",
|
||||
"%1$s has responded to your invitation" : "„%1$s“ on vastanud sinu kutsele",
|
||||
"Invitation updated: %1$s" : "Kutse on uuendatud: %1$s",
|
||||
"%1$s updated the event \"%2$s\"" : "„%1$s“ uuendas sündmust „%2$s“",
|
||||
"Invitation: %1$s" : "Kutse: %1$s",
|
||||
"%1$s would like to invite you to \"%2$s\"" : "„%1$s“ soovib saata sulle „%2$s“ kutset",
|
||||
"Organizer:" : "Korraldaja:",
|
||||
"Attendees:" : "Osalejad:",
|
||||
"Title:" : "Pealkiri:",
|
||||
"When:" : "Millal:",
|
||||
"Invitation canceled" : "Kutse on tühistatud",
|
||||
"Invitation updated" : "Kutse uuendatud",
|
||||
"Location:" : "Asukoht:",
|
||||
"Link:" : "Link:",
|
||||
"Accept" : "Nõustu",
|
||||
"Decline" : "Keeldu",
|
||||
"More options …" : "Täiendavad valikud…",
|
||||
"More options at %s" : "Lisavalikud: %s",
|
||||
"Monday" : "Esmaspäev",
|
||||
"Tuesday" : "Teisipäev",
|
||||
"Wednesday" : "Kolmapäev",
|
||||
"Thursday" : "Neljapäev",
|
||||
"Friday" : "Reede",
|
||||
"Saturday" : "Laupäev",
|
||||
"Sunday" : "Pühapäev",
|
||||
"January" : "Jaanuar",
|
||||
"February" : "Veebruar",
|
||||
"March" : "Märts",
|
||||
"April" : "Aprill",
|
||||
"May" : "Mai",
|
||||
"June" : "Juuni",
|
||||
"July" : "Juuli",
|
||||
"August" : "August",
|
||||
"September" : "September",
|
||||
"October" : "Oktoober",
|
||||
"November" : "November",
|
||||
"December" : "Detsember",
|
||||
"First" : "Esimene",
|
||||
"Second" : "Teine",
|
||||
"Third" : "Kolmas",
|
||||
"Fourth" : "Neljas",
|
||||
"Fifth" : "Viies",
|
||||
"Last" : "Viimane",
|
||||
"Contacts" : "Kontaktid",
|
||||
"You created address book {addressbook}" : "Sa lõid aadressiraamatu „{addressbook}“",
|
||||
"{actor} deleted address book {addressbook}" : "„{actor}“ kustutas „{addressbook}“ aadressiraamatu",
|
||||
"You deleted address book {addressbook}" : "Sa kustutasid aadressiraamatu „{addressbook}“",
|
||||
"You shared address book {addressbook} with {user}" : "Sa jagasid „{addressbook}“ aadressiraamatut kasutajaga „{user}“",
|
||||
"You deleted contact {card} from address book {addressbook}" : "Sa kustutasid „{card}“ kontakti „{addressbook}“ aadressiraamatus",
|
||||
"You updated contact {card} in address book {addressbook}" : "Sa uuendasid „{card}“ kontakti „{addressbook}“ aadressiraamatus",
|
||||
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "<strong>Kontakti</strong> või <strong>aadressiraamatut</strong> muudeti",
|
||||
"Accounts" : "Kasutajakontod",
|
||||
"System address book which holds all accounts" : "Süsteemne aadressiraamat, kus leiduvad kõik kasutajakontod",
|
||||
"File is not updatable: %1$s" : "Fail pole uuendatav: %1$s",
|
||||
"Failed to get storage for file" : "Failile ei õnnestunud eraldada andmeruumi",
|
||||
"Could not write file contents" : "Ei õnnestunud kirjutada faili sisu",
|
||||
"_%n byte_::_%n bytes_" : ["%n bait","%n baiti"],
|
||||
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
|
||||
"Could not open file: %1$s, file does seem to exist" : "„%1$s“ faili avamine ei õnnestunud - aga tundub, et ta on olemas",
|
||||
"Could not open file: %1$s, file doesn't seem to exist" : "„%1$s“ faili avamine ei õnnestunud - tundub, et teda pole olemas",
|
||||
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
|
||||
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
|
||||
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
|
||||
"Failed to write file contents: %1$s" : "Faili sisu salvestamine ei õnnestunud: %1$s",
|
||||
"File not found: %1$s" : "Faili ei leidu: %1$s",
|
||||
"Invalid target path" : "Vigane sihtasukoht",
|
||||
"System is in maintenance mode." : "Server on hooldusrežiimis.",
|
||||
"Upgrade needed" : "Uuendus on vajalik",
|
||||
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Selleks, et sinu %s toimiks iOS-is/macOS-is CalDAV-i ja CardDAV-iga peab https olema seadistatud.",
|
||||
"Configures a CalDAV account" : "Seadistab CalDAV-i kasutajakonto",
|
||||
"Configures a CardDAV account" : "Seadistab CardDAV-i kasutajakonto",
|
||||
"Events" : "Sündmused",
|
||||
"Untitled task" : "Ilma nimeta pealkiri",
|
||||
"Completed on %s" : "Lõpetatud %s",
|
||||
"Due on %s by %s" : "Tähtaeg: %s, täitjaks %s",
|
||||
"Due on %s" : "Tähtaeg: %s",
|
||||
"System Address Book" : "Süsteemne aadressiraamat",
|
||||
"The system address book contains contact information for all users in your instance." : "Süsteemses aadressiraamatus leiduvad kõikde selle serveri kasutajate kontaktteave.",
|
||||
"Enable System Address Book" : "Kasuta süsteemset aadressiraamatut",
|
||||
"DAV system address book" : "DAV-i süsteemne aadressiraamat",
|
||||
"WebDAV endpoint" : "WebDAV-i teenuse otspunkt",
|
||||
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Ei õnnestunud kontrollida, kas sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel. Palun kontrolli seda käsitsi.",
|
||||
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Sinu veebiserver pole veel failide sünkroniseerimiseks vajalikult seadistatud, kuna WebDAV liides paistab olevat katki.",
|
||||
"Your web server is properly set up to allow file synchronization over WebDAV." : "Sinu veebiserver on korrektselt seadistatud ja võimaldab kasutada failide sünkroniseerimist WebDAV-i vahendusel.",
|
||||
"Calendars including events, details and attendees" : "Kalendrid, sealhulgas sündmused, üksikasjad ja osalejad",
|
||||
"Contacts and groups" : "Kontaktid ja grupid",
|
||||
"Tasks" : "Ülesanded",
|
||||
"WebDAV" : "WebDAV",
|
||||
"Absence saved" : "Äraoleku teave on salvestatud",
|
||||
"Failed to save your absence settings" : "Sinu äraoleku seadistuste salvestamine ei õnnestunud",
|
||||
"Absence cleared" : "Äraolek on eemaldatud",
|
||||
"Failed to clear your absence settings" : "Sinu äraoleku seadistuste eemaldamine ei õnnestunud",
|
||||
"First day" : "Esimene päev",
|
||||
"Last day (inclusive)" : "Viimane päev (kaasaarvatud)",
|
||||
"Out of office replacement (optional)" : "Asendaja äraoleku ajaks (valikuline)",
|
||||
"Name of the replacement" : "Asendaja nimi",
|
||||
"No results." : "Vasteid ei leitud.",
|
||||
"Start typing." : "Alusta kirjutamist.",
|
||||
"Short absence status" : "Äraoleku lühinimi",
|
||||
"Long absence Message" : "Äraoleku pikk sõnum",
|
||||
"Save" : "Salvesta",
|
||||
"Disable absence" : "Lülita äraolek välja",
|
||||
"Failed to load availability" : "Saadavuse laadimine ei õnnestunud",
|
||||
"Saved availability" : "Saadavus on salvestatud",
|
||||
"Failed to save availability" : "Saadavuse salvestamine ei õnnestunud",
|
||||
"Time zone:" : "Ajavöönd:",
|
||||
"to" : "saaja",
|
||||
"Delete slot" : "Kustuta ajavahemik",
|
||||
"No working hours set" : "Tööajad on sisestamata",
|
||||
"Add slot" : "Lisa ajavahemik",
|
||||
"Weekdays" : "Nädalapäevad",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Kõikide teavituste summutamiseks määra automaatselt kasutajale olek „Ära sega“ nendele aegadele, kus ta vaba ei ole.",
|
||||
"Availability" : "Saadavus",
|
||||
"Absence" : "Äraolek",
|
||||
"Configure your next absence period." : "Seadista järgmise äraoleku ajavahemik.",
|
||||
"Calendar server" : "Kalendriserver",
|
||||
"Send invitations to attendees" : "Saada osalejatele kutsed",
|
||||
"Automatically generate a birthday calendar" : "Koosta sünnipäevade kalender automaatselt",
|
||||
"Send notifications for events" : "Saada sündmuste teavitusi",
|
||||
"Enable notifications for events via push" : "Võta kasutusele tõuketeenustepõhised teavitused",
|
||||
"Cancel" : "Tühista",
|
||||
"Import" : "Impordi",
|
||||
"Error while saving settings" : "Viga seadistuste salvestamisel",
|
||||
"Contact reset successfully" : "Kontakti lähtestamine õnnestus",
|
||||
"Error while resetting contact" : "Viga kontakti lähtestamisel",
|
||||
"Contact imported successfully" : "Kontakti importimine õnnestus",
|
||||
"Error while importing contact" : "Viga kontakti importimisel",
|
||||
"Example Content" : "Sisunäidis",
|
||||
"Set example content to be created on new user first login." : "Kirjelda näidissisu, mis uue kasutaja esimesel sisselogimisel luuakse.",
|
||||
"Import contact" : "Impordi kontakt",
|
||||
"Reset to default contact" : "Lähtesta vaikimisi kontakstiks",
|
||||
"Import contacts" : "Impordi kontaktid",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Uue .vcf faili importimisel olemasolev vaikimisi kontakt kustutatakse ja asendatakse uuega. Kas sa soovid jätkata?",
|
||||
"There was an error updating your attendance status." : "Sinu osalemise oleku muutmisel tekkis viga.",
|
||||
"Please contact the organizer directly." : "Palun võta ühendust korraldajaga otse.",
|
||||
"Are you accepting the invitation?" : "Kas sa nõustud kutsega?",
|
||||
"Tentative" : "Esialgne",
|
||||
"Your attendance was updated successfully." : "Sinu osalemise oleku muutmine õnnestus.",
|
||||
"Time:" : "Aeg:",
|
||||
"Could not open file" : "Ei õnnestunud avada faili"
|
||||
"Save" : "Salvesta",
|
||||
"Send invitations to attendees" : "Saada osalejatele kutsed",
|
||||
"Hello %s," : "Tere %s,",
|
||||
"When:" : "Millal:"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -275,13 +275,6 @@ OC.L10N.register(
|
||||
"Cancel" : "Annuler",
|
||||
"Import" : "Importation",
|
||||
"Error while saving settings" : "Erreur lors de l'enregistrement des paramètres",
|
||||
"Contact reset successfully" : "Contact réinitialisé avec succès",
|
||||
"Error while resetting contact" : "Erreur lors de la remise à zéro du contact",
|
||||
"Contact imported successfully" : "Contact importé avec succès",
|
||||
"Error while importing contact" : "Erreur lors de l'importation du contact",
|
||||
"Import contact" : "Importer un contact",
|
||||
"Import contacts" : "Importer des contacts",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?",
|
||||
"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 ?",
|
||||
|
||||
@@ -273,13 +273,6 @@
|
||||
"Cancel" : "Annuler",
|
||||
"Import" : "Importation",
|
||||
"Error while saving settings" : "Erreur lors de l'enregistrement des paramètres",
|
||||
"Contact reset successfully" : "Contact réinitialisé avec succès",
|
||||
"Error while resetting contact" : "Erreur lors de la remise à zéro du contact",
|
||||
"Contact imported successfully" : "Contact importé avec succès",
|
||||
"Error while importing contact" : "Erreur lors de l'importation du contact",
|
||||
"Import contact" : "Importer un contact",
|
||||
"Import contacts" : "Importer des contacts",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importer un nouveau fichier .vcf supprimera le contact par défaut existant et le remplacera. Voulez-vous continuer ?",
|
||||
"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 ?",
|
||||
|
||||
@@ -37,7 +37,7 @@ OC.L10N.register(
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {event} do calendário {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Você restaurou o evento {event} do calendário {calendar}",
|
||||
"Busy" : "Ocupado",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} criou a tarefa {todo} na lista {calendar}",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} criou tarefa {todo} na lista {calendar}",
|
||||
"You created to-do {todo} in list {calendar}" : "Você criou a tarefa {todo} na lista {calendar}",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} excluiu a tarefa {todo} da lista {calendar}",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Você excluiu a tarefa {todo} da lista {calendar}",
|
||||
@@ -270,7 +270,7 @@ OC.L10N.register(
|
||||
"Failed to clear your absence settings" : "Falha ao limpar suas configurações de ausência",
|
||||
"First day" : "Primeiro dia",
|
||||
"Last day (inclusive)" : "Último dia (inclusive)",
|
||||
"Out of office replacement (optional)" : "Substituto durante sua ausência (opcional)",
|
||||
"Out of office replacement (optional)" : "Substituição fora do escritório (opcional)",
|
||||
"Name of the replacement" : "Nome do substituto",
|
||||
"No results." : "Nenhum resultado.",
|
||||
"Start typing." : "Comece a digitar.",
|
||||
@@ -303,8 +303,8 @@ OC.L10N.register(
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Portanto, eles não estarão disponíveis imediatamente após a ativação, mas depois de algum tempo.",
|
||||
"Send notifications for events" : "Enviar notificações para eventos",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "As notificações são enviadas via trabalhos em segundo plano, portanto, elas devem ocorrer com frequência suficiente.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar notificações de lembrete também para os compartilhadores de calendário",
|
||||
"Reminders are always sent to organizers and attendees." : "Lembretes são sempre enviados aos organizadores e participantes.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Envie notificações de lembrete para compartilhamentos de calendário também",
|
||||
"Reminders are always sent to organizers and attendees." : "Os lembretes são sempre enviados aos organizadores e participantes.",
|
||||
"Enable notifications for events via push" : "Ativar notificações para eventos via push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"{actor} restored event {event} of calendar {calendar}" : "{actor} restaurou o evento {event} do calendário {calendar}",
|
||||
"You restored event {event} of calendar {calendar}" : "Você restaurou o evento {event} do calendário {calendar}",
|
||||
"Busy" : "Ocupado",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} criou a tarefa {todo} na lista {calendar}",
|
||||
"{actor} created to-do {todo} in list {calendar}" : "{actor} criou tarefa {todo} na lista {calendar}",
|
||||
"You created to-do {todo} in list {calendar}" : "Você criou a tarefa {todo} na lista {calendar}",
|
||||
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} excluiu a tarefa {todo} da lista {calendar}",
|
||||
"You deleted to-do {todo} from list {calendar}" : "Você excluiu a tarefa {todo} da lista {calendar}",
|
||||
@@ -268,7 +268,7 @@
|
||||
"Failed to clear your absence settings" : "Falha ao limpar suas configurações de ausência",
|
||||
"First day" : "Primeiro dia",
|
||||
"Last day (inclusive)" : "Último dia (inclusive)",
|
||||
"Out of office replacement (optional)" : "Substituto durante sua ausência (opcional)",
|
||||
"Out of office replacement (optional)" : "Substituição fora do escritório (opcional)",
|
||||
"Name of the replacement" : "Nome do substituto",
|
||||
"No results." : "Nenhum resultado.",
|
||||
"Start typing." : "Comece a digitar.",
|
||||
@@ -301,8 +301,8 @@
|
||||
"Hence they will not be available immediately after enabling but will show up after some time." : "Portanto, eles não estarão disponíveis imediatamente após a ativação, mas depois de algum tempo.",
|
||||
"Send notifications for events" : "Enviar notificações para eventos",
|
||||
"Notifications are sent via background jobs, so these must occur often enough." : "As notificações são enviadas via trabalhos em segundo plano, portanto, elas devem ocorrer com frequência suficiente.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Enviar notificações de lembrete também para os compartilhadores de calendário",
|
||||
"Reminders are always sent to organizers and attendees." : "Lembretes são sempre enviados aos organizadores e participantes.",
|
||||
"Send reminder notifications to calendar sharees as well" : "Envie notificações de lembrete para compartilhamentos de calendário também",
|
||||
"Reminders are always sent to organizers and attendees." : "Os lembretes são sempre enviados aos organizadores e participantes.",
|
||||
"Enable notifications for events via push" : "Ativar notificações para eventos via push",
|
||||
"Cancel" : "Cancelar",
|
||||
"Import" : "Importar",
|
||||
|
||||
@@ -309,16 +309,6 @@ OC.L10N.register(
|
||||
"Cancel" : "Zrušiť",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Chyba pri ukladaní nastavení",
|
||||
"Contact reset successfully" : "Kontakt bol úspešne resetovaný",
|
||||
"Error while resetting contact" : "Chyba počas resetovania kontaktu ",
|
||||
"Contact imported successfully" : "Kontakt bol úspešne importovaný",
|
||||
"Error while importing contact" : "Chyba pri importovaní kontaktu",
|
||||
"Example Content" : "Príklad Obsahu",
|
||||
"Set example content to be created on new user first login." : "Nastavte vzorový obsah, ktorý sa vytvorí pri prvom prihlásení nového používateľa.",
|
||||
"Import contact" : "Importovať kontakt",
|
||||
"Reset to default contact" : "Resetovať na predvolený kontakt",
|
||||
"Import contacts" : "Importovať kontakty",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?",
|
||||
"There was an error updating your attendance status." : "Nastal problém pri aktualizácii Vašej účasti.",
|
||||
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
|
||||
"Are you accepting the invitation?" : "Príjmate pozvánku?",
|
||||
|
||||
@@ -307,16 +307,6 @@
|
||||
"Cancel" : "Zrušiť",
|
||||
"Import" : "Import",
|
||||
"Error while saving settings" : "Chyba pri ukladaní nastavení",
|
||||
"Contact reset successfully" : "Kontakt bol úspešne resetovaný",
|
||||
"Error while resetting contact" : "Chyba počas resetovania kontaktu ",
|
||||
"Contact imported successfully" : "Kontakt bol úspešne importovaný",
|
||||
"Error while importing contact" : "Chyba pri importovaní kontaktu",
|
||||
"Example Content" : "Príklad Obsahu",
|
||||
"Set example content to be created on new user first login." : "Nastavte vzorový obsah, ktorý sa vytvorí pri prvom prihlásení nového používateľa.",
|
||||
"Import contact" : "Importovať kontakt",
|
||||
"Reset to default contact" : "Resetovať na predvolený kontakt",
|
||||
"Import contacts" : "Importovať kontakty",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importovaním nového súboru .vcf sa vymaže existujúci predvolený kontakt a nahradí sa novým. Chcete pokračovať?",
|
||||
"There was an error updating your attendance status." : "Nastal problém pri aktualizácii Vašej účasti.",
|
||||
"Please contact the organizer directly." : "Prosím kontaktujte priamo organizátora.",
|
||||
"Are you accepting the invitation?" : "Príjmate pozvánku?",
|
||||
|
||||
@@ -250,9 +250,6 @@ OC.L10N.register(
|
||||
"Completed on %s" : "%s tarihinde tamamlandı",
|
||||
"Due on %s by %s" : "%s tarihine kadar %s tarafından",
|
||||
"Due on %s" : "%s tarihine kadar",
|
||||
"System Address Book" : "Sistem adres defteri",
|
||||
"The system address book contains contact information for all users in your instance." : "Sistem adres defterinde, kopyanızdaki tüm kullanıcıların iletişim bilgileri bulunur.",
|
||||
"Enable System Address Book" : "Sistem adres defteri kullanılsın",
|
||||
"DAV system address book" : "DAV sistem adres defteri",
|
||||
"No outstanding DAV system address book sync." : "Bekleyen bir DAV sistemi adres defteri eşitlemesi yok.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Kopyanızda 1000 üzerinde kullanıcı olduğundan ya da bir sorun çıktığından DAV sistemi adres defteri eşitlemesi henüz yapılmamış. Lütfen \"occ dav:sync-system-addressbook\" komutunu yürüterek el ile eşitleyin.",
|
||||
@@ -309,16 +306,6 @@ OC.L10N.register(
|
||||
"Cancel" : "İptal",
|
||||
"Import" : "İçe aktar",
|
||||
"Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı",
|
||||
"Contact reset successfully" : "Kişi sıfırlandı",
|
||||
"Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı",
|
||||
"Contact imported successfully" : "Kişi içe aktarıldı",
|
||||
"Error while importing contact" : "Kişi içe aktarılırken sorun çıktı",
|
||||
"Example Content" : "Örnek içerik",
|
||||
"Set example content to be created on new user first login." : "Yeni kullanıcının ilk oturum açmasında oluşturulacak örnek içeriği ayarlayın.",
|
||||
"Import contact" : "Kişiyi içe aktar",
|
||||
"Reset to default contact" : "Varsayılan kişiye sıfırla",
|
||||
"Import contacts" : "Kişileri içe aktar",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?",
|
||||
"There was an error updating your attendance status." : "Katılım durumunuz güncellenirken bir sorun çıktı.",
|
||||
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
|
||||
"Are you accepting the invitation?" : "Daveti kabul ediyor musunuz?",
|
||||
|
||||
@@ -248,9 +248,6 @@
|
||||
"Completed on %s" : "%s tarihinde tamamlandı",
|
||||
"Due on %s by %s" : "%s tarihine kadar %s tarafından",
|
||||
"Due on %s" : "%s tarihine kadar",
|
||||
"System Address Book" : "Sistem adres defteri",
|
||||
"The system address book contains contact information for all users in your instance." : "Sistem adres defterinde, kopyanızdaki tüm kullanıcıların iletişim bilgileri bulunur.",
|
||||
"Enable System Address Book" : "Sistem adres defteri kullanılsın",
|
||||
"DAV system address book" : "DAV sistem adres defteri",
|
||||
"No outstanding DAV system address book sync." : "Bekleyen bir DAV sistemi adres defteri eşitlemesi yok.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Kopyanızda 1000 üzerinde kullanıcı olduğundan ya da bir sorun çıktığından DAV sistemi adres defteri eşitlemesi henüz yapılmamış. Lütfen \"occ dav:sync-system-addressbook\" komutunu yürüterek el ile eşitleyin.",
|
||||
@@ -307,16 +304,6 @@
|
||||
"Cancel" : "İptal",
|
||||
"Import" : "İçe aktar",
|
||||
"Error while saving settings" : "Ayarlar kaydedilirken sorun çıktı",
|
||||
"Contact reset successfully" : "Kişi sıfırlandı",
|
||||
"Error while resetting contact" : "Kişi sıfırlanırken sorun çıktı",
|
||||
"Contact imported successfully" : "Kişi içe aktarıldı",
|
||||
"Error while importing contact" : "Kişi içe aktarılırken sorun çıktı",
|
||||
"Example Content" : "Örnek içerik",
|
||||
"Set example content to be created on new user first login." : "Yeni kullanıcının ilk oturum açmasında oluşturulacak örnek içeriği ayarlayın.",
|
||||
"Import contact" : "Kişiyi içe aktar",
|
||||
"Reset to default contact" : "Varsayılan kişiye sıfırla",
|
||||
"Import contacts" : "Kişileri içe aktar",
|
||||
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Yeni bir .vcf dosyasını içe aktarmak, var olan varsayılan kişiyi siler ve yenisiyle değiştirir. İlerlemek istiyor musunuz?",
|
||||
"There was an error updating your attendance status." : "Katılım durumunuz güncellenirken bir sorun çıktı.",
|
||||
"Please contact the organizer directly." : "Lütfen düzenleyici ile doğrudan görüşün.",
|
||||
"Are you accepting the invitation?" : "Daveti kabul ediyor musunuz?",
|
||||
|
||||
+1
-12
@@ -72,7 +72,6 @@ OC.L10N.register(
|
||||
"Description: %s" : "Опис: %s",
|
||||
"Where: %s" : "Місце: %s",
|
||||
"%1$s via %2$s" : "%1$s через %2$s",
|
||||
"In the past on %1$s for the entire day" : "Раніше у %1$s протягом цілого дня",
|
||||
"Could not generate when statement" : "Не вдалося створити оператор \"коли\"",
|
||||
"Every Day for the entire day" : "Щодня впродовж усього дня",
|
||||
"Every Day for the entire day until %1$s" : "Щодня впродовж усього дня до %1$s",
|
||||
@@ -109,8 +108,6 @@ OC.L10N.register(
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Що %1$d роки в %2$s, %3$s, між %4$s - %5$s до %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "У визначені дати впродовж усього дня до %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "У визначені дати між %1$s - %2$s до %3$s",
|
||||
"In the past on %1$s" : "Раніше у %1$s",
|
||||
"In the past on %1$s then on %2$s" : "Раніше у %1$s, потім у %2$s",
|
||||
"Could not generate next recurrence statement" : "Не вдалося створити оператор наступного повторення",
|
||||
"Cancelled: %1$s" : "Скасовано: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" скасовано",
|
||||
@@ -157,12 +154,10 @@ OC.L10N.register(
|
||||
"Second" : "Другий",
|
||||
"Third" : "Третій",
|
||||
"Fourth" : "Четвертий",
|
||||
"Fifth" : "П'ятий",
|
||||
"Last" : "Останній",
|
||||
"Second Last" : "Другий(-а) останній(-я)",
|
||||
"Third Last" : "Третій(-я) останній(-я)",
|
||||
"Fourth Last" : "Четвертий(-а) останній(-я)",
|
||||
"Fifth Last" : "Останній п'ятий",
|
||||
"Contacts" : "Контакти",
|
||||
"{actor} created address book {addressbook}" : "{actor} створив(-ла) адресну книгу {addressbook}",
|
||||
"You created address book {addressbook}" : "Ви створили адресну книгу {addressbook}",
|
||||
@@ -218,9 +213,6 @@ OC.L10N.register(
|
||||
"Completed on %s" : "Завершено %s",
|
||||
"Due on %s by %s" : "До %s з боку %s",
|
||||
"Due on %s" : "До %s",
|
||||
"System Address Book" : "Системна адресна книга",
|
||||
"The system address book contains contact information for all users in your instance." : "Системна адресна книга містить контактну інформацію для всіх користувачів вашого примірника хмари.",
|
||||
"Enable System Address Book" : "Увімкнути системну адресну книгу",
|
||||
"DAV system address book" : "Системна адресна книга DAV",
|
||||
"No outstanding DAV system address book sync." : "Немає незавершеної синхронізації системної адресної книги DAV.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронізація системної адресної книги DAV ще не запускалася, оскільки, або ваша система вже має понад 1000 користувачів, або сталася помилка. Будь ласка, запустіть синхронізацію вручну за допомогою команди \"occ dav:sync-system-addressbook\".",
|
||||
@@ -239,7 +231,7 @@ OC.L10N.register(
|
||||
"First day" : "Перший день",
|
||||
"Last day (inclusive)" : "Останній день (включно)",
|
||||
"Out of office replacement (optional)" : "Заміна під час відсутності (необов'язково)",
|
||||
"Name of the replacement" : "Ім'я заступника",
|
||||
"Name of the replacement" : "Ім'я того, хто вас замінятиме",
|
||||
"No results." : "Відсутні результати.",
|
||||
"Start typing." : "Почніть вводити.",
|
||||
"Short absence status" : "Короткий статус відсутности",
|
||||
@@ -277,9 +269,6 @@ OC.L10N.register(
|
||||
"Cancel" : "Скасувати",
|
||||
"Import" : "Імпорт",
|
||||
"Error while saving settings" : "Помилка під час збереження налаштувань",
|
||||
"Import contact" : "Імпортувати контакт",
|
||||
"Reset to default contact" : "Скинути то типового контакту",
|
||||
"Import contacts" : "Імпортувати контакти",
|
||||
"There was an error updating your attendance status." : "Виникла помилка при оновленні вашого статусу учасника.",
|
||||
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
|
||||
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
|
||||
|
||||
+1
-12
@@ -70,7 +70,6 @@
|
||||
"Description: %s" : "Опис: %s",
|
||||
"Where: %s" : "Місце: %s",
|
||||
"%1$s via %2$s" : "%1$s через %2$s",
|
||||
"In the past on %1$s for the entire day" : "Раніше у %1$s протягом цілого дня",
|
||||
"Could not generate when statement" : "Не вдалося створити оператор \"коли\"",
|
||||
"Every Day for the entire day" : "Щодня впродовж усього дня",
|
||||
"Every Day for the entire day until %1$s" : "Щодня впродовж усього дня до %1$s",
|
||||
@@ -107,8 +106,6 @@
|
||||
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Що %1$d роки в %2$s, %3$s, між %4$s - %5$s до %6$s",
|
||||
"On specific dates for the entire day until %1$s" : "У визначені дати впродовж усього дня до %1$s",
|
||||
"On specific dates between %1$s - %2$s until %3$s" : "У визначені дати між %1$s - %2$s до %3$s",
|
||||
"In the past on %1$s" : "Раніше у %1$s",
|
||||
"In the past on %1$s then on %2$s" : "Раніше у %1$s, потім у %2$s",
|
||||
"Could not generate next recurrence statement" : "Не вдалося створити оператор наступного повторення",
|
||||
"Cancelled: %1$s" : "Скасовано: %1$s",
|
||||
"\"%1$s\" has been canceled" : "\"%1$s\" скасовано",
|
||||
@@ -155,12 +152,10 @@
|
||||
"Second" : "Другий",
|
||||
"Third" : "Третій",
|
||||
"Fourth" : "Четвертий",
|
||||
"Fifth" : "П'ятий",
|
||||
"Last" : "Останній",
|
||||
"Second Last" : "Другий(-а) останній(-я)",
|
||||
"Third Last" : "Третій(-я) останній(-я)",
|
||||
"Fourth Last" : "Четвертий(-а) останній(-я)",
|
||||
"Fifth Last" : "Останній п'ятий",
|
||||
"Contacts" : "Контакти",
|
||||
"{actor} created address book {addressbook}" : "{actor} створив(-ла) адресну книгу {addressbook}",
|
||||
"You created address book {addressbook}" : "Ви створили адресну книгу {addressbook}",
|
||||
@@ -216,9 +211,6 @@
|
||||
"Completed on %s" : "Завершено %s",
|
||||
"Due on %s by %s" : "До %s з боку %s",
|
||||
"Due on %s" : "До %s",
|
||||
"System Address Book" : "Системна адресна книга",
|
||||
"The system address book contains contact information for all users in your instance." : "Системна адресна книга містить контактну інформацію для всіх користувачів вашого примірника хмари.",
|
||||
"Enable System Address Book" : "Увімкнути системну адресну книгу",
|
||||
"DAV system address book" : "Системна адресна книга DAV",
|
||||
"No outstanding DAV system address book sync." : "Немає незавершеної синхронізації системної адресної книги DAV.",
|
||||
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "Синхронізація системної адресної книги DAV ще не запускалася, оскільки, або ваша система вже має понад 1000 користувачів, або сталася помилка. Будь ласка, запустіть синхронізацію вручну за допомогою команди \"occ dav:sync-system-addressbook\".",
|
||||
@@ -237,7 +229,7 @@
|
||||
"First day" : "Перший день",
|
||||
"Last day (inclusive)" : "Останній день (включно)",
|
||||
"Out of office replacement (optional)" : "Заміна під час відсутності (необов'язково)",
|
||||
"Name of the replacement" : "Ім'я заступника",
|
||||
"Name of the replacement" : "Ім'я того, хто вас замінятиме",
|
||||
"No results." : "Відсутні результати.",
|
||||
"Start typing." : "Почніть вводити.",
|
||||
"Short absence status" : "Короткий статус відсутности",
|
||||
@@ -275,9 +267,6 @@
|
||||
"Cancel" : "Скасувати",
|
||||
"Import" : "Імпорт",
|
||||
"Error while saving settings" : "Помилка під час збереження налаштувань",
|
||||
"Import contact" : "Імпортувати контакт",
|
||||
"Reset to default contact" : "Скинути то типового контакту",
|
||||
"Import contacts" : "Імпортувати контакти",
|
||||
"There was an error updating your attendance status." : "Виникла помилка при оновленні вашого статусу учасника.",
|
||||
"Please contact the organizer directly." : "Будь-ласка повідомте організатора.",
|
||||
"Are you accepting the invitation?" : "Чи приймаєте ви запрошення?",
|
||||
|
||||
@@ -289,7 +289,7 @@ OC.L10N.register(
|
||||
"Weekdays" : "工作日",
|
||||
"Pick a start time for {dayName}" : "选择 {dayName} 的开始时间",
|
||||
"Pick a end time for {dayName}" : "选择 {dayName} 的结束时间",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“勿扰”并静音所有通知。",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“请勿打扰”并静音所有通知。",
|
||||
"Availability" : "工作时间",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "如果你配置了工作时间,其他人在预订会议时会看到你何时不在办公室。",
|
||||
"Absence" : "离开",
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
"Weekdays" : "工作日",
|
||||
"Pick a start time for {dayName}" : "选择 {dayName} 的开始时间",
|
||||
"Pick a end time for {dayName}" : "选择 {dayName} 的结束时间",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“勿扰”并静音所有通知。",
|
||||
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "不在工作时间内时,自动将用户状态设置为“请勿打扰”并静音所有通知。",
|
||||
"Availability" : "工作时间",
|
||||
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "如果你配置了工作时间,其他人在预订会议时会看到你何时不在办公室。",
|
||||
"Absence" : "离开",
|
||||
|
||||
@@ -9,6 +9,7 @@ declare(strict_types=1);
|
||||
*/
|
||||
namespace OCA\DAV\AppInfo;
|
||||
|
||||
use OCA\DAV\CalDAV\Activity\Backend;
|
||||
use OCA\DAV\CalDAV\AppCalendar\AppCalendarPlugin;
|
||||
use OCA\DAV\CalDAV\CachedSubscriptionProvider;
|
||||
use OCA\DAV\CalDAV\CalendarManager;
|
||||
@@ -81,6 +82,7 @@ use OCP\Config\BeforePreferenceDeletedEvent;
|
||||
use OCP\Config\BeforePreferenceSetEvent;
|
||||
use OCP\Contacts\IManager as IContactsManager;
|
||||
use OCP\DB\Events\AddMissingIndicesEvent;
|
||||
use OCP\EventDispatcher\IEventDispatcher;
|
||||
use OCP\Federation\Events\TrustedServerRemovedEvent;
|
||||
use OCP\Files\AppData\IAppDataFactory;
|
||||
use OCP\IUserSession;
|
||||
@@ -203,7 +205,6 @@ class Application extends App implements IBootstrap {
|
||||
$context->registerEventListener(UserDeletedEvent::class, UserEventsListener::class);
|
||||
$context->registerEventListener(UserCreatedEvent::class, UserEventsListener::class);
|
||||
$context->registerEventListener(UserChangedEvent::class, UserEventsListener::class);
|
||||
$context->registerEventListener(UserUpdatedEvent::class, UserEventsListener::class);
|
||||
|
||||
$context->registerNotifierService(Notifier::class);
|
||||
|
||||
@@ -227,9 +228,35 @@ class Application extends App implements IBootstrap {
|
||||
// Load all dav apps
|
||||
\OC_App::loadApps(['dav']);
|
||||
|
||||
$context->injectFn($this->registerContactsManager(...));
|
||||
$context->injectFn($this->registerCalendarManager(...));
|
||||
$context->injectFn($this->registerCalendarReminders(...));
|
||||
$context->injectFn([$this, 'registerHooks']);
|
||||
$context->injectFn([$this, 'registerContactsManager']);
|
||||
$context->injectFn([$this, 'registerCalendarManager']);
|
||||
$context->injectFn([$this, 'registerCalendarReminders']);
|
||||
}
|
||||
|
||||
public function registerHooks(
|
||||
IEventDispatcher $dispatcher,
|
||||
IAppContainer $container,
|
||||
): void {
|
||||
$dispatcher->addListener(UserUpdatedEvent::class, function (UserUpdatedEvent $event) use ($container): void {
|
||||
/** @var SyncService $syncService */
|
||||
$syncService = Server::get(SyncService::class);
|
||||
$syncService->updateUser($event->getUser());
|
||||
});
|
||||
|
||||
|
||||
$dispatcher->addListener(CalendarShareUpdatedEvent::class, function (CalendarShareUpdatedEvent $event) use ($container): void {
|
||||
/** @var Backend $backend */
|
||||
$backend = $container->query(Backend::class);
|
||||
$backend->onCalendarUpdateShares(
|
||||
$event->getCalendarData(),
|
||||
$event->getOldShares(),
|
||||
$event->getAdded(),
|
||||
$event->getRemoved()
|
||||
);
|
||||
|
||||
// Here we should recalculate if reminders should be sent to new or old sharees
|
||||
});
|
||||
}
|
||||
|
||||
public function registerContactsManager(IContactsManager $cm, IAppContainer $container): void {
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
namespace OCA\DAV\BackgroundJob;
|
||||
|
||||
use OCA\DAV\CalDAV\CalDavBackend;
|
||||
use OCP\AppFramework\Utility\ITimeFactory;
|
||||
use OCP\BackgroundJob\IJobList;
|
||||
use OCP\BackgroundJob\QueuedJob;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
use OCP\IDBConnection;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class CleanupOrphanedChildrenJob extends QueuedJob {
|
||||
public const ARGUMENT_CHILD_TABLE = 'childTable';
|
||||
public const ARGUMENT_PARENT_TABLE = 'parentTable';
|
||||
public const ARGUMENT_PARENT_ID = 'parentId';
|
||||
public const ARGUMENT_LOG_MESSAGE = 'logMessage';
|
||||
|
||||
private const BATCH_SIZE = 1000;
|
||||
|
||||
public function __construct(
|
||||
ITimeFactory $time,
|
||||
private readonly IDBConnection $connection,
|
||||
private readonly LoggerInterface $logger,
|
||||
private readonly IJobList $jobList,
|
||||
) {
|
||||
parent::__construct($time);
|
||||
}
|
||||
|
||||
protected function run($argument): void {
|
||||
$childTable = $argument[self::ARGUMENT_CHILD_TABLE];
|
||||
$parentTable = $argument[self::ARGUMENT_PARENT_TABLE];
|
||||
$parentId = $argument[self::ARGUMENT_PARENT_ID];
|
||||
$logMessage = $argument[self::ARGUMENT_LOG_MESSAGE];
|
||||
|
||||
$orphanCount = $this->cleanUpOrphans($childTable, $parentTable, $parentId);
|
||||
$this->logger->debug(sprintf($logMessage, $orphanCount));
|
||||
|
||||
// Requeue if there might be more orphans
|
||||
if ($orphanCount >= self::BATCH_SIZE) {
|
||||
$this->jobList->add(self::class, $argument);
|
||||
}
|
||||
}
|
||||
|
||||
private function cleanUpOrphans(
|
||||
string $childTable,
|
||||
string $parentTable,
|
||||
string $parentId,
|
||||
): int {
|
||||
// We can't merge both queries into a single one here as DELETEing from a table while
|
||||
// SELECTing it in a sub query is not supported by Oracle DB.
|
||||
// Ref https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/delete.html#idm46006185488144
|
||||
|
||||
$selectQb = $this->connection->getQueryBuilder();
|
||||
|
||||
$selectQb->select('c.id')
|
||||
->from($childTable, 'c')
|
||||
->leftJoin('c', $parentTable, 'p', $selectQb->expr()->eq('c.' . $parentId, 'p.id'))
|
||||
->where($selectQb->expr()->isNull('p.id'))
|
||||
->setMaxResults(self::BATCH_SIZE);
|
||||
|
||||
if (\in_array($parentTable, ['calendars', 'calendarsubscriptions'], true)) {
|
||||
$calendarType = $parentTable === 'calendarsubscriptions' ? CalDavBackend::CALENDAR_TYPE_SUBSCRIPTION : CalDavBackend::CALENDAR_TYPE_CALENDAR;
|
||||
$selectQb->andWhere($selectQb->expr()->eq('c.calendartype', $selectQb->createNamedParameter($calendarType, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT));
|
||||
}
|
||||
|
||||
$result = $selectQb->executeQuery();
|
||||
$rows = $result->fetchAll();
|
||||
$result->closeCursor();
|
||||
if (empty($rows)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
$orphanItems = array_map(static fn ($row) => $row['id'], $rows);
|
||||
$deleteQb = $this->connection->getQueryBuilder();
|
||||
$deleteQb->delete($childTable)
|
||||
->where($deleteQb->expr()->in('id', $deleteQb->createNamedParameter($orphanItems, IQueryBuilder::PARAM_INT_ARRAY)));
|
||||
$deleteQb->executeStatement();
|
||||
|
||||
return count($orphanItems);
|
||||
}
|
||||
}
|
||||
@@ -134,10 +134,7 @@ class MultipartRequestParser {
|
||||
|
||||
$headers = $this->readPartHeaders();
|
||||
|
||||
$length = (int)$headers['content-length'];
|
||||
|
||||
$this->validateHash($length, $headers['x-file-md5'] ?? '', $headers['oc-checksum'] ?? '');
|
||||
$content = $this->readPartContent($length);
|
||||
$content = $this->readPartContent((int)$headers['content-length'], $headers['x-file-md5']);
|
||||
|
||||
return [$headers, $content];
|
||||
}
|
||||
@@ -187,9 +184,8 @@ class MultipartRequestParser {
|
||||
throw new LengthRequired('The Content-Length header must not be null.');
|
||||
}
|
||||
|
||||
// TODO: Drop $md5 condition when the latest desktop client that uses it is no longer supported.
|
||||
if (!isset($headers['x-file-md5']) && !isset($headers['oc-checksum'])) {
|
||||
throw new BadRequest('The hash headers must not be null.');
|
||||
if (!isset($headers['x-file-md5'])) {
|
||||
throw new BadRequest('The X-File-MD5 header must not be null.');
|
||||
}
|
||||
|
||||
return $headers;
|
||||
@@ -201,7 +197,13 @@ class MultipartRequestParser {
|
||||
* @throws Exception
|
||||
* @throws BadRequest
|
||||
*/
|
||||
private function readPartContent(int $length): string {
|
||||
private function readPartContent(int $length, string $md5): string {
|
||||
$computedMd5 = $this->computeMd5Hash($length);
|
||||
|
||||
if ($md5 !== $computedMd5) {
|
||||
throw new BadRequest('Computed md5 hash is incorrect.');
|
||||
}
|
||||
|
||||
if ($length === 0) {
|
||||
$content = '';
|
||||
} else {
|
||||
@@ -223,25 +225,12 @@ class MultipartRequestParser {
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the MD5 or checksum hash of the next x bytes.
|
||||
* TODO: Drop $md5 argument when the latest desktop client that uses it is no longer supported.
|
||||
* Compute the MD5 hash of the next x bytes.
|
||||
*/
|
||||
private function validateHash(int $length, string $fileMd5Header, string $checksumHeader): void {
|
||||
if ($checksumHeader !== '') {
|
||||
[$algorithm, $hash] = explode(':', $checksumHeader, 2);
|
||||
} elseif ($fileMd5Header !== '') {
|
||||
$algorithm = 'md5';
|
||||
$hash = $fileMd5Header;
|
||||
} else {
|
||||
throw new BadRequest('No hash provided.');
|
||||
}
|
||||
|
||||
$context = hash_init($algorithm);
|
||||
private function computeMd5Hash(int $length): string {
|
||||
$context = hash_init('md5');
|
||||
hash_update_stream($context, $this->stream, $length);
|
||||
fseek($this->stream, -$length, SEEK_CUR);
|
||||
$computedHash = hash_final($context);
|
||||
if ($hash !== $computedHash) {
|
||||
throw new BadRequest("Computed $algorithm hash is incorrect ($computedHash).");
|
||||
}
|
||||
return hash_final($context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,12 +9,11 @@ declare(strict_types=1);
|
||||
namespace OCA\DAV\CalDAV;
|
||||
|
||||
use OCP\Calendar\ICalendar;
|
||||
use OCP\Calendar\ICalendarIsEnabled;
|
||||
use OCP\Calendar\ICalendarIsShared;
|
||||
use OCP\Calendar\ICalendarIsWritable;
|
||||
use OCP\Constants;
|
||||
|
||||
class CachedSubscriptionImpl implements ICalendar, ICalendarIsEnabled, ICalendarIsShared, ICalendarIsWritable {
|
||||
class CachedSubscriptionImpl implements ICalendar, ICalendarIsShared, ICalendarIsWritable {
|
||||
|
||||
public function __construct(
|
||||
private CachedSubscription $calendar,
|
||||
@@ -87,13 +86,6 @@ class CachedSubscriptionImpl implements ICalendar, ICalendarIsEnabled, ICalendar
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 32.0.0
|
||||
*/
|
||||
public function isEnabled(): bool {
|
||||
return $this->calendarInfo['{http://owncloud.org/ns}calendar-enabled'] ?? true;
|
||||
}
|
||||
|
||||
public function isWritable(): bool {
|
||||
return false;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user