Compare commits

...

354 Commits

Author SHA1 Message Date
Vincent Petry
f9a867b70c Set version to 9.1.3 2016-12-12 18:17:54 +01:00
Vincent Petry
e21717029c Set version to 9.1.3 RC1 2016-11-29 17:46:24 +01:00
Vincent Petry
0f8d950618 Merge pull request #26669 from owncloud/stable9.1-fix-transferownership-findtransferfolder
[stable9.1] Fix finding transferred folder in integration tests
2016-11-25 10:24:20 +01:00
Vincent Petry
bd81fca428 Merge pull request #26711 from owncloud/stable9.1-test-noduplicateheader
[stable9.1] Add test for duplicate 401 headers on DAV
2016-11-25 10:04:21 +01:00
Vincent Petry
6193f3f0a3 Merge pull request #26716 from owncloud/stable9.1-publicupload-fix
[stable9.1] Properly convert OCS params + more tests [rebooted]
2016-11-25 09:46:03 +01:00
Vincent Petry
223bca73ab Backport integration test functions from #26610
Partial backport of the integration tests from #26610
2016-11-24 18:36:07 +01:00
Vincent Petry
ba2d6def75 Correctly convert OCS permissions params 2016-11-24 18:35:59 +01:00
Sergio Bertolin
ee6fb9d699 Added tests about permissions and public upload
Added read and share permissions instead of all (default ones)

Added positive case

Check also permissions update

Added tests for resharing with public links when the user doesn't have enough permisssions
2016-11-24 18:35:52 +01:00
Vincent Petry
5cc70a5252 Merge pull request #26714 from owncloud/stable9.1-disable-previews
[stable9.1] Don't fetch preview images if `enable_previews` is set to `false`
2016-11-24 18:33:01 +01:00
phisch
abd55c5adf don't try to render preview images if 'enable_previews' has been set to false 2016-11-24 15:26:56 +01:00
Vincent Petry
b9757cf88e Merge pull request #26709 from owncloud/stable9.1-failed-to-create-share-fix
[stable9.1] commit transaction after select query
2016-11-24 15:05:22 +01:00
Vincent Petry
e9ef72462b Add test for duplicate 401 headers on DAV 2016-11-24 14:48:43 +01:00
phisch
9725ee381c commit transaction after select query 2016-11-24 12:54:06 +01:00
Vincent Petry
4a53f3543c Merge pull request #26701 from owncloud/stable9.1-integration-tests-adding-etag-support
Stable9.1 integration tests adding etag support
2016-11-24 11:53:01 +01:00
Sergio Bertolin
37b05946f6 Added test case about issue 26346
Conflicts:
	build/integration/features/sharing-v1.feature
