Compare commits
213 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d46271b65f | |||
| ead3f66379 | |||
| bdcfe5b8a9 | |||
| b8ab7b7e55 | |||
| f35e33f2d8 | |||
| 21b997f845 | |||
| 2665151105 | |||
| 290610b630 | |||
| 3ffdf56c8f | |||
| 744b41b216 | |||
| f7b7474cd3 | |||
| 4fcf4dba02 | |||
| 6d31abdfd5 | |||
| 30d090fb78 | |||
| e0b81410f4 | |||
| a5e58dc45e | |||
| c0b39bb909 | |||
| e840ec23f1 | |||
| b1eecde452 | |||
| c6ec82203e | |||
| cc72f738ed | |||
| 6d2253e692 | |||
| f23875dcb1 | |||
| 2b270f54ee | |||
| 0eeb459cc3 | |||
| e2b1de8bc1 | |||
| 36f272d03b | |||
| c42412f3d2 | |||
| 23bbb31445 | |||
| cead56ac6a | |||
| 47168ad5bd | |||
| e88693a473 | |||
| 9067932f3b | |||
| ffc8a86d7d | |||
| 5d632154c2 | |||
| dd165cf53a | |||
| 8622edb4b3 | |||
| af6de04e9e | |||
| 82183693e9 | |||
| 1cc6b3577f | |||
| c18cd4df66 | |||
| 6c4b56b0f3 | |||
| 3656a24e21 | |||
| 31319be951 | |||
| e97421f12a | |||
| e5e795c935 | |||
| b260dd0a9d | |||
| 4a3ade5d43 | |||
| 3e7695235c | |||
| 44aa4836aa | |||
| 7363c4a403 | |||
| 8b60df1600 | |||
| bd740ac0b0 | |||
| 2f9f9e83e8 | |||
| 658d2f7ea1 | |||
| 0cab17bfe7 | |||
| 3d1785bb2f | |||
| 5b412b505b | |||
| fc1edaf4c1 | |||
| 3b185b1156 | |||
| 4062883459 | |||
| 920a74118c | |||
| d78bfb7181 | |||
| 6c934b831e | |||
| 4b6490eaa6 | |||
| d7da93489b | |||
| ae787c5ef2 | |||
| e2c299f28c | |||
| dd58e5290f | |||
| 127cacdd19 | |||
| 351dd6dd8a | |||
| f4f0316a55 | |||
| 5940c96414 | |||
| a6556e9b46 | |||
| 1b39abb501 | |||
| 3c3667fe18 | |||
| 4eebf471e5 | |||
| 5e2e2ba7ad | |||
| d3a0e8308b | |||
| c0781f524f | |||
| 5a7e21187b | |||
| b6bc28833c | |||
| 49fa2e508d | |||
| 639caf6150 | |||
| 3ff7d64fda | |||
| 0df3a46db2 | |||
| 9641433001 | |||
| b33260a22c | |||
| 003bf4b8ee | |||
| 82c6b92d41 | |||
| 5ead5fc6c5 | |||
| e53684e1d9 | |||
| b36ced878f | |||
| a01797d2f2 | |||
| b87c1ebfcc | |||
| c3ad469750 | |||
| 6214e3ad76 | |||
| ebe2429c0a | |||
| 974cda636f | |||
| 1992a6d72b | |||
| 7290d9d7ca | |||
| f309ba9dc9 | |||
| e1caa198e3 | |||
| d5140fe034 | |||
| c82b17d0a3 | |||
| ec00367f30 | |||
| 2d0f65851e | |||
| 1331ce7e7c | |||
| c07cf51beb | |||
| 7fe62b9364 | |||
| ff10f9f60f | |||
| dbbe2bbcb7 | |||
| cf56874cb1 | |||
| c9ef3f72bc | |||
| 91573781df | |||
| b9cc7bcec7 | |||
| d6cfcd7825 | |||
| dc153f2ada | |||
| 1907eeea35 | |||
| 748e267b44 | |||
| a3cd963264 | |||
| e817bc6d3c | |||
| bc4527a80d | |||
| 4f70998e35 | |||
| 05c9b06cdd | |||
| 20dbb6c7e8 | |||
| cd0217b2bd | |||
| da38ff0088 | |||
| 307608b26c | |||
| 0e3ca084c4 | |||
| acca93e793 | |||
| 3756152cb1 | |||
| 1071201052 | |||
| 560282a47b | |||
| 5bbc23a261 | |||
| 3a6716895a | |||
| 2b7d9c1c9d | |||
| 3b795cde79 | |||
| ecca9e1ad6 | |||
| cf59575120 | |||
| ba9638eae5 | |||
| 40c91aa31e | |||
| 551ff4955e | |||
| 6fce6fa1d6 | |||
| 652c1f7b65 | |||
| 6286d3236c | |||
| 2c47285d6d | |||
| 0d9d68eea1 | |||
| e06931854a | |||
| a7658f3ec8 | |||
| 2af0eb765f | |||
| 2ec68b1eb9 | |||
| 87e28b0bb7 | |||
| d6d173f74e | |||
| 81b4ced076 | |||
| fa11a67e88 | |||
| 132220a89f | |||
| ad8200d963 | |||
| 2dfd51cc03 | |||
| b52ab4388b | |||
| 09428d15a3 | |||
| c0110409fc | |||
| dcdb4bbf8a | |||
| 8d4968168f | |||
| 8638f3b587 | |||
| c8e09d158b | |||
| 62f9c26111 | |||
| 6fda0c15f0 | |||
| d63148ee8d | |||
| b1230cd53d | |||
| a92171260f | |||
| 13a72d0f0e | |||
| 74b8de5665 | |||
| d94073de92 | |||
| b8b81254f3 | |||
| b8dbed3e32 | |||
| 8032b6ac63 | |||
| 67c52d202c | |||
| f490a4e8c0 | |||
| d35c4eb911 | |||
| 84ee79fe43 | |||
| cc44ec54ad | |||
| 75180a6292 | |||
| a41e2f01b7 | |||
| 6b795da540 | |||
| fc8b886295 | |||
| f4f7c757d4 | |||
| 3dfe306724 | |||
| 0f9ea1992c | |||
| 15550de8ce | |||
| 28e6328d65 | |||
| 50c48aa538 | |||
| 601b3b16cb | |||
| 9189bc290b | |||
| 774427a03a | |||
| e218d1f98e | |||
| d025c55193 | |||
| d0a0be9959 | |||
| 2c24c3c469 | |||
| b582630715 | |||
| fb90e7e2cf | |||
| 0f10cabf2a | |||
| 44705abacb | |||
| 21c30e5259 | |||
| a7eb156130 | |||
| effbc44756 | |||
| 9d446d566b | |||
| 71bfa5b574 | |||
| eb365438d6 | |||
| 7b53a85bb6 | |||
| 04944aaa23 | |||
| 31b74bc671 | |||
| e7cbaf3ee3 |
@@ -2,3 +2,7 @@
|
||||
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
# Update to coding-standard 1.2.3
|
||||
af6de04e9e141466dc229e444ff3f146f4a34765
|
||||
0bd284cb81b6866338aaaa67aa1d81ef9bfbb2ab
|
||||
|
||||
+9
-17
@@ -2,18 +2,14 @@
|
||||
/apps/admin_audit/appinfo/info.xml @luka-nextcloud @blizzz
|
||||
/apps/cloud_federation_api/appinfo/info.xml @mejo-
|
||||
/apps/comments/appinfo/info.xml @edward-ly @Pytal
|
||||
/apps/contactsinteraction/appinfo/info.xml @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/lib @kesselb @SebastianKrupinski
|
||||
/apps/contactsinteraction/tests @kesselb @SebastianKrupinski
|
||||
/apps/dashboard/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/dav/lib/CalDAV @miaulalala @st3iny @SebastianKrupinski
|
||||
/apps/dav/lib/CardDAV @miaulalala @st3iny @SebastianKrupinski
|
||||
/apps/dav/tests/unit/CalDAV @miaulalala @st3iny @SebastianKrupinski
|
||||
/apps/dav/tests/unit/CardDAV @miaulalala @st3iny @SebastianKrupinski
|
||||
/apps/contactsinteraction/appinfo/info.xml @kesselb @miaulalala @ChristophWurst @GretaD @hamza221 @st3iny
|
||||
/apps/dashboard/appinfo/info.xml @julien-nc @juliushaertl
|
||||
/apps/dav/lib/CalDAV @ChristophWurst @miaulalala @tcitworld
|
||||
/apps/dav/lib/CardDAV @ChristophWurst @miaulalala @tcitworld
|
||||
/apps/encryption/appinfo/info.xml @come-nc @icewind1991
|
||||
/apps/federatedfilesharing/appinfo/info.xml @icewind1991 @danxuliu
|
||||
/apps/federation/appinfo/info.xml @nfebe
|
||||
/apps/files/appinfo/info.xml @skjnldsv @Pytal @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @nfebe
|
||||
/apps/federation/appinfo/info.xml @datenangebot
|
||||
/apps/files/appinfo/info.xml @skjnldsv @Pytal @ArtificialOwl @come-nc @artonge @icewind1991 @szaimen @susnux @Fenn-CS
|
||||
/apps/files_external/appinfo/info.xml @icewind1991 @artonge
|
||||
/apps/files_reminders/appinfo/info.xml @Pytal
|
||||
/apps/files_sharing/appinfo/info.xml @skjnldsv @come-nc
|
||||
@@ -24,14 +20,14 @@
|
||||
/apps/settings/appinfo/info.xml @Pytal @JuliaKirschenheuter
|
||||
/apps/sharebymail/appinfo/info.xml @Altahrim
|
||||
/apps/systemtags/appinfo/info.xml @Antreesy @marcelklehr
|
||||
/apps/theming/appinfo/info.xml @skjnldsv @juliusknorr
|
||||
/apps/theming/appinfo/info.xml @skjnldsv @juliushaertl
|
||||
/apps/twofactor_backupcodes/appinfo/info.xml @st3iny @miaulalala @ChristophWurst
|
||||
/apps/updatenotification/appinfo/info.xml @Pytal @JuliaKirschenheuter
|
||||
/apps/user_ldap/appinfo/info.xml @come-nc @blizzz
|
||||
/apps/user_status/appinfo/info.xml @Antreesy @nickvergessen
|
||||
/apps/weather_status/appinfo/info.xml @julien-nc @juliusknorr
|
||||
/apps/weather_status/appinfo/info.xml @julien-nc @juliushaertl
|
||||
/apps/webhook_listeners/appinfo/info.xml @come-nc @julien-nc
|
||||
/apps/workflowengine/appinfo/info.xml @blizzz @juliusknorr
|
||||
/apps/workflowengine/appinfo/info.xml @blizzz @juliushaertl
|
||||
|
||||
# Frontend expertise
|
||||
/apps/files/src* @skjnldsv
|
||||
@@ -69,10 +65,6 @@ ResponseDefinitions.php @provokateurin
|
||||
/lib/public/Talk @nickvergessen
|
||||
/lib/public/UserStatus @nickvergessen
|
||||
|
||||
# Groupware
|
||||
/build/integration/dav_features/caldav.feature @miaulalala @st3iny @SebastianKrupinski
|
||||
/build/integration/dav_features/carddav.feature @miaulalala @st3iny @SebastianKrupinski
|
||||
|
||||
# Personal interest
|
||||
*/Activity/* @nickvergessen
|
||||
*/Notifications/* @nickvergessen
|
||||
|
||||
+37
-14
@@ -59,20 +59,6 @@ updates:
|
||||
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: "/"
|
||||
@@ -152,6 +138,25 @@ updates:
|
||||
# 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
|
||||
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: composer
|
||||
directory: "/build/integration"
|
||||
schedule:
|
||||
@@ -188,6 +193,24 @@ 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"]
|
||||
|
||||
# GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
php-versions: ['8.3']
|
||||
|
||||
name: PHP checkers
|
||||
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
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
|
||||
extensions: ctype, json, mbstring
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
|
||||
@@ -29,6 +29,8 @@ jobs:
|
||||
npmVersion: ${{ steps.versions.outputs.npmVersion }}
|
||||
|
||||
env:
|
||||
# We'll install cypress in the cypress job
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
|
||||
steps:
|
||||
@@ -115,9 +117,14 @@ jobs:
|
||||
- name: Set up npm ${{ needs.init.outputs.npmVersion }}
|
||||
run: npm i -g 'npm@${{ needs.init.outputs.npmVersion }}'
|
||||
|
||||
- name: Install cypress
|
||||
run: ./node_modules/cypress/bin/cypress install
|
||||
|
||||
- name: Run ${{ matrix.containers == 'component' && 'component' || 'E2E' }} cypress tests
|
||||
uses: cypress-io/github-action@df7484c5ba85def7eef30db301afa688187bc378 # v6.7.2
|
||||
with:
|
||||
# We already installed the dependencies in the init job
|
||||
install: false
|
||||
component: ${{ matrix.containers == 'component' }}
|
||||
group: ${{ matrix.use-cypress-cloud && matrix.containers == 'component' && 'Run component' || matrix.use-cypress-cloud && 'Run E2E' || '' }}
|
||||
# cypress env
|
||||
|
||||
@@ -72,7 +72,7 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
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
|
||||
extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -68,7 +68,7 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
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
|
||||
extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, smbclient, sqlite, pdo_sqlite
|
||||
extensions: ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, smbclient, sqlite, pdo_sqlite
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
ini-file: development
|
||||
env:
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
# do not stop on another job's failure
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
php-versions: ['8.3']
|
||||
endpoint: ['old', 'new']
|
||||
service: ['CalDAV', 'CardDAV']
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ jobs:
|
||||
# do not stop on another job's failure
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
php-versions: ['8.3']
|
||||
endpoint: ['webdav', 'dav']
|
||||
|
||||
name: Litmus WebDAV ${{ matrix.endpoint }}
|
||||
|
||||
@@ -41,7 +41,6 @@ jobs:
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- 'core/shipped.json'
|
||||
|
||||
integration-sqlite:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -70,8 +69,8 @@ jobs:
|
||||
- 'sharing_features'
|
||||
- 'videoverification_features'
|
||||
|
||||
php-versions: ['8.1']
|
||||
spreed-versions: ['stable30']
|
||||
php-versions: ['8.2']
|
||||
spreed-versions: ['main']
|
||||
|
||||
services:
|
||||
redis:
|
||||
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['main', 'master', 'stable29', 'stable28', 'stable27']
|
||||
branches: ['main', 'master', 'stable30', 'stable29', 'stable28']
|
||||
|
||||
name: npm-audit-fix-${{ matrix.branches }}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1', '8.2']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: true
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1', '8.2']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: true
|
||||
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1', '8.2']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.3'
|
||||
coverage: true
|
||||
|
||||
@@ -31,7 +31,7 @@ jobs:
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
with:
|
||||
php-version: '8.1'
|
||||
php-version: '8.2'
|
||||
extensions: ctype, curl, dom, fileinfo, gd, json, libxml, mbstring, openssl, pcntl, pdo, posix, session, simplexml, xml, xmlreader, xmlwriter, zip, zlib
|
||||
coverage: none
|
||||
ini-file: development
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
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
|
||||
extensions: mbstring, fileinfo, intl, sqlite, pdo_sqlite, zip, gd
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
output: before.json
|
||||
profiler-branch: stable30
|
||||
profiler-branch: master
|
||||
|
||||
- name: Apply PR
|
||||
run: |
|
||||
@@ -86,7 +86,7 @@ jobs:
|
||||
curl -s -u test:test -T README.md http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
curl -s -u test:test -X DELETE http://localhost:8080/remote.php/dav/files/test/new_file.txt
|
||||
output: after.json
|
||||
profiler-branch: stable30
|
||||
profiler-branch: master
|
||||
compare-with: before.json
|
||||
|
||||
- name: Upload profiles
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1', '8.3']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -1,184 +0,0 @@
|
||||
# This workflow is provided via the organization template repository
|
||||
#
|
||||
# https://github.com/nextcloud/.github
|
||||
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
name: PHPUnit sharding
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-mysql-sharding-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src }}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- '3rdparty/**'
|
||||
- '**/appinfo/**'
|
||||
- '**/lib/**'
|
||||
- '**/templates/**'
|
||||
- '**/tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
- '**.php'
|
||||
|
||||
phpunit-mysql:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1']
|
||||
mysql-versions: ['8.4']
|
||||
|
||||
name: Sharding - MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
||||
|
||||
services:
|
||||
cache:
|
||||
image: ghcr.io/nextcloud/continuous-integration-redis:latest
|
||||
ports:
|
||||
- 6379:6379/tcp
|
||||
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
||||
|
||||
mysql:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 4444: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
|
||||
shard1:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 5001:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard2:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 5002:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard3:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 5003:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
shard4:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 5004:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_USER: oc_autotest
|
||||
MYSQL_PASSWORD: nextcloud
|
||||
MYSQL_DATABASE: nextcloud
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
|
||||
steps:
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b #v2.31.0
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
|
||||
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Enable ONLY_FULL_GROUP_BY MySQL option
|
||||
run: |
|
||||
echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
||||
echo "SELECT @@sql_mode;" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
DB_PORT: 4444
|
||||
SHARDING: 1
|
||||
run: |
|
||||
mkdir data
|
||||
cp tests/redis.config.php config/
|
||||
cp tests/preseed-config.php config/config.php
|
||||
./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
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 ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}
|
||||
|
||||
- name: Upload db code coverage
|
||||
if: ${{ !cancelled() && matrix.coverage }}
|
||||
uses: codecov/codecov-action@v4.1.1
|
||||
with:
|
||||
files: ./clover.db.xml
|
||||
flags: phpunit-mysql
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-mysql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-mysql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.1', '8.3']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.2'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -55,7 +55,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.2', '8.3']
|
||||
php-versions: ['8.1', '8.2', '8.3']
|
||||
include:
|
||||
- php-versions: '8.1'
|
||||
coverage: ${{ github.event_name != 'pull_request' }}
|
||||
|
||||
@@ -25,7 +25,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
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
|
||||
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
run: git diff -- . ':!lib/composer'
|
||||
|
||||
- name: Upload Analysis results to GitHub
|
||||
if: always()
|
||||
@@ -59,14 +59,14 @@ jobs:
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype,curl,dom,fileinfo,ftp,gd,imagick,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
extensions: ctype,curl,dom,fileinfo,ftp,gd,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
|
||||
- name: Composer install
|
||||
run: composer i
|
||||
|
||||
- name: Psalm taint analysis
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=github --report=results.sarif --taint-analysis --ignore-baseline
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=github --report=results.sarif --taint-analysis
|
||||
|
||||
- name: Upload Security Analysis results to GitHub
|
||||
if: always()
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: ctype,curl,dom,fileinfo,gd,imagick,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -100,4 +100,4 @@ jobs:
|
||||
|
||||
- name: Show potential changes in Psalm baseline
|
||||
if: always()
|
||||
run: git diff --exit-code -- . ':!lib/composer'
|
||||
run: git diff -- . ':!lib/composer'
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
branches: ['master', 'stable30', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
|
||||
name: update-ca-certificate-bundle-${{ matrix.branches }}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
branches: ['master', 'stable30', 'stable29', 'stable28', 'stable27', 'stable26', 'stable25', 'stable24', 'stable23', 'stable22']
|
||||
|
||||
name: update-code-signing-crl-${{ matrix.branches }}
|
||||
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Auto approve psalm baseline update
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: update-psalm-baseline-approve-merge-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.actor == 'nextcloud-command'
|
||||
runs-on: ubuntu-latest-low
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
pull-requests: write
|
||||
# for alexwilson/enable-github-automerge-action to approve PRs
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: Disabled on forks
|
||||
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
||||
run: |
|
||||
echo 'Can not approve PRs from forks'
|
||||
exit 1
|
||||
|
||||
- uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0
|
||||
id: branchname
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# GitHub actions bot approve
|
||||
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-psalm-baseline')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # main
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-psalm-baseline')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,69 @@
|
||||
# SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
name: Update Psalm baseline
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "5 2 * * *"
|
||||
|
||||
jobs:
|
||||
update-psalm-baseline:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
if: ${{ github.repository_owner != 'nextcloud-gmbh' }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
branches: ['master', 'stable30', 'stable29', 'stable28']
|
||||
|
||||
name: update-psalm-baseline-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 #v2.31.1
|
||||
with:
|
||||
php-version: '8.1'
|
||||
extensions: apcu,ctype,curl,dom,fileinfo,ftp,gd,intl,json,ldap,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Composer install
|
||||
run: composer install
|
||||
|
||||
- name: Psalm
|
||||
run: composer run psalm:ci -- --monochrome --no-progress --output-format=text --update-baseline
|
||||
continue-on-error: true
|
||||
|
||||
- name: Psalm OCP
|
||||
run: composer run psalm:ci -- -c psalm-ocp.xml --monochrome --no-progress --output-format=github --update-baseline
|
||||
continue-on-error: true
|
||||
|
||||
- name: Reset composer
|
||||
run: |
|
||||
git clean -f lib/composer
|
||||
git checkout composer.json composer.lock lib/composer
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
commit-message: 'chore(tests): Update psalm baseline'
|
||||
committer: GitHub <noreply@github.com>
|
||||
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
|
||||
signoff: true
|
||||
branch: 'automated/noid/${{ matrix.branches }}-update-psalm-baseline'
|
||||
title: '[${{ matrix.branches }}] Update psalm-baseline.xml'
|
||||
body: |
|
||||
Auto-generated update psalm-baseline.xml with fixed psalm warnings
|
||||
labels: |
|
||||
automated pr
|
||||
3. to review
|
||||
team-reviewers: server-backend
|
||||
@@ -49,8 +49,8 @@
|
||||
</Else>
|
||||
</FilesMatch>
|
||||
|
||||
# Let browsers cache OTF and WOFF files for a week
|
||||
<FilesMatch "\.(otf|woff2?)$">
|
||||
# Let browsers cache WOFF files for a week
|
||||
<FilesMatch "\.woff2?$">
|
||||
Header set Cache-Control "max-age=604800"
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
@@ -106,13 +106,5 @@
|
||||
SetEnvIf Transfer-Encoding "chunked" proxy-sendcl=1
|
||||
</IfModule>
|
||||
|
||||
# Apache disabled the sending of the server-side content-length header
|
||||
# in their 2.4.59 patch updated which breaks some use-cases in Nextcloud.
|
||||
# Setting ap_trust_cgilike_cl allows to bring back the usual behaviour.
|
||||
# See https://bz.apache.org/bugzilla/show_bug.cgi?id=68973
|
||||
<IfModule mod_env.c>
|
||||
SetEnv ap_trust_cgilike_cl
|
||||
</IfModule>
|
||||
|
||||
AddDefaultCharset utf-8
|
||||
Options -Indexes
|
||||
|
||||
+13
-19
@@ -14,29 +14,23 @@ $config = new Config();
|
||||
$config
|
||||
->setParallelConfig(ParallelConfigFactory::detect())
|
||||
->getFinder()
|
||||
->ignoreVCSIgnored(true)
|
||||
->exclude('config')
|
||||
->exclude('data')
|
||||
->notPath('3rdparty')
|
||||
->notPath('build/integration/vendor')
|
||||
->notPath('build/lib')
|
||||
->notPath('build/node_modules')
|
||||
->notPath('build/stubs')
|
||||
->notPath('composer')
|
||||
->notPath('node_modules')
|
||||
->notPath('vendor')
|
||||
->in('apps')
|
||||
->exclude('3rdparty')
|
||||
->exclude('build/stubs')
|
||||
->exclude('composer')
|
||||
->in(__DIR__);
|
||||
|
||||
// Ignore additional app directories
|
||||
$rootDir = new \DirectoryIterator(__DIR__);
|
||||
foreach ($rootDir as $node) {
|
||||
if (str_starts_with($node->getFilename(), 'apps')) {
|
||||
$return = shell_exec('git check-ignore ' . escapeshellarg($node->getFilename() . '/'));
|
||||
$ignoredEntries = shell_exec('git status --porcelain --ignored ' . escapeshellarg(__DIR__));
|
||||
$ignoredEntries = explode("\n", $ignoredEntries);
|
||||
$ignoredEntries = array_filter($ignoredEntries, static fn (string $line) => str_starts_with($line, '!! '));
|
||||
$ignoredEntries = array_map(static fn (string $line) => substr($line, 3), $ignoredEntries);
|
||||
$ignoredEntries = array_values($ignoredEntries);
|
||||
|
||||
if ($return !== null) {
|
||||
$config->getFinder()->exclude($node->getFilename());
|
||||
}
|
||||
foreach ($ignoredEntries as $ignoredEntry) {
|
||||
if (str_ends_with($ignoredEntry, '/')) {
|
||||
$config->getFinder()->exclude($ignoredEntry);
|
||||
} else {
|
||||
$config->getFinder()->notPath($ignoredEntry);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-7
File diff suppressed because one or more lines are too long
+1
-1
Submodule 3rdparty updated: 920d1271c1...2f64a94fa2
@@ -6,4 +6,4 @@ and our products: “Nextcloud Files”; “Nextcloud Groupware” and “Nextcl
|
||||
This set of marks is collectively referred to as the “Nextcloud marks.”
|
||||
|
||||
Use of Nextcloud logos and other marks is only permitted under the guidelines provided by the Nextcloud GmbH.
|
||||
A copy can be found at https://nextcloud.com/trademarks/
|
||||
A copy can be found at https://discord.com/branding
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
-->
|
||||
# Nextcloud Server ☁
|
||||
[](https://api.reuse.software/info/github.com/nextcloud/server)
|
||||
[](https://scrutinizer-ci.com/g/nextcloud/server/?branch=stable30)
|
||||
[](https://codecov.io/gh/nextcloud/server)
|
||||
[](https://scrutinizer-ci.com/g/nextcloud/server/?branch=master)
|
||||
[](https://codecov.io/gh/nextcloud/server)
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/209)
|
||||
[](https://contribute.design/nextcloud/server)
|
||||
|
||||
@@ -74,6 +74,10 @@ Otherwise, git checkouts can be handled the same as release archives, by using t
|
||||
|
||||
- Comment on a pull request with `/update-3rdparty` to update the 3rd party submodule. It will update to the last commit of the 3rd party branch named like the PR target.
|
||||
|
||||
#### Ignore code style updates in git blame
|
||||
|
||||
`git config blame.ignoreRevsFile .git-blame-ignore-revs`
|
||||
|
||||
## Contribution guidelines 📜
|
||||
|
||||
All contributions to this repository from June 16, 2016, and onward are considered to be
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import '@testing-library/jest-dom'
|
||||
|
||||
// Mock `window.location` with Jest spies and extend expect
|
||||
import 'jest-location-mock'
|
||||
|
||||
// Mock `window.fetch` with Jest
|
||||
import 'jest-fetch-mock'
|
||||
@@ -2,7 +2,12 @@
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
import { beforeEach } from 'vitest'
|
||||
|
||||
window.OC = { ...window.OC }
|
||||
window.OCA = { ...window.OCA }
|
||||
window.OCP = { ...window.OCP }
|
||||
|
||||
beforeEach(() => {
|
||||
window.location = new URL('http://nextcloud.local')
|
||||
})
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: CC0-1.0
|
||||
*/
|
||||
import '@testing-library/jest-dom/vitest'
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"extends": "../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"verbatimModuleSyntax": false
|
||||
}
|
||||
}
|
||||
@@ -10,7 +10,7 @@
|
||||
<name>Auditing / Logging</name>
|
||||
<summary>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</summary>
|
||||
<description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
|
||||
<version>1.20.0</version>
|
||||
<version>1.21.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Nextcloud</author>
|
||||
<namespace>AdminAudit</namespace>
|
||||
@@ -20,7 +20,7 @@
|
||||
<category>monitoring</category>
|
||||
<bugs>https://github.com/nextcloud/server/issues</bugs>
|
||||
<dependencies>
|
||||
<nextcloud min-version="30" max-version="30"/>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\AdminAudit\BackgroundJobs\Rotate</job>
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "ئىقتىسادىي تەپتىش / خاتىرىلەش",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud غا تىزىمغا كىرىش ئىقتىدارى بىلەن تەمىنلەيدۇ ، مەسىلەن ھۆججەتلەرنى زىيارەت قىلىش ياكى باشقا سەزگۈر ھەرىكەتلەر."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
@@ -1,5 +0,0 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "ئىقتىسادىي تەپتىش / خاتىرىلەش",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Nextcloud غا تىزىمغا كىرىش ئىقتىدارى بىلەن تەمىنلەيدۇ ، مەسىلەن ھۆججەتلەرنى زىيارەت قىلىش ياكى باشقا سەزگۈر ھەرىكەتلەر."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
"Auditing / Logging" : "Kiểm tra / Nhật ký",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "Cung cấp khả năng ghi nhật ký cho Nextcloud, chẳng hạn như ghi nhật ký quyền truy cập tệp hoặc các hành động nhạy cảm khác."
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"admin_audit",
|
||||
{
|
||||
"Auditing / Logging" : "稽核/記錄",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "提供 Nextcloud 的記錄功能,例如紀錄檔存取,或其他敏感操作。"
|
||||
"Auditing / Logging" : "稽核/記錄",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "提供 Nextcloud 的記錄功能,例如記錄檔存取或其他敏感操作。"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{ "translations": {
|
||||
"Auditing / Logging" : "稽核/記錄",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "提供 Nextcloud 的記錄功能,例如紀錄檔存取,或其他敏感操作。"
|
||||
"Auditing / Logging" : "稽核/記錄",
|
||||
"Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions." : "提供 Nextcloud 的記錄功能,例如記錄檔存取或其他敏感操作。"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -8,11 +8,12 @@ declare(strict_types=1);
|
||||
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\BeforeNodeWrittenEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeWrittenEvent;
|
||||
use OCP\Files\InvalidPathException;
|
||||
@@ -28,9 +29,10 @@ use Psr\Log\LoggerInterface;
|
||||
class Files extends Action {
|
||||
|
||||
private array $renamedNodes = [];
|
||||
|
||||
/**
|
||||
* Logs file read actions
|
||||
*
|
||||
* @param BeforeNodeReadEvent $event
|
||||
*/
|
||||
public function read(BeforeNodeReadEvent $event): void {
|
||||
try {
|
||||
@@ -41,7 +43,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file read: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file read: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -54,6 +56,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*
|
||||
* @param BeforeNodeRenamedEvent $event
|
||||
*/
|
||||
public function beforeRename(BeforeNodeRenamedEvent $event): void {
|
||||
try {
|
||||
@@ -61,7 +65,7 @@ class Files extends Action {
|
||||
$this->renamedNodes[$source->getId()] = $source;
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file rename: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file rename: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -69,6 +73,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs rename actions of files
|
||||
*
|
||||
* @param NodeRenamedEvent $event
|
||||
*/
|
||||
public function afterRename(NodeRenamedEvent $event): void {
|
||||
try {
|
||||
@@ -81,7 +87,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file rename: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file rename: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -96,6 +102,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs creation of files
|
||||
*
|
||||
* @param NodeCreatedEvent $event
|
||||
*/
|
||||
public function create(NodeCreatedEvent $event): void {
|
||||
try {
|
||||
@@ -105,7 +113,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file create: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file create: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -121,6 +129,8 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs copying of files
|
||||
*
|
||||
* @param NodeCopiedEvent $event
|
||||
*/
|
||||
public function copy(NodeCopiedEvent $event): void {
|
||||
try {
|
||||
@@ -132,7 +142,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file copy: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file copy: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -145,17 +155,19 @@ class Files extends Action {
|
||||
|
||||
/**
|
||||
* Logs writing of files
|
||||
*
|
||||
* @param BeforeNodeWrittenEvent $event
|
||||
*/
|
||||
public function write(NodeWrittenEvent $event): void {
|
||||
public function write(BeforeNodeWrittenEvent $event): void {
|
||||
$node = $event->getNode();
|
||||
try {
|
||||
$params = [
|
||||
'id' => $node->getId(),
|
||||
'id' => $node instanceof NonExistingFile ? null : $node->getId(),
|
||||
'path' => mb_substr($node->getInternalPath(), 5),
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file write: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file write: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -171,9 +183,11 @@ class Files extends Action {
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs deletions of files
|
||||
* Logs update of files
|
||||
*
|
||||
* @param NodeWrittenEvent $event
|
||||
*/
|
||||
public function delete(BeforeNodeDeletedEvent $event): void {
|
||||
public function update(NodeWrittenEvent $event): void {
|
||||
try {
|
||||
$params = [
|
||||
'id' => $event->getNode()->getId(),
|
||||
@@ -181,7 +195,31 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file delete: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file update: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
$this->log(
|
||||
'File with id "%s" updated: "%s"',
|
||||
$params,
|
||||
array_keys($params)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs deletions of files
|
||||
*
|
||||
* @param NodeDeletedEvent $event
|
||||
*/
|
||||
public function delete(NodeDeletedEvent $event): void {
|
||||
try {
|
||||
$params = [
|
||||
'id' => $event->getNode()->getId(),
|
||||
'path' => mb_substr($event->getNode()->getInternalPath(), 5),
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
'Exception thrown in file delete: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -210,7 +248,7 @@ class Files extends Action {
|
||||
];
|
||||
} catch (InvalidPathException|NotFoundException $e) {
|
||||
\OCP\Server::get(LoggerInterface::class)->error(
|
||||
"Exception thrown in file preview: ".$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
'Exception thrown in file preview: '.$e->getMessage(), ['app' => 'admin_audit', 'exception' => $e]
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -32,11 +32,12 @@ use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengeFailed;
|
||||
use OCP\Authentication\TwoFactorAuth\TwoFactorProviderChallengePassed;
|
||||
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\BeforeNodeWrittenEvent;
|
||||
use OCP\Files\Events\Node\NodeCopiedEvent;
|
||||
use OCP\Files\Events\Node\NodeCreatedEvent;
|
||||
use OCP\Files\Events\Node\NodeDeletedEvent;
|
||||
use OCP\Files\Events\Node\NodeRenamedEvent;
|
||||
use OCP\Files\Events\Node\NodeWrittenEvent;
|
||||
use OCP\IConfig;
|
||||
@@ -217,12 +218,19 @@ class Application extends App implements IBootstrap {
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeWrittenEvent::class,
|
||||
function (NodeWrittenEvent $event) use ($fileActions): void {
|
||||
BeforeNodeWrittenEvent::class,
|
||||
function (BeforeNodeWrittenEvent $event) use ($fileActions) {
|
||||
$fileActions->write($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
NodeWrittenEvent::class,
|
||||
function (NodeWrittenEvent $event) use ($fileActions) {
|
||||
$fileActions->update($event);
|
||||
}
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeReadEvent::class,
|
||||
function (BeforeNodeReadEvent $event) use ($fileActions) {
|
||||
@@ -231,8 +239,8 @@ class Application extends App implements IBootstrap {
|
||||
);
|
||||
|
||||
$eventDispatcher->addListener(
|
||||
BeforeNodeDeletedEvent::class,
|
||||
function (BeforeNodeDeletedEvent $event) use ($fileActions): void {
|
||||
NodeDeletedEvent::class,
|
||||
function (NodeDeletedEvent $event) use ($fileActions) {
|
||||
$fileActions->delete($event);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<name>Cloud Federation API</name>
|
||||
<summary>Enable clouds to communicate with each other and exchange data</summary>
|
||||
<description>The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.</description>
|
||||
<version>1.13.0</version>
|
||||
<version>1.14.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Bjoern Schiessle</author>
|
||||
<namespace>CloudFederationAPI</namespace>
|
||||
@@ -19,6 +19,6 @@
|
||||
<category>integration</category>
|
||||
<bugs>https://github.com/nextcloud/server/issues</bugs>
|
||||
<dependencies>
|
||||
<nextcloud min-version="30" max-version="30"/>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
</dependencies>
|
||||
</info>
|
||||
|
||||
@@ -2,7 +2,7 @@ OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "Ligeann API Comhdhéanta na Scamaill",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Cumasaigh scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cuireann API Cloud Federation ar chumas cásanna éagsúla Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
|
||||
"Enable clouds to communicate with each other and exchange data" : "Lig dóimhneacht a chur ar chumas na scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú.",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Ligeann API Comhdhéanta na Scamaill do réimse éagsúil de chásanna Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
|
||||
},
|
||||
"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "Ligeann API Comhdhéanta na Scamaill",
|
||||
"Enable clouds to communicate with each other and exchange data" : "Cumasaigh scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Cuireann API Cloud Federation ar chumas cásanna éagsúla Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
|
||||
"Enable clouds to communicate with each other and exchange data" : "Lig dóimhneacht a chur ar chumas na scamaill cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú.",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "Ligeann API Comhdhéanta na Scamaill do réimse éagsúil de chásanna Nextcloud cumarsáid a dhéanamh lena chéile agus sonraí a mhalartú."
|
||||
},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "بۇلۇت فېدېراتسىيەسى API",
|
||||
"Enable clouds to communicate with each other and exchange data" : "بۇلۇتلارنىڭ ئۆز-ئارا ئالاقە قىلىشى ۋە سانلىق مەلۇمات ئالماشتۇرۇشىنى قوزغىتىڭ",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "بۇلۇت فېدېراتسىيەسى API ھەر خىل Nextcloud مىساللىرىنى ئۆز-ئارا ئالاقە قىلىش ۋە سانلىق مەلۇمات ئالماشتۇرۇش ئىمكانىيىتىگە ئىگە قىلىدۇ."
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
@@ -1,6 +0,0 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "بۇلۇت فېدېراتسىيەسى API",
|
||||
"Enable clouds to communicate with each other and exchange data" : "بۇلۇتلارنىڭ ئۆز-ئارا ئالاقە قىلىشى ۋە سانلىق مەلۇمات ئالماشتۇرۇشىنى قوزغىتىڭ",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "بۇلۇت فېدېراتسىيەسى API ھەر خىل Nextcloud مىساللىرىنى ئۆز-ئارا ئالاقە قىلىش ۋە سانلىق مەلۇمات ئالماشتۇرۇش ئىمكانىيىتىگە ئىگە قىلىدۇ."
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
OC.L10N.register(
|
||||
"cloud_federation_api",
|
||||
{
|
||||
"Cloud Federation API" : "雲端聯邦 API",
|
||||
"Cloud Federation API" : "雲端聯盟 API",
|
||||
"Enable clouds to communicate with each other and exchange data" : "讓雲端可互相通訊並交換資料",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "雲端聯邦 API 能讓多個 Nextcloud 實體之間,可以互相通訊並交換資料。"
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "雲端聯盟 API 讓多個 Nextcloud 站台可以互相通訊並交換資料。"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{ "translations": {
|
||||
"Cloud Federation API" : "雲端聯邦 API",
|
||||
"Cloud Federation API" : "雲端聯盟 API",
|
||||
"Enable clouds to communicate with each other and exchange data" : "讓雲端可互相通訊並交換資料",
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "雲端聯邦 API 能讓多個 Nextcloud 實體之間,可以互相通訊並交換資料。"
|
||||
"The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data." : "雲端聯盟 API 讓多個 Nextcloud 站台可以互相通訊並交換資料。"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -55,8 +55,8 @@ class Capabilities implements ICapability {
|
||||
|
||||
$resource = $this->provider->createNewResourceType();
|
||||
$resource->setName('file')
|
||||
->setShareTypes(['user', 'group'])
|
||||
->setProtocols(['webdav' => '/public.php/webdav/']);
|
||||
->setShareTypes(['user', 'group'])
|
||||
->setProtocols(['webdav' => '/public.php/webdav/']);
|
||||
|
||||
$this->provider->addResourceType($resource);
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@ class RequestHandlerController extends Controller {
|
||||
* @param string $resourceType 'file', 'calendar',...
|
||||
*
|
||||
* @return JSONResponse<Http::STATUS_CREATED, CloudFederationAPIAddShare, array{}>|JSONResponse<Http::STATUS_BAD_REQUEST, CloudFederationAPIValidationError, array{}>|JSONResponse<Http::STATUS_NOT_IMPLEMENTED, CloudFederationAPIError, array{}>
|
||||
*
|
||||
* 201: The notification was successfully received. The display name of the recipient might be returned in the body
|
||||
* 400: Bad request due to invalid parameters, e.g. when `shareWith` is not found or required properties are missing
|
||||
* 501: Share type or the resource type is not supported
|
||||
@@ -196,6 +197,7 @@ class RequestHandlerController extends Controller {
|
||||
* @param array<string, mixed>|null $notification The actual payload of the notification
|
||||
*
|
||||
* @return JSONResponse<Http::STATUS_CREATED, array<string, mixed>, array{}>|JSONResponse<Http::STATUS_BAD_REQUEST, CloudFederationAPIValidationError, array{}>|JSONResponse<Http::STATUS_FORBIDDEN|Http::STATUS_NOT_IMPLEMENTED, CloudFederationAPIError, array{}>
|
||||
*
|
||||
* 201: The notification was successfully received
|
||||
* 400: Bad request due to invalid parameters, e.g. when `type` is invalid or missing
|
||||
* 403: Getting resource is not allowed
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<name>Comments</name>
|
||||
<summary>Files app plugin to add comments to files</summary>
|
||||
<description>Files app plugin to add comments to files</description>
|
||||
<version>1.20.1</version>
|
||||
<version>1.21.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Arthur Schiwon</author>
|
||||
<author>Vincent Petry</author>
|
||||
@@ -21,7 +21,7 @@
|
||||
<category>social</category>
|
||||
<bugs>https://github.com/nextcloud/server/issues</bugs>
|
||||
<dependencies>
|
||||
<nextcloud min-version="30" max-version="30"/>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
</dependencies>
|
||||
|
||||
<activity>
|
||||
|
||||
@@ -19,12 +19,12 @@ OC.L10N.register(
|
||||
"New comment" : "تعليق جديد",
|
||||
"Write a comment …" : "أكتُب تعليق ...",
|
||||
"Post comment" : "أضف تعليق",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات : للإيموجي / للاقط الذكي",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات، : للإيموجي، / للاقط الذكي",
|
||||
"Could not reload comments" : "تعذّرت إعادة تحميل التعليقات",
|
||||
"No comments yet, start the conversation!" : "لا توجد تعليقات, ابدأ النقاش الآن!",
|
||||
"No more messages" : "لامزيد من الرسائل",
|
||||
"Retry" : "أعد المحاولة",
|
||||
"Failed to mark comments as read" : "فشل في تعيين ملاحظات كمقرؤة",
|
||||
"Failed to mark comments as read" : "إخفاق في تعيين ملاحظات كمقرؤة",
|
||||
"Unable to load the comments list" : "تعذر تحميل قائمة التعليقات",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 تعليق جديد","1 تعليق جديد","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة"],
|
||||
"Comment" : "تعليق",
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
"New comment" : "تعليق جديد",
|
||||
"Write a comment …" : "أكتُب تعليق ...",
|
||||
"Post comment" : "أضف تعليق",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات : للإيموجي / للاقط الذكي",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ للإشارات، : للإيموجي، / للاقط الذكي",
|
||||
"Could not reload comments" : "تعذّرت إعادة تحميل التعليقات",
|
||||
"No comments yet, start the conversation!" : "لا توجد تعليقات, ابدأ النقاش الآن!",
|
||||
"No more messages" : "لامزيد من الرسائل",
|
||||
"Retry" : "أعد المحاولة",
|
||||
"Failed to mark comments as read" : "فشل في تعيين ملاحظات كمقرؤة",
|
||||
"Failed to mark comments as read" : "إخفاق في تعيين ملاحظات كمقرؤة",
|
||||
"Unable to load the comments list" : "تعذر تحميل قائمة التعليقات",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 تعليق جديد","1 تعليق جديد","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة","{unread} تعليقات جديدة"],
|
||||
"Comment" : "تعليق",
|
||||
|
||||
@@ -10,7 +10,6 @@ OC.L10N.register(
|
||||
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> k souborům",
|
||||
"Files" : "Soubory",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vás zmínil(a) v komentáři u „{file}“",
|
||||
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
|
||||
"Edit comment" : "Upravit komentář",
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> k souborům",
|
||||
"Files" : "Soubory",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Byli jste zmíněni u souboru „{file}“, v komentáři od účtu, který byl později smazán",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vás zmínil(a) v komentáři u „{file}“",
|
||||
"Files app plugin to add comments to files" : "Zásuvný modul do aplikace Soubory pro přidávání komentářů k souborům",
|
||||
"Edit comment" : "Upravit komentář",
|
||||
|
||||
@@ -11,7 +11,7 @@ OC.L10N.register(
|
||||
"<strong>Comments</strong> for files" : "<strong>Tuairimí</strong> le haghaidh comhaid",
|
||||
"Files" : "Comhaid",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Luadh thú ar \"{file}\", i nóta tráchta ó chuntas a scriosadh ó shin",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "Luaigh {user} tú i nóta tráchta ar \"{file}\"",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "Luaigh {úsáideoir} tú i nóta tráchta ar \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Breiseán aip Comhaid chun tuairimí a chur le comhaid",
|
||||
"Edit comment" : "Cuir trácht in eagar",
|
||||
"Delete comment" : "Scrios nóta tráchta",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"<strong>Comments</strong> for files" : "<strong>Tuairimí</strong> le haghaidh comhaid",
|
||||
"Files" : "Comhaid",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Luadh thú ar \"{file}\", i nóta tráchta ó chuntas a scriosadh ó shin",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "Luaigh {user} tú i nóta tráchta ar \"{file}\"",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "Luaigh {úsáideoir} tú i nóta tráchta ar \"{file}\"",
|
||||
"Files app plugin to add comments to files" : "Breiseán aip Comhaid chun tuairimí a chur le comhaid",
|
||||
"Edit comment" : "Cuir trácht in eagar",
|
||||
"Delete comment" : "Scrios nóta tráchta",
|
||||
|
||||
@@ -23,7 +23,7 @@ OC.L10N.register(
|
||||
"Could not reload comments" : "Non foi posíbel volver cargar os comentarios",
|
||||
"No comments yet, start the conversation!" : "Aínda non hai comentarios, comeza a conversa!",
|
||||
"No more messages" : "Non hai máis mensaxes",
|
||||
"Retry" : "Volver tentar",
|
||||
"Retry" : "Tentar de novo",
|
||||
"Failed to mark comments as read" : "Produciuse un fallo ao marcar os comentarios como lidos",
|
||||
"Unable to load the comments list" : "Non é posíbel cargar a lista de comentarios",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 comentario novo","{unread} comentarios novos"],
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"Could not reload comments" : "Non foi posíbel volver cargar os comentarios",
|
||||
"No comments yet, start the conversation!" : "Aínda non hai comentarios, comeza a conversa!",
|
||||
"No more messages" : "Non hai máis mensaxes",
|
||||
"Retry" : "Volver tentar",
|
||||
"Retry" : "Tentar de novo",
|
||||
"Failed to mark comments as read" : "Produciuse un fallo ao marcar os comentarios como lidos",
|
||||
"Unable to load the comments list" : "Non é posíbel cargar a lista de comentarios",
|
||||
"_1 new comment_::_{unread} new comments_" : ["1 comentario novo","{unread} comentarios novos"],
|
||||
|
||||
@@ -3,7 +3,7 @@ OC.L10N.register(
|
||||
{
|
||||
"Comments" : "Komentari",
|
||||
"You commented" : "Vi ste komentirali",
|
||||
"{author} commented" : "{author} je komentirao",
|
||||
"{author} commented" : "{autor} je komentirao",
|
||||
"You commented on %1$s" : "Vi ste komentirali %1$s",
|
||||
"You commented on {file}" : "Komentirali ste {file}",
|
||||
"%1$s commented on %2$s" : "%1$s je komentirao %2$s",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{ "translations": {
|
||||
"Comments" : "Komentari",
|
||||
"You commented" : "Vi ste komentirali",
|
||||
"{author} commented" : "{author} je komentirao",
|
||||
"{author} commented" : "{autor} je komentirao",
|
||||
"You commented on %1$s" : "Vi ste komentirali %1$s",
|
||||
"You commented on {file}" : "Komentirali ste {file}",
|
||||
"%1$s commented on %2$s" : "%1$s je komentirao %2$s",
|
||||
|
||||
@@ -3,13 +3,13 @@ OC.L10N.register(
|
||||
{
|
||||
"Comments" : "Komentar",
|
||||
"You commented" : "Anda berkomentar",
|
||||
"{author} commented" : "{author} berkomentar",
|
||||
"{author} commented" : "{Pengarang} berkomentar",
|
||||
"You commented on %1$s" : "Anda berkomentar pada %1$s",
|
||||
"You commented on {file}" : "Anda berkomentar pada {file} ",
|
||||
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
|
||||
"{author} commented on {file}" : "{author} berkomentar pada {file}",
|
||||
"{author} commented on {file}" : "{pengarang} berkomentar pada {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{pengguna} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
|
||||
"Edit comment" : "Sunting komentar",
|
||||
"Delete comment" : "Hapus komentar",
|
||||
@@ -19,6 +19,7 @@ OC.L10N.register(
|
||||
"No more messages" : "Tidak ada pesan lagi",
|
||||
"Retry" : "Ulangi",
|
||||
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
|
||||
"_1 new comment_::_{unread} new comments_" : ["komentar baru {belum terbaca}"],
|
||||
"Comment" : "Komentar",
|
||||
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
|
||||
"Comment deleted" : "Komentar dihapus",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{ "translations": {
|
||||
"Comments" : "Komentar",
|
||||
"You commented" : "Anda berkomentar",
|
||||
"{author} commented" : "{author} berkomentar",
|
||||
"{author} commented" : "{Pengarang} berkomentar",
|
||||
"You commented on %1$s" : "Anda berkomentar pada %1$s",
|
||||
"You commented on {file}" : "Anda berkomentar pada {file} ",
|
||||
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
|
||||
"{author} commented on {file}" : "{author} berkomentar pada {file}",
|
||||
"{author} commented on {file}" : "{pengarang} berkomentar pada {file}",
|
||||
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{pengguna} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
|
||||
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
|
||||
"Edit comment" : "Sunting komentar",
|
||||
"Delete comment" : "Hapus komentar",
|
||||
@@ -17,6 +17,7 @@
|
||||
"No more messages" : "Tidak ada pesan lagi",
|
||||
"Retry" : "Ulangi",
|
||||
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
|
||||
"_1 new comment_::_{unread} new comments_" : ["komentar baru {belum terbaca}"],
|
||||
"Comment" : "Komentar",
|
||||
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
|
||||
"Comment deleted" : "Komentar dihapus",
|
||||
|
||||
@@ -26,7 +26,7 @@ OC.L10N.register(
|
||||
"Retry" : "Prøv igjen",
|
||||
"Failed to mark comments as read" : "Markering av kommentarer som lest feilet",
|
||||
"Unable to load the comments list" : "Kan ikke laste inn kommentarlisten",
|
||||
"_1 new comment_::_{unread} new comments_" : ["[uleste] nye kommentarer","{unread} nye kommentarer"],
|
||||
"_1 new comment_::_{unread} new comments_" : ["[uleste] nye kommentarer","{uleste} nye kommentarer"],
|
||||
"Comment" : "Kommentar",
|
||||
"An error occurred while trying to edit the comment" : "Det oppsto en feil under forsøk på å redigere kommentaren",
|
||||
"Comment deleted" : "Kommentar slettet",
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"Retry" : "Prøv igjen",
|
||||
"Failed to mark comments as read" : "Markering av kommentarer som lest feilet",
|
||||
"Unable to load the comments list" : "Kan ikke laste inn kommentarlisten",
|
||||
"_1 new comment_::_{unread} new comments_" : ["[uleste] nye kommentarer","{unread} nye kommentarer"],
|
||||
"_1 new comment_::_{unread} new comments_" : ["[uleste] nye kommentarer","{uleste} nye kommentarer"],
|
||||
"Comment" : "Kommentar",
|
||||
"An error occurred while trying to edit the comment" : "Det oppsto en feil under forsøk på å redigere kommentaren",
|
||||
"Comment deleted" : "Kommentar slettet",
|
||||
|
||||
@@ -15,9 +15,7 @@ OC.L10N.register(
|
||||
"Edit comment" : "Bewerk reactie",
|
||||
"Delete comment" : "Verwijder reactie",
|
||||
"Cancel edit" : "Annuleer bewerking",
|
||||
"New comment" : "Nieuwe reactie",
|
||||
"Post comment" : "Plaats reactie",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ voor vermeldingen, : voor emoji, / voor smart picker",
|
||||
"No comments yet, start the conversation!" : "Nog geen reacties, start de discussie!",
|
||||
"No more messages" : "Geen berichten meer",
|
||||
"Retry" : "Opnieuw proberen",
|
||||
|
||||
@@ -13,9 +13,7 @@
|
||||
"Edit comment" : "Bewerk reactie",
|
||||
"Delete comment" : "Verwijder reactie",
|
||||
"Cancel edit" : "Annuleer bewerking",
|
||||
"New comment" : "Nieuwe reactie",
|
||||
"Post comment" : "Plaats reactie",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ voor vermeldingen, : voor emoji, / voor smart picker",
|
||||
"No comments yet, start the conversation!" : "Nog geen reacties, start de discussie!",
|
||||
"No more messages" : "Geen berichten meer",
|
||||
"Retry" : "Opnieuw proberen",
|
||||
|
||||
@@ -14,7 +14,6 @@ OC.L10N.register(
|
||||
"Edit comment" : "Modìfica cummentu",
|
||||
"Delete comment" : "Cantzella cummentu",
|
||||
"Cancel edit" : "Annulla modìfica",
|
||||
"New comment" : "Cummentu nou",
|
||||
"Post comment" : "Pùblica cummentu",
|
||||
"No comments yet, start the conversation!" : "Ancora perunu cummentu, cumintza sa cunversatzione!",
|
||||
"No more messages" : "Perunu àteru messàgiu",
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
"Edit comment" : "Modìfica cummentu",
|
||||
"Delete comment" : "Cantzella cummentu",
|
||||
"Cancel edit" : "Annulla modìfica",
|
||||
"New comment" : "Cummentu nou",
|
||||
"Post comment" : "Pùblica cummentu",
|
||||
"No comments yet, start the conversation!" : "Ancora perunu cummentu, cumintza sa cunversatzione!",
|
||||
"No more messages" : "Perunu àteru messàgiu",
|
||||
|
||||
@@ -9,7 +9,7 @@ OC.L10N.register(
|
||||
"%1$s commented on %2$s" : "%1$s napiše opombo na %2$s",
|
||||
"{author} commented on {file}" : "{author} napiše opombo na {file}",
|
||||
"<strong>Comments</strong> for files" : "Vpisane so <strong>opombe</strong> k datotekam",
|
||||
"Files" : "Datoteke",
|
||||
"Files" : "Datoteke s podpisi",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Uporabnik, ki je sicer že izbrisan, vas omenja v opombi k datoteki »{file}«.",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vas omeni v opombi k datoteki »{file}«",
|
||||
"Files app plugin to add comments to files" : "Vstavek programa Datoteke za dodajanje opomb k datotekam",
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"%1$s commented on %2$s" : "%1$s napiše opombo na %2$s",
|
||||
"{author} commented on {file}" : "{author} napiše opombo na {file}",
|
||||
"<strong>Comments</strong> for files" : "Vpisane so <strong>opombe</strong> k datotekam",
|
||||
"Files" : "Datoteke",
|
||||
"Files" : "Datoteke s podpisi",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Uporabnik, ki je sicer že izbrisan, vas omenja v opombi k datoteki »{file}«.",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} vas omeni v opombi k datoteki »{file}«",
|
||||
"Files app plugin to add comments to files" : "Vstavek programa Datoteke za dodajanje opomb k datotekam",
|
||||
|
||||
@@ -1,36 +1,7 @@
|
||||
OC.L10N.register(
|
||||
"comments",
|
||||
{
|
||||
"Comments" : "باھا",
|
||||
"You commented" : "باھا بەردىڭىز",
|
||||
"{author} commented" : "{ئاپتور} باھا بەردى",
|
||||
"You commented on %1$s" : "سىز% 1 $ s غا باھا بەردىڭىز",
|
||||
"You commented on {file}" : "سىز {ھۆججەت} گە باھا بەردىڭىز",
|
||||
"%1$s commented on %2$s" : "% 1 $ s% 2 $ s غا باھا بەردى",
|
||||
"{author} commented on {file}" : "{ئاپتور} ھۆججەتكە باھا بەردى}",
|
||||
"<strong>Comments</strong> for files" : "ھۆججەتلەر ئۈچۈن <strong> باھا </ strong>",
|
||||
"Files" : "ھۆججەتلەر",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "سىز ئۆچۈرۈلگەن ھېساباتنىڭ ئىزاھاتىدا سىز «{ھۆججەت}» دە تىلغا ئېلىندى",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} سىزنى \"{ھۆججەت}\" دىكى باھادا تىلغا ئالدى",
|
||||
"Files app plugin to add comments to files" : "ھۆججەتلەرگە باھا قوشۇش ئۈچۈن ھۆججەت قىستۇرمىسى",
|
||||
"Edit comment" : "باھا تەھرىرلەش",
|
||||
"Delete comment" : "باھانى ئۆچۈرۈڭ",
|
||||
"Cancel edit" : "تەھرىرلەشنى ئەمەلدىن قالدۇرۇڭ",
|
||||
"New comment" : "يېڭى باھا",
|
||||
"Write a comment …" : "باھا يېزىڭ…",
|
||||
"Post comment" : "ئىنكاس يېزىڭ",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ تىلغا ئېلىش ئۈچۈن ،: emoji ئۈچۈن ، / ئەقلىي ئىقتىدارلىق تاللىغۇچ ئۈچۈن",
|
||||
"Could not reload comments" : "ئىنكاسلارنى قايتا يۈكلىيەلمىدى",
|
||||
"No comments yet, start the conversation!" : "تېخى باھا يوق ، سۆھبەتنى باشلاڭ!",
|
||||
"No more messages" : "باشقا ئۇچۇر يوق",
|
||||
"Retry" : "قايتا سىناڭ",
|
||||
"Failed to mark comments as read" : "ئىنكاسلارنى ئوقۇشقا بەلگە قويمىدى",
|
||||
"Unable to load the comments list" : "باھا تىزىملىكىنى يۈكلىيەلمىدى",
|
||||
"Comment" : "باھا",
|
||||
"An error occurred while trying to edit the comment" : "باھانى تەھرىرلىمەكچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"Comment deleted" : "باھا ئۆچۈرۈلدى",
|
||||
"An error occurred while trying to delete the comment" : "باھانى ئۆچۈرمەكچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"An error occurred while trying to create the comment" : "باھا قۇرماقچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "سىز ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ ئىزاھاتىدا سىز «{ھۆججەت}» دە تىلغا ئېلىندى"
|
||||
"Cancel" : "ۋاز كەچ",
|
||||
"Save" : "ساقلا"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -1,34 +1,5 @@
|
||||
{ "translations": {
|
||||
"Comments" : "باھا",
|
||||
"You commented" : "باھا بەردىڭىز",
|
||||
"{author} commented" : "{ئاپتور} باھا بەردى",
|
||||
"You commented on %1$s" : "سىز% 1 $ s غا باھا بەردىڭىز",
|
||||
"You commented on {file}" : "سىز {ھۆججەت} گە باھا بەردىڭىز",
|
||||
"%1$s commented on %2$s" : "% 1 $ s% 2 $ s غا باھا بەردى",
|
||||
"{author} commented on {file}" : "{ئاپتور} ھۆججەتكە باھا بەردى}",
|
||||
"<strong>Comments</strong> for files" : "ھۆججەتلەر ئۈچۈن <strong> باھا </ strong>",
|
||||
"Files" : "ھۆججەتلەر",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "سىز ئۆچۈرۈلگەن ھېساباتنىڭ ئىزاھاتىدا سىز «{ھۆججەت}» دە تىلغا ئېلىندى",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} سىزنى \"{ھۆججەت}\" دىكى باھادا تىلغا ئالدى",
|
||||
"Files app plugin to add comments to files" : "ھۆججەتلەرگە باھا قوشۇش ئۈچۈن ھۆججەت قىستۇرمىسى",
|
||||
"Edit comment" : "باھا تەھرىرلەش",
|
||||
"Delete comment" : "باھانى ئۆچۈرۈڭ",
|
||||
"Cancel edit" : "تەھرىرلەشنى ئەمەلدىن قالدۇرۇڭ",
|
||||
"New comment" : "يېڭى باھا",
|
||||
"Write a comment …" : "باھا يېزىڭ…",
|
||||
"Post comment" : "ئىنكاس يېزىڭ",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ تىلغا ئېلىش ئۈچۈن ،: emoji ئۈچۈن ، / ئەقلىي ئىقتىدارلىق تاللىغۇچ ئۈچۈن",
|
||||
"Could not reload comments" : "ئىنكاسلارنى قايتا يۈكلىيەلمىدى",
|
||||
"No comments yet, start the conversation!" : "تېخى باھا يوق ، سۆھبەتنى باشلاڭ!",
|
||||
"No more messages" : "باشقا ئۇچۇر يوق",
|
||||
"Retry" : "قايتا سىناڭ",
|
||||
"Failed to mark comments as read" : "ئىنكاسلارنى ئوقۇشقا بەلگە قويمىدى",
|
||||
"Unable to load the comments list" : "باھا تىزىملىكىنى يۈكلىيەلمىدى",
|
||||
"Comment" : "باھا",
|
||||
"An error occurred while trying to edit the comment" : "باھانى تەھرىرلىمەكچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"Comment deleted" : "باھا ئۆچۈرۈلدى",
|
||||
"An error occurred while trying to delete the comment" : "باھانى ئۆچۈرمەكچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"An error occurred while trying to create the comment" : "باھا قۇرماقچى بولغاندا خاتالىق كۆرۈلدى",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "سىز ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ ئىزاھاتىدا سىز «{ھۆججەت}» دە تىلغا ئېلىندى"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
"Cancel" : "ۋاز كەچ",
|
||||
"Save" : "ساقلا"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -12,26 +12,26 @@ OC.L10N.register(
|
||||
"Files" : "檔案",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "一個已刪除的帳號在「{file}」的留言中提及您。",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 在「{file}」的留言中提到您",
|
||||
"Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式插入式元件",
|
||||
"Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式擴充元件",
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新留言",
|
||||
"Write a comment …" : "編寫留言……",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及,: 表示表情符號,/ 表示智慧型選取",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及、: 表示表情符號、/ 表示智慧型選取程式",
|
||||
"Could not reload comments" : "無法重新載入留言",
|
||||
"No comments yet, start the conversation!" : "尚無留言,開始討論!",
|
||||
"No more messages" : "沒有其他訊息",
|
||||
"No more messages" : "沒有更多訊息",
|
||||
"Retry" : "重試",
|
||||
"Failed to mark comments as read" : "無法將留言標記為已讀",
|
||||
"Unable to load the comments list" : "無法載入留言列表",
|
||||
"_1 new comment_::_{unread} new comments_" : ["{unread} 則新留言"],
|
||||
"Comment" : "留言",
|
||||
"An error occurred while trying to edit the comment" : "嘗試編輯留言時發生錯誤",
|
||||
"An error occurred while trying to edit the comment" : "嘗試編輯此留言時錯誤",
|
||||
"Comment deleted" : "留言已刪除",
|
||||
"An error occurred while trying to delete the comment" : "嘗試刪除留言時發生錯誤",
|
||||
"An error occurred while trying to create the comment" : "嘗試建立留言時發生錯誤",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一位已被刪除的使用者在「{file}」的留言中提到您"
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一個已被刪除的使用者在「{file}」的留言中提到您"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -10,26 +10,26 @@
|
||||
"Files" : "檔案",
|
||||
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "一個已刪除的帳號在「{file}」的留言中提及您。",
|
||||
"{user} mentioned you in a comment on \"{file}\"" : "{user} 在「{file}」的留言中提到您",
|
||||
"Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式插入式元件",
|
||||
"Files app plugin to add comments to files" : "用於對檔案加入留言的檔案應用程式擴充元件",
|
||||
"Edit comment" : "編輯留言",
|
||||
"Delete comment" : "刪除留言",
|
||||
"Cancel edit" : "取消編輯",
|
||||
"New comment" : "新留言",
|
||||
"Write a comment …" : "編寫留言……",
|
||||
"Post comment" : "張貼留言",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及,: 表示表情符號,/ 表示智慧型選取",
|
||||
"@ for mentions, : for emoji, / for smart picker" : "@ 表示提及、: 表示表情符號、/ 表示智慧型選取程式",
|
||||
"Could not reload comments" : "無法重新載入留言",
|
||||
"No comments yet, start the conversation!" : "尚無留言,開始討論!",
|
||||
"No more messages" : "沒有其他訊息",
|
||||
"No more messages" : "沒有更多訊息",
|
||||
"Retry" : "重試",
|
||||
"Failed to mark comments as read" : "無法將留言標記為已讀",
|
||||
"Unable to load the comments list" : "無法載入留言列表",
|
||||
"_1 new comment_::_{unread} new comments_" : ["{unread} 則新留言"],
|
||||
"Comment" : "留言",
|
||||
"An error occurred while trying to edit the comment" : "嘗試編輯留言時發生錯誤",
|
||||
"An error occurred while trying to edit the comment" : "嘗試編輯此留言時錯誤",
|
||||
"Comment deleted" : "留言已刪除",
|
||||
"An error occurred while trying to delete the comment" : "嘗試刪除留言時發生錯誤",
|
||||
"An error occurred while trying to create the comment" : "嘗試建立留言時發生錯誤",
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一位已被刪除的使用者在「{file}」的留言中提到您"
|
||||
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "一個已被刪除的使用者在「{file}」的留言中提到您"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
@@ -67,7 +67,7 @@ class Listener {
|
||||
$activity->setApp('comments')
|
||||
->setType('comments')
|
||||
->setAuthor($actor)
|
||||
->setObject($event->getComment()->getObjectType(), (int) $event->getComment()->getObjectId())
|
||||
->setObject($event->getComment()->getObjectType(), (int)$event->getComment()->getObjectId())
|
||||
->setMessage('add_comment_message', [
|
||||
'commentId' => $event->getComment()->getId(),
|
||||
]);
|
||||
@@ -79,7 +79,7 @@ class Listener {
|
||||
|
||||
$activity->setSubject('add_comment_subject', [
|
||||
'actor' => $actor,
|
||||
'fileId' => (int) $event->getComment()->getObjectId(),
|
||||
'fileId' => (int)$event->getComment()->getObjectId(),
|
||||
'filePath' => trim($path, '/'),
|
||||
]);
|
||||
$this->activityManager->publish($activity);
|
||||
|
||||
@@ -148,7 +148,7 @@ class Provider implements IProvider {
|
||||
$commentId = $messageParameters['commentId'] ?? $messageParameters[0];
|
||||
|
||||
try {
|
||||
$comment = $this->commentsManager->get((string) $commentId);
|
||||
$comment = $this->commentsManager->get((string)$commentId);
|
||||
$message = $comment->getMessage();
|
||||
|
||||
$mentionCount = 1;
|
||||
|
||||
@@ -85,7 +85,7 @@ class LegacyProvider extends Provider {
|
||||
* @throws NotFoundException
|
||||
*/
|
||||
protected function getFileForComment(Folder $userFolder, IComment $comment): Node {
|
||||
$nodes = $userFolder->getById((int) $comment->getObjectId());
|
||||
$nodes = $userFolder->getById((int)$comment->getObjectId());
|
||||
if (empty($nodes)) {
|
||||
throw new NotFoundException('File not found');
|
||||
}
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
import { action } from './inlineUnreadCommentsAction'
|
||||
import { expect } from '@jest/globals'
|
||||
import { File, Permission, View, FileAction } from '@nextcloud/files'
|
||||
import { describe, expect, test, vi } from 'vitest'
|
||||
|
||||
import { action } from './inlineUnreadCommentsAction'
|
||||
import logger from '../logger'
|
||||
|
||||
const view = {
|
||||
@@ -29,7 +30,7 @@ describe('Inline unread comments action display name tests', () => {
|
||||
expect(action.id).toBe('comments-unread')
|
||||
expect(action.displayName([file], view)).toBe('')
|
||||
expect(action.title!([file], view)).toBe('1 new comment')
|
||||
expect(action.iconSvgInline([], view)).toBe('<svg>SvgMock</svg>')
|
||||
expect(action.iconSvgInline([], view)).toMatch(/<svg.+<\/svg>/)
|
||||
expect(action.enabled!([file], view)).toBe(true)
|
||||
expect(action.inline!(file, view)).toBe(true)
|
||||
expect(action.default).toBeUndefined()
|
||||
@@ -115,8 +116,8 @@ describe('Inline unread comments action enabled tests', () => {
|
||||
|
||||
describe('Inline unread comments action execute tests', () => {
|
||||
test('Action opens sidebar', async () => {
|
||||
const openMock = jest.fn()
|
||||
const setActiveTabMock = jest.fn()
|
||||
const openMock = vi.fn()
|
||||
const setActiveTabMock = vi.fn()
|
||||
window.OCA = {
|
||||
Files: {
|
||||
Sidebar: {
|
||||
@@ -145,8 +146,8 @@ describe('Inline unread comments action execute tests', () => {
|
||||
})
|
||||
|
||||
test('Action handles sidebar open failure', async () => {
|
||||
const openMock = jest.fn(() => { throw new Error('Mock error') })
|
||||
const setActiveTabMock = jest.fn()
|
||||
const openMock = vi.fn(() => { throw new Error('Mock error') })
|
||||
const setActiveTabMock = vi.fn()
|
||||
window.OCA = {
|
||||
Files: {
|
||||
Sidebar: {
|
||||
@@ -155,7 +156,7 @@ describe('Inline unread comments action execute tests', () => {
|
||||
},
|
||||
},
|
||||
}
|
||||
jest.spyOn(logger, 'error').mockImplementation(() => jest.fn())
|
||||
vi.spyOn(logger, 'error').mockImplementation(() => vi.fn())
|
||||
|
||||
const file = new File({
|
||||
id: 1,
|
||||
|
||||
@@ -11,9 +11,9 @@ use OCP\Comments\ICommentsManager;
|
||||
use Test\TestCase;
|
||||
|
||||
class CommentersSorterTest extends TestCase {
|
||||
/** @var ICommentsManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var ICommentsManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $commentsManager;
|
||||
/** @var CommentersSorter */
|
||||
/** @var CommentersSorter */
|
||||
protected $sorter;
|
||||
|
||||
protected function setUp(): void {
|
||||
|
||||
@@ -13,7 +13,7 @@ use OCP\Comments\IComment;
|
||||
use Test\TestCase;
|
||||
|
||||
class EventHandlerTest extends TestCase {
|
||||
/** @var CommentsEventListener */
|
||||
/** @var CommentsEventListener */
|
||||
protected $eventHandler;
|
||||
|
||||
/** @var ActivityListener|\PHPUnit\Framework\MockObject\MockObject */
|
||||
|
||||
@@ -26,7 +26,7 @@ class ListenerTest extends TestCase {
|
||||
/** @var IURLGenerator|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $urlGenerator;
|
||||
|
||||
/** @var Listener */
|
||||
/** @var Listener */
|
||||
protected $listener;
|
||||
|
||||
protected function setUp(): void {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<name>Contacts Interaction</name>
|
||||
<summary>Manages interaction between accounts and contacts</summary>
|
||||
<description>Collect data about accounts and contacts interactions and provide an address book for the data</description>
|
||||
<version>1.11.0</version>
|
||||
<version>1.12.0</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Christoph Wurst</author>
|
||||
<author homepage="https://github.com/nextcloud/groupware">Nextcloud Groupware Team</author>
|
||||
@@ -21,7 +21,7 @@
|
||||
<category>social</category>
|
||||
<bugs>https://github.com/nextcloud/server/issues</bugs>
|
||||
<dependencies>
|
||||
<nextcloud min-version="30" max-version="30"/>
|
||||
<nextcloud min-version="31" max-version="31"/>
|
||||
</dependencies>
|
||||
<background-jobs>
|
||||
<job>OCA\ContactsInteraction\BackgroundJob\CleanupJob</job>
|
||||
@@ -30,5 +30,11 @@
|
||||
<address-book-plugins>
|
||||
<plugin>OCA\ContactsInteraction\AddressBookProvider</plugin>
|
||||
</address-book-plugins>
|
||||
<plugins>
|
||||
<plugin>OCA\ContactsInteraction\DAV\Plugin</plugin>
|
||||
</plugins>
|
||||
</sabre>
|
||||
<settings>
|
||||
<personal>OCA\ContactsInteraction\Settings\Personal</personal>
|
||||
</settings>
|
||||
</info>
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* @copyright Copyright (c) 2023 Thomas Citharel <nextcloud@tcit.fr>
|
||||
*
|
||||
* @author Thomas Citharel <nextcloud@tcit.fr>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
return [
|
||||
'ocs' => [
|
||||
['name' => 'config#disable', 'url' => '/config/user/disable', 'verb' => 'POST'],
|
||||
],
|
||||
];
|
||||
@@ -12,9 +12,12 @@ return array(
|
||||
'OCA\\ContactsInteraction\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\ContactsInteraction\\BackgroundJob\\CleanupJob' => $baseDir . '/../lib/BackgroundJob/CleanupJob.php',
|
||||
'OCA\\ContactsInteraction\\Card' => $baseDir . '/../lib/Card.php',
|
||||
'OCA\\ContactsInteraction\\DAV\\Plugin' => $baseDir . '/../lib/DAV/Plugin.php',
|
||||
'OCA\\ContactsInteraction\\Db\\CardSearchDao' => $baseDir . '/../lib/Db/CardSearchDao.php',
|
||||
'OCA\\ContactsInteraction\\Db\\RecentContact' => $baseDir . '/../lib/Db/RecentContact.php',
|
||||
'OCA\\ContactsInteraction\\Db\\RecentContactMapper' => $baseDir . '/../lib/Db/RecentContactMapper.php',
|
||||
'OCA\\ContactsInteraction\\Listeners\\ContactInteractionListener' => $baseDir . '/../lib/Listeners/ContactInteractionListener.php',
|
||||
'OCA\\ContactsInteraction\\Listeners\\UserPreferenceListener' => $baseDir . '/../lib/Listeners/UserPreferenceListener.php',
|
||||
'OCA\\ContactsInteraction\\Migration\\Version010000Date20200304152605' => $baseDir . '/../lib/Migration/Version010000Date20200304152605.php',
|
||||
'OCA\\ContactsInteraction\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
|
||||
);
|
||||
|
||||
@@ -27,11 +27,14 @@ class ComposerStaticInitContactsInteraction
|
||||
'OCA\\ContactsInteraction\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
|
||||
'OCA\\ContactsInteraction\\BackgroundJob\\CleanupJob' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupJob.php',
|
||||
'OCA\\ContactsInteraction\\Card' => __DIR__ . '/..' . '/../lib/Card.php',
|
||||
'OCA\\ContactsInteraction\\DAV\\Plugin' => __DIR__ . '/..' . '/../lib/DAV/Plugin.php',
|
||||
'OCA\\ContactsInteraction\\Db\\CardSearchDao' => __DIR__ . '/..' . '/../lib/Db/CardSearchDao.php',
|
||||
'OCA\\ContactsInteraction\\Db\\RecentContact' => __DIR__ . '/..' . '/../lib/Db/RecentContact.php',
|
||||
'OCA\\ContactsInteraction\\Db\\RecentContactMapper' => __DIR__ . '/..' . '/../lib/Db/RecentContactMapper.php',
|
||||
'OCA\\ContactsInteraction\\Listeners\\ContactInteractionListener' => __DIR__ . '/..' . '/../lib/Listeners/ContactInteractionListener.php',
|
||||
'OCA\\ContactsInteraction\\Listeners\\UserPreferenceListener' => __DIR__ . '/..' . '/../lib/Listeners/UserPreferenceListener.php',
|
||||
'OCA\\ContactsInteraction\\Migration\\Version010000Date20200304152605' => __DIR__ . '/..' . '/../lib/Migration/Version010000Date20200304152605.php',
|
||||
'OCA\\ContactsInteraction\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
|
||||
@@ -3,8 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Recently contacted" : "Contactes recents",
|
||||
"Contacts Interaction" : "Interacció amb contactes",
|
||||
"Manages interaction between accounts and contacts" : "Gestiona la interacció entre comptes i contactes",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Reculliu dades sobre comptes i interaccions de contactes i proporcioneu una llibreta d'adreces per a les dades",
|
||||
"Manages interaction between users and contacts" : "Administra la interacció entre usuaris i contactes",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Recopileu dades sobre les interaccions d'usuaris i contactes i proporcioneu una llibreta d'adreces amb les dades"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Contactes recents",
|
||||
"Contacts Interaction" : "Interacció amb contactes",
|
||||
"Manages interaction between accounts and contacts" : "Gestiona la interacció entre comptes i contactes",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Reculliu dades sobre comptes i interaccions de contactes i proporcioneu una llibreta d'adreces per a les dades",
|
||||
"Manages interaction between users and contacts" : "Administra la interacció entre usuaris i contactes",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Recopileu dades sobre les interaccions d'usuaris i contactes i proporcioneu una llibreta d'adreces amb les dades"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
|
||||
@@ -3,8 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Recently contacted" : "Nedávno kontaktovaní",
|
||||
"Contacts Interaction" : "Interakce s kontakty",
|
||||
"Manages interaction between accounts and contacts" : "Spravuje interakci mezi účty a kontakty",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi účty a kontakty a poskytuje pro tato data adresář kontaktů",
|
||||
"Manages interaction between users and contacts" : "Spravuje interakci mezi uživateli a kontakty",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi uživatelem a kontakty a poskytuje pro tato data adresář kontaktů"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Nedávno kontaktovaní",
|
||||
"Contacts Interaction" : "Interakce s kontakty",
|
||||
"Manages interaction between accounts and contacts" : "Spravuje interakci mezi účty a kontakty",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi účty a kontakty a poskytuje pro tato data adresář kontaktů",
|
||||
"Manages interaction between users and contacts" : "Spravuje interakci mezi uživateli a kontakty",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Shromažďuje data o interakcích mezi uživatelem a kontakty a poskytuje pro tato data adresář kontaktů"
|
||||
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
|
||||
|
||||
@@ -3,8 +3,6 @@ OC.L10N.register(
|
||||
{
|
||||
"Recently contacted" : "Недавние контакты",
|
||||
"Contacts Interaction" : "Взаимодействие с контактами",
|
||||
"Manages interaction between accounts and contacts" : "Управляет взаимодействием между учетными записями и контактами",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Соберите данные об учетных записях и контактах, взаимодействиях и предоставьте адресную книгу для хранения этих данных",
|
||||
"Manages interaction between users and contacts" : "Отслеживание взаимодейтсвей пользователей и контактов",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Сбор данных о взаимодействиях пользователей и контактов и создание адресных книг на основе этих данных"
|
||||
},
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "Недавние контакты",
|
||||
"Contacts Interaction" : "Взаимодействие с контактами",
|
||||
"Manages interaction between accounts and contacts" : "Управляет взаимодействием между учетными записями и контактами",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "Соберите данные об учетных записях и контактах, взаимодействиях и предоставьте адресную книгу для хранения этих данных",
|
||||
"Manages interaction between users and contacts" : "Отслеживание взаимодейтсвей пользователей и контактов",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "Сбор данных о взаимодействиях пользователей и контактов и создание адресных книг на основе этих данных"
|
||||
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
OC.L10N.register(
|
||||
"contactsinteraction",
|
||||
{
|
||||
"Recently contacted" : "يېقىندا ئالاقىلاشتى",
|
||||
"Contacts Interaction" : "ئالاقىلىشىش",
|
||||
"Manages interaction between accounts and contacts" : "ھېسابات ۋە ئالاقىلەر ئارىسىدىكى ئالاقىنى باشقۇرىدۇ",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "ھېسابات ۋە ئالاقىلىشىش ھەققىدىكى ئۇچۇرلارنى توپلاڭ ۋە سانلىق مەلۇمات ئۈچۈن ئادرېس دەپتىرى بىلەن تەمىنلەڭ",
|
||||
"Manages interaction between users and contacts" : "ئىشلەتكۈچىلەر بىلەن ئالاقىلاشقۇچىلار ئوتتۇرىسىدىكى ئالاقىنى باشقۇرىدۇ",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "ئىشلەتكۈچى ۋە ئالاقىلىشىش ئالاقىسى توغرىسىدىكى ئۇچۇرلارنى توپلاڭ ۋە سانلىق مەلۇمات ئۈچۈن ئادرېس دەپتىرى بىلەن تەمىنلەڭ"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
@@ -1,9 +0,0 @@
|
||||
{ "translations": {
|
||||
"Recently contacted" : "يېقىندا ئالاقىلاشتى",
|
||||
"Contacts Interaction" : "ئالاقىلىشىش",
|
||||
"Manages interaction between accounts and contacts" : "ھېسابات ۋە ئالاقىلەر ئارىسىدىكى ئالاقىنى باشقۇرىدۇ",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "ھېسابات ۋە ئالاقىلىشىش ھەققىدىكى ئۇچۇرلارنى توپلاڭ ۋە سانلىق مەلۇمات ئۈچۈن ئادرېس دەپتىرى بىلەن تەمىنلەڭ",
|
||||
"Manages interaction between users and contacts" : "ئىشلەتكۈچىلەر بىلەن ئالاقىلاشقۇچىلار ئوتتۇرىسىدىكى ئالاقىنى باشقۇرىدۇ",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "ئىشلەتكۈچى ۋە ئالاقىلىشىش ئالاقىسى توغرىسىدىكى ئۇچۇرلارنى توپلاڭ ۋە سانلىق مەلۇمات ئۈچۈن ئادرېس دەپتىرى بىلەن تەمىنلەڭ"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -6,6 +6,6 @@ OC.L10N.register(
|
||||
"Manages interaction between accounts and contacts" : "管理帳號與聯絡人間的互動",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "蒐集關於帳號與聯絡人互動的資料,並提供資料的通訊錄",
|
||||
"Manages interaction between users and contacts" : "管理使用者與聯絡人間的互動",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "蒐集關於使用者與聯絡人互動的資料,並為資料提供聯絡人"
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "蒐集關於使用者與聯絡人互動的資料,並提供資料的通訊錄"
|
||||
},
|
||||
"nplurals=1; plural=0;");
|
||||
|
||||
@@ -4,6 +4,6 @@
|
||||
"Manages interaction between accounts and contacts" : "管理帳號與聯絡人間的互動",
|
||||
"Collect data about accounts and contacts interactions and provide an address book for the data" : "蒐集關於帳號與聯絡人互動的資料,並提供資料的通訊錄",
|
||||
"Manages interaction between users and contacts" : "管理使用者與聯絡人間的互動",
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "蒐集關於使用者與聯絡人互動的資料,並為資料提供聯絡人"
|
||||
"Collect data about user and contacts interactions and provide an address book for the data" : "蒐集關於使用者與聯絡人互動的資料,並提供資料的通訊錄"
|
||||
},"pluralForm" :"nplurals=1; plural=0;"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user