Merge remote-tracking branch 'nextcloud/master'

Signed-off-by: Sandro Lutz <sandro.lutz@temparus.ch>
This commit is contained in:
Sandro Lutz 2017-02-07 00:12:45 +01:00
commit fa1d607bfa
1293 changed files with 36321 additions and 19156 deletions

View File

@ -13,14 +13,14 @@ pipeline:
matrix:
TESTS: jsunit
check-autoloader:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- bash ./build/autoloaderchecker.sh
when:
matrix:
TESTS: check-autoloader
app-check-code:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- ./occ app:check-code admin_audit
- ./occ app:check-code comments
@ -33,14 +33,14 @@ pipeline:
matrix:
TESTS: app-check-code
signed-off-check:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- php ./build/signed-off-checker.php
when:
matrix:
TESTS: signed-off-check
htaccess-checker:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- php ./build/htaccess-checker.php
when:
@ -55,7 +55,7 @@ pipeline:
matrix:
TESTS: syntax-php5.6
syntax-php7.0:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- composer install
- ./lib/composer/bin/parallel-lint --exclude lib/composer/jakub-onderka/ --exclude 3rdparty/symfony/polyfill-php70/Resources/stubs/ --exclude 3rdparty/patchwork/utf8/src/Patchwork/Utf8/Bootup/ --exclude 3rdparty/paragonie/random_compat/lib/ --exclude lib/composer/composer/autoload_static.php --exclude 3rdparty/composer/autoload_static.php .
@ -86,24 +86,81 @@ pipeline:
when:
matrix:
TESTS: litmus-v2
caldavtester:
caldavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/caldav/install.sh
- bash apps/dav/tests/travis/caldav/script.sh
- bash apps/dav/tests/travis/caldav/script-new-endpoint.sh
when:
matrix:
TESTS: caldavtester
carddavtester:
TESTS: caldavtester-new-endpoint
caldavtester-old-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/caldav/install.sh
- bash apps/dav/tests/travis/caldav/script-old-endpoint.sh
when:
matrix:
TESTS: caldavtester-old-endpoint
carddavtester-new-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/carddav/install.sh
- bash apps/dav/tests/travis/carddav/script.sh
- bash apps/dav/tests/travis/carddav/script-new-endpoint.sh
when:
matrix:
TESTS: carddavtester
TESTS: carddavtester-new-endpoint
carddavtester-old-endpoint:
image: nextcloudci/litmus-php7.0:litmus-php7.0-4
commands:
- bash tests/travis/install.sh sqlite
- bash apps/dav/tests/travis/carddav/install.sh
- bash apps/dav/tests/travis/carddav/script-old-endpoint.sh
when:
matrix:
TESTS: carddavtester-old-endpoint
sqlite-php7.0-samba-native:
image: nextcloudci/samba-native-php7.0:samba-native-php7.0-1
commands:
- smbd -D -FS &
- ./autotest-external.sh sqlite smb-linux
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-samba-native
sqlite-php7.0-samba-non-native:
image: nextcloudci/samba-non-native-php7.0:samba-non-native-php7.0-2
commands:
- smbd -D -FS &
- ./autotest-external.sh sqlite smb-linux
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-smb-linux.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-samba-non-native
sqlite-php7.0-webdav-apache:
image: nextcloudci/webdav-apache-php7.0
commands:
- apache2
- ./autotest-external.sh sqlite webdav-apachedrone
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-external-clover-sqlite-webdav-apachedrone.xml; fi"
when:
matrix:
TESTS: sqlite-php7.0-webdav-apache
nodb-php5.6:
image: nextcloudci/php5.6:php5.6-7
commands:
@ -113,7 +170,7 @@ pipeline:
DB: NODB
PHP: 5.6
nodb-php7.0:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- NOCOVERAGE=true TEST_SELECTION=NODB ./autotest.sh sqlite
when:
@ -137,7 +194,7 @@ pipeline:
DB: sqlite
PHP: 5.6
sqlite-php7.0:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- NOCOVERAGE=true TEST_SELECTION=DB ./autotest.sh sqlite
when:
@ -178,7 +235,7 @@ pipeline:
DB: mysqlmb4
PHP: 5.6
integration-capabilities_features:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -187,7 +244,7 @@ pipeline:
matrix:
TESTS: integration-capabilities_features
integration-federation_features:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -196,7 +253,7 @@ pipeline:
matrix:
TESTS: integration-federation_features
integration-auth:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -205,7 +262,7 @@ pipeline:
matrix:
TESTS: integration-auth
integration-carddav:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -214,7 +271,7 @@ pipeline:
matrix:
TESTS: integration-carddav
integration-dav-v2:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -223,7 +280,7 @@ pipeline:
matrix:
TESTS: integration-dav-v2
integration-ocs-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -232,7 +289,7 @@ pipeline:
matrix:
TESTS: integration-ocs-v1
integration-sharing-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -241,7 +298,7 @@ pipeline:
matrix:
TESTS: integration-sharing-v1
integration-checksums-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -250,7 +307,7 @@ pipeline:
matrix:
TESTS: integration-checksums
integration-external-storage:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -259,7 +316,7 @@ pipeline:
matrix:
TESTS: integration-external-storage
integration-provisioning-v1:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -268,7 +325,7 @@ pipeline:
matrix:
TESTS: integration-provisioning-v1
integration-tags:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -277,7 +334,7 @@ pipeline:
matrix:
TESTS: integration-tags
integration-caldav:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -286,7 +343,7 @@ pipeline:
matrix:
TESTS: integration-caldav
integration-comments:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -295,7 +352,7 @@ pipeline:
matrix:
TESTS: integration-comments
integration-favorites:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -304,7 +361,7 @@ pipeline:
matrix:
TESTS: integration-favorites
integration-provisioning-v2:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -313,7 +370,7 @@ pipeline:
matrix:
TESTS: integration-provisioning-v2
integration-webdav-related:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -322,7 +379,7 @@ pipeline:
matrix:
TESTS: integration-webdav-related
integration-sharees-features:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -331,7 +388,7 @@ pipeline:
matrix:
TESTS: integration-sharees-features
integration-setup-features:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- cd build/integration
- ./run.sh setup_features/setup.feature
@ -339,7 +396,7 @@ pipeline:
matrix:
TESTS: integration-setup-features
integration-filesdrop-features:
image: nextcloudci/integration-php7.0:integration-php7.0-2
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
@ -347,8 +404,27 @@ pipeline:
when:
matrix:
TESTS: integration-filesdrop-features
integration-transfer-ownership-features:
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- cd build/integration
- ./run.sh features/transfer-ownership.feature
when:
matrix:
TESTS: integration-transfer-ownership-features
integration-ldap-features:
image: nextcloudci/integration-php7.0:integration-php7.0-3
commands:
- ./occ maintenance:install --admin-pass=admin
- ./occ app:enable user_ldap
- cd build/integration
- ./run.sh ldap_features/ldap-ocs.feature
when:
matrix:
TESTS: integration-ldap-features
nodb-codecov:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- TEST_SELECTION=NODB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
@ -358,7 +434,7 @@ pipeline:
matrix:
TESTS: nodb-codecov
db-codecov:
image: nextcloudci/php7.0:php7.0-6
image: nextcloudci/php7.0:php7.0-7
commands:
- TEST_SELECTION=QUICKDB ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
@ -367,12 +443,33 @@ pipeline:
when:
matrix:
TESTS: db-codecov
object-store:
image: nextcloudci/php7.0:php7.0-7
commands:
- TEST_SELECTION=PRIMARY-${OBJECT_STORE} ./autotest.sh sqlite
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TESTS: object-store
memcache-memcached:
image: nextcloudci/php7.0-memcached:php7.0-memcached-6
commands:
- service memcached restart
- ./autotest.sh sqlite tests/lib/Memcache/MemcachedTest.php
- wget https://codecov.io/bash -O codecov.sh
- sh -c "if [ '$DRONE_BUILD_EVENT' = 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -P $DRONE_PULL_REQUEST -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
- sh -c "if [ '$DRONE_BUILD_EVENT' != 'pull_request' ]; then bash codecov.sh -B $DRONE_BRANCH -C $DRONE_COMMIT -t 117641e2-a9e8-4b7b-984b-ae872d9b05f5 -f tests/autotest-clover-sqlite.xml; fi"
when:
matrix:
TEST: memcache-memcached
matrix:
include:
- TESTS: signed-off-check
- TESTS: htaccess-checker
- TESTS: nodb-codecov
- TESTS: db-codecov
- TESTS: db-codecov
- TESTS: integration-capabilities_features
- TESTS: integration-federation_features
- TESTS: integration-auth
@ -392,6 +489,8 @@ matrix:
- TESTS: integration-sharees-features
- TESTS: integration-setup-features
- TESTS: integration-filesdrop-features
- TESTS: integration-transfer-ownership-features
- TESTS: integration-ldap-features
- TESTS: jsunit
- TESTS: check-autoloader
- TESTS: app-check-code
@ -400,8 +499,16 @@ matrix:
- TESTS: syntax-php7.1
- TESTS: litmus-v1
- TESTS: litmus-v2
- TESTS: caldavtester
- TESTS: carddavtester
- TESTS: caldavtester-old-endpoint
- TESTS: caldavtester-new-endpoint
- TESTS: carddavtester-new-endpoint
- TESTS: carddavtester-old-endpoint
- TESTS: object-store
OBJECT_STORE: s3
- TESTS: sqlite-php7.0-samba-native
- TESTS: sqlite-php7.0-samba-non-native
- TEST: memcache-memcached
- TESTS: sqlite-php7.0-webdav-apache
- DB: NODB
PHP: 5.6
- DB: NODB
@ -453,3 +560,8 @@ services:
when:
matrix:
DB: mysqlmb4
fake-s3:
image: lphoward/fake-s3
when:
matrix:
OBJECT_STORE: s3

1
.gitignore vendored
View File

@ -124,6 +124,7 @@ Vagrantfile
# Tests - auto-generated files
/data-autotest
/tests/coverage*
/tests/css
/tests/karma-coverage
/tests/autoconfig*
/tests/autotest*

@ -1 +1 @@
Subproject commit f2974c2e72b2ad5ab7ae745936c4d866405d2b61
Subproject commit 489bcf4f81e462f4d74f0b76f58caeabd58e75de

View File

@ -1,7 +1,7 @@
ChangeLog
=========
NC 11 (????-??-??)
NC 11 (2016-12-13)
------------------
* PHP 5.4 and 5.5 no longer supported
* PHP 7.1 support

View File

@ -58,7 +58,7 @@ like `git config --global alias.ci 'commit -s'`. Now you can commit with
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
[devmanual]: https://docs.nextcloud.org/server/11/developer_manual/
[devmanual]: https://docs.nextcloud.org/server/12/developer_manual/
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md

View File

@ -2,14 +2,12 @@
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
<description>Provides logging abilities for Nextcloud such as logging file
accesses or otherwise sensitive actions.
</description>
<description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<licence>AGPL</licence>
<author>Nextcloud</author>
<version>1.1.0</version>
<version>1.2.0</version>
<dependencies>
<nextcloud min-version="11" max-version="11" />
<nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>

View File

@ -6,9 +6,9 @@
<licence>AGPL</licence>
<author>Arthur Schiwon, Vincent Petry</author>
<default_enable/>
<version>1.1.0</version>
<version>1.2.0</version>
<dependencies>
<nextcloud min-version="11" max-version="11" />
<nextcloud min-version="12" max-version="12" />
</dependencies>
<types>
<logging/>

View File