2016-11-23 13:21:42 +00:00
Sergio Bertolin
32327572fb Changed description of variable 2016-11-23 13:21:42 +00:00
Sergio Bertolin
274be16d6e Added functions to check etag of elements 2016-11-23 13:21:41 +00:00
Vincent Petry
af12b542a9 Merge pull request #26687 from owncloud/stable9.1-fix-duplicate-www-auth-headers
[stable9.1] No challenge from FedAuth
2016-11-23 10:35:50 +01:00
Thomas Müller
dfc86f16d9 Merge pull request #26681 from owncloud/stable9.1-ext-storage-expireversions
[stable9.1] Properly expire ext storage versions (#26601)
2016-11-22 17:16:40 +01:00
Thomas Müller
f118ac6e37 Merge pull request #26600 from owncloud/stable9.1-d1c844093539a2d0bf89fd5068e85448c11a8be9
[stable9.1] Skip local shares in bkg scan and occ files:scan (#26590)
2016-11-22 17:15:50 +01:00
Vincent Petry
8d6a7b756b Fix shared storage name in test mock 2016-11-22 15:27:06 +01:00
Thomas Müller
b09e81496e No challenge from FedAuth 2016-11-22 15:18:35 +01:00
Vincent Petry
d886da7a68 Skip hidden files when counting visible files in list (#26571)
The file list UI logic that renders the next page doesn't properly
exclude hidden files when not shown. This fix makes sure that only rows
that are actually visible are counted when rendering a page, this makes
sure that the page will always have enough elements displayed.
2016-11-22 10:37:26 +01:00
Vincent Petry
63ee829b76 Properly expire ext storage versions (#26601)
* Properly expire ext storage versions

System-wide external storages have no real owner so the current user is
used as owner. However when running cron.php there is no current user,
so no expiry can be done.

This fix adds an user argument to the expire() function to tell for
which user to expire files. This information is anyway always available
now through the expire command job.

* Move version expire setupFS into the expire function

* Add comment about not tearing down in version Storage::expire()
2016-11-22 10:23:44 +01:00
Vincent Petry
1167dfb568 Fix finding transferred folder in integration tests 2016-11-21 11:13:00 +01:00
Thomas Müller
3113bcebf3 Merge pull request #26613 from owncloud/stable9.1-behat-transferownership
[stable9.1] Add transfer ownership integration tests (#26543)
2016-11-21 10:41:41 +01:00
Vincent Petry
9c299610fc Transfer ownership now returns exit code on error 2016-11-18 18:27:22 +01:00
Vincent Petry
4b70d84b0c Add transfer ownership integration tests (#26543)
* Add transfer ownership integration tests

* Added more transfer ownership tests and OCC checks
2016-11-18 18:27:22 +01:00
Vincent Petry
da83e2afd7 Merge pull request #26642 from owncloud/stable9.1-ntegration-tests-refactoring
Stable9.1 ntegration tests refactoring
2016-11-18 18:21:52 +01:00
Sergio Bertolin
738c5e7199 Changed nothing for 0 because of previous sabre dav version 2016-11-18 09:38:15 +00:00
Sergio Bertolin
f6d1e52ecc Added missing requirements 2016-11-16 09:07:18 +00:00
Sergio Bertolin
0ed3bb4f92 Removed forgotten leftovers
Conflicts:
	build/integration/features/bootstrap/WebDav.php
2016-11-16 08:10:46 +00:00
Sergio Bertolin
4f2a219942 Added weddav related feature 2016-11-16 08:06:57 +00:00
Sergio Bertolin
b45e2677b1 Adapted sharing and external features, random failures in sharing:857
Conflicts:
	build/integration/features/sharing-v1.feature
2016-11-16 08:06:54 +00:00
Sergio Bertolin
3c24afe241 Adapted favorites and dav2 features
Conflicts:
	build/integration/features/bootstrap/WebDav.php
	build/integration/features/favorites.feature
2016-11-16 07:57:08 +00:00
Vincent Petry
f131eb4c9a Merge pull request #26634 from owncloud/stable9.1-integration-tests-qa-222
Stable9.1 integration tests qa 222
2016-11-15 18:21:43 +01:00
Sergio Bertolin
94a27b9889 Added quota calculation test when a file is recieved 2016-11-15 09:04:07 +00:00
Sergio Bertolin
c6b2a43bec Added test checking quota after usage
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
2016-11-15 09:04:03 +00:00
Vincent Petry
600cd00ffb Merge pull request #26617 from owncloud/stable9.1-fix-invalid-share-perms
[stable9.1] Add repair step to fix file share permissions
2016-11-15 09:03:55 +01:00
Thomas Müller
e5231df39c behat will only only pass if all tests pass (#26630) 2016-11-14 21:35:16 +01:00
Thomas Müller
66bc5b538a behat will only only pass if all tests pass 2016-11-14 18:37:05 +01:00
Vincent Petry
497ab1a60a Merge pull request #26619 from owncloud/stable9.1-0b91f8d976b04fef24992792c485f728925c2469
[stable9.1] Fallback to share link owner when no owner found (#26587)
2016-11-14 11:37:09 +01:00
Vincent Petry
1ec9796a23 [stable9.1] Fallback to share link owner when no owner found (#26587)
When creating link shares from external storage, the filesystem cannot
find an owner in some scenarios (ex: system-wide mounts). In such
cases, fall back to using the current user's trashbin which happens to
also be the user who created the link share.

Fixes an issue where this scenario made deletion impossible due to
missing user information.
2016-11-14 09:39:45 +01:00
Vincent Petry
fa7f9a191e Add repair step to fix file share permissions 2016-11-14 09:12:39 +01:00
Vincent Petry
aefbe29971 Transfer ownership only analyze home storage (#26566)
When transferring ownership, only the local files will be transferred
during the rename operation. This means that the analyzing code doesn't
need to recurse into any mount points.

Furthermore this fixes issues where FailedStorage might appear as mount
points as a result of inaccessible external storages or shares. So this
makes it more robust.
2016-11-11 13:29:00 +01:00
Vincent Petry
a2fdd6f2e4 Allow file operations on part files on perm masked storage (#26606)
When uploading a file to a storage that has reduced permissions, we
still need to be able to create or rename the part files to the final
file. This fix makes that rename possible.
2016-11-11 13:28:35 +01:00
Vincent Petry
68aa221229 Merge pull request #26575 from owncloud/stable9.1-transfer-ownership-exceptions
[stable9.1] Skip broken shares when transferring ownership
2016-11-11 12:37:17 +01:00
Vincent Petry
709d324754 Fixed disappearing of share info in file view (#26535) 2016-11-11 10:16:38 +01:00
Vincent Petry
556eb1d29f [stable9.1] Skip local shares in bkg scan and occ files:scan (#26590)
Local shares should only be scanned when doing it for the owner to
avoid repeatedly rescanning the same shared storage over and over again
for every recipient.
2016-11-10 16:41:00 +01:00
Vincent Petry
7f1fbc8aab First process group shares and then user shares (#26568)
This prevents a validation failure where the code checks whether a file
is already shared with another user, but the check disables itself when
the owner is the same. Processing the groups first prevents the check
to kick in too early when the group share still has the old owner while
we try transferring the user share.
2016-11-10 15:35:09 +01:00
Thomas Müller
dc0ea933aa [stable9.1] We need to ensure that the app holding the objectstore implementation is loaded - fixes owncloud/objectstore#38 (#26506) 2016-11-10 15:22:34 +01:00
Vincent Petry
547cde9fe7 Merge pull request #26572 from owncloud/stable9.1-prevent-log-entry
[stable9.1] Hack to prevent warning for read-only wrapper in public links
2016-11-09 10:36:30 +01:00
Vincent Petry
d47c589b04 Set version to 9.1.2 2016-11-08 11:28:42 +01:00
Vincent Petry
900b804d05 Skip broken shares when transferring ownership 2016-11-07 20:33:27 +01:00
Vincent Petry
ef33460a4d Hack to prevent warning for read-only wrapper in public links
Storage wrappers should normally always be registered inside a presetup
hook. However in the public link scenario this is not possible and
there is currently no good alternative with the current architecture.

Instead of logging a warning every time, this fix prevents the warning
to be shown but also adds a FIXME in the code for the future. This is
ok because this app is already using private/internal APIs at the
moment and should be reworked properly in the future.
2016-11-07 17:49:00 +01:00
Vincent Petry
3067040a30 Set version to 9.1.2RC2 2016-10-25 20:42:14 +02:00
Vincent Petry
b9e59bae37 Merge pull request #26482 from owncloud/stable9.1-allow-integrity-check
[Stable9.1] Allow integrity check via OccController
2016-10-25 19:57:16 +02:00
Victor Dubiniuk
8ebd903790 Allow integrity check via OccController 2016-10-25 18:20:55 +03:00
Vincent Petry
1a88648e0d Merge pull request #26480 from owncloud/stable9.1-fix-malformed-attribute
[stable9.1] Fix malformed attribute in files app
2016-10-25 16:52:20 +02:00
Vincent Petry
f79e451b4a Fix malformed attribute in files app 2016-10-25 15:20:57 +02:00
Vincent Petry
8438e8bb83 Merge pull request #26473 from owncloud/stable9.1-565c875fc84436fe25e3f690b2859f94011159b0
[stable9.1] Merge pull request #26459 from owncloud/limit-carddav-ima…
2016-10-25 15:19:59 +02:00
Vincent Petry
5c5cae891c Merge pull request #26472 from owncloud/stable9.1-2064023283bc2c05147de9dccfa3914c79d99c03
[stable9.1] Merge pull request #26460 from owncloud/throw-exceptions-…
2016-10-25 15:19:51 +02:00
Vincent Petry
50cd11b583 Exclude more invalid chars from files UI path (#26474)
Prevent newlines and zero byte chars to be used in files UI URL and
redirect to root if one is detected.

Added additional hardening in case the request fails with 400 or the
XMLHttpRequest throw a DOMException, both can happen with invalid paths
as well.
2016-10-25 13:35:49 +02:00
Vincent Petry
96b8afe485 [stable9.1] Merge pull request #26460 from owncloud/throw-exceptions-not-printable
Don't print exception messages in html
2016-10-25 10:52:50 +02:00
Vincent Petry
6bf3be3877 [stable9.1] Merge pull request #26459 from owncloud/limit-carddav-image-export-mime-types
Limit carddav image export mime types
2016-10-25 10:51:15 +02:00
RealRancor
2b3b8af6e8 stable9.1 is not compatible with PHP 7.1 (#26432) 2016-10-24 22:18:03 +02:00
Vincent Petry
39c9bdd752 Merge pull request #26455 from owncloud/stable9.1-da79d9affbf1cd3a2e30c5226e143b2ecb9c3105
[stable9.1] Fix misleading SSL/TLS SMTP email configuration (#26447)
2016-10-24 13:12:33 +02:00
RealRancor
0ab64baa0e [stable9.1] Fix misleading SSL/TLS SMTP email configuration (#26447) 2016-10-24 11:13:16 +02:00
Vincent Petry
ba01c08acb Sanitize length headers when validating quota (#26416) 2016-10-20 12:57:22 +02:00
Vincent Petry
80c95de8f2 Set version to 9.1.2 RC1 2016-10-19 20:18:01 +02:00
Vincent Petry
48bd8d9686 Merge pull request #26408 from owncloud/stable9.1-e65648515b31688474b2d5e6a07ed1ccf2962f74
[stable9.1] Use correct name for background jobs
2016-10-19 14:49:51 +02:00
Thomas Müller
cc5ae2aba7 [stable9.1] Set version to 0.2.7 to trigger setup of background job 2016-10-19 13:01:21 +02:00
Thomas Müller
cc92cdb240 [stable9.1] Use correct name for background jobs
fixes #26202
2016-10-19 13:00:30 +02:00
Vincent Petry
069703f9d8 Merge pull request #26402 from owncloud/upgrade_group_skip_missing
[stable9.1] Upgrade group skip missing
2016-10-19 11:55:39 +02:00
Vincent Petry
2972d35602 Merge pull request #26399 from owncloud/stable9.1-userssetup-check-order
[stable9.1] Fix initMountPoints to set usersSetup earlier
2016-10-19 11:49:06 +02:00
Juan Pablo Villafáñez
26dbe006df Fix minor typo 2016-10-19 09:53:56 +02:00
Juan Pablo Villafáñez
cb6b995e07 Skip over missing groups 2016-10-19 09:53:56 +02:00
Vincent Petry
c82d62a03c Fix initMountPoints to set usersSetup earlier
This is needed because in some cases like LDAP, the user manager itself
might trigger avatar updates which would internally also call
initMountPoints with the same user. This could cause the same user to
be setup twice, and in some sharing situations could cause recursive
deduplication of shares by adding "(2)" every time.
2016-10-19 09:41:38 +02:00
Vincent Petry
1f49bf560a Merge pull request #26390 from owncloud/stable9.1-group-etagpropagation-test
[stable9.1] Fix post_unshareFromSelf hook parameter format
2016-10-18 17:31:00 +02:00
Vincent Petry
23744e7745 Merge pull request #26271 from owncloud/stable9.1-initmountpoints-userid-casing
[stable9.1] Fix user casing in initMountPoints
2016-10-18 16:44:33 +02:00
Vincent Petry
6fe9f1df7a Add using casing check/fix for initMountPoints 2016-10-18 10:04:33 +02:00
Vincent Petry
dc7d7b7df9 Fix post_unshareFromSelf hook parameter format
When unsharing from self in a group share situation, the share items
passed to the post_unshareFromSelf hook were using the wrong format in
which the attribute names (ex: "share_type") have non camel-case format.

This fix makes sure that in group sharing case we use the correct
format. It looks like the code was already producing it but in
array_merge it was not using it and adding the unprocessed one.
2016-10-17 09:53:08 +02:00
Vincent Petry
c3da32f83b Merge pull request #26322 from owncloud/stable9.1-9eef6e5bf9509666f26553c363bf9594a044f302
[stable9.1] Merge pull request #26295 from owncloud/analyse-dependenc…
2016-10-17 08:14:06 +02:00
Thomas Müller
71b6b86008 [stable9.1] Allow php 5.3 syntax in index.php so that the proper error can be generated and not a parse exception - fixes #26317 (#26330) (#26363) 2016-10-13 17:48:43 +02:00
Thomas Müller
db197999cd PHP 5.4 compliant 2016-10-13 11:23:51 +02:00
Vincent Petry
fe1806c5a7 [stable9.1] Merge pull request #26295 from owncloud/analyse-dependencies-on-app-enable-as-well
App dependencies are now analysed on app enable as well - not only on app install.
2016-10-13 11:23:50 +02:00
Vincent Petry
e9e252a94b Merge pull request #26329 from owncloud/stable9.1-3081d0f4fcb33e102e8ed013dec5f014ee0a9a4c
[stable9.1] Add missing unit tests
2016-10-13 11:16:13 +02:00
Thomas Müller
a283b956d1 Fix test 2016-10-12 13:20:34 +02:00
Thomas Müller
af440186f3 Fix the tests for 9.1 2016-10-12 13:17:52 +02:00
Thomas Müller
a25c0d580c [stable9.1] Add missing unit tests (#25936)
* Adjust unit test execution after folder rename

* Adjust login controller tests to match current behavior

* Fix broken unit tests
2016-10-12 13:17:51 +02:00
RealRancor
83b752de21 Backport #26316 to stable9.1 (#26348) 2016-10-12 13:02:11 +02:00
Vincent Petry
8991f5ef40 Merge pull request #26327 from owncloud/stable9.1-fa711834a18eaae6706a49885d0884baf8e3494b
[stable9.1] fix issue #23600 - mail invites through v1 webdav (#26188)
2016-10-11 19:47:21 +02:00
Vincent Petry
4047fb5f66 Merge pull request #26328 from owncloud/stable9.1-fc98aa93ac3a79bbc2e60fc4a696bac9b183938e
[stable9.1] Don't parse info.xml but reuse already cached app infos
2016-10-11 19:46:22 +02:00
Vincent Petry
7eda350ae1 Merge pull request #26331 from owncloud/stable9.1-b569564fcc1aba85dce6446dc6736e07e87c2c61
[stable9.1] forum.owncloud.org -> central.owncloud.org
2016-10-11 19:41:57 +02:00
Vincent Petry
7b0df35ae8 Merge pull request #26334 from owncloud/stable9.1-2c4c56c69b1c8e1bf3b3f1abbb408749668a324a
[stable9.1] Return ETag and OC-ETag in case of a move (#25683)
2016-10-11 19:41:11 +02:00
Vincent Petry
dc0051555f Merge pull request #26340 from owncloud/stable9.1-36d6f3ba8b7b7db8f4d8b2a70504fd184a30cc50
[stable9.1] Escape special characters
2016-10-11 19:34:23 +02:00
Vincent Petry
713d04ac3b Merge pull request #26341 from owncloud/ldap_command_updategroup_stable91
[stable9.1] New command to update group mappings
2016-10-11 19:28:50 +02:00
Juan Pablo Villafáñez
fb278ef072 New command to update group mappings 2016-10-11 13:22:42 +02:00
Aaron Wood
522e71450c [stable9.1] Escape special characters (#25429)
* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Escape LIKE parameter

* Use correct method in the AbstractMapping class

* Change the getNamesBySearch method so that input can be properly escaped while still supporting matches

* Don't escape hardcoded wildcard
2016-10-11 13:02:20 +02:00
Vincent Petry
0df4cdc660 Tear down FS after user update in CardDAV sync job (#26320)
Because fetching the user information will also fetch the avatar, the
avatar code sets up the FS and leaves the mount points cached, we need
to call tearDownFS to clear that up.
2016-10-10 23:25:34 +02:00
Thomas Müller
6b4c35e954 [stable9.1] Return ETag and OC-ETag in case of a move (#25683) 2016-10-10 22:54:03 +02:00
RealRancor
ff75a9a13c [stable9.1] forum.owncloud.org -> central.owncloud.org (#25644) 2016-10-10 22:24:49 +02:00
Thomas Müller
08fbfddab9 [stable9.1] Don't parse info.xml but reuse already cached app infos - fixes #25603 (#25968)
* Don't parse info.xml but reuse already cached app infos - fixes #25603

* Use === in InfoParser. Fixes test

* InfoParser should not depend on UrlGenerator - fixes issue with session being closed too early
2016-10-10 21:54:01 +02:00
Claudemir Todo Bom
3a4f8b6bb1 [stable9.1] fix issue #23600 - mail invites through v1 webdav (#26188) 2016-10-10 21:45:58 +02:00
Thomas Müller
94f7f3824b [stable9.1] Fix logClientIn for non-existing users (#26292) (#26307)
The check for two factor enforcement would return true for non-existing
users. This fix makes it return false in order to be able to perform
the regular login which will then fail and return false.

This prevents throwing PasswordLoginForbidden for non-existing users.
2016-10-10 21:44:40 +02:00
Vincent Petry
ea96fa0b2d Merge pull request #26309 from owncloud/stable9.1-0f6a5aac7c4a770d45f9a2a36f90aa331c795aac
[stable9.1] Improve user list rendering perf by not resorting after every add
2016-10-10 09:00:39 +02:00
Vincent Petry
16fd8f4c86 [stable9.1] Improve user list rendering perf by not resorting after every add (#26282)
The call to UserList.add() was wrong and was passing "user.lastLogin"
as the sort argument which would cause the list to be resorted over and
over again for every added item after loading the next page of users.
2016-10-07 17:17:53 +02:00
Vincent Petry
5e4233ad5e Merge pull request #26277 from owncloud/stable9.1-backport26031
[Stable9.1]  Allow one more origin. Log the reason of occ controller failure
2016-10-05 14:20:35 +02:00
Vincent Petry
361844c6dc Merge pull request #26272 from owncloud/stable9.1-11c30fce0ab0a49919f968a1efc22c4e479d5fee
[stable9.1] Changed request to not add a prefix to the url (#26256)
2016-10-05 09:52:41 +02:00
Vincent Petry
e31eac8012 Merge pull request #26274 from owncloud/stable9.1-integration-tests-issue-26182
Added sharing again an own file while belonging to a group scenario t…
2016-10-04 22:38:45 +02:00
VicDeo
9dd64d120d Use classname with namespace to inject dependencies automatically (#26105) 2016-10-04 19:02:33 +03:00
VicDeo
82cd86a207 Allow one more origin. Log the reason of occ controller failure (#26031)
* Log the reason of occ controller failure

* Allow requests from SERVER_ADDR
2016-10-04 19:02:04 +03:00
Sergio Bertolin
d44aff91f9 Removed cases not belonging to this PR 2016-10-04 15:09:48 +00:00
Sergio Bertolin
75eacd17d4 Added sharing again an own file while belonging to a group scenario to stable9.1 2016-10-04 14:46:46 +00:00
Sergio Bertolín
bede190a30 [stable9.1] Changed request to not add a prefix to the url (#26256)
* Changed request to not add a prefix to the url

* Expecting forbidden instead of service unavailable

* Handling login exceptions
2016-10-04 14:57:40 +02:00
Vincent Petry
8b20b12584 Tear down FS between cron jobs (#26223)
Because some cron jobs do not always properly clean up their FS usage
and others might not clean up before setting up the FS, this could
cause potential side effects.

To make sure we exclude side effects, we tear down the FS between cron
jobs.
2016-09-30 13:30:16 +02:00
Thomas Müller
ebf8a02d6e [stable9.1] Merge pull request #25636 from owncloud/fix-birthday-calendar-component (#26056)
The birthday calendar can only hold VEVENT
2016-09-30 12:16:25 +02:00
Thomas Müller
058c79a358 [stable9.1] Unset user PHOTO before setting new one in OCA\DAV\CardDAV\Converter::updateCard (#26243) (#26246)
Signed-off-by: Olivier Mehani <shtrom@ssji.net>

#26242
2016-09-30 11:34:10 +02:00
RealRancor
1b38cee3f3 Backport #26236 to stable9.1 (#26240) 2016-09-28 09:35:21 +02:00
RealRancor
f2d7be4344 Backport #26087 to stable9.1 (#26230) 2016-09-27 17:25:25 +02:00
Thomas Müller
492db474c2 [stable9.1] Translate file summary connector (#26221) (#26222) 2016-09-27 15:36:39 +02:00
Thomas Müller
c6b37639e4 [stable9.1] Change the minimum log level to fatal (#26213) (#26215) 2016-09-27 10:11:26 +02:00
Thomas Müller
716eb4ff87 [stable9.1] In case the build on master or any release branch fails an email notification is sent out (#26167) 2016-09-21 14:37:16 +02:00
Vincent Petry
a5f970adf9 Merge pull request #26148 from owncloud/stable9.1-c97f24efbaec7756667368568b0c5d7b506d864f
[stable9.1] Redirect to challenge page when only one 2FA provider
2016-09-20 20:52:00 +02:00
Thomas Müller
01833b4d38 [stable9.1] Fix mimetype detection inside hidden folders (#26138) (#26151) 2016-09-20 11:16:44 +02:00
Vincent Petry
08a328892a Allow uploading empty files (#26135) 2016-09-19 20:40:23 +02:00
Vincent Petry
5cc7dd8922 Final 9.1.1 in version.php 2016-09-19 16:45:41 +02:00
Vincent Petry
85f45d4bc5 [stable9.1] Redirect to challenge page when only one 2FA provider (#26141)
If only one two factor provider exists, spare the user from having to
select it and redirect directly to its challenge page.
2016-09-19 13:06:27 +02:00
Vincent Petry
aed4ee9f81 Increased version for 9.1.1 RC3 2016-09-13 20:00:48 +02:00
Vincent Petry
debe1c3f84 Improve chunk upload AssemblyStream performance (#26062) (#26072) 2016-09-09 14:53:12 +02:00
Vincent Petry
6fe80377e8 Only use realpath for real directories (#26060)
In some cross-local-storage use cases, the Local storage is
instantiated with "/" as data directory. In such cases, calling
realpath() would cause PHP warnings when open_basedir is set.

This fix bypasses the realpath() call when dealing with a root storage.
2016-09-08 15:14:20 +02:00
Vincent Petry
f572239546 Increase version for 9.1.1RC2 2016-09-07 20:48:37 +02:00
Vincent Petry
d614c12d3f Merge pull request #26050 from owncloud/stable9.1-prefilter-inaccessible-shares
[stable9.1] Prefilter inaccessible shares in DefaultShareProvider::getSharedWith()
2016-09-07 11:00:28 +02:00
Vincent Petry
64151706e6 Merge pull request #26041 from owncloud/stable9.1-fed-share-retry
[stable9.1] Fix fed share test call to return proper result
2016-09-07 10:58:39 +02:00
Vincent Petry
bc81af74e7 Merge pull request #26048 from owncloud/stable9.1-cath-needs-upgrade-non-cli
[Stable9.1] catch needs upgrade non cli
2016-09-07 08:31:56 +02:00
Vincent Petry
39182a49ab Prefilter inaccessible shares in DefaultShareProvider::getSharedWith()
The DefaultShareProvider now does a DB-level check to find out whether
file_source is accessible at all (deleted file) or whether it's in the
trashbin of a home storage.

One small corner case where the home storage id is in md5 form cannot
be covered properly with this approach.
2016-09-07 07:35:26 +02:00
Vincent Petry
4f0d8d4943 Fix fed share test call to return proper result
Fixes an issue where retrying a previously failed federated share would
not properly reset the availability flag because the return value was
undefined instead of "true".
2016-09-07 07:31:18 +02:00
Vincent Petry
faa6c45089 Merge pull request #26043 from owncloud/stable9.1-d17a7ff32a38804d9e6cfbc7dde36fe2f4b73c39
[stable9.1] Fix failing preview unit tests (#26039)
2016-09-07 07:30:43 +02:00
Victor Dubiniuk
a2d01aab8a Pass web requests to occ controller if upgrade is needed 2016-09-06 23:32:14 +03:00
Vincent Petry
7cc8f4d7e9 Merge pull request #26045 from owncloud/stable9.1-fix-shareperms-increase-owner
[stable9.1] Allow increasing permissions for share owner
2016-09-06 17:51:12 +02:00
Vincent Petry
d8d29f2221 Allow increasing permissions for share owner
In some cases, the owner of the share is also recipient through a group
share. The owner must still be able to increase permissions in that
situation.
2016-09-06 16:20:36 +02:00
Thomas Müller
3560458714 [stable9.1] Fix failing preview unit tests (#26039) 2016-09-06 15:28:10 +02:00
Jörn Friedrich Dreyer
7c042a47e8 forward port smbfixes (#25951) 2016-09-06 08:24:20 +02:00
Thomas Müller
8fe2daaa9e [stable9.1] Comments field is not properly escaped (#26008) (#26009) 2016-09-02 10:35:01 +02:00
Vincent Petry
bb291e2932 Merge pull request #25987 from owncloud/stable9.1-integration_tests_local_external_storage
Stable9.1 integration tests local external storage
2016-08-31 10:00:30 +02:00
Sergio Bertolín
c145ca0bac Changed enabled/disabled app in provisioning api tests 2016-08-30 14:57:02 +00:00
Sergio Bertolín
d4d3e3b128 External storage was not enabled and content was not deleted before scenarios
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-30 14:56:45 +00:00
Sergio Bertolín
12b28f8b86 Added local_storage folder 2016-08-30 14:54:11 +00:00
Sergio Bertolin
d87dbad598 Run as current user
Conflicts:
	build/integration/run.sh
2016-08-30 14:54:08 +00:00
Sergio Bertolin
46f23622c4 Removed extra context added needed option and remove storage after external storage scenarios
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-30 14:51:07 +00:00
Sergio Bertolin
2061fed3e2 Added feature and context, not working yet, option to allow sharing needs to be added 2016-08-30 14:43:39 +00:00
Sergio Bertolín
794229a783 Creating the folder when the tests run
Conflicts:
	build/integration/features/bootstrap/BasicStructure.php
	build/integration/run.sh
2016-08-30 14:43:33 +00:00
Vincent Petry
22c1ea893b Add integration test for sharing with group, then user in group
Add integration test for the use case where a group share exists and
then the same owner creates a direct share to a user in that group.
2016-08-30 14:37:00 +00:00
Vincent Petry
5119b630df Allow space for federated share id search (#25981) 2016-08-30 12:20:01 +02:00
Vincent Petry
0fae262b0b Added closeCursor in SharedMount numeric id (#25979) 2016-08-30 12:19:48 +02:00
Vincent Petry
6870045cf4 Merge pull request #25948 from owncloud/stable9.1-usermountcache-orphanedshare
[stable9.1] Prevent error with orphaned shares when updating user mount cache
2016-08-29 17:07:59 +02:00
Vincent Petry
c195ee678d Prevent error with orphaned shares when updating user mount cache 2016-08-29 10:59:19 +02:00
VicDeo
1b558ae201 Fix redirection taking care of protocol and port (#25956) 2016-08-29 09:27:15 +02:00
Thomas Müller
74c2c63b31 [stable9.1] Don't log credentials of LoginController::tryLogin (#25902) (#25935)
* Don't log credentials of LoginController::tryLogin - fixes #25895

* Don't log password in loginWithPassword
2016-08-29 09:15:17 +02:00
Vincent Petry
5cb0d5823c Merge pull request #25929 from owncloud/stable9.1-integration-tests-subadmins
Stable9.1 integration tests subadmins
2016-08-26 15:01:19 +02:00
Sergio Bertolín
4a0b0bc53f Typo in scenario 2016-08-25 00:19:57 +02:00
Sergio Bertolin
7d641bbfdf Change of user missing 2016-08-25 00:19:57 +02:00
Sergio Bertolin
8c7491cac2 Only check the pertenence to groups 2016-08-25 00:19:57 +02:00
Sergio Bertolin
ef16b119de Added testcases about adding and removing users to groups using subadmins 2016-08-25 00:19:56 +02:00
Vincent Petry
a870db5cd2 Merge pull request #25931 from owncloud/stable9.1-users-lazydropdownwithpencil
[stable9.1] Users page lazy multiselect group dropdowns
2016-08-24 19:36:49 +02:00
Vincent Petry
7633cd967d Users page lazy multiselect group dropdowns
Instead of pre-rendering all multiselects with lots of group entries,
the current groups are now displayed as simple labels.
Behind the labels there is a pencil icon like for other fields.
When clicking the pencil icon, the dropdown will be spawned and will
open itself.
Upon closing of the dropdown, the label comes back with the updated
selection and the dropdown is destroyed.
2016-08-24 16:38:56 +02:00
Vincent Petry
72745eff07 Merge pull request #25914 from owncloud/stable9.1-4f73fb491a2bf12dbf4d20964cfd0f7129f998b1
[stable9.1] Add occ command to expire the trashbin (#25878)
2016-08-24 09:45:30 +02:00
Thomas Müller
85e8a46e14 [stable9.1] 2FA can now be enabled and disabled via the provisioning api (#25911)
* [stable9.1] 2FA can now be enabled and disabled via the provisioning api

* [9.1] Return proper 'true' and 'false' values for two_factor_auth_enabled in provisioning api
2016-08-23 15:12:10 +02:00
Thomas Müller
cc65604955 [stable9.1] Add occ command to expire the trashbin (#25878)
* Add occ command to expire the trashbin

* Fix versions folder in setup check
2016-08-23 14:03:50 +02:00
Vincent Petry
04605ad442 Merge pull request #25906 from owncloud/stable9.1-db60e65409e7c6d4f1bde5062af53fbad6e8b412
[stable9.1] Fix issues where some user settings cannot be loaded when…
2016-08-23 09:34:56 +02:00
Thomas Müller
3ae319fdaa [stable9.1] Fix empty PATH_INFO (#25904) 2016-08-22 22:08:00 +02:00
Thomas Müller
bbfa0fe833 [stable9.1] Fix issues where some user settings cannot be loaded when the user id differs in case sensitivity - fixes #25684 (#25686) 2016-08-22 20:38:10 +02:00
Vincent Petry
8003c16105 Merge pull request #25898 from owncloud/stable9.1-a9e633db0cd04cb6288ce74c197153920a0b4665
[stable9.1] Best practice through out the web speak of a max avatar i…
2016-08-22 18:47:34 +02:00
Vincent Petry
13d794ff88 Merge pull request #25866 from owncloud/stable9.1-3cebeb168023627a0e511cd9864df9372098b55e
[stable9.1] 25532_issue_password_update_notification_updated (#25756)
2016-08-22 17:32:40 +02:00
Vincent Petry
5aa789272a Merge pull request #25888 from owncloud/stable9.1-27a5be96f108d4ab2b91bcd765433e1646ba9bf2
[9.1] Before a user is getting scanned the database connection is re-…
2016-08-22 17:19:44 +02:00
Vincent Petry
4e8718a78e Merge pull request #25886 from owncloud/stable9.1-init-filesconfig
[stable9.1] Make sure file list files config always exists
2016-08-22 17:18:19 +02:00
Thomas Müller
4c7135a44d [stable9.1] Best practice through out the web speak of a max avatar image size of… (#25857)
* Best practice through out the web speak of a max avatar image size of 96 pixels

* Respect size argument

THX @felixboehm
2016-08-22 14:17:01 +02:00
Vincent Petry
6c64d36f48 [9.1] Before a user is getting scanned the database connection is re-establ… 2016-08-22 11:17:06 +02:00
Vincent Petry
c4ba9f2f97 Make sure file list files config always exists
Initialize files config with defaults in case none was passed
2016-08-22 09:48:12 +02:00
Vincent Petry
20aa7ee280 Display number of hidden files in files summary (#25877)
When dot files are hidden, the table summary and selection summary will
not show how many hidden files were included.
2016-08-19 23:26:16 +02:00
Vincent Petry
ced5ba0763 Fix hidden files handling (#25865)
Hidden files (dot files) are now always rendered in the DOM to make
sure that all file operations and selection still work as expected.

Their visibility is now toggled on CSS level.
2016-08-19 17:09:34 +02:00
Juan Pablo Villafañez
e466349754 Hide the LDAP password in the client side (#25872)
Connection checks will be done by using the configuration id, with the
stored password. LDAP password won't be sent to the client.

Conflicts:
	apps/user_ldap/ajax/testConfiguration.php
2016-08-19 16:49:01 +02:00
Jack Davis
e27efa5d52 [stable9.1] 25532_issue_password_update_notification_updated (#25756)
* Password Update Notification

Added an IF ELSE statement to ensure that feedback is provided to the
user on successfully updating a user password in settings.

* Password Update Success Message

Updated the password update success message
2016-08-19 10:48:29 +02:00
Thomas Müller
c058e9456c [stable9.1] Move over to new CalDAVTester repo (#25859) (#25863)
* Move over to new caldac tester repo

* no run.py anymore
2016-08-19 10:30:16 +02:00
Vincent Petry
80a4940267 Merge pull request #25860 from owncloud/stable9.1-aedae12db5ebfaf56bec91b736fb8a569cecf16f
[stable9.1] In cases where the server dictates the link share expirat…
2016-08-19 10:16:14 +02:00
Thomas Müller
554e96cb1c [stable9.1] In cases where the server dictates the link share expiration the date is not updated on consequitive changes and enable/disable actions 2016-08-19 00:35:07 +02:00
Daniel Molkentin
8b9536c22b correct version string to 9.1.1 RC1 2016-08-18 13:20:29 +02:00
Daniel Molkentin
3737f5ad80 ownCloud Server 9.1.1 RC1 2016-08-18 13:16:34 +02:00
Vincent Petry
fb9576df9e [stable9.1] Dont decrypt shared files (#25831)
* Take from 351cab6bce - THX @schiessle

* Fix unit tests
2016-08-18 12:00:52 +02:00
Vincent Petry
d4ec50c637 Merge pull request #25849 from owncloud/stable9.1-fixtypo
[stable9.1] fix typo
2016-08-18 11:51:32 +02:00
Vincent Petry
98af8941ef Merge pull request #25837 from owncloud/stable9.1_nobodyifnocontent
[stable9.1] 204 and 304 must not have a body, see https://tools.ietf.org/html/rfc7230#section-3.3
2016-08-18 11:47:06 +02:00
Jörn Friedrich Dreyer
9bbf347e58 fix typo 2016-08-18 10:51:32 +02:00
Vincent Petry
b59b6978de Merge pull request #25845 from owncloud/stable9.1-remove_reference_magic
[stable9.1] remove reference magic
2016-08-18 10:09:12 +02:00
Jörn Friedrich Dreyer
c687c89354 remove reference magic 2016-08-17 17:21:52 +02:00
Vincent Petry
0815af34c0 Merge pull request #25841 from owncloud/stable9.1-fix-unmerged-shares-repair-betterregexp
[stable9.1] Improve regexp to detect duplicate folders when repairing unmerged shares
2016-08-17 17:02:20 +02:00
Vincent Petry
aea66fabf4 Improve regexp to detect duplicate folders when repairing unmerged shares 2016-08-17 14:24:36 +02:00
Jörn Friedrich Dreyer
35f9a562df 204 and 304 must not have a body, see https://tools.ietf.org/html/rfc7230#section-3.3 2016-08-17 11:31:46 +02:00
Vincent Petry
4765f5b214 Merge pull request #25819 from owncloud/stable9.1-disable-nfd-wrapper
[stable9.1] Disable NFD encoding wrapper by default
2016-08-17 10:44:42 +02:00
Vincent Petry
64d78879db Merge pull request #25812 from owncloud/stable9.1-fix-unmerged-shares-repair-targetdecision
[stable9.1] Fix unmerged shares repair targetdecision
2016-08-17 09:41:46 +02:00
Vincent Petry
b7356d881b Merge pull request #25811 from owncloud/stable9.1-smb-trace
[stable9.1] add conditional smb trace logging for debug purposes
2016-08-16 16:48:23 +02:00
Vincent Petry
22d20833b5 Disable NFD encoding wrapper by default
Seems I forgot to set it back to false after testing.
Will give a performance boost for all storages.
2016-08-16 15:46:35 +02:00
Vincent Petry
01a51543a5 Merge pull request #25776 from owncloud/stable9.1-eaecf0cfa9094eb5224e568b7bdde1bd49cfad73
[stable9.1] Merge pull request #25652 from owncloud/fix-getQuota-on-null
2016-08-16 13:55:04 +02:00
Vincent Petry
4b9879db3d Merge pull request #25789 from owncloud/stable9.1-usermountcache-hell-shortcutstorageid
[stable9.1] Fix sharedstorage recursion hell
2016-08-16 13:40:52 +02:00
Vincent Petry
c5477ad059 Merge pull request #25797 from owncloud/stable9.1-provisioning-api-subadmin-addtogroup
[stable9.1] Fix subadmin permission check for addToGroup/removeFromGroup
2016-08-16 12:01:02 +02:00
Vincent Petry
8cca364160 Fix unmerged shares repair with mixed group and direct shares
Whenever a group share is created after a direct share, the stime order
needs to be properly considered in the repair routine, considering that
the direct user share is appended to the $subShares array and breaking
its order.
2016-08-16 11:08:07 +02:00
Vincent Petry
03a65e5e3a Improve file_target finding logic when repairing unmerged shares
Pick the most recent subshare that has no parenthesis from duplication
which should match whichever name the user picked last. If all
subshares have duplicate parenthesis names, use the least recent group
share's target instead.
2016-08-16 11:08:02 +02:00
Jörn Friedrich Dreyer
5d6a2b8041 add conditional smb trace logging for debug purposes 2016-08-16 11:05:37 +02:00
Vincent Petry
c492277cf1 Merge pull request #25751 from owncloud/stable9.1-shared-cachethepropagatorinstance
[stable9.1] Store the shared propagator instance
2016-08-15 16:40:23 +02:00
Vincent Petry
837bf1c587 Use FailedStorage when share is invalid 2016-08-15 11:09:39 +02:00
Vincent Petry
dc7d55c857 Flag to not recurse into shared mounts in getPath 2016-08-15 11:09:39 +02:00
Vincent Petry
3717e6237e Lazy init shared storage by tweaking jail 2016-08-15 11:09:39 +02:00
Vincent Petry
c8a385d61e Get shared storage numeric id directly from DB
To prevent recursions in initMountPoints which requires the numeric id
to populate oc_mounts
2016-08-15 11:09:39 +02:00
Vincent Petry
aacf391f8b Fix subadmin permission check for addToGroup/removeFromGroup
Fixes issue where subadmins could never add users to a group.
Added missing unit tests
2016-08-15 10:46:47 +02:00
Vincent Petry
df16a0c5e3 Store the shared propagator instance
This instead of recreating it for every call.
2016-08-15 10:08:01 +02:00
Markus Goetz
4033a6b65a DAV: Return data-fingerprint always when asked (#25482)
For owncloud/client#5056
Users can configure arbitrary subfolders for syncing, therefore we should
always return it when asked for.
The sync client makes sure to not always ask for it to save bandwidth.
2016-08-13 17:03:54 +02:00
Jörn Friedrich Dreyer
563df59f58 [stable9.1] lastInsertId requires the prefix (#25785)
backport of https://github.com/owncloud/core/pull/25764
2016-08-12 15:10:01 +02:00
Juan Pablo Villafañez
a986fd4b79 [stable9.1] Fix smb attributes stable9 1 (#25733)
* Fix file permissions for SMB (read-only folders will be writeable)

* Read-only folders won't be deletable

* Added comment for the read-only behaviour for folders
2016-08-12 12:06:30 +02:00
Vincent Petry
6e44ef83ff Fix OR operands in SharedMountTest (#25779) 2016-08-12 08:55:29 +02:00
Vincent Petry
80e106f04a Merge pull request #25737 from owncloud/stable9.1-99611d277521b84a943f68d48fe05f290127db7e
[stable9.1] getJailedPath expects $path to have a trailing /  (#25703)
2016-08-11 21:28:38 +02:00
Vincent Petry
befed183e5 [stable9.1] Merge pull request #25652 from owncloud/fix-getQuota-on-null
Ensure the user exists before calling a method on it
2016-08-11 19:51:31 +02:00
Thomas Müller
912aa4f82b [Stable9.1] fix unit test on new jenkins setup and adjust Jenkinsfile (#25772)
* [stable9.1] Next step jenkinsfile (#25622)

* Adding timestamper and evaluation of test results even in case of failure

* Adding build timeout

* use fixed value 120 minutes as timeout for each test executing for now

* Terminate the build as soon as test execution fails

* Adjust external testing as well

* Finalize use of executeAndReport

* [stable9.1] Fix discoverymanager tests (#25769)

* Allow testing of the DiscoveryManager

* Array sort order is of no relevance
2016-08-11 19:33:33 +02:00
Thomas Müller
4b1b5adb34 [stable9.1] Faster classification migration (#25638)
* [stable9.1] Faster classification migration

* Update PHPDoc
2016-08-10 22:50:04 +02:00
Thomas Müller
ed59de57bb [stable9.1] Add missing array element - fixes #25714 (#25732) 2016-08-10 22:48:45 +02:00
Jörn Friedrich Dreyer
4d47963a6e Skip version and trash expiry for users that never logged in (#25745) 2016-08-10 17:39:03 +02:00
Jörn Friedrich Dreyer
ee7106ca71 log class name, ID only is hard to debug (#25746) 2016-08-10 16:51:30 +02:00
Thomas Müller
a32f50a5bf [stable9.1] getJailedPath expects $path to have a trailing / (#25703)
* getJailedPath expects $path to have a trailing / - fixes #25464

* Adding test case for getPathById including a jailed cache where root is just empty
2016-08-09 10:05:53 +02:00
VicDeo
ee72c9b1e8 Respect theme for external folder icon (#25487) (#25711)
See issue #25461. 
When using a theme with alternative filetype icons `OCA.External.StatusManager.Utils.getIconRoute` should respect that, rather than hard coding the default icon.

Note this change does not affect windows_network_drive and sharepoint icons, which appear not to be easily themeable.
2016-08-09 09:54:19 +02:00
Thomas Müller
1a497b1027 [stable9.1] Fix undefined OfflineUser::composeAndStoreDisplayName() - fixes #23248 (#25601) 2016-08-03 08:29:37 +02:00
Thomas Müller
66f86bc686 [stable9.1] Added integration test (#25675)
* [stable9.1] Added integration test

* A shared storage is never a home storage - fixes #25582
2016-08-02 22:28:37 +02:00
Thomas Müller
f376122168 [stable9.1] Load the app before executing it's repair steps (#25650) (#25674) 2016-08-02 13:41:00 +02:00
Sergio Bertolín
db85499697 Add integration test for sharing with group, then user in group (#25672)
Add integration test for the use case where a group share exists and
then the same owner creates a direct share to a user in that group.
2016-08-01 17:49:30 +02:00
Thomas Müller
62235e511d [stable9.1] Adding quota plugin to new dav endpoint (#25615) (#25648)
* Adding quota plugin to new dav endpoint

* Added integrated test failing in old endpoint

* Added 0B quota test
2016-08-01 11:12:06 +02:00
Vincent Petry
97e24aed58 Prevent setting email and triggering events at login time (#25554)
Whenever an LDAP user also has an email address defined in LDAP, the
LDAP code will try and update the email address of the locally known
user. This happens at login time or every time the user's LDAP
attributes are processed.

There is code listening to the email setting hook which updates the
system address book, which also will trigger FS setup due to avatars
and other things.

This fix only sets the email address when really necessary.
2016-07-26 21:09:25 +02:00
Vincent Petry
56ee571dc3 [stable9.1] Group shares with same source and target (#25534)
* Group shares with same source and target

Fixes #24575

Note that this is a very limited solution and eventually we want smarter
merging!

* Add integration tests for merging received shares

* Improved share grouping readability + fixed test

* Add repair step for unmerged shares (WIP)

* Added more tests for sharing's MountProvider

* Group incoming shares for resharing in JS

* Adjust repair version check for unmerged shares

* Fix RepairUnmergedShares to not skip valid repair cases

The repair step was a bit overeager to skip repairing so it missed the
case where a group share exists without subshares but with an
additional direct user share.

* Add integration tests for double shares with rename in between

* Make share target consistent when grouping group share with user share

In some situations, a group share is created before a user share, and
the recipient renamed the received share before the latter is created.
In this situation, the "file_target" was already modified and the second
created share must align to the already renamed share.

To achieve this, the MountProvider now groups only by "item_source"
value and sorts by share time. This makes it so that the least recent
share is selected as super-share and its "file_target" value is then
adjusted in all grouped shares.

This fixes the issue where this situation would have different
"file_target" values resulting in two shared folders appearing instead
of one.
2016-07-26 11:57:05 +02:00
Thomas Müller
2bf6f54366 [stable9.1] Simplify testPermissionMovedGroupShare (#25573) (#25607)
Reduces significantly the testing time but still cover the permission
change
2016-07-26 11:43:36 +02:00
Thomas Müller
ec02b8bf25 [stable9.1] Redirect to default page after login - fixes #25562 (#25600) (#25609) 2016-07-26 11:07:17 +02:00
Thomas Müller
f5c5bac0fe [stable9.1] Fixes undefined two-factor-providers (#25605) (#25606) 2016-07-25 22:29:14 +02:00
Thomas Müller
b247e4e5ff [stable9.1] Especially with coverage enabled execution times are pretty high (#25517) (#25595) 2016-07-25 09:26:13 +02:00
Thomas Müller
716273a918 [stable9.1] Use explode() instead of split() - fixes #25483 (#25488) (#25499) 2016-07-24 10:54:23 +02:00
Thomas Müller
9f2117613d Add all properties while creating a subscription (#25318) (#25335)
Fixes #24469
2016-07-21 15:58:46 +02:00
Thomas Müller
1550ae93ef [stable9.1] Test jenkins pipeline (#25401) (#25501) 2016-07-21 10:54:36 +02:00
Vincent Petry
57a045efcb [stable9.1] Filelist change dir auto-prepend slash (#25377)
* Filelist change dir auto-prepend slash

Prepend a slash to directories in case it was missing since many places
assume that it's there.

* Fix js unit test in filelist spec
2016-07-21 10:52:34 +02:00
Daniel Molkentin
b642b26f72 ownCloud Server 9.1.0 final 2016-07-20 11:05:19 +02:00
Daniel Molkentin
28a689c856 ownCloud Server 9.1.0 RC4 2016-07-18 19:43:34 +02:00
Vincent Petry
dd3e5e0e88 Backport guzzlehttp fix from 5.3.1 2016-07-18 19:37:24 +02:00
Daniel Molkentin
425107ba2f ownCloud Server 9.1.0 RC3 2016-07-18 14:30:21 +02:00
Thomas Müller
0aef283dff [stable9.1] Added custom exception as non fatal (#25486) (#25489) 2016-07-16 01:19:14 +02:00
Vincent Petry
ef7d362810 Change load order of auth backends so that we can throw an exception in OCA\DAV\Connector\Sabre\Auth - fixes #25362 (#25478) 2016-07-14 16:19:41 +02:00
Daniel Molkentin
a9faa22241 ownCloud Server 9.1.0 RC2 2016-07-13 18:09:14 +02:00
Vincent Petry
084f46917a [stable9.1] Adding certificate revocation list and validate if the app certificate is revoked (#25468)
* Adding certificate revocation list and validate if the app certificate is revoked

* Check integrity of a signed app in any case on installation
2016-07-13 16:12:25 +02:00
Thomas Müller
0daddd5866 [stable9.1] Cast share id to string (#25402) (#25432) 2016-07-13 14:34:52 +02:00
Vincent Petry
92f49fbb39 [stable9.1] Workaround to check htaccess in case of redirects (#25434)
* Workaround to check htaccess in case of redirects

In some setups, the web server will redirect any call to "data/" to the
main page. This causes the XHR to return the 200 HTTP status code and
the body contains the HTML page of the main page / files app.

This fix improves the htaccess failure detection by adding a known
string inside the test file "htaccesstest.txt". If we are able to find
this string, it means that the web server didn't block access to that
file.

* Fix setup check unit test (#25439)
2016-07-13 10:40:33 +02:00
Vincent Petry
3de4dfb2e5 Merge pull request #25448 from owncloud/stable9.1-webdav-copypermissions
[stable9.1] Additional perm check in Webdav
2016-07-12 14:37:15 +02:00
Sergio Bertolín
c301b8d71e Modified integration tests 2016-07-12 08:47:11 +02:00
Vincent Petry
9712c9db0f Additional perm check in Webdav 2016-07-12 08:47:07 +02:00
Vincent Petry
0ddbf5c981 [stable9.1] Revert invalid commits from master->stable9.1 merge (#25420)
* Revert "Merge pull request #25240 from owncloud/remove-svg"

This reverts commit 8b8d2b679a, reversing
changes made to a35747b6fa.

* Revert "Merge pull request #25253 from owncloud/users-fixotherquotadropdown"

This reverts commit a35747b6fa, reversing
changes made to a573b6863c.

* Revert "Merge pull request #25314 from owncloud/files_external-backends-config"

This reverts commit a573b6863c, reversing
changes made to 8147eefaeb.

* Revert "Add all properties while creating a subscription (#25318)"

This reverts commit aaf4c3073a.

* Revert "Merge pull request #25276 from owncloud/delete-own-session-token"

This reverts commit e42ce62ce2, reversing
changes made to aaf4c3073a.

* Revert "Merge pull request #25262 from owncloud/fed-sharing-error"

This reverts commit 027715f9ac, reversing
changes made to e42ce62ce2.
2016-07-08 16:56:13 +02:00
Thomas Müller
830c1f2fbf [stable9.1] Set content type when downloading log file to force download in some browsers (#25382) (#25397) 2016-07-08 09:15:38 +02:00
Thomas Müller
0ec43a4f0f [stable9.1] Use named parameter instead of direct value for system tags search param (#25380) (#25395) 2016-07-07 12:28:26 +02:00
VicDeo
8b601c567d Bypass upgrade page when occ controller is requested (#25366) 2016-07-06 22:08:34 +02:00
Jörn Friedrich Dreyer
513e4aac85 Cap LDAP user cache (#25326) 2016-07-06 21:28:17 +02:00
Vincent Petry
de5b3c5d35 Merge pull request #25374 from owncloud/stable9.1-147c672f5866002d45ec68e99e379449792eeaf8
[stable9.1] Ignore invalid paths in the JS file list
2016-07-06 12:50:34 +02:00
Vincent Petry
e2dbc0d0e6 Ignore invalid paths in the JS file list (#25368) 2016-07-06 12:01:23 +02:00
Carlos Damken
19cf727a0f Files_Versions don't show when the files are erased 2016-07-05 19:53:06 +02:00
Carlos Damken
7c4108ee4b Merge branch 'stable9.1' of https://github.com/owncloud/core 2016-07-05 19:03:28 +02:00
Vincent Petry
e668cf1a33 Merge pull request #25356 from owncloud/checkupgrade-bypass
Bypass upgrade page when occ controller is requested
2016-07-05 12:04:19 +02:00
Vincent Petry
8a298c4635 Merge pull request #25347 from owncloud/fix-ldap-check-user-stable9.1
[stable9.1] check if renamed user is still valid by reapplying the ldap filter
2016-07-05 11:33:06 +02:00
Vincent Petry
1d10d58284 Merge pull request #25344 from owncloud/fix-ldap-check-user
check if renamed user is still valid by reapplying the ldap filter
2016-07-05 11:29:55 +02:00
Thomas Müller
3bde47cffe fix swift primary object store test (#25281)
* Wait for socket to be open

* Fix call on null

* Allow DB access for MountProviderTest

Makes unit tests pass when using object store, since their FS access is
actually oc_filecache DB access. It is currently not possible to mock
or bypass the logic from "SharedMount::verifyMountPoint()" triggered by
this test.
2016-07-05 08:54:51 +02:00
Jenkins for ownCloud
e7cc8bac1e [tx-robot] updated from transifex 2016-07-05 02:31:32 -04:00
Victor Dubiniuk
89e581acf8 Bypass upgrade page when occ controller is requested 2016-07-05 09:20:37 +03:00
Morris Jobke
8b8d2b679a Merge pull request #25240 from owncloud/remove-svg
Remove SVG fallback
2016-07-04 17:49:00 +02:00
Vincent Petry
a35747b6fa Merge pull request #25253 from owncloud/users-fixotherquotadropdown
Fix "Other" value handling in quota dropdown in users page
2016-07-04 16:13:18 +02:00
Vincent Petry
a573b6863c Merge pull request #25314 from owncloud/files_external-backends-config
show configuration options for authentication backends
2016-07-04 16:10:03 +02:00
Joas Schilling
8147eefaeb Change nickvergessen mailmap entry (#25349) 2016-07-04 15:19:47 +02:00
felixboehm
325776eaf2 check if renamed user is still valid by reapplying the ldap filter (#25338) 2016-07-04 14:22:49 +02:00
felixboehm
aa42d60c5f check if renamed user is still valid by reapplying the ldap filter (#25338) 2016-07-04 14:20:08 +02:00
Jörn Friedrich Dreyer
6b4b337e53 Cap LDAP user cache (#25323) 2016-07-04 13:57:15 +02:00
Jenkins for ownCloud
59fc3ff45a [tx-robot] updated from transifex 2016-07-04 01:56:34 -04:00
Jenkins for ownCloud
6a89a63d2e [tx-robot] updated from transifex 2016-07-03 01:54:52 -04:00
Jenkins for ownCloud
b0bad03234 [tx-robot] updated from transifex 2016-07-02 01:54:53 -04:00
Hendrik Leppelsack
5cc01476e4 adjusts tests to removal of svg fallback 2016-07-01 16:36:37 +02:00
Hendrik Leppelsack
0a8f7bdc5b remove svg classes 2016-07-01 16:36:37 +02:00
Hendrik Leppelsack
9e7e3decd3 remove png references in core 2016-07-01 16:36:37 +02:00
Hendrik Leppelsack
6cc6538ad2 remove png actions, fileicons, etc 2016-07-01 16:36:37 +02:00
Hendrik Leppelsack
1ad97f8479 remove javascript png fallback for svg 2016-07-01 16:36:37 +02:00
Vincent Petry
027715f9ac Merge pull request #25262 from owncloud/fed-sharing-error
Only save federated share after remote server is notified
2016-07-01 16:20:39 +02:00
Vincent Petry
e42ce62ce2 Merge pull request #25276 from owncloud/delete-own-session-token
prevent users from deleting their own session token
2016-07-01 16:15:31 +02:00
Thomas Citharel
aaf4c3073a Add all properties while creating a subscription (#25318)
Fixes #24469
2016-07-01 13:42:35 +02:00
Vincent Petry
44a8a13655 Merge pull request #25315 from owncloud/stable9.1-search-preventinfiniteloop
[stable9.1] Prevent infinite loop in search auto-nextpage
2016-07-01 12:06:38 +02:00
Jenkins for ownCloud
74b29a0ffa [tx-robot] updated from transifex 2016-07-01 01:57:04 -04:00
Vincent Petry
54ecc4c375 Merge pull request #25304 from owncloud/local-karma
Always use local karma
2016-06-30 17:29:56 +02:00
Vincent Petry
779ee95834 Prevent infinite loop in search auto-nextpage
When loading the next page of search results, make sure that the loop
can end if there are no more elements in case the total doesn't match.

Also added a check to avoid recomputing the search results whenever the
setFilter() is called with the same value. This happens when navigating
away to another folder, the search field gets cleared automatically and
it calls FileList.setFilter('').
2016-06-30 17:20:26 +02:00
Vincent Petry
39723c5958 Merge pull request #25310 from owncloud/search-preventinfiniteloop
Prevent infinite loop in search auto-nextpage
2016-06-30 17:20:25 +02:00
Robin Appelman
17036c4cc3 show configuration options for authentication backends while listing storage
Fixes #22447
2016-06-30 15:50:14 +02:00
Robin Appelman
cb3b678b2c hide hidden parameters from list backend/auth parameters 2016-06-30 15:44:42 +02:00
Vincent Petry
dc35554091 Prevent infinite loop in search auto-nextpage
When loading the next page of search results, make sure that the loop
can end if there are no more elements in case the total doesn't match.

Also added a check to avoid recomputing the search results whenever the
setFilter() is called with the same value. This happens when navigating
away to another folder, the search field gets cleared automatically and
it calls FileList.setFilter('').
2016-06-30 11:10:48 +02:00
Jenkins for ownCloud
e67615ef0c [tx-robot] updated from transifex 2016-06-30 01:55:56 -04:00
Daniel Molkentin
4c426ad970 fix version string 2016-06-29 15:11:48 +02:00
Daniel Molkentin
0ccc412fcc 9.1.0 RC 1 2016-06-29 15:09:40 +02:00
Thomas Müller
fe007fd543 Various database migration fixes (#25209)
* String columns with a length higher then 4000 are converted into a CLOB columns automagically - we have to respect this when migrating

* Adding schema migration tests to prevent unnecessary and non-sense migration steps
Fix Oracle autoincrement and unsigned handling

* Fix sqlite integer type for autoincrement

* Use lower case table names - fixes pg

* Fix postgres with default -1 - this only affect pg 9.4 servers - 9.5 seems to work fine
2016-06-29 14:54:41 +02:00
Vincent Petry
a29c65037e Merge pull request #25288 from owncloud/fix-versionrevertperms
Hide revert button when no permission to revert
2016-06-29 12:51:39 +02:00
Björn Schießle
d2209d304f get only vcards which match both the address book id and the vcard uri (#25294) 2016-06-29 12:13:59 +02:00
Jenkins for ownCloud
e1c24e7c50 [tx-robot] updated from transifex 2016-06-29 05:52:18 -04:00
Christoph Wurst
dc6c2344f6 prevent users from deleting their own session token 2016-06-28 16:17:37 +02:00
Vincent Petry
6a1d9d0c32 Hide revert button when no permission to revert 2016-06-28 13:00:58 +02:00
Jenkins for ownCloud
20b1ba0771 [tx-robot] updated from transifex 2016-06-28 01:57:10 -04:00
Robin Appelman
b40013928c Fix getting the certificate bundle for dav external storage (#25274)
* Fix getting the certificate bundle for dav external storages

* Log the original exception in dav external storage
2016-06-27 22:26:43 +02:00
Christoph Wurst
86a0e64628 Login hooks (#25260)
* fix login hooks

* adjust user session tests

* fix login return value of successful token logins

* trigger preLogin hook earlier; extract method 'loginWithPassword'

* call postLogin hook earlier; add PHPDoc
2016-06-27 22:16:22 +02:00
Robin Appelman
332b38fd92 handle unavailable fed shares while testing for availability (#25277)
* More explicit http status codes

* handle unavailable fed shares while testing for availability
2016-06-27 21:34:28 +02:00
Georg Ehrke
f107be3d29 fix a ImageExportPlugin Test (#25215) 2016-06-27 21:26:56 +02:00
Robin Appelman
646c90cc4a Log reason why we removed the fed share 2016-06-27 16:38:47 +02:00
Vincent Petry
06331625a9 Merge pull request #25273 from owncloud/ext-fixsessioncredentialsnolazyload
Quickfix: do not lazy load auth mechanisms for ext storages
2016-06-27 14:57:29 +02:00
Robin Appelman
8d32e1d35b Handle exceptions thrown while trying to notify remote server of a fed share 2016-06-27 14:28:12 +02:00
Vincent Petry
79cfad0cc0 Merge pull request #25237 from owncloud/search-filelistnextpageresults
Prerender file list pages to include search results
2016-06-27 13:46:25 +02:00
Vincent Petry
72a3301ba4 Merge pull request #25261 from owncloud/app-password-login-name
show which login name to use for the new app password
2016-06-27 13:40:20 +02:00
Christoph Wurst
5e2a9dac14 Merge pull request #25263 from owncloud/decryptall-keepencryptionenabledforsingleuser
Keep encryption enabled if decrypting for single user
2016-06-27 12:19:45 +02:00
Vincent Petry
6e0c40ffd9 Merge pull request #25250 from owncloud/linkshare-includedeletewithuploadperms
Add explicit delete permission to link shares
2016-06-27 12:14:05 +02:00
Vincent Petry
dbd176cfab Merge pull request #25258 from owncloud/integritycheck-whennotinstalled
Make code integrity check work when OC is not installed yet
2016-06-27 11:58:35 +02:00
Vincent Petry
95344d0625 Quickfix: do not lazy load auth mechanisms for ext storages
Some auth mechanisms like SessionCredentials need to register hooks
early, so they cannot be lazy loaded.
2016-06-27 10:50:10 +02:00
Morris Jobke
9681bf7cee Merge pull request #25252 from owncloud/authtoken-removetooltipondisconnect
Remove tooltip when disconnecting token
2016-06-27 10:42:35 +02:00
Vincent Petry
48116660f5 Merge pull request #25129 from owncloud/remove-ie
Remove ie8+9 support
2016-06-27 10:20:47 +02:00
Vincent Petry
9549e2ded7 Merge pull request #25247 from owncloud/fed-unshare-fail
Remove a fed share from the local table before trying to notify the remote server
2016-06-27 09:58:13 +02:00
Vincent Petry
4be95374a5 Merge pull request #25251 from owncloud/authtoken-assetpipelinefix
Use OC.Backbone instead of Backbone directly in authtoken JS code
2016-06-27 09:56:37 +02:00
Vincent Petry
089fcb45c0 Merge pull request #25154 from owncloud/token-login-check-loginname
check login name when authenticating via token and basic auth
2016-06-27 09:54:37 +02:00
Jenkins for ownCloud
ee90bef50a [tx-robot] updated from transifex 2016-06-27 01:55:57 -04:00
Jenkins for ownCloud
52eab2a61a [tx-robot] updated from transifex 2016-06-26 01:55:53 -04:00
Jenkins for ownCloud
3d65979f0a [tx-robot] updated from transifex 2016-06-25 01:56:48 -04:00
Christoph Wurst
c295523ae2 Merge pull request #25259 from owncloud/search-fixsearchfromotherfilelists
Fix search result link for file results outside default list
2016-06-24 17:12:02 +02:00
Christoph Wurst
e9a0a6d83a Merge pull request #25257 from owncloud/comments-showerroronsave
Show error message when posting an invalid comment
2016-06-24 17:11:20 +02:00
Christoph Wurst
213d7119f9 fix layout 2016-06-24 17:00:59 +02:00
Vincent Petry
19a53982d4 Keep encryption enabled if decrypting for single user
When decrypting all files of a single user, the admin usually does not
intend encryption to be suddenly disabled for everyone. This fix
reenables encryption after decrypting for a single user.

Decrypting for all users will still disable encryption globally.
2016-06-24 16:46:25 +02:00
Robin Appelman
ee674844f2 better detect errors in fed sharing response 2016-06-24 15:56:33 +02:00
Christoph Wurst
d484fef837 show which login name to use for the new app password 2016-06-24 15:31:48 +02:00
Christoph Wurst
db34671626 check login name when authenticating with client token 2016-06-24 13:57:09 +02:00
Vincent Petry
5e58b5115f Prerender file list pages to include search results
When filtering the file list, if a result is on an unrendered page,
make sure to call _nextPage() to prerender the pages in order to
display all matching results.
2016-06-24 13:55:14 +02:00
Vincent Petry
39b533d0d8 Hide search results after switching directory
When clicking on a folder result in the search result list, the result
box for "results in another folder" must disappear.
2016-06-24 11:32:14 +02:00
Vincent Petry
bf3ee69d86 Fix search result link for file results outside default list
When outside the "All files" list, the search result link must properly
redirect to the "All files" list.
2016-06-24 11:31:29 +02:00
Vincent Petry
d345047b0f Make code integrity check work when OC is not installed yet 2016-06-24 10:24:41 +02:00
Vincent Petry
04e3da0cf5 Merge pull request #25171 from owncloud/files_external-list-all
Add option to `occ files_external:list` to show all configured mounts
2016-06-24 10:18:14 +02:00
Vincent Petry
56ad4cdfec Show error message when posting an invalid comment
When an internal server error occurs while creating or updating a
comment, display a proper error notification in the UI.
2016-06-24 10:17:12 +02:00
Vincent Petry
7dc36289ab Repair step to adjust link share delete permissions 2016-06-24 09:48:48 +02:00
Vincent Petry
2ca1301494 Add explicit delete permission to link shares
Link shares always allowed deletion, however internally the permissions
were stored as 7 which lacked delete permissions. This created an
inconsistency in the Webdav permissions.

This fix makes sure we include delete permissions in the share
permissions, which now become 15.

In case a client is still passing 7 for legacy reasons, it gets
converted automatically to 15.
2016-06-24 09:48:48 +02:00
Vincent Petry
dc78d26f2a Merge pull request #25239 from owncloud/setupchecks-preventreload
Don't reload page in case of auth errors during setup checks
2016-06-24 09:47:55 +02:00
Vincent Petry
819b7c45a9 Prevent negative or non-number values in quota input 2016-06-24 09:20:13 +02:00
Jenkins for ownCloud
29068d3845 [tx-robot] updated from transifex 2016-06-24 01:56:13 -04:00
Vincent Petry
6c1ea7a54b Fix "Other" value handling in quota dropdown in users page
Prevents "other" value to be deleted.
When appending custom value, put it above the "other" entry.
2016-06-23 18:42:11 +02:00
Vincent Petry
8fef9a197f Remove tooltip when disconnecting token 2016-06-23 18:30:45 +02:00
Vincent Petry
e2a28db2b5 Use OC.Backbone instead of Backbone directly in authtoken JS code
Fixes asset pipeline issue with the auth token in personal page
2016-06-23 18:26:01 +02:00
Vincent Petry
cc2aec11af Merge pull request #25238 from owncloud/files-trashlistnamecorruption
Fix trashed file name corruption when rerendering trashbin list
2016-06-23 15:36:14 +02:00
Robin Appelman
040c541138 Remove a fed share from the local table before trying to notify the remote server 2016-06-23 14:19:55 +02:00
Robin Appelman
bac1a3a623 Add option to occ files_external:list to show all configured mounts 2016-06-23 13:12:03 +02:00
Hendrik Leppelsack
e5d8726859 remove ie8+9 support 2016-06-23 12:34:53 +02:00
Vincent Petry
97f1813695 Don't reload page in case of auth errors during setup checks
If an error occurs during setup checks, do not let the global ajax
error handler reload the page.
2016-06-23 11:54:49 +02:00
Vincent Petry
508c580e67 Fix trashed file name corruption when rerendering trashbin list
The trashbin code does some gymnastics with the file data at render
time. This fix makes sure that the modifications done on the file data
are only local to the rendering code and doesn't affect the actual file
data from the file list.
2016-06-23 11:51:23 +02:00
546 changed files with 12468 additions and 2178 deletions

View File

@@ -182,7 +182,8 @@ Jesús Macias <jmacias@solidgear.es> Jesus Macias <jmacias@full-on-net.com>
jknockaert <jasper@knockaert.nl>
Joan <aseques@gmail.com>
Joar Wandborg <git@wandborg.com>
Joas Schilling <nickvergessen@owncloud.com> Joas Schilling <nickvergessen@gmx.de>
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@gmx.de>
Joas Schilling <coding@schilljs.com> Joas Schilling <nickvergessen@owncloud.com>
joel hansson <joel.hansson@gmail.com>
Johan Björk <johanimon@gmail.com>
Johannes Twittmann <github.com@deryo.de>

View File

@@ -26,7 +26,7 @@ Help us to maximize the effort we can spend fixing issues and adding new feature
[template]: https://raw.github.com/owncloud/core/master/issue_template.md
[mailinglist]: https://mailman.owncloud.org/mailman/listinfo/owncloud
[forum]: https://forum.owncloud.org/
[forum]: https://central.owncloud.org/
[irc]: https://webchat.freenode.net/?channels=owncloud&uio=d4
## Contributing to Source Code

144
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,144 @@
#!groovy
/*
* This Jenkinsfile is intended to run on https://ci.owncloud.org and may fail anywhere else.
* It makes assumptions about plugins being installed, labels mapping to nodes that can build what is needed, etc.
*/
timestampedNode('SLAVE') {
stage 'Checkout'
checkout scm
sh '''git submodule update --init'''
stage 'JavaScript Testing'
executeAndReport('tests/autotest-results-js.xml') {
sh '''./autotest-js.sh'''
}
stage 'PHPUnit'
executeAndReport('tests/autotest-results-sqlite.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 7.0
./autotest.sh sqlite
'''
}
executeAndReport('tests/autotest-results-mysql.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.4
./autotest.sh mysql
'''
}
executeAndReport('tests/autotest-results-pgsql.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.6
./autotest.sh pgsql
'''
}
executeAndReport('tests/autotest-results-oci.xml') {
sh '''
export NOCOVERAGE=1
unset USEDOCKER
phpenv local 5.5
./autotest.sh oci
'''
}
stage 'Files External Testing'
executeAndReport('tests/autotest-external-results-sqlite-webdav-ownCloud.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite webdav-ownCloud
'''
}
executeAndReport('tests/autotest-external-results-sqlite-smb-silvershell.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite smb-silvershell
'''
}
executeAndReport('tests/autotest-external-results-sqlite-swift-ceph.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite swift-ceph
'''
}
executeAndReport('tests/autotest-external-results-sqlite-smb-windows.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
unset USEDOCKER
./autotest-external.sh sqlite smb-windows
'''
}
step([$class: 'JUnitResultArchiver', testResults: 'tests/autotest-external-results-sqlite.xml'])
stage 'Primary Objectstore Test - Swift'
executeAndReport('tests/autotest-results-mysql.xml') {
sh '''phpenv local 7.0
export NOCOVERAGE=1
export RUN_OBJECTSTORE_TESTS=1
export PRIMARY_STORAGE_CONFIG="swift"
unset USEDOCKER
rm tests/autotest-results-*.xml
./autotest.sh mysql
'''
}
stage 'Integration Testing'
executeAndReport('build/integration/output/*.xml') {
sh '''phpenv local 7.0
rm -rf config/config.php
./occ maintenance:install --admin-pass=admin
rm -rf build/integration/output
rm -rf build/integration/vendor
rm -rf build/integration/composer.lock
cd build/integration
./run.sh
'''
}
}
void executeAndReport(String testResultLocation, def body) {
def failed = false
// We're wrapping this in a timeout - if it takes longer, kill it.
try {
timeout(time: 120, unit: 'MINUTES') {
body.call()
}
} catch (Exception e) {
failed = true
echo "Test execution failed: ${e}"
} finally {
step([$class: 'JUnitResultArchiver', testResults: testResultLocation])
}
if (failed) {
if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'stable9.1' || env.BRANCH_NAME == 'stable9' || env.BRANCH_NAME == 'stable8.2') {
mail body: "project build error is here: ${env.BUILD_URL}" ,
subject: "Build on release branch failed: ${env.BRANCH_NAME}",
to: 'jenkins@owncloud.com'
}
error "Test execution failed. Terminating the build"
}
}
// Runs the given body within a Timestamper wrapper on the given label.
def timestampedNode(String label, Closure body) {
node(label) {
wrap([$class: 'TimestamperBuildWrapper']) {
body.call()
}
}
}

View File

@@ -34,7 +34,7 @@ https://owncloud.org/contribute/
Learn about the different ways you can get support for ownCloud: https://owncloud.org/support/
## Get in touch
* :clipboard: [Forum](https://forum.owncloud.org)
* :clipboard: [Forum](https://central.owncloud.org)
* :envelope: [Mailing list](https://mailman.owncloud.org/mailman/listinfo)
* :hash: [IRC channel](https://webchat.freenode.net/?channels=owncloud)
* :busts_in_silhouette: [Facebook] (https://facebook.com/ownclouders)

View File

@@ -31,7 +31,7 @@
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
' <textarea class="message" placeholder="{{newMessagePlaceholder}}">{{{message}}}</textarea>' +
' <textarea class="message" placeholder="{{newMessagePlaceholder}}">{{message}}</textarea>' +
' <input class="submit" type="submit" value="{{submitText}}" />' +
'{{#if isEditMode}}' +
' <input class="cancel" type="button" value="{{cancelText}}" />' +
@@ -337,10 +337,10 @@
$comment.data('commentEl').remove();
$comment.remove();
},
error: function(msg) {
error: function() {
$loading.addClass('hidden');
$comment.removeClass('disabled');
OC.Notification.showTemporary(msg);
OC.Notification.showTemporary(t('comments', 'Error occurred while retrieving comment with id {id}', {id: commentId}));
}
});
@@ -388,12 +388,12 @@
.html(self._formatMessage(model.get('message')));
$row.remove();
},
error: function(msg) {
error: function() {
$submit.removeClass('hidden');
$loading.addClass('hidden');
$textArea.prop('disabled', false);
OC.Notification.showTemporary(msg);
OC.Notification.showTemporary(t('comments', 'Error occurred while updating comment with id {id}', {id: commentId}));
}
});
} else {
@@ -413,12 +413,12 @@
$loading.addClass('hidden');
$textArea.val('').prop('disabled', false);
},
error: function(msg) {
error: function() {
$submit.removeClass('hidden');
$loading.addClass('hidden');
$textArea.prop('disabled', false);
OC.Notification.showTemporary(msg);
OC.Notification.showTemporary(t('comments', 'Error occurred while posting comment'));
}
});
}

View File

@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Type in a new comment..." : "Напиши нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",

View File

@@ -1,6 +1,7 @@
{ "translations": {
"Type in a new comment..." : "Напиши нов коментар...",
"Delete comment" : "Изтрий коментар",
"Post" : "Публикация",
"Cancel" : "Отказ",
"Edit comment" : "Редактирай коментра",
"[Deleted user]" : "[Изтрит потребител]",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Více komentářů...",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"{count} unread comments" : "{count} nepřečtených komentářů",
"Comment" : "Komentář",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentáře</strong> pro soubory <em>(vždy uvedeny v proudu)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Více komentářů...",
"Save" : "Uložit",
"Allowed characters {count} of {max}" : "Povolených znaků {count} z {max}",
"Error occurred while retrieving comment with id {id}" : "Došlo k chybě při načítání komentáře s id {id}",
"Error occurred while updating comment with id {id}" : "Došlo k chybě při aktualizování komentáře s id {id}",
"Error occurred while posting comment" : "Došlo k chybě při zveřejňování komentáře",
"{count} unread comments" : "{count} nepřečtených komentářů",
"Comment" : "Komentář",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentáře</strong> pro soubory <em>(vždy uvedeny v proudu)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Weitere Kommentare...",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"{count} unread comments" : "{count} ungelesene Kommentare",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Weitere Kommentare...",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "Erlaubte Zeichen {count} von {max}",
"Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"{count} unread comments" : "{count} ungelesene Kommentare",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Weitere Kommentare...",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"{count} unread comments" : "[count] ungelesene Kommentare",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Weitere Kommentare...",
"Save" : "Speichern",
"Allowed characters {count} of {max}" : "{count} von {max} Zeichen benutzt",
"Error occurred while retrieving comment with id {id}" : "Es ist ein Fehler beim Empfangen des Kommentars mit der ID {id} aufgetreten",
"Error occurred while updating comment with id {id}" : "Es ist ein Fehler beim Aktualisieren des Kommentars mit der ID {id} aufgetreten",
"Error occurred while posting comment" : "Es ist ein Fehler beim Veröffentlichen des Kommentars aufgetreten",
"{count} unread comments" : "[count] ungelesene Kommentare",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentare</strong> für Dateien<em>(immer im Stream aufgelistet)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "More comments...",
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters {count} of {max}",
"Error occurred while retrieving comment with id {id}" : "Error occurred while retrieving comment with id {id}",
"Error occurred while updating comment with id {id}" : "Error occurred while updating comment with id {id}",
"Error occurred while posting comment" : "Error occurred while posting comment",
"{count} unread comments" : "{count} unread comments",
"Comment" : "Comment",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comments</strong> for files <em>(always listed in stream)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "More comments...",
"Save" : "Save",
"Allowed characters {count} of {max}" : "Allowed characters {count} of {max}",
"Error occurred while retrieving comment with id {id}" : "Error occurred while retrieving comment with id {id}",
"Error occurred while updating comment with id {id}" : "Error occurred while updating comment with id {id}",
"Error occurred while posting comment" : "Error occurred while posting comment",
"{count} unread comments" : "{count} unread comments",
"Comment" : "Comment",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comments</strong> for files <em>(always listed in stream)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Lisää kommentteja...",
"Save" : "Tallenna",
"Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}",
"Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}",
"Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}",
"Error occurred while posting comment" : "Virhe kommenttia lähettäessä",
"{count} unread comments" : "{count} lukematonta kommenttia",
"Comment" : "Kommentti",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Lisää kommentteja...",
"Save" : "Tallenna",
"Allowed characters {count} of {max}" : "Sallittujen merkkien määrä {count}/{max}",
"Error occurred while retrieving comment with id {id}" : "Virhe noutaessa kommenttia tunnisteella {id}",
"Error occurred while updating comment with id {id}" : "Virhe päivittäessä kommenttia tunnisteella {id}",
"Error occurred while posting comment" : "Virhe kommenttia lähettäessä",
"{count} unread comments" : "{count} lukematonta kommenttia",
"Comment" : "Kommentti",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentit</strong> tiedostoille <em>(aina listattu luettelossa)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Plus de commentaires...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
"Error occurred while retrieving comment with id {id}" : "Une erreur est survenue lors de la récupération du commentaire avec l'id {id}",
"Error occurred while updating comment with id {id}" : "Une erreur est survenue lors de la mise à jour du commentaire avec l'id {id}",
"Error occurred while posting comment" : "Une erreur est survenue lors de l'envoi du commentaire",
"{count} unread comments" : "{count} commentaires non lus",
"Comment" : "Commenter",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commentaires</strong> pour les fichiers <em>(toujours listés dans le flux)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Plus de commentaires...",
"Save" : "Enregistrer",
"Allowed characters {count} of {max}" : "{count} sur {max} caractères autorisés",
"Error occurred while retrieving comment with id {id}" : "Une erreur est survenue lors de la récupération du commentaire avec l'id {id}",
"Error occurred while updating comment with id {id}" : "Une erreur est survenue lors de la mise à jour du commentaire avec l'id {id}",
"Error occurred while posting comment" : "Une erreur est survenue lors de l'envoi du commentaire",
"{count} unread comments" : "{count} commentaires non lus",
"Comment" : "Commenter",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commentaires</strong> pour les fichiers <em>(toujours listés dans le flux)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "תגובות נוספות...",
"Save" : "שמירה",
"Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}",
"Error occurred while retrieving comment with id {id}" : "שגיאה אירעה כאשר אוחזרה תגובה עם מספר זיהוי {id}",
"Error occurred while updating comment with id {id}" : "שגיאה אירעה כאשר עודכנה תגובה עם מספר זיהוי {id}",
"Error occurred while posting comment" : "אירעה שגיאה בזמן פרסום תגובה",
"{count} unread comments" : "{count} תגובות שלא נקראו",
"Comment" : "תגובה",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>תגובות</strong> עבור קבצים <em>(תמיד נרשמים בהזרמת מדיה)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "תגובות נוספות...",
"Save" : "שמירה",
"Allowed characters {count} of {max}" : "תווים מותרים {count} מתוך {max}",
"Error occurred while retrieving comment with id {id}" : "שגיאה אירעה כאשר אוחזרה תגובה עם מספר זיהוי {id}",
"Error occurred while updating comment with id {id}" : "שגיאה אירעה כאשר עודכנה תגובה עם מספר זיהוי {id}",
"Error occurred while posting comment" : "אירעה שגיאה בזמן פרסום תגובה",
"{count} unread comments" : "{count} תגובות שלא נקראו",
"Comment" : "תגובה",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>תגובות</strong> עבור קבצים <em>(תמיד נרשמים בהזרמת מדיה)</em>",

View File

@@ -3,7 +3,7 @@ OC.L10N.register(
{
"Type in a new comment..." : "Digita un nuovo commento...",
"Delete comment" : "Elimina commento",
"Post" : "Post",
"Post" : "Pubblica",
"Cancel" : "Annulla",
"Edit comment" : "Modifica commento",
"[Deleted user]" : "[Utente eliminato]",
@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Altri commenti...",
"Save" : "Salva",
"Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}",
"Error occurred while retrieving comment with id {id}" : "Si è verificato un errore durante il tentativo di recupero del commento con id {id}",
"Error occurred while updating comment with id {id}" : "Si è verificato un errore durante il tentativo di aggiornamento del commento con id {id}",
"Error occurred while posting comment" : "Si è verificato un errore durante la pubblicazione del commento.",
"{count} unread comments" : "{count} commenti non letti",
"Comment" : "Commento",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commenti</strong> sui file <em>(elencati sempre nel flusso)</em>",

View File

@@ -1,7 +1,7 @@
{ "translations": {
"Type in a new comment..." : "Digita un nuovo commento...",
"Delete comment" : "Elimina commento",
"Post" : "Post",
"Post" : "Pubblica",
"Cancel" : "Annulla",
"Edit comment" : "Modifica commento",
"[Deleted user]" : "[Utente eliminato]",
@@ -10,6 +10,9 @@
"More comments..." : "Altri commenti...",
"Save" : "Salva",
"Allowed characters {count} of {max}" : "Caratteri consentiti {count} di {max}",
"Error occurred while retrieving comment with id {id}" : "Si è verificato un errore durante il tentativo di recupero del commento con id {id}",
"Error occurred while updating comment with id {id}" : "Si è verificato un errore durante il tentativo di aggiornamento del commento con id {id}",
"Error occurred while posting comment" : "Si è verificato un errore durante la pubblicazione del commento.",
"{count} unread comments" : "{count} commenti non letti",
"Comment" : "Commento",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Commenti</strong> sui file <em>(elencati sempre nel flusso)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "コメントをさらに表示...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "入力文字数 {count} / {max}",
"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" : "コメント投稿時にエラーが発生",
"{count} unread comments" : "未読コメント数 {count}",
"Comment" : "コメント",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "ファイルに対する<strong>コメント</strong><em>(常時ストリームに表示)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "コメントをさらに表示...",
"Save" : "保存",
"Allowed characters {count} of {max}" : "入力文字数 {count} / {max}",
"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" : "コメント投稿時にエラーが発生",
"{count} unread comments" : "未読コメント数 {count}",
"Comment" : "コメント",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "ファイルに対する<strong>コメント</strong><em>(常時ストリームに表示)</em>",

View File

@@ -12,9 +12,15 @@ OC.L10N.register(
"More comments..." : "Flere kommentarer..",
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
"Error occurred while retrieving comment with id {id}" : "En feil oppstod ved henting av kommentar med id {id}",
"Error occurred while updating comment with id {id}" : "En feil oppstod ved oppdatering av kommentar med id {id}",
"Error occurred while posting comment" : "En feil oppstod ved innlegging av kommentar",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> for filer <em>(alltid listet i strømmen)</em>",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
"You commented on %2$s" : "Du kommenterte på %2$s",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -10,9 +10,15 @@
"More comments..." : "Flere kommentarer..",
"Save" : "Lagre",
"Allowed characters {count} of {max}" : "Antall tegn tillatt {count} av {max}",
"Error occurred while retrieving comment with id {id}" : "En feil oppstod ved henting av kommentar med id {id}",
"Error occurred while updating comment with id {id}" : "En feil oppstod ved oppdatering av kommentar med id {id}",
"Error occurred while posting comment" : "En feil oppstod ved innlegging av kommentar",
"{count} unread comments" : "{count} uleste kommentarer",
"Comment" : "Kommentar",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Kommentarer</strong> for filer <em>(alltid listet i strømmen)</em>",
"You commented" : "Du kommenterte",
"%1$s commented" : "%1$s kommentert",
"You commented on %2$s" : "Du kommenterte på %2$s",
"%1$s commented on %2$s" : "%1$s kommenterte %2$s"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Meer reacties...",
"Save" : "Opslaan",
"Allowed characters {count} of {max}" : "{count} van de {max} toegestane tekens",
"Error occurred while retrieving comment with id {id}" : "Er trad een fout op bij het ophalen van reactie met id {id}",
"Error occurred while updating comment with id {id}" : "Er trad een fout op bij het bijwerken van reactie met id {id}",
"Error occurred while posting comment" : "Er trad een fout op bij het plaatsten van een reactie",
"{count} unread comments" : "{count} ongelezen reacties",
"Comment" : "Reactie",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Reacties</strong> voor bestanden <em>(altijd getoond in de stroom)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Meer reacties...",
"Save" : "Opslaan",
"Allowed characters {count} of {max}" : "{count} van de {max} toegestane tekens",
"Error occurred while retrieving comment with id {id}" : "Er trad een fout op bij het ophalen van reactie met id {id}",
"Error occurred while updating comment with id {id}" : "Er trad een fout op bij het bijwerken van reactie met id {id}",
"Error occurred while posting comment" : "Er trad een fout op bij het plaatsten van een reactie",
"{count} unread comments" : "{count} ongelezen reacties",
"Comment" : "Reactie",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Reacties</strong> voor bestanden <em>(altijd getoond in de stroom)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Więcej komentarzy...",
"Save" : "Zapisz",
"Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}",
"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",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
"Comment" : "Komentarz",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Więcej komentarzy...",
"Save" : "Zapisz",
"Allowed characters {count} of {max}" : "Dozwolone znaki {count} z {max}",
"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",
"{count} unread comments" : "{count} nieprzeczytanych komentarzy",
"Comment" : "Komentarz",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komentarze</strong> dla plików <em>(zawsze wypisane w strumieniu)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Mais comentários...",
"Save" : "Salvar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with id {id}" : "Ocorreu um erro ao recuperar comentário com o id {id}",
"Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com o id {id}",
"Error occurred while posting comment" : "Ocorreu um erro ao postar o comentário",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comemtários</strong> para arquivos <em>(sempre listados no fluxo)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Mais comentários...",
"Save" : "Salvar",
"Allowed characters {count} of {max}" : "Caracteres permitidos {count} de {max}",
"Error occurred while retrieving comment with id {id}" : "Ocorreu um erro ao recuperar comentário com o id {id}",
"Error occurred while updating comment with id {id}" : "Ocorreu um erro durante a atualização do comentário com o id {id}",
"Error occurred while posting comment" : "Ocorreu um erro ao postar o comentário",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comemtários</strong> para arquivos <em>(sempre listados no fluxo)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Mais comentários...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} de {max} caracteres restantes",
"Error occurred while retrieving comment with id {id}" : "Ocorreu um erro ao tentar obter o comentário com o id {id}",
"Error occurred while updating comment with id {id}" : "Ocorreu um erro ao tentar atualizar o comentário com o id {id}",
"Error occurred while posting comment" : "Ocorreu um erro ao tentar publicar o comentário",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentários</strong> aos ficheiros <em>(listados sempre na transmissão)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Mais comentários...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} de {max} caracteres restantes",
"Error occurred while retrieving comment with id {id}" : "Ocorreu um erro ao tentar obter o comentário com o id {id}",
"Error occurred while updating comment with id {id}" : "Ocorreu um erro ao tentar atualizar o comentário com o id {id}",
"Error occurred while posting comment" : "Ocorreu um erro ao tentar publicar o comentário",
"{count} unread comments" : "{count} comentários não lidos",
"Comment" : "Comentário",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Comentários</strong> aos ficheiros <em>(listados sempre na transmissão)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Ещё комментарии...",
"Save" : "Сохранить",
"Allowed characters {count} of {max}" : "Допустимых символов {count} из {max}",
"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" : "При сохранении комментария произошла ошибка",
"{count} unread comments" : "{count} непрочитанных комментариев",
"Comment" : "Коментарий",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Комментарии</strong> к файлам <em>(всегда перечислены в потоке)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Ещё комментарии...",
"Save" : "Сохранить",
"Allowed characters {count} of {max}" : "Допустимых символов {count} из {max}",
"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" : "При сохранении комментария произошла ошибка",
"{count} unread comments" : "{count} непрочитанных комментариев",
"Comment" : "Коментарий",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Комментарии</strong> к файлам <em>(всегда перечислены в потоке)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Več opomb ...",
"Save" : "Shrani",
"Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}",
"Error occurred while retrieving comment with id {id}" : "Napaka se je zgodila med prenosom komentarja z oznako {id}",
"Error occurred while updating comment with id {id}" : "Napaka se je zgodila med posodabljanjem komentarja z oznako {id}",
"Error occurred while posting comment" : "Napaka se je zgodila med predajo komentarja",
"{count} unread comments" : "{count} neprebranih opomb",
"Comment" : "Opomba",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Opombe</strong> k datotekam <em>(vedno pokaži)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Več opomb ...",
"Save" : "Shrani",
"Allowed characters {count} of {max}" : "Dovoljeni znaki: {count} od {max}",
"Error occurred while retrieving comment with id {id}" : "Napaka se je zgodila med prenosom komentarja z oznako {id}",
"Error occurred while updating comment with id {id}" : "Napaka se je zgodila med posodabljanjem komentarja z oznako {id}",
"Error occurred while posting comment" : "Napaka se je zgodila med predajo komentarja",
"{count} unread comments" : "{count} neprebranih opomb",
"Comment" : "Opomba",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Opombe</strong> k datotekam <em>(vedno pokaži)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Më tepër komente…",
"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 posting comment" : "Ndodhi një gabim teksa postohej komenti",
"{count} unread comments" : "{count} komente të palexuar",
"Comment" : "Koment",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komente</strong> për kartela <em>(përherë të pranishme në rrjedhë)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Më tepër komente…",
"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 posting comment" : "Ndodhi një gabim teksa postohej komenti",
"{count} unread comments" : "{count} komente të palexuar",
"Comment" : "Koment",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>Komente</strong> për kartela <em>(përherë të pranishme në rrjedhë)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "ความคิดเห็นอื่นๆ ...",
"Save" : "บันทึก",
"Allowed characters {count} of {max}" : "อนุญาตให้ใช้ {count} จากทั้งหมด {max} ตัวอักษร",
"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" : "มีข้อผิดพลาดเกิดขึ้นในขณะที่โพสต์แสดงความคิดเห็น",
"{count} unread comments" : "{count} ความคิดเห็นที่ยังไม่ได้อ่าน",
"Comment" : "แสดงความคิดเห็น",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>ความคิดเห็น</strong> สำหรับไฟล์ <em>(ระบุไว้เสมอในสตรีม)</em>",

View File

@@ -10,6 +10,9 @@
"More comments..." : "ความคิดเห็นอื่นๆ ...",
"Save" : "บันทึก",
"Allowed characters {count} of {max}" : "อนุญาตให้ใช้ {count} จากทั้งหมด {max} ตัวอักษร",
"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" : "มีข้อผิดพลาดเกิดขึ้นในขณะที่โพสต์แสดงความคิดเห็น",
"{count} unread comments" : "{count} ความคิดเห็นที่ยังไม่ได้อ่าน",
"Comment" : "แสดงความคิดเห็น",
"<strong>Comments</strong> for files <em>(always listed in stream)</em>" : "<strong>ความคิดเห็น</strong> สำหรับไฟล์ <em>(ระบุไว้เสมอในสตรีม)</em>",

View File

@@ -12,6 +12,9 @@ OC.L10N.register(
"More comments..." : "Daha fazla yorum...",
"Save" : "Kaydet",
"Allowed characters {count} of {max}" : "İzin verilen karakterler {count}/{max}",
"Error occurred while retrieving comment with id {id}" : "id {id} ile yorum alınırken hata oluştu",
"Error occurred while updating comment with id {id}" : "id {id} ile yorumu güncellerken hata oluştu",
"Error occurred while posting comment" : "Yorum gönderilirken hata oluştu",
"{count} unread comments" : "{count} okunmamış yorum",
"Comment" : "Yorum",
"You commented" : "Yorum yaptınız",

View File

@@ -10,6 +10,9 @@
"More comments..." : "Daha fazla yorum...",
"Save" : "Kaydet",
"Allowed characters {count} of {max}" : "İzin verilen karakterler {count}/{max}",
"Error occurred while retrieving comment with id {id}" : "id {id} ile yorum alınırken hata oluştu",
"Error occurred while updating comment with id {id}" : "id {id} ile yorumu güncellerken hata oluştu",
"Error occurred while posting comment" : "Yorum gönderilirken hata oluştu",
"{count} unread comments" : "{count} okunmamış yorum",
"Comment" : "Yorum",
"You commented" : "Yorum yaptınız",

View File

@@ -5,7 +5,7 @@
<description>ownCloud WebDAV endpoint</description>
<licence>AGPL</licence>
<author>owncloud.org</author>
<version>0.2.5</version>
<version>0.2.7</version>
<default_enable/>
<types>
<filesystem/>
@@ -18,14 +18,15 @@
<owncloud min-version="9.1" max-version="9.1" />
</dependencies>
<background-jobs>
<job>OCA\DAV\CardDAV\Sync\SyncJob</job>
<job>OCA\DAV\CardDAV\SyncJob</job>
</background-jobs>
<repair-steps>
<post-migration>
<job>OCA\DAV\Migration\Classification</job>
<step>OCA\DAV\Migration\Classification</step>
<step>OCA\DAV\Migration\FixBirthdayCalendarComponent</step>
</post-migration>
<live-migration>
<job>OCA\DAV\Migration\GenerateBirthdays</job>
<step>OCA\DAV\Migration\GenerateBirthdays</step>
</live-migration>
</repair-steps>
</info>

View File

@@ -75,6 +75,8 @@ if ($debugging) {
}
$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()));
$server->addPlugin(new ExceptionLoggerPlugin('caldav', \OC::$server->getLogger()));
// And off we go!

View File

@@ -68,9 +68,12 @@ $server = $serverFactory->createServer($baseuri, $requestUri, $authBackend, func
$owner = $share->getShareOwner();
$fileId = $share->getNodeId();
// FIXME: should not add storage wrappers outside of preSetup, need to find a better way
$previousLog = \OC\Files\Filesystem::logWarningWhenAddingStorageWrapper(false);
\OC\Files\Filesystem::addStorageWrapper('sharePermissions', function ($mountPoint, $storage) use ($share) {
return new \OC\Files\Storage\Wrapper\PermissionsMask(array('storage' => $storage, 'mask' => $share->getPermissions() | \OCP\Constants::PERMISSION_SHARE));
});
\OC\Files\Filesystem::logWarningWhenAddingStorageWrapper($previousLog);
OC_Util::setupFS($owner);
$ownerView = \OC\Files\Filesystem::getView();

View File

@@ -114,7 +114,7 @@ class Application extends App {
/** @var IAppContainer $c */
return new Classification(
$c->query('CalDavBackend'),
$c->getServer()->getUserManager()
$c->getServer()->getDatabaseConnection()
);
});

View File

@@ -108,6 +108,7 @@ class BirthdayService {
$this->calDavBackEnd->createCalendar($principal, self::BIRTHDAY_CALENDAR_URI, [
'{DAV:}displayname' => 'Contact birthdays',
'{http://apple.com/ns/ical/}calendar-color' => '#FFFFCA',
'components' => 'VEVENT',
]);
return $this->calDavBackEnd->getCalendarByUri($principal, self::BIRTHDAY_CALENDAR_URI);

View File

@@ -1079,22 +1079,27 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'lastmodified' => time(),
];
foreach($this->subscriptionPropertyMap as $xmlName=>$dbName) {
if (isset($properties[$xmlName])) {
$propertiesBoolean = ['striptodos', 'stripalarms', 'stripattachments'];
foreach($this->subscriptionPropertyMap as $xmlName=>$dbName) {
if (array_key_exists($xmlName, $properties)) {
$values[$dbName] = $properties[$xmlName];
$fieldNames[] = $dbName;
if (in_array($dbName, $propertiesBoolean)) {
$values[$dbName] = true;
}
}
}
$valuesToInsert = array();
$query = $this->db->getQueryBuilder();
foreach (array_keys($values) as $name) {
$valuesToInsert[$name] = $query->createNamedParameter($values[$name]);
}
$query->insert('calendarsubscriptions')
->values([
'principaluri' => $query->createNamedParameter($values['principaluri']),
'uri' => $query->createNamedParameter($values['uri']),
'source' => $query->createNamedParameter($values['source']),
'lastmodified' => $query->createNamedParameter($values['lastmodified']),
])
->values($valuesToInsert)
->execute();
return $this->db->lastInsertId('*PREFIX*calendarsubscriptions');

View File

@@ -848,7 +848,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$query = $this->db->getQueryBuilder();
$query->select('*')->from($this->dbCardsTable)
->where($query->expr()->eq('uri', $query->createNamedParameter($uri)))
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)));
->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)));
$queryResult = $query->execute();
$contact = $queryResult->fetch();
$queryResult->closeCursor();

View File

@@ -91,6 +91,7 @@ class Converter {
}
if($this->propertyNeedsUpdate($vCard, 'PHOTO', $image)) {
unset($vCard->PHOTO);
$vCard->add('PHOTO', $image->data(), ['ENCODING' => 'b', 'TYPE' => $image->mimeType()]);
$updated = true;
}
@@ -161,7 +162,7 @@ class Converter {
*/
private function getAvatarImage(IUser $user) {
try {
$image = $user->getAvatarImage(-1);
$image = $user->getAvatarImage(96);
return $image;
} catch (\Exception $ex) {
return null;

View File

@@ -86,6 +86,7 @@ class ImageExportPlugin extends ServerPlugin {
if ($result = $this->getPhoto($node)) {
$response->setHeader('Content-Type', $result['Content-Type']);
$response->setHeader('Content-Disposition', 'attachment');
$response->setStatus(200);
$response->setBody($result['body']);
@@ -108,8 +109,23 @@ class ImageExportPlugin extends ServerPlugin {
$photo = $vObject->PHOTO;
$type = $this->getType($photo);
$valType = $photo->getValueType();
$val = ($valType === 'URI' ? $photo->getRawMimeDirValue() : $photo->getValue());
$val = $photo->getValue();
if ($photo->getValueType() === 'URI') {
$parsed = \Sabre\URI\parse($val);
//only allow data://
if ($parsed['scheme'] !== 'data') {
return false;
}
if (substr_count($parsed['path'], ';') === 1) {
list($type,) = explode(';', $parsed['path']);
}
$val = file_get_contents($val);
}
if (!in_array($type, ['image/png', 'image/jpeg', 'image/gif'])) {
$type = 'application/octet-stream';
}
return [
'Content-Type' => $type,
'body' => $val
@@ -126,7 +142,7 @@ class ImageExportPlugin extends ServerPlugin {
/**
* @param Binary $photo
* @return Parameter
* @return string
*/
private function getType($photo) {
$params = $photo->parameters();
@@ -141,6 +157,6 @@ class ImageExportPlugin extends ServerPlugin {
return 'image/' . strtolower($type);
}
}
return '';
return 'application/octet-stream';
}
}

View File

@@ -263,6 +263,8 @@ class SyncService {
$systemAddressBook = $this->getLocalSystemAddressBook();
$this->userManager->callForAllUsers(function($user) use ($systemAddressBook, $progressCallback) {
$this->updateUser($user);
// avatar fetching sets up FS, need to clear again
\OC_Util::tearDownFS();
if (!is_null($progressCallback)) {
$progressCallback();
}

View File

@@ -185,7 +185,7 @@ class CommentNode implements \Sabre\DAV\INode, \Sabre\DAV\IProperties {
$msg = 'Message exceeds allowed character limit of ';
throw new BadRequest($msg . IComment::MAX_MESSAGE_LENGTH, 0, $e);
}
return false;
throw $e;
}
}

View File

@@ -98,7 +98,7 @@ class PublicAuth extends AbstractBasic {
if ($this->shareManager->checkPassword($share, $password)) {
return true;
} else if ($this->session->exists('public_link_authenticated')
&& $this->session->get('public_link_authenticated') === $share->getId()) {
&& $this->session->get('public_link_authenticated') === (string)$share->getId()) {
return true;
} else {
if (in_array('XMLHttpRequest', explode(',', $this->request->getHeader('X-Requested-With')))) {

View File

@@ -31,6 +31,9 @@ use \Sabre\HTTP\ResponseInterface;
* or mangle Etag headers.
*/
class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin {
/** @var \Sabre\DAV\Server */
private $server;
/**
* This initializes the plugin.
*
@@ -39,7 +42,10 @@ class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin {
* @return void
*/
public function initialize(\Sabre\DAV\Server $server) {
$server->on('afterMethod', array($this, 'afterMethod'));
$this->server = $server;
$server->on('afterMethod', [$this, 'afterMethod']);
$server->on('afterMove', [$this, 'afterMove']);
}
/**
@@ -54,4 +60,22 @@ class CopyEtagHeaderPlugin extends \Sabre\DAV\ServerPlugin {
$response->setHeader('OC-ETag', $eTag);
}
}
/**
* Called after a node is moved.
*
* This allows the backend to move all the associated properties.
*
* @param string $source
* @param string $destination
* @return void
*/
function afterMove($source, $destination) {
$node = $this->server->tree->getNodeForPath($destination);
if ($node instanceof File) {
$eTag = $node->getETag();
$this->server->httpResponse->setHeader('OC-ETag', $eTag);
$this->server->httpResponse->setHeader('ETag', $eTag);
}
}
}

View File

@@ -327,7 +327,7 @@ class CustomPropertiesBackend implements BackendInterface {
$result = $this->connection->executeQuery(
$sql,
array($this->user, rtrim($path, '/') . '/%', $requestedProperties),
array($this->user, $this->connection->escapeLikeParameter(rtrim($path, '/')) . '/%', $requestedProperties),
array(null, null, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY)
);

View File

@@ -42,6 +42,8 @@ class ExceptionLoggerPlugin extends \Sabre\DAV\ServerPlugin {
// forbidden can be expected when trying to upload to
// read-only folders for example
'Sabre\DAV\Exception\Forbidden' => true,
// Custom exception similar to NotAuthenticated
'OCA\DAV\Connector\Sabre\Exception\PasswordLoginForbidden' => true,
);
/** @var string */

View File

@@ -308,15 +308,10 @@ class FilesPlugin extends ServerPlugin {
$displayName = $owner->getDisplayName();
return $displayName;
});
$propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function() use ($node) {
if ($node->getPath() === '/') {
return $this->config->getSystemValue('data-fingerprint', '');
}
});
}
if ($node instanceof \OCA\DAV\Files\FilesHome) {
if ($node instanceof \OCA\DAV\Connector\Sabre\Node
|| $node instanceof \OCA\DAV\Files\FilesHome) {
$propFind->handle(self::DATA_FINGERPRINT_PROPERTYNAME, function() use ($node) {
return $this->config->getSystemValue('data-fingerprint', '');
});

View File

@@ -283,6 +283,11 @@ class ObjectTree extends \Sabre\DAV\Tree {
throw new InvalidPath($ex->getMessage());
}
// Webdav's copy will implicitly do a delete+create, so only create+delete permissions are required
if (!$this->fileView->isCreatable($destinationDir)) {
throw new \Sabre\DAV\Exception\Forbidden();
}
try {
$this->fileView->copy($source, $destination);
} catch (StorageNotAvailableException $e) {

View File

@@ -24,6 +24,11 @@
*
*/
namespace OCA\DAV\Connector\Sabre;
use OCP\Files\FileInfo;
use OCP\Files\StorageNotAvailableException;
use Sabre\DAV\Exception\InsufficientStorage;
use Sabre\DAV\Exception\ServiceUnavailable;
use Sabre\HTTP\URLUtil;
/**
* This plugin check user quota and deny creating files when they exceeds the quota.
@@ -76,17 +81,16 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
* This method is called before any HTTP method and validates there is enough free space to store the file
*
* @param string $uri
* @param null $data
* @throws \Sabre\DAV\Exception\InsufficientStorage
* @throws InsufficientStorage
* @return bool
*/
public function checkQuota($uri, $data = null) {
public function checkQuota($uri) {
$length = $this->getLength();
if ($length) {
if (substr($uri, 0, 1) !== '/') {
$uri = '/' . $uri;
}
list($parentUri, $newName) = \Sabre\HTTP\URLUtil::splitPath($uri);
list($parentUri, $newName) = URLUtil::splitPath($uri);
if(is_null($parentUri)) {
$parentUri = '';
}
@@ -101,11 +105,11 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
$uri = rtrim($parentUri, '/') . '/' . $info['name'];
}
$freeSpace = $this->getFreeSpace($uri);
if ($freeSpace !== \OCP\Files\FileInfo::SPACE_UNKNOWN && $length > $freeSpace) {
if ($freeSpace !== FileInfo::SPACE_UNKNOWN && $length > $freeSpace) {
if (isset($chunkHandler)) {
$chunkHandler->cleanup();
}
throw new \Sabre\DAV\Exception\InsufficientStorage();
throw new InsufficientStorage();
}
}
return true;
@@ -119,12 +123,13 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
public function getLength() {
$req = $this->server->httpRequest;
$length = $req->getHeader('X-Expected-Entity-Length');
if (!$length) {
if (!is_numeric($length)) {
$length = $req->getHeader('Content-Length');
$length = is_numeric($length) ? $length : null;
}
$ocLength = $req->getHeader('OC-Total-Length');
if ($length && $ocLength) {
if (is_numeric($length) && is_numeric($ocLength)) {
return max($length, $ocLength);
}
@@ -134,13 +139,14 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
/**
* @param string $uri
* @return mixed
* @throws ServiceUnavailable
*/
public function getFreeSpace($uri) {
try {
$freeSpace = $this->view->free_space(ltrim($uri, '/'));
return $freeSpace;
} catch (\OCP\Files\StorageNotAvailableException $e) {
throw new \Sabre\DAV\Exception\ServiceUnavailable($e->getMessage());
} catch (StorageNotAvailableException $e) {
throw new ServiceUnavailable($e->getMessage());
}
}
}

View File

@@ -80,38 +80,29 @@ class BrowserErrorPagePlugin extends ServerPlugin {
}
$this->server->httpResponse->addHeaders($headers);
$this->server->httpResponse->setStatus($httpCode);
$body = $this->generateBody($ex);
$body = $this->generateBody();
$this->server->httpResponse->setBody($body);
$this->sendResponse();
}
/**
* @codeCoverageIgnore
* @param \Exception $ex
* @param int $httpCode
* @return bool|string
*/
public function generateBody(\Exception $exception) {
public function generateBody() {
$request = \OC::$server->getRequest();
$content = new OC_Template('dav', 'exception', 'guest');
$content->assign('title', $this->server->httpResponse->getStatusText());
$content->assign('message', $exception->getMessage());
$content->assign('errorClass', get_class($exception));
$content->assign('errorMsg', $exception->getMessage());
$content->assign('errorCode', $exception->getCode());
$content->assign('file', $exception->getFile());
$content->assign('line', $exception->getLine());
$content->assign('trace', $exception->getTraceAsString());
$content->assign('debugMode', \OC::$server->getSystemConfig()->getValue('debug', false));
$content->assign('remoteAddr', $request->getRemoteAddress());
$content->assign('requestID', $request->getId());
return $content->fetchPage();
}
/*
/**
* @codeCoverageIgnore
*/
public function sendResponse() {
$this->server->sapi->sendResponse($this->server->httpResponse);
exit();
}
}

View File

@@ -23,8 +23,7 @@
namespace OCA\DAV\Migration;
use OCA\DAV\CalDAV\CalDavBackend;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IDBConnection;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
@@ -33,33 +32,19 @@ class Classification implements IRepairStep {
/** @var CalDavBackend */
private $calDavBackend;
/** @var IUserManager */
private $userManager;
/** @var IDBConnection */
private $connection;
/**
* Classification constructor.
*
* @param CalDavBackend $calDavBackend
* @param IDBConnection $connection
*/
public function __construct(CalDavBackend $calDavBackend, IUserManager $userManager) {
public function __construct(CalDavBackend $calDavBackend, IDBConnection $connection) {
$this->calDavBackend = $calDavBackend;
$this->userManager = $userManager;
}
$this->connection = $connection;
/**
* @param IUser $user
*/
public function runForUser($user) {
$principal = 'principals/users/' . $user->getUID();
$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']);
$classification = $this->extractClassification($calObject['calendardata']);
$this->calDavBackend->setClassification($object['id'], $classification);
}
}
}
/**
@@ -82,12 +67,37 @@ class Classification implements IRepairStep {
* @inheritdoc
*/
public function run(IOutput $output) {
$output->startProgress();
$this->userManager->callForAllUsers(function($user) use ($output) {
/** @var IUser $user */
$output->advance(1, $user->getDisplayName());
$this->runForUser($user);
});
$qb = $this->connection->getQueryBuilder();
$result = $qb->select($qb->createFunction('COUNT(*)'))
->from('calendarobjects')
->execute();
$max = $result->fetchColumn();
$output->startProgress($max);
$query = $this->connection->getQueryBuilder();
$query->select(['id', 'calendardata', 'classification'])
->from('calendarobjects');
$stmt = $query->execute();
while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$output->advance(1);
$classification = $this->extractClassification($this->readBlob($row['calendardata']));
$this->calDavBackend->setClassification($row['id'], $classification);
}
$output->finishProgress();
}
private function readBlob($cardData) {
if (is_resource($cardData)) {
return stream_get_contents($cardData);
}
return $cardData;
}
}

View File

@@ -0,0 +1,62 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud GmbH.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\DAV\Migration;
use OCA\DAV\CalDAV\BirthdayService;
use OCP\IDBConnection;
use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
class FixBirthdayCalendarComponent implements IRepairStep {
/** @var IDBConnection */
private $connection;
/**
* FixBirthdayCalendarComponent constructor.
*
* @param IDBConnection $connection
*/
public function __construct(IDBConnection $connection) {
$this->connection = $connection;
}
/**
* @inheritdoc
*/
public function getName() {
return 'Fix component of birthday calendars';
}
/**
* @inheritdoc
*/
public function run(IOutput $output) {
$query = $this->connection->getQueryBuilder();
$updated = $query->update('calendars')
->set('components', $query->createNamedParameter('VEVENT'))
->where($query->expr()->eq('uri', $query->createNamedParameter(BirthdayService::BIRTHDAY_CALENDAR_URI)))
->execute();
$output->info("$updated birthday calendars updated.");
}
}

View File

@@ -26,13 +26,18 @@ namespace OCA\DAV;
use OCA\DAV\CalDAV\Schedule\IMipPlugin;
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\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\QuotaPlugin;
use OCA\DAV\Files\BrowserErrorPagePlugin;
use OCA\DAV\Files\CustomPropertiesBackend;
use OCA\DAV\SystemTag\SystemTagPlugin;
use OCP\IRequest;
use OCP\SabrePluginEvent;
use Sabre\CardDAV\VCFExportPlugin;
@@ -66,13 +71,16 @@ class Server {
$this->server->setBaseUri($this->baseUri);
$this->server->addPlugin(new BlockLegacyClientPlugin(\OC::$server->getConfig()));
$authPlugin = new Plugin($authBackend, 'ownCloud');
$authPlugin = new Plugin();
$this->server->addPlugin($authPlugin);
// allow setup of additional auth backends
$event = new SabrePluginEvent($this->server);
$dispatcher->dispatch('OCA\DAV\Connector\Sabre::authInit', $event);
// because we are throwing exceptions this plugin has to be the last one
$authPlugin->addBackend($authBackend);
// debugging
if(\OC::$server->getConfig()->getSystemValue('debug', false)) {
$this->server->addPlugin(new \Sabre\DAV\Browser\Plugin());
@@ -107,25 +115,27 @@ class Server {
$this->server->addPlugin(new ImageExportPlugin(\OC::$server->getLogger()));
// system tags plugins
$this->server->addPlugin(new \OCA\DAV\SystemTag\SystemTagPlugin(
$this->server->addPlugin(new SystemTagPlugin(
\OC::$server->getSystemTagManager(),
\OC::$server->getGroupManager(),
\OC::$server->getUserSession()
));
// comments plugin
$this->server->addPlugin(new \OCA\DAV\Comments\CommentsPlugin(
$this->server->addPlugin(new CommentsPlugin(
\OC::$server->getCommentsManager(),
\OC::$server->getUserSession()
));
$this->server->addPlugin(new CopyEtagHeaderPlugin());
// Some WebDAV clients do require Class 2 WebDAV support (locking), since
// we do not provide locking we emulate it using a fake locking plugin.
if($request->isUserAgent([
'/WebDAVFS/',
'/Microsoft Office OneNote 2013/',
])) {
$this->server->addPlugin(new \OCA\DAV\Connector\Sabre\FakeLockerPlugin());
$this->server->addPlugin(new FakeLockerPlugin());
}
if (BrowserErrorPagePlugin::isBrowserRequest($request)) {
@@ -158,6 +168,8 @@ class Server {
)
)
);
$this->server->addPlugin(
new QuotaPlugin($view));
}
});
}

View File

@@ -48,6 +48,9 @@ class AssemblyStream implements \Icewind\Streams\File {
/** @var int */
private $size;
/** @var resource */
private $currentStream = null;
/**
* @param string $path
* @param string $mode
@@ -100,16 +103,36 @@ class AssemblyStream implements \Icewind\Streams\File {
* @return string
*/
public function stream_read($count) {
do {
if ($this->currentStream === null) {
list($node, $posInNode) = $this->getNodeForPosition($this->pos);
if (is_null($node)) {
// reached last node, no more data
return '';
}
$this->currentStream = $this->getStream($node);
fseek($this->currentStream, $posInNode);
}
list($node, $posInNode) = $this->getNodeForPosition($this->pos);
if (is_null($node)) {
return null;
}
$stream = $this->getStream($node);
$data = fread($this->currentStream, $count);
// isset is faster than strlen
if (isset($data[$count - 1])) {
// we read the full count
$read = $count;
} else {
// reaching end of stream, which happens less often so strlen is ok
$read = strlen($data);
}
fseek($stream, $posInNode);
$data = fread($stream, $count);
$read = strlen($data);
if (feof($this->currentStream)) {
fclose($this->currentStream);
$this->currentNode = null;
$this->currentStream = null;
}
// if no data read, try again with the next node because
// returning empty data can make the caller think there is no more
// data left to read
} while ($read === 0);
// update position
$this->pos += $read;

View File

@@ -6,25 +6,11 @@ style('core', ['styles', 'header']);
?>
<span class="error error-wide">
<h2><strong><?php p($_['title']) ?></strong></h2>
<p><?php p($_['message']) ?></p>
<br>
<h2><strong><?php p($l->t('Technical details')) ?></strong></h2>
<ul>
<li><?php p($l->t('Remote Address: %s', $_['remoteAddr'])) ?></li>
<li><?php p($l->t('Request ID: %s', $_['requestID'])) ?></li>
<?php if($_['debugMode']): ?>
<li><?php p($l->t('Type: %s', $_['errorClass'])) ?></li>
<li><?php p($l->t('Code: %s', $_['errorCode'])) ?></li>
<li><?php p($l->t('Message: %s', $_['errorMsg'])) ?></li>
<li><?php p($l->t('File: %s', $_['file'])) ?></li>
<li><?php p($l->t('Line: %s', $_['line'])) ?></li>
<?php endif; ?>
</ul>
<?php if($_['debugMode']): ?>
<br />
<h2><strong><?php p($l->t('Trace')) ?></strong></h2>
<pre><?php p($_['trace']) ?></pre>
<?php endif; ?>
</span>

View File

@@ -3,12 +3,12 @@ SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
if [ ! -f CalDAVTester/run.py ]; then
cd "$SCRIPTPATH"
git clone https://github.com/DeepDiver1975/CalDAVTester.git
cd "$SCRIPTPATH/CalDAVTester"
python run.py -s
cd "$SCRIPTPATH"
cd "$SCRIPTPATH"
if [ ! -f CalDAVTester/testcaldav.py ]; then
git clone https://github.com/apple/ccs-caldavtester.git CalDAVTester
fi
if [ ! -f pycalendar/setup.py ]; then
git clone https://github.com/apple/ccs-pycalendar.git pycalendar
fi
# create test user

View File

@@ -3,12 +3,12 @@ SCRIPT=`realpath $0`
SCRIPTPATH=`dirname $SCRIPT`
if [ ! -f CalDAVTester/run.py ]; then
cd "$SCRIPTPATH"
git clone https://github.com/DeepDiver1975/CalDAVTester.git
cd "$SCRIPTPATH/CalDAVTester"
python run.py -s
cd "$SCRIPTPATH"
cd "$SCRIPTPATH"
if [ ! -f CalDAVTester/testcaldav.py ]; then
git clone https://github.com/apple/ccs-caldavtester.git CalDAVTester
fi
if [ ! -f pycalendar/setup.py ]; then
git clone https://github.com/apple/ccs-pycalendar.git pycalendar
fi
# create test user

View File

@@ -333,15 +333,20 @@ EOD;
public function testSubscriptions() {
$id = $this->backend->createSubscription(self::UNIT_TEST_USER, 'Subscription', [
'{http://calendarserver.org/ns/}source' => new Href('test-source')
'{http://calendarserver.org/ns/}source' => new Href('test-source'),
'{http://apple.com/ns/ical/}calendar-color' => '#1C4587',
'{http://calendarserver.org/ns/}subscribed-strip-todos' => ''
]);
$subscriptions = $this->backend->getSubscriptionsForUser(self::UNIT_TEST_USER);
$this->assertEquals(1, count($subscriptions));
$this->assertEquals('#1C4587', $subscriptions[0]['{http://apple.com/ns/ical/}calendar-color']);
$this->assertEquals(true, $subscriptions[0]['{http://calendarserver.org/ns/}subscribed-strip-todos']);
$this->assertEquals($id, $subscriptions[0]['id']);
$patch = new PropPatch([
'{DAV:}displayname' => 'Unit test',
'{http://apple.com/ns/ical/}calendar-color' => '#ac0606',
]);
$this->backend->updateSubscription($id, $patch);
$patch->commit();
@@ -350,6 +355,7 @@ EOD;
$this->assertEquals(1, count($subscriptions));
$this->assertEquals($id, $subscriptions[0]['id']);
$this->assertEquals('Unit test', $subscriptions[0]['{DAV:}displayname']);
$this->assertEquals('#ac0606', $subscriptions[0]['{http://apple.com/ns/ical/}calendar-color']);
$this->backend->deleteSubscription($id);
$subscriptions = $this->backend->getSubscriptionsForUser(self::UNIT_TEST_USER);

View File

@@ -178,6 +178,17 @@ class BirthdayServiceTest extends TestCase {
], $users);
}
public function testBirthdayCalendarHasComponentEvent() {
$this->calDav->expects($this->once())
->method('createCalendar')
->with('principal001', 'contact_birthdays', [
'{DAV:}displayname' => 'Contact birthdays',
'{http://apple.com/ns/ical/}calendar-color' => '#FFFFCA',
'components' => 'VEVENT',
]);
$this->service->ensureCalendarExists('principal001');
}
public function providesBirthday() {
return [
[true,

View File

@@ -606,6 +606,10 @@ class CardDavBackendTest extends TestCase {
$this->assertSame(5489543, (int)$result['lastmodified']);
$this->assertSame('etag0', $result['etag']);
$this->assertSame(120, (int)$result['size']);
// this shouldn't return any result because 'uri1' is in address book 1
$result = $this->backend->getContact(0, 'uri1');
$this->assertEmpty($result);
}
public function testGetContactFail() {

View File

@@ -92,7 +92,7 @@ class ImageExportPluginTest extends TestCase {
* @param bool $expected
* @param array $getPhotoResult
*/
public function testCardWithOrWithoutPhoto($expected, $getPhotoResult) {
public function testCardWithOrWithoutPhoto($expectedContentType, $getPhotoResult) {
$this->request->expects($this->once())->method('getQueryParameters')->willReturn(['photo' => true]);
$this->request->expects($this->once())->method('getPath')->willReturn('/files/welcome.txt');
@@ -101,20 +101,22 @@ class ImageExportPluginTest extends TestCase {
$this->plugin->expects($this->once())->method('getPhoto')->willReturn($getPhotoResult);
if (!$expected) {
$this->response->expects($this->once())->method('setHeader');
$this->response->expects($this->once())->method('setStatus');
if (is_string($expectedContentType)) {
$this->response->expects($this->exactly(2))->method('setHeader')->withConsecutive(
['Content-Type', $expectedContentType],
['Content-Disposition', 'attachment']);
$this->response->expects($this->once())->method('setStatus')->with(200);
$this->response->expects($this->once())->method('setBody');
}
$result = $this->plugin->httpGet($this->request, $this->response);
$this->assertEquals($expected, $result);
$this->assertEquals(!is_string($expectedContentType), $result);
}
public function providesCardWithOrWithoutPhoto() {
return [
[true, null],
[false, ['Content-Type' => 'image/jpeg', 'body' => '1234']],
['image/jpeg', ['Content-Type' => 'image/jpeg', 'body' => '1234']],
];
}
@@ -140,12 +142,11 @@ class ImageExportPluginTest extends TestCase {
'empty vcard' => [false, ''],
'vcard without PHOTO' => [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nEND:VCARD\r\n"],
'vcard 3 with PHOTO' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;ENCODING=b;TYPE=JPEG:MTIzNDU=\r\nEND:VCARD\r\n"],
//
// TODO: these three below are not working - needs debugging
//
//'vcard 3 with PHOTO URL' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;TYPE=JPEG:http://example.org/photo.jpg\r\nEND:VCARD\r\n"],
//'vcard 4 with PHOTO' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:image/jpeg;MTIzNDU=\r\nEND:VCARD\r\n"],
'vcard 4 with PHOTO URL' => [['Content-Type' => 'image/jpeg', 'body' => 'http://example.org/photo.jpg'], "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;MEDIATYPE=image/jpeg:http://example.org/photo.jpg\r\nEND:VCARD\r\n"],
'vcard 3 with PHOTO URL' => [false, "BEGIN:VCARD\r\nVERSION:3.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;TYPE=JPEG;VALUE=URI:http://example.com/photo.jpg\r\nEND:VCARD\r\n"],
'vcard 4 with PHOTO' => [['Content-Type' => 'image/jpeg', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:image/jpeg;base64,MTIzNDU=\r\nEND:VCARD\r\n"],
'vcard 4 with PHOTO URL' => [false, "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 3.5.0//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO;MEDIATYPE=image/jpeg:http://example.org/photo.jpg\r\nEND:VCARD\r\n"],
'vcard 3 with bad PHOTO' => [['Content-Type' => 'application/octet-stream', 'body' => '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\nPHOTO;ENCODING=b;TYPE=TXT:MTIzNDU=\r\nEND:VCARD\r\n"],
'vcard 4 with bad PHOTO' => [['Content-Type' => 'application/octet-stream', 'body' => '12345'], "BEGIN:VCARD\r\nVERSION:4.0\r\nPRODID:-//Sabre//Sabre VObject 4.1.1//EN\r\nUID:12345\r\nFN:12345\r\nN:12345;;;;\r\nPHOTO:data:video/mpeg;base64,MTIzNDU=\r\nEND:VCARD\r\n"],
];
}
}

View File

@@ -166,6 +166,10 @@ class CommentsNodeTest extends \Test\TestCase {
$this->assertTrue($this->node->updateComment($msg));
}
/**
* @expectedException Exception
* @expectedExceptionMessage buh!
*/
public function testUpdateCommentLogException() {
$msg = null;
@@ -198,7 +202,7 @@ class CommentsNodeTest extends \Test\TestCase {
$this->logger->expects($this->once())
->method('logException');
$this->assertFalse($this->node->updateComment($msg));
$this->node->updateComment($msg);
}
/**

View File

@@ -22,23 +22,28 @@
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin;
use Sabre\DAV\Server;
use Test\TestCase;
/**
* Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
class CopyEtagHeaderPluginTest extends \Test\TestCase {
class CopyEtagHeaderPluginTest extends TestCase {
/**
* @var \OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin
*/
/** @var CopyEtagHeaderPlugin */
private $plugin;
/** @var Server */
private $server;
public function setUp() {
parent::setUp();
$this->server = new \Sabre\DAV\Server();
$this->plugin = new \OCA\DAV\Connector\Sabre\CopyEtagHeaderPlugin();
$this->plugin = new CopyEtagHeaderPlugin();
$this->plugin->initialize($this->server);
}
@@ -60,4 +65,26 @@ class CopyEtagHeaderPluginTest extends \Test\TestCase {
$this->assertNull($response->getHeader('OC-Etag'));
}
public function testAfterMove() {
$node = $this->getMockBuilder('OCA\DAV\Connector\Sabre\File')
->disableOriginalConstructor()
->getMock();
$node->expects($this->once())
->method('getETag')
->willReturn('123456');
$tree = $this->getMockBuilder('Sabre\DAV\Tree')
->disableOriginalConstructor()
->getMock();
$tree->expects($this->once())
->method('getNodeForPath')
->with('test.txt')
->willReturn($node);
$this->server->tree = $tree;
$this->plugin->afterMove('', 'test.txt');
$this->assertEquals('123456', $this->server->httpResponse->getHeader('OC-Etag'));
$this->assertEquals('123456', $this->server->httpResponse->getHeader('Etag'));
}
}

View File

@@ -191,7 +191,8 @@ class FilesPluginTest extends TestCase {
$this->assertEquals('http://example.com/', $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
$this->assertEquals('foo', $propFind->get(self::OWNER_ID_PROPERTYNAME));
$this->assertEquals('M. Foo', $propFind->get(self::OWNER_DISPLAY_NAME_PROPERTYNAME));
$this->assertEquals([self::SIZE_PROPERTYNAME, self::DATA_FINGERPRINT_PROPERTYNAME], $propFind->get404Properties());
$this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME));
$this->assertEquals([self::SIZE_PROPERTYNAME], $propFind->get404Properties());
}
public function testGetPropertiesForFileHome() {
@@ -332,7 +333,8 @@ class FilesPluginTest extends TestCase {
$this->assertEquals(1025, $propFind->get(self::SIZE_PROPERTYNAME));
$this->assertEquals('DWCKMSR', $propFind->get(self::PERMISSIONS_PROPERTYNAME));
$this->assertEquals(null, $propFind->get(self::DOWNLOADURL_PROPERTYNAME));
$this->assertEquals([self::DOWNLOADURL_PROPERTYNAME, self::DATA_FINGERPRINT_PROPERTYNAME], $propFind->get404Properties());
$this->assertEquals('my_fingerprint', $propFind->get(self::DATA_FINGERPRINT_PROPERTYNAME));
$this->assertEquals([self::DOWNLOADURL_PROPERTYNAME], $propFind->get404Properties());
}
public function testGetPropertiesForRootDirectory() {

View File

@@ -142,6 +142,88 @@ class ObjectTreeTest extends \Test\TestCase {
$objectTree->move($source, $destination);
}
public function copyDataProvider() {
return [
// copy into same dir
['a', 'b', ''],
// copy into same dir
['a/a', 'a/b', 'a'],
// copy into another dir
['a', 'sub/a', 'sub'],
];
}
/**
* @dataProvider copyDataProvider
*/
public function testCopy($sourcePath, $targetPath, $targetParent) {
$view = $this->getMock('\OC\Files\View');
$view->expects($this->once())
->method('verifyPath')
->with($targetParent)
->will($this->returnValue(true));
$view->expects($this->once())
->method('isCreatable')
->with($targetParent)
->will($this->returnValue(true));
$view->expects($this->once())
->method('copy')
->with($sourcePath, $targetPath)
->will($this->returnValue(true));
$info = new FileInfo('', null, null, array(), null);
$rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info);
$objectTree = $this->getMock('\OCA\DAV\Connector\Sabre\ObjectTree',
array('nodeExists', 'getNodeForPath'),
array($rootDir, $view));
$objectTree->expects($this->once())
->method('getNodeForPath')
->with($this->identicalTo($sourcePath))
->will($this->returnValue(false));
/** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($rootDir, $view, $mountManager);
$objectTree->copy($sourcePath, $targetPath);
}
/**
* @dataProvider copyDataProvider
* @expectedException \Sabre\DAV\Exception\Forbidden
*/
public function testCopyFailNotCreatable($sourcePath, $targetPath, $targetParent) {
$view = $this->getMock('\OC\Files\View');
$view->expects($this->once())
->method('verifyPath')
->with($targetParent)
->will($this->returnValue(true));
$view->expects($this->once())
->method('isCreatable')
->with($targetParent)
->will($this->returnValue(false));
$view->expects($this->never())
->method('copy');
$info = new FileInfo('', null, null, array(), null);
$rootDir = new \OCA\DAV\Connector\Sabre\Directory($view, $info);
$objectTree = $this->getMock('\OCA\DAV\Connector\Sabre\ObjectTree',
array('nodeExists', 'getNodeForPath'),
array($rootDir, $view));
$objectTree->expects($this->once())
->method('getNodeForPath')
->with($this->identicalTo($sourcePath))
->will($this->returnValue(false));
/** @var $objectTree \OCA\DAV\Connector\Sabre\ObjectTree */
$mountManager = \OC\Files\Filesystem::getMountManager();
$objectTree->init($rootDir, $view, $mountManager);
$objectTree->copy($sourcePath, $targetPath);
}
/**
* @dataProvider nodeForPathProvider
*/

View File

@@ -22,22 +22,20 @@
*
*/
namespace OCA\DAV\Tests\unit\Connector\Sabre;
use Test\TestCase;
/**
* Copyright (c) 2013 Thomas Müller <thomas.mueller@tmit.eu>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
class QuotaPluginTest extends \Test\TestCase {
class QuotaPluginTest extends TestCase {
/**
* @var \Sabre\DAV\Server
*/
/** @var \Sabre\DAV\Server | \PHPUnit_Framework_MockObject_MockObject */
private $server;
/**
* @var \OCA\DAV\Connector\Sabre\QuotaPlugin
*/
/** @var \OCA\DAV\Connector\Sabre\QuotaPlugin | \PHPUnit_Framework_MockObject_MockObject */
private $plugin;
private function init($quota, $checkedPath = '') {
@@ -124,13 +122,19 @@ class QuotaPluginTest extends \Test\TestCase {
}
public function lengthProvider() {
return array(
array(null, array()),
array(1024, array('X-EXPECTED-ENTITY-LENGTH' => '1024')),
array(512, array('CONTENT-LENGTH' => '512')),
array(2048, array('OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => '1024')),
array(4096, array('OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => '4096')),
);
return [
[null, []],
[1024, ['X-EXPECTED-ENTITY-LENGTH' => '1024']],
[512, ['CONTENT-LENGTH' => '512']],
[2048, ['OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => '1024']],
[4096, ['OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => '4096']],
[null, ['X-EXPECTED-ENTITY-LENGTH' => 'A']],
[null, ['CONTENT-LENGTH' => 'A']],
[1024, ['OC-TOTAL-LENGTH' => 'A', 'CONTENT-LENGTH' => '1024']],
[1024, ['OC-TOTAL-LENGTH' => 'A', 'X-EXPECTED-ENTITY-LENGTH' => '1024']],
[null, ['OC-TOTAL-LENGTH' => '2048', 'X-EXPECTED-ENTITY-LENGTH' => 'A']],
[null, ['OC-TOTAL-LENGTH' => '2048', 'CONTENT-LENGTH' => 'A']],
];
}
public function quotaChunkedOkProvider() {
@@ -211,8 +215,11 @@ class QuotaPluginTest extends \Test\TestCase {
}
private function buildFileViewMock($quota, $checkedPath) {
// mock filesysten
$view = $this->getMock('\OC\Files\View', array('free_space'), array(), '', false);
// mock file systen
$view = $this->getMockBuilder('\OC\Files\View')
->setMethods(['free_space'])
->setConstructorArgs([])
->getMock();
$view->expects($this->any())
->method('free_space')
->with($this->identicalTo($checkedPath))

View File

@@ -1,75 +0,0 @@
<?php
/**
* @author Thomas Müller <thomas.mueller@tmit.eu>
*
* @copyright Copyright (c) 2016, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* 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\Classification;
use OCA\DAV\Tests\unit\CalDAV\AbstractCalDavBackendTest;
use OCP\IUser;
/**
* Class ClassificationTest
*
* @group DB
*
* @package OCA\DAV\Tests\unit\DAV
*/
class ClassificationTest extends AbstractCalDavBackendTest {
/** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IUserManager */
private $userManager;
public function setUp() {
parent::setUp();
$this->userManager = $this->getMockBuilder('OCP\IUserManager')
->disableOriginalConstructor()->getMock();
}
public function test() {
// setup data
$calendarId = $this->createTestCalendar();
$eventUri = $this->createEvent($calendarId, '20130912T130000Z', '20130912T140000Z');
$object = $this->backend->getCalendarObject($calendarId, $eventUri);
// assert proper classification
$this->assertEquals(CalDavBackend::CLASSIFICATION_PUBLIC, $object['classification']);
$this->backend->setClassification($object['id'], CalDavBackend::CLASSIFICATION_CONFIDENTIAL);
$object = $this->backend->getCalendarObject($calendarId, $eventUri);
$this->assertEquals(CalDavBackend::CLASSIFICATION_CONFIDENTIAL, $object['classification']);
// run migration
$c = new Classification($this->backend, $this->userManager);
/** @var IUser | \PHPUnit_Framework_MockObject_MockObject $user */
$user = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor()
->getMock();
$user->expects($this->once())->method('getUID')->willReturn('caldav-unit-test');
$c->runForUser($user);
// assert classification after migration
$object = $this->backend->getCalendarObject($calendarId, $eventUri);
$this->assertEquals(CalDavBackend::CLASSIFICATION_PUBLIC, $object['classification']);
}
}

View File

@@ -32,18 +32,78 @@ class AssemblyStreamTest extends \Test\TestCase {
$this->assertEquals($expected, $content);
}
/**
* @dataProvider providesNodes()
*/
public function testGetContentsFread($expected, $nodes) {
$stream = \OCA\DAV\Upload\AssemblyStream::wrap($nodes);
$content = '';
while (!feof($stream)) {
$content .= fread($stream, 3);
}
$this->assertEquals($expected, $content);
}
function providesNodes() {
$data8k = $this->makeData(8192);
$dataLess8k = $this->makeData(8191);
return[
'one node only' => ['1234567890', [
'one node zero bytes' => [
'', [
$this->buildNode('0', '')
]],
'one node only' => [
'1234567890', [
$this->buildNode('0', '1234567890')
]],
'two nodes' => ['1234567890', [
'one node buffer boundary' => [
$data8k, [
$this->buildNode('0', $data8k)
]],
'two nodes' => [
'1234567890', [
$this->buildNode('1', '67890'),
$this->buildNode('0', '12345')
]]
]],
'two nodes end on buffer boundary' => [
$data8k . $data8k, [
$this->buildNode('1', $data8k),
$this->buildNode('0', $data8k)
]],
'two nodes with one on buffer boundary' => [
$data8k . $dataLess8k, [
$this->buildNode('1', $dataLess8k),
$this->buildNode('0', $data8k)
]],
'two nodes on buffer boundary plus one byte' => [
$data8k . 'X' . $data8k, [
$this->buildNode('1', $data8k),
$this->buildNode('0', $data8k . 'X')
]],
'two nodes on buffer boundary plus one byte at the end' => [
$data8k . $data8k . 'X', [
$this->buildNode('1', $data8k . 'X'),
$this->buildNode('0', $data8k)
]],
];
}
private function makeData($count) {
$data = '';
$base = '1234567890';
$j = 0;
for ($i = 0; $i < $count; $i++) {
$data .= $base[$j];
$j++;
if (!isset($base[$j])) {
$j = 0;
}
}
return $data;
}
private function buildNode($name, $data) {
$node = $this->getMockBuilder('\Sabre\DAV\File')
->setMethods(['getName', 'get', 'getSize'])

View File

@@ -1,6 +1,9 @@
OC.L10N.register(
"federatedfilesharing",
{
"Sharing %s failed, because this item is already shared with %s" : "Compartir %s falló, porque esti elementu yá ta compartiéndose con %s"
"Invalid Federated Cloud ID" : "Inválidu ID de Ñube Federada",
"Sharing %s failed, because this item is already shared with %s" : "Compartir %s falló, porque esti elementu yá ta compartiéndose con %s",
"Not allowed to create a federated share with the same user" : "Nun s'almite crear un recursu compartíu federáu col mesmu usuariu",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Compartir %s falló, nun pudo atopase %s, pue qu'el servidor nun seya anguaño algamable."
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,4 +1,7 @@
{ "translations": {
"Sharing %s failed, because this item is already shared with %s" : "Compartir %s falló, porque esti elementu yá ta compartiéndose con %s"
"Invalid Federated Cloud ID" : "Inválidu ID de Ñube Federada",
"Sharing %s failed, because this item is already shared with %s" : "Compartir %s falló, porque esti elementu yá ta compartiéndose con %s",
"Not allowed to create a federated share with the same user" : "Nun s'almite crear un recursu compartíu federáu col mesmu usuariu",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Compartir %s falló, nun pudo atopase %s, pue qu'el servidor nun seya anguaño algamable."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -7,6 +7,8 @@ OC.L10N.register(
"Not allowed to create a federated share with the same user" : "Non autorisé à créer un partage fédéré avec le même utilisateur",
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Le partage de %s a échoué : impossible de trouver %s. Peut-être le serveur est-il momentanément injoignable.",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous recevez \"/%3$s\" comme un partage distant depuis %1$s (au nom de %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Vous recevez \"/%3$s\" comme un partage distant depuis %1$s",
"Accept" : "Accepter",
"Decline" : "Refuser",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s",

View File

@@ -5,6 +5,8 @@
"Not allowed to create a federated share with the same user" : "Non autorisé à créer un partage fédéré avec le même utilisateur",
"File is already shared with %s" : "Le fichier est déjà partagé avec %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Le partage de %s a échoué : impossible de trouver %s. Peut-être le serveur est-il momentanément injoignable.",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Vous recevez \"/%3$s\" comme un partage distant depuis %1$s (au nom de %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Vous recevez \"/%3$s\" comme un partage distant depuis %1$s",
"Accept" : "Accepter",
"Decline" : "Refuser",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s",

View File

@@ -2,14 +2,15 @@ OC.L10N.register(
"federatedfilesharing",
{
"Federated sharing" : "連携共有",
"Invalid Federated Cloud ID" : "無効な統合されたクラウドID",
"Invalid Federated Cloud ID" : "クラウド統合IDが無効",
"Sharing %s failed, because this item is already shared with %s" : "%s を共有できませんでした。このアイテムはすでに %s に共有されています。",
"Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
"File is already shared with %s" : "ファイルは既に %s と共有されています。",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s からリモート共有として \"/%3$s\" を受け取りました。(%2$s の代理として)",
"You received \"/%3$s\" as a remote share from %1$s" : "%1$s からリモート共有として \"/%3$s\" を受け取りました。",
"Accept" : "承諾",
"Decline" : "拒否《はてなキーワード》",
"Accept" : "受領",
"Decline" : "拒否",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud の「クラウド連携ID」で私と共有できます。こちらを見てください。%s",
"Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud の「クラウド連携ID」で私と共有できます。",
"Federated Cloud Sharing" : "統合されたクラウド共有",

View File

@@ -1,13 +1,14 @@
{ "translations": {
"Federated sharing" : "連携共有",
"Invalid Federated Cloud ID" : "無効な統合されたクラウドID",
"Invalid Federated Cloud ID" : "クラウド統合IDが無効",
"Sharing %s failed, because this item is already shared with %s" : "%s を共有できませんでした。このアイテムはすでに %s に共有されています。",
"Not allowed to create a federated share with the same user" : "同じユーザーでフェデレーション共有を作成することは出来ません",
"File is already shared with %s" : "ファイルは既に %s と共有されています。",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s を共有できませんでした。%s が見つかりませんでした。現在サーバーに接続できないようです。",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "%1$s からリモート共有として \"/%3$s\" を受け取りました。(%2$s の代理として)",
"You received \"/%3$s\" as a remote share from %1$s" : "%1$s からリモート共有として \"/%3$s\" を受け取りました。",
"Accept" : "承諾",
"Decline" : "拒否《はてなキーワード》",
"Accept" : "受領",
"Decline" : "拒否",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud の「クラウド連携ID」で私と共有できます。こちらを見てください。%s",
"Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud の「クラウド連携ID」で私と共有できます。",
"Federated Cloud Sharing" : "統合されたクラウド共有",

View File

@@ -5,7 +5,10 @@ OC.L10N.register(
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
"Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
"File is already shared with %s" : "Filen deles allerede med %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du mottok \"/%3$s\" som en ekstern deling fra %1$s (på vegne av %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Du mottok \"/%3$s\" som en ekstern deling fra %1$s",
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s",

View File

@@ -3,7 +3,10 @@
"Invalid Federated Cloud ID" : "Ugyldig ID for sammenknyttet sky",
"Sharing %s failed, because this item is already shared with %s" : "Deling av %s feilet, fordi dette elementet allerede er delt med %s",
"Not allowed to create a federated share with the same user" : "Ikke tillatt å opprette en Sammenknyttet sky-deling med den samme brukeren",
"File is already shared with %s" : "Filen deles allerede med %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "Deling %s feilet, fant ikke %s, kanskje servern er utilgjengelig for øyeblikket.",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "Du mottok \"/%3$s\" som en ekstern deling fra %1$s (på vegne av %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "Du mottok \"/%3$s\" som en ekstern deling fra %1$s",
"Accept" : "Aksepter",
"Decline" : "Avslå",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s",

View File

@@ -5,7 +5,10 @@ OC.L10N.register(
"Invalid Federated Cloud ID" : "ไอดีคลาวด์ในเครือไม่ถูกต้อง",
"Sharing %s failed, because this item is already shared with %s" : "การแชร์ %s ล้มเหลวเพราะรายการนี้ถูกแชร์กับ %s",
"Not allowed to create a federated share with the same user" : "ไม่อนุญาตให้สร้างแชร์สหพันธ์กับผู้ใช้เดียวกัน",
"File is already shared with %s" : "ไฟล์ได้ถูกแชร์แล้วกับ %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "การแชร์ %s ล้มเหลวไม่สามารถหา %s, บางทีอาจจะยังไม่สามารถเข้าถึงเซิร์ฟเวอร์ปัจจุบัน",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "คุณได้รับ \"/%3$s\" เป็นรีโมทแชร์จาก %1$s (ในนามของ %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "คุณได้รับ\"/%3$s\" เป็นรีโมทแชร์จาก %1$s",
"Accept" : "ยอมรับ",
"Decline" : "ลดลง",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์กับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์สหพันธ์ สามารถดูได้ที่ %s",

View File

@@ -3,7 +3,10 @@
"Invalid Federated Cloud ID" : "ไอดีคลาวด์ในเครือไม่ถูกต้อง",
"Sharing %s failed, because this item is already shared with %s" : "การแชร์ %s ล้มเหลวเพราะรายการนี้ถูกแชร์กับ %s",
"Not allowed to create a federated share with the same user" : "ไม่อนุญาตให้สร้างแชร์สหพันธ์กับผู้ใช้เดียวกัน",
"File is already shared with %s" : "ไฟล์ได้ถูกแชร์แล้วกับ %s",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "การแชร์ %s ล้มเหลวไม่สามารถหา %s, บางทีอาจจะยังไม่สามารถเข้าถึงเซิร์ฟเวอร์ปัจจุบัน",
"You received \"/%3$s\" as a remote share from %1$s (on behalf of %2$s)" : "คุณได้รับ \"/%3$s\" เป็นรีโมทแชร์จาก %1$s (ในนามของ %2$s)",
"You received \"/%3$s\" as a remote share from %1$s" : "คุณได้รับ\"/%3$s\" เป็นรีโมทแชร์จาก %1$s",
"Accept" : "ยอมรับ",
"Decline" : "ลดลง",
"Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์กับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์สหพันธ์ สามารถดูได้ที่ %s",

View File

@@ -5,6 +5,7 @@ OC.L10N.register(
"Invalid Federated Cloud ID" : "Geçersiz Birleşmiş Bulut Kimliği",
"Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu",
"Not allowed to create a federated share with the same user" : "Aynı kullanıcı ile bir birleşmiş paylaşım oluşturulamaz",
"File is already shared with %s" : "Dosya önceden %s ile paylaşıldı",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s paylaşımı başarısız. %s bulunamadı veya sunucu şu anda ulaşılamıyor olabilir.",
"Accept" : "Kabul et",
"Decline" : "Reddet",

View File

@@ -3,6 +3,7 @@
"Invalid Federated Cloud ID" : "Geçersiz Birleşmiş Bulut Kimliği",
"Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu",
"Not allowed to create a federated share with the same user" : "Aynı kullanıcı ile bir birleşmiş paylaşım oluşturulamaz",
"File is already shared with %s" : "Dosya önceden %s ile paylaşıldı",
"Sharing %s failed, could not find %s, maybe the server is currently unreachable." : "%s paylaşımı başarısız. %s bulunamadı veya sunucu şu anda ulaşılamıyor olabilir.",
"Accept" : "Kabul et",
"Decline" : "Reddet",

View File

@@ -39,6 +39,8 @@ class DiscoveryManager {
private $cache;
/** @var IClient */
private $client;
/** @var bool */
public $underTest = false;
/**
* @param ICacheFactory $cacheFactory
@@ -82,6 +84,10 @@ class DiscoveryManager {
'share' => '/ocs/v1.php/cloud/shares',
];
if (defined('PHPUNIT_RUN') && !$this->underTest) {
return $discoveredServices;
}
// Read the data from the response body
try {
$response = $this->client->get($remote . '/ocs-provider/', [

View File

@@ -473,6 +473,8 @@ class FederatedShareProvider implements IShareProvider {
$isOwner = false;
$this->removeShareFromTable($share);
// if the local user is the owner we can send the unShare request directly...
if ($this->userManager->userExists($share->getShareOwner())) {
$this->notifications->sendRemoteUnShare($remote, $share->getId(), $share->getToken());
@@ -494,8 +496,6 @@ class FederatedShareProvider implements IShareProvider {
}
$this->notifications->sendRevokeShare($remote, $remoteId, $share->getToken());
}
$this->removeShareFromTable($share);
}
/**

View File

@@ -62,6 +62,7 @@ class DiscoveryManagerTest extends \Test\TestCase {
$cacheFactory,
$clientService
);
$this->discoveryManager->underTest = true;
}
public function testWithMalformedFormattedEndpointCached() {

View File

@@ -7,9 +7,9 @@ OC.L10N.register(
"Could not add server" : "サーバーを追加できませんでした",
"Federation" : "連携",
"ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 連携機能では信頼済のownCloudのユーザーディレクトリを相互に接続することができます。例えば、連携で共有したときには、連携先の外部ユーザー名の自動補完を使えるようになります。",
"Add server automatically once a federated share was created successfully" : "追加するサーバは自動的に統合され、共有が追加されました",
"Trusted ownCloud Servers" : "ownCloudサーバを信頼する",
"+ Add ownCloud server" : "ownCloudサーバを追加",
"Add server automatically once a federated share was created successfully" : "ownCloudサーバー連携で一度でも共有が作成できた場合は、サーバーを自動的に追加します。",
"Trusted ownCloud Servers" : "信頼済 ownCloudサーバ",
"+ Add ownCloud server" : "ownCloudサーバを追加",
"ownCloud Server" : "ownCloudサーバ"
},
"nplurals=1; plural=0;");

View File

@@ -5,9 +5,9 @@
"Could not add server" : "サーバーを追加できませんでした",
"Federation" : "連携",
"ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing." : "ownCloud 連携機能では信頼済のownCloudのユーザーディレクトリを相互に接続することができます。例えば、連携で共有したときには、連携先の外部ユーザー名の自動補完を使えるようになります。",
"Add server automatically once a federated share was created successfully" : "追加するサーバは自動的に統合され、共有が追加されました",
"Trusted ownCloud Servers" : "ownCloudサーバを信頼する",
"+ Add ownCloud server" : "ownCloudサーバを追加",
"Add server automatically once a federated share was created successfully" : "ownCloudサーバー連携で一度でも共有が作成できた場合は、サーバーを自動的に追加します。",
"Trusted ownCloud Servers" : "信頼済 ownCloudサーバ",
"+ Add ownCloud server" : "ownCloudサーバを追加",
"ownCloud Server" : "ownCloudサーバ"
},"pluralForm" :"nplurals=1; plural=0;"
}

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