@ -9,7 +9,20 @@
*/
(function(OC, OCA) {
var NS_OWNCLOUD = 'http://owncloud.org/ns';
_.extend(OC.Files.Client, {
PROPERTY_FILEID: '{' + OC.Files.Client.NS_OWNCLOUD + '}id',
PROPERTY_MESSAGE: '{' + OC.Files.Client.NS_OWNCLOUD + '}message',
PROPERTY_ACTORTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorType',
PROPERTY_ACTORID: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorId',
PROPERTY_ISUNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}isUnread',
PROPERTY_OBJECTID: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectId',
PROPERTY_OBJECTTYPE: '{' + OC.Files.Client.NS_OWNCLOUD + '}objectType',
PROPERTY_ACTORDISPLAYNAME: '{' + OC.Files.Client.NS_OWNCLOUD + '}actorDisplayName',
PROPERTY_CREATIONDATETIME: '{' + OC.Files.Client.NS_OWNCLOUD + '}creationDateTime',
PROPERTY_MENTIONS: '{' + OC.Files.Client.NS_OWNCLOUD + '}mentions'
});
/**
* @class OCA.Comments.CommentModel
* @classdesc
@ -27,16 +40,16 @@
},
davProperties: {
'id': '{' + NS_OWNCLOUD + '}id',
'message': '{' + NS_OWNCLOUD + '}message',
'actorType': '{' + NS_OWNCLOUD + '}actorType',
'actorId': '{' + NS_OWNCLOUD + '}actorId',
'actorDisplayName': '{' + NS_OWNCLOUD + '}actorDisplayName',
'creationDateTime': '{' + NS_OWNCLOUD + '}creationDateTime',
'objectType': '{' + NS_OWNCLOUD + '}objectType',
'objectId': '{' + NS_OWNCLOUD + '}objectId',
'isUnread': '{' + NS_OWNCLOUD + '}isUnread',
'mentions': '{' + NS_OWNCLOUD + '}mentions'
'id': OC.Files.Client.PROPERTY_FILEID,
'message': OC.Files.Client.PROPERTY_MESSAGE,
'actorType': OC.Files.Client.PROPERTY_ACTORTYPE,
'actorId': OC.Files.Client.PROPERTY_ACTORID,
'actorDisplayName': OC.Files.Client.PROPERTY_ACTORDISPLAYNAME,
'creationDateTime': OC.Files.Client.PROPERTY_CREATIONDATETIME,
'objectType': OC.Files.Client.PROPERTY_OBJECTTYPE,
'objectId': OC.Files.Client.PROPERTY_OBJECTID,
'isUnread': OC.Files.Client.PROPERTY_ISUNREAD,
'mentions': OC.Files.Client.PROPERTY_MENTIONS
},
parse: function(data) {
@ -78,4 +91,3 @@
OCA.Comments.CommentModel = CommentModel;
})(OC, OCA);

View File

@ -9,13 +9,17 @@
*/
(function(OC, OCA) {
var NS_OWNCLOUD = 'http://owncloud.org/ns';
_.extend(OC.Files.Client, {
PROPERTY_READMARKER: '{' + OC.Files.Client.NS_OWNCLOUD + '}readMarker'
});
/**
* @class OCA.Comments.CommentSummaryModel
* @classdesc
*
* Model containing summary information related to comments
* like the read marker.
* like the read marker.
*
*/
var CommentSummaryModel = OC.Backbone.Model.extend(
@ -37,7 +41,7 @@
_objectId: null,
davProperties: {
'readMarker': '{' + NS_OWNCLOUD + '}readMarker'
'readMarker': OC.Files.Client.PROPERTY_READMARKER
},
/**
@ -62,4 +66,3 @@
OCA.Comments.CommentSummaryModel = CommentSummaryModel;
})(OC, OCA);

View File

@ -11,6 +11,11 @@
/* global Handlebars */
(function() {
_.extend(OC.Files.Client, {
PROPERTY_COMMENTS_UNREAD: '{' + OC.Files.Client.NS_OWNCLOUD + '}comments-unread'
});
var TEMPLATE_COMMENTS_UNREAD =
'<a class="action action-comment permanent" title="{{countMessage}}" href="#">' +
'<img class="svg" src="{{iconUrl}}"/>' +
@ -52,19 +57,17 @@
fileList.registerTabView(new OCA.Comments.CommentsTabView('commentsTabView'));
var NS_OC = 'http://owncloud.org/ns';
var oldGetWebdavProperties = fileList._getWebdavProperties;
fileList._getWebdavProperties = function() {
var props = oldGetWebdavProperties.apply(this, arguments);
props.push('{' + NS_OC + '}comments-unread');
props.push(OC.Files.Client.PROPERTY_COMMENTS_UNREAD);
return props;
};
fileList.filesClient.addFileInfoParser(function(response) {
var data = {};
var props = response.propStat[0].properties;
var commentsUnread = props['{' + NS_OC + '}comments-unread'];
var commentsUnread = props[OC.Files.Client.PROPERTY_COMMENTS_UNREAD];
if (!_.isUndefined(commentsUnread) && commentsUnread !== '') {
data.commentsUnread = parseInt(commentsUnread, 10);
}

View File

@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
"Type in a new comment..." : "Escriu en un nou comentari...",
"Comments" : "Comentaris",
"Unknown user" : "Usuari desconegut",
"New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No other comments available" : "No hi han altres comentaris disponibles",
"More comments..." : "Més comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
"{count} unread comments" : "{count} comentaris no llegits",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
"You commented" : "Has comentat",
"%1$s commented" : "%1$s comentat",
"You commented on %2$s" : "Has comentat a %2$s",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
"You commented on %1$s" : "Heu comentat a %1$s",
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"Type in a new comment..." : "Escriviu un nou comentari...",
"No other comments available" : "No hi ha altres comentaris disponibles",
"More comments..." : "Més comentaris...",
"{count} unread comments" : "{count} comentaris no llegits",
"You commented on %2$s" : "Heu comentat a %2$s"
},
"nplurals=2; plural=(n != 1);");

View File

@ -1,21 +1,37 @@
{ "translations": {
"Type in a new comment..." : "Escriu en un nou comentari...",
"Comments" : "Comentaris",
"Unknown user" : "Usuari desconegut",
"New comment …" : "Nou comentari...",
"Delete comment" : "Esborrar comentari",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"Edit comment" : "Editar comentari",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No other comments available" : "No hi han altres comentaris disponibles",
"More comments..." : "Més comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "caracters Permessos {count} de {max}",
"{count} unread comments" : "{count} comentaris no llegits",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with id {id}" : "Hi ha hagut un error en extraure el comentari amb id {id}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentaris</strong> per arxius <em>(sempre llistat en corrent)",
"You commented" : "Has comentat",
"%1$s commented" : "%1$s comentat",
"You commented on %2$s" : "Has comentat a %2$s",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s"
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
"You commented on %1$s" : "Heu comentat a %1$s",
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"A (now) deleted user mentioned you in a comment on “%s”" : "Un usuari (ara) esborrat us ha nomenat en un comentari a “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Un usuari (ara) esborrat us ha nomenat en un comentari de “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"Type in a new comment..." : "Escriviu un nou comentari...",
"No other comments available" : "No hi ha altres comentaris disponibles",
"More comments..." : "Més comentaris...",
"{count} unread comments" : "{count} comentaris no llegits",
"You commented on %2$s" : "Heu comentat a %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentoval(a) jste %1$s",
"You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",

View File

@ -18,8 +18,16 @@
"Comment" : "Komentář",
"You commented" : "Okomentoval(a) jsi",
"%1$s commented" : "%1$s okomentován",
"{author} commented" : "{author} okomentoval(a)",
"You commented on %1$s" : "Okomentoval(a) jste %1$s",
"You commented on {file}" : "Okomentoval(a) jste {file}",
"%1$s commented on %2$s" : "%1$s okomentoval %2$s",
"{author} commented on {file}" : "{author} okomentoval(a) {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáře</strong> souborů",
"A (now) deleted user mentioned you in a comment on “%s”" : "A (now) deleted user mentioned you in a comment on “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Nyní již smazaný uživatel vás zmínil v komentáři u \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s vás zmínil(a) v komentáři u %2$s",
"{user} mentioned you in a comment on “{file}”" : "{user} vás zmínil v komentáři u “{file}”",
"Type in a new comment..." : "Zadat nový komentář...",
"No other comments available" : "Nejsou dostupné žádné další komentáře",
"More comments..." : "Více komentářů...",

View File

@ -20,16 +20,16 @@ OC.L10N.register(
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentiert",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s erwähnt Sie in einem Kommentar zu “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} erwähnt Sie in einem Kommentar zu “{file}”",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Type in a new comment..." : "Neuen Kommentar eingeben...",
"No other comments available" : "Keine weiteren Kommentare verfügbar",
"More comments..." : "Weitere Kommentare...",

View File

@ -18,16 +18,16 @@
"Comment" : "Kommentar",
"You commented" : "Sie haben kommentiert",
"%1$s commented" : "%1$s kommentierte",
"{author} commented" : "{author} kommentiert",
"{author} commented" : "{author} kommentierte",
"You commented on %1$s" : "Sie haben %1$s kommentiert",
"You commented on {file}" : "Sie haben {file} kommentiert",
"%1$s commented on %2$s" : "%1$s kommentierte %2$s",
"{author} commented on {file}" : "{author} hat {file} kommentiert",
"<strong>Comments</strong> for files" : "<strong>Kommentare</strong> für Dateien",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Nutzer erwähnt Sie in einem Kommentar zu “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s erwähnt Sie in einem Kommentar zu “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} erwähnt Sie in einem Kommentar zu “{file}”",
"A (now) deleted user mentioned you in a comment on “%s”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu \"%s\" erwähnt",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Ein (nun) gelöschter Benutzer hat Sie in einem Kommentar zu “{file}” erwähnt",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s hat Sie in einem Kommentar zu “%2$s” erwähnt.",
"{user} mentioned you in a comment on “{file}”" : "{user} hat Sie in einem Kommentar zu “{file}” erwähnt",
"Type in a new comment..." : "Neuen Kommentar eingeben...",
"No other comments available" : "Keine weiteren Kommentare verfügbar",
"More comments..." : "Weitere Kommentare...",

View File

@ -9,7 +9,7 @@ OC.L10N.register(
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
"No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
"No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",

View File

@ -7,7 +7,7 @@
"Cancel" : "Annuler",
"Edit comment" : "Modifier le commentaire",
"[Deleted user]" : "[Utilisateur supprimé]",
"No comments yet, start the conversation!" : "Il n'y a aucun commentaire, démarrer la conversation!",
"No comments yet, start the conversation!" : "Aucun commentaire actuellement, débutez une conversation !",
"More comments …" : "Plus de commentaires ...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",

View File

@ -2,25 +2,36 @@ OC.L10N.register(
"comments",
{
"Comments" : "Komentāri",
"Unknown user" : "Nezināms lietotājs",
"New comment …" : "Jauns komentārs...",
"Delete comment" : "Dzēst komentāru",
"Post" : "Pievienot",
"Cancel" : "Atcelt",
"Edit comment" : "Rediģēt komentāru",
"[Deleted user]" : "[Dzēsts lietotājs]",
"No comments yet, start the conversation!" : "Vēl nav komentāru, uzsāciet sarunu!",
"More comments …" : "Vairāk komentāri...",
"Save" : "Saglabāt",
"Allowed characters {count} of {max}" : "Atļautās zīmes {count} no {max}",
"Error occurred while retrieving comment with id {id}" : "Notika kļūda saņemot komentāru ar id {id}",
"Error occurred while updating comment with id {id}" : "Kļūda atjauninot komentāru ar id {id}",
"Error occurred while posting comment" : "Notika kļūda pievienojot komentāru",
"_%n unread comment_::_%n unread comments_" : ["%n nelasīti komentāri","%n nelasīti komentāri","%n nelasīti komentāri"],
"Comment" : "Komentārs",
"<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"You commented" : "Tu komentēji",
"%1$s commented" : "%1$s komentēja",
"You commented on %2$s" : "Tu komentēji %2$s",
"{author} commented" : "{author} komentēja",
"You commented on %1$s" : "Tu komentēji %1$s",
"You commented on {file}" : "Tu komentēji {file}",
"%1$s commented on %2$s" : "%1$s komentēja %2$s",
"{author} commented on {file}" : "{author} komentārs {file}",
"<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s minēja jūs komentārā “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} minēja jūs komentārā “{file}”",
"Type in a new comment..." : "Raksti jaunu komentāru...",
"No other comments available" : "Nav pieejami citi komentāri",
"More comments..." : "Vairāk komentāri...",
"{count} unread comments" : "{count} neizlasītu komentāru"
"{count} unread comments" : "{count} neizlasītu komentāru",
"You commented on %2$s" : "Tu komentēji %2$s"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");

View File

@ -1,24 +1,35 @@
{ "translations": {
"Comments" : "Komentāri",
"Unknown user" : "Nezināms lietotājs",
"New comment …" : "Jauns komentārs...",
"Delete comment" : "Dzēst komentāru",
"Post" : "Pievienot",
"Cancel" : "Atcelt",
"Edit comment" : "Rediģēt komentāru",
"[Deleted user]" : "[Dzēsts lietotājs]",
"No comments yet, start the conversation!" : "Vēl nav komentāru, uzsāciet sarunu!",
"More comments …" : "Vairāk komentāri...",
"Save" : "Saglabāt",
"Allowed characters {count} of {max}" : "Atļautās zīmes {count} no {max}",
"Error occurred while retrieving comment with id {id}" : "Notika kļūda saņemot komentāru ar id {id}",
"Error occurred while updating comment with id {id}" : "Kļūda atjauninot komentāru ar id {id}",
"Error occurred while posting comment" : "Notika kļūda pievienojot komentāru",
"_%n unread comment_::_%n unread comments_" : ["%n nelasīti komentāri","%n nelasīti komentāri","%n nelasīti komentāri"],
"Comment" : "Komentārs",
"<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"You commented" : "Tu komentēji",
"%1$s commented" : "%1$s komentēja",
"You commented on %2$s" : "Tu komentēji %2$s",
"{author} commented" : "{author} komentēja",
"You commented on %1$s" : "Tu komentēji %1$s",
"You commented on {file}" : "Tu komentēji {file}",
"%1$s commented on %2$s" : "%1$s komentēja %2$s",
"{author} commented on {file}" : "{author} komentārs {file}",
"<strong>Comments</strong> for files" : "<strong>Komentāri</strong> datnēm",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s minēja jūs komentārā “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} minēja jūs komentārā “{file}”",
"Type in a new comment..." : "Raksti jaunu komentāru...",
"No other comments available" : "Nav pieejami citi komentāri",
"More comments..." : "Vairāk komentāri...",
"{count} unread comments" : "{count} neizlasītu komentāru"
"{count} unread comments" : "{count} neizlasītu komentāru",
"You commented on %2$s" : "Tu komentēji %2$s"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
}

View File

@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Kommentar",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
"{author} commented" : "{author} kommenterte",
"You commented on %1$s" : "Du kommenterte på %1$s",
"You commented on {file}" : "Du kommenterte på {file}",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
"{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
"No other comments available" : "Ingen andre kommentarer tilgjengelig",
"More comments..." : "Flere kommentarer..",

View File

@ -18,8 +18,16 @@
"Comment" : "Kommentar",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
"{author} commented" : "{author} kommenterte",
"You commented on %1$s" : "Du kommenterte på %1$s",
"You commented on {file}" : "Du kommenterte på {file}",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s",
"{author} commented on {file}" : "{author} kommenterte på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> for filer",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (now) slettet bruker nevnte deg i en kommentar til “%s”",
"A (now) deleted user mentioned you in a comment on “{file}”" : "A (now) slettet bruker nevnte deg i en kommentar til “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nevnte deg i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nevnte deg i en kommentar på “{file}”",
"Type in a new comment..." : "Skriv inn en ny kommentar...",
"No other comments available" : "Ingen andre kommentarer tilgjengelig",
"More comments..." : "Flere kommentarer..",

View File

@ -3,7 +3,7 @@ OC.L10N.register(
{
"Comments" : "Komentarze",
"Unknown user" : "Nieznany użytkownik",
"New comment …" : "Nowy komentarz ...",
"New comment …" : "Nowy komentarz...",
"Delete comment" : "Skasuj komentarz",
"Post" : "Zapisz",
"Cancel" : "Anuluj",
@ -16,9 +16,9 @@ OC.L10N.register(
"Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd",
"_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy"],
"_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy","%n nieprzeczytanych komentarzy"],
"Comment" : "Komentarz",
"You commented" : "Skomentowałeś/łaś",
"You commented" : "Skomentowałeś",
"%1$s commented" : "%1$s skomentował",
"{author} commented" : "{author} skomentował",
"You commented on %1$s" : "Skomentowałeś w %1$s",
@ -34,6 +34,6 @@ OC.L10N.register(
"No other comments available" : "Nie ma więcej komentarzy",
"More comments..." : "Więcej komentarzy...",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
"You commented on %2$s" : "Skomentowałeś/łaś %2$s"
"You commented on %2$s" : "Skomentowałeś %2$s"
},
"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");

View File

@ -1,7 +1,7 @@
{ "translations": {
"Comments" : "Komentarze",
"Unknown user" : "Nieznany użytkownik",
"New comment …" : "Nowy komentarz ...",
"New comment …" : "Nowy komentarz...",
"Delete comment" : "Skasuj komentarz",
"Post" : "Zapisz",
"Cancel" : "Anuluj",
@ -14,9 +14,9 @@
"Error occurred while retrieving comment with id {id}" : "W trakcie otrzymywania komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while updating comment with id {id}" : "W trakcie aktualizacji komentarza o identyfikatorze {id} wystąpił błąd.",
"Error occurred while posting comment" : "Podczas wysyłania komentarza wystąpił błąd",
"_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy"],
"_%n unread comment_::_%n unread comments_" : ["%n nieprzeczytany komentarz","%n nieprzeczytane komentarze","%n nieprzeczytanych komentarzy","%n nieprzeczytanych komentarzy"],
"Comment" : "Komentarz",
"You commented" : "Skomentowałeś/łaś",
"You commented" : "Skomentowałeś",
"%1$s commented" : "%1$s skomentował",
"{author} commented" : "{author} skomentował",
"You commented on %1$s" : "Skomentowałeś w %1$s",
@ -32,6 +32,6 @@
"No other comments available" : "Nie ma więcej komentarzy",
"More comments..." : "Więcej komentarzy...",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
"You commented on %2$s" : "Skomentowałeś/łaś %2$s"
"You commented on %2$s" : "Skomentowałeś %2$s"
},"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
}

View File

@ -2,7 +2,7 @@ OC.L10N.register(
"comments",
{
"Comments" : "Комментарии",
"Unknown user" : "Пользователь неизвестен",
"Unknown user" : "Неизвестный пользователь",
"New comment …" : "Новый комментарий...",
"Delete comment" : "Удалить комментарий",
"Post" : "Опубликовать",
@ -20,8 +20,16 @@ OC.L10N.register(
"Comment" : "Комментарий",
"You commented" : "Вы прокомментировали",
"%1$s commented" : "%1$s прокомментировано",
"{author} commented" : "{author} прокомментировал",
"You commented on %1$s" : "Вы прокомментировали %1$s",
"You commented on {file}" : "Вы прокомментировали {file}",
"%1$s commented on %2$s" : "%1$s прокомментировано на %2$s",
"{author} commented on {file}" : "{author} прокомментировал {file}",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам",
"A (now) deleted user mentioned you in a comment on “%s”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “%s”.",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “{file}”.",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s упомянул вас в комментарии к \"%2$s\"",
"{user} mentioned you in a comment on “{file}”" : "{user} упомянул вас в комментарии к “{file}”.",
"Type in a new comment..." : "Напишите новый комментарий...",
"No other comments available" : "Другие комментарии отсутствуют",
"More comments..." : "Ещё комментарии...",

View File

@ -1,6 +1,6 @@
{ "translations": {
"Comments" : "Комментарии",
"Unknown user" : "Пользователь неизвестен",
"Unknown user" : "Неизвестный пользователь",
"New comment …" : "Новый комментарий...",
"Delete comment" : "Удалить комментарий",
"Post" : "Опубликовать",
@ -18,8 +18,16 @@
"Comment" : "Комментарий",
"You commented" : "Вы прокомментировали",
"%1$s commented" : "%1$s прокомментировано",
"{author} commented" : "{author} прокомментировал",
"You commented on %1$s" : "Вы прокомментировали %1$s",
"You commented on {file}" : "Вы прокомментировали {file}",
"%1$s commented on %2$s" : "%1$s прокомментировано на %2$s",
"{author} commented on {file}" : "{author} прокомментировал {file}",
"<strong>Comments</strong> for files" : "<strong>Комментарии</strong> к файлам",
"A (now) deleted user mentioned you in a comment on “%s”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “%s”.",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Пользователь (удалённый в настоящее время) упомянул вас в комментарии к “{file}”.",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s упомянул вас в комментарии к \"%2$s\"",
"{user} mentioned you in a comment on “{file}”" : "{user} упомянул вас в комментарии к “{file}”.",
"Type in a new comment..." : "Напишите новый комментарий...",
"No other comments available" : "Другие комментарии отсутствуют",
"More comments..." : "Ещё комментарии...",

View File

@ -1,8 +1,34 @@
OC.L10N.register(
"comments",
{
"Comments" : "Komentáre",
"Unknown user" : "Neznámy používateľ",
"New comment …" : "Nový komentár ...",
"Delete comment" : "Zmazať komentár",
"Post" : "Odoslať",
"Cancel" : "Zrušiť",
"Edit comment" : "Upraviť komentár",
"[Deleted user]" : "[Zmazaný užívateľ]",
"No comments yet, start the conversation!" : "Žiadne komentáre, začnite konverzáciu!",
"More comments …" : "Ďalšie komentáre ...",
"Save" : "Uložiť",
"Comment" : "Komentár"
"Allowed characters {count} of {max}" : "Počet povolených znakov {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Pri načítavaní komentára s id {id} nastala chyba",
"Error occurred while updating comment with id {id}" : "Pri aktualizovaní komentára s id {id} nastala chyba",
"Error occurred while posting comment" : "Pri odosielaní komentára nastala chyba",
"_%n unread comment_::_%n unread comments_" : ["%n neprečítaný komentár","%n neprečítaných komentárov","%n neprečítaných komentárov"],
"Comment" : "Komentár",
"You commented" : "Komentovali ste",
"%1$s commented" : "%1$s komentoval",
"{author} commented" : "{author} komentoval",
"You commented on %1$s" : "Komentovali ste %1$s",
"You commented on {file}" : "Komentovali ste {file}",
"%1$s commented on %2$s" : "%1$s komentoval %2$s",
"{author} commented on {file}" : "{author} komentoval {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáre</strong> pre súbory",
"Type in a new comment..." : "Zadať nový komentár...",
"No other comments available" : "Žiadne ďalšie komentáre nie sú dostupné",
"More comments..." : "Ďalšie komentáre...",
"{count} unread comments" : "{count} neprečítaných komentárov"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");

View File

@ -1,6 +1,32 @@
{ "translations": {
"Comments" : "Komentáre",
"Unknown user" : "Neznámy používateľ",
"New comment …" : "Nový komentár ...",
"Delete comment" : "Zmazať komentár",
"Post" : "Odoslať",
"Cancel" : "Zrušiť",
"Edit comment" : "Upraviť komentár",
"[Deleted user]" : "[Zmazaný užívateľ]",
"No comments yet, start the conversation!" : "Žiadne komentáre, začnite konverzáciu!",
"More comments …" : "Ďalšie komentáre ...",
"Save" : "Uložiť",
"Comment" : "Komentár"
"Allowed characters {count} of {max}" : "Počet povolených znakov {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Pri načítavaní komentára s id {id} nastala chyba",
"Error occurred while updating comment with id {id}" : "Pri aktualizovaní komentára s id {id} nastala chyba",
"Error occurred while posting comment" : "Pri odosielaní komentára nastala chyba",
"_%n unread comment_::_%n unread comments_" : ["%n neprečítaný komentár","%n neprečítaných komentárov","%n neprečítaných komentárov"],
"Comment" : "Komentár",
"You commented" : "Komentovali ste",
"%1$s commented" : "%1$s komentoval",
"{author} commented" : "{author} komentoval",
"You commented on %1$s" : "Komentovali ste %1$s",
"You commented on {file}" : "Komentovali ste {file}",
"%1$s commented on %2$s" : "%1$s komentoval %2$s",
"{author} commented on {file}" : "{author} komentoval {file}",
"<strong>Comments</strong> for files" : "<strong>Komentáre</strong> pre súbory",
"Type in a new comment..." : "Zadať nový komentár...",
"No other comments available" : "Žiadne ďalšie komentáre nie sú dostupné",
"More comments..." : "Ďalšie komentáre...",
"{count} unread comments" : "{count} neprečítaných komentárov"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
}

View File

@ -14,8 +14,9 @@ OC.L10N.register(
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}",
"Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}",
"Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id {id}",
"Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti",
"_%n unread comment_::_%n unread comments_" : ["%n komente të palexuara","%n komente të palexuara "],
"Comment" : "Koment",
"You commented" : "Komentuat",
"%1$s commented" : "%1$s komentoi",
@ -23,8 +24,12 @@ OC.L10N.register(
"You commented on %1$s" : "Ju komentuat në %1$s",
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
"{author} commented on {file}" : "{autori} komentoj në {file}",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
"{author} commented on {file}" : "{author} komentoi në {file}",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
"A (now) deleted user mentioned you in a comment on “%s”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s ju ka përmendur në një koment në “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} ju ka përmendur në një koment në “{file}”",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "Ska komente të tjera",
"More comments..." : "Më tepër komente…",

View File

@ -12,8 +12,9 @@
"Save" : "Ruaje",
"Allowed characters {count} of {max}" : "Shenja të lejuara {count} nga {max}",
"Error occurred while retrieving comment with id {id}" : "Ndodhi një gabim teksa merrej komenti me id{id}",
"Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id{id}",
"Error occurred while updating comment with id {id}" : "Ndodhi një gabim teksa përditësohej komenti me id {id}",
"Error occurred while posting comment" : "Ndodhi një gabim teksa postohej komenti",
"_%n unread comment_::_%n unread comments_" : ["%n komente të palexuara","%n komente të palexuara "],
"Comment" : "Koment",
"You commented" : "Komentuat",
"%1$s commented" : "%1$s komentoi",
@ -21,8 +22,12 @@
"You commented on %1$s" : "Ju komentuat në %1$s",
"You commented on {file}" : "Ju komentuat në {file}",
"%1$s commented on %2$s" : "%1$s komentoi te %2$s",
"{author} commented on {file}" : "{autori} komentoj në {file}",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për file-et",
"{author} commented on {file}" : "{author} komentoi në {file}",
"<strong>Comments</strong> for files" : "<strong>Komente</strong> për skedarët",
"A (now) deleted user mentioned you in a comment on “%s”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "Një përdorues i fshirë (tani) ju ka përmendur në një koment në “{file}”",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s ju ka përmendur në një koment në “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} ju ka përmendur në një koment në “{file}”",
"Type in a new comment..." : "Shtypni një koment të ri…",
"No other comments available" : "Ska komente të tjera",
"More comments..." : "Më tepër komente…",

View File

@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
"Type in a new comment..." : "Skriv en ny kommentar",
"Comments" : "Kommentarer",
"Unknown user" : "Okänd användare",
"New comment …" : "Ny kommentar ...",
"Delete comment" : "Radera kommentar",
"Post" : "Skicka",
"Cancel" : "Avbryt",
"Edit comment" : "Redigera kommentar",
"[Deleted user]" : "[Raderad användare]",
"Comments" : "Kommentarer",
"No other comments available" : "Inga andra kommentarer tillgängliga",
"More comments..." : "Fler kommentarter,,,",
"No comments yet, start the conversation!" : "Inga kommentarer ännu.",
"More comments …" : "Fler kommentarer ...",
"Save" : "Spara",
"Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
"{count} unread comments" : "{count} olästa kommentarer",
"Allowed characters {count} of {max}" : "Antal tillåtna tecken, {count} av {max}",
"Error occurred while retrieving comment with id {id}" : "Fel inträffade vid inläsning av kommentar med id {id}",
"Error occurred while updating comment with id {id}" : "Fel inträffade vid uppdatering av kommentar med id {id}",
"Error occurred while posting comment" : "Fel inträffade vid publicering av kommentar",
"_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"],
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> för filer <em>(listad alltid i flödet)</em>",
"You commented" : "Du kommenterade",
"%1$s commented" : "%1$s har kommenterat",
"You commented on %2$s" : "Du kommenterade %2$s",
"%1$s commented on %2$s" : "%1$s kommenterade på %2$s"
"%1$s commented" : "%1$s kommenterade",
"{author} commented" : "{author} kommenterade",
"You commented on %1$s" : "Du kommenterade på %1$s",
"You commented on {file}" : "Du kommenterade på {file}",
"%1$s commented on %2$s" : "%1$s kommenterade på %2$s",
"{author} commented on {file}" : "{author} kommenterade på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> för filer",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) raderad användare nämnde dig i en kommentar på \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) raderad användare nämnde dig i en kommentar på \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nämnde dig i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nämnde dig i en kommentar på \"{file}\"",
"Type in a new comment..." : "Skriv en ny kommentar...",
"No other comments available" : "Inga andra kommentarer tillgängliga",
"More comments..." : "Fler kommentarer...",
"{count} unread comments" : "{count} olästa kommentarer",
"You commented on %2$s" : "Du kommenterade %2$s"
},
"nplurals=2; plural=(n != 1);");

View File

@ -1,21 +1,37 @@
{ "translations": {
"Type in a new comment..." : "Skriv en ny kommentar",
"Comments" : "Kommentarer",
"Unknown user" : "Okänd användare",
"New comment …" : "Ny kommentar ...",
"Delete comment" : "Radera kommentar",
"Post" : "Skicka",
"Cancel" : "Avbryt",
"Edit comment" : "Redigera kommentar",
"[Deleted user]" : "[Raderad användare]",
"Comments" : "Kommentarer",
"No other comments available" : "Inga andra kommentarer tillgängliga",
"More comments..." : "Fler kommentarter,,,",
"No comments yet, start the conversation!" : "Inga kommentarer ännu.",
"More comments …" : "Fler kommentarer ...",
"Save" : "Spara",
"Allowed characters {count} of {max}" : "Tillåtet antal tecken {count} av {max}",
"{count} unread comments" : "{count} olästa kommentarer",
"Allowed characters {count} of {max}" : "Antal tillåtna tecken, {count} av {max}",
"Error occurred while retrieving comment with id {id}" : "Fel inträffade vid inläsning av kommentar med id {id}",
"Error occurred while updating comment with id {id}" : "Fel inträffade vid uppdatering av kommentar med id {id}",
"Error occurred while posting comment" : "Fel inträffade vid publicering av kommentar",
"_%n unread comment_::_%n unread comments_" : ["%n oläst kommentar","%n olästa kommentarer"],
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> för filer <em>(listad alltid i flödet)</em>",
"You commented" : "Du kommenterade",
"%1$s commented" : "%1$s har kommenterat",
"You commented on %2$s" : "Du kommenterade %2$s",
"%1$s commented on %2$s" : "%1$s kommenterade på %2$s"
"%1$s commented" : "%1$s kommenterade",
"{author} commented" : "{author} kommenterade",
"You commented on %1$s" : "Du kommenterade på %1$s",
"You commented on {file}" : "Du kommenterade på {file}",
"%1$s commented on %2$s" : "%1$s kommenterade på %2$s",
"{author} commented on {file}" : "{author} kommenterade på {file}",
"<strong>Comments</strong> for files" : "<strong>Kommentarer</strong> för filer",
"A (now) deleted user mentioned you in a comment on “%s”" : "En (nu) raderad användare nämnde dig i en kommentar på \"%s\"",
"A (now) deleted user mentioned you in a comment on “{file}”" : "En (nu) raderad användare nämnde dig i en kommentar på \"{file}\"",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s nämnde dig i en kommentar på “%2$s”",
"{user} mentioned you in a comment on “{file}”" : "{user} nämnde dig i en kommentar på \"{file}\"",
"Type in a new comment..." : "Skriv en ny kommentar...",
"No other comments available" : "Inga andra kommentarer tillgängliga",
"More comments..." : "Fler kommentarer...",
"{count} unread comments" : "{count} olästa kommentarer",
"You commented on %2$s" : "Du kommenterade %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -1,23 +1,39 @@
OC.L10N.register(
"comments",
{
"Type in a new comment..." : "添加新评论...",
"Comments" : "评论",
"Unknown user" : "未知用户",
"New comment …" : "新评论 ...",
"Delete comment" : "删除评论",
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
"[Deleted user]" : "[Deleted user]",
"Comments" : "评论",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
"{count} unread comments" : "{count} 条未读评论",
"Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错",
"Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错",
"Error occurred while posting comment" : "发布评论出错",
"_%n unread comment_::_%n unread comments_" : ["%n 未读评论"],
"Comment" : "评论",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "文件的<strong>评论</strong><em>(始终在数据流中列出)</em>",
"You commented" : "您的评论",
"%1$s commented" : "%1$s 已评论",
"You commented on %2$s" : "你评论了 %2$s",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s"
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
"You commented on {file}" : "您对 {file} 的评论",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s",
"{author} commented on {file}" : "{author} 对 {file} 的评论",
"<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
"A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
"A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
"{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
"Type in a new comment..." : "添加新评论...",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"{count} unread comments" : "{count} 条未读评论",
"You commented on %2$s" : "您评论了 %2$s"
},
"nplurals=1; plural=0;");

View File

@ -1,21 +1,37 @@
{ "translations": {
"Type in a new comment..." : "添加新评论...",
"Comments" : "评论",
"Unknown user" : "未知用户",
"New comment …" : "新评论 ...",
"Delete comment" : "删除评论",
"Post" : "发布",
"Cancel" : "取消",
"Edit comment" : "编辑评论",
"[Deleted user]" : "[Deleted user]",
"Comments" : "评论",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"[Deleted user]" : "[已删除用户]",
"No comments yet, start the conversation!" : "还没有评论,开始对话吧!",
"More comments …" : "更多评论 ...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "当前字数: {count},最大允许:{max}",
"{count} unread comments" : "{count} 条未读评论",
"Error occurred while retrieving comment with id {id}" : "检索 id 为 {id} 的评论出错",
"Error occurred while updating comment with id {id}" : "更新 id 为 {id} 的评论出错",
"Error occurred while posting comment" : "发布评论出错",
"_%n unread comment_::_%n unread comments_" : ["%n 未读评论"],
"Comment" : "评论",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "文件的<strong>评论</strong><em>(始终在数据流中列出)</em>",
"You commented" : "您的评论",
"%1$s commented" : "%1$s 已评论",
"You commented on %2$s" : "你评论了 %2$s",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s"
"{author} commented" : "{author} 评论了",
"You commented on %1$s" : "您在 %1$s 的评论",
"You commented on {file}" : "您对 {file} 的评论",
"%1$s commented on %2$s" : "%1$s 评论了 %2$s",
"{author} commented on {file}" : "{author} 对 {file} 的评论",
"<strong>Comments</strong> for files" : "文件的<strong>评论</strong>",
"A (now) deleted user mentioned you in a comment on “%s”" : "一个(已)被删除的用户在 “%s” 的评论中提到了您",
"A (now) deleted user mentioned you in a comment on “{file}”" : "一个(已)被删除的用户在 “{file}” 的评论中提到了您",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s 在 “%2$s” 的评论中提到了您",
"{user} mentioned you in a comment on “{file}”" : "{user} 在 “{file}” 的评论中提到了您",
"Type in a new comment..." : "添加新评论...",
"No other comments available" : "没有其他评论",
"More comments..." : "更多评论...",
"{count} unread comments" : "{count} 条未读评论",
"You commented on %2$s" : "您评论了 %2$s"
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@ -206,7 +206,7 @@ class Provider implements IProvider {
'type' => 'file',
'id' => $id,
'name' => basename($path),
'path' => $path,
'path' => trim($path, '/'),
'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]),
];
}

View File

@ -23,7 +23,6 @@ namespace OCA\Comments\Notification;
use OCP\Comments\CommentsEvent;
use OCP\Comments\IComment;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Notification\IManager;
@ -34,25 +33,19 @@ class Listener {
/** @var IUserManager */
protected $userManager;
/** @var IURLGenerator */
protected $urlGenerator;
/**
* Listener constructor.
*
* @param IManager $notificationManager
* @param IUserManager $userManager
* @param IURLGenerator $urlGenerator
*/
public function __construct(
IManager $notificationManager,
IUserManager $userManager,
IURLGenerator $urlGenerator
IUserManager $userManager
) {
$this->notificationManager = $notificationManager;
$this->userManager = $userManager;
$this->urlGenerator = $urlGenerator;
}
/**
@ -100,11 +93,7 @@ class Listener {
->setApp('comments')
->setObject('comment', $comment->getId())
->setSubject('mention', [ $comment->getObjectType(), $comment->getObjectId() ])
->setDateTime($comment->getCreationDateTime())
->setLink($this->urlGenerator->linkToRouteAbsolute(
'comments.Notifications.view',
['id' => $comment->getId()])
);
->setDateTime($comment->getCreationDateTime());
return $notification;
}

View File

@ -139,7 +139,11 @@ class Notifier implements INotifier {
]
);
}
$notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')));
$notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/comment.svg')))
->setLink($this->url->linkToRouteAbsolute(
'comments.Notifications.view',
['id' => $comment->getId()])
);
return $notification;
break;

View File

@ -46,14 +46,12 @@ class ListenerTest extends TestCase {
protected function setUp() {
parent::setUp();
$this->notificationManager = $this->getMockBuilder('\OCP\Notification\IManager')->getMock();
$this->userManager = $this->getMockBuilder('\OCP\IUserManager')->getMock();
$this->urlGenerator = $this->getMockBuilder('OCP\IURLGenerator')->getMock();
$this->notificationManager = $this->createMock(\OCP\Notification\IManager::class);
$this->userManager = $this->createMock(\OCP\IUserManager::class);
$this->listener = new Listener(
$this->notificationManager,
$this->userManager,
$this->urlGenerator
$this->userManager
);
}

View File

@ -5,7 +5,7 @@
<description>WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
<version>1.1.1</version>
<version>1.2.0</version>
<default_enable/>
<types>
<filesystem/>
@ -15,7 +15,7 @@
<webdav>appinfo/v1/publicwebdav.php</webdav>
</public>
<dependencies>
<nextcloud min-version="11" max-version="11" />
<nextcloud min-version="12" max-version="12" />
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\SyncJob</job>
@ -23,6 +23,7 @@
<repair-steps>
<post-migration>
<step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step>
<step>OCA\DAV\Migration\ValueFixInsert</step>
</post-migration>
</repair-steps>
<commands>

View File

@ -49,7 +49,7 @@ $db = \OC::$server->getDatabaseConnection();
$userManager = \OC::$server->getUserManager();
$random = \OC::$server->getSecureRandom();
$dispatcher = \OC::$server->getEventDispatcher();
$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher);
$calDavBackend = new CalDavBackend($db, $principalBackend, $userManager, $random, $dispatcher, true);
$debugging = \OC::$server->getConfig()->getSystemValue('debug', false);
@ -80,6 +80,7 @@ if ($debugging) {
$server->addPlugin(new Sabre\DAV\Browser\Plugin());
}
$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\CalDAV\ICSExportPlugin());
$server->addPlugin(new \Sabre\CalDAV\Schedule\Plugin());
$server->addPlugin(new \OCA\DAV\CalDAV\Schedule\IMipPlugin( \OC::$server->getMailer(), \OC::$server->getLogger()));

View File

@ -78,6 +78,7 @@ if ($debugging) {
$server->addPlugin(new Sabre\DAV\Browser\Plugin());
}
$server->addPlugin(new \Sabre\DAV\Sync\Plugin());
$server->addPlugin(new \Sabre\CardDAV\VCFExportPlugin());
$server->addPlugin(new \OCA\DAV\CardDAV\ImageExportPlugin(\OC::$server->getLogger()));
$server->addPlugin(new ExceptionLoggerPlugin('carddav', \OC::$server->getLogger()));

View File

@ -25,6 +25,7 @@
// no php execution timeout for webdav
set_time_limit(0);
ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();

View File

@ -21,6 +21,7 @@
*/
// no php execution timeout for webdav
set_time_limit(0);
ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();

49
apps/dav/l10n/bg_BG.js Normal file
View File

@ -0,0 +1,49 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Календар",
"Todos" : "Задачи",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
"You deleted calendar {calendar}" : "Изтрихте календар {calendar}",
"{actor} updated calendar {calendar}" : "{actor} обнови календар {calendar}",
"You updated calendar {calendar}" : "Обновихте календар {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} сподели календар {calendar} с теб",
"You shared calendar {calendar} with {user}" : "Споделихте календар {calendar} с {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} сподели календар {calendar} с {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} отказа споделяне на календар {calendar} с теб",
"You unshared calendar {calendar} from {user}" : "Отказахте споделяне на календар {calendar} от {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} отказа споделяне на календар {calendar} от {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} отказа споделяне на календар {calendar} от себеси",
"You shared calendar {calendar} with group {group}" : "Споделихте календар {calendar} с група {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}",
"You unshared calendar {calendar} from group {group}" : "Отказахте споделяне на календар {calendar} от група {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}",
"You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}",
"You deleted event {event} from calendar {calendar}" : "Изтрихте събитие {event} от календар {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} обнови събитие {event} в календар {calendar}",
"You updated event {event} in calendar {calendar}" : "Обновихте събитие {event} в календар {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} създаде задача {todo} в списък {calendar}",
"You created todo {todo} in list {calendar}" : "Създадохте задача {todo} в списък {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} изтри задача {todo} от списък {calendar}",
"You deleted todo {todo} from list {calendar}" : "Изтрихте задача {todo} от лист {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} актуализира задача {todo} в списък {calendar}",
"You updated todo {todo} in list {calendar}" : "Променихте задача {todo} в списък {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} реши задача {todo} в списък {calendar}",
"You solved todo {todo} in list {calendar}" : "Решихте задача {todo} в списък {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} възобнови задача {todo} в списък {calendar}",
"You reopened todo {todo} in list {calendar}" : "Възобновихте задача {todo} в списък {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Календар</strong> беше променен",
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
"Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
"Request ID: %s" : "ID на заявка: %s"
},
"nplurals=2; plural=(n != 1);");

47
apps/dav/l10n/bg_BG.json Normal file
View File

@ -0,0 +1,47 @@
{ "translations": {
"Calendar" : "Календар",
"Todos" : "Задачи",
"{actor} created calendar {calendar}" : "{actor} направи календар {calendar}",
"You created calendar {calendar}" : "Направихте календар {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} изтри календар {calendar}",
"You deleted calendar {calendar}" : "Изтрихте календар {calendar}",
"{actor} updated calendar {calendar}" : "{actor} обнови календар {calendar}",
"You updated calendar {calendar}" : "Обновихте календар {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} сподели календар {calendar} с теб",
"You shared calendar {calendar} with {user}" : "Споделихте календар {calendar} с {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} сподели календар {calendar} с {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} отказа споделяне на календар {calendar} с теб",
"You unshared calendar {calendar} from {user}" : "Отказахте споделяне на календар {calendar} от {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} отказа споделяне на календар {calendar} от {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} отказа споделяне на календар {calendar} от себеси",
"You shared calendar {calendar} with group {group}" : "Споделихте календар {calendar} с група {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} сподели календар {calendar} с група {group}",
"You unshared calendar {calendar} from group {group}" : "Отказахте споделяне на календар {calendar} от група {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} отказа споделяне с календар {calendar} от група {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} създаде събитие {event} в календар {calendar}",
"You created event {event} in calendar {calendar}" : "Създадохте събитие {event} в календар {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} изтри събитие {event} от календар {calendar}",
"You deleted event {event} from calendar {calendar}" : "Изтрихте събитие {event} от календар {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} обнови събитие {event} в календар {calendar}",
"You updated event {event} in calendar {calendar}" : "Обновихте събитие {event} в календар {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} създаде задача {todo} в списък {calendar}",
"You created todo {todo} in list {calendar}" : "Създадохте задача {todo} в списък {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} изтри задача {todo} от списък {calendar}",
"You deleted todo {todo} from list {calendar}" : "Изтрихте задача {todo} от лист {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} актуализира задача {todo} в списък {calendar}",
"You updated todo {todo} in list {calendar}" : "Променихте задача {todo} в списък {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} реши задача {todo} в списък {calendar}",
"You solved todo {todo} in list {calendar}" : "Решихте задача {todo} в списък {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} възобнови задача {todo} в списък {calendar}",
"You reopened todo {todo} in list {calendar}" : "Възобновихте задача {todo} в списък {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Календар</strong> беше променен",
"A calendar <strong>event</strong> was modified" : "Календарно <strong>събитие</strong> беше променено",
"A calendar <strong>todo</strong> was modified" : "Календарна <strong>задача</strong> беше променена",
"Contact birthdays" : "Рождени дни на контакти",
"Personal" : "Личен",
"Contacts" : "Контакти",
"Technical details" : "Технически детайли",
"Remote Address: %s" : "Отдалечен адрес: %s",
"Request ID: %s" : "ID на заявка: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -1,44 +1,44 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
"You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
"{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
"You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
"You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
"{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
"You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
"You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
"You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
"You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
"You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
"You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
"You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
"You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
"You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
"You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
"You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
"You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
"%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
"You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
"%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
"You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
"%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
"You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
"%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
"%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
"You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
"%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
"%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
"You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
"%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
"You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
"%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
"%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
"You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
"%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
"You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
"%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
"You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
"%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
"You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
"%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
"You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
"%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
"You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
"%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
"You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
"%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
"You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",

View File

@ -1,42 +1,42 @@
{ "translations": {
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
"{actor} created calendar {calendar}" : "{actor} vytvořil(a) kalendář {calendar}",
"You created calendar {calendar}" : "Vytvořil(a",
"{actor} deleted calendar {calendar}" : "{actor} smazal(a) kalendář {calendar}",
"You deleted calendar {calendar}" : "Smazal(a) jste kalendář {calendar}",
"{actor} updated calendar {calendar}" : "{actor} aktualizoval(a) kalendář {calendar}",
"You updated calendar {calendar}" : "Aktualizoval(a) jste kalendář {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} s vámi nasdílel(a) kalendář {calendar}",
"You shared calendar {calendar} with {user}" : "S uživatelem {user} jste začal(a) sdílet kalendář {calendar}",
"{actor} shared calendar {calendar} with {user}" : "{actor} začal sdílet kalendář {calendar} s uživatelem {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} s vámi přestal(a) sdílet kalendář {calendar}",
"You unshared calendar {calendar} from {user}" : "S uživatelem {user} jste přestal(a) sdílet kalendář {calendar}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} přestal(a) sdílet kalendář {calendar} s uživatelem {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} přestal sdílet kalendář {calendar} sám se sebou",
"You shared calendar {calendar} with group {group}" : "Se skupinou {group} jste začal(a) sdílet kalendář {calendar}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} nasdílel(a) kalendář {calendar} skupině {group}",
"You unshared calendar {calendar} from group {group}" : "Zrušil(a) jste sdílení kalendáře {calendar} skupině {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} přestal(a) sdílet kalendář {calendar} se skupinou {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} vytvořil(a) událost {event} v kalendáři {calendar}",
"You created event {event} in calendar {calendar}" : "V kalendáři {calendar} jste vytvořil(a) událost {event}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} z kalendáře {calendar} smazal(a) událost {event}",
"You deleted event {event} from calendar {calendar}" : "Smazal(a) jste událost {event} z kalendáře {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} aktualizoval(a) událost {event} v kalendáři {calendar}",
"You updated event {event} in calendar {calendar}" : "Aktualizoval(a) jste událost {event} v kalendáři {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} vytvořil(a) v seznamu {calendar} vytvořila úkol {todo}",
"You created todo {todo} in list {calendar}" : "V seznamu {calendar} jste vytvořil(a) úkol {todo}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} smazal(a) úkol {todo} ze seznamu {calendar}",
"You deleted todo {todo} from list {calendar}" : "Ze seznamu {todo} jste smazal(a) úkol {todo}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} aktualizoval(a) úkol {todo} v seznamu {calendar}",
"You updated todo {todo} in list {calendar}" : "Aktualizoval(a) jste úkol {todo} v seznamu {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} vyřešil(a) úkol {todo} v seznamu {calendar}",
"You solved todo {todo} in list {calendar}" : "Vyřešil(a) jste úkol {todo} v seznamu {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} znovu otevřel(a) úkol {todo} v seznamu {calendar}",
"You reopened todo {todo} in list {calendar}" : "Znovu jste otevřel(a) úkol {todo} v seznamu {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Kalendář</strong> byl změněn",
"A calendar <strong>event</strong> was modified" : "<strong>Událost</strong> v kalendáři byla změněna",
"A calendar <strong>todo</strong> was modified" : "<strong>Úkol</strong> v kalendáři byl změněn",
"%1$s created calendar %2$s" : "%1$s vytvořil(a) kalendář %2$s",
"You created calendar %2$s" : "Vytvořili jste kalendář %2$s",
"%1$s deleted calendar %2$s" : "%1$s vymazal(a) kalendář %2$s",
"You deleted calendar %2$s" : "Smazali jste kalendář %2$s",
"%1$s updated calendar %2$s" : "%1$s aktualizoval(a) kalendář %2$s",
"You updated calendar %2$s" : "Aktualizovali jste kalendář %2$s",
"%1$s shared calendar %2$s with you" : "%1$s s vámi začal(a) sdílet kalendář %2$s",
"You shared calendar %2$s with %1$s" : "S uživatelem %1$s jste začal(a) sdílet kalendář %2$s",
"%3$s shared calendar %2$s with %1$s" : "%3$s nasdílel(a) s %1$s kalendář %2$s",
"%1$s unshared calendar %2$s from you" : "%1$s s vámi přestal(a) sdílet kalendář %2$s",
"You unshared calendar %2$s from %1$s" : "S %1$s jste přestal(a) sdílet kalendář %2$s",
"%3$s unshared calendar %2$s from %1$s" : "%3$s přestal s %1$s sdílet kalendář %2$s",
"%1$s unshared calendar %2$s from themselves" : "%1$s přestal sám se sebou sdílet kalendář %2$s",
"You shared calendar %2$s with group %1$s" : "Se skupinou %1$s jste nasdílel(a) kalendář %2$s",
"%3$s shared calendar %2$s with group %1$s" : "%3$s se skupinou %1$s začal(a) sdílet kalendář %2$s",
"You unshared calendar %2$s from group %1$s" : "Se skupinou %1$s jste přestal(a) sdílet kalendář %2$s",
"%3$s unshared calendar %2$s from group %1$s" : "%3$s přestal ve skupině %1$s sdílet kalendář %2$s",
"%1$s created event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s vytvořil událost %3$s",
"You created event %3$s in calendar %2$s" : "V kalendáři %2$s jste vytvořil(a) událost %3$s",
"%1$s deleted event %3$s from calendar %2$s" : "%1$s z kalendáře %2$s smazal(a) událost %3$s",
"You deleted event %3$s from calendar %2$s" : "V kalendáři %2$s jste smazal(a) událost %3$s",
"%1$s updated event %3$s in calendar %2$s" : "%1$s v kalendáři %2$s aktualizoval(a) událost %3$s",
"You updated event %3$s in calendar %2$s" : "Aktualizoval(a) jste událost %3$s v kalendáři %2$s",
"%1$s created todo %3$s in list %2$s" : "%1$s v seznamu %2$s vytvořil(a) úkol %3$s",
"You created todo %3$s in list %2$s" : "V seznamu %2$s jste vytvořil(a) úkol %3$s",
"%1$s deleted todo %3$s from list %2$s" : "%1$s ze seznamu %2$s smazal(a) úkol %3$s",
"You deleted todo %3$s from list %2$s" : "Ze seznamu %2$s jste odstranil(a) úkol %3$s",
"%1$s updated todo %3$s in list %2$s" : "%1$s v seznamu %2$s aktualizoval(a) úkol %3$s",
"You updated todo %3$s in list %2$s" : "Aktualizoval(a) jste úkol %3$s v seznamu %2$s",
"%1$s solved todo %3$s in list %2$s" : "%1$s v seznamu %2$s vyřešil(a) úkol %3$s",
"You solved todo %3$s in list %2$s" : "Vyřešil(a) jste úkol %3$s v seznamu %2$s",
"%1$s reopened todo %3$s in list %2$s" : "%1$s znovu otevřel úkol %3$s v seznamu %2$s",
"You reopened todo %3$s in list %2$s" : "Znovu jste otevřel(a) úkol %3$s v seznamu %2$s",
"Calendar" : "Kalendář",
"Todos" : "Úkoly",
"Contact birthdays" : "Narozeniny kontaktů",
"Personal" : "Osobní",
"Contacts" : "Kontakty",

View File

@ -6,10 +6,10 @@ OC.L10N.register(
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
"You deleted calendar {calendar}" : "Du hast hat den Kalender {calendar} gelöscht",
"You deleted calendar {calendar}" : "Du hast den Kalender {calendar} gelöscht",
"{actor} updated calendar {calendar}" : "{actor} hat den Kalender {calendar} aktualisiert",
"You updated calendar {calendar}" : "Du hast den Kalender {calendar} aktualisiert",
"{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit Ihnen geteilt",
"{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit dir geteilt",
"You shared calendar {calendar} with {user}" : "Du hast den Kalender {calendar} mit {user} geteilt",
"{actor} shared calendar {calendar} with {user}" : "{actor} hat den Kalender {calendar} mit {user} geteilt",
"{actor} unshared calendar {calendar} from you" : "{actor} teilt den Kalender {calendar} nicht mehr mit dir",
@ -26,16 +26,16 @@ OC.L10N.register(
"You deleted event {event} from calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} aktualisiert",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
@ -43,7 +43,7 @@ OC.L10N.register(
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
"Request ID: %s" : "Anfragekennung: %s"
"Remote Address: %s" : "Remote-Adresse: %s",
"Request ID: %s" : "Anfrage-ID: %s"
},
"nplurals=2; plural=(n != 1);");

View File

@ -4,10 +4,10 @@
"{actor} created calendar {calendar}" : "{actor} hat den Kalender {calendar} erstellt",
"You created calendar {calendar}" : "Du hast den Kalender {calendar} erstellt",
"{actor} deleted calendar {calendar}" : "{actor} hat den Kalender {calendar} gelöscht",
"You deleted calendar {calendar}" : "Du hast hat den Kalender {calendar} gelöscht",
"You deleted calendar {calendar}" : "Du hast den Kalender {calendar} gelöscht",
"{actor} updated calendar {calendar}" : "{actor} hat den Kalender {calendar} aktualisiert",
"You updated calendar {calendar}" : "Du hast den Kalender {calendar} aktualisiert",
"{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit Ihnen geteilt",
"{actor} shared calendar {calendar} with you" : "{actor} hat den Kalender {calendar} mit dir geteilt",
"You shared calendar {calendar} with {user}" : "Du hast den Kalender {calendar} mit {user} geteilt",
"{actor} shared calendar {calendar} with {user}" : "{actor} hat den Kalender {calendar} mit {user} geteilt",
"{actor} unshared calendar {calendar} from you" : "{actor} teilt den Kalender {calendar} nicht mehr mit dir",
@ -24,16 +24,16 @@
"You deleted event {event} from calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Du hast das Ereignis {event} im Kalender {calendar} aktualisiert",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Du hast das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Du hast die Aufgabe {todo} in der Liste {calendar} wieder geöffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
@ -41,7 +41,7 @@
"Personal" : "Persönlich",
"Contacts" : "Kontakte",
"Technical details" : "Technische Details",
"Remote Address: %s" : "Entfernte Adresse: %s",
"Request ID: %s" : "Anfragekennung: %s"
"Remote Address: %s" : "Remote-Adresse: %s",
"Request ID: %s" : "Anfrage-ID: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -26,19 +26,19 @@ OC.L10N.register(
"You deleted event {event} from calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} aktualisiert",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"You reopened todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Personal" : "Persönlich",
"Contacts" : "Kontakte",

View File

@ -24,19 +24,19 @@
"You deleted event {event} from calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} gelöscht",
"{actor} updated event {event} in calendar {calendar}" : "{actor} hat das Ereignis {event} im Kalender {calendar} aktualisiert",
"You updated event {event} in calendar {calendar}" : "Sie haben das Ereignis {event} im Kalender {calendar} aktualisiert",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"You reopened todo {todo} in list {calendar}" : "Sie haben das ToDo {todo} in der Liste {calendar} wieder geöffnet",
"{actor} created todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erstellt",
"You created todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erstellt",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} gelöscht",
"You deleted todo {todo} from list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} gelöscht",
"{actor} updated todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"You updated todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} aktualisiert",
"{actor} solved todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} erledigt",
"You solved todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} erledigt",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} hat die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"You reopened todo {todo} in list {calendar}" : "Sie haben die Aufgabe {todo} in der Liste {calendar} wiedereröffnet",
"A <strong>calendar</strong> was modified" : "Ein <strong>Kalender</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein <strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine <strong>Aufgabe</strong> wurde bearbeitet",
"A calendar <strong>event</strong> was modified" : "Ein Kalender-<strong>Ereignis</strong> wurde bearbeitet",
"A calendar <strong>todo</strong> was modified" : "Eine Kalender-<strong>Aufgabe</strong> wurde bearbeitet",
"Contact birthdays" : "Geburtstage von Kontakten",
"Personal" : "Persönlich",
"Contacts" : "Kontakte",

View File

@ -1,6 +1,44 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
"You deleted calendar {calendar}" : "Du slettet kalenderen {calendar}",
"{actor} updated calendar {calendar}" : "{actor} oppdaterte kalenderen {calendar}",
"You updated calendar {calendar}" : "Du oppdaterte kalenderen {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med deg",
"You shared calendar {calendar} with {user}" : "Du delte kalenderen {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delte kalenderen {calendar} med {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} fjernet delingen av kalenderen {calendar} med deg",
"You unshared calendar {calendar} from {user}" : "Du fjernet delingen av kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} fjernet delingen av kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} fjernet delingen av kalender {calendar} med seg selv",
"You shared calendar {calendar} with group {group}" : "Du delte kalender {calendar} med gruppe {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}",
"You unshared calendar {calendar} from group {group}" : "Du fjernet deling av kalenderen {calendar} med gruppe {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernet deling av kalenderen {calendar} med gruppe {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}",
"You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du slettet hendelsen {event} fra kalenderen {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} oppdaterte hendelse {event} i kalenderen {calendar}",
"You updated event {event} in calendar {calendar}" : "Du oppdaterte hendelse {event} i kalenderen {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} opprettet en oppgave {todo} i listen {calendar}",
"You created todo {todo} in list {calendar}" : "Du opprettet en oppgave {todo} i listen {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} slettet en oppgave {todo} fra listen {calendar}",
"You deleted todo {todo} from list {calendar}" : "Du slettet en oppgave {todo} fra listen {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} oppdaterte en oppgave {todo} i listen {calendar}",
"You updated todo {todo} in list {calendar}" : "Du oppdaterte en oppgave {todo} i listen {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} ferdigstilte oppgaven {todo} i listen {calendar}",
"You solved todo {todo} in list {calendar}" : "Du ferdigstilte oppgaven {todo} i listen {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} gjenåpnet oppgaven {todo} i listen {calendar}",
"You reopened todo {todo} in list {calendar}" : "Du gjenåpnet oppgaven {todo} i listen {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> ble endret",
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
"Personal" : "Personlig",
"Contacts" : "Kontakter",

View File

@ -1,4 +1,42 @@
{ "translations": {
"Calendar" : "Kalender",
"Todos" : "Gjøremål",
"{actor} created calendar {calendar}" : "{actor} opprettet kalenderen {calendar}",
"You created calendar {calendar}" : "Du opprettet kalenderen {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} slettet kalenderen {calendar}",
"You deleted calendar {calendar}" : "Du slettet kalenderen {calendar}",
"{actor} updated calendar {calendar}" : "{actor} oppdaterte kalenderen {calendar}",
"You updated calendar {calendar}" : "Du oppdaterte kalenderen {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delte kalenderen {calendar} med deg",
"You shared calendar {calendar} with {user}" : "Du delte kalenderen {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delte kalenderen {calendar} med {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} fjernet delingen av kalenderen {calendar} med deg",
"You unshared calendar {calendar} from {user}" : "Du fjernet delingen av kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} fjernet delingen av kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} fjernet delingen av kalender {calendar} med seg selv",
"You shared calendar {calendar} with group {group}" : "Du delte kalender {calendar} med gruppe {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delte kalenderen {calendar} med gruppe {group}",
"You unshared calendar {calendar} from group {group}" : "Du fjernet deling av kalenderen {calendar} med gruppe {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} fjernet deling av kalenderen {calendar} med gruppe {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} opprettet en hendelse {event} i kalenderen {calendar}",
"You created event {event} in calendar {calendar}" : "Du opprettet en hendelse {event} i kalenderen {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} slettet hendelsen {event} fra kalenderen {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du slettet hendelsen {event} fra kalenderen {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} oppdaterte hendelse {event} i kalenderen {calendar}",
"You updated event {event} in calendar {calendar}" : "Du oppdaterte hendelse {event} i kalenderen {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} opprettet en oppgave {todo} i listen {calendar}",
"You created todo {todo} in list {calendar}" : "Du opprettet en oppgave {todo} i listen {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} slettet en oppgave {todo} fra listen {calendar}",
"You deleted todo {todo} from list {calendar}" : "Du slettet en oppgave {todo} fra listen {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} oppdaterte en oppgave {todo} i listen {calendar}",
"You updated todo {todo} in list {calendar}" : "Du oppdaterte en oppgave {todo} i listen {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} ferdigstilte oppgaven {todo} i listen {calendar}",
"You solved todo {todo} in list {calendar}" : "Du ferdigstilte oppgaven {todo} i listen {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} gjenåpnet oppgaven {todo} i listen {calendar}",
"You reopened todo {todo} in list {calendar}" : "Du gjenåpnet oppgaven {todo} i listen {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> ble endret",
"A calendar <strong>event</strong> was modified" : "En kalender <strong>hendelse</strong> ble endret",
"A calendar <strong>todo</strong> was modified" : "En kalende <strong>gjøremål</strong> ble endret",
"Contact birthdays" : "Kontakters fødelsdag",
"Personal" : "Personlig",
"Contacts" : "Kontakter",

View File

@ -1,10 +1,48 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Календарь",
"Todos" : "Задачи",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
"You deleted calendar {calendar}" : "Вы удалили календарь {calendar}",
"{actor} updated calendar {calendar}" : "{actor} обновил календарь {calendar}",
"You updated calendar {calendar}" : "Вы обновили календарь {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} поделился календарем {calendar} с вами",
"You shared calendar {calendar} with {user}" : "Вы поделились календарем {calendar} с {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} поделился календарем {calendar} с {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} закрыл для вас доступ к календарю {calendar}",
"You unshared calendar {calendar} from {user}" : "Вы закрыли доступ к календарю {calendar} для {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} закрыл доступ к календарю {calendar} для {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} закрыл доступ к календарю {calendar} для себя",
"You shared calendar {calendar} with group {group}" : "Вы поделились календарем {calendar} с группой {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} поделился календарем {calendar} с группой {group}",
"You unshared calendar {calendar} from group {group}" : "Вы закрыли доступ к календарю {calendar} для группы {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл доступ к календарю {calendar} для группы {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} создал событие {event} в календаре {calendar}",
"You created event {event} in calendar {calendar}" : "Вы создали событие {event} в календаре {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил событие {event} из календаря {calendar}",
"You deleted event {event} from calendar {calendar}" : "Вы удалили событие {event} из календаря {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} обновил событие {event} в календаре {calendar}",
"You updated event {event} in calendar {calendar}" : "Вы обновили событие {event} в календаре {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} создал задачу {todo} в списке {calendar}",
"You created todo {todo} in list {calendar}" : "Вы создали задачу {todo} в списке {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} удалил задачу {todo} из списка {calendar}",
"You deleted todo {todo} from list {calendar}" : "Вы удалили задачу {todo} из списка {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} обновил задачу {todo} из списка {calendar}",
"You updated todo {todo} in list {calendar}" : "Вы обновили задачу {todo} из списка {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} завершил задачу {todo} из списка {calendar}",
"You solved todo {todo} in list {calendar}" : "Вы завершили задачу {todo} из списка {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} повторно открыл задачу {todo} из списка {calendar}",
"You reopened todo {todo} in list {calendar}" : "Вы повторно открыли задачу {todo} из списка {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Календарь</strong> был изменен",
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
"Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические характеристики",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID запроса: %s"
},

View File

@ -1,8 +1,46 @@
{ "translations": {
"Calendar" : "Календарь",
"Todos" : "Задачи",
"{actor} created calendar {calendar}" : "{actor} создал календарь {calendar}",
"You created calendar {calendar}" : "Вы создали календарь {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} удалил календарь {calendar}",
"You deleted calendar {calendar}" : "Вы удалили календарь {calendar}",
"{actor} updated calendar {calendar}" : "{actor} обновил календарь {calendar}",
"You updated calendar {calendar}" : "Вы обновили календарь {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} поделился календарем {calendar} с вами",
"You shared calendar {calendar} with {user}" : "Вы поделились календарем {calendar} с {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} поделился календарем {calendar} с {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} закрыл для вас доступ к календарю {calendar}",
"You unshared calendar {calendar} from {user}" : "Вы закрыли доступ к календарю {calendar} для {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} закрыл доступ к календарю {calendar} для {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} закрыл доступ к календарю {calendar} для себя",
"You shared calendar {calendar} with group {group}" : "Вы поделились календарем {calendar} с группой {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} поделился календарем {calendar} с группой {group}",
"You unshared calendar {calendar} from group {group}" : "Вы закрыли доступ к календарю {calendar} для группы {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} закрыл доступ к календарю {calendar} для группы {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} создал событие {event} в календаре {calendar}",
"You created event {event} in calendar {calendar}" : "Вы создали событие {event} в календаре {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} удалил событие {event} из календаря {calendar}",
"You deleted event {event} from calendar {calendar}" : "Вы удалили событие {event} из календаря {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} обновил событие {event} в календаре {calendar}",
"You updated event {event} in calendar {calendar}" : "Вы обновили событие {event} в календаре {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} создал задачу {todo} в списке {calendar}",
"You created todo {todo} in list {calendar}" : "Вы создали задачу {todo} в списке {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} удалил задачу {todo} из списка {calendar}",
"You deleted todo {todo} from list {calendar}" : "Вы удалили задачу {todo} из списка {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} обновил задачу {todo} из списка {calendar}",
"You updated todo {todo} in list {calendar}" : "Вы обновили задачу {todo} из списка {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} завершил задачу {todo} из списка {calendar}",
"You solved todo {todo} in list {calendar}" : "Вы завершили задачу {todo} из списка {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} повторно открыл задачу {todo} из списка {calendar}",
"You reopened todo {todo} in list {calendar}" : "Вы повторно открыли задачу {todo} из списка {calendar}",
"A <strong>calendar</strong> was modified" : "<strong>Календарь</strong> был изменен",
"A calendar <strong>event</strong> was modified" : "<strong>Событие</strong> календаря была изменена",
"A calendar <strong>todo</strong> was modified" : "<strong>Задача</strong> календаря была изменена",
"Contact birthdays" : "Дни рождения контакта",
"Personal" : "Личное",
"Contacts" : "Контакты",
"Technical details" : "Технические характеристики",
"Technical details" : "Технические подробности",
"Remote Address: %s" : "Удаленный адрес: %s",
"Request ID: %s" : "ID запроса: %s"
},"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);"

40
apps/dav/l10n/sq.js Normal file
View File

@ -0,0 +1,40 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Kalendar",
"{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
"You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
"{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
"You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
"{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
"You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
"You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
"You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
"You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
"You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
"You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
"You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
"You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
"A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
"Request ID: %s" : "ID e kërkesës: %s"
},
"nplurals=2; plural=(n != 1);");

38
apps/dav/l10n/sq.json Normal file
View File

@ -0,0 +1,38 @@
{ "translations": {
"Calendar" : "Kalendar",
"{actor} created calendar {calendar}" : "{actor} krijoj kalendarin {calendar}",
"You created calendar {calendar}" : "Ju krijuat kalendarin {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} fshiu kalendarin {calendar}",
"You deleted calendar {calendar}" : "Ju fshit kalendarin {calendar}",
"{actor} updated calendar {calendar}" : "{actor} përditësoi kalendarin {calendar}",
"You updated calendar {calendar}" : "Ju përditësuat kalendarin {calendar}",
"{actor} shared calendar {calendar} with you" : " {actor} ndau kalendarin {calendar} me ju",
"You shared calendar {calendar} with {user}" : "Ju ndat kalendarin {calendar} me {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} ndau kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} ndaloj së ndari kalendarin {calendar} me ju",
"You unshared calendar {calendar} from {user}" : "Ju ndaluat së ndari kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} ndaloj së ndari kalendarin {calendar} me {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} ndaloj së ndari kalendarin {calendar} me veten",
"You shared calendar {calendar} with group {group}" : "Ju ndat kalendarin {calendar} me grupin {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} ndau kalendarin {calendar} me grupin {group}",
"You unshared calendar {calendar} from group {group}" : "Ju ndaluat së ndari kalendarin {calendar} me grupin {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} ndaloj së ndari kalendarin {calendar} me grupin {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} krijoj eventin {event} në kalendarin {calendar}",
"You created event {event} in calendar {calendar}" : "Ju krijuat eventin {event} në kalendarin {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} fshiu eventin {event} nga kalendari {calendar}",
"You deleted event {event} from calendar {calendar}" : "Ju fshit eventin {event} nga kalndari {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} përditsoi eventin {event} në kalndarin {calendar}",
"You updated event {event} in calendar {calendar}" : "Ju përditësuat eventin {event} në kalndarin {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} u krijua todo{todo} në listën {calendar}",
"You created todo {todo} in list {calendar}" : "Ju krijuat todo {todo} në listën {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} u fshi todo{ todo} nga lista{calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} u përditësua todo{todo} në listën{calendar}",
"A <strong>calendar</strong> was modified" : "Një <strong>kalendar</strong> u modifikua",
"A calendar <strong>event</strong> was modified" : "Një <strong>event</strong> në kalendar u modifikua",
"Personal" : "Personale",
"Contacts" : "Kontaktet",
"Technical details" : "Detaje teknike",
"Remote Address: %s" : "Adresa remote: %s",
"Request ID: %s" : "ID e kërkesës: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -1,11 +1,49 @@
OC.L10N.register(
"dav",
{
"Contact birthdays" : "Kontaktfödelsedagar",
"Personal" : "Personligt",
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
"You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
"You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
"You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
"You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
"You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
"You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
"You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
"You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
"You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
"You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
"You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Fjärradress: %s",
"Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begär ID: %s"
},
"nplurals=2; plural=(n != 1);");

View File

@ -1,9 +1,47 @@
{ "translations": {
"Contact birthdays" : "Kontaktfödelsedagar",
"Personal" : "Personligt",
"Calendar" : "Kalender",
"Todos" : "Uppgifter",
"{actor} created calendar {calendar}" : "{actor} skapade kalender {calendar}",
"You created calendar {calendar}" : "Du skapade kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} raderade kalender {calendar}",
"You deleted calendar {calendar}" : "Du raderade kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} uppdaterade kalender {calendar}",
"You updated calendar {calendar}" : "Du uppdaterade kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} delade kalender {calendar} med dig",
"You shared calendar {calendar} with {user}" : "Du delade kalender {calendar} med {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} delade kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} slutade dela kalender {calendar} med dig",
"You unshared calendar {calendar} from {user}" : "Du slutade dela kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} slutade dela kalender {calendar} med {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} slutade dela kalender {calendar} med sig själv",
"You shared calendar {calendar} with group {group}" : "Du delade kalender {calendar} med grupp {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} delade kalender {calendar} med grupp {group}",
"You unshared calendar {calendar} from group {group}" : "Du slutade dela kalender {calendar} med gruppen {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} slutade dela kalender {calendar} med gruppen {group}",
"{actor} created event {event} in calendar {calendar}" : "{actor} skapade händelse {event} i kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Du skapade händelse {event} i kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} raderade händelse {event} från kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Du raderade händelse {event} från kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} uppdaterade händelse {event} i kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Du uppdaterade händelse {event} i kalender {calendar}",
"{actor} created todo {todo} in list {calendar}" : "{actor} skapade uppgift {todo} i listan {calendar}",
"You created todo {todo} in list {calendar}" : "Du skapade uppgift {todo} i listan {calendar}",
"{actor} deleted todo {todo} from list {calendar}" : "{actor} raderade uppgift {todo} från listan {calendar}",
"You deleted todo {todo} from list {calendar}" : "Du raderade uppgift {todo} från listan {calendar}",
"{actor} updated todo {todo} in list {calendar}" : "{actor} uppdaterade uppgift {todo} i listan {calendar}",
"You updated todo {todo} in list {calendar}" : "Du uppdaterade uppgift {todo} i listan {calendar}",
"{actor} solved todo {todo} in list {calendar}" : "{actor} löste uppgift {todo} i listan {calendar}",
"You solved todo {todo} in list {calendar}" : "Du löste uppgift {todo} i listan {calendar}",
"{actor} reopened todo {todo} in list {calendar}" : "{actor} återupptog uppgift {todo} i listan {calendar}",
"You reopened todo {todo} in list {calendar}" : "Du återupptog uppgift {todo} i listan {calendar}",
"A <strong>calendar</strong> was modified" : "En <strong>kalender</strong> modifierades",
"A calendar <strong>event</strong> was modified" : "En kalender-<strong>händelse</strong> modifierades",
"A calendar <strong>todo</strong> was modified" : "En kalender <strong>uppgift</strong> modifierades",
"Contact birthdays" : "Födelsedagar",
"Personal" : "Privat",
"Contacts" : "Kontakter",
"Technical details" : "Tekniska detaljer",
"Remote Address: %s" : "Fjärradress: %s",
"Remote Address: %s" : "Extern adress: %s",
"Request ID: %s" : "Begär ID: %s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -103,7 +103,7 @@ class Backend {
}
$principal = explode('/', $calendarData['principaluri']);
$owner = $principal[2];
$owner = array_pop($principal);
$currentUser = $this->userSession->getUser();
if ($currentUser instanceof IUser) {
@ -369,7 +369,7 @@ class Backend {
}
$principal = explode('/', $calendarData['principaluri']);
$owner = $principal[2];
$owner = array_pop($principal);
$currentUser = $this->userSession->getUser();
if ($currentUser instanceof IUser) {

View File

@ -42,7 +42,7 @@ class Todo implements ISetting {
* @since 11.0.0
*/
public function getIdentifier() {
return 'calendar_todos';
return 'calendar_todo';
}
/**

View File

@ -30,6 +30,11 @@ use Exception;
use OCA\DAV\CardDAV\CardDavBackend;
use OCA\DAV\DAV\GroupPrincipalBackend;
use Sabre\VObject\Component\VCalendar;
use Sabre\VObject\Component\VCard;
use Sabre\VObject\DateTimeParser;
use Sabre\VObject\Document;
use Sabre\VObject\InvalidDataException;
use Sabre\VObject\Property\VCard\DateAndOrTime;
use Sabre\VObject\Reader;
class BirthdayService {
@ -129,6 +134,12 @@ class BirthdayService {
}
try {
$doc = Reader::read($cardData);
// We're always converting to vCard 4.0 so we can rely on the
// VCardConverter handling the X-APPLE-OMIT-YEAR property for us.
if (!$doc instanceof VCard) {
return null;
}
$doc = $doc->convert(Document::VCARD40);
} catch (Exception $e) {
return null;
}
@ -136,21 +147,43 @@ class BirthdayService {
if (!isset($doc->{$dateField})) {
return null;
}
if (!isset($doc->FN)) {
return null;
}
$birthday = $doc->{$dateField};
if (!(string)$birthday) {
return null;
}
$title = str_replace('{name}',
strtr((string)$doc->FN, array('\,' => ',', '\;' => ';')),
'{name}'
);
// Skip if the BDAY property is not of the right type.
if (!$birthday instanceof DateAndOrTime) {
return null;
}
// Skip if we can't parse the BDAY value.
try {
$dateParts = DateTimeParser::parseVCardDateTime($birthday->getValue());
} catch (InvalidDataException $e) {
return null;
}
$unknownYear = false;
if (!$dateParts['year']) {
$birthday = '1900-' . $dateParts['month'] . '-' . $dateParts['date'];
$unknownYear = true;
}
try {
$date = new \DateTime($birthday);
} catch (Exception $e) {
return null;
}
$summary = $title . ' (' . $summarySymbol . $date->format('Y') . ')';
if ($unknownYear) {
$summary = $doc->FN->getValue() . ' ' . $summarySymbol;
} else {
$year = (int)$date->format('Y');
$summary = $doc->FN->getValue() . " ($summarySymbol$year)";
}
$vCal = new VCalendar();
$vCal->VERSION = '2.0';
$vEvent = $vCal->createComponent('VEVENT');

View File

@ -131,6 +131,9 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
/** @var EventDispatcherInterface */
private $dispatcher;
/** @var bool */
private $legacyEndpoint;
/**
* CalDavBackend constructor.
*
@ -139,18 +142,21 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @param IUserManager $userManager
* @param ISecureRandom $random
* @param EventDispatcherInterface $dispatcher
* @param bool $legacyEndpoint
*/
public function __construct(IDBConnection $db,
Principal $principalBackend,
IUserManager $userManager,
ISecureRandom $random,
EventDispatcherInterface $dispatcher) {
EventDispatcherInterface $dispatcher,
$legacyEndpoint = false) {
$this->db = $db;
$this->principalBackend = $principalBackend;
$this->userManager = $userManager;
$this->sharingBackend = new Backend($this->db, $principalBackend, 'calendar');
$this->random = $random;
$this->dispatcher = $dispatcher;
$this->legacyEndpoint = $legacyEndpoint;
}
/**
@ -230,12 +236,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], false),
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $principalUri,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($principalUri, !$this->legacyEndpoint),
];
foreach($this->propertyMap as $xmlName=>$dbName) {
@ -282,12 +288,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $uri,
'principaluri' => $principalUri,
'principaluri' => $this->convertPrincipal($principalUri, !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
];
@ -328,7 +334,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], false),
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@ -392,12 +398,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['publicuri'],
'principaluri' => $row['principaluri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], $this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}public' => (int)$row['access'] === self::ACCESS_PUBLIC,
];
@ -456,12 +462,12 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['publicuri'],
'principaluri' => $row['principaluri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
'{' . Plugin::NS_CALDAV . '}schedule-calendar-transp' => new ScheduleCalendarTransp($row['transparent']?'transparent':'opaque'),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $row['principaluri'],
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}owner-principal' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}read-only' => (int)$row['access'] === Backend::ACCESS_READ,
'{' . \OCA\DAV\DAV\Sharing\Plugin::NS_OWNCLOUD . '}public' => (int)$row['access'] === self::ACCESS_PUBLIC,
];
@ -510,7 +516,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
'principaluri' => $row['principaluri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@ -554,7 +560,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$calendar = [
'id' => $row['id'],
'uri' => $row['uri'],
'principaluri' => $row['principaluri'],
'principaluri' => $this->convertPrincipal($row['principaluri'], !$this->legacyEndpoint),
'{' . Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($row['synctoken']?$row['synctoken']:'0'),
'{http://sabredav.org/ns}sync-token' => $row['synctoken']?$row['synctoken']:'0',
'{' . Plugin::NS_CALDAV . '}supported-calendar-component-set' => new SupportedCalendarComponentSet($components),
@ -581,7 +587,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
*/
function createCalendar($principalUri, $calendarUri, array $properties) {
$values = [
'principaluri' => $principalUri,
'principaluri' => $this->convertPrincipal($principalUri, true),
'uri' => $calendarUri,
'synctoken' => 1,
'transparent' => 0,

View File

@ -1,8 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @copyright Copyright (c) 2017, Georg Ehrke
*
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Georg Ehrke <oc.list@georgehrke.com>
*
* @license AGPL-3.0
*
@ -42,7 +44,11 @@ class CalendarObject extends \Sabre\CalDAV\CalendarObject {
}
private function isShared() {
return isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal']);
if (!isset($this->calendarInfo['{http://owncloud.org/ns}owner-principal'])) {
return false;
}
return $this->calendarInfo['{http://owncloud.org/ns}owner-principal'] !== $this->calendarInfo['principaluri'];
}
/**

View File

@ -33,24 +33,9 @@ use Sabre\DAVACL\Xml\Property\Principal;
class LegacyDAVACL extends DavAclPlugin {
/**
* Converts the v1 principal `principal/<username>` to the new v2
* `principal/users/<username>` which is required for permission checks
*
* @inheritdoc
*/
function getCurrentUserPrincipal() {
$principalV1 = parent::getCurrentUserPrincipal();
if (is_null($principalV1)) {
return $principalV1;
}
return $this->convertPrincipal($principalV1, true);
}
/**
* @inheritdoc
*/
function getCurrentUserPrincipals() {
public function getCurrentUserPrincipals() {
$principalV2 = $this->getCurrentUserPrincipal();
if (is_null($principalV2)) return [];
@ -73,7 +58,7 @@ class LegacyDAVACL extends DavAclPlugin {
return "principals/$name";
}
function propFind(PropFind $propFind, INode $node) {
public function propFind(PropFind $propFind, INode $node) {
/* Overload current-user-principal */
$propFind->handle('{DAV:}current-user-principal', function () {
if ($url = parent::getCurrentUserPrincipal()) {

View File

@ -247,8 +247,10 @@ class FilesPlugin extends ServerPlugin {
$node = $this->tree->getNodeForPath($request->getPath());
if (!($node instanceof IFile)) return;
// adds a 'Content-Disposition: attachment' header
if ($this->downloadAttachment) {
// adds a 'Content-Disposition: attachment' header in case no disposition
// header has been set before
if ($this->downloadAttachment &&
$response->getHeader('Content-Disposition') === null) {
$filename = $node->getName();
if ($this->request->isUserAgent(
[
@ -326,6 +328,9 @@ class FilesPlugin extends ServerPlugin {
$propFind->handle(self::HAS_PREVIEW_PROPERTYNAME, function () use ($node) {
return json_encode($this->previewManager->isAvailable($node->getFileInfo()));
});
$propFind->handle(self::SIZE_PROPERTYNAME, function() use ($node) {
return $node->getSize();
});
}
if ($node instanceof \OCA\DAV\Connector\Sabre\Node) {

View File

@ -24,9 +24,7 @@
namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Exception\PreconditionFailed;
use Sabre\DAV\Exception\ReportNotSupported;
use Sabre\DAV\Exception\BadRequest;
use Sabre\DAV\ServerPlugin;
use Sabre\DAV\Tree;
@ -105,7 +103,7 @@ class FilesReportPlugin extends ServerPlugin {
* @param ITagManager $fileTagger manager for private tags
* @param IUserSession $userSession
* @param IGroupManager $groupManager
* @param Folder $userfolder
* @param Folder $userFolder
*/
public function __construct(Tree $tree,
View $view,
@ -161,11 +159,12 @@ class FilesReportPlugin extends ServerPlugin {
* REPORT operations to look for files
*
* @param string $reportName
* @param [] $report
* @param $report
* @param string $uri
* @return bool
* @throws NotFound
* @throws ReportNotSupported
* @throws BadRequest
* @throws PreconditionFailed
* @internal param $ [] $report
*/
public function onReport($reportName, $report, $uri) {
$reportTargetNode = $this->server->tree->getNodeForPath($uri);
@ -232,7 +231,6 @@ class FilesReportPlugin extends ServerPlugin {
private function getFilesBaseUri($uri, $subPath) {
$uri = trim($uri, '/');
$subPath = trim($subPath, '/');
$filesUri = '';
if (empty($subPath)) {
$filesUri = $uri;
} else {

View File

@ -250,7 +250,11 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin
if (is_null($isFav)) {
list(, $isFav) = $this->getTagsAndFav($node->getId());
}
return $isFav;
if ($isFav) {
return 1;
} else {
return 0;
}
});
}

View File

@ -21,6 +21,7 @@
*/
namespace OCA\DAV\Files;
use Sabre\DAV\INode;
use Sabre\DAVACL\AbstractPrincipalCollection;
use Sabre\HTTP\URLUtil;
use Sabre\DAV\SimpleCollection;

View File

@ -0,0 +1,71 @@
<?php
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @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/>.
*
*/
namespace OCA\DAV\Migration;
use OC\BackgroundJob\QueuedJob;
use OCA\DAV\CalDAV\CalDavBackend;
use OCP\ILogger;
use Sabre\VObject\InvalidDataException;
class ValueFix extends QueuedJob {
/** @var CalDavBackend */
private $calDavBackend;
/** @var ILogger */
private $logger;
public function __construct(CalDavBackend $calDavBackend, ILogger $logger) {
$this->calDavBackend = $calDavBackend;
$this->logger = $logger;
}
public function run($argument) {
$user = $argument['user'];
$pattern = '/;VALUE=:/';
$principal = 'principals/users/' . $user;
$calendars = $this->calDavBackend->getCalendarsForUser($principal);
foreach ($calendars as $calendar) {
$objects = $this->calDavBackend->getCalendarObjects($calendar['id']);
foreach ($objects as $object) {
$calObject = $this->calDavBackend->getCalendarObject($calendar['id'], $object['uri']);
$data = preg_replace($pattern, ':', $calObject['calendardata']);
if ($data !== $calObject['calendardata']) {
try {
$this->calDavBackend->getDenormalizedData($data);
} catch (InvalidDataException $e) {
$this->logger->info('Calendar object for calendar {cal} with uri {uri} still invalid', [
'app'=> 'dav',
'cal' => $calendar['id'],
'uri' => $object['uri'],
]);
continue;
}
$this->calDavBackend->updateCalendarObject($calendar['id'], $object['uri'], $data);
}
}
}
}
}

View File

@ -0,0 +1,63 @@
<?php
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @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/>.
*
*/
namespace OCA\DAV\Migration;
use OCP\BackgroundJob\IJobList;
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
class ValueFixInsert implements IRepairStep {
/** @var IUserManager */
private $userManager;
/** @var IJobList */
private $jobList;
/** @var IConfig */
private $config;
public function __construct(IUserManager $userManager,
IJobList $jobList,
IConfig $config) {
$this->userManager = $userManager;
$this->jobList = $jobList;
$this->config = $config;
}
public function getName() {
return 'Insert ValueFix background job for each user';
}
public function run(IOutput $output) {
if ($this->config->getAppValue('dav', self::class . '_ran', 'false') !== 'true') {
$this->userManager->callForSeenUsers(function (IUser $user) {
$this->jobList->add(ValueFix::class, ['user' => $user->getUID()]);
});
$this->config->setAppValue('dav', self::class . '_ran', 'true');
}
}
}

View File

@ -33,11 +33,14 @@ use OCA\DAV\CardDAV\ImageExportPlugin;
use OCA\DAV\Comments\CommentsPlugin;
use OCA\DAV\Connector\Sabre\Auth;
use OCA\DAV\Connector\Sabre\BlockLegacyClientPlugin;
use OCA\DAV\Connector\Sabre\CommentPropertiesPlugin;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use OCA\DAV\Connector\Sabre\DavAclPlugin;
use OCA\DAV\Connector\Sabre\DummyGetResponsePlugin;
use OCA\DAV\Connector\Sabre\FakeLockerPlugin;
use OCA\DAV\Connector\Sabre\FilesPlugin;
use OCA\DAV\Connector\Sabre\FilesReportPlugin;
use OCA\DAV\Connector\Sabre\SharesPlugin;
use OCA\DAV\DAV\PublicAuth;
use OCA\DAV\Connector\Sabre\QuotaPlugin;
use OCA\DAV\Files\BrowserErrorPagePlugin;
@ -85,7 +88,6 @@ class Server {
$this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig()));
$authPlugin = new Plugin();
$authPlugin->addBackend($authBackend);
$authPlugin->addBackend(new PublicAuth());
$this->server->addPlugin($authPlugin);
@ -166,7 +168,7 @@ class Server {
// custom properties plugin must be the last one
$userSession = \OC::$server->getUserSession();
$user = $userSession->getUser();
if (!is_null($user)) {
if ($user !== null) {
$view = \OC\Files\Filesystem::getView();
$this->server->addPlugin(
new FilesPlugin(
@ -188,9 +190,10 @@ class Server {
)
)
);
$this->server->addPlugin(
new QuotaPlugin($view)
);
if ($view !== null) {
$this->server->addPlugin(
new QuotaPlugin($view));
}
$this->server->addPlugin(
new TagsPlugin(
$this->server->tree, \OC::$server->getTagManager()
@ -198,28 +201,29 @@ class Server {
);
// TODO: switch to LazyUserFolder
$userFolder = \OC::$server->getUserFolder();
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\SharesPlugin(
$this->server->addPlugin(new SharesPlugin(
$this->server->tree,
$userSession,
$userFolder,
\OC::$server->getShareManager()
));
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CommentPropertiesPlugin(
$this->server->addPlugin(new CommentPropertiesPlugin(
\OC::$server->getCommentsManager(),
$userSession
));
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\FilesReportPlugin(
$this->server->tree,
$view,
\OC::$server->getSystemTagManager(),
\OC::$server->getSystemTagObjectMapper(),
\OC::$server->getTagManager(),
$userSession,
\OC::$server->getGroupManager(),
$userFolder
));
if ($view !== null) {
$this->server->addPlugin(new FilesReportPlugin(
$this->server->tree,
$view,
\OC::$server->getSystemTagManager(),
\OC::$server->getSystemTagObjectMapper(),
\OC::$server->getTagManager(),
$userSession,
\OC::$server->getGroupManager(),
$userFolder
));
}
}
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin());
});
}

View File

@ -157,12 +157,13 @@ class SystemTagNode implements \Sabre\DAV\INode {
public function delete() {
try {
if (!$this->isAdmin) {
throw new Forbidden('No permission to delete tag ' . $this->tag->getId());
}
if (!$this->tagManager->canUserSeeTag($this->tag, $this->user)) {
throw new NotFound('Tag with id ' . $this->tag->getId() . ' not found');
}
if (!$this->tagManager->canUserAssignTag($this->tag, $this->user)) {
throw new Forbidden('No permission to delete tag ' . $this->tag->getId());
}
$this->tagManager->deleteTags($this->tag->getId());
} catch (TagNotFoundException $e) {

View File

@ -2,6 +2,9 @@
SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
# Move the endpoint to the serverinfo file
cp "$SCRIPTPATH/../caldavtest/serverinfo-new-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
# start the server
php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &

View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
# Move the endpoint to the serverinfo file
cp "$SCRIPTPATH/../caldavtest/serverinfo-old-caldav-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
# start the server
php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
sleep 30
# run the tests
cd "$SCRIPTPATH/CalDAVTester"
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
"CalDAV/current-user-principal.xml" \
"CalDAV/sync-report.xml"
RESULT=$?
tail "$/../../../../../data-autotest/nextcloud.log"
exit $RESULT

View File

@ -0,0 +1,850 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE serverinfo SYSTEM
"/home/deepdiver/Development/ownCloud/master/apps/dav/tests/travis/caldavtest/serverinfo.dtd">
<!--
Copyright (c) 2006-2015 Apple Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<serverinfo>
<host>localhost</host>
<nonsslport>8888</nonsslport>
<authtype>basic</authtype>
<!-- <unix>/tmp/caldavd_requests/unsecured.sock</unix> -->
<waitcount>120</waitcount>
<waitdelay>0.25</waitdelay>
<waitsuccess>30</waitsuccess>
<features>
<!-- Generic WebDAV extensions -->
<feature>COPY Method</feature> <!-- COPY method -->
<feature>MOVE Method</feature> <!-- MOVE method -->
<feature>Extended MKCOL</feature> <!-- Extended MKCOL -->
<!-- ACL related -->
<feature>ACL Method</feature> <!-- ACL method -->
<feature>acl-principal-prop-set REPORT</feature> <!-- ACL acl-principal-prop-set REPORT -->
<feature>principal-match REPORT</feature> <!-- ACL principal-match REPORT -->
<feature>principal-property-search REPORT</feature> <!-- ACL principal-property-search REPORT -->
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>calendarserver-principal-search REPORT</feature> <!-- ACL calendarserver-principal-search REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
<!-- <feature>auth-on-root</feature> --> <!-- Whether the server requires authentication on the root URI -->
<feature>brief</feature> <!-- Brief header for PROPFIND, REPORT -->
<feature>bulk-post</feature> <!-- Bulk POST requests -->
<feature>ctag</feature> <!-- ctag extension -->
<feature>current-user-principal</feature> <!-- current-user-principal extension -->
<feature>directory listing</feature> <!-- GET on collection -->
<feature>extended-principal-search</feature> <!-- Extended principal-property-search REPORT extension -->
<feature>expand-property</feature> <!-- Expand property REPORT -->
<feature>only-proxy-groups</feature> <!-- Group-membership only includes delegated-to groups -->
<feature>limits</feature> <!-- max-collections and max-resources limits -->
<feature>own-root</feature> <!-- / is owned by this service -->
<feature>prefer</feature> <!-- Prefer header overall support -->
<feature>prefer-minimal</feature> <!-- Prefer header return=minimal -->
<feature>prefer-representation</feature> <!-- Prefer header return=representation -->
<feature>prefer-noroot</feature> <!-- Prefer header depth-noroot -->
<feature>quota</feature> <!-- WebDAV QUOTA -->
<!-- <feature>quota-on-resources</feature> --> <!-- WebDAV QUOTA on calendar and address book object resources -->
<feature>resource-id</feature> <!-- WebDAV BIND DAV:resource-id property -->
<feature>sync-report</feature> <!-- WebDAV collection sync REPORT -->
<!-- <feature>sync-report-limit</feature> --> <!-- WebDAV collection sync REPORT DAV:limit support -->
<!--<feature>sync-report-home</feature> &lt;!&ndash; WebDAV collection sync REPORT on Homes &ndash;&gt;-->
<feature>sync-report-config-token</feature> <!-- Sync REPORT token includes configuration component -->
<feature>well-known</feature> <!-- well-known feature -->
<!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
<!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
<feature>json-data</feature> <!-- jCal and jCard support -->
<!-- CalendarServer specific extensions -->
<feature>control-api</feature> <!-- Control API support -->
<!-- CalDAV specific extension -->
<feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
<feature>attachments-collection</feature> <!-- Server uses a collection in same WebDAV tree to store attachments -->
<feature>auto-accept</feature> <!-- Auto-accept for rooms & locations -->
<feature>auto-accept-modes</feature> <!-- Auto-accept modes -->
<feature>client-fix-TRANSP</feature> <!-- fix client TRANSP -->
<!-- <feature>dropbox</feature> --> <!-- dropbox extension -->
<feature>default-alarms</feature> <!-- default alarms extension -->
<feature>EMAIL parameter</feature> <!-- Server normalizes cuaddress and adds EMAIL parameter -->
<feature>extended-freebusy</feature> <!-- Extended freebusy response -->
<feature>freebusy-url</feature> <!-- Freebusy URL -->
<feature>group-attendee-expansion</feature> <!-- Auto-expansion of group attendees -->
<feature>implicit-scheduling</feature> <!-- CalDAV scheduling - implicit -->
<feature>location-resource-tracking</feature> <!-- Server tracks who makes unscheduled changes to locations and resources -->
<feature>managed-attachments</feature> <!-- CalDAV Managed Attachments -->
<feature>maskuid</feature> <!-- maskuid extension -->
<feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported -->
<feature>partstat-timestamp</feature> <!-- Time stamps when PARTSTAT changes extension -->
<!-- <feature>podding</feature> --> <!-- Podded server -->
<feature>private-comments</feature> <!-- private-comments extension -->
<feature>private-events</feature> <!-- private-events extension -->
<feature>proxy</feature> <!-- calendar-user-proxy extension -->
<!-- <feature>proxy-authz</feature> --> <!-- sudo user extension -->
<feature>recurrence-splitting</feature> <!-- Recurring components can be split -->
<feature>remove-duplicate-alarms</feature> <!-- Server removes any duplicate alarms on PUT -->
<feature>query-extended</feature> <!-- calendar-query-extended extension -->
<feature>shared-calendars</feature> <!-- Shared calendars extension -->
<feature>share-calendars-to-groups</feature> <!-- Share calendars to groups extension -->
<feature>schedule-changes</feature> <!-- schedule-changes property extension -->
<feature>split-calendars</feature> <!-- Calendars are split by component type -->
<feature>supported-component-sets</feature> <!-- CALDAV:supported-calendar-component-sets on calendar homes -->
<feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
<feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
<feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
<feature>timezones-by-reference</feature> <!-- Timezones by reference enabled -->
<feature>timezone-service</feature> <!-- Timezone service extension for Wiki -->
<feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
<!-- <feature>trash-collection</feature> --> <!-- Trash collection enabled -->
<feature>travel-time-busy</feature> <!-- Travel time appears as busy -->
<feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
<!-- <feature>vpoll</feature> --> <!-- VPOLL support for store and scheduling -->
<feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
<!-- CardDAV specific extension -->
<feature>carddav</feature> <!-- Basic CardDAV feature enabler -->
<feature>default-addressbook</feature> <!-- Default address book behavior -->
<feature>shared-addressbooks</feature> <!-- Shared address books extension -->
<feature>shared-addressbook-groups</feature> <!-- Shared address book groups extension -->
<feature>directory-gateway</feature> <!-- Directory gateway extension -->
</features>
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
<key>$multistatus-response-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response</value>
</substitution>
<substitution>
<key>$multistatus-href-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
</substitution>
<substitution>
<key>$verify-response-prefix:</key>
<value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
<substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
<substitution>
<key>$verify-bad-response:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value>
</substitution>
<substitution>
<key>$verify-error-response:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value>
</substitution>
<substitution>
<key>$CALDAV:</key>
<value>urn:ietf:params:xml:ns:caldav</value>
</substitution>
<substitution>
<key>$CARDDAV:</key>
<value>urn:ietf:params:xml:ns:carddav</value>
</substitution>
<substitution>
<key>$CS:</key>
<value>http://calendarserver.org/ns/</value>
</substitution>
<!-- Server configuration settings -->
<!-- $host: and $hostssl: are implicitly added by CalDAVTester based
on the host/nonsslport/sslport values and ssl command line switch -->
<!-- relative path to caldav root-->
<substitution>
<key>$root:</key>
<value>/remote.php/caldav/</value>
</substitution>
<!-- relative path to main principal collection-->
<substitution>
<key>$principalcollection:</key>
<value>$root:principals/</value>
</substitution>
<!-- the core recored type collections-->
<substitution>
<key>$uidstype:</key>
<value>__uids__</value>
</substitution>
<substitution>
<key>$groupstype:</key>
<value>groups</value>
</substitution>
<substitution>
<key>$locationstype:</key>
<value>locations</value>
</substitution>
<substitution>
<key>$resourcestype:</key>
<value>resources</value>
</substitution>
<!-- relative path to record type principal collections-->
<substitution>
<key>$principals_uids:</key>
<value>$principalcollection:$uidstype:/</value>
</substitution>
<substitution>
<key>$principals_users:</key>
<value>$principalcollection:</value>
</substitution>
<substitution>
<key>$principals_groups:</key>
<value>$principalcollection:$groupstype:/</value>
</substitution>
<substitution>
<key>$principals_resources:</key>
<value>$principalcollection:$resourcestype:/</value>
</substitution>
<substitution>
<key>$principals_locations:</key>
<value>$principalcollection:$locationstype:/</value>
</substitution>
<!-- relative path to calendars collection-->
<substitution>
<key>$calendars:</key>
<value>$root:calendars/</value>
</substitution>
<!-- relative path to record type calendar collections-->
<substitution>
<key>$calendars_uids:</key>
<value>$calendars:$uidstype:/</value>
</substitution>
<substitution>
<key>$calendars_users:</key>
<value>$calendars:/</value>
</substitution>
<substitution>
<key>$calendars_resources:</key>
<value>$calendars:$resourcestype:/</value>
</substitution>
<substitution>
<key>$calendars_locations:</key>
<value>$calendars:$locationstype:/</value>
</substitution>
<!-- primary calendar name-->
<substitution>
<key>$calendar:</key>
<value>calendar</value>
</substitution>
<!-- primary tasks-only calendar name-->
<substitution>
<key>$tasks:</key>
<value>tasks</value>
</substitution>
<!-- primary polls-only calendar name-->
<substitution>
<key>$polls:</key>
<value>polls</value>
</substitution>
<!-- inbox name-->
<substitution>
<key>$inbox:</key>
<value>inbox</value>
</substitution>
<!-- outbox name-->
<substitution>
<key>$outbox:</key>
<value>outbox</value>
</substitution>
<!-- dropbox name-->
<substitution>
<key>$dropbox:</key>
<value>dropbox</value>
</substitution>
<!-- attachments name-->
<substitution>
<key>$attachments:</key>
<value>dropbox</value>
</substitution>
<!-- notification name-->
<substitution>
<key>$notification:</key>
<value>notification</value>
</substitution>
<!-- freebusy name-->
<substitution>
<key>$freebusy:</key>
<value>freebusy</value>
</substitution>
<!-- Sync home collection items - use "-" to include the home resource-->
<substitution>
<key>$calendar_home_items_initial_sync:</key>
<value>[-,$calendar:/,$tasks:/,$inbox:/,$outbox:/,$freebusy:,$notification:/]</value>
</substitution>
<!-- Sync collection extra items - use "-" to include the collection-->
<substitution>
<key>$calendar_sync_extra_items:</key>
<value>[-]</value>
</substitution>
<!-- Sync collection extra count - gets added to the totalcount value-->
<substitution>
<key>$calendar_sync_extra_count:</key>
<value>1</value> <!-- the request-uri resource is returned when no token passed-->
</substitution>
<!-- server-to-server inbox-->
<substitution>
<key>$servertoserver:</key>
<value>$root:inbox</value>
</substitution>
<!-- timezone service-->
<substitution>
<key>$timezoneservice:</key>
<value>$root:timezones</value>
</substitution>
<!-- timezone std service-->
<substitution>
<key>$timezonestdservice:</key>
<value>$root:stdtimezones</value>
</substitution>
<!-- relative path to addressbooks collection-->
<substitution>
<key>$addressbooks:</key>
<value>$root:addressbooks/</value>
</substitution>
<!-- relative path to record type addressbook collections-->
<substitution>
<key>$addressbooks_uids:</key>
<value>$addressbooks:$uidstype:/</value>
</substitution>
<substitution>
<key>$addressbooks_users:</key>
<value>$addressbooks:/</value>
</substitution>
<!-- primary addressbook name -->
<substitution>
<key>$addressbook:</key>
<value>addressbook</value>
</substitution>
<!-- directory name -->
<substitution>
<key>$directory:</key>
<value>$root:directory/</value>
</substitution>
<!-- POST add-member URI suffix -->
<substitution>
<key>$add-member:</key>
<value>;add-member</value>
</substitution>
<!-- user id for admin user -->
<substitution>
<key>$useradmin:</key>
<value>admin</value>
</substitution>
<!-- guid for admin user -->
<substitution>
<key>$useradminguid:</key>
<value>0C8BDE62-E600-4696-83D3-8B5ECABDFD2E</value>
</substitution>
<!-- password for admin user -->
<substitution>
<key>$pswdadmin:</key>
<value>admin</value>
</substitution>
<!-- relative path to admin principal resource-->
<substitution>
<key>$principal_admin:</key>
<value>$principals_users:$useradmin:/</value>
</substitution>
<substitution>
<key>$principaluri_admin:</key>
<value>$principals_uids:$useradminguid:/</value>
</substitution>
<!-- user id for apprentice user -->
<substitution>
<key>$userapprentice:</key>
<value>apprentice</value>
</substitution>
<!-- guid for apprentice user -->
<substitution>
<key>$userapprenticeguid:</key>
<value>29B6C503-11DF-43EC-8CCA-40C7003149CE</value>
</substitution>
<!-- password for admin user -->
<substitution>
<key>$pswdapprentice:</key>
<value>apprentice</value>
</substitution>
<!-- relative path to apprentice principal resource-->
<substitution>
<key>$principal_apprentice:</key>
<value>$principals_users:$userapprentice:/</value>
</substitution>
<substitution>
<key>$principaluri_apprentice:</key>
<value>$principals_uids:$userapprenticeguid:/</value>
</substitution>
<!-- user id for proxy user -->
<substitution>
<key>$userproxy:</key>
<value>superuser</value>
</substitution>
<!-- password for proxy user -->
<substitution>
<key>$pswdproxy:</key>
<value>superuser</value>
</substitution>
<!-- Forty user accounts -->
<repeat count="40">
<!-- user id -->
<substitution>
<key>$userid%d:</key>
<value>user%02d</value>
</substitution>
<!-- user guid -->
<substitution>
<key>$userguid%d:</key>
<value>10000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- user name -->
<substitution>
<key>$username%d:</key>
<value>User %02d</value>
</substitution>
<!-- user name URI encoded -->
<substitution>
<key>$username-encoded%d:</key>
<value>User%%20%02d</value>
</substitution>
<!-- first name -->
<substitution>
<key>$firstname%d:</key>
<value>User</value>
</substitution>
<!-- last name -->
<substitution>
<key>$lastname%d:</key>
<value>%02d</value>
</substitution>
<!-- password -->
<substitution>
<key>$pswd%d:</key>
<value>user%02d</value>
</substitution>
<!-- relative path to user principal resource-->
<substitution>
<key>$principal%d:</key>
<value>$principals_users:$userid%d:/</value>
</substitution>
<substitution>
<key>$principaluri%d:</key>
<value>$principals_users:$userid%d:/</value>
</substitution>
<substitution>
<key>$principal%dnoslash:</key>
<value>$principals_users:$userid%d:</value>
</substitution>
<!-- relative path to user calendar home-->
<substitution>
<key>$calendarhome%d:</key>
<value>$calendars:$userid%d:</value>
</substitution>
<!-- relative path to user alternate calendar home-->
<substitution>
<key>$calendarhomealt%d:</key>
<value>$calendars_users:$userid%d:</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$calendarpath%d:</key>
<value>$calendarhome%d:/$calendar:</value>
</substitution>
<!-- relative path to user alternate calendar-->
<substitution>
<key>$calendarpathalt%d:</key>
<value>$calendarhomealt%d:/$calendar:</value>
</substitution>
<!-- relative path to user tasks calendar-->
<substitution>
<key>$taskspath%d:</key>
<value>$calendarhome%d:/$tasks:</value>
</substitution>
<!-- relative path to user polls calendar-->
<substitution>
<key>$pollspath%d:</key>
<value>$calendarhome%d:/$polls:</value>
</substitution>
<!-- relative path to user inbox-->
<substitution>
<key>$inboxpath%d:</key>
<value>$calendarhome%d:/$inbox:</value>
</substitution>
<!-- relative path to user outbox-->
<substitution>
<key>$outboxpath%d:</key>
<value>$calendarhome%d:/$outbox:</value>
</substitution>
<!-- relative path to user dropbox-->
<substitution>
<key>$dropboxpath%d:</key>
<value>$calendarhome%d:/$dropbox:</value>
</substitution>
<!-- relative path to user notification-->
<substitution>
<key>$notificationpath%d:</key>
<value>$calendarhome%d:/$notification:</value>
</substitution>
<!-- relative path to user freebusy-->
<substitution>
<key>$freebusypath%d:</key>
<value>$calendarhome%d:/$freebusy:</value>
</substitution>
<substitution>
<key>$email%d:</key>
<value>$userid%d:@example.com</value>
</substitution>
<!-- calendar user address of user-->
<substitution>
<key>$cuaddr%d:</key>
<value>mailto:$email%d:</value>
</substitution>
<substitution>
<key>$cuaddralt%d:</key>
<value>$cuaddr%d:</value>
</substitution>
<substitution>
<key>$cuaddraltnoslash%d:</key>
<value>$cuaddr%d:</value>
</substitution>
<substitution>
<key>$cuaddrurn%d:</key>
<value>urn:x-uid:$userguid%d:</value>
</substitution>
<!-- relative path to user addressbook home-->
<substitution>
<key>$addressbookhome%d:</key>
<value>$addressbooks:users/$userid%d:</value>
</substitution>
<!-- relative path to user addressbook-->
<substitution>
<key>$addressbookpath%d:</key>
<value>$addressbookhome%d:/$addressbook:</value>
</substitution>
</repeat>
<!-- Ten public accounts -->
<repeat count="10">
<!-- user id -->
<substitution>
<key>$publicuserid%d:</key>
<value>public%02d</value>
</substitution>
<!-- user guid -->
<substitution>
<key>$publicuserguid%d:</key>
<value>50000000-0000-0000-0000-0000000000%02d</value>
</substitution>
<!-- user name -->
<substitution>
<key>$publicusername%d:</key>
<value>Public %02d</value>
</substitution>
<!-- password -->
<substitution>
<key>$publicpswd%d:</key>
<value>public%02d</value>
</substitution>
<!-- relative path to user principal resource-->
<substitution>
<key>$publicprincipal%d:</key>
<value>$principals_users:$publicuserid%d:/</value>
</substitution>
<substitution>
<key>$publicprincipaluri%d:</key>
<value>$principals_uids:$publicuserguid%d:/</value>
</substitution>
<!-- relative path to user calendar home-->
<substitution>
<key>$publiccalendarhome%d:</key>
<value>$calendars_uids:$publicuserguid%d:</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$publiccalendarpath%d:</key>
<value>$calendars_uids:$publicuserguid%d:/$calendar:</value>
</substitution>
<substitution>
<key>$publicemail%d:</key>
<value>$publicuserid%d:@example.com</value>
</substitution>
<!-- calendar user address of user-->
<substitution>
<key>$publiccuaddr%d:</key>
<value>mailto:$publicemail%d:</value>
</substitution>
<substitution>
<key>$publiccuaddralt%d:</key>
<value>$publiccuaddr%d:</value>
</substitution>
<substitution>
<key>$publiccuaddrurn%d:</key>
<value>urn:x-uid:$publicuserguid%d:</value>
</substitution>
</repeat>
<!-- Twenty resource accounts -->
<repeat count="20">
<substitution>
<key>$resourceid%d:</key>
<value>resource%02d</value>
</substitution>
<!-- resource guid-->
<substitution>
<key>$resourceguid%d:</key>
<value>40000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- resource name-->
<substitution>
<key>$resourcename%d:</key>
<value>Resource %02d</value>
</substitution>
<!-- relative path to first resource calendar home-->
<substitution>
<key>$rcalendarhome%d:</key>
<value>$calendars_uids:$resourceguid%d:</value>
</substitution>
<!-- relative path to first resource calendar home-->
<substitution>
<key>$rcalendarpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$calendar:</value>
</substitution>
<!-- relative path to first resource inbox-->
<substitution>
<key>$rinboxpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$inbox:</value>
</substitution>
<!-- relative path to first resource outbox-->
<substitution>
<key>$routboxpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$outbox:</value>
</substitution>
<!-- relative path to first resource principal resource-->
<substitution>
<key>$rprincipal%d:</key>
<value>$principals_resources:$resourceid%d:/</value>
</substitution>
<substitution>
<key>$rprincipaluri%d:</key>
<value>$principals_uids:$resourceguid%d:/</value>
</substitution>
<substitution>
<key>$rcuaddralt%d:</key>
<value>$rcuaddrurn%d:</value>
</substitution>
<substitution>
<key>$rcuaddrurn%d:</key>
<value>urn:x-uid:$resourceguid%d:</value>
</substitution>
</repeat>
<!-- Ten Location accounts -->
<repeat count="10">
<substitution>
<key>$locationid%d:</key>
<value>location%02d</value>
</substitution>
<!-- location guid-->
<substitution>
<key>$locationguid%d:</key>
<value>30000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- location name-->
<substitution>
<key>$locationname%d:</key>
<value>Location %02d</value>
</substitution>
<!-- relative path to first location calendar home-->
<substitution>
<key>$lcalendarhome%d:</key>
<value>$calendars_uids:$locationguid%d:</value>
</substitution>
<!-- relative path to first location calendar home-->
<substitution>
<key>$lcalendarpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$calendar:</value>
</substitution>
<!-- relative path to first location inbox-->
<substitution>
<key>$linboxpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$inbox:</value>
</substitution>
<!-- relative path to first location outbox-->
<substitution>
<key>$loutboxpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$outbox:</value>
</substitution>
<!-- relative path to first location principal resource-->
<substitution>
<key>$lprincipal%d:</key>
<value>$principals_resources:$locationid%d:/</value>
</substitution>
<substitution>
<key>$lprincipaluri%d:</key>
<value>$principals_uids:$locationguid%d:/</value>
</substitution>
<substitution>
<key>$lcuaddralt%d:</key>
<value>$lprincipaluri%d:</value>
</substitution>
<substitution>
<key>$lcuaddrurn%d:</key>
<value>urn:x-uid:$locationguid%d:</value>
</substitution>
</repeat>
<!-- Ten Group accounts -->
<repeat count="40">
<substitution>
<key>$groupid%d:</key>
<value>group%02d</value>
</substitution>
<!-- group guid-->
<substitution>
<key>$groupguid%d:</key>
<value>20000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- group name-->
<substitution>
<key>$groupname%d:</key>
<value>Group %02d</value>
</substitution>
<!-- relative path to first group principal resource-->
<substitution>
<key>$gprincipal%d:</key>
<value>$principals_resources:$groupid%d:/</value>
</substitution>
<substitution>
<key>$gprincipaluri%d:</key>
<value>$principals_uids:$groupguid%d:/</value>
</substitution>
<substitution>
<key>$gemail%d:</key>
<value>$groupid%d:@example.com</value>
</substitution>
<substitution>
<key>$gcuaddralt%d:</key>
<value>$gprincipaluri%d:</value>
</substitution>
<substitution>
<key>$gcuaddrurn%d:</key>
<value>urn:x-uid:$groupguid%d:</value>
</substitution>
</repeat>
<!-- User with non-ascii name -->
<substitution>
<key>$i18nid:</key>
<value>i18nuser</value>
</substitution>
<!-- group guid-->
<substitution>
<key>$i18nguid:</key>
<value>860B3EE9-6D7C-4296-9639-E6B998074A78</value>
</substitution>
<!-- group name-->
<substitution>
<key>$i18nname:</key>
<value>まだ</value>
</substitution>
<!-- password -->
<substitution>
<key>$i18npswd:</key>
<value>i18nuser</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$i18ncalendarpath:</key>
<value>$calendars_uids:$i18nguid:/$calendar:</value>
</substitution>
<substitution>
<key>$i18nemail:</key>
<value>$i18nid:@example.com</value>
</substitution>
<!-- CUAddrs -->
<substitution>
<key>$i18ncuaddr:</key>
<value>mailto:$i18nemail:</value>
</substitution>
<substitution>
<key>$i18ncuaddrurn:</key>
<value>urn:x-uid:$i18nguid:</value>
</substitution>
<!-- relative path to disabled group principal resource-->
<substitution>
<key>$principaldisabled:</key>
<value>$principals_groups:disabledgroup/</value>
</substitution>
<substitution>
<key>$principaluridisabled:</key>
<value>$principals_uids:disabledgroup/</value>
</substitution>
<!-- calendar user address of disabled group-->
<substitution>
<key>$cuaddrdisabled:</key>
<value>$principals_uids:disabledgroup/</value>
</substitution>
<!-- Override some of the above definitions for special cases -->
<!-- calendar user address of second user-->
<substitution>
<key>$cuaddr2:</key>
<value>MAILTO:$email2:</value>
</substitution>
</substitutions>
</serverinfo>

View File

@ -0,0 +1,850 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE serverinfo SYSTEM
"/home/deepdiver/Development/ownCloud/master/apps/dav/tests/travis/caldavtest/serverinfo.dtd">
<!--
Copyright (c) 2006-2015 Apple Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<serverinfo>
<host>localhost</host>
<nonsslport>8888</nonsslport>
<authtype>basic</authtype>
<!-- <unix>/tmp/caldavd_requests/unsecured.sock</unix> -->
<waitcount>120</waitcount>
<waitdelay>0.25</waitdelay>
<waitsuccess>30</waitsuccess>
<features>
<!-- Generic WebDAV extensions -->
<feature>COPY Method</feature> <!-- COPY method -->
<feature>MOVE Method</feature> <!-- MOVE method -->
<feature>Extended MKCOL</feature> <!-- Extended MKCOL -->
<!-- ACL related -->
<feature>ACL Method</feature> <!-- ACL method -->
<feature>acl-principal-prop-set REPORT</feature> <!-- ACL acl-principal-prop-set REPORT -->
<feature>principal-match REPORT</feature> <!-- ACL principal-match REPORT -->
<feature>principal-property-search REPORT</feature> <!-- ACL principal-property-search REPORT -->
<feature>principal-search-property-set REPORT</feature> <!-- ACL principal-search-property-set REPORT -->
<feature>calendarserver-principal-search REPORT</feature> <!-- ACL calendarserver-principal-search REPORT -->
<feature>add-member</feature> <!-- Add-member used to create resources -->
<!-- <feature>auth-on-root</feature> --> <!-- Whether the server requires authentication on the root URI -->
<feature>brief</feature> <!-- Brief header for PROPFIND, REPORT -->
<feature>bulk-post</feature> <!-- Bulk POST requests -->
<feature>ctag</feature> <!-- ctag extension -->
<feature>current-user-principal</feature> <!-- current-user-principal extension -->
<feature>directory listing</feature> <!-- GET on collection -->
<feature>extended-principal-search</feature> <!-- Extended principal-property-search REPORT extension -->
<feature>expand-property</feature> <!-- Expand property REPORT -->
<feature>only-proxy-groups</feature> <!-- Group-membership only includes delegated-to groups -->
<feature>limits</feature> <!-- max-collections and max-resources limits -->
<feature>own-root</feature> <!-- / is owned by this service -->
<feature>prefer</feature> <!-- Prefer header overall support -->
<feature>prefer-minimal</feature> <!-- Prefer header return=minimal -->
<feature>prefer-representation</feature> <!-- Prefer header return=representation -->
<feature>prefer-noroot</feature> <!-- Prefer header depth-noroot -->
<feature>quota</feature> <!-- WebDAV QUOTA -->
<!-- <feature>quota-on-resources</feature> --> <!-- WebDAV QUOTA on calendar and address book object resources -->
<feature>resource-id</feature> <!-- WebDAV BIND DAV:resource-id property -->
<feature>sync-report</feature> <!-- WebDAV collection sync REPORT -->
<!-- <feature>sync-report-limit</feature> --> <!-- WebDAV collection sync REPORT DAV:limit support -->
<!--<feature>sync-report-home</feature> &lt;!&ndash; WebDAV collection sync REPORT on Homes &ndash;&gt;-->
<feature>sync-report-config-token</feature> <!-- Sync REPORT token includes configuration component -->
<feature>well-known</feature> <!-- well-known feature -->
<!-- <feature>per-object-ACLs</feature> --> <!-- ACL for objects in calendar/address books -->
<!-- <feature>regular-collection</feature> --> <!-- Regular collections allowed in calendar/address book homes -->
<feature>json-data</feature> <!-- jCal and jCard support -->
<!-- CalendarServer specific extensions -->
<feature>control-api</feature> <!-- Control API support -->
<!-- CalDAV specific extension -->
<feature>caldav</feature> <!-- Basic CalDAV feature enabler -->
<feature>attachments-collection</feature> <!-- Server uses a collection in same WebDAV tree to store attachments -->
<feature>auto-accept</feature> <!-- Auto-accept for rooms & locations -->
<feature>auto-accept-modes</feature> <!-- Auto-accept modes -->
<feature>client-fix-TRANSP</feature> <!-- fix client TRANSP -->
<!-- <feature>dropbox</feature> --> <!-- dropbox extension -->
<feature>default-alarms</feature> <!-- default alarms extension -->
<feature>EMAIL parameter</feature> <!-- Server normalizes cuaddress and adds EMAIL parameter -->
<feature>extended-freebusy</feature> <!-- Extended freebusy response -->
<feature>freebusy-url</feature> <!-- Freebusy URL -->
<feature>group-attendee-expansion</feature> <!-- Auto-expansion of group attendees -->
<feature>implicit-scheduling</feature> <!-- CalDAV scheduling - implicit -->
<feature>location-resource-tracking</feature> <!-- Server tracks who makes unscheduled changes to locations and resources -->
<feature>managed-attachments</feature> <!-- CalDAV Managed Attachments -->
<feature>maskuid</feature> <!-- maskuid extension -->
<feature>no-duplicate-uids</feature> <!-- duplicate UIDs in same home not supported -->
<feature>partstat-timestamp</feature> <!-- Time stamps when PARTSTAT changes extension -->
<!-- <feature>podding</feature> --> <!-- Podded server -->
<feature>private-comments</feature> <!-- private-comments extension -->
<feature>private-events</feature> <!-- private-events extension -->
<feature>proxy</feature> <!-- calendar-user-proxy extension -->
<!-- <feature>proxy-authz</feature> --> <!-- sudo user extension -->
<feature>recurrence-splitting</feature> <!-- Recurring components can be split -->
<feature>remove-duplicate-alarms</feature> <!-- Server removes any duplicate alarms on PUT -->
<feature>query-extended</feature> <!-- calendar-query-extended extension -->
<feature>shared-calendars</feature> <!-- Shared calendars extension -->
<feature>share-calendars-to-groups</feature> <!-- Share calendars to groups extension -->
<feature>schedule-changes</feature> <!-- schedule-changes property extension -->
<feature>split-calendars</feature> <!-- Calendars are split by component type -->
<feature>supported-component-sets</feature> <!-- CALDAV:supported-calendar-component-sets on calendar homes -->
<feature>supported-component-sets-one</feature> <!-- Only single component calendars allowed to be created -->
<feature>timerange-low-limit</feature> <!-- Time-range only valid one year back -->
<feature>timerange-high-limit</feature> <!-- Time-range only valid 5 years ahead -->
<feature>timezones-by-reference</feature> <!-- Timezones by reference enabled -->
<feature>timezone-service</feature> <!-- Timezone service extension for Wiki -->
<feature>timezone-std-service</feature> <!-- Timezone standard service extension -->
<!-- <feature>trash-collection</feature> --> <!-- Trash collection enabled -->
<feature>travel-time-busy</feature> <!-- Travel time appears as busy -->
<feature>vavailability</feature> <!-- VAVAILABILITY on inbox -->
<!-- <feature>vpoll</feature> --> <!-- VPOLL support for store and scheduling -->
<feature>webcal</feature> <!-- Internet calendar subscription via GET on calendar collection -->
<!-- CardDAV specific extension -->
<feature>carddav</feature> <!-- Basic CardDAV feature enabler -->
<feature>default-addressbook</feature> <!-- Default address book behavior -->
<feature>shared-addressbooks</feature> <!-- Shared address books extension -->
<feature>shared-addressbook-groups</feature> <!-- Shared address book groups extension -->
<feature>directory-gateway</feature> <!-- Directory gateway extension -->
</features>
<substitutions>
<!-- Useful xpath shortcuts for verifiers -->
<substitution>
<key>$multistatus-response-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response</value>
</substitution>
<substitution>
<key>$multistatus-href-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}href</value>
</substitution>
<substitution>
<key>$verify-response-prefix:</key>
<value>{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
<substitution>
<key>$verify-property-prefix:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}propstat/{DAV:}prop</value>
</substitution>
<substitution>
<key>$verify-bad-response:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}status</value>
</substitution>
<substitution>
<key>$verify-error-response:</key>
<value>/{DAV:}multistatus/{DAV:}response/{DAV:}error</value>
</substitution>
<substitution>
<key>$CALDAV:</key>
<value>urn:ietf:params:xml:ns:caldav</value>
</substitution>
<substitution>
<key>$CARDDAV:</key>
<value>urn:ietf:params:xml:ns:carddav</value>
</substitution>
<substitution>
<key>$CS:</key>
<value>http://calendarserver.org/ns/</value>
</substitution>
<!-- Server configuration settings -->
<!-- $host: and $hostssl: are implicitly added by CalDAVTester based
on the host/nonsslport/sslport values and ssl command line switch -->
<!-- relative path to caldav root-->
<substitution>
<key>$root:</key>
<value>/remote.php/carddav/</value>
</substitution>
<!-- relative path to main principal collection-->
<substitution>
<key>$principalcollection:</key>
<value>$root:principals/</value>
</substitution>
<!-- the core recored type collections-->
<substitution>
<key>$uidstype:</key>
<value>__uids__</value>
</substitution>
<substitution>
<key>$groupstype:</key>
<value>groups</value>
</substitution>
<substitution>
<key>$locationstype:</key>
<value>locations</value>
</substitution>
<substitution>
<key>$resourcestype:</key>
<value>resources</value>
</substitution>
<!-- relative path to record type principal collections-->
<substitution>
<key>$principals_uids:</key>
<value>$principalcollection:$uidstype:/</value>
</substitution>
<substitution>
<key>$principals_users:</key>
<value>$principalcollection:</value>
</substitution>
<substitution>
<key>$principals_groups:</key>
<value>$principalcollection:$groupstype:/</value>
</substitution>
<substitution>
<key>$principals_resources:</key>
<value>$principalcollection:$resourcestype:/</value>
</substitution>
<substitution>
<key>$principals_locations:</key>
<value>$principalcollection:$locationstype:/</value>
</substitution>
<!-- relative path to calendars collection-->
<substitution>
<key>$calendars:</key>
<value>$root:calendars/</value>
</substitution>
<!-- relative path to record type calendar collections-->
<substitution>
<key>$calendars_uids:</key>
<value>$calendars:$uidstype:/</value>
</substitution>
<substitution>
<key>$calendars_users:</key>
<value>$calendars:/</value>
</substitution>
<substitution>
<key>$calendars_resources:</key>
<value>$calendars:$resourcestype:/</value>
</substitution>
<substitution>
<key>$calendars_locations:</key>
<value>$calendars:$locationstype:/</value>
</substitution>
<!-- primary calendar name-->
<substitution>
<key>$calendar:</key>
<value>calendar</value>
</substitution>
<!-- primary tasks-only calendar name-->
<substitution>
<key>$tasks:</key>
<value>tasks</value>
</substitution>
<!-- primary polls-only calendar name-->
<substitution>
<key>$polls:</key>
<value>polls</value>
</substitution>
<!-- inbox name-->
<substitution>
<key>$inbox:</key>
<value>inbox</value>
</substitution>
<!-- outbox name-->
<substitution>
<key>$outbox:</key>
<value>outbox</value>
</substitution>
<!-- dropbox name-->
<substitution>
<key>$dropbox:</key>
<value>dropbox</value>
</substitution>
<!-- attachments name-->
<substitution>
<key>$attachments:</key>
<value>dropbox</value>
</substitution>
<!-- notification name-->
<substitution>
<key>$notification:</key>
<value>notification</value>
</substitution>
<!-- freebusy name-->
<substitution>
<key>$freebusy:</key>
<value>freebusy</value>
</substitution>
<!-- Sync home collection items - use "-" to include the home resource-->
<substitution>
<key>$calendar_home_items_initial_sync:</key>
<value>[-,$calendar:/,$tasks:/,$inbox:/,$outbox:/,$freebusy:,$notification:/]</value>
</substitution>
<!-- Sync collection extra items - use "-" to include the collection-->
<substitution>
<key>$calendar_sync_extra_items:</key>
<value>[-]</value>
</substitution>
<!-- Sync collection extra count - gets added to the totalcount value-->
<substitution>
<key>$calendar_sync_extra_count:</key>
<value>1</value> <!-- the request-uri resource is returned when no token passed-->
</substitution>
<!-- server-to-server inbox-->
<substitution>
<key>$servertoserver:</key>
<value>$root:inbox</value>
</substitution>
<!-- timezone service-->
<substitution>
<key>$timezoneservice:</key>
<value>$root:timezones</value>
</substitution>
<!-- timezone std service-->
<substitution>
<key>$timezonestdservice:</key>
<value>$root:stdtimezones</value>
</substitution>
<!-- relative path to addressbooks collection-->
<substitution>
<key>$addressbooks:</key>
<value>$root:addressbooks/</value>
</substitution>
<!-- relative path to record type addressbook collections-->
<substitution>
<key>$addressbooks_uids:</key>
<value>$addressbooks:$uidstype:/</value>
</substitution>
<substitution>
<key>$addressbooks_users:</key>
<value>$addressbooks:/</value>
</substitution>
<!-- primary addressbook name -->
<substitution>
<key>$addressbook:</key>
<value>addressbook</value>
</substitution>
<!-- directory name -->
<substitution>
<key>$directory:</key>
<value>$root:directory/</value>
</substitution>
<!-- POST add-member URI suffix -->
<substitution>
<key>$add-member:</key>
<value>;add-member</value>
</substitution>
<!-- user id for admin user -->
<substitution>
<key>$useradmin:</key>
<value>admin</value>
</substitution>
<!-- guid for admin user -->
<substitution>
<key>$useradminguid:</key>
<value>0C8BDE62-E600-4696-83D3-8B5ECABDFD2E</value>
</substitution>
<!-- password for admin user -->
<substitution>
<key>$pswdadmin:</key>
<value>admin</value>
</substitution>
<!-- relative path to admin principal resource-->
<substitution>
<key>$principal_admin:</key>
<value>$principals_users:$useradmin:/</value>
</substitution>
<substitution>
<key>$principaluri_admin:</key>
<value>$principals_uids:$useradminguid:/</value>
</substitution>
<!-- user id for apprentice user -->
<substitution>
<key>$userapprentice:</key>
<value>apprentice</value>
</substitution>
<!-- guid for apprentice user -->
<substitution>
<key>$userapprenticeguid:</key>
<value>29B6C503-11DF-43EC-8CCA-40C7003149CE</value>
</substitution>
<!-- password for admin user -->
<substitution>
<key>$pswdapprentice:</key>
<value>apprentice</value>
</substitution>
<!-- relative path to apprentice principal resource-->
<substitution>
<key>$principal_apprentice:</key>
<value>$principals_users:$userapprentice:/</value>
</substitution>
<substitution>
<key>$principaluri_apprentice:</key>
<value>$principals_uids:$userapprenticeguid:/</value>
</substitution>
<!-- user id for proxy user -->
<substitution>
<key>$userproxy:</key>
<value>superuser</value>
</substitution>
<!-- password for proxy user -->
<substitution>
<key>$pswdproxy:</key>
<value>superuser</value>
</substitution>
<!-- Forty user accounts -->
<repeat count="40">
<!-- user id -->
<substitution>
<key>$userid%d:</key>
<value>user%02d</value>
</substitution>
<!-- user guid -->
<substitution>
<key>$userguid%d:</key>
<value>10000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- user name -->
<substitution>
<key>$username%d:</key>
<value>User %02d</value>
</substitution>
<!-- user name URI encoded -->
<substitution>
<key>$username-encoded%d:</key>
<value>User%%20%02d</value>
</substitution>
<!-- first name -->
<substitution>
<key>$firstname%d:</key>
<value>User</value>
</substitution>
<!-- last name -->
<substitution>
<key>$lastname%d:</key>
<value>%02d</value>
</substitution>
<!-- password -->
<substitution>
<key>$pswd%d:</key>
<value>user%02d</value>
</substitution>
<!-- relative path to user principal resource-->
<substitution>
<key>$principal%d:</key>
<value>$principals_users:$userid%d:/</value>
</substitution>
<substitution>
<key>$principaluri%d:</key>
<value>$principals_users:$userid%d:/</value>
</substitution>
<substitution>
<key>$principal%dnoslash:</key>
<value>$principals_users:$userid%d:</value>
</substitution>
<!-- relative path to user calendar home-->
<substitution>
<key>$calendarhome%d:</key>
<value>$calendars:$userid%d:</value>
</substitution>
<!-- relative path to user alternate calendar home-->
<substitution>
<key>$calendarhomealt%d:</key>
<value>$calendars_users:$userid%d:</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$calendarpath%d:</key>
<value>$calendarhome%d:/$calendar:</value>
</substitution>
<!-- relative path to user alternate calendar-->
<substitution>
<key>$calendarpathalt%d:</key>
<value>$calendarhomealt%d:/$calendar:</value>
</substitution>
<!-- relative path to user tasks calendar-->
<substitution>
<key>$taskspath%d:</key>
<value>$calendarhome%d:/$tasks:</value>
</substitution>
<!-- relative path to user polls calendar-->
<substitution>
<key>$pollspath%d:</key>
<value>$calendarhome%d:/$polls:</value>
</substitution>
<!-- relative path to user inbox-->
<substitution>
<key>$inboxpath%d:</key>
<value>$calendarhome%d:/$inbox:</value>
</substitution>
<!-- relative path to user outbox-->
<substitution>
<key>$outboxpath%d:</key>
<value>$calendarhome%d:/$outbox:</value>
</substitution>
<!-- relative path to user dropbox-->
<substitution>
<key>$dropboxpath%d:</key>
<value>$calendarhome%d:/$dropbox:</value>
</substitution>
<!-- relative path to user notification-->
<substitution>
<key>$notificationpath%d:</key>
<value>$calendarhome%d:/$notification:</value>
</substitution>
<!-- relative path to user freebusy-->
<substitution>
<key>$freebusypath%d:</key>
<value>$calendarhome%d:/$freebusy:</value>
</substitution>
<substitution>
<key>$email%d:</key>
<value>$userid%d:@example.com</value>
</substitution>
<!-- calendar user address of user-->
<substitution>
<key>$cuaddr%d:</key>
<value>mailto:$email%d:</value>
</substitution>
<substitution>
<key>$cuaddralt%d:</key>
<value>$cuaddr%d:</value>
</substitution>
<substitution>
<key>$cuaddraltnoslash%d:</key>
<value>$cuaddr%d:</value>
</substitution>
<substitution>
<key>$cuaddrurn%d:</key>
<value>urn:x-uid:$userguid%d:</value>
</substitution>
<!-- relative path to user addressbook home-->
<substitution>
<key>$addressbookhome%d:</key>
<value>$addressbooks:$userid%d:</value>
</substitution>
<!-- relative path to user addressbook-->
<substitution>
<key>$addressbookpath%d:</key>
<value>$addressbookhome%d:/$addressbook:</value>
</substitution>
</repeat>
<!-- Ten public accounts -->
<repeat count="10">
<!-- user id -->
<substitution>
<key>$publicuserid%d:</key>
<value>public%02d</value>
</substitution>
<!-- user guid -->
<substitution>
<key>$publicuserguid%d:</key>
<value>50000000-0000-0000-0000-0000000000%02d</value>
</substitution>
<!-- user name -->
<substitution>
<key>$publicusername%d:</key>
<value>Public %02d</value>
</substitution>
<!-- password -->
<substitution>
<key>$publicpswd%d:</key>
<value>public%02d</value>
</substitution>
<!-- relative path to user principal resource-->
<substitution>
<key>$publicprincipal%d:</key>
<value>$principals_users:$publicuserid%d:/</value>
</substitution>
<substitution>
<key>$publicprincipaluri%d:</key>
<value>$principals_uids:$publicuserguid%d:/</value>
</substitution>
<!-- relative path to user calendar home-->
<substitution>
<key>$publiccalendarhome%d:</key>
<value>$calendars_uids:$publicuserguid%d:</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$publiccalendarpath%d:</key>
<value>$calendars_uids:$publicuserguid%d:/$calendar:</value>
</substitution>
<substitution>
<key>$publicemail%d:</key>
<value>$publicuserid%d:@example.com</value>
</substitution>
<!-- calendar user address of user-->
<substitution>
<key>$publiccuaddr%d:</key>
<value>mailto:$publicemail%d:</value>
</substitution>
<substitution>
<key>$publiccuaddralt%d:</key>
<value>$publiccuaddr%d:</value>
</substitution>
<substitution>
<key>$publiccuaddrurn%d:</key>
<value>urn:x-uid:$publicuserguid%d:</value>
</substitution>
</repeat>
<!-- Twenty resource accounts -->
<repeat count="20">
<substitution>
<key>$resourceid%d:</key>
<value>resource%02d</value>
</substitution>
<!-- resource guid-->
<substitution>
<key>$resourceguid%d:</key>
<value>40000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- resource name-->
<substitution>
<key>$resourcename%d:</key>
<value>Resource %02d</value>
</substitution>
<!-- relative path to first resource calendar home-->
<substitution>
<key>$rcalendarhome%d:</key>
<value>$calendars_uids:$resourceguid%d:</value>
</substitution>
<!-- relative path to first resource calendar home-->
<substitution>
<key>$rcalendarpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$calendar:</value>
</substitution>
<!-- relative path to first resource inbox-->
<substitution>
<key>$rinboxpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$inbox:</value>
</substitution>
<!-- relative path to first resource outbox-->
<substitution>
<key>$routboxpath%d:</key>
<value>$calendars_uids:$resourceguid%d:/$outbox:</value>
</substitution>
<!-- relative path to first resource principal resource-->
<substitution>
<key>$rprincipal%d:</key>
<value>$principals_resources:$resourceid%d:/</value>
</substitution>
<substitution>
<key>$rprincipaluri%d:</key>
<value>$principals_uids:$resourceguid%d:/</value>
</substitution>
<substitution>
<key>$rcuaddralt%d:</key>
<value>$rcuaddrurn%d:</value>
</substitution>
<substitution>
<key>$rcuaddrurn%d:</key>
<value>urn:x-uid:$resourceguid%d:</value>
</substitution>
</repeat>
<!-- Ten Location accounts -->
<repeat count="10">
<substitution>
<key>$locationid%d:</key>
<value>location%02d</value>
</substitution>
<!-- location guid-->
<substitution>
<key>$locationguid%d:</key>
<value>30000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- location name-->
<substitution>
<key>$locationname%d:</key>
<value>Location %02d</value>
</substitution>
<!-- relative path to first location calendar home-->
<substitution>
<key>$lcalendarhome%d:</key>
<value>$calendars_uids:$locationguid%d:</value>
</substitution>
<!-- relative path to first location calendar home-->
<substitution>
<key>$lcalendarpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$calendar:</value>
</substitution>
<!-- relative path to first location inbox-->
<substitution>
<key>$linboxpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$inbox:</value>
</substitution>
<!-- relative path to first location outbox-->
<substitution>
<key>$loutboxpath%d:</key>
<value>$calendars_uids:$locationguid%d:/$outbox:</value>
</substitution>
<!-- relative path to first location principal resource-->
<substitution>
<key>$lprincipal%d:</key>
<value>$principals_resources:$locationid%d:/</value>
</substitution>
<substitution>
<key>$lprincipaluri%d:</key>
<value>$principals_uids:$locationguid%d:/</value>
</substitution>
<substitution>
<key>$lcuaddralt%d:</key>
<value>$lprincipaluri%d:</value>
</substitution>
<substitution>
<key>$lcuaddrurn%d:</key>
<value>urn:x-uid:$locationguid%d:</value>
</substitution>
</repeat>
<!-- Ten Group accounts -->
<repeat count="40">
<substitution>
<key>$groupid%d:</key>
<value>group%02d</value>
</substitution>
<!-- group guid-->
<substitution>
<key>$groupguid%d:</key>
<value>20000000-0000-0000-0000-000000000%03d</value>
</substitution>
<!-- group name-->
<substitution>
<key>$groupname%d:</key>
<value>Group %02d</value>
</substitution>
<!-- relative path to first group principal resource-->
<substitution>
<key>$gprincipal%d:</key>
<value>$principals_resources:$groupid%d:/</value>
</substitution>
<substitution>
<key>$gprincipaluri%d:</key>
<value>$principals_uids:$groupguid%d:/</value>
</substitution>
<substitution>
<key>$gemail%d:</key>
<value>$groupid%d:@example.com</value>
</substitution>
<substitution>
<key>$gcuaddralt%d:</key>
<value>$gprincipaluri%d:</value>
</substitution>
<substitution>
<key>$gcuaddrurn%d:</key>
<value>urn:x-uid:$groupguid%d:</value>
</substitution>
</repeat>
<!-- User with non-ascii name -->
<substitution>
<key>$i18nid:</key>
<value>i18nuser</value>
</substitution>
<!-- group guid-->
<substitution>
<key>$i18nguid:</key>
<value>860B3EE9-6D7C-4296-9639-E6B998074A78</value>
</substitution>
<!-- group name-->
<substitution>
<key>$i18nname:</key>
<value>まだ</value>
</substitution>
<!-- password -->
<substitution>
<key>$i18npswd:</key>
<value>i18nuser</value>
</substitution>
<!-- relative path to user calendar-->
<substitution>
<key>$i18ncalendarpath:</key>
<value>$calendars_uids:$i18nguid:/$calendar:</value>
</substitution>
<substitution>
<key>$i18nemail:</key>
<value>$i18nid:@example.com</value>
</substitution>
<!-- CUAddrs -->
<substitution>
<key>$i18ncuaddr:</key>
<value>mailto:$i18nemail:</value>
</substitution>
<substitution>
<key>$i18ncuaddrurn:</key>
<value>urn:x-uid:$i18nguid:</value>
</substitution>
<!-- relative path to disabled group principal resource-->
<substitution>
<key>$principaldisabled:</key>
<value>$principals_groups:disabledgroup/</value>
</substitution>
<substitution>
<key>$principaluridisabled:</key>
<value>$principals_uids:disabledgroup/</value>
</substitution>
<!-- calendar user address of disabled group-->
<substitution>
<key>$cuaddrdisabled:</key>
<value>$principals_uids:disabledgroup/</value>
</substitution>
<!-- Override some of the above definitions for special cases -->
<!-- calendar user address of second user-->
<substitution>
<key>$cuaddr2:</key>
<value>MAILTO:$email2:</value>
</substitution>
</substitutions>
</serverinfo>

View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
# Move the endpoint to the serverinfo file
cp "$SCRIPTPATH/../caldavtest/serverinfo-new-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
# start the server
php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
sleep 30
# run the tests
cd "$SCRIPTPATH/CalDAVTester"
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
"CardDAV/current-user-principal.xml" \
"CardDAV/sync-report.xml" \
"CardDAV/sharing-addressbooks.xml"
RESULT=$?
tail "$/../../../../../data-autotest/nextcloud.log"
exit $RESULT

View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
# Move the endpoint to the serverinfo file
cp "$SCRIPTPATH/../caldavtest/serverinfo-old-carddav-endpoint.xml" "$SCRIPTPATH/../caldavtest/serverinfo.xml"
# start the server
php -S 127.0.0.1:8888 -t "$SCRIPTPATH/../../../../.." &
# run the tests
cd "$SCRIPTPATH/CalDAVTester"
PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail --basedir "$SCRIPTPATH/../caldavtest/" -o cdt.txt \
"CardDAV/current-user-principal.xml" \
"CardDAV/sync-report.xml"
RESULT=$?
tail "$/../../../../../data-autotest/nextcloud.log"
exit $RESULT

View File

@ -334,17 +334,15 @@ EOD;
->willReturn($calObject1)->with(666, 'event-1');
$calendarInfo = [
'{http://owncloud.org/ns}owner-principal' => $isShared ? 'user1' : 'user2',
'principaluri' => 'user2',
'id' => 666,
'uri' => 'cal',
];
if ($isShared) {
$calendarInfo['{http://owncloud.org/ns}owner-principal'] = 'user1';
}
$c = new Calendar($backend, $calendarInfo, $this->l10n);
$this->assertEquals(count($c->getChildren()), $expectedChildren);
// test private event
$privateEvent = $c->getChild('event-1');
$calData = $privateEvent->get();

View File

@ -55,18 +55,18 @@ class BirthdayServiceTest extends TestCase {
/**
* @dataProvider providesVCards
* @param boolean $nullExpected
* @param boolean $expectedSummary
* @param string | null $data
*/
public function testBuildBirthdayFromContact($nullExpected, $data) {
public function testBuildBirthdayFromContact($expectedSummary, $data) {
$cal = $this->service->buildDateFromContact($data, 'BDAY', '*');
if ($nullExpected) {
if ($expectedSummary === null) {
$this->assertNull($cal);
} else {
$this->assertInstanceOf('Sabre\VObject\Component\VCalendar', $cal);
$this->assertTrue(isset($cal->VEVENT));
$this->assertEquals('FREQ=YEARLY', $cal->VEVENT->RRULE->getValue());
$this->assertEquals('12345 (*1900)', $cal->VEVENT->SUMMARY->getValue());
$this->assertEquals($expectedSummary, $cal->VEVENT->SUMMARY->getValue());
$this->assertEquals('TRANSPARENT', $cal->VEVENT->TRANSP->getValue());
}
}
@ -233,14 +233,19 @@ class BirthdayServiceTest extends TestCase {
public function providesVCards() {
return [
[true, null],
[true, ''],
[true, 'yasfewf'],
[true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[true, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:1900-01-01\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:1900-12-31\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[null, null],
[null, ''],
[null, 'yasfewf'],
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:someday\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19000101\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
['12345 (*1900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:19001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:--1231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
['12345 *', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY;X-APPLE-OMIT-YEAR=1604:16041231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:;VALUE=text:circa 1800\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
[null, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nN:12345;;;;\r\nBDAY:20031231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
['12345 (*900)', "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nBDAY:09001231\r\nEND:VCARD\r\n", "Dr. Foo Bar"],
];
}
}

View File

@ -188,8 +188,6 @@ class FilesPluginTest extends TestCase {
$node->expects($this->exactly(2))
->method('getOwner')
->will($this->returnValue($user));
$node->expects($this->never())
->method('getSize');
$this->plugin->handleGetProperties(
$propFind,

View File

@ -0,0 +1,117 @@
<?php
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @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/>.
*
*/
namespace OCA\DAV\Tests\Unit\DAV\Migration;
use OCA\DAV\Migration\ValueFix;
use OCA\DAV\Migration\ValueFixInsert;
use OCP\BackgroundJob\IJobList;
use OCP\IConfig;
use OCP\IUser;
use OCP\IUserManager;
use OCP\Migration\IOutput;
use Test\TestCase;
class ValueFixInsertTest extends TestCase {
/** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */
private $userManager;
/** @var IJobList|\PHPUnit_Framework_MockObject_MockObject */
private $jobList;
/** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */
private $config;
/** @var ValueFixInsert */
private $job;
public function setUp() {
parent::setUp();
$this->userManager = $this->createMock(IUserManager::class);
$this->jobList = $this->createMock(IJobList::class);
$this->config = $this->createMock(IConfig::class);
$this->job = new ValueFixInsert(
$this->userManager,
$this->jobList,
$this->config
);
}
public function testGetName() {
$this->assertSame('Insert ValueFix background job for each user', $this->job->getName());
}
public function testRun() {
$user1 = $this->createMock(IUser::class);
$user1->method('getUID')->willReturn('user1');
$user2 = $this->createMock(IUser::class);
$user2->method('getUID')->willReturn('user2');
$this->config->method('getAppValue')
->with(
$this->equalTo('dav'),
$this->equalTo(ValueFixInsert::class.'_ran'),
$this->anything()
)->will($this->returnCallback(function($app, $key, $value) {
return $value;
}));
$this->userManager->method('callForSeenUsers')
->will($this->returnCallback(function(\Closure $function) use ($user1, $user2) {
$function($user1);
$function($user2);
}));
$this->jobList->expects($this->at(0))
->method('add')
->with(
$this->equalTo(ValueFix::class),
$this->equalTo(['user' => 'user1'])
);
$this->jobList->expects($this->at(1))
->method('add')
->with(
$this->equalTo(ValueFix::class),
$this->equalTo(['user' => 'user2'])
);
$this->job->run($this->createMock(IOutput::class));
}
public function testRunOnlyOnce() {
$this->config->method('getAppValue')
->with(
$this->equalTo('dav'),
$this->equalTo(ValueFixInsert::class.'_ran'),
$this->anything()
)->willReturn('true');
$this->userManager->expects($this->never())
->method($this->anything());;
$this->jobList->expects($this->never())
->method($this->anything());
$this->job->run($this->createMock(IOutput::class));
}
}

View File

@ -0,0 +1,200 @@
<?php
/**
* @copyright 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @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/>.
*
*/
namespace OCA\DAV\Tests\Unit\DAV\Migration;
use OCA\DAV\CalDAV\CalDavBackend;
use OCA\DAV\Migration\ValueFix;
use OCP\ILogger;
use Sabre\VObject\InvalidDataException;
use Test\TestCase;
class ValueFixTest extends TestCase {
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
private $logger;
/** @var CalDavBackend|\PHPUnit_Framework_MockObject_MockObject */
private $backend;
/** @var string */
private $invalid = 'BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.11.2//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
TRANSP:OPAQUE
DTEND;VALUE=:20151223T223000Z
LAST-MODIFIED:20151214T091032Z
ORGANIZER;CN="User 1":mailto:user1@example.com
UID:1234567890@example.com
DTSTAMP:20151214T091032Z
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Ein Geburtstag
DTSTART;VALUE=:20151223T173000Z
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
CREATED;VALUE=:20151214T091032Z
END:VEVENT
END:VCALENDAR';
/** @var string */
private $valid = 'BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//Mac OS X 10.11.2//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
TRANSP:OPAQUE
DTEND:20151223T223000Z
LAST-MODIFIED:20151214T091032Z
ORGANIZER;CN="User 1":mailto:user1@example.com
UID:1234567890@example.com
DTSTAMP:20151214T091032Z
STATUS:CONFIRMED
SEQUENCE:0
SUMMARY:Ein Geburtstag
DTSTART:20151223T173000Z
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
CREATED:20151214T091032Z
END:VEVENT
END:VCALENDAR';
/** @var ValueFix */
private $job;
public function setUp() {
parent::setUp();
$this->logger = $this->createMock(ILogger::class);
$this->backend = $this->createMock(CalDavBackend::class);
$this->job = new ValueFix(
$this->backend,
$this->logger
);
}
public function testRunInvalid() {
$calendars = [['id' => 42]];
$objects = [['uri' => 'myuri']];
$this->backend->method('getCalendarsForUser')
->with($this->equalTo('principals/users/u1'))
->willReturn($calendars);
$this->backend->method('getCalendarObjects')
->with($this->equalTo(42))
->willReturn($objects);
$this->backend->method('getCalendarObject')
->with(
$this->equalTo(42),
$this->equalTo('myuri')
)->willReturn([
'calendardata' => $this->invalid
]);
$this->backend->expects($this->once())
->method('getDenormalizedData')
->with($this->valid);
$this->backend->expects($this->once())
->method('updateCalendarObject')
->with(
$this->equalTo(42),
$this->equalTo('myuri'),
$this->equalTo($this->valid)
);
$this->job->run(['user' => 'u1']);
}
public function testRunValid() {
$calendars = [['id' => 42]];
$objects = [['uri' => 'myuri']];
$this->backend->method('getCalendarsForUser')
->with($this->equalTo('principals/users/u1'))
->willReturn($calendars);
$this->backend->method('getCalendarObjects')
->with($this->equalTo(42))
->willReturn($objects);
$this->backend->method('getCalendarObject')
->with(
$this->equalTo(42),
$this->equalTo('myuri')
)->willReturn([
'calendardata' => $this->valid
]);
$this->backend->expects($this->never())
->method('getDenormalizedData');
$this->backend->expects($this->never())
->method('updateCalendarObject');
$this->job->run(['user' => 'u1']);
}
public function testRunStillInvalid() {
$calendars = [['id' => 42]];
$objects = [['uri' => 'myuri']];
$this->backend->method('getCalendarsForUser')
->with($this->equalTo('principals/users/u1'))
->willReturn($calendars);
$this->backend->method('getCalendarObjects')
->with($this->equalTo(42))
->willReturn($objects);
$this->backend->method('getCalendarObject')
->with(
$this->equalTo(42),
$this->equalTo('myuri')
)->willReturn([
'calendardata' => $this->invalid
]);
$this->backend->expects($this->once())
->method('getDenormalizedData')
->with($this->valid)
->willThrowException(new InvalidDataException());
$this->logger->expects($this->once())
->method('info')
->with(
$this->equalTo('Calendar object for calendar {cal} with uri {uri} still invalid'),
$this->equalTo([
'app'=> 'dav',
'cal' => 42,
'uri' => 'myuri',
])
);
$this->backend->expects($this->never())
->method('updateCalendarObject');
$this->job->run(['user' => 'u1']);
}
}

View File

@ -24,19 +24,17 @@
namespace OCA\DAV\Tests\unit\SystemTag;
use Sabre\DAV\Exception\NotFound;
use Sabre\DAV\Exception\MethodNotAllowed;
use Sabre\DAV\Exception\Conflict;
use OC\SystemTag\SystemTag;
use OCP\SystemTag\TagNotFoundException;
use OCP\SystemTag\TagAlreadyExistsException;
use OCP\SystemTag\ISystemTag;
use Sabre\DAV\Exception\Forbidden;
class SystemTagNodeTest extends \Test\TestCase {
/**
* @var \OCP\SystemTag\ISystemTagManager
* @var \OCP\SystemTag\ISystemTagManager|\PHPUnit_Framework_MockObject_MockObject
*/
private $tagManager;
@ -113,7 +111,7 @@ class SystemTagNodeTest extends \Test\TestCase {
/**
* @dataProvider tagNodeProvider
*/
public function testUpdateTag($isAdmin, $originalTag, $changedArgs) {
public function testUpdateTag($isAdmin, ISystemTag $originalTag, $changedArgs) {
$this->tagManager->expects($this->once())
->method('canUserSeeTag')
->with($originalTag)
@ -173,7 +171,7 @@ class SystemTagNodeTest extends \Test\TestCase {
/**
* @dataProvider tagNodeProviderPermissionException
*/
public function testUpdateTagPermissionException($originalTag, $changedArgs, $expectedException = null) {
public function testUpdateTagPermissionException(ISystemTag $originalTag, $changedArgs, $expectedException = null) {
$this->tagManager->expects($this->any())
->method('canUserSeeTag')
->with($originalTag)
@ -242,17 +240,16 @@ class SystemTagNodeTest extends \Test\TestCase {
*/
public function testDeleteTag($isAdmin) {
$tag = new SystemTag(1, 'tag1', true, true);
$this->tagManager->expects($this->once())
$this->tagManager->expects($isAdmin ? $this->once() : $this->never())
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue(true));
$this->tagManager->expects($this->once())
->method('canUserAssignTag')
->with($tag)
->will($this->returnValue(true));
$this->tagManager->expects($this->once())
$this->tagManager->expects($isAdmin ? $this->once() : $this->never())
->method('deleteTags')
->with('1');
if (!$isAdmin) {
$this->setExpectedException(Forbidden::class);
}
$this->getTagNode($isAdmin, $tag)->delete();
}
@ -261,7 +258,7 @@ class SystemTagNodeTest extends \Test\TestCase {
[
// cannot delete invisible tag
new SystemTag(1, 'Original', false, true),
'Sabre\DAV\Exception\NotFound',
'Sabre\DAV\Exception\Forbidden',
],
[
// cannot delete non-assignable tag
@ -279,20 +276,11 @@ class SystemTagNodeTest extends \Test\TestCase {
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue($tag->isUserVisible()));
$this->tagManager->expects($this->any())
->method('canUserAssignTag')
->with($tag)
->will($this->returnValue($tag->isUserAssignable()));
$this->tagManager->expects($this->never())
->method('deleteTags');
try {
$this->getTagNode(false, $tag)->delete();
} catch (\Exception $e) {
$thrown = $e;
}
$this->assertInstanceOf($expectedException, $thrown);
$this->setExpectedException($expectedException);
$this->getTagNode(false, $tag)->delete();
}
/**
@ -304,14 +292,10 @@ class SystemTagNodeTest extends \Test\TestCase {
->method('canUserSeeTag')
->with($tag)
->will($this->returnValue($tag->isUserVisible()));
$this->tagManager->expects($this->any())
->method('canUserAssignTag')
->with($tag)
->will($this->returnValue($tag->isUserAssignable()));
$this->tagManager->expects($this->once())
->method('deleteTags')
->with('1')
->will($this->throwException(new TagNotFoundException()));
$this->getTagNode(false, $tag)->delete();
$this->getTagNode(true, $tag)->delete();
}
}

View File

@ -18,14 +18,13 @@
<user>user-encryption</user>
<admin>admin-encryption</admin>
</documentation>
<rememberlogin>false</rememberlogin>
<version>1.4.1</version>
<version>1.6.0</version>
<types>
<filesystem/>
</types>
<dependencies>
<lib>openssl</lib>
<nextcloud min-version="11" max-version="11" />
<nextcloud min-version="12" max-version="12" />
</dependencies>
<settings>
<admin>OCA\Encryption\Settings\Admin</admin>

View File

@ -8,3 +8,8 @@
, #recoveryEnabledSuccess {
display: none;
}
/* icons for sidebar */
.nav-icon-basic-encryption-module {
background-image: url('../img/app.svg?v=1');
}

View File

@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.",
"Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>",
"Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud"
"Disabled" : "Zakázáno"
},
"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");

View File

@ -56,12 +56,6 @@
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Musíte přenést své šifrovací klíče ze staré verze šifrování (Nextcloud <= 8.0) na novou. Spusťte příkaz 'occ encryption:migrate' nebo kontaktujte svého administrátora.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče v osobním nastavení, abyste znovu získali přístup ke svým zašifrovaným souborům.",
"Encryption App is enabled and ready" : "Aplikace šifrování je již povolena a připravena",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Ahoj!\n\nAdministrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla '%s'.\n\nPřihlašte se do webového rozhraní, přejděte do nastavení 'základního šifrovacího modulu Nextcloud' a aktualizujte šifrovací heslo zadáním hesla výše do pole 'původní přihlašovací heslo' a svého aktuálního přihlašovacího hesla.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Ahoj!<br><br>Administrátor povolil šifrování dat na serveru. Vaše soubory byly zašifrovány za použití hesla <strong>%s<strong>.<br><br>Přihlašte se do webového rozhraní, přejděte do nastavení \"základního šifrovacího modulu Nextcloud\" a aktualizujte šifrovací heslo zadáním hesla výše do pole \"původní přihlašovací heslo\" a svého aktuálního přihlašovacího hesla.<br><br>",
"Nextcloud basic encryption module" : "Základní šifrovací modul Nextcloud"
"Disabled" : "Zakázáno"
},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
}

View File

@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Passwortwiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>",
"Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul"
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");

View File

@ -56,12 +56,6 @@
"Enable password recovery:" : "Passwortwiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Wenn Du diese Option aktivierst, kannst Du Deine verschlüsselten Dateien wiederherstellen, falls Du Dein Passwort vergisst",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Du musst Deine Verschlüsselungs-Schlüssel von der Alten Vershlüsselung (ownCloud <= 8.0) zur neuen migrieren. Bitte führe 'occ encryption:migrate' aus oder kontaktiere den Administrator",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselung-App. Bitte Ihr privates Schlüssel-Passwort aktualisieren, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit.",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melde dich im Web-Interface an, gehe in deine persönlichen Einstellungen. Dort findest du die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisiere dort dein Verschlüsselungspasswort indem du das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingibst.<br><br>",
"Nextcloud basic encryption module" : "Nextcloud-Basisverschlüsselungsmodul"
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -33,7 +33,7 @@ OC.L10N.register(
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte melden Sie sich im Web-Interface an, gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hollo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an und gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Login-Passwort-' und in das 'aktuelles Login-Passwort' Feld eingeben.<br><br>",
"Default encryption module" : "Standard Verschlüsselungsmodul",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (Nextcloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
"Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul"
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");

View File

@ -31,7 +31,7 @@
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte melden Sie sich im Web-Interface an, gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.\n\n",
"The share will expire on %s." : "Die Freigabe wird am %s ablaufen.",
"Cheers!" : "Noch einen schönen Tag!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hollo,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an und gehen Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Login-Passwort-' und in das 'aktuelles Login-Passwort' Feld eingeben.<br><br>",
"Default encryption module" : "Standard Verschlüsselungsmodul",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsslen",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
@ -56,12 +56,6 @@
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Sie müssen Ihre Verschlüsselungsschlüssel von der alten Verschlüsselung (Nextcloud <= 8.0) zur neuen migrieren. Bitte führen Sie 'occ encryption:migrate' aus oder kontaktieren Sie Ihren Administrator. ",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Ungültiger privater Schlüssel für die Verschlüsselungs-App. Bitte aktualisieren Sie Ihr privates Schlüsselpasswort, um den Zugriff auf Ihre verschlüsselten Dateien wiederherzustellen.",
"Encryption App is enabled and ready" : "Verschlüsselungs-App ist aktiviert und bereit",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hey,\n\nder Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort '%s' verschlüsselt.\n\nBitte über die Web-Oberfläche anmelden und die persönlichen Einstellungen aufrufen. Dort findet sich die Option 'Nextcloud-Basisverschlüsselungsmodul' und das Verschlüsselungspasswort kann aktualisiert werden, indem das Passwort in das Feld 'altes Login Passwort' und in das 'aktuelles Login - Passwort'-Feld eingegeben wird.\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hey,<br><br>der Administrator hat die servereitige Verschlüsselung aktiviert. Die Dateien wurden mit dem Kennwort <strong>%s</strong> verschlüsselt.<br><br>Bitte melden Sie sich im Web-Interface an, gehe Sie in ihre persönlichen Einstellungen. Dort finden Sie die Option 'Nextcloud-Basisverschlüsselungsmodul' und aktualisieren Sie dort Ihr Verschlüsselungspasswort indem Sie das Passwort in das 'alte Log - in Passwort' und in das 'aktuellen Login - Passwort' Feld eingeben.<br><br>",
"Nextcloud basic encryption module" : "Nextcloud Basisverschlüsselungsmodul"
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -22,8 +22,11 @@ OC.L10N.register(
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδιού σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
"Bad Signature" : "Κακή υπογραφή",
"Missing Signature" : "Ελλιπής υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@ -31,6 +34,7 @@ OC.L10N.register(
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
"Cheers!" : "Χαιρετισμούς!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
@ -43,6 +47,7 @@ OC.L10N.register(
"New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή Κωδικού Πρόσβασης",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
@ -53,7 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
"Disabled" : "Απενεργοποιημένο"
},
"nplurals=2; plural=(n != 1);");

View File

@ -20,8 +20,11 @@
"The current log-in password was not correct, please try again." : "Το τρέχον συνθηματικό δεν είναι σωστό, παρακαλώ δοκιμάστε ξανά.",
"Private key password successfully updated." : "Το Προσωπικό κλειδί πρόσβασης ενημερώθηκε επιτυχώς",
"You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Πρέπει να μεταφέρετε τα κλειδιά κρυπτογράφησής σας από την παλιά κρυπτογράφηση (ownCloud <= 8.0) στην καινούρια. Παρακαλούμε εκτελέστε την εντολή 'occ encryption:migrate' ή επικοινωνήστε με το διαχειριστή σας.",
"Invalid private key for encryption app. Please update your private key password in your personal settings to recover access to your encrypted files." : "Άκυρο προσωπικό κλειδί για την εφαρμογή κρυπτογράφησης. Παρακαλώ ενημερώστε τον κωδικό του προσωπικού κλειδιού σας στις προσωπικές ρυθμίσεις για να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία.",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Encryption app is enabled and ready" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη και έτοιμη",
"Bad Signature" : "Κακή υπογραφή",
"Missing Signature" : "Ελλιπής υπογραφή",
"one-time password for server-side-encryption" : "κωδικός μιας χρήσης για κρυπτογράφηση στο διακομιστή",
"Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλώ ζητήστε από τον ιδιοκτήτη του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Αδυναμία ανάγνωσης αυτού του αρχείου, πιθανό να είναι διαμοιραζόμενο αρχείο. Παρακαλώ ρωτήστε τον κάτοχο του αρχείου να το διαμοιράσει ξανά μαζί σας.",
@ -29,6 +32,7 @@
"The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
"Cheers!" : "Χαιρετισμούς!",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
@ -41,6 +45,7 @@
"New recovery key password" : "Νέος κωδικός κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο κωδικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή Κωδικού Πρόσβασης",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν καταγραφεί, παρακαλώ αποσυνδεθείτε και επανασυνδεθείτε.",
"Your private key password no longer matches your log-in password." : "Ο κωδικός του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας κωδικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης.",
@ -51,7 +56,6 @@
"Enable password recovery:" : "Ενεργοποιήστε την ανάκτηση κωδικού πρόσβασης",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Nextcloud basic encryption module" : "Βασικό άρθρωμα κρυπτογράφησης Netcloud"
"Disabled" : "Απενεργοποιημένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña",
"Enabled" : "Habilitar",
"Disabled" : "Deshabilitado",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (Nextcloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualice la contraseña de su clave privada en sus ajustes personales para recuperar el acceso a sus archivos cifrados.",
"Encryption App is enabled and ready" : "La app de cifrado esta habilitada y preparada",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha activado el cifrado de datos en servidor. Tus archivos han sido cifrados usando la contraseña '%s'.\n\nPor favor, inicia tu sesión desde la interfaz web, ve a la sección 'módulo de cifrado básico' de tu área de ajustes personales y actualiza la contraseña de cifrado. Para ello, deberás introducir esta contraseña en el campo 'contraseña de acceso antigua' junto con tu actual contraseña de acceso.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "¡Hola!<br><br> El administrador ha habilitado el cifrado en el servidor. Sus archivos han sido cifrados usando la contraseña <strong>%s</strong>.<br><br>Por favor, regístrese en la interfaz web, vaya a la sección \"Módulo de cifrado básico de Nextcloud\" de sus configuraciones personales y actualice su contraseña de cifrado introduciendo esta contraseña en el campo \"contraseña de acceso antigua\" y su contraseña de acceso actual.<br><br>",
"Nextcloud basic encryption module" : "Modulo básico de cifrado de Nextcloud "
"Disabled" : "Deshabilitado"
},
"nplurals=2; plural=(n != 1);");

View File

@ -56,12 +56,6 @@
"Enable password recovery:" : "Habilitar la recuperación de contraseña:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Habilitar esta opción le permitirá volver a tener acceso a sus ficheros cifrados en caso de pérdida de contraseña",
"Enabled" : "Habilitar",
"Disabled" : "Deshabilitado",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Necesita migrar sus claves de cifrado desde el antiguo modelo de cifrado (Nextcloud <= 8.0) al nuevo. Por favor ejecute 'occ encryption:migrate' o contáctese con su administrador.",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualice la contraseña de su clave privada en sus ajustes personales para recuperar el acceso a sus archivos cifrados.",
"Encryption App is enabled and ready" : "La app de cifrado esta habilitada y preparada",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nel administrador ha activado el cifrado de datos en servidor. Tus archivos han sido cifrados usando la contraseña '%s'.\n\nPor favor, inicia tu sesión desde la interfaz web, ve a la sección 'módulo de cifrado básico' de tu área de ajustes personales y actualiza la contraseña de cifrado. Para ello, deberás introducir esta contraseña en el campo 'contraseña de acceso antigua' junto con tu actual contraseña de acceso.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "¡Hola!<br><br> El administrador ha habilitado el cifrado en el servidor. Sus archivos han sido cifrados usando la contraseña <strong>%s</strong>.<br><br>Por favor, regístrese en la interfaz web, vaya a la sección \"Módulo de cifrado básico de Nextcloud\" de sus configuraciones personales y actualice su contraseña de cifrado introduciendo esta contraseña en el campo \"contraseña de acceso antigua\" y su contraseña de acceso actual.<br><br>",
"Nextcloud basic encryption module" : "Modulo básico de cifrado de Nextcloud "
"Disabled" : "Deshabilitado"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@ -12,7 +12,7 @@ OC.L10N.register(
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
"Password successfully changed." : "Mot de passe changé avec succès.",
"Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
@ -58,12 +58,6 @@ OC.L10N.register(
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe",
"Enabled" : "Activé",
"Disabled" : "Désactivé",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (NextCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour Encryption App est invalide. Veuillez mettre à jour votre mot de passe de la clef privée dans vos paramètres personnels afin de retrouver l'accès à vos fichiers chiffrés.",
"Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour\n\nL'administrateur du serveur à activé le chiffrement côté serveur. Vos fichiers seront chiffrés en utilisant le mot de passe '%s'.\n\nMerci de vous connecter à l'interface web, aller dans la section 'Module de chiffrement basique' dans vos paramètres personnes et mettez à jour votre mot de passe de chiffrement en entrant se mot de passe dans le champs 'ancien mot de passe de connexion' et vos identifiant mots de passe actuels.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour, <br><br>l'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant : <strong>%s</strong>.<br><br>Veuillez vous connectez à l'interface web, allez à la section \"Module de chiffrement basique Nextcloud\" dans vos paramètres personnels et entrez le mot de passe fourni ci-dessus dans le champ \"Ancien mot de passe de connexion\", entrez votre mot de passe que vous utilisez actuellement pour vous connecter dans le champ \"Actuel mot de passe de connexion\".<br><br>",
"Nextcloud basic encryption module" : "Module de chiffrement Nextcloud"
"Disabled" : "Désactivé"
},
"nplurals=2; plural=(n > 1);");

View File

@ -10,7 +10,7 @@
"Please provide the old recovery password" : "Veuillez entrer l'ancien mot de passe de récupération",
"Please provide a new recovery password" : "Veuillez entrer un nouveau mot de passe de récupération",
"Please repeat the new recovery password" : "Veuillez répéter le nouveau mot de passe de récupération",
"Password successfully changed." : "Mot de passe changé avec succès.",
"Password successfully changed." : "Mot de passe modifié avec succès.",
"Could not change the password. Maybe the old password was not correct." : "Erreur lors du changement de mot de passe. L'ancien mot de passe est peut-être incorrect.",
"Recovery Key disabled" : "Clé de récupération désactivée",
"Recovery Key enabled" : "Clef de récupération activée",
@ -56,12 +56,6 @@
"Enable password recovery:" : "Activer la récupération du mot de passe :",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Activer cette option vous permettra d'obtenir à nouveau l'accès à vos fichiers chiffrés en cas de perte de mot de passe",
"Enabled" : "Activé",
"Disabled" : "Désactivé",
"You need to migrate your encryption keys from the old encryption (Nextcloud <= 8.0) to the new one. Please run 'occ encryption:migrate' or contact your administrator" : "Vous devez migrer vos clés de chiffrement de l'ancienne version (NextCloud <= 8.0) vers la nouvelle. Veuillez exécuter 'occ encryption:migrate' ou contacter votre administrateur",
"Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée pour Encryption App est invalide. Veuillez mettre à jour votre mot de passe de la clef privée dans vos paramètres personnels afin de retrouver l'accès à vos fichiers chiffrés.",
"Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête",
"Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'Nextcloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour\n\nL'administrateur du serveur à activé le chiffrement côté serveur. Vos fichiers seront chiffrés en utilisant le mot de passe '%s'.\n\nMerci de vous connecter à l'interface web, aller dans la section 'Module de chiffrement basique' dans vos paramètres personnes et mettez à jour votre mot de passe de chiffrement en entrant se mot de passe dans le champs 'ancien mot de passe de connexion' et vos identifiant mots de passe actuels.\n\n",
"Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"Nextcloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour, <br><br>l'administrateur a activé le chiffrement sur le serveur. Vos fichiers ont été chiffrés avec le mot de passe suivant : <strong>%s</strong>.<br><br>Veuillez vous connectez à l'interface web, allez à la section \"Module de chiffrement basique Nextcloud\" dans vos paramètres personnels et entrez le mot de passe fourni ci-dessus dans le champ \"Ancien mot de passe de connexion\", entrez votre mot de passe que vous utilisez actuellement pour vous connecter dans le champ \"Actuel mot de passe de connexion\".<br><br>",
"Nextcloud basic encryption module" : "Module de chiffrement Nextcloud"
"Disabled" : "Désactivé"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

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