Compare commits

..

1060 Commits

Author SHA1 Message Date
Morris Jobke 68a1f2074e Merge pull request #13477 from nextcloud/version/noid/13.0.9
13.0.9
2019-01-10 15:24:12 +01:00
Morris Jobke 3ff6391329 13.0.9
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2019-01-10 11:23:47 +01:00
Morris Jobke 9d4d604125 Merge pull request #13471 from nextcloud/backport/13467/stable13
[stable13] Show the repair steps and repair info output in the web for better feedback
2019-01-10 10:44:19 +01:00
Morris Jobke d3d3694432 Show the repair steps and repair info output in the web for better feedback
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2019-01-10 07:38:17 +00:00
Nextcloud bot 8a8cc531cb [tx-robot] updated from transifex 2019-01-10 01:12:35 +00:00
Roeland Jago Douma d9db6b7ec4 Merge pull request #13454 from nextcloud/version/noid/13.0.9RC2
13.0.9 RC 2
2019-01-09 20:27:09 +01:00
Morris Jobke da6ba224b8 13.0.9 RC 2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2019-01-09 19:19:42 +01:00
Morris Jobke 9681279623 Merge pull request #13443 from nextcloud/backport/13430-13
[stable13] Respect classification of calendar events in activity stream
2019-01-09 19:19:03 +01:00
Joas Schilling 63e24d0903 Prevent php info about missing index for old events
Signed-off-by: Joas Schilling <coding@schilljs.com>
2019-01-09 18:33:17 +01:00
Joas Schilling 5ea32a1bca Add a repair step to remove sensitive event activity
Signed-off-by: Joas Schilling <coding@schilljs.com>
2019-01-09 18:33:17 +01:00
Joas Schilling 194c4b717e Correctly handle the classification of events in the activity stream
Signed-off-by: Joas Schilling <coding@schilljs.com>
2019-01-09 18:33:17 +01:00
Morris Jobke 81b02e34dd Merge pull request #13422 from nextcloud/backport/9174/stable13
[stable13] log more information about insufficient storage in dav plugin
2019-01-09 18:01:16 +01:00
Nextcloud bot 084e9fd237 [tx-robot] updated from transifex 2019-01-09 01:13:09 +00:00
Robin Appelman 6252f07fbc log more information about insufficient storage in dav plugin
Signed-off-by: Robin Appelman <robin@icewind.nl>
2019-01-08 14:22:29 +00:00
Nextcloud bot 88455103fd [tx-robot] updated from transifex 2019-01-08 01:12:30 +00:00
Nextcloud bot 95ad0a79ba [tx-robot] updated from transifex 2019-01-07 01:12:27 +00:00
Nextcloud bot a150a986ce [tx-robot] updated from transifex 2019-01-06 01:13:33 +00:00
Roeland Jago Douma ccfd23cb32 Merge pull request #13348 from nextcloud/version/noid/13.0.9RC1
13.0.9 RC 1
2019-01-05 21:38:28 +01:00
Morris Jobke 67b94a4b1e 13.0.9 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2019-01-05 16:45:59 +01:00
Roeland Jago Douma de761e22d0 Merge pull request #13374 from nextcloud/backport/13363/stable13
[stable13] Fix loginflow with apptoken enter on iOS
2019-01-05 16:41:48 +01:00
Roeland Jago Douma 2757a42907 Fix loginflow with apptoken enter on iOS
It seems iOS doesn't like us to change the location. So now we submit it
to the server that geneartes the redirect.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2019-01-05 15:55:02 +01:00
Nextcloud bot 14c8416685 [tx-robot] updated from transifex 2019-01-05 01:12:27 +00:00
Morris Jobke 3c3cb71bda Merge pull request #13359 from nextcloud/backport/13351/stable13
[stable13] Update the CRL
2019-01-04 19:11:05 +01:00
Roeland Jago Douma dff2cf614b Update the CRL
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2019-01-04 17:26:30 +01:00
Nextcloud bot 4cd18afb29 [tx-robot] updated from transifex 2019-01-04 01:12:57 +00:00
Nextcloud bot 2e1701bfba [tx-robot] updated from transifex 2019-01-03 01:12:16 +00:00
Nextcloud bot c1472e0cdd [tx-robot] updated from transifex 2019-01-02 01:11:56 +00:00
Nextcloud bot 93923fbe49 [tx-robot] updated from transifex 2019-01-01 01:12:04 +00:00
Nextcloud bot fcae962594 [tx-robot] updated from transifex 2018-12-31 01:12:11 +00:00
Nextcloud bot 2ad10aa7a2 [tx-robot] updated from transifex 2018-12-30 01:13:11 +00:00
Nextcloud bot 91117e4e2e [tx-robot] updated from transifex 2018-12-29 01:12:12 +00:00
Nextcloud bot aa4a4d4415 [tx-robot] updated from transifex 2018-12-28 01:12:15 +00:00
Nextcloud bot 0e03a5c839 [tx-robot] updated from transifex 2018-12-27 01:12:12 +00:00
Nextcloud bot ae2f588305 [tx-robot] updated from transifex 2018-12-26 01:12:24 +00:00
Nextcloud bot a1e4250278 [tx-robot] updated from transifex 2018-12-25 01:12:03 +00:00
Nextcloud bot 224dbe15fd [tx-robot] updated from transifex 2018-12-24 01:12:15 +00:00
Nextcloud bot 287bcbb548 [tx-robot] updated from transifex 2018-12-23 01:12:53 +00:00
Nextcloud bot a8dbf30293 [tx-robot] updated from transifex 2018-12-22 01:12:15 +00:00
blizzz f11706e351 Merge pull request #13220 from nextcloud/backport/13187/stable13
[stable13] do not forgot to store the second displayname portion
2018-12-21 16:57:35 +01:00
Arthur Schiwon 827be719f9 do not forgot to store the second displayname portion
otherwise it causes a chain reaction of system addressbook updates

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-12-21 13:44:16 +00:00
Nextcloud bot 69798a20a4 [tx-robot] updated from transifex 2018-12-21 01:12:15 +00:00
Nextcloud bot b677dadf18 [tx-robot] updated from transifex 2018-12-20 01:12:13 +00:00
John Molakvoæ ea82ffdb51 Merge pull request #13153 from nextcloud/backport/13133/stable13
[stable13] Prevent special characters from breaking the file drop remote url
2018-12-19 10:56:37 +01:00
John Molakvoæ (skjnldsv) 5eff452b23 Prevent special characters from breaking the file drop remote url
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-12-19 08:55:43 +00:00
Nextcloud bot daea45c424 [tx-robot] updated from transifex 2018-12-19 01:12:16 +00:00
Roeland Jago Douma 32c40afdc9 Merge pull request #13125 from nextcloud/backport/13118/stable13
[stable13] Fix SAML Client login flow on Apple devices
2018-12-18 16:20:13 +01:00
Nextcloud bot f61d9a1869 [tx-robot] updated from transifex 2018-12-18 01:11:59 +00:00
Roeland Jago Douma 3b4abd550b Fix SAML Client login flow on Apple devices
Because the redirect from the SAML/SSO endpoint is a POST the lax/strict
cookies are not properly send.

Note that it is not strictly requried on this endpoint as we do not need
the remember me data. Only the real session info is enough. The endpoint
is also already protected by a state token.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-12-17 13:20:14 +00:00
Nextcloud bot a730ad16f1 [tx-robot] updated from transifex 2018-12-17 01:11:59 +00:00
Nextcloud bot 90bd295d3c [tx-robot] updated from transifex 2018-12-16 01:12:59 +00:00
Nextcloud bot c2d7f88fdf [tx-robot] updated from transifex 2018-12-15 01:12:04 +00:00
Nextcloud bot a601e7b952 [tx-robot] updated from transifex 2018-12-14 01:12:58 +00:00
Nextcloud bot e5a6c719db [tx-robot] updated from transifex 2018-12-13 01:12:25 +00:00
Nextcloud bot f360b8df0b [tx-robot] updated from transifex 2018-12-12 01:12:04 +00:00
Nextcloud bot ab42aada9b [tx-robot] updated from transifex 2018-12-11 01:12:15 +00:00
Nextcloud bot fb158c7c4e [tx-robot] updated from transifex 2018-12-10 01:12:04 +00:00
Nextcloud bot 5802a9660c [tx-robot] updated from transifex 2018-12-09 01:12:53 +00:00
Nextcloud bot d9698149c9 [tx-robot] updated from transifex 2018-12-08 01:11:50 +00:00
Nextcloud bot af3f951a33 [tx-robot] updated from transifex 2018-12-07 01:12:10 +00:00
Nextcloud bot 1ee41dce74 [tx-robot] updated from transifex 2018-12-06 01:12:29 +00:00
Morris Jobke 71ceecc1fe Merge pull request #12864 from nextcloud/backport/12855/stable13
[stable13] Only execute query in propagateChange once
2018-12-06 00:04:53 +01:00
Roeland Jago Douma 4c88cef749 Only execute query in propagateChange once
The second execute statement should be inside the if block. Else it gets
executed twice which makes no sense.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-12-05 20:45:50 +00:00
Morris Jobke cebd51097d Merge pull request #12835 from nextcloud/backport/12831/stable13
[stable13] Do not update child all child shares on group share update
2018-12-05 09:35:46 +01:00
Christoph Wurst 0d602760df Merge pull request #12818 from nextcloud/backport/12813/stable13
[stable13] Fix the system address book
2018-12-05 08:17:40 +01:00
Nextcloud bot e545bcd54d [tx-robot] updated from transifex 2018-12-05 01:12:23 +00:00
Roeland Jago Douma b9b58b1ace Do not update child all child shares on group share update
Else we overwrite the whole share for link shares. Basically breaking
them.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-12-04 21:53:38 +00:00
Roeland Jago Douma d8f2e22e6b Merge pull request #12827 from nextcloud/backport/12822/stable13
[stable13] PHP module is named mbstring
2018-12-04 20:10:28 +01:00
Morris Jobke d2f89950d8 PHP module is named mbstring
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-12-04 17:58:02 +00:00
Roeland Jago Douma 094b98376f Fix the system address book
c23a66cda4 broke the system address book.
We now move the ACL rules for this special case up and all is good in
the world again.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-12-04 14:21:51 +00:00
Nextcloud bot 0d5f3d16e9 [tx-robot] updated from transifex 2018-12-04 01:12:34 +00:00
Nextcloud bot 9a48fdd5e8 [tx-robot] updated from transifex 2018-12-03 01:12:00 +00:00
Nextcloud bot e5088791e9 [tx-robot] updated from transifex 2018-12-02 01:13:04 +00:00
Nextcloud bot f30bf3ebf5 [tx-robot] updated from transifex 2018-12-01 01:11:55 +00:00
Nextcloud bot 2e09bb48fb [tx-robot] updated from transifex 2018-11-30 01:12:26 +00:00
Nextcloud bot 8f80685426 [tx-robot] updated from transifex 2018-11-29 01:12:00 +00:00
Nextcloud bot e389bf4588 [tx-robot] updated from transifex 2018-11-28 01:12:24 +00:00
Nextcloud bot eca49de335 [tx-robot] updated from transifex 2018-11-27 01:11:59 +00:00
Nextcloud bot fffed81800 [tx-robot] updated from transifex 2018-11-26 01:11:49 +00:00
Nextcloud bot c741fe5aed [tx-robot] updated from transifex 2018-11-25 01:12:42 +00:00
Nextcloud bot 537694fc60 [tx-robot] updated from transifex 2018-11-24 01:11:47 +00:00
Morris Jobke 122ecf8ebd Merge pull request #12595 from nextcloud/backport/12448/stable13
[stable13] Load apps that have a dav type set before the dav server plugins
2018-11-23 08:35:52 +01:00
Roeland Jago Douma 8e7900c15d Merge pull request #12616 from nextcloud/backport/12592/stable13
[stable13] fix typo in original english string and all translations
2018-11-23 07:51:18 +01:00
Nextcloud bot ca4abe8da6 [tx-robot] updated from transifex 2018-11-23 01:13:30 +00:00
Patrick Baber 7e315ef983 fix typo in original english string and all translations
Signed-off-by: Patrick Baber <patrick@p-squared.de>
2018-11-22 23:37:47 +01:00
Julius Härtl 59c379bc5e Load apps that have a dav type set before the dav server plugins
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-11-22 16:20:47 +00:00
Morris Jobke a966d7f9ca Merge pull request #12585 from nextcloud/version/noid/13.0.8
13.0.8
2018-11-22 14:03:46 +01:00
Morris Jobke 51a89baf9a 13.0.8
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-11-22 11:02:06 +01:00
Nextcloud bot 008826f99e [tx-robot] updated from transifex 2018-11-22 01:12:38 +00:00
Roeland Jago Douma bea70d4ad3 Merge pull request #12562 from nextcloud/backport/12544/stable13
[13] Handle permission in update of share better
2018-11-21 08:57:55 +01:00
Nextcloud bot f627754965 [tx-robot] updated from transifex 2018-11-21 01:12:34 +00:00
Roeland Jago Douma 7b2a7f695f Handle permission in update of share better
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-20 19:38:46 +01:00
Julius Härtl d268a97d21 Merge pull request #12546 from nextcloud/backport/12543/stable13
[stable13] Bearer tokens are app token
2018-11-20 15:21:43 +01:00
Roeland Jago Douma 1794c3fdea Bearer tokens are app token
Fixes #12498

This means that we set that it is a proper app token once it is
validated. This will allow the 2FA middleware to just run the same
check.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-20 10:51:07 +00:00
Morris Jobke 9939540ce4 Merge pull request #12532 from nextcloud/version/noid/13.0.8rc2
13.0.8 RC 2
2018-11-20 09:25:47 +01:00
Nextcloud bot 0cb7c03132 [tx-robot] updated from transifex 2018-11-20 01:12:57 +00:00
Morris Jobke 77e72c7b0e 13.0.8 RC 2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-11-19 15:43:35 +01:00
Morris Jobke 59b4643c72 Merge pull request #12503 from nextcloud/swift-object-not-found-13
[13] forward object not found error in swift as dav 404
2018-11-19 15:32:27 +01:00
Robin Appelman 5261edb61a forward object not found error in swift as dav 404
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-11-19 11:37:12 +01:00
Nextcloud bot c85d6b3d69 [tx-robot] updated from transifex 2018-11-19 01:12:23 +00:00
Nextcloud bot 98c7accec8 [tx-robot] updated from transifex 2018-11-18 01:13:17 +00:00
Nextcloud bot a6c58d74dd [tx-robot] updated from transifex 2018-11-17 01:13:08 +00:00
Nextcloud bot 24a04fae3d [tx-robot] updated from transifex 2018-11-16 01:12:34 +00:00
Morris Jobke 03ea80edde Merge pull request #12437 from nextcloud/version/noid/13.0.8RC1
13.0.8 RC 1
2018-11-15 15:36:01 +01:00
Morris Jobke 1085cae542 13.0.8 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-11-15 13:48:12 +01:00
Morris Jobke 4a71b80b74 Merge pull request #12460 from nextcloud/bugfix-stable13/dav_shares_hickup
[stable13] fixes dav share issue with owner
2018-11-15 13:41:08 +01:00
Georg Ehrke 2a31d842ea fix caldav tests
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-11-15 13:01:40 +01:00
Nextcloud bot c2000c295c [tx-robot] updated from transifex 2018-11-15 01:12:32 +00:00
Georg Ehrke d9b5726455 fixes dav share issue with owner
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-11-14 21:52:08 +01:00
Nextcloud bot 6e07165bc2 [tx-robot] updated from transifex 2018-11-14 01:12:30 +00:00
Roeland Jago Douma b89996483d Merge pull request #12376 from nextcloud/backport/12284/stable13
[13] Properly search the root of a shared external storage
2018-11-13 15:59:01 +01:00
Morris Jobke 204466c714 Merge pull request #12434 from nextcloud/backport/12411-12413/unique-constraint-fix-13
[stable13] Unique contraint and deadlock fixes for filecache and file_locks
2018-11-13 15:03:51 +01:00
Morris Jobke 243516d785 Fix UniqueConstraintViolationException while insert into oc_file_locks
* fixes #9305 by not being prone to the race condition in insertIfNotExists
* fixes #6899 by not using a query that can result in a deadlock
* replaces the insertIfNotExists call with an insert which is wrapped into a try-catch block
* followup to #12371

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-11-13 14:05:16 +01:00
Morris Jobke 0737a6fbe4 Fix UniqueConstraintViolationException while insert into oc_filecache
* fixes #6160 by not being prone to the race condition in insertIfNotExists
* fixes #12228 by not using a query that can result in a deadlock
* replaces the insertIfNotExists call with an insert which is wrapped into a try-catch block

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-11-13 14:05:13 +01:00
Nextcloud bot 413121dea1 [tx-robot] updated from transifex 2018-11-13 01:13:02 +00:00
Nextcloud bot 357bbe1b79 [tx-robot] updated from transifex 2018-11-12 01:13:06 +00:00
Nextcloud bot 5534193d3e [tx-robot] updated from transifex 2018-11-11 01:13:26 +00:00
Nextcloud bot 3d34f6b29c [tx-robot] updated from transifex 2018-11-10 01:12:44 +00:00
Roeland Jago Douma 8b03bf7d5a Properly search the root of a shared external storage
Fixes #1020

When an external storage is shared with you in full the root is ''
(empty). This adds an extra check for an empty jail basically.

Because if the jail is on the empty string. It matches all paths.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-09 13:23:52 +01:00
Nextcloud bot 9c7f09d2ac [tx-robot] updated from transifex 2018-11-09 01:12:47 +00:00
Nextcloud bot 7afee0e583 [tx-robot] updated from transifex 2018-11-08 01:12:37 +00:00
Nextcloud bot af858c257a [tx-robot] updated from transifex 2018-11-07 01:12:49 +00:00
Morris Jobke 1cac241318 Merge pull request #12298 from nextcloud/backport/12127/stable13
[13] A folder should get a folder mimetype
2018-11-06 18:13:45 +01:00
Roeland Jago Douma fc49fa1620 A folder should get a folder mimetype
If doing achunked upload the mimetype of the folder would otherwise be
guessed from the path. Which always returned application/octet-stream.

If an access control rule to block that is in place this means that all
chunked uploads fail hard in directories as the isCreatable on the
directory always fails.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-06 08:02:48 +01:00
Nextcloud bot 450b9e2a20 [tx-robot] updated from transifex 2018-11-06 01:12:56 +00:00
Nextcloud bot 30666be2f0 [tx-robot] updated from transifex 2018-11-05 01:12:55 +00:00
Nextcloud bot 374bfbeaca [tx-robot] updated from transifex 2018-11-04 01:14:21 +00:00
Nextcloud bot 0e125b810a [tx-robot] updated from transifex 2018-11-03 01:12:58 +00:00
Morris Jobke afed9ae664 Merge pull request #12212 from nextcloud/backport/12140/stable13
[13] Expired tokens should not trigger bruteforce protection
2018-11-02 12:33:31 +01:00
Roeland Jago Douma 40d1202076 Error out early on an expired token
Fixes #12131

If we hit an expired token there is no need to continue checking. Since
we know it is a token.

We also should not register this with the bruteforce throttler as it is
actually a valid token. Just expired. Instead the authentication should
fail. And buisness continues as usual.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-02 11:41:00 +01:00
Roeland Jago Douma 04617a28d4 Move ExpiredTokenException to the correct namespace
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-02 11:39:42 +01:00
Roeland Jago Douma 3aaeaf1316 Merge pull request #12208 from nextcloud/backport/12130/stable13
[13] Reset bruteforce on token refresh OAuth
2018-11-02 11:38:13 +01:00
Roeland Jago Douma 6971ecef9d Reset bruteforce on token refresh OAuth
When using atoken obtained via OAuth the token expires. Resulting in
brute force attempts hitting the requesting IP.

This resets the brute force attempts for that UID on a valid refresh of
the token.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-11-02 10:54:50 +01:00
Nextcloud bot 4708a2529e [tx-robot] updated from transifex 2018-11-02 01:13:56 +00:00
Nextcloud bot 68c17136dd [tx-robot] updated from transifex 2018-11-01 01:13:22 +00:00
Nextcloud bot ea7f80206b [tx-robot] updated from transifex 2018-10-31 01:13:13 +00:00
Roeland Jago Douma aa6f50aa91 Merge pull request #12142 from nextcloud/backport/12054/stable13
[stable13] LDAP: announce display name changes so that addressbook picks it up
2018-10-30 16:28:27 +01:00
Arthur Schiwon 82bb002eaa adjust tests to 13 codebase
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-10-30 14:10:35 +01:00
Arthur Schiwon 908e6be07e Backport of #12054 to stable13
only write when the displayname differs, but then announce it

refs #5212 and fixes #9112

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

do not run into UniqueConstraintViolationException

… when an unmapped user logs in for the first time when background job
mode is ajax and no memcache was configured.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-10-30 14:10:21 +01:00
Nextcloud bot d90385caf6 [tx-robot] updated from transifex 2018-10-30 01:13:14 +00:00
Roeland Jago Douma 661062271f Merge pull request #12123 from nextcloud/backport/12107/stable13
[stable13] remove unneeded empty search attribute values, fixes #12086
2018-10-29 20:06:24 +01:00
Arthur Schiwon c4df29afb0 remove unneeded empty search attribute values, fixes #12086
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-10-29 17:29:32 +01:00
Morris Jobke 061846c7d0 Merge pull request #12112 from nextcloud/backport/12038/stable13
[13] Implement the size of an assembly stream
2018-10-29 17:22:03 +01:00
Morris Jobke 4e911226c6 Merge pull request #12109 from nextcloud/backport/11862/stable13
[13] Double check for failed cache with a shared storage
2018-10-29 17:20:21 +01:00
Roeland Jago Douma 8dcc7fc0f5 Implement the size of an assembly stream
This will make it possible to act propely on moves of future files if we
need to know the size (like for max size virus scanning).

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-29 15:19:55 +01:00
Roeland Jago Douma f903a7637b Double check for failed cache with a shared storage
When obtaining the SourceRootInfo we can call init. If this fails the
cache is set to a failed cache and the storage to a failed storage.
However we did not check for this. Which means that if the storage was
invalid it would fail later on.

Now we will properly error out.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-29 15:13:21 +01:00
Nextcloud bot 7686c03111 [tx-robot] updated from transifex 2018-10-29 01:13:27 +00:00
Nextcloud bot aa021a9407 [tx-robot] updated from transifex 2018-10-28 00:13:07 +00:00
Nextcloud bot 4e148133c9 [tx-robot] updated from transifex 2018-10-27 00:12:54 +00:00
Morris Jobke 9223159d42 Merge pull request #12060 from mikaelh/stable13
Actually return the root folder when traversing up the tree
2018-10-26 11:02:50 +02:00
Roeland Jago Douma d8a581e426 Actually return the root folder when traversing up the tree
If you now keep calling $node->getParent() you will at some point get
the RootFolder back. This is a nice termination check and will prevent
endless loops if an exit condition is slightly off.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-26 08:36:21 +02:00
Nextcloud bot ae061c69f1 [tx-robot] updated from transifex 2018-10-26 00:13:08 +00:00
Nextcloud bot 3d54e261ee [tx-robot] updated from transifex 2018-10-25 00:13:24 +00:00
Morris Jobke 1a28789db1 Merge pull request #12006 from iPaat/Backport13/Fix11847
[stable13] Remove cookies from Clear-Site-Data Header
2018-10-24 14:35:54 +02:00
Patrick Conrad 06e43bb46a Remove cookies from Clear-Site-Data Header
In https://github.com/nextcloud/server/commit/2f87fb6b456fd109c90a5093c31b7a3f62a32040 this header was introduced. The referenced documentation says:

> When delivered with a response from https://example.com/clear, the following header will cause cookies associated with the origin https://example.com to be cleared, as well as cookies on any origin in the same registered domain (e.g. https://www.example.com/ and https://more.subdomains.example.com/).

This also applies if `https://nextcloud.example.com/` sends the `Clear-Site-Data: "cookies"` header.
This is not the behavior we want at this point!

So I removed the deletion of cookies from the header. This has no effect on the logout process as this header is supported only recently and the logout works in old browsers as well.

Signed-off-by: Patrick Conrad <conrad@iza.org>
(cherry picked from commit 1806baaeaf)
2018-10-24 08:53:46 +02:00
Nextcloud bot ae17e55f42 [tx-robot] updated from transifex 2018-10-24 00:12:50 +00:00
Roeland Jago Douma c5b0efed3b Merge pull request #11982 from nextcloud/bugfix-stable13/noid/forbid_freebusy_but_allow_local_delivery
[stable13] allow local delivery of schedule message while prohibiting FreeBusy requests
2018-10-23 21:15:08 +02:00
Roeland Jago Douma f4efa550c3 Merge pull request #11996 from nextcloud/stable13-11967-fix-opening-a-section-again-in-the-files-app
[stable13] Fix opening a section again in the Files app
2018-10-23 20:21:35 +02:00
Morris Jobke c3919b844b Merge pull request #11997 from nextcloud/assemblly-stream-lazy-13
lazy open first source stream in assemblystream
2018-10-23 19:19:51 +02:00
Morris Jobke 56812b0ae5 Merge pull request #11962 from nextcloud/backport/11931/stable13
[13] Do not emit preHooks twice on non-part-storage
2018-10-23 18:16:04 +02:00
Robin Appelman 13317da19a lazy open first source stream in assemblystream
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-10-23 17:46:09 +02:00
Daniel Calviño Sánchez 3fbb6e7034 Add acceptance tests for opening a section in the Files app
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-10-23 17:31:01 +02:00
Daniel Calviño Sánchez bc7e8cb362 Remove event handler no longer needed
The custom handler for "URL changed" events were added to reload the
file list whenever the sections for favorites and shares were opened;
this was used to fix the problem of not reloading the file lists when
opening them for a second time. However, besides that the handlers were
not really necessary, and as the root of the bug was fixed in the
previous commit those handlers are now removed.

The file list for tags uses the handler for a different purpose, though,
so that one was kept.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-10-23 17:03:37 +02:00
Daniel Calviño Sánchez 4f5b072c74 Fix opening a section again in the Files app
When a section is open in the Files app a "show" event is triggered.
File list objects handle that event by reloading themselves, but only
if the file list was shown at least once. However, the file list objects
of plugins are created when the "show" event is triggered for the first
time for their section; as the file list objects register their handler
for the "show" event when they are created they never handle the first
triggered "show" event, as the handler is set while that event is being
already handled. Therefore, from the point of view of the handler, the
second time that a "show" event was triggered it was seen as if the file
list was shown for the first time, and thus it was not reloaded. Now the
"shown" property is explicitly set for those file lists that are created
while handling a "show" event, which causes them to be reloaded as
expected when opening their section again.

Note that it is not possible to just reload the file list whenever it is
shown; the file list is reloaded also when the directory changes, and
this can happen when the web page is initially loaded and the URL is
parsed. In that case, if file lists were reloaded when shown for the
first time then it could be reloaded twice, one with the default
parameters due to the "show" event and another one with the proper
parameters once the URL was parsed, and the files that appeard in the
list would depend on which response from the server was received the
last.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-10-23 17:02:54 +02:00
Nextcloud bot 5de5db0280 [tx-robot] updated from transifex 2018-10-23 14:54:51 +00:00
Roeland Jago Douma b7524ee49e Merge pull request #11978 from nextcloud/bugfix-stable13/9326/make_sure_usermanager_getByEmail_only_returns_IUser
[stable13] filter null values for UserManager::getByEmail
2018-10-23 15:14:56 +02:00
Roeland Jago Douma 18b4b6c324 Merge pull request #11992 from nextcloud/backport/11972/fix-l10n-fetching-from-theme-13
[stable13] Load apps/APP/l10n/*.js and themes/THEME/apps/APP/l10n/*.js
2018-10-23 11:50:34 +02:00
Morris Jobke 28fa1e3c7d Load apps/APP/l10n/*.js and themes/THEME/apps/APP/l10n/*.js
Before it quit right after finding the theme version of the l10n file which results in a not translated part of the UI.

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-23 10:35:33 +02:00
Georg Ehrke aa94064cf5 move disableFreeBusy check from User principal backend to Scheduling Outbox collection. This allows to keep local delivery of scheduling messages while prohibiting FreeBusy requests
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-10-23 10:07:31 +02:00
Georg Ehrke 879538c22f filter null values for UserManager::getByEmail
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-10-22 15:54:41 +02:00
Roeland Jago Douma 998b646f97 Do not emit preHooks twice on non-part-storage
The old code would emit the hooks twice. Thus having the version written
twice. Which is not very performant as it is first read twice as well.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-21 13:59:00 +02:00
Roeland Jago Douma e3a2b9e3e6 Merge pull request #11857 from nextcloud/backport/10942/longer-password-reset-time
[stable13] Change password expiration time from 12h to 7d
2018-10-17 22:14:31 +02:00
Morris Jobke 7613801a58 Change password expiration time from 12h to 7d
We use the same logic for creating accounts without a password and there the 12h is a bit short. Users don't expect that the signup link needs to be clicked within 12h - 7d should be a more expected behavior.

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-16 09:24:38 +02:00
Morris Jobke 329c2108b5 Merge pull request #11762 from nextcloud/stable13-11756-ignore-session-lifetime-if-it-can-not-be-converted-to-a-number
[stable13] Ignore "session_lifetime" if it can not be converted to a number
2018-10-11 13:25:38 +02:00
Daniel Calviño Sánchez 9eff0e5882 Ignore "session_lifetime" if it can not be converted to a number
When "session_lifetime" can not be converted to a number the interval
becomes a NaN due to dividing it by 2. This NaN was "dragged" over all
the other mathematical operations and caused the heartbeat to be post
again and again due to an infinite loop with no pauses in "setInterval".
Now, the interval is set to the default value instead if the
"session_lifetime" can not be converted to a number.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-10-11 12:11:10 +02:00
Morris Jobke 078c1088b6 Merge pull request #11752 from nextcloud/release/13.0.7
13.0.7
2018-10-11 09:36:24 +02:00
Roeland Jago Douma 85005450d7 13.0.7
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-11 08:56:57 +02:00
Morris Jobke 9ee44a0879 Merge pull request #11739 from nextcloud/backport/11733/fix-setupcheck-13
[stable13] Fix a misleading setup check for .well-known/caldav & carddav
2018-10-11 08:51:17 +02:00
Morris Jobke ece4cfb0fb Fix a misleading setup check for .well-known/caldav & carddav
The problem is that the version without the slash is the correct one.

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-10 15:54:44 +02:00
Nextcloud bot 97b6b53d5c [tx-robot] updated from transifex 2018-10-10 00:13:36 +00:00
Morris Jobke c33167be5e Merge pull request #11713 from nextcloud/version/noid/13.0.7RC2
13.0.7 RC 2
2018-10-09 15:49:45 +02:00
Morris Jobke ce3b50c4f4 13.0.7 RC 2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-09 14:24:57 +02:00
Morris Jobke 048f99620a Merge pull request #11704 from nextcloud/backport/11677/stable13
[13] Allow the creationg of previews of files stored in appdata
2018-10-09 13:32:44 +02:00
Morris Jobke e93106a3b9 Merge pull request #11707 from nextcloud/backport/11705/update-crl-13
[stable13] Update CRL due to changed cert for linkshareex
2018-10-09 13:15:09 +02:00
Morris Jobke 1aefb61018 Update CRL due to changed cert for linkshareex
See https://github.com/nextcloud/app-certificate-requests/pull/193

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-09 11:58:03 +02:00
Roeland Jago Douma 32b4e4214f Allow the creationg of previews of files stored in appdata
To allow us to create previews of files stored in appdata we need to
construct the view differently.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-10-09 11:50:02 +02:00
Nextcloud bot 9ec76ba603 [tx-robot] updated from transifex 2018-10-09 00:12:46 +00:00
Nextcloud bot d632ddce04 [tx-robot] updated from transifex 2018-10-08 00:13:13 +00:00
Nextcloud bot 8d96b3790d [tx-robot] updated from transifex 2018-10-07 00:12:38 +00:00
Nextcloud bot 642a19c2b5 [tx-robot] updated from transifex 2018-10-06 00:12:31 +00:00
Nextcloud bot fbab9d66d6 [tx-robot] updated from transifex 2018-10-05 00:13:21 +00:00
Morris Jobke d11e40733d Merge pull request #11589 from nextcloud/version/noid/13.0.7RC1
13.0.7 RC 1
2018-10-04 17:18:58 +02:00
Morris Jobke d852daa354 13.0.7 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-04 16:37:48 +02:00
Robin Appelman 2e328c1050 use a dummy database name for the default postgres database name
For some reason the docker image does not setup the permissions correctly,
by using a different name the nextcloud installer will create the database instead
with the correct permissions

Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-10-04 16:37:48 +02:00
Nextcloud bot 99c5005114 [tx-robot] updated from transifex 2018-10-04 00:12:27 +00:00
Nextcloud bot 8ef7d31599 [tx-robot] updated from transifex 2018-10-03 16:59:11 +00:00
Morris Jobke bd3d991ab6 Merge pull request #10804 from nextcloud/smb-dir-instead-of-allinfo-13
[13] prefer using dir instead of allinfo for getting smb file info
2018-10-02 19:04:15 +02:00
Roeland Jago Douma f9c14af9c2 Merge pull request #11524 from nextcloud/fix/11315/filepicker-buttons-nc13
[13] Fixes the move/copy picker buttons
2018-10-02 08:07:20 +02:00
Nextcloud bot e07611ef09 [tx-robot] updated from transifex 2018-10-02 00:13:06 +00:00
Michael Weimann 6b1663ef2d Fixes file/folder move/copy buttons
Signed-off-by: Michael Weimann <mail@michael-weimann.eu>
2018-10-01 23:10:14 +02:00
Jan-Christoph Borchardt 905097eca9 Fix buttons wrapping on long folder names
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-10-01 23:00:44 +02:00
Morris Jobke e0147a50e8 Merge pull request #11494 from nextcloud/backport/11416/show-email-authtype-none-13
[stable13] Show auth type "None" in email settings
2018-10-01 14:22:44 +02:00
Morris Jobke 35763304ab Show auth type "None" in email settings
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-10-01 10:50:54 +02:00
Nextcloud bot 052469e5e4 [tx-robot] updated from transifex 2018-10-01 00:12:49 +00:00
Nextcloud bot 0201f011c1 [tx-robot] updated from transifex 2018-09-30 00:12:16 +00:00
Nextcloud bot 7695f02852 [tx-robot] updated from transifex 2018-09-29 00:12:26 +00:00
Morris Jobke 48d359ccb6 Merge pull request #11437 from nextcloud/assemblystream-eof-13
[13] AssemblyStream is also eof if we have no more source stream
2018-09-28 17:31:42 +02:00
Robin Appelman eae523eb56 AssemblyStream is also eof if we have no more source stream
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-09-28 15:41:53 +02:00
Morris Jobke b70d8d0832 Merge pull request #11419 from nextcloud/stable13-11411-fix-checkWellKnownUrl-not-being-executed
[stable13] Fix "checkWellKnownUrl" not being run
2018-09-28 15:30:47 +02:00
Nextcloud bot 82a5732a13 [tx-robot] updated from transifex 2018-09-28 11:14:21 +00:00
Daniel Calviño Sánchez 5883695b17 Fix "checkWellKnownUrl" not being run
The check is run only if its last parameter is true; data() tries to
convert the HTML attribute string to an actual JavaScript value, so
"true" is returned as an actual boolean instead of an string; as a
strict comparison against "true" was used the result was false and thus
the checks were not run.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-09-27 18:18:22 +02:00
Morris Jobke 065ec74173 Merge pull request #10884 from nextcloud/large-share-count-performance-13
[13] Improve performance when dealing with large numbers of shares
2018-09-27 17:20:13 +02:00
Roeland Jago Douma 9c0a9a4d46 Merge pull request #11400 from nextcloud/stable13-11112-do-not-hide-the-progress-bar-while-the-chunked-upload-is-being-assembled
[stable13] Do not hide the progress bar while the chunked upload is being assembled
2018-09-27 15:40:30 +02:00
Nextcloud bot 9fa50f48f1 [tx-robot] updated from transifex 2018-09-27 00:12:37 +00:00
Daniel Calviño Sánchez 1ee3c31f85 Do not hide the progress bar while the chunked upload is being assembled
Large files are not uploaded in a single operation, but uploaded in
several chunks; once all the chunks are uploaded then the server needs
to assemble them to get the final file.

Before, once the chunks were uploaded the progress bar was hidden.
However, this was confusing for the users, as the file could still need
some time to appear in the file list due to the assembling. Now once all
the chunks are uploaded the text in the progress bar changes to inform
the user that there are still some pending operations, and only when the
file is finally assembled the progress bar is hidden.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-09-26 17:46:43 +02:00
Nextcloud bot f678794470 [tx-robot] updated from transifex 2018-09-26 00:12:33 +00:00
Nextcloud bot 8a0ced9d7e [tx-robot] updated from transifex 2018-09-25 00:12:22 +00:00
Nextcloud bot e921a9c1f4 [tx-robot] updated from transifex 2018-09-24 00:12:25 +00:00
Nextcloud bot cfc711b278 [tx-robot] updated from transifex 2018-09-23 00:12:41 +00:00
Nextcloud bot ad102f4942 [tx-robot] updated from transifex 2018-09-22 00:12:19 +00:00
Nextcloud bot f2b6e38949 [tx-robot] updated from transifex 2018-09-21 00:12:22 +00:00
Nextcloud bot c3412b2f10 [tx-robot] updated from transifex 2018-09-20 00:13:09 +00:00
blizzz df7048056d Merge pull request #11284 from nextcloud/stable13-11268-include-empty-directories-in-the-default-state-of-acceptance-tests
[stable13] Include empty directories in the default state of acceptance tests
2018-09-19 15:23:25 +02:00
Nextcloud bot a588916f64 [tx-robot] updated from transifex 2018-09-19 12:38:11 +00:00
Daniel Calviño Sánchez b9122257eb Include empty directories in the default state of acceptance tests
Before each scenario of the acceptance tests is run the Nextcloud server
is reset to a default state. To do this the full directory of the
Nextcloud server is commited to a local Git repository and then reset to
that commit when needed.

Unfortunately, Git does not support including empty directories in a
commit. Due to this, when the default state was restored, it could
happen that the file cache listed an empty directory that did not exist
because it was not properly restored (for example,
"data/appdata_*/css/icons"), and that in turn could lead to an error
when the directory was used.

Currently the only way to force Git to include an empty directory is to
add a dummy file to the directory (so it will no longer be empty,
but that should not be a problem in the affected directories, even if
the dummy file is not included in the file cache); although Git FAQ
suggests using a ".gitignore" file a ".keep" file was used instead, as
it conveys better its purpose.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-09-19 12:51:39 +02:00
Nextcloud bot 94b13c605d [tx-robot] updated from transifex 2018-09-19 00:12:34 +00:00
Nextcloud bot 1d24a509d9 [tx-robot] updated from transifex 2018-09-18 00:12:41 +00:00
Nextcloud bot ba97e60ffc [tx-robot] updated from transifex 2018-09-17 00:12:40 +00:00
Nextcloud bot f085101422 [tx-robot] updated from transifex 2018-09-16 00:12:39 +00:00
Nextcloud bot 665db6ba80 [tx-robot] updated from transifex 2018-09-15 00:12:20 +00:00
Nextcloud bot 2d9a488cf3 [tx-robot] updated from transifex 2018-09-14 00:12:43 +00:00
blizzz acce19f2a5 Merge pull request #10824 from nextcloud/backport/10820/stable13
[stable13] [LDAP] The WebUI Wizard also should not assign empty config IDs
2018-09-13 13:11:46 +02:00
blizzz 9c68ce1556 Merge pull request #10829 from nextcloud/backport/10828/mimetype-detection-broken-for-junked-uploads
[stable13] Fix mimetype detection for junked uploads
2018-09-13 10:51:06 +02:00
Nextcloud bot 8e668729b1 [tx-robot] updated from transifex 2018-09-13 00:12:22 +00:00
Nextcloud bot 95e2d5f170 [tx-robot] updated from transifex 2018-09-12 00:12:24 +00:00
Nextcloud bot a6678dfdf1 [tx-robot] updated from transifex 2018-09-11 00:12:33 +00:00
Nextcloud bot f6fbd6ee21 [tx-robot] updated from transifex 2018-09-10 00:13:47 +00:00
Nextcloud bot ef3789e16b [tx-robot] updated from transifex 2018-09-09 00:13:18 +00:00
Nextcloud bot dfa6da5a03 [tx-robot] updated from transifex 2018-09-08 00:12:42 +00:00
Nextcloud bot 7c55f20d1d [tx-robot] updated from transifex 2018-09-07 00:12:46 +00:00
Nextcloud bot 972e8c3399 [tx-robot] updated from transifex 2018-09-06 00:13:04 +00:00
Nextcloud bot a1a578114f [tx-robot] updated from transifex 2018-09-05 00:13:00 +00:00
Nextcloud bot a08fdd8750 [tx-robot] updated from transifex 2018-09-04 00:12:26 +00:00
Roeland Jago Douma 0d8c0215d0 Merge pull request #10911 from nextcloud/customproperties-ignored-list-13
[13] use the same ignored properties list for both CustomerPropertiesBackends
2018-09-03 09:04:55 +02:00
Nextcloud bot f73724b5ec [tx-robot] updated from transifex 2018-09-03 00:12:27 +00:00
Nextcloud bot 891d923a53 [tx-robot] updated from transifex 2018-09-02 00:12:45 +00:00
Nextcloud bot 90ab77d8bb [tx-robot] updated from transifex 2018-09-01 00:12:27 +00:00
Morris Jobke 2f024dcd02 Merge pull request #10902 from nextcloud/cast-timestamp-13
[13] cast timestamps older than unix epoch to 0
2018-08-31 09:09:12 +02:00
Nextcloud bot 9bde06aab3 [tx-robot] updated from transifex 2018-08-31 00:12:18 +00:00
Morris Jobke 2a973843f0 Merge pull request #10932 from nextcloud/version/noid/13.0.6
13.0.6
2018-08-30 13:15:36 +02:00
Morris Jobke 200c3b6181 13.0.6
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-08-30 10:49:25 +02:00
Nextcloud bot 9db4afce72 [tx-robot] updated from transifex 2018-08-30 00:12:18 +00:00
Nextcloud bot 2ffcba3814 [tx-robot] updated from transifex 2018-08-29 00:12:17 +00:00
Robin Appelman 8a3f6a816b use the same ignored properties list for both CustomerPropertiesBackends
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-28 18:34:04 +02:00
Christian ed5224cd46 cast timestamps older than unix epoch to 0
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-28 16:57:42 +02:00
Nextcloud bot a4daa91b42 [tx-robot] updated from transifex 2018-08-28 00:13:18 +00:00
Robin Appelman 6dae2b9250 cache parent exists status during share setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:51 +02:00
Robin Appelman e3b9e9e57c tokens can't be valid local user names
this saves searching for shares on non-public link dav requests

Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:49 +02:00
Robin Appelman 110650ff58 only determine is sharing is disabled for a user once
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:47 +02:00
Robin Appelman 237e4b7521 don't check if target dir exists when using the default share target directory
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:45 +02:00
Robin Appelman a396c37693 re-use view instances for shared storages
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:44 +02:00
Robin Appelman c897e2af8e more efficient way to detect added and removed mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:42 +02:00
Robin Appelman f2152ecda9 more efficient unique share target generation
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:39 +02:00
Robin Appelman f199e7ed17 cache OC\Files\Mount\Manager::findIn results
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:25:37 +02:00
Robin Appelman 65c8fd3b29 cache OC\Files\Mount\Manager::findIn results
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:23:01 +02:00
Robin Appelman bb092553ef use more efficient method to find mountpoint for path
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:21:20 +02:00
Robin Appelman 67ae310693 remove double loop for detecting changed mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-27 16:19:50 +02:00
Nextcloud bot 1769029910 [tx-robot] updated from transifex 2018-08-27 00:12:24 +00:00
Nextcloud bot 1aae409cc8 [tx-robot] updated from transifex 2018-08-26 00:12:42 +00:00
Nextcloud bot 8ec2c933de [tx-robot] updated from transifex 2018-08-25 00:12:43 +00:00
Roeland Jago Douma 1a016f21e6 Merge pull request #10837 from nextcloud/dav-search-no-negative-mtime-13
[13] disallow negative mtime in dav search
2018-08-24 17:46:52 +02:00
Robin Appelman d69234e339 disallow negative mtime in dav search
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-24 16:25:35 +02:00
Joas Schilling 1eeea993a8 Fix mimetype detection for junked uploads
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-08-24 10:49:08 +02:00
Morris Jobke 2d5d8b68d2 Merge pull request #10791 from nextcloud/version/noid/13.0.6RC1
13.0.6 RC 1
2018-08-24 10:23:34 +02:00
Nextcloud bot 12a3f776a1 [tx-robot] updated from transifex 2018-08-24 00:12:32 +00:00
Morris Jobke 737fcd4fac 13.0.6 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-08-23 18:15:53 +02:00
Morris Jobke 3940790e79 Merge pull request #10591 from nextcloud/smb-stat-retry-13
[13] retry smb stat on timeout
2018-08-23 18:14:40 +02:00
Arthur Schiwon 7c3339521c [LDAP] The WebUI Wizard also should not assign empty config IDs
With 689df9a843 the behaviour to assign only
non-empty config IDs was introduced. Only, this was only effective for CLI
and OCS API.

Related to #3270.

The web UI creates now also a full configuration on first load. This fixes
#5094.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-08-23 18:02:55 +02:00
Robin Appelman 5d18d142a6 assume the same timezone when using local domain names for smb
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-23 16:10:42 +02:00
Robin Appelman 05131490a7 improved fallback of timezone detection
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-23 16:10:42 +02:00
Morris Jobke 389b981aa5 Merge pull request #10285 from nextcloud/anonymous-options-13
[13] Add sabre plugin to allow anonymous options requests to the dav root
2018-08-23 16:05:56 +02:00
Morris Jobke 70fe04dada Merge pull request #10823 from nextcloud/backport/10168/allow-utf8mb4-on-maria-10.3-or-later
[stable13] MySQL 8.0+ and MariaDB 10.3+ are large prefix and barracuda by default
2018-08-23 16:02:59 +02:00
blizzz 8a8eb605b4 Merge pull request #10821 from nextcloud/backport/10471/improve-url-detection
[stable13] Improve URL detection
2018-08-23 15:25:31 +02:00
Morris Jobke 893cccba68 Merge pull request #10816 from nextcloud/backport/10700+10815/stable13
[stable13] remove unexecutable code
2018-08-23 14:58:29 +02:00
Joas Schilling d12ff2c083 MySQL 8.0+ and MariaDB 10.3+ are large prefix and barracuda by default
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-08-23 14:40:33 +02:00
Joas Schilling cd5bc9b893 Improve URL detection
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-08-23 14:03:54 +02:00
Nextcloud bot 112719f457 [tx-robot] updated from transifex 2018-08-23 00:13:11 +00:00
Arthur Schiwon f404695602 returning of $tr is expected, otherwise ending up in a JS error
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-08-23 00:31:32 +02:00
Arthur Schiwon e1e35b42de remove unexecutable code
OCA.Sharing.SharedFileInfo was never defined and that stopped execution.
Interestingly, FF never showed me an error.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-08-23 00:31:10 +02:00
Robin Appelman 48f39628d0 use dir instead of allinfo where possible 2018-08-22 14:28:56 +02:00
Morris Jobke 5bc7af2510 Merge pull request #10783 from nextcloud/backport/10775/stable13
[stable13] Resolve all group memberships properly
2018-08-22 10:51:02 +02:00
Roeland Jago Douma a4e989bb75 Merge pull request #10763 from nextcloud/backport/10687/stable13
[stable13] don't blame randome people for background email updates
2018-08-22 08:50:34 +02:00
Nextcloud bot ff3b132382 [tx-robot] updated from transifex 2018-08-22 00:12:24 +00:00
Morris Jobke 4f6f3b261a Resolve all group memberships properly
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-08-21 17:08:22 +02:00
Nextcloud bot d3ab244b40 [tx-robot] updated from transifex 2018-08-21 00:12:31 +00:00
blizzz d0f8a431c8 Merge pull request #10762 from nextcloud/backport/10260/improved-sql-for-fetching-quota
[stable13] Use the path_hash instead of the path to query the filecache
2018-08-20 15:24:39 +02:00
Arthur Schiwon bd31fe7c9b fix unit tests
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

# Conflicts:
#	apps/user_ldap/tests/User_LDAPTest.php
2018-08-20 15:16:33 +02:00
Morris Jobke 74618d1011 Merge pull request #10760 from nextcloud/backport/10355/make-sure-error-log-always-receives-a-string
[stable13] Make sure error_log() always receives a string
2018-08-20 15:12:16 +02:00
Arthur Schiwon 0f958bf595 don't force LDAP updates on userExists anymore
and remove some deprecated code

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-08-20 15:05:09 +02:00
Arthur Schiwon 7dfb837766 don't blame email address changers
the information is being collected with admin_audit

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-08-20 15:05:04 +02:00
Morris Jobke aef428733b Merge pull request #10552 from nextcloud/backport/10523/stable13
[stable13] Adding test for table schedulingobjects and fixing postgres LOB
2018-08-20 14:56:37 +02:00
blizzz ace570d723 Merge pull request #10698 from nextcloud/smb-log-removed-entries-13
[13] log entries that are hidden during file listing
2018-08-20 14:53:08 +02:00
Morris Jobke eea151fcec Merge pull request #10565 from nextcloud/stable13-10348-fix-transfering-ownership-of-a-share-to-user-with-same-id-as-receiver
[stable13] Fix transfering ownership of a share to user with same id as receiver
2018-08-20 14:52:15 +02:00
Morris Jobke 8d41d0066a Merge pull request #10735 from nextcloud/forgotten-pass-fix-link
[stable13] Forgotten pass fix link
2018-08-20 14:47:03 +02:00
Morris Jobke 1bd21fa351 Merge pull request #10761 from nextcloud/backport/10225/fix-url-generation-dav-app
[stable13] Fix call to OC.generateUrl for caldav birthday calendar on/off
2018-08-20 14:46:40 +02:00
Morris Jobke 995b4d996f Merge pull request #10759 from nextcloud/backport/10755/fix-comments-in-config-sample
[stable13] Fix comment style in config sample
2018-08-20 14:46:21 +02:00
Morris Jobke 391e693adf Use the path_hash instead of the path to query the filecache
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-08-20 14:22:52 +02:00
Daniel Kesselberg ee52136772 Fix call to OC.generateUrl for caldav birthday calendar on/off
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
2018-08-20 14:20:52 +02:00
Joas Schilling 60ced31116 Make sure error_log() always receives a string
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-08-20 14:12:08 +02:00
Morris Jobke c31e629713 Fix comment style in config sample
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-08-20 14:08:00 +02:00
Nextcloud bot f2f723c7c8 [tx-robot] updated from transifex 2018-08-20 00:12:36 +00:00
Nextcloud bot ff8626f46e [tx-robot] updated from transifex 2018-08-18 00:12:45 +00:00
John Molakvoæ (skjnldsv) c428c7c2bf Do not bind reset password link if an url is set
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-08-17 17:07:43 +02:00
Nextcloud bot 47ea2c17fd [tx-robot] updated from transifex 2018-08-16 00:12:35 +00:00
Robin Appelman b2685eb4ee log entries that are hidden during file listing
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-16 01:16:53 +02:00
blizzz 853e55e31a Merge pull request #10646 from nextcloud/fix-password-reset-stable13
[stable13] only warn about data lose on password reset if per-user keys are used
2018-08-15 19:08:11 +02:00
Nextcloud bot 294baf8e5d [tx-robot] updated from transifex 2018-08-15 00:13:48 +00:00
Roeland Jago Douma 1a3a0b4617 Merge pull request #10682 from nextcloud/backport/10680/stable13
[stable13] Update the scope of the lockdownmanager
2018-08-14 14:29:35 +02:00
Roeland Jago Douma b31cea9048 Update the scope of the lockdownmanager
We have the token anyway. So better the scope as well.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-08-14 13:16:07 +02:00
Nextcloud bot 015c66b94f [tx-robot] updated from transifex 2018-08-14 00:12:15 +00:00
blizzz c938ea6569 Merge pull request #10620 from nextcloud/mimetype-insert-if-not-exists-13
[13] use insertIfNotExists to store new mimetypes.
2018-08-13 23:16:00 +02:00
Nextcloud bot 5327e3b4ce [tx-robot] updated from transifex 2018-08-13 00:12:18 +00:00
Nextcloud bot 7ed7c8e37a [tx-robot] updated from transifex 2018-08-11 00:12:39 +00:00
Bjoern Schiessle 5b54b8cba2 update unit tests
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-08-10 17:26:11 +02:00
Bjoern Schiessle 9665637cd8 only warn about data lose on password reset if per-user keys are used
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-08-10 16:54:55 +02:00
Roeland Jago Douma abef061686 Merge pull request #10581 from nextcloud/encryption-s3-fix-stable13
make file cache updates more robust
2018-08-10 08:10:03 +02:00
Nextcloud bot 93df97f1bf [tx-robot] updated from transifex 2018-08-10 00:12:36 +00:00
Robin Appelman 706813ab08 use insertIfNotExists to store new mimetypes.
Also throw an error if we can't find the mimetype after insert

Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-09 15:31:47 +02:00
Robin Appelman 0450406c50 retry stat on timeout
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-08-08 16:15:31 +02:00
Bjoern Schiessle be172cc6f2 make file cache updates more robust
only update the encrypted version after the write operation is finished and the stream is closed

Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-08-08 10:46:14 +02:00
Nextcloud bot a5985ad0f4 [tx-robot] updated from transifex 2018-08-08 00:13:28 +00:00
Daniel Calviño Sánchez 5da4e4dc53 Fix transfering ownership of a share to user with same id as receiver
When the ownership of a user share is transfered to the receiver the
share is removed, as the receiver now owns the original file. However,
due to a missing condition, any share with a group, link or remote with
the same id as the user was removed, not only the user shares.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-08-07 09:09:01 +02:00
Nextcloud bot f6c8668a7e [tx-robot] updated from transifex 2018-08-07 00:12:15 +00:00
Thomas Müller 32701e261b Adding test for table schedulingobjects and fixing postgres LOB
(cherry picked from commit afd4ebf0404e8bcd7cba0bec2dce177e97632f8a)

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
2018-08-06 17:20:49 +02:00
Nextcloud bot 8e0e5a6b28 [tx-robot] updated from transifex 2018-08-06 00:12:30 +00:00
Nextcloud bot 66d74f6e56 [tx-robot] updated from transifex 2018-08-05 00:12:38 +00:00
Nextcloud bot 69af30b883 [tx-robot] updated from transifex 2018-08-04 00:12:47 +00:00
Nextcloud bot b02d1c8358 [tx-robot] updated from transifex 2018-08-03 00:12:32 +00:00
Nextcloud bot ddd6c72b1f [tx-robot] updated from transifex 2018-08-02 00:12:46 +00:00
Nextcloud bot 6e449f13cd [tx-robot] updated from transifex 2018-08-01 00:12:09 +00:00
Nextcloud bot ab6741427b [tx-robot] updated from transifex 2018-07-31 00:12:21 +00:00
Nextcloud bot f4b4fcf8e4 [tx-robot] updated from transifex 2018-07-30 00:12:17 +00:00
Nextcloud bot 9ba794c067 [tx-robot] updated from transifex 2018-07-28 00:12:17 +00:00
Nextcloud bot 628a0434a5 [tx-robot] updated from transifex 2018-07-27 00:12:29 +00:00
Nextcloud bot 0802675f47 [tx-robot] updated from transifex 2018-07-26 00:12:13 +00:00
Nextcloud bot ca139a4a81 [tx-robot] updated from transifex 2018-07-25 00:12:44 +00:00
Roeland Jago Douma e39f410a2b Merge pull request #10376 from nextcloud/background-scan-root-13
[13] Do scan the root storage in background scan
2018-07-24 16:17:29 +02:00
Robin Appelman 8aeafc63a1 Do scan the root storage in background scan
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-24 15:45:51 +02:00
Nextcloud bot ad16affc9e [tx-robot] updated from transifex 2018-07-24 00:12:13 +00:00
Morris Jobke 1a082ab2a2 Merge pull request #10350 from nextcloud/version/noid/13.0.5
13.0.5
2018-07-23 12:47:15 +02:00
Morris Jobke dbff6b4dfe 13.0.5
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-07-23 10:52:03 +02:00
Joas Schilling 9e7197cbcc Do not parse HTML in user id and display name
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-23 10:51:25 +02:00
Nextcloud bot ab7b4d2597 [tx-robot] updated from transifex 2018-07-23 00:12:14 +00:00
Nextcloud bot ebe599df4d [tx-robot] updated from transifex 2018-07-22 00:12:51 +00:00
Nextcloud bot ed989326fb [tx-robot] updated from transifex 2018-07-21 00:12:12 +00:00
Nextcloud bot 98ffebe21e [tx-robot] updated from transifex 2018-07-20 00:12:18 +00:00
Nextcloud bot bfd533b2f1 [tx-robot] updated from transifex 2018-07-19 00:12:14 +00:00
Robin Appelman 1a1b7b1d33 adjust to older library version
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-18 16:01:56 +02:00
Robin Appelman 94a367910e Fix lazy search backend
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-18 16:01:02 +02:00
Robin Appelman 821d658ec3 Fix search related results in OPTIONS requests
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-18 15:32:58 +02:00
Robin Appelman 01eb420a1e Add tests for handling anonymous auth
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-18 15:20:22 +02:00
Robin Appelman 01413281db Add sabre plugin to allow anonymous options requests to the dav root
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-18 15:20:15 +02:00
Nextcloud bot 86279015e8 [tx-robot] updated from transifex 2018-07-18 00:12:15 +00:00
Nextcloud bot 9a92629a94 [tx-robot] updated from transifex 2018-07-17 00:12:18 +00:00
Morris Jobke 43785cf1a8 Merge pull request #10236 from nextcloud/version/noid/13.0.5RC2
13.0.5 RC 2
2018-07-16 09:48:00 +02:00
Nextcloud bot 96463faaf1 [tx-robot] updated from transifex 2018-07-16 00:12:20 +00:00
Nextcloud bot 706ff0011f [tx-robot] updated from transifex 2018-07-15 00:12:15 +00:00
Nextcloud bot 807662f0f1 [tx-robot] updated from transifex 2018-07-14 00:12:25 +00:00
Morris Jobke 9ef0a2eb82 13.0.5 RC 2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-07-13 17:53:13 +02:00
Morris Jobke 761daeab1e Merge pull request #10233 from nextcloud/backport/10227/ldap-bind-loop
[stable13] Only bind to ldap if configuration for the first server is set
2018-07-13 17:52:49 +02:00
Julius Härtl 9f9f1d8cb0 Fix tests for backup ldap server connection
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-13 15:42:34 +02:00
Julius Härtl 7c8cec808f Only bind if configuration for the first server is available
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-07-13 15:42:31 +02:00
Nextcloud bot 30dea9906a [tx-robot] updated from transifex 2018-07-13 00:12:14 +00:00
Morris Jobke 31d30f5657 Merge pull request #10172 from nextcloud/version/noid/13.0.5RC1
13.0.5 RC 1
2018-07-12 13:25:41 +02:00
Morris Jobke 69ff4dd5c6 13.0.5 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-07-12 12:21:59 +02:00
Roeland Jago Douma 2639533422 Merge pull request #10201 from nextcloud/smb-rename-invalidargument-retry-13
[13] also retry rename operation on InvalidArgumentException
2018-07-12 09:49:43 +02:00
Nextcloud bot dc0fd5f2d2 [tx-robot] updated from transifex 2018-07-12 00:12:52 +00:00
Roeland Jago Douma 9c5b1852ca Use ILogger for consts
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-07-11 22:43:34 +02:00
Roeland Jago Douma b660dd8d74 Merge pull request #10202 from nextcloud/backport/10199/improve-url-detection-in-comments
[stable13] Improve url detection in comments
2018-07-11 19:46:17 +02:00
Joas Schilling f879ea142d Improve url detection in comments
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-11 16:40:16 +02:00
Robin Appelman 4f9aac4002 also retry rename operation on InvalidArgumentException
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-11 16:38:35 +02:00
Morris Jobke e8af003b41 Merge pull request #10195 from nextcloud/backport/10193/sanitize-parameter-13
[stable13] Sanitize parameters in createSessionToken() while logging
2018-07-11 16:31:01 +02:00
Morris Jobke d88da34f95 Sanitize parameters in createSessionToken() while logging
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-07-11 14:45:13 +02:00
Morris Jobke 73c1fa6b64 Merge pull request #10115 from nextcloud/backport/10098/ldap-image-attribute
[stable13] allow admin to disable fetching of avatars as well as a specific attribute
2018-07-11 11:45:26 +02:00
Morris Jobke cc09db6c5b Merge pull request #10189 from nextcloud/backport/10020/email-address-misparsed-in-comments-and-chat
[stable13] Fix "parsing" of email-addresses in comments and chat messages
2018-07-11 11:41:32 +02:00
Morris Jobke a9b4be205a Merge pull request #10188 from nextcloud/backport/10078/invalid-actor-and-calendar-for-link-shares
[stable13] Correctly parse the subject parameters for link (un)shares of calendars
2018-07-11 11:41:11 +02:00
Morris Jobke 5f029e6136 Merge pull request #10185 from nextcloud/backport/10161/correctly-handle-users-with-numeric-user-ids-13
[stable13] Correctly handle users with numeric user ids
2018-07-11 10:03:27 +02:00
Morris Jobke 9d3a4b428d Merge pull request #10186 from nextcloud/backport/10156/behat-3.3
[stable13] Fix the behat version to 3.3.*
2018-07-11 10:03:01 +02:00
Morris Jobke 4ff6ea9a55 Merge pull request #10170 from nextcloud/backport/9823/stable13
[stable13] Allow updating the token on session regeneration
2018-07-11 10:02:30 +02:00
Joas Schilling 4e99dc2318 Fix "parsing" of email-addresses in comments and chat messages
\\b matches any non-word character, including \@ and \-
In order to not detect urls in the middle of email-addresses,
we need to check for white space characters and beginning of the
message instead.

Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-11 09:51:59 +02:00
Joas Schilling 77f7a95699 Correctly parse the subject parameters for link (un)shares of calendars
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-11 09:45:10 +02:00
John Molakvoæ c99529834c Merge pull request #10169 from nextcloud/backport/9955/stable13
[stable13] Request a valid property for DAV opendir
2018-07-11 09:42:20 +02:00
Joas Schilling 33bde0f62a Fix the behat version to 3.3.*
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-11 09:32:26 +02:00
Joas Schilling 03a6b2b49a Correctly handle users with numeric user ids
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-07-11 09:26:29 +02:00
Morris Jobke 922c2c64b5 Merge pull request #10180 from nextcloud/lock-negative-13
[13] prevent lock values from going negative with memcache backend
2018-07-11 09:02:19 +02:00
Nextcloud bot ef1a695707 [tx-robot] updated from transifex 2018-07-11 00:12:24 +00:00
Robin Appelman 1fa6115779 prevent lock values from going negative with memcache backend
This can be caused by the code releasing more locks then it acquires,
once the lock value becomes negative it's likely that it will never be able
to change into an exclusive lock again.

Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-10 17:50:45 +02:00
Nextcloud bot 7843a9b21a [tx-robot] updated from transifex 2018-07-10 08:21:28 +00:00
Roeland Jago Douma f84789f88b Allow updating the token on session regeneration
Sometimes when we force a session regeneration we want to update the
current token for this session.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-07-09 16:27:12 +02:00
Roeland Jago Douma d03b389b56 Request a valid property for DAV opendir
Apperently Sabre and Onedrive are not friends when requesting a single
404 property. I need to dig deeper on why this is. Anyways requesting a
valid property makes it work like a charm.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-07-09 16:07:04 +02:00
Morris Jobke 57ca183ea4 Merge pull request #10166 from nextcloud/backport/10039/codecov-disabling
[stable13] Disable codecov status and comment
2018-07-09 15:51:06 +02:00
Morris Jobke 0404acfc81 Merge pull request #10165 from nextcloud/backport/9914/settings-wording-13
[stable13] Fixed English grammatical error on Settings page.
2018-07-09 15:50:25 +02:00
Morris Jobke 9ba31f3565 Merge pull request #10164 from nextcloud/backport/9893/update-message-13
[stable13] Update message shown when unsharing a file
2018-07-09 15:38:44 +02:00
Morris Jobke 00e632eec1 Disable codecov status and comment
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-07-09 15:30:53 +02:00
Jaczel f774a88927 Fixed English grammatical error on Settings page. 2018-07-09 15:22:21 +02:00
Kevin Ndung'u 1bd58c1718 Update message shown when unsharing a file
Signed-off-by: Kevin Ndung'u <kevgathuku@gmail.com>
2018-07-09 15:16:59 +02:00
Morris Jobke 83d99449d0 Merge pull request #10121 from nextcloud/stable13-allow-disable-encryption
[stable13] allow to disable encryption
2018-07-09 14:46:06 +02:00
Bjoern Schiessle 3a45bb52bc allow to disable encryption
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-07-05 17:24:09 +02:00
Arthur Schiwon 7f78958056 adjust and add more unit tests
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-07-05 12:50:08 +02:00
Arthur Schiwon 37a20cede1 allow admin to disable fetching of avatars as well as a specific attribute
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-07-05 12:26:45 +02:00
blizzz 486dff0934 Merge pull request #10089 from nextcloud/backport/10083/stable13
[stable13] let user set avatar in nextcloud von LDAP provides invalid image data
2018-07-05 00:54:04 +02:00
Morris Jobke f5bbe21155 Merge pull request #10093 from nextcloud/smb-log-connection-errors-13
[13] Improved logging of smb connection errors
2018-07-03 23:05:58 +02:00
Robin Appelman 6d68d34f2f Improved logging of smb connection errors
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-07-03 18:12:31 +02:00
Arthur Schiwon 55a6851791 let user set avatar in nextcloud von LDAP provides invalid image data
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-07-03 13:12:00 +02:00
blizzz d1df33a190 Merge pull request #10076 from nextcloud/backport/10034/stable13
[stable13] lower log level for quota manipulation cases
2018-07-02 13:10:33 +02:00
Arthur Schiwon ea62d7a9f5 constants belong to Util in 13
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-07-02 12:51:51 +02:00
Arthur Schiwon 56aaa40dde lower log level for quota manipulation cases
and simplify the forest of ifs a little bit

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-07-02 11:53:49 +02:00
Morris Jobke 42de484162 Merge pull request #10044 from nextcloud/stable13-10040-fix-filenames-in-sharing-integration-tests
[stable13] Fix filenames in sharing integration tests
2018-06-29 09:03:20 +02:00
Daniel Calviño Sánchez eeab10df11 Check all paths for own files and shares
Add "PARENT (2)" and its subdirectories to the paths to be checked, as
before only the own "PARENT" folder was being checked, but not the
shared one.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-29 08:21:55 +02:00
Daniel Calviño Sánchez 6d9b322413 Fix filenames in sharing integration tests
When a file is shared and the receiver of the share already has a file
with the same name that file is left untouched, and "(2)" is appended to
the name of the shared file.

As "textfile0.txt" is included in the user folder skeleton all the users
in the integration test have that file, so when it is shared the
receiver sees the share as "/textfile0 (2).txt", and her own file as
"/textfile0.txt".

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-29 08:21:55 +02:00
Nextcloud bot 37063bc657 [tx-robot] updated from transifex 2018-06-29 00:12:27 +00:00
Morris Jobke a5dfc3e0ee Merge pull request #10032 from nextcloud/backport/10031/stable13
[stable13] LDAP backup server should not be queried when auth fails
2018-06-28 08:39:58 +02:00
Nextcloud bot 6292c4857d [tx-robot] updated from transifex 2018-06-28 00:12:40 +00:00
Arthur Schiwon 993342f6a1 LDAP backup server should not be queried when auth fails
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-06-27 23:15:44 +02:00
Nextcloud bot fb9f4e3ebf [tx-robot] updated from transifex 2018-06-27 10:06:32 +00:00
Nextcloud bot c4e79862c4 [tx-robot] updated from transifex 2018-06-27 00:12:10 +00:00
Roeland Jago Douma f69c7d7d6c Merge pull request #9986 from nextcloud/dav-upload-no-partfile-lock-13
[13] properly lock the target file on dav upload when not using part files
2018-06-26 09:15:12 +02:00
Nextcloud bot 257c7191b3 [tx-robot] updated from transifex 2018-06-26 00:12:27 +00:00
Robin Appelman 547177b482 properly lock the target file on dav upload when not using part files
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-06-25 12:18:18 +02:00
Nextcloud bot ea89600ca0 [tx-robot] updated from transifex 2018-06-25 00:12:07 +00:00
Nextcloud bot 38040951f5 [tx-robot] updated from transifex 2018-06-24 00:12:26 +00:00
Nextcloud bot 891bd63310 [tx-robot] updated from transifex 2018-06-23 00:13:03 +00:00
John Molakvoæ 64b3614182 Merge pull request #9958 from nextcloud/backport/7818/stable13
[stable13] Log full exception in cron instead of only the message
2018-06-22 07:37:11 +02:00
Nextcloud bot 3ac6f4d504 [tx-robot] updated from transifex 2018-06-22 00:12:31 +00:00
Morris Jobke 20f1523c0e Log full exception in cron instead of only the message
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-21 23:17:45 +02:00
Nextcloud bot 869aa64d0d [tx-robot] updated from transifex 2018-06-21 00:13:07 +00:00
Nextcloud bot 4d8285553a [tx-robot] updated from transifex 2018-06-20 00:12:46 +00:00
John Molakvoæ 6a29c408e5 Merge pull request #9843 from nextcloud/backport/9724/stable13
[stable13] Add parent index to share table
2018-06-19 16:02:13 +02:00
Nextcloud bot 54bc862c9d [tx-robot] updated from transifex 2018-06-19 00:13:16 +00:00
Nextcloud bot 1b940a3c7e [tx-robot] updated from transifex 2018-06-18 00:12:54 +00:00
Nextcloud bot 6bc2a993f7 [tx-robot] updated from transifex 2018-06-17 00:13:08 +00:00
Nextcloud bot 3214e69761 [tx-robot] updated from transifex 2018-06-16 00:13:34 +00:00
Nextcloud bot 64835d0acd [tx-robot] updated from transifex 2018-06-15 00:13:10 +00:00
Nextcloud bot a5425c7029 [tx-robot] updated from transifex 2018-06-14 00:13:26 +00:00
Roeland Jago Douma 0fa82e585f Merge pull request #9837 from nextcloud/stable13-9807-fix-highlighting-of-the-upload-drop-zone
[stable13] Fix highlighting of the upload drop zone
2018-06-13 08:30:50 +02:00
John Molakvoæ 0d9c33838b Merge pull request #9839 from nextcloud/backport/8221/stable13
[stable13] Apply ldapUserFilter on members of group
2018-06-13 06:55:41 +02:00
Nextcloud bot cf8860e5ba [tx-robot] updated from transifex 2018-06-13 00:13:22 +00:00
blizzz f43fb0d5d0 Merge pull request #9844 from nextcloud/backport/9276/remove-unused-config-sample
[stable13] Remove unused config option
2018-06-12 23:33:53 +02:00
Morris Jobke 8a98b44fc4 Remove unused config option
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-12 22:27:08 +02:00
Morris Jobke 6945e1fae6 Merge pull request #9841 from nextcloud/backport/9814/stable13
[stable13] Make the DELETION of groups match greedy on the groupID
2018-06-12 22:17:25 +02:00
Roeland Jago Douma 191cc74386 Add parent index to share table
Fixes #9327

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-06-12 21:09:20 +02:00
Roeland Jago Douma d269258ac9 Make the DELETION of groups match greedy on the groupID
fixes #6032

Now since the match is greedy it will also eat the /

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-06-12 20:58:13 +02:00
Roland Tapken ed78703275 dn2ocname: also apply group filter to readAttribute()
Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
2018-06-12 18:21:22 +02:00
Roland Tapken 57a8fa1b22 Apply ldapUserFilter on members of group
Refers to issue #8220

user_ldap configured with custom filters for active directory access
(group-member-association is "member"). Then it can happen that the
members of a group contain members that don't belong to the users
available in Nextcloud (the most trivial reason is that the user filter
contains "(!(UserAccountControl:1.2.840.113556.1.4.803:=2))" to exclude
disabled users from being imported).

This can be fixed by applying the ldapUserFilter when resolving the UID
for a DN fetched from the group's member list.

Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
2018-06-12 18:21:11 +02:00
Daniel Calviño Sánchez 85d9264a14 Do not show an error message when draging and dropping text
When the browser reports a drag of items other than files (for example,
text) and then triggers a drop event with no files no error message
should be shown to the user, as in that case there would be no highlight
of the drop zone and no indication that the drop would be valid (except
for the mouse cursor); the error message should be shown only when
the drop event with no files follows a file drag.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-12 15:25:50 +02:00
Daniel Calviño Sánchez d4143af5ed Remove no longer needed special handling for Firefox
The highlighting was removed in Firefox when the cursor was no longer
moving to handle the behaviour of reporting a file drag and then
providing no files in the drop event. That behaviour (which was only
present in Firefox 48 and 49) is already handled with the "dropnofiles"
callback, so that special handling is no longer needed.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-12 15:25:50 +02:00
Daniel Calviño Sánchez d462ae8507 Use "dropnofiles" callback to disable the drop state in the UI
When a file is dragged from the desktop to the file list the file list
is highlighted, and when the file is finally dropped or the drag
operation is cancelled the highlighting is removed. In some cases, due
to a wrong implementation, a browser may end a file drag with a drop
with no files (for example, when a folder or text is dragged), which
would cause the highlight to not be removed. Now those cases are handled
with the "dropnofiles" callback, which restores the UI and also shows a
message to the user.

The error message is just a generic one, as in some cases it is not even
possible to know whether the problem came from a text drag or a folder
drag, and whether the problem appears or not depends on the browser,
version and even operating system.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-12 15:25:50 +02:00
Daniel Calviño Sánchez 97d6f634b4 Add callback to clean up after misbehaved drag and drop events
The jQuery Plugin triggers the "dragover" callback when the browser
triggers the "dragover" event and the types in their DataTransfer
include a "Files" item. It also triggers the "drop" callback when the
browser triggers the "drop" event and the list of files in its
DataTransfer is not empty.

Unfortunately some browsers may trigger "dragover" events with a
DataTransfer that includes a "Files" item and then trigger a "drop"
event with an empty list of files. When that happens the actions
performed in the "dragXXX" callbacks could be left hanging if they were
expected to be finished in the "drop" callback (for example, if the drop
zone was highlighted during the drag to be then restored when the file
was finally dropped). This commit adds the "dropnofiles" callback to be
able to handle those situations.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-12 15:25:50 +02:00
Daniel Calviño Sánchez 981b757099 Remove duplicated code
"disableDropState" was set as the event handler in 8d4e5747f3, but
the duplicated code was accidentally added back in 786e858d23.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-06-12 15:25:50 +02:00
Nextcloud bot 59a27ceb13 [tx-robot] updated from transifex 2018-06-12 00:13:07 +00:00
Morris Jobke 5c97dc3de3 Merge pull request #9821 from nextcloud/version/noid/13.0.4
13.0.4
2018-06-11 10:21:04 +02:00
Morris Jobke b8ab0a031d 13.0.4
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-11 09:50:54 +02:00
Roeland Jago Douma dfd7ea3c45 Merge pull request #9820 from nextcloud/backport/9798/stable13
[stable13] enable caldav for webdav subtree public-calendars
2018-06-11 09:49:50 +02:00
John Molakvoæ bf7620d868 Merge pull request #9803 from nextcloud/backport/9802/stable13
[stable13] Make the token expiration also work for autocasting 0
2018-06-11 09:16:57 +02:00
Georg Ehrke fa0c51d1dd enable caldav for webdav subtree public-calendars
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-06-11 09:15:26 +02:00
Nextcloud bot ebdd9a0408 [tx-robot] updated from transifex 2018-06-11 00:12:58 +00:00
Nextcloud bot c56da1aaab [tx-robot] updated from transifex 2018-06-10 00:13:21 +00:00
Nextcloud bot 5cd6d9c4a3 [tx-robot] updated from transifex 2018-06-09 00:13:26 +00:00
Roeland Jago Douma 88c7c6abe3 Make the token expiration also work for autocasting 0
Some bad databases don't respect the default null apprently.
Now even if they cast it to 0 it should work just fine.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-06-08 16:26:30 +02:00
Nextcloud bot c55e842478 [tx-robot] updated from transifex 2018-06-08 00:13:15 +00:00
Morris Jobke 98e9bc33e0 Merge pull request #9788 from nextcloud/notify-credentials-env-13
[13] allow setting notify credentials in environment
2018-06-07 16:14:03 +02:00
Robin Appelman 642bdb5bb5 allow setting notify credentials in environment
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-06-07 15:47:36 +02:00
Morris Jobke 8a0093d9ca Merge pull request #9778 from nextcloud/version/noid/13.0.3
13.0.3
2018-06-07 11:43:51 +02:00
Morris Jobke 299c47a565 13.0.3
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-07 11:23:48 +02:00
Nextcloud bot a19310e2cf [tx-robot] updated from transifex 2018-06-07 00:13:06 +00:00
Nextcloud bot 9009d0cae8 [tx-robot] updated from transifex 2018-06-06 00:12:58 +00:00
Morris Jobke b5b17b0ed0 Merge pull request #9731 from nextcloud/version/noid/13.0.3RC2
13.0.3 RC 2
2018-06-04 17:37:19 +02:00
Morris Jobke 80ae131e3b 13.0.3 RC 2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-04 16:47:54 +02:00
Morris Jobke e656c8e98b Merge pull request #9732 from nextcloud/stable13-fix-contacts-menu-local-null-check
[stable13] Fix local users check in contacts menu
2018-06-04 16:41:28 +02:00
Christoph Wurst e5fb98d9fc Fix syntax for php5.6
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2018-06-04 15:12:57 +02:00
Christoph Wurst 2b0ae6df9f Fix local users check in contacts menu
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2018-06-04 15:05:40 +02:00
Morris Jobke 778c411e6c Merge pull request #9727 from nextcloud/nav-fix
[stable13] Fix header nav
2018-06-04 14:22:16 +02:00
John Molakvoæ (skjnldsv) 0159d4419d [stable13] Fix header nav
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-06-04 11:38:45 +02:00
Nextcloud bot 4eea45d981 [tx-robot] updated from transifex 2018-06-04 00:12:47 +00:00
Nextcloud bot 6d3cef1493 [tx-robot] updated from transifex 2018-06-03 00:13:09 +00:00
Nextcloud bot 9dd9da60cc [tx-robot] updated from transifex 2018-06-02 00:12:51 +00:00
Morris Jobke c04ba4b7af Merge pull request #9700 from nextcloud/version/noid/13.0.3RC1
13.0.3 RC 1
2018-06-01 15:08:57 +02:00
Morris Jobke 337838a49d 13.0.3 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-06-01 14:41:37 +02:00
Morris Jobke 52b3582250 Merge pull request #9712 from nextcloud/backport/9711/stable13
[stable13] Fix the unit tests
2018-06-01 14:41:14 +02:00
Roeland Jago Douma 718bfb8c3f Fix the master unit tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-06-01 14:16:38 +02:00
Morris Jobke 271bbaa809 Merge pull request #9610 from nextcloud/bugfix-stable13/3830/invitations_for_shared_calendars
[stable13] send invitations for shared calendars
2018-06-01 12:37:07 +02:00
Morris Jobke cf4ff7716e Merge pull request #9694 from nextcloud/backport/9692/stable13
[stable13] Make sure the log doesn't try to read from PUT if it can't
2018-06-01 12:21:26 +02:00
Morris Jobke 5c92da2269 Merge pull request #9707 from nextcloud/bugfix-stable13/noid/override_freebusy_sharing_rules
[stable13] allow admins to override FreeBusy capabilities without modifying ShareAPI capabilities
2018-06-01 12:01:43 +02:00
Nextcloud bot 3595aa68b9 [tx-robot] updated from transifex 2018-06-01 00:12:48 +00:00
Roeland Jago Douma f7372bea86 Merge pull request #9655 from nextcloud/backport/9268/stable13
[stable13] Do not load calendar/addressbook plugins if not needed
2018-05-31 19:53:07 +02:00
Georg Ehrke 08ad45e40b allow admins to override FreeBusy capabilities without modifying ShareAPI capabilities
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-05-31 18:55:55 +02:00
Morris Jobke d62f5c10d3 Remove not needed change
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-31 17:20:33 +02:00
Morris Jobke fa41a4cc21 Remove type hints for PHP 5.6
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-31 17:16:47 +02:00
Nextcloud bot cc6317f2af [tx-robot] updated from transifex 2018-05-31 00:13:02 +00:00
Roeland Jago Douma 188a41a2be Make sure the log doesn't try to read from PUT if it can't
If a PUT request comes in that is not JSON or from encoded. Then we can
only read it (exactly) once. If that is the case we must assume no
shared secret is set.

If we don't then we either are the first to read it, thus causing the
real read of the data to fail.

Or we are later and then it throws an exception (also failing the
request).

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 20:16:18 +02:00
Roeland Jago Douma 4fae9bedc9 Move repairstep to a custom command
People that have issues can run it manually

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:52 +02:00
Roeland Jago Douma 29f1ea2fbe Fix tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:51 +02:00
Roeland Jago Douma 1ea356cd6a Adding repair step which cleans shares of invalid principals
https://github.com/owncloud/core/pull/30149/commits/edacf22fbce4deefc181c53dd84c5fb278a9a28d

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:51 +02:00
Roeland Jago Douma 0f88f3f00e CalDAV and CardDAV plugins need to be registered for the principals collection as well
https://github.com/owncloud/core/pull/30149/commits/9f2e6431b88a9635b291b0e824abf74ba766616d

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:51 +02:00
Roeland Jago Douma 3a133b151f When sharing calendars and addressbooks the principal has to be verified to be valid
https://github.com/owncloud/core/pull/30149/commits/d3fb8fcdd3a6b00bde0c3c9eb4039876e7fc1967

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:51 +02:00
Roeland Jago Douma ed0069b8e6 Do not load calendar/addressbook plugins if not needed
Fixes #6711
Based on https://github.com/owncloud/core/pull/30149/commits/f0fb21cf3563088284c56be4eac48c7d9725cb21

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-30 13:27:51 +02:00
Morris Jobke 4c1f88efb1 Merge pull request #9654 from nextcloud/backport/9360/stable13
[stable13] Fix "Invalid argument supplied for foreach()"
2018-05-30 11:50:35 +02:00
Morris Jobke 3acfcc433a Merge pull request #9668 from nextcloud/backport/9666/stable13
[stable13] Make sure the file is readable before attempting to create a preview
2018-05-30 11:34:29 +02:00
Morris Jobke db59474868 Merge pull request #9662 from nextcloud/backport/9640/stable13
[stable13] check user state when fetching to avoid dealing with offline objects
2018-05-30 09:19:24 +02:00
Morris Jobke d95757b7d0 Merge pull request #9657 from nextcloud/backport/9256/stable13
[stable13] improve error reporting and move format parameter to the options
2018-05-30 09:18:36 +02:00
Morris Jobke fd9c134d66 Merge pull request #9672 from nextcloud/drone-mysqlmb4-fix-stable13
[stable13] Fix drone mysqlmb4 tests
2018-05-30 09:17:41 +02:00
John Molakvoæ (skjnldsv) 9a0126cadd Fix drone mysqlmb4 tests
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-05-30 08:57:51 +02:00
Nextcloud bot b889259b1e [tx-robot] updated from transifex 2018-05-30 00:12:31 +00:00
Roeland Jago Douma e55effc5ef Make sure the file is readable before attempting to create a preview
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-29 22:03:43 +02:00
Morris Jobke b71c90bac1 Merge pull request #9650 from nextcloud/backport/8842/stable13
[stable13] fix(AmazonS3):  fix loop $result['Contents'] error
2018-05-29 20:56:03 +02:00
Arthur Schiwon d33ba08b05 check user state when fetching to avoid dealing with offline objects
fixes #9502

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-29 20:54:48 +02:00
Roeland Jago Douma d6ab2a4ddb Merge pull request #9661 from nextcloud/backport/9288/stable13
[stable13] LDAP password renewal fixes
2018-05-29 20:16:05 +02:00
Morris Jobke a52f0150af Merge pull request #9659 from nextcloud/backport/9653/stable13
[stable13] The OAuth endpoint needs to support Basic Auth
2018-05-29 17:12:00 +02:00
Morris Jobke 5c9f2dd99f Merge pull request #9651 from nextcloud/backport/9271/stable13
[stable13] Fix undefined variables
2018-05-29 17:08:40 +02:00
Morris Jobke b3e9e36b14 Merge pull request #9656 from nextcloud/backport/9490/stable13
[stable13] Make LargeFileHelper.php faster by avoiding execs as much as possible
2018-05-29 17:08:12 +02:00
Morris Jobke de539c6e27 Merge pull request #9649 from nextcloud/sabre-head-dont-open-file-13
[13] dont open the file on dav HEAD request
2018-05-29 17:02:47 +02:00
Morris Jobke 9f793f91c9 Merge pull request #9608 from nextcloud/smb-exceptions-on-listing
[13] Handle exception while itterating trough smb file listing
2018-05-29 17:01:51 +02:00
Roger Szabo 49c1a7f2ae Remove unneeded semicolon and parentheses
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 16:40:50 +02:00
Roger Szabo b3b774dfc5 css indent alignment
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 16:40:46 +02:00
Roger Szabo 733eae5b91 adjust css to nc13 core changes
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 16:40:43 +02:00
Roger Szabo 4ba9556bc2 remove reset password link
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 16:40:39 +02:00
Morris Jobke c61e9577e6 Merge pull request #9652 from nextcloud/search-category-stable13
[stable13] Add search category icon
2018-05-29 16:39:43 +02:00
Roeland Jago Douma d48333910e The OAuth endpoint needs to support Basic Auth
* Add test

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-29 15:57:04 +02:00
Robin Appelman a8b674fd8c dont open the file on dav HEAD request
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-29 15:42:29 +02:00
Bjoern Schiessle 58be1f1b2f improve error reporting and move format parameter to the options
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-05-29 15:34:32 +02:00
marco44 184a0b97fc Make LargeFileHelper.php faster by avoiding execs as much as possible
Signed-off-by: Marc Cousin <cousinmarc@gmail.com>
2018-05-29 15:31:55 +02:00
Roger Szabo 0b25317269 adjust unit tests for \"Invalid argument supplied for foreach()\" fix
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 15:21:23 +02:00
Roger Szabo 27fca0eebc Fix "Invalid argument supplied for foreach()"
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-29 15:21:19 +02:00
John Molakvoæ (skjnldsv) 221f3a4819 Add search category icon
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-05-29 15:13:58 +02:00
Morris Jobke 57489f1013 Remove a check for an unused variable
Left over from a refactoring

https://github.com/nextcloud/server/pull/1940

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-29 15:13:57 +02:00
Morris Jobke 6a4a7c868c Fix undefined variable - found by Phan
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-29 15:12:10 +02:00
enoch 65bb12032d fix(AmazonS3): fix loop $result['Contents'] error
Invalid argument supplied for foreach() at /var/www/html/apps/files_external/lib/Lib/Storage/AmazonS3.php#295
2018-05-29 15:03:28 +02:00
blizzz af2ecbbd5a Merge pull request #9647 from nextcloud/release/noid/theming-1.4.5-translations
[stable13] prepare another theming release including translations for recently added imprint and privacy policy strings
2018-05-29 14:37:23 +02:00
Morris Jobke b03752b1d9 Merge pull request #9620 from nextcloud/backport/9576/stable13
[stable13] Emit event when running ./occ db:add-missing-indices
2018-05-29 14:30:27 +02:00
Arthur Schiwon c2041c5d4a prepare another theming release including translations for recently
added imprint and privacy policy strings.

Languages: fi, fr, de, de_DE (formal), it, es, pt_BR, tr

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-29 14:13:58 +02:00
Nextcloud bot 00edb8f2d4 [tx-robot] updated from transifex 2018-05-29 00:12:43 +00:00
Roeland Jago Douma c07f23ca72 Merge pull request #9629 from nextcloud/backport/9627/stable13
[stable13] Limit Sinon version to 5.0.7 at most
2018-05-28 13:27:34 +02:00
Morris Jobke 8889220f55 Merge pull request #9622 from nextcloud/backport/9475/stable13
[stable13] Delete the previews when a version is restored
2018-05-28 11:20:18 +02:00
Daniel Calviño Sánchez fe93f0935b Limit Sinon version to 5.0.7 at most
When using fake servers with Sinon.JS, the JavaScript test framework,
the XHR objects are also fake. In Sinon 5.0.8 the "setRequestHeader" of
XMLHttpRequest was modified to normalize the header values (as requested
by the spec), but since then only string values are accepted; null or
integer values can no longer be passed to "setRequestHeader", as it
expects the "replace" function to be available in the object. However,
in the tests null and integer values are passed to "setRequestHeader",
which causes them to fail.

Both Firefox and Chromium accept passing non-string values to their
"setRequestHeader" implementation, and it is done, for example, in
davclient.js; it is not clear yet whether Sinon got too restrictive or
the code calling "setRequestHeader" was too loose. Given that
davclient.js is an external dependency, as a temporary measure Sinon
version is forced to be 5.0.7 at most until either Sinon or davclient.js
are updated.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-05-28 11:07:11 +02:00
Roeland Jago Douma 5536d17181 Merge pull request #9619 from nextcloud/backport/9515/stable13
[stable13] Regenerate session id after public share auth
2018-05-28 09:05:53 +02:00
Roeland Jago Douma dd5995a2f8 Emit event when running ./occ db:add-missing-indices
This allows apps to listen to this event in order to also update
indecies there.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-28 09:04:59 +02:00
Nextcloud bot 5a20bb6980 [tx-robot] updated from transifex 2018-05-28 00:13:05 +00:00
Nextcloud bot f800c1697c [tx-robot] updated from transifex 2018-05-27 00:13:28 +00:00
Roeland Jago Douma 7249f73832 Merge pull request #9621 from nextcloud/backport/9418/stable13
[stable13] Add PHP missing message to index.php
2018-05-26 20:37:51 +02:00
Roeland Jago Douma d33834f07a Delete the previews when a version is restored
Fixes #9469

When a version of a file is restored the previews are no longer valid.
Thus we should remove them so they are regenerated.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-26 14:09:11 +02:00
Marius Blüm 5b846d0e48 Add PHP missing message to index.php
Signed-off-by: Marius Blüm <marius@lineone.io>
2018-05-26 13:29:42 +02:00
Roeland Jago Douma 5eb6d7bc05 Regenerate session id after public share auth
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-26 13:21:08 +02:00
Nextcloud bot 043acfebab [tx-robot] updated from transifex 2018-05-26 00:13:24 +00:00
Georg Ehrke f1108b9d26 send invitations for shared calendars
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-05-25 20:47:02 +02:00
Roland Tapken e8868c2148 Make SMB module more fault-tolerant
Ignore unavailable files when fetching the share's mtime
or reading directory listings. This can happen on servers using a
distributed file system (DFS) with unavailable destinations, for example
when the remote server is offline.

Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
2018-05-25 15:00:35 +02:00
Nextcloud bot d8e3c3cb22 [tx-robot] updated from transifex 2018-05-25 00:15:16 +00:00
Morris Jobke e2133ae2d8 Merge pull request #9590 from nextcloud/bug/9514/fix-settings-menu
[stable13] Fix settings menu
2018-05-24 18:14:12 +02:00
Morris Jobke 866568d4d2 Merge pull request #9579 from nextcloud/bugfix_stable13/noid/fix_force_language_html_attr
[stable13] make sure force language is reflected in html lang attribute
2018-05-24 17:59:58 +02:00
Morris Jobke cef2e190a1 Merge pull request #9586 from nextcloud/feature/9577/privacy-link
[stable13] add privacy link to theming and fix scrollbars
2018-05-24 17:57:25 +02:00
Julius Härtl d6bde6a281 Fix scope of nav css rule
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-24 16:43:38 +02:00
Arthur Schiwon cee2d1783d bump theming version ¯\_(ツ)_/¯
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-24 16:26:58 +02:00
Arthur Schiwon ac22c28045 addjust footer height when legal links are present. fixes #9572
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-24 16:26:58 +02:00
Arthur Schiwon 323b665e88 also add a privacy link
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-24 16:26:51 +02:00
Roeland Jago Douma 930c11a6cd Always set the request language to the force language
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-24 13:08:10 +02:00
Georg Ehrke 0493d0e3fb make sure force language is reflected in html lang attribute
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-05-24 13:07:54 +02:00
Roeland Jago Douma 5bd9087cb7 Merge pull request #9573 from nextcloud/fix/9568/theming-wo-sig
bump version for theming again 🙇
2018-05-24 08:58:39 +02:00
Nextcloud bot c3a1d33959 [tx-robot] updated from transifex 2018-05-24 00:14:07 +00:00
Arthur Schiwon 67340846f9 bump version for theming again 🙇
also make appinfo compliant with appstore's schema. except default_enable…

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-24 00:19:20 +02:00
Morris Jobke fe20bb4b27 Merge pull request #9566 from nextcloud/backport/9395/stable13
[stable13] cleanup locks in scanner on error
2018-05-23 22:57:42 +02:00
Roeland Jago Douma 56b8a889c1 Merge pull request #9392 from nextcloud/dav-upload-lock-13
[13] only allow a single concurrent dav write to a file
2018-05-23 20:14:19 +02:00
Robin Appelman 874e312980 cleanup locks in scanner on error
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-23 20:05:54 +02:00
Morris Jobke 2f059d1caf Merge pull request #9540 from nextcloud/backport/9517/stable13
[stable13] Improve OAuth
2018-05-23 15:42:22 +02:00
Roeland Jago Douma 01d3586a0f Merge pull request #9522 from nextcloud/backport/9325/stable13
[stable13] Fix for unbound cloned LDAP connections
2018-05-23 09:18:21 +02:00
Nextcloud bot 82d0d1d704 [tx-robot] updated from transifex 2018-05-23 00:16:07 +00:00
Morris Jobke 04ff701090 Merge pull request #9548 from remyj38/stable13
[stable13] Fix translation bug on lost password page
2018-05-22 21:58:53 +02:00
Julius Härtl c628b613b9 Merge pull request #9547 from nextcloud/bump/noid/theming
[stable13] bump theming version for extraordinary release
2018-05-22 21:44:43 +02:00
Rémy Jacquin 0b8908b8df Fix translation bug on lost password page
Fix nextcloud/password_policy#26

Signed-off-by: Rémy Jacquin <remy@remyj.fr>
2018-05-22 18:43:27 +02:00
Arthur Schiwon 3a73b9c0bb bump theming version for extraordinary release
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-22 17:03:41 +02:00
Morris Jobke 5744827696 Merge pull request #9516 from nextcloud/backport/9437/stable13
[stable13] allow to specify a link to a legal notice
2018-05-22 16:54:07 +02:00
Morris Jobke bae5ec5cb0 Merge pull request #9525 from nextcloud/backport/8504/stable13
[stable13] Dont use $info as array when its not an array
2018-05-22 16:33:04 +02:00
Roeland Jago Douma 3c002706a4 Add tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:51:39 +02:00
Roeland Jago Douma 73f8373151 Don't use special chars to avoid confusion
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:51:30 +02:00
Roeland Jago Douma d03265fb62 Rotate token
On a refresh token request:
* rorate
* reset expire

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:51:17 +02:00
Roeland Jago Douma 30750e4f92 Authenticate the clients on requesting a token
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:51:12 +02:00
Roeland Jago Douma a04ea70fca Fail if the response type is not properly set
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:51:03 +02:00
Roeland Jago Douma 000cf1951c Set OAuth token expiration
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:50:58 +02:00
Roeland Jago Douma 46aafe4f11 Certain tokens can expire
However due to the nature of what we store in the token (encrypted
passwords etc). We can't just delete the tokens because that would make
the oauth refresh useless.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 14:26:13 +02:00
Roeland Jago Douma 8fcb7d4334 Allow the rotation of tokens
This for example will allow rotating the apptoken for oauth

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-22 12:51:25 +02:00
Nextcloud bot 41cd6076fb [tx-robot] updated from transifex 2018-05-22 00:13:54 +00:00
Nextcloud bot ef95c1c5e3 [tx-robot] updated from transifex 2018-05-21 00:14:03 +00:00
Nextcloud bot 352d0af868 [tx-robot] updated from transifex 2018-05-20 00:13:45 +00:00
Nextcloud bot 3304991965 [tx-robot] updated from transifex 2018-05-19 00:14:03 +00:00
Joas Schilling ccedb314a8 Dont use $info as array when its not an array
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-18 23:50:10 +02:00
Roger Szabo 8c43834dbc unbound cloned connection fix
Signed-off-by: Roger Szabo <roger.szabo@web.de>
2018-05-18 15:09:51 +02:00
Arthur Schiwon c3d28885b0 Backport of #9437
allow to specify a link to a legal notice

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

fix tests

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

fix undo for url-typed inputs

and minor adjustments

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

Use link not address in labels for URLs

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

this file does not belong here

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-05-18 11:26:57 +02:00
Nextcloud bot c101ad3a65 [tx-robot] updated from transifex 2018-05-18 00:14:09 +00:00
Nextcloud bot b08e53d365 [tx-robot] updated from transifex 2018-05-17 00:14:09 +00:00
Morris Jobke edd5712c6e Merge pull request #9454 from nextcloud/stable13-9245-fix-race-condition-when-preparing-upload-folder
[stable13] Fix race condition when preparing upload folder
2018-05-14 13:41:47 +02:00
Morris Jobke e3d694fea2 Merge pull request #9453 from nextcloud/stable13-9237-fix-ids-of-permission-checkboxes-for-shares
[stable13] Fix ids of permission checkboxes for shares
2018-05-14 13:41:02 +02:00
Morris Jobke 003cc5acfd Merge pull request #9432 from nextcloud/backport/9225/ipv6-database-host
[stable13] Allow IPv6 database host
2018-05-14 13:36:21 +02:00
Morris Jobke 1aa149a615 Merge pull request #9436 from nextcloud/backport/9373/stable13
[stable13] Get correct version of an app
2018-05-14 13:33:14 +02:00
Nextcloud bot d3d750fdc4 [tx-robot] updated from transifex 2018-05-14 00:13:48 +00:00
Nextcloud bot a46b8e34f9 [tx-robot] updated from transifex 2018-05-13 00:13:19 +00:00
Nextcloud bot cd3b0ca7da [tx-robot] updated from transifex 2018-05-12 00:13:27 +00:00
Nextcloud bot 465397fa02 [tx-robot] updated from transifex 2018-05-11 00:13:23 +00:00
Daniel Calviño Sánchez 2b5d933b63 Remove no longer needed escaping of special characters
The escaping of special characters was needed when the ids of the
permission checkboxes for shares were based on the "shareWith" field.
Since they are based on the "shareId" field the escaping is no longer
needed, as the "sharedId" is expected to always contain compatible
characters.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-05-10 21:40:36 +02:00
Daniel Calviño Sánchez 0734325dda Fix ids of permission checkboxes for shares
The ids of permission checkboxes for shares were generated using the
"shareWith" field of the share. The "shareWith" field can contain spaces
(as spaces are allowed, for example, in user or circle names), so this
could cause the id attribute of the HTML element to contain spaces too,
which is forbidden by the HTML specification.

It is not just a "formal" issue, though; when the list was rendered
after a permission change, if the id contained a space the selector to
get the checkbox element was wrong (as it ended being something like
"#canEdit-view1-name with spaces") and thus the updated state of the
checkbox was not properly set.

Besides that, "shareWith" can contain too single quotes, which would
even cause the jQuery selector to abort the search and leave the UI in
an invalid state.

Instead of adding more cases to the regular expression to escape special
characters and apply it too when the ids are created now the ids of
permission checkboxes for shares are based on the "shareId" field
instead of on "shareWith", as "shareId" is expected to always contain
compatible characters.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-05-10 21:39:14 +02:00
Daniel Calviño Sánchez d74b5231b8 Fix race condition when preparing upload folder
Before any upload is submitted the upload is registered in a list of
known uploads; this is needed to retrieve the upload object at several
points of the upload process. When a chunked upload is submitted first a
directory to upload all the chunks is created and, once that is done,
the chunks are sent; in order to send a chunk the upload object needs to
be retrieved from the list of known uploads.

When all the active uploads were finished the list of known uploads was
cleared. However, an upload is not active until it actually starts
sending the data, so while waiting for the upload directory to be
created the upload is already in the list of known uploads yet not
active. Due to all this, if the active uploads finished while another
pending upload was waiting for the upload directory to be created that
pending upload would be removed from the list of known uploads too, and
once the directory was created and thus the chunks were sent a field of
a null upload object would be accessed thus causing a failure.

Instead of removing all the known uploads at once when the active
uploads finish now each upload is explicitly removed when it finishes.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-05-10 16:58:43 +02:00
Roeland Jago Douma 3a013b127c Merge pull request #9433 from nextcloud/backport/9224/accessibility-improvements-13
[stable13] Add labels for Contacts menu and Settings
2018-05-10 09:30:56 +02:00
Nextcloud bot e2f5355f73 [tx-robot] updated from transifex 2018-05-10 00:13:31 +00:00
Roeland Jago Douma a7948069c5 Get correct version of an app
Related to #8929

We should get the version of the app. Not of the appfolder. Else there
is no way to properly compare the versions.

Now note that installing in 1 go will still fail. But at least on the
next page load the new version will be properly detected.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-05-09 12:15:39 +02:00
Joas Schilling ea834dab28 php 5.6 compatibility
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-09 12:12:13 +02:00
Jan-Christoph Borchardt 223f034068 Fix form labels and main landmark on log in page
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-05-09 11:42:09 +02:00
Jan-Christoph Borchardt 575354a09c Do not restrict zooming in
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-05-09 11:42:01 +02:00
Jan-Christoph Borchardt 2f88376674 Add aria-label to more-apps menu as well
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-05-09 11:39:23 +02:00
Jan-Christoph Borchardt e7d6410f25 Ensure proper color contrast according to WCAG AA
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-05-09 11:39:16 +02:00
Jan-Christoph Borchardt 0dc52bf1c9 Add proper ARIA attributes and structure to header for accessibility, thanks to @MarcoZehe
Signed-off-by: Jan-Christoph Borchardt <hey@jancborchardt.net>
2018-05-09 11:37:58 +02:00
Morris Jobke eb429e7ee6 Add tests for special domain name
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-09 10:51:26 +02:00
Morris Jobke 229667c84c Add tests for domains
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-05-09 10:51:14 +02:00
Joas Schilling 7bb44214a1 Move regex to a function and add tests
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-09 10:50:56 +02:00
Joas Schilling 02388a3942 Allow IPv6 database hosts
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-09 10:50:47 +02:00
Morris Jobke 44255faab3 Merge pull request #9430 from nextcloud/stable13-9407
[13] Fix jsunit tests
2018-05-09 09:14:33 +02:00
Morris Jobke fe2d99f3fb Merge pull request #9409 from nextcloud/backport/9393/workflow-rules-error-when-changing-operation
[stable13] workflow rules error when changing operation
2018-05-09 08:41:58 +02:00
Julius Härtl 2329f7e2c6 Fix jsunit tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-09 08:21:21 +02:00
Nextcloud bot d8d09475c4 [tx-robot] updated from transifex 2018-05-09 00:11:50 +00:00
Nextcloud bot 583176d36d [tx-robot] updated from transifex 2018-05-08 00:11:56 +00:00
Morris Jobke 7bf713edaf Merge pull request #9389 from nextcloud/log-lock-state-on-conflict-13
[13] Log lock state on conflict
2018-05-07 16:29:42 +02:00
Morris Jobke 284b23333d Merge pull request #9391 from nextcloud/getcachentry-lock-13
[13] remove unneeded locks in getCacheEntry
2018-05-07 16:29:22 +02:00
Joas Schilling a134bf7349 Do not error when the tag does not exist
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-07 15:30:12 +02:00
Joas Schilling 0579529145 Reset the value when changing the check class (because it might be invalid)
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-05-07 15:29:57 +02:00
Nextcloud bot c77b66e179 [tx-robot] updated from transifex 2018-05-07 00:11:59 +00:00
Nextcloud bot 923520823e [tx-robot] updated from transifex 2018-05-06 00:12:02 +00:00
Nextcloud bot 635814f6a9 [tx-robot] updated from transifex 2018-05-05 00:12:11 +00:00
Robin Appelman 187acecff7 only allow a single concurrent dav write to a file
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-04 15:08:56 +02:00
Robin Appelman a6ea5eb1b5 remove unneeded locks in getCacheEntry
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-04 15:06:39 +02:00
Robin Appelman bc1a17a9e2 always log locking errors
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-04 13:35:26 +02:00
Robin Appelman a070c1177a Log more info about locking conflicts for memcache locking backends
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-05-04 13:35:26 +02:00
Morris Jobke 642ebea490 Merge pull request #9259 from nextcloud/various-css-fixes-bckprt
[stable13] backport various scss fixes #8777
2018-05-04 11:19:10 +02:00
Nextcloud bot 1a900c6928 [tx-robot] updated from transifex 2018-05-04 00:12:17 +00:00
Morris Jobke 1dcf40515f Merge pull request #9377 from nextcloud/9318_SCSSCacher_resetCache_catch_exception_stable13
Issue #9318: catch exceptions in SCSSCacher::resetCache()
2018-05-03 13:56:45 +02:00
Roland Tapken cc54429646 Issue #9318: catch exceptions in SCSSCacher::resetCache()
Signed-off-by: Roland Tapken <roland@bitarbeiter.net>
2018-05-03 11:02:53 +02:00
Nextcloud bot 5756a8d8ff [tx-robot] updated from transifex 2018-05-03 00:12:19 +00:00
Roeland Jago Douma 9763e7dd40 Merge pull request #9358 from nextcloud/stable13-9348
[stable13] Replace deprecated sinon reset() call with resetHistory()
2018-05-02 10:09:50 +02:00
Julius Härtl f3b3b5f2d0 Replace deprecated sinon reset() call with resetHistory()
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-05-02 08:52:22 +02:00
Roeland Jago Douma 6976241e4e Merge pull request #9344 from nextcloud/stable13-9248
[stable13] Fix ellipsis in filename column
2018-05-01 19:58:38 +02:00
Nextcloud bot 0d91288f49 [tx-robot] updated from transifex 2018-05-01 00:12:15 +00:00
Julius Härtl 5c6084a545 Add min-width to trick the table width calculation in safari
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-30 11:03:40 +02:00
Julius Härtl 7e39215142 Use flex based layout inside the filename table cell
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-04-30 11:02:43 +02:00
Nextcloud bot d216d7aff5 [tx-robot] updated from transifex 2018-04-30 00:12:11 +00:00
Nextcloud bot 6b67651951 [tx-robot] updated from transifex 2018-04-29 00:12:11 +00:00
Nextcloud bot 1a3d61cbd3 [tx-robot] updated from transifex 2018-04-28 00:12:20 +00:00
Nextcloud bot 8029998a60 [tx-robot] updated from transifex 2018-04-27 00:12:15 +00:00
Morris Jobke 2495577a3b Merge pull request #9300 from nextcloud/final-13.0.2
13.0.2
2018-04-26 09:19:58 +02:00
Nextcloud bot a21b4469c9 [tx-robot] updated from transifex 2018-04-26 00:12:33 +00:00
Morris Jobke ebb410b122 13.0.2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-25 15:19:03 +02:00
Nextcloud bot 9311d4972b [tx-robot] updated from transifex 2018-04-25 00:12:15 +00:00
Nextcloud bot d4ec708867 [tx-robot] updated from transifex 2018-04-24 00:12:18 +00:00
Nextcloud bot c49ec66188 [tx-robot] updated from transifex 2018-04-23 00:12:13 +00:00
Nextcloud bot cc533aad3b [tx-robot] updated from transifex 2018-04-22 00:12:14 +00:00
Nextcloud bot 8c0624149f [tx-robot] updated from transifex 2018-04-21 00:12:06 +00:00
John Molakvoæ (skjnldsv) 721ff40c5c [stable13] backport various scss fixes #8777
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-04-20 17:34:18 +02:00
Nextcloud bot 3fe5649b42 [tx-robot] updated from transifex 2018-04-20 00:12:26 +00:00
Morris Jobke ff5e666a89 Merge pull request #9228 from nextcloud/13.0.2-RC1
13.0.2 RC 1
2018-04-19 10:57:50 +02:00
Nextcloud bot 75f9dd6d67 [tx-robot] updated from transifex 2018-04-19 00:12:16 +00:00
Morris Jobke da924a79c7 13.0.2 RC 1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-19 00:46:54 +02:00
Morris Jobke 51ae913513 Merge pull request #9238 from nextcloud/13-8945
[stable13] Fixed files copy/move when in favorites or recent section
2018-04-18 22:47:15 +02:00
Morris Jobke 5262685e57 Merge pull request #9236 from nextcloud/13-8996
[stable13] Fix webdav support for OneNote clients
2018-04-18 22:46:26 +02:00
Morris Jobke 26c153667a Merge pull request #9231 from nextcloud/13-9205
[stable13] Provide an option to disable HTML emails
2018-04-18 22:38:33 +02:00
Roeland Jago Douma a1c4bdfdf8 Merge pull request #9233 from nextcloud/13-9159
[stable13] fix appinfo parsing when a single localized option is provided
2018-04-18 21:18:37 +02:00
Roeland Jago Douma cbe03cb561 Merge pull request #8986 from nextcloud/backport/8821/show-eol-warning
[stable13] Show EOL warning in the update section
2018-04-18 21:14:55 +02:00
Daniel Calviño Sánchez 807955c26c Merge pull request #9230 from nextcloud/13-9206
[stable13] Fix user selectable text for public links for text files
2018-04-18 20:56:27 +02:00
Julius Härtl 89c77c3073 Merge pull request #9234 from nextcloud/13-7661
[stable13] Use multibyte substring
2018-04-18 19:15:50 +02:00
John Molakvoæ (skjnldsv) 5253343885 Fixed files copy/move when in favorites or recent section
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-04-18 17:54:04 +02:00
Brandon Kirsch 78a6e94b52 Fix webdav support for OneNote clients 2018-04-18 17:40:36 +02:00
Roeland Jago Douma de70df0031 Use multibyte substring
Fixes #7661

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-18 17:35:09 +02:00
Robin Appelman 5fbba7854b fix appinfo parsing when a single localized option is provided
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-04-18 17:32:19 +02:00
Morris Jobke 01278056a5 Provide an option to disable HTML emails
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-18 16:59:34 +02:00
Morris Jobke 21ca50168a Fix user selectable text for public links for text files
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-18 16:45:55 +02:00
Joas Schilling 6b97429ebe Show EOL warning in the update section
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-04-18 13:46:25 +02:00
Nextcloud bot fa65aaf1fc [tx-robot] updated from transifex 2018-04-18 00:13:55 +00:00
Morris Jobke e01b15adc5 Merge pull request #9213 from nextcloud/13-update-crl
[stable13] Update CRL to include old quicknotes cert
2018-04-17 17:16:23 +02:00
Morris Jobke 2644eb93ae Update CRL to include old quicknotes cert
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-17 11:44:12 +02:00
Nextcloud bot eff3add8f9 [tx-robot] updated from transifex 2018-04-17 00:13:32 +00:00
Nextcloud bot 90102937e4 [tx-robot] updated from transifex 2018-04-16 00:12:10 +00:00
Nextcloud bot a82eacf1f3 [tx-robot] updated from transifex 2018-04-14 00:12:10 +00:00
Nextcloud bot 24eaf35d2f [tx-robot] updated from transifex 2018-04-13 00:12:11 +00:00
Nextcloud bot f192bcccf9 [tx-robot] updated from transifex 2018-04-12 00:19:44 +00:00
Nextcloud bot 3339fc64f3 [tx-robot] updated from transifex 2018-04-11 00:21:56 +00:00
Roeland Jago Douma 656df69cf0 Merge pull request #9073 from nextcloud/backport/9070/guessing_without_target_is_useles-13
[stable13] When formatting a share node an Empty target is invalid
2018-04-11 00:36:07 +02:00
Nextcloud bot 6209a66f16 [tx-robot] updated from transifex 2018-04-10 00:12:35 +00:00
John Molakvoæ 3f19eb06a0 Merge pull request #9124 from nextcloud/stable13-9085-fix-progress-bar-hidden-before-the-upload-ends
[stable13] Fix progress bar hidden before the upload ends
2018-04-09 13:20:52 +02:00
Daniel Calviño Sánchez 9e9e053b73 Fix progress bar hidden before the upload ends
The jQuery File Upload plugin triggers the "stop" event once there are
no more files being uploaded (even if some of them were added when
another upload was already in progress). Therefore, the progress bar
should be hidden in the "fileuploadstop" callback.

In some cases the "stop" event is not triggered and thus the progress
bar is not hidden once no more files are being uploaded. This is caused
by a race condition and it will be fixed in another commit; except in
buggy cases like that one (that need to be fixed anyway) it is safe to
hide the progress bar in the "fileuploadstop" callback.

In any case, note that the callbacks in "fileuploaddone" may be called
after the "stop" event was triggered and handled when using chunked
uploads. In that case once all the chunks are uploaded the assembled
file is moved to its final destination, so its promise could be resolved
after the "stop" event was triggered. Therefore a different approach
would be needed to keep the progress bar visible until the chunked
upload is truly finished, but for the time being the current one is good
enough.

Before this commit the progress bar was being hidden when the first
upload finished, either successfully or with an error, no matter if
there were other files being uploaded too.

The progress bar was being explicitly hidden also when the upload was
cancelled. When an upload is cancelled all the single uploads are
aborted, which triggers a "fail" event for each of them. However, the
"stop" event is always triggered when no more files are being uploaded,
so it is triggered too once all the single uploads were aborted. As all
the single uploads are immediately aborted in a loop when the general
upload is cancelled it makes no difference to hide the progress bar when
the first single upload is aborted or when all the single uploads were
aborted, so the progress bar is no longer explicitly hidden in the
former case.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-04-09 11:20:18 +02:00
Nextcloud bot 2b0b717258 [tx-robot] updated from transifex 2018-04-09 00:12:23 +00:00
Nextcloud bot 8ba8719ec3 [tx-robot] updated from transifex 2018-04-08 00:12:25 +00:00
Nextcloud bot 7f2838cf68 [tx-robot] updated from transifex 2018-04-07 00:12:12 +00:00
John Molakvoæ d45a889fe2 Merge pull request #8779 from nextcloud/backport/8255/show-group-display-names
[stable13] Show group display names
2018-04-06 15:14:12 +02:00
Morris Jobke b9ca121671 Merge pull request #9095 from JaredBoone/bugfix/8387
Do not convert email addresses with idn_to_ascii if…
2018-04-06 11:44:51 +02:00
Nextcloud bot 80c5eda800 [tx-robot] updated from transifex 2018-04-06 00:14:46 +00:00
Roeland Jago Douma 4e732b866d Merge pull request #9094 from nextcloud/13-9092
[stable13] Add more logging for the object storage during creation of the buckets
2018-04-05 21:45:20 +02:00
Jared Boone 52c7f17faf Do not convert email addresses with idn_to_ascii if INTL_IDNA_VARIANT_UTS46 is undefined.
Fixes https://github.com/nextcloud/server/issues/8387.

Signed-off-by: Jared Boone <jared.boone@gmail.com>
2018-04-05 11:28:31 -07:00
Morris Jobke bb656750f5 Add more logging for the object storage during creation of the buckets
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-04-05 17:29:44 +02:00
Morris Jobke 1c891a5c90 Merge pull request #9089 from nextcloud/backport/9087/windows10_webdav_netdrive-13
[stable13] Allow usage of Windows 10 WebDav Netdrive
2018-04-05 14:23:17 +02:00
Roeland Jago Douma 41b37c905c Allow usage of Windows 10 WebDav Netdrive
Fixes #3523

As long as we don't have #8123 lets not leave our Window10 netdrive
users hanging.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-05 13:51:22 +02:00
Roeland Jago Douma 652d0413cf Merge pull request #9071 from nextcloud/backport/9006/ignore_encrypted_custom_properties-13
[stable13] Do not treat is-encrypted as custom property
2018-04-05 08:53:28 +02:00
Morris Jobke 4732a34b04 Merge pull request #9077 from nextcloud/fix-callForSeenUsers-stable13
[stable13] Move on with the next user if we found the user on one user back-end
2018-04-05 08:13:26 +02:00
Nextcloud bot 2c6a534d5d [tx-robot] updated from transifex 2018-04-05 00:12:13 +00:00
Bjoern Schiessle bd0672530b Move on with the next user if we found the user on one user back-end
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-04-04 17:13:47 +02:00
Roeland Jago Douma ce7a835772 Merge pull request #9017 from nextcloud/smb-2.0.5-13
[13] update icewind/smb to 2.0.5
2018-04-04 14:08:28 +02:00
Morris Jobke ba29fd19ec Merge pull request #9072 from nextcloud/backport/8891/fix_8890-13
[stable13] Fix proper permissions for multiple file access
2018-04-04 13:59:05 +02:00
Roeland Jago Douma 36bd4b7dde When formatting a share node an Empty target is invalid
Fixes #9028

For federated shares the share table holds no target information (since
it is on the other server). So when a node is actually invalid and not
found we should not display it anymore in the shared with sections etc
and thus throw the proper exceptions.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-04 12:03:25 +02:00
Roeland Jago Douma af317a1e38 Fix test
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-04 12:02:42 +02:00
Roeland Jago Douma 5a74b9cb99 Fix proper permissions for multiple file access
Fixes #8890

In case you have access to a file via multiple ways, for example:
1. the file is shared with you with permission read only
2. the folder containing the file is shared with your read/write

Requesting the getById function on the userFolder would give back two
entries but both with the same permissions. Depending on the node you
picked this is not right.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-04 12:02:37 +02:00
Roeland Jago Douma df09b65ee9 Do not treat is-encrypted as customer property
fixes #8977

Else for all files in a folder we would launch off more queries.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-04-04 11:56:59 +02:00
Roeland Jago Douma e95184ee25 Merge pull request #9064 from nextcloud/fix-copy-encrypted-files-stable13
[stable13] reset encryptionVersion to '1' if a file was stream copied
2018-04-04 11:54:54 +02:00
Nextcloud bot ef14f3c0b0 [tx-robot] updated from transifex 2018-04-04 00:13:52 +00:00
Bjoern Schiessle d4f64b94f2 reset encryptionVersion to '1' if a file was stream copied, because this means that we basically write the file from scratch
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
2018-04-03 18:12:16 +02:00
Morris Jobke a0818ab6be Merge pull request #9019 from nextcloud/stable13-8939
[stable13] Fix search text overlapping close button
2018-04-03 10:29:33 +02:00
Morris Jobke 7bb8ce0e67 Merge pull request #9015 from nextcloud/backport-apps-versions
[stable13] Use app version to generate scss filename
2018-04-03 10:28:17 +02:00
Morris Jobke 4f5d057777 Merge pull request #9020 from nextcloud/stable13-8983
[stable13] Clear any theming prefixed cache on cache buster increase
2018-04-03 10:09:33 +02:00
Nextcloud bot e5684a9287 [tx-robot] updated from transifex 2018-04-03 00:12:13 +00:00
Nextcloud bot 9c1c47400f [tx-robot] updated from transifex 2018-04-02 00:12:13 +00:00
Nextcloud bot 4f34eb7616 [tx-robot] updated from transifex 2018-04-01 00:12:11 +00:00
Nextcloud bot 77bdbb6443 [tx-robot] updated from transifex 2018-03-31 00:14:19 +00:00
Nextcloud bot b6cb092bc6 [tx-robot] updated from transifex 2018-03-30 00:12:01 +00:00
Nextcloud bot ea01c9e92d [tx-robot] updated from transifex 2018-03-29 00:14:00 +00:00
Julius Härtl 7f209be51d Fix tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-28 17:35:36 +02:00
Julius Härtl 541bb71513 Clear any theming prefixed cache on cache buster increase
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-28 17:35:35 +02:00
Julius Härtl 334d733d48 Fix search text overlapping clode button
fixes #8701

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-28 17:30:16 +02:00
Robin Appelman 6e13e31188 update icewind/smb to 2.0.5
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-03-28 16:17:56 +02:00
Robin Appelman a691b52daf Revert "update icewind/smb to 2.0.5"
accidental push to wrong branch

This reverts commit 3b35cd0749.
2018-03-28 16:17:30 +02:00
Robin Appelman 3b35cd0749 update icewind/smb to 2.0.5
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-03-28 16:15:27 +02:00
John Molakvoæ (skjnldsv) 05f76b3469 Use app version to generate scss filename
Fixed scsscacher tests

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-03-28 16:11:10 +02:00
Nextcloud bot f2e69bd868 [tx-robot] updated from transifex 2018-03-28 00:21:41 +00:00
Nextcloud bot c2ec519bc4 [tx-robot] updated from transifex 2018-03-27 00:12:04 +00:00
Nextcloud bot f8b1acfcfd [tx-robot] updated from transifex 2018-03-26 00:13:40 +00:00
Nextcloud bot cda89f16d8 [tx-robot] updated from transifex 2018-03-25 01:10:27 +00:00
Nextcloud bot 3604fe1ec5 [tx-robot] updated from transifex 2018-03-24 01:12:43 +00:00
Nextcloud bot 6ef65b3016 [tx-robot] updated from transifex 2018-03-23 01:11:55 +00:00
Nextcloud bot b3ffcda8ff [tx-robot] updated from transifex 2018-03-22 01:12:05 +00:00
Nextcloud bot 684f6b6429 [tx-robot] updated from transifex 2018-03-21 01:12:19 +00:00
Roeland Jago Douma 52a97e826b Merge pull request #8905 from nextcloud/stable13-8843-set-share-with-field-to-the-id-of-the-circle
[stable13] Set "share with" field to the ID of the circle
2018-03-20 23:17:25 +01:00
Roeland Jago Douma d9f512e593 Merge pull request #8900 from nextcloud/backport/8822/stable13
[stable13] the FN is optional, carrying the displayname if present
2018-03-20 23:16:59 +01:00
Daniel Calviño Sánchez 3bd92edd9c Use the display name in the avatar for a circle share
Before, the avatar for a circle share was generated using the
"share_with" field as the seed for "imageplaceholder". Due to this, when
the "share_with" field is set to the circle ID the character shown in
the avatar was just a random character instead of the first character of
the display name. Now the "share_with" is still used as the seed for the
colour, but the display name is used as the text of the avatar.

This adds support for "share_with" fields set to the circle ID while
being backwards compatible with "share_with" fields set to the circle
name.

Note that when "share_with" fields is set to the circle name the colour
of the avatar is different in the list of suggested sharees and in the
list of current sharees, but that also happened before these changes
(due to a different seed being used in each place).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-20 19:42:27 +01:00
Daniel Calviño Sánchez df5cd18394 Set "share_with" field to the ID of the circle
When a share is shared with a circle the "share_with" field returned by
the API endpoint was always set to the name of the circle. However, the
name is not enough to identify a circle. The Circles app now provides
the ID of the circle in the "shared with" field of a Share, so this
commit modifies the API endpoint to set the "share_with" field to the ID
of the circle when provided by the Circles app.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-20 19:42:27 +01:00
Arthur Schiwon e2e27004ff the FN is optional, carrying the displayname if present
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-03-20 14:35:46 +01:00
Nextcloud bot a6f1721c2d [tx-robot] updated from transifex 2018-03-20 01:11:59 +00:00
Nextcloud bot 17ae973d6f [tx-robot] updated from transifex 2018-03-19 01:12:01 +00:00
Nextcloud bot 2b57ddc74d [tx-robot] updated from transifex 2018-03-18 01:12:13 +00:00
Nextcloud bot 23022d5dd7 [tx-robot] updated from transifex 2018-03-17 01:11:55 +00:00
Roeland Jago Douma 9117a982f4 Merge pull request #8849 from nextcloud/backport/8835/stable13
[stable13] group existence check works without attribute (like with users)
2018-03-16 14:25:18 +01:00
Joas Schilling 5e15c76d21 Fix unit tests
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-16 10:50:18 +01:00
Arthur Schiwon 588ee6af06 existence check works without attribute (like with users)
cn is not necessarily given everywhere

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-03-16 10:26:29 +01:00
Nextcloud bot 161a0f29d9 [tx-robot] updated from transifex 2018-03-16 01:11:55 +00:00
Nextcloud bot 4939ff36a0 [tx-robot] updated from transifex 2018-03-15 01:12:05 +00:00
Nextcloud bot 66eaea9259 [tx-robot] updated from transifex 2018-03-14 01:11:56 +00:00
Morris Jobke c2cea293d5 Merge pull request #8807 from nextcloud/final-13.0.1
[stable13] 13.0.1
2018-03-13 19:46:51 +01:00
Morris Jobke ef2de71988 13.0.1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-13 18:22:12 +01:00
Nextcloud bot f66af48d49 [tx-robot] updated from transifex 2018-03-13 01:12:30 +00:00
John Molakvoæ (skjnldsv) ae369e870d Fixed caldav tests and metadata 2
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-03-12 12:02:14 +01:00
Joas Schilling 2609b30df0 Fix group displaynames in activity
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-12 12:01:37 +01:00
Joas Schilling 63089821a4 Correctly return the group name
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-12 12:01:19 +01:00
Joas Schilling 97dbaa26c4 Show the displayname in the users group list
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-12 12:00:54 +01:00
Nextcloud bot 93f5745700 [tx-robot] updated from transifex 2018-03-12 01:12:46 +00:00
Nextcloud bot 8e27fed9d3 [tx-robot] updated from transifex 2018-03-11 01:12:36 +00:00
Nextcloud bot 8e8368ae0b [tx-robot] updated from transifex 2018-03-10 01:12:24 +00:00
Morris Jobke 8d165d63ed Merge pull request #8748 from nextcloud/13.0.1-RC1
13.0.1 RC1
2018-03-09 21:22:14 +01:00
Morris Jobke d1e600773c 13.0.1 RC1
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-09 16:19:00 +01:00
Morris Jobke b0f0c26fe3 Merge pull request #8745 from nextcloud/stable13-8716
[13] Remove base url from global cache prefix
2018-03-09 16:15:48 +01:00
Morris Jobke 17f75d6797 Mock method of actual cache
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-09 15:36:53 +01:00
Morris Jobke f17cabd63e Merge pull request #8758 from nextcloud/stable13-8594-add-acceptance-tests-for-permissions-on-public-shared-folders
[stable13] Add acceptance tests for permissions on public shared folders
2018-03-09 15:23:09 +01:00
Roeland Jago Douma 43243380f1 Always return the depscache
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-09 14:43:54 +01:00
Nextcloud bot f22bae3546 [tx-robot] updated from transifex 2018-03-09 13:31:55 +00:00
Daniel Calviño Sánchez e9f5073677 Add acceptance tests for creation of subfolders in public shared folders
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Daniel Calviño Sánchez 4337de7559 Extract common "wait for" functions to a helper class
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Daniel Calviño Sánchez 05fd72937b Generalize file list steps so a specific ancestor can be used
The "FileListContext" provides steps to interact with and check the
behaviour of a file list. However, the "FileListContext" does not know
the right file list ancestor that has to be used by the file list steps,
so until now the file list steps were explicitly wired to the Files app
and they could be used only in that case.

Instead of duplicating the steps with a slightly different name (for
example, "I create a new folder named :folderName in the public shared
folder" instead of "I create a new folder named :folderName") the steps
were generalized; now contexts that "know" that certain file list
ancestor has to be used by the FileListContext steps performed by
certain actor from that point on (until changed again) set it
explicitly. For example, when the current page is the Files app then the
ancestor of the file list is the main view of the current section of the
Files app, but when the current page is a shared link then the ancestor
is set to null (because there will be just one file list, and thus its
ancestor is not relevant to differentiate between instances)

A helper trait, "FileListAncestorSetter", was introduced to reduce the
boilerplate needed to set the file list ancestor from other contexts.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Daniel Calviño Sánchez 7ebbd666a8 Generalize file list locators so a specific ancestor can be used
The file list is used in other places besides the Files app (for
example, the File sharing app); in those cases the locators for the file
list elements are the same, but not for the ancestor of the file list.
To make possible to reuse the file list locators in those cases too now
they receive the ancestor to use.

Note that the locators for the file actions menu were not using an
ancestor locator because it is expected that there is only one file
actions menu at a time in the whole page; that may change in the future,
but for the time being it is a valid assumption and thus the ancestor
was not added to those locators in this commit.

Although the locators were generalized the steps themselves still use
the "FilesAppContext::currentSectionMainView" locator as ancestor; the
steps will be generalized in a following commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Daniel Calviño Sánchez 0709f4fd67 Store the name of the actor in the Actor object
This is needed to be able to easily use the actor as a key in an array.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Daniel Calviño Sánchez da6743277b Extract file list locators and steps to its own class
Besides the extraction some minor adjustments (sorting locators for file
action menu entries to reflect the order of the menu entries in the UI,
moving parametrized locators like "createMenuItemFor" above the locators
that use them and placing "descendantOf" calls always in a new line)
were made too.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 12:26:58 +01:00
Roeland Jago Douma 56a4c9d68e Merge pull request #8755 from nextcloud/backport/8747/apps-are-updated
[stable13] Revert wording back to updates
2018-03-09 12:12:29 +01:00
Morris Jobke 6176296c80 Merge pull request #8749 from nextcloud/backport/8596/sharee-email-matches-not-limited
[stable13] Sharee email matches not limited
2018-03-09 11:29:15 +01:00
Joas Schilling 92793e9d92 Revert wording back to updates
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-09 11:25:25 +01:00
Morris Jobke 0f1567d8fa Merge pull request #8752 from nextcloud/13-8112
[stable13] Fix integer overflow in ChunkingPlugin
2018-03-09 11:23:28 +01:00
Julius Härtl e2728aaf38 Merge pull request #8746 from nextcloud/8705_13
[stable13] Check if the cached js file exists
2018-03-09 10:37:15 +01:00
Morris Jobke 4fa0cac17c Merge pull request #8725 from nextcloud/objectstore-no-part-files-13
[13]  disable part files for object stores
2018-03-09 10:34:33 +01:00
Morris Jobke ba7cc279e6 Fix integer overflow in ChunkingPlugin
Avoids errors when the size exceeds MAX_INT because of the cast to int. Better cast it to float to avoid this.

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-09 10:27:41 +01:00
Joas Schilling a2f3f0a681 Fix calculation if there are more results
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-09 10:16:42 +01:00
Joas Schilling a31439e89d Add tests for finding own email and user results pagination
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-09 10:16:12 +01:00
Joas Schilling 932fcc9859 Add the users result only when non empty so tests stay the same
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-09 10:15:25 +01:00
Joas Schilling 5b6590f1e9 Also array_slice wide email matches of local users
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-09 10:15:04 +01:00
Roeland Jago Douma 85ba5adb33 Fix tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-09 09:44:36 +01:00
Roeland Jago Douma 2d7d8ca125 Check if the cached js file exists
Fixes #8705

If the file does not exist (for whatever reason). It is never cached. No
matter what the depscache etc tell you.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-09 09:44:32 +01:00
Julius Härtl 88e9542d12 Use cache prefix for theming as well
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-09 09:24:52 +01:00
Julius Härtl d4d3cecbf8 Fix tests to use ICacheFactory
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-09 09:24:50 +01:00
Julius Härtl b14e4ec6a6 Actually clear cache values for all base urls
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-09 09:24:07 +01:00
Julius Härtl a098b57817 Use JSCombiner from server container when searching for JS files
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-09 09:24:07 +01:00
Julius Härtl c4539c34c9 Move base url from global cache prefix to frontend related ones
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-09 09:24:06 +01:00
Roeland Jago Douma d1547ee3b0 Merge pull request #8738 from nextcloud/stable13-8728-better-handling-of-invisible-elements-in-acceptance-tests
[stable13] Better handling of invisible elements in acceptance tests
2018-03-09 08:31:49 +01:00
Daniel Calviño Sánchez fc6c290a4f Add automatic handling of NoSuchElement exceptions
NoSuchElement exceptions are sometimes thrown instead of
StaleElementReference exceptions. This can happen when the Selenium2
driver for Mink performs an action on an element through the WebDriver
session instead of directly through the WebDriver element. In that case,
if the element with the given ID does not exist, a NoSuchElement
exception would be thrown instead of a StaleElementReference exception,
so those cases are handled like StaleElementReference exceptions.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 02:17:04 +01:00
Daniel Calviño Sánchez f0cbeecf21 Add automatic handling of MoveTargetOutOfBounds exceptions
MoveTargetOutOfBounds exceptions are sometimes thrown instead of
ElementNotVisible exceptions. This can happen when the Selenium2 driver
for Mink moves the cursor on an element using the "moveto" method of the
Webdriver session, for example, before clicking on an element. In that
case, if the element is not visible, "moveto" would throw a
MoveTargetOutOfBounds exception instead of an ElementNotVisible
exception, so those cases are handled like ElementNotVisible exceptions.

Note that MoveTargetOutOfBounds exceptions could be thrown too if the
element was visible but "out of reach"; there is no problem in handling
those cases as if the element was not visible, as the exception will be
thrown again anyway once it is verified that the element is indeed
visible.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-09 02:17:04 +01:00
Nextcloud bot b593fd1406 [tx-robot] updated from transifex 2018-03-09 01:12:37 +00:00
Robin Appelman 9342f97a28 emit pre-hooks earlier when not using part files
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-03-08 13:09:09 +01:00
Robin Appelman a95ccf4248 disable part files for object stores
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-03-08 13:09:02 +01:00
Roeland Jago Douma d7a70aba84 Merge pull request #8686 from nextcloud/backport/8298/fix-activities-for-end2end-encryption
[stable13] Fix activities for end2end encryption
2018-03-06 22:44:54 +01:00
Roeland Jago Douma 41f8f68a5a Merge pull request #8693 from nextcloud/13-8173
[stable13] Fix undefined index problem
2018-03-06 19:27:30 +01:00
michaelletzgus 7e651ffd54 Fix undefined index problem
Nextcloud 13RC4, error in logfile, triggered by "occ config:list":

Invalid argument supplied for foreach() at lib/private/AppConfig.php#297
PHP	Undefined index: workflowengine at lib/private/AppConfig.php#297

Fix: Check if index exists in array before using it.
2018-03-06 18:37:52 +01:00
Roeland Jago Douma a637e0d686 Merge pull request #8687 from nextcloud/backport/8328/filter-out-the-current-user-by-email-too
[stable13] Filter out the current user when searching for emails too
2018-03-06 17:11:49 +01:00
Roeland Jago Douma 56d5eb17fe Merge pull request #8688 from nextcloud/13-8557
[stable13] Fix check if theming defaults instance is available
2018-03-06 17:11:37 +01:00
Joas Schilling 173388dcd4 PHP 5.6 compatibility
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 14:05:14 +01:00
Morris Jobke 1bdf4f55cb Merge pull request #8685 from nextcloud/backport/8664/add-missing-settings-page-title-again
[stable13] Set the correct active navigation entry
2018-03-06 13:57:25 +01:00
Morris Jobke 47fa0988d9 Merge pull request #8683 from nextcloud/8474_13
[stable13] Log exceptions that happen when writing the app store reply to storage
2018-03-06 13:39:49 +01:00
Morris Jobke ed8e4cc785 Merge pull request #8667 from nextcloud/8158_13
[stable13] Use a more widely available method to test s3 settings
2018-03-06 13:38:23 +01:00
Morris Jobke 16fa18ab49 Merge pull request #8678 from nextcloud/7707_13
[stable13] generate different UIDs for Birthday, Anniversary and Death event
2018-03-06 13:37:21 +01:00
Morris Jobke eefbcb32ed Fix check if theming defaults instance is available
The check in URLGenerator.php#169 and Server.php#945 are different and thus the DI container could return a \OC_Defaults object which does not provide the wanted method caising a PHP error.

Fixes #8420

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-06 13:24:18 +01:00
Morris Jobke 5f8c773b27 Merge pull request #8680 from nextcloud/8391_13
[stable13] Don't use double quotes in MySQL queries
2018-03-06 13:18:59 +01:00
Joas Schilling 18968e84fc Filter out the current user when searching for emails too
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:20:24 +01:00
Joas Schilling d16aa27516 Fix unit test
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:16:12 +01:00
Joas Schilling 8f8d7cf9d3 Catch exception when the parent is deleted as well
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:16:04 +01:00
Joas Schilling 5d8aaf9696 Do a recursion instead of an endless loop
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:15:57 +01:00
Joas Schilling 7c15b99a49 Fix problem with deleted files
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:15:51 +01:00
Joas Schilling f1e01dbbbc Fix path handling for activities
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:15:45 +01:00
Joas Schilling 737af44b63 Add special handling for e2e encryption
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:15:36 +01:00
Joas Schilling 0911f3bde1 Extract duplicated logic into a method
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:15:13 +01:00
Joas Schilling e11dab4047 Set the correct active navigation entry
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 12:05:19 +01:00
Roeland Jago Douma 242f0c0b5a Merge pull request #8676 from nextcloud/8297_13
[stable13] Fix example regex for user agent matching
2018-03-06 11:54:27 +01:00
Morris Jobke 0667a32c83 Merge pull request #8673 from nextcloud/stable13-8634
[stable13] do not create empty userid when attribute does not have allowed chars
2018-03-06 11:30:48 +01:00
Joas Schilling de1f223961 Log exceptions that happen when writing the app store reply to storage
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 11:29:05 +01:00
Robin Müller 619ee56835 Don't use double quotes in MySQL queries
MySQL databases with the ANSI_QUOTES mode enabled treat " as an identifier
quote (see https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes).
So for such databases the 'occ upgrade' fails with an error message like this:
... unknown column 'oc_*' in where clause.

This fix replaces the doulbe quotes with single quotes that should be always
used in MySQL queries to quote literal strings.

Signed-off-by: Robin Müller <robin.mueller@1und1.de>
2018-03-06 11:25:07 +01:00
Georg Ehrke 6171940717 generate different UIDs for Birthday, Anniversary and Death event
Signed-off-by: Georg Ehrke <developer@georgehrke.com>
2018-03-06 11:20:53 +01:00
Joas Schilling 02af9b2f6f Fix example regex for user agent matching
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-03-06 11:16:41 +01:00
Roeland Jago Douma ff7237a098 Merge pull request #8668 from nextcloud/8217_13
[stable13] Use proper lanugage in langauge code
2018-03-06 09:47:20 +01:00
Roeland Jago Douma f4aae102f7 Merge pull request #8675 from nextcloud/stable13-8601
[13] Remove too restrict check for background image/color
2018-03-06 09:46:52 +01:00
Julius Härtl 80842e1611 Remove to restrict check for background image/color
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-06 09:08:49 +01:00
Nextcloud bot d3d0d9e11d [tx-robot] updated from transifex 2018-03-06 01:12:41 +00:00
blizzz 0045e823fe Merge pull request #8669 from nextcloud/8218_13
[stable13] Display the proper language strings in setttings
2018-03-05 23:46:26 +01:00
Arthur Schiwon 6e3c05f513 do not create empty userid when attribute does not have allowed chars
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-03-05 23:14:36 +01:00
Roeland Jago Douma 19ded76b77 Display the proper language strings in setttings
Since this was moved to lib, we have to the lib language files.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-05 19:48:16 +01:00
Roeland Jago Douma 34671d6ad4 Use proper lanugage in langauge code
Fixes #8180

The _ is not valid in language codes use - instead.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-05 19:44:54 +01:00
Robin Appelman 3036fb95ae Use a more widely available method to test s3 settings
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-03-05 19:41:56 +01:00
Roeland Jago Douma 655e39ffcd Merge pull request #8610 from nextcloud/stable13-8588-fix-breadcrumbs-width-calculation
[stable13] Fix breadcrumbs width calculation
2018-03-05 19:37:53 +01:00
Roeland Jago Douma 07aba8cdac Merge pull request #8663 from nextcloud/fix-ie11-datepicker-display-backport
[stable13] Fixed date/time picker on IE11
2018-03-05 19:35:25 +01:00
John Molakvoæ (skjnldsv) 1b0416b1a1 Fixed date/time picker on IE11
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-03-05 16:40:44 +01:00
Roeland Jago Douma 9432c59db4 Merge pull request #8654 from nextcloud/stable13-8630
[stable13] use hash algo that's robust against collisions
2018-03-05 14:48:49 +01:00
Arthur Schiwon 962b046ab5 use hash algo that's robust against collisions
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-03-05 13:20:22 +01:00
Joas Schilling 6104a7043e Merge pull request #8636 from nextcloud/8289_13
[stable13] AppData hardening
2018-03-05 12:38:43 +01:00
Joas Schilling 479b9465c0 Merge pull request #8631 from nextcloud/stable13-8372
[13] Properly encapsulate require_once for app.php
2018-03-05 12:35:50 +01:00
Nextcloud bot d74bad2dc1 [tx-robot] updated from transifex 2018-03-05 01:12:36 +00:00
Nextcloud bot 7717dbbe30 [tx-robot] updated from transifex 2018-03-04 01:13:07 +00:00
Nextcloud bot e23f06561a [tx-robot] updated from transifex 2018-03-03 01:12:39 +00:00
Roeland Jago Douma 46bb3fee81 Merge pull request #8609 from nextcloud/ie11-nav-flex-fix
[stable13] Fixed app navigation for IE11
2018-03-02 21:27:20 +01:00
Roeland Jago Douma 9413f97b92 Hardening of SimpleFile getContent
if file_get_contents fails remove the file. And traverse up the tree
checking if the other folders are there.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-03-02 21:23:41 +01:00
Julius Härtl 9f7e05e737 Add throws annotation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:16:36 +01:00
Julius Härtl a61608e8c7 Properly encapsulate require_once for app.php
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-03-02 17:16:36 +01:00
Joas Schilling 364e7fe1be Merge pull request #8621 from nextcloud/13-8612
[stable13] Update commentstabview.js
2018-03-02 11:24:22 +01:00
rakekniven cbba3e2432 Update commentstabview.js
Changed typo reported at GitHub.
See https://www.transifex.com/nextcloud/nextcloud/translate/#de_DE/$/91002505?issue=yes

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-03-02 10:41:26 +01:00
Morris Jobke 59d6f45c41 Merge pull request #8615 from nextcloud/stable13-8355
[stable13] Fix comments (and systemtags) when involving users with numerical ids
2018-03-02 10:35:40 +01:00
Nextcloud bot 369b3b28c7 [tx-robot] updated from transifex 2018-03-02 01:12:43 +00:00
Arthur Schiwon 7bd1aac209 backport of #8355 to stable13
test creating comments with numeric user ids

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

fix creating comments when file is accessible to users with numeric ids

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

tests for systemtags related to numeric user ids

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

fix systemtags event with numeric user ids

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-03-02 00:28:20 +01:00
Daniel Calviño Sánchez 22f9d0519a Update comments in tests
Menu and home are not always visible; home is always visible, but menu
is shown only when needed.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 21551d7884 Improve documentation of "getTotalWidth"
"getTotalWidth" is not more accurate; it is simply not clamped.
Moreover, "width/outerWidth" could be used in tests too, and also even
if "getTotalWidth" could be used in tests while others not that would
not be something to be stated in the API documentation, but in a
comment.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 23559b2eda Do not show the crumbs again after hiding them
After the changes in the previous commit "_showCrumb" no longer shows
the menu, only the same crumb that was hidden by the last call to
"_hideCrumb". Therefore, if the crumb was hidden because it did not fit
there is no need to try to show it again, as it will still not fit.

Moreover, the calculated width for a hidden element is not always
accurate; in some cases the calculated width is lower than the actual
width (it happens, for example, when using a background image like the
"Share" icon), which causea the crumb to be shown even if there is not
enough room, which in the end causes the siblings to overflow the
contents.

No unit tests for this one, though; you will have to trust me on this,
sorry ;-)

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez a1af18fa35 Fix menu visibility
The crumb for the menu was shown like any other crumb when calling
"_showCrumb", but it was also shown when other crumbs were hidden
without taking into account the available width. This caused several
related problems, like the breadcrumbs taking too much space when the
menu was sometimes shown after the rest of the crumbs were adjusted to
the available width, or the menu being shown instead of the last crumb
even if there was room for it when the available width was increased.

Now the menu is always hidden before starting the resizing of the crumbs
to ensure that whether it was previously shown or not does not affect
the result. In a similar way, the menu will no longer be shown by
"_showCrumb", as it is not a regular crumb that has to be shown simply
if there is enough room. The menu is now shown as soon as any other
crumb is hidden; this ensures that the menu width will be taken into
account in further width checks. As when _updateMenu" is called it no
longer needs to take care of showing the menu this fixes the issue
revealed when fixing the test setup in the previous commit.

Finally, this implicitly fixes the failure in the breadcrumbs tests when
run on Firefox, as it was caused by the menu interfering in the
calculations of the other crumbs when increasing the width.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez e33a9693f7 Fix setup to test the breadcrumbs menu
The "Shows only items not in the breadcrumb" test was failing when run
on Firefox, but not on PhantomJS. This was caused by the differences in
the starting width between both browsers and an incorrect setup of the
test (the width set for the crumbs was overriden when the breadcrumbs
were rendered again, and the breadcrumb was resized to 300 from an
indeterminate initial width).

Now the crumbs are rendered and then its width, padding and margin are
set to a known value. Then it is resized to 1000px, which ensures that
there will be enough room for all the crumbs and thus the menu will be
hidden, and finally it is resized to 300, which causes the middle crumb
to be hidden and the menu to be shown.

Note, however, that the test now always fails, no matter if it is run on
PhantomJS or on Firefox; if the menu crumb is hidden when "_updateMenu"
is called it will show it, but it will also wrongly try to add the menu
itself to the menu. As the "crumb-id" of the menu crumb is "-1" this
causes the last regular crumb to be added to the menu. This will be
fixed with other related issues in the next commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 83b50690a8 Take padding and margins of crumbs into account
When calculating the total width of the crumbs only its padding was
taken into account; now the margin is too. In a similar way, before
showing a crumb only its width was taken into account; now its padding
and margin are taken into account too.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 89c0a0733f Use hard-coded values for paddings and margins
This ensures that the resize tests do not depend on the values set in
the CSS files.

Note that this change causes a test to fail with Firefox, but not with
PhantomJS. This is due to a difference in the starting width used by
Firefox and by PhantomJS, and it will be fixed in a following commit.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez d9405a2b02 Compress siblings before calculating the available width for crumbs
When the parent element of the breadcrumbs was resized to a larger width
and the siblings of the breadcrumbs expanded to fill all the available
width some crumbs could be hidden even if there was enough room for
them. The reason was that the width of the siblings being used to
calculate the available width for the breadcrumbs was the expanded width
of the siblings. Now as many crumbs as possible (that is, fitting in the
parent, no matter the siblings) are first shown so the expanding
siblings are compressed before calculating the available width.

Due to the lack of support for flexboxes in PhantomJS the related unit
test is skipped; it has to be run in other browser, like Firefox.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez a93dac6a9c Take all visible siblings into account
Other apps could add elements to the controls outside the creatable
actions div (for example, the button to switch to the gallery), so the
widths of all the visible siblings of the breadcrumbs have to be taken
into account in the size calculations.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez bb85084c3d Take padding and margin of the creatable actions div into account
There are some differences in width handling between the browsers used
to run the tests, most likely due to their support (or lack of) of
certain CSS features: PhantomJS requires "width" to be set (probably
because it does not handle flex displays and treats it like a block, so
"min-width" does not matter in this case), while Firefox requires
"min-width" to be set (otherwise the children of "#controls" could be
compressed due to its use of flex display and the elements would end
with a different width than the one needed for the tests). Due to all
that the width of the breadcrumb siblings must be specified in the tests
using both "width" and "min-width".

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 1da92fd5da Do not render the breadcrumbs again in resize tests
There is no need to call "setDirectory" again in resize tests; it is
enough to simply resize them (and isolates them better to just test the
resizing behaviour).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 2fd3fa20df Replace attribute with local variable
The "usedWidth" attribute was not used elsewhere outside the "_resize"
method, so it was replaced with a local variable. Moreover, it was also
renamed to a more suitable name ("availableWidth").

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
Daniel Calviño Sánchez 61bd3631d9 Set the width of the parent element in breadcrumb tests
Setting the width of the parent element of the breadcrumbs and then
explicitly calling "_resize" is enough to test the resizing behaviour.
This makes possible to remove the "setMaxWidth" method and its related
code, which was used only for testing purposes.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 20:33:14 +01:00
John Molakvoæ (skjnldsv) bc2032bed7 fixup! Fixed app navigation for IE11
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-03-01 20:22:49 +01:00
John Molakvoæ (skjnldsv) b768040fca Fixed app navigation for IE11
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-03-01 20:22:42 +01:00
Roeland Jago Douma a2672a2ad8 Merge pull request #8561 from nextcloud/ext-strg-warning-fix
[stable13] Ext storage error warning
2018-03-01 19:36:55 +01:00
Morris Jobke 5a20f64300 Merge pull request #8595 from nextcloud/stable13-8589-fix-upload-button-visible-on-read-only-folders
[stable13] Fix upload button visible on read-only folders
2018-03-01 11:56:59 +01:00
Nextcloud bot 03f127f162 [tx-robot] updated from transifex 2018-03-01 01:12:37 +00:00
Daniel Calviño Sánchez 14abe6a9e0 Fix upload button visible on read-only folders
The div that contains the elements related to the creation of new files,
and thus the upload button, is always present in the DOM; it is hidden
or shown based on the folder permissions by adding or removing the
"hidden" CSS class. However, as the other CSS classes for the div are
"actions" and "creatable" and a "display: flex" rule was defined for
".actions.creatable" below the "display: none" rule for
".actions.hidden" the last one took precedence and the div ended being
always visible, even if the "hidden" CSS class was set. Now the rules
for the ".actions.hidden" selector are defined below the rules for the
".actions.creatable" selector and thus the "display: none" rule is
applied as expected.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-03-01 01:52:08 +01:00
Roeland Jago Douma d7e5a660ca Merge pull request #8577 from nextcloud/8576_13
[stable13] Set autocomplete=new-password for mail share password
2018-02-28 21:07:08 +01:00
Roeland Jago Douma 2c6f3c88cf Merge pull request #8099 from nextcloud/7873_13
[stable13] Don't perform CSRF check on OCS routes with Bearer auth
2018-02-28 14:34:20 +01:00
Roeland Jago Douma 338795a03d Set autocomplete=new-password for mail share password
This avoids the browser to do autocompletion on the mail share password
field.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-28 14:01:43 +01:00
Nextcloud bot d33a93c6f9 [tx-robot] updated from transifex 2018-02-28 01:12:57 +00:00
John Molakvoæ (skjnldsv) 30b9c139b6 Updated error message
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-02-27 12:14:34 +01:00
John Molakvoæ (skjnldsv) 6ff85e1dd6 Fixed default urls
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-02-27 12:14:29 +01:00
John Molakvoæ (skjnldsv) 018ff68f45 Show error if no external storage configured
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-02-27 12:14:23 +01:00
Julius Härtl 282b79c4b1 Merge pull request #8554 from kyrofa/backport_13/8462/theming_app_outside_root
[stable13] theming: handle not being in the serverroot
2018-02-27 10:37:46 +01:00
Nextcloud bot 4c52fed779 [tx-robot] updated from transifex 2018-02-27 01:14:50 +00:00
Kyle Fazzari 4ecf31541b theming: handle not being in the serverroot
Currently, the theming app assumes it's in the serverroot. However, with
Nextcloud's flexibility regarding configurable app paths, this is not a
safe assumption to make. If it happens to be an incorrect assumption,
the theming app fails to work.

Instead of relying on the serverroot, just use the path from the
AppManager and utilize relative paths for assets from there.

Fix #8462

Signed-off-by: Kyle Fazzari <kyrofa@ubuntu.com>
2018-02-26 10:24:34 -08:00
Morris Jobke 88ece3f5d7 Merge pull request #8532 from nextcloud/8499-stable13
[stable13]  Avoid fruitless login attempts
2018-02-26 15:10:52 +01:00
Morris Jobke bf2f744bc7 Merge pull request #8536 from nextcloud/8522-stable13
[stable13] Fix retrieval of group members with numerical uids from LDAP
2018-02-26 15:10:26 +01:00
Arthur Schiwon 8acec5309c fix retrieving group members with numerical uids from LDAP
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-02-26 13:33:35 +01:00
Arthur Schiwon b02d3a27ba tests for retrieving group members with numerical uids
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-02-26 13:33:25 +01:00
Arthur Schiwon fb2ebbd232 don't try login with the same name that just failed
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-02-26 10:32:38 +01:00
Arthur Schiwon f015d38a89 track the state of the bind result
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-02-26 10:32:31 +01:00
Roeland Jago Douma 7e424e52a3 Merge pull request #8518 from nextcloud/stable13-8507
Add some whitespace around change.svg icon (stable13)
2018-02-24 16:25:51 +01:00
Roeland Jago Douma 3c3d007068 Merge pull request #8515 from nextcloud/13-8502
[stable13] Show hint in OCS API for user creation
2018-02-24 16:24:58 +01:00
Nextcloud bot 1eb8aee0e6 [tx-robot] updated from transifex 2018-02-24 01:12:42 +00:00
blizzz a4fbe80f73 Merge pull request #8517 from nextcloud/stable13-8416
[stable13] Fix hiding and event propagation issues with the user management popover
2018-02-23 13:01:43 +01:00
Marin Treselj 5d2feda77c Add some whitespace around change.svg icon (stable13)
Signed-off-by: Marin Treselj <marin@pixelipo.com>
2018-02-23 11:11:20 +01:00
Julius Härtl fef3f23492 Fix hiding and event propagation issues with the user management popover
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-23 11:10:03 +01:00
Morris Jobke 168f188596 Show hint in OCS API for user creation
* adds a 107 error code together with the hint of the exception
* logs the exception as warning
* fixes #7946

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-23 10:24:26 +01:00
Nextcloud bot a5b73fe761 [tx-robot] updated from transifex 2018-02-23 01:12:43 +00:00
Nextcloud bot 367770adab [tx-robot] updated from transifex 2018-02-22 01:12:53 +00:00
Roeland Jago Douma 27aa0761bc Merge pull request #8470 from nextcloud/13-8468
[stable13] Use mb_* string methods to extract first character for generated avatars
2018-02-21 13:29:28 +01:00
Morris Jobke f1568b96ce Use mb_* string methods to extract first character for generated avatars
This fixes #8451 where the first character is a non-ASCII character. The `$string[0]` notation only extracted one byte and thus resulting in an invalid code. The `mb_strtoupper` method also allows to convert characters independently from the current locale on the server.

See also http://php.net/manual/en/function.mb-strtoupper.php

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-21 12:40:16 +01:00
Nextcloud bot 86be2687fb [tx-robot] updated from transifex 2018-02-21 01:12:33 +00:00
Morris Jobke 58cc34b816 Merge pull request #8267 from nextcloud/8206_13
[stable13] Better result handling of email search
2018-02-20 23:54:16 +01:00
Joas Schilling d63caf5829 Better result handling of email search
1. Local users should not be returned when searching for empty string
2. The limit of the response should be respected

Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-02-20 17:47:54 +01:00
Roeland Jago Douma a3de507b76 Merge pull request #8440 from nextcloud/8428_13
[stable13] Use TTF fonts for avatar generation
2018-02-20 08:21:04 +01:00
Nextcloud bot 16a4e7192c [tx-robot] updated from transifex 2018-02-20 01:12:21 +00:00
Roeland Jago Douma a4159378be Avatar generation use ttf (for ancient compatibility)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-19 22:12:56 +01:00
Roeland Jago Douma 535816a6d4 Add TTF of OpenSand-{Ligh,Semibold}
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-19 22:12:51 +01:00
Nextcloud bot b5029f8975 [tx-robot] updated from transifex 2018-02-19 01:12:17 +00:00
Nextcloud bot 3d06d946b0 [tx-robot] updated from transifex 2018-02-18 01:12:28 +00:00
Morris Jobke 577a3cf145 Merge pull request #8407 from nextcloud/stable13-8376-devgals
[stable13] Fix edit tag textbox size
2018-02-17 15:38:34 +01:00
Aastha Gupta 09dbcd9647 Fix edit tag textbox size
Fixes #7586

Signed-off-by: Aastha Gupta <aastha.gupta4104@gmail.com>
2018-02-17 15:56:59 +05:30
Nextcloud bot b631cc1286 [tx-robot] updated from transifex 2018-02-17 01:12:30 +00:00
Morris Jobke 964b511b39 Merge pull request #8395 from nextcloud/stable13-8382-make-acceptance-tests-for-comments-more-consistent-with-the-others
[stable13] Make acceptance tests for comments more consistent with the others
2018-02-16 14:33:49 +01:00
Daniel Calviño Sánchez 5fd7de5275 Take into account the comment message when looking for it
Instead of checking that the list contains one comment it is now checked
that a comment with certain message is visible. This makes the step (and
the locator) more reusable in future tests and also simplifies the code.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-02-16 12:24:35 +01:00
Daniel Calviño Sánchez d9e66b2114 Adjust timeouts in the step to create a new comment
Depending on the previous steps the new comment field may be already
shown or not when the step to create a new comment is executed.
Therefore, the timeout was increased from 2 to the "standard" 10 seconds
used in other tests.

If the new comment field was found there is no need to use a timeout
when looking for the new comment button; it is either there or not, it
will not appear after some time.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-02-16 12:24:35 +01:00
Daniel Calviño Sánchez f6737e43e9 Move locators above step definitions
The locators are moved above the step definitions for consistency with
other context files; besides that I made some minor adjustments for
consistency too in the locator descriptions and identation, and moved
the locators for ".newCommentRow" descendants together.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-02-16 12:24:35 +01:00
Daniel Calviño Sánchez 38a03f3193 Add acceptance tests for comments to Drone
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-02-16 12:24:34 +01:00
Nextcloud bot de9865b9d9 [tx-robot] updated from transifex 2018-02-16 01:12:34 +00:00
Nextcloud bot ef367f8bfe [tx-robot] updated from transifex 2018-02-14 21:37:55 +00:00
Nextcloud bot adb9ad29fa [tx-robot] updated from transifex 2018-02-14 01:12:17 +00:00
Nextcloud bot 7d1c9eef8d [tx-robot] updated from transifex 2018-02-13 10:48:56 +00:00
Roeland Jago Douma 57e3900095 Merge pull request #8261 from nextcloud/s3-folder-delete-13
[13] Fix deleting folders when using s3 external storage
2018-02-13 07:45:02 +01:00
Nextcloud bot 2e271313c9 [tx-robot] updated from transifex 2018-02-12 21:34:01 +00:00
Robin Appelman 2a6f8e65c2 fix invalidating folder cache for s3
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-02-12 20:23:10 +01:00
Robin Appelman 3257bf2424 adjust s3 bulk delete to new sdk syntax
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-02-12 20:23:10 +01:00
Morris Jobke 4c21fc802f Merge pull request #8309 from nextcloud/8308_13
[stable13] Show open graph preview in WhatsApp
2018-02-12 14:24:17 +01:00
Roeland Jago Douma ad7c31914f Show open graph preview in WhatsApp
Whatsapp is picky about the size of the open graph images.
So we do some special handling.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-12 11:12:27 +01:00
John Molakvoæ e47e1f6bdd Merge pull request #8287 from nextcloud/stable13-8165
[13] Remove jquery ui background image
2018-02-10 00:05:01 +01:00
John Molakvoæ 3f91eaedfc Merge pull request #8286 from nextcloud/stable13-8155
[13] Fix styling issues of guest pages #8155
2018-02-10 00:04:40 +01:00
Julius Härtl f248c7a583 Remove jquery ui background image
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 17:47:19 +01:00
Julius Härtl ef571d69f3 Add space on guest pages with custom logo
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 17:46:48 +01:00
Julius Härtl 1b3e3dfada Load guest css on any guest and error page
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 17:46:48 +01:00
Julius Härtl e3fb91756a Make sure theming logo css only applies when a logo is set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-09 17:46:47 +01:00
Nextcloud bot 9c9c438c8b [tx-robot] updated from transifex 2018-02-09 15:29:20 +00:00
Morris Jobke 832c0c480b Merge pull request #8271 from nextcloud/13-8270
[stable13] Update CRL to revoke files_rightclick
2018-02-09 09:57:36 +01:00
Morris Jobke 9586dc6c92 Merge pull request #8145 from nextcloud/13-unperl-l10n
[stable13] Remove old perl script to update l10n files
2018-02-09 09:56:26 +01:00
Morris Jobke 9bc0de9ab6 Update CRL to revoke files_rightclick
See https://github.com/nextcloud/app-certificate-requests/pull/134

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-09 09:44:55 +01:00
Nextcloud bot 2845166e2a [tx-robot] updated from transifex 2018-02-09 01:11:05 +00:00
Roeland Jago Douma 71cadf465b Merge pull request #8264 from nextcloud/fix_dev_man_link_13
[stable13] Link to NC13 dev manual
2018-02-08 20:05:35 +01:00
Morris Jobke 95ac2e31ae Remove old perl script to update l10n files
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-08 18:22:04 +01:00
Roeland Jago Douma a6bb42d3e8 [stable13] Link to NC13 dev manual
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-08 15:13:51 +01:00
Morris Jobke 197c97e242 Merge pull request #8102 from nextcloud/s3-uploader-13
[13] Use S3Client::upload instead of splitting single/multipart upload ourselves
2018-02-08 14:31:23 +01:00
Morris Jobke e2cb6a3b3c Merge pull request #8183 from robert-scheck/pki-validation-stable13
[stable13] Handle SSL certificate verifications for others than Let's Encrypt
2018-02-08 11:02:33 +01:00
Joas Schilling 78e3b6400a Merge pull request #8253 from nextcloud/13-8252
[stable13] Remove invalid link to documentation
2018-02-08 10:20:39 +01:00
Roeland Jago Douma 55d5868da5 Update tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-08 10:16:38 +01:00
Roeland Jago Douma f1cd334281 Don't perform CSRF check on OCS routes with Bearer auth
Fixes #5694

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-08 10:16:38 +01:00
Roeland Jago Douma 202dd62951 Merge pull request #8250 from nextcloud/8233_13
[stable13] actually return stream from swift
2018-02-08 09:07:33 +01:00
Morris Jobke 7701c7fab6 Remove invalid link to documentation
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-08 08:46:36 +01:00
Robin Appelman 6296c498b2 actually return stream from swift
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-02-08 08:10:08 +01:00
Nextcloud bot 5e3cb24efa [tx-robot] updated from transifex 2018-02-08 01:10:40 +00:00
Joas Schilling 36eb93deac Merge pull request #8228 from nextcloud/dav-dir-exception-previous-13
[13] keep previous exception when transforming to dav exception
2018-02-07 17:05:27 +01:00
Robin Appelman 38cb28db1f keep previous exception when transforming to dav exception
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-02-07 14:44:11 +01:00
Nextcloud bot f8740a1f0c [tx-robot] updated from transifex 2018-02-07 11:32:08 +00:00
Roeland Jago Douma 7486d021b1 Merge pull request #8197 from nextcloud/stable13-8144
[stable13] Repair step to clear frontend related caches
2018-02-07 09:02:37 +01:00
Nextcloud bot 1ec43c8265 [tx-robot] updated from transifex 2018-02-07 01:10:36 +00:00
Morris Jobke b16824db31 Merge pull request #8195 from nextcloud/13-8172
[stable13] Use a phan version instead of master
2018-02-06 16:41:58 +01:00
Roeland Jago Douma b55b1b5854 Merge pull request #8045 from nextcloud/8002_13
[stable13] Dont polute the log on DAV emaillogin
2018-02-06 15:34:28 +01:00
Roeland Jago Douma c1423eec24 Use a phan version instead of master
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-06 14:20:30 +01:00
Roeland Jago Douma b837d3f332 Fix tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-06 12:32:51 +01:00
Julius Härtl 69b22c2d61 Move depsCache clearing to SCSSCacher/JSCombiner
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-06 12:32:50 +01:00
Julius Härtl bf24b4db24 Add tests and class mapping
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-06 12:32:50 +01:00
Julius Härtl 31313178a5 Add repair step to clear frontend related caches
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-06 12:32:48 +01:00
Morris Jobke b2068704e7 Merge pull request #8156 from nextcloud/stable13-8078
[Stable13] Scss hardening
2018-02-06 12:17:45 +01:00
Morris Jobke 0fc97b2104 Merge pull request #8177 from nextcloud/8160_13
[stable13] Do not try to get the jailed path if we can't find the id
2018-02-06 11:18:46 +01:00
Nextcloud bot 9da8032b39 [tx-robot] updated from transifex 2018-02-06 01:10:34 +00:00
Morris Jobke 3b4285e13f Merge pull request #8187 from nextcloud/13-final
Final 13.0.0
2018-02-06 01:24:06 +01:00
Morris Jobke bc171d46e6 Final 13.0.0
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-05 18:20:47 +01:00
Robert Scheck de07c82a4d Handle SSL certificate verifications for others than Let's Encrypt
Do no longer (wrongly) rewrite URLs like

  * http://example.net/.well-known/pki-validation/file.txt (Comodo)
  * http://example.net/.well-known/pki-validation/fileauth.txt (DigiCert, Thawte, GeoTrust)
  * http://example.net/.well-known/pki-validation/gsdv.txt (GlobalSign)
  * http://example.net/.well-known/pki-validation/starfield.htm (Starfield, GoDaddy)
  * http://example.net/.well-known/pki-validation/swisssign-check.txt (SwissSign)

for automated SSL certificate verifications. All (common commercial)
certificate authorities (CA) except Let's Encrypt (via ACME) seem to
use "pki-validation" rather "acme-challenge" for their domain control
validation (DCV).

Signed-off-by: Robert Scheck <robert@fedoraproject.org>
2018-02-05 15:37:23 +01:00
Roeland Jago Douma b88aeb2166 Do not try to get the jailed path if we can't find the id
Fixes #8047

If we can't find the file by id there we should just return null instead
of trying to get the jailed path of null.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-02-05 12:42:47 +01:00
Nextcloud bot 976e5e35f7 [tx-robot] updated from transifex 2018-02-05 01:10:30 +00:00
Nextcloud bot e268181b84 [tx-robot] updated from transifex 2018-02-04 01:10:40 +00:00
Nextcloud bot 064ff027fd [tx-robot] updated from transifex 2018-02-03 01:10:43 +00:00
Morris Jobke 9e907901a0 Merge pull request #8151 from nextcloud/13-8150
[stable13] Update CRL because user_sql cert was lost
2018-02-02 13:34:28 +01:00
Julius Härtl 7870cc2b67 Fix theming tests
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:06:50 +01:00
Julius Härtl 9915ebb75f Add tests for URL rewriting
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:06:04 +01:00
Julius Härtl 106af04355 Do not rewrite absolute URLs
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:05:58 +01:00
Julius Härtl cee941a6a3 Clear injectect variables when resetting the cache
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:05:52 +01:00
Julius Härtl 76c79ff18f Only override image styles if the theming values are set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:05:41 +01:00
Julius Härtl 73ae7b0c5f Make sure that injected variables do not break the CSS generation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:05:25 +01:00
Julius Härtl d8e0a6ee32 SCSS files are only cached if their size is > 0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-02-02 13:05:03 +01:00
Morris Jobke b2e3e29266 Merge pull request #8142 from nextcloud/13-update-server
[stable13] Use correct update server
2018-02-02 12:18:29 +01:00
Morris Jobke 254be1dacd Update CRL because user_sql cert was lost
* see https://github.com/nextcloud/app-certificate-requests/pull/129

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-02 11:59:24 +01:00
Nextcloud bot 6989c65acf [tx-robot] updated from transifex 2018-02-02 01:10:28 +00:00
Nextcloud bot 501685288b [tx-robot] updated from transifex 2018-02-01 18:28:19 +00:00
Nextcloud bot d5e56b34c4 [tx-robot] updated from transifex 2018-02-01 17:20:02 +00:00
Christoph Wurst 62f4454d99 Merge pull request #8138 from nextcloud/13-update-doc-version
Update doc link version to 13
2018-02-01 14:45:45 +01:00
Morris Jobke d9e229ab70 Use correct update server
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-01 14:43:53 +01:00
Morris Jobke f46573d836 Update doc link version to 13
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-02-01 13:53:24 +01:00
Nextcloud bot 2e6e969fbc [tx-robot] updated from transifex 2018-02-01 01:11:06 +00:00
Morris Jobke 88d5f6ec63 Merge pull request #8127 from nextcloud/13-final-rc
13.0.0 RC 4
2018-01-31 20:31:17 +01:00
Morris Jobke 2cc1cdba6f 13.0.0 RC 4
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-31 17:31:18 +01:00
Morris Jobke c39a40f15f Merge pull request #8126 from nextcloud/13-8121
[stable13] Create the migrations table also with the UTF8mb4 collation
2018-01-31 17:29:00 +01:00
Roeland Jago Douma dabce9685b Merge pull request #8124 from nextcloud/app-nav-flex-margins-fix
[stable13] Fixed app navigation flex margins
2018-01-31 15:56:18 +01:00
Joas Schilling 119de6467f Create the migrations table also with the UTF8mb4 collation
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-31 15:54:28 +01:00
John Molakvoæ (skjnldsv) 22c083b58a Fixed app navigation flex margins
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
2018-01-31 14:51:27 +01:00
Morris Jobke bb7a2b2329 Merge pull request #8073 from nextcloud/stable13-8069
[stable13] do not catch and ignore ServerNotAvailable in the wrong spot
2018-01-31 14:46:55 +01:00
Morris Jobke 10110e85eb Merge pull request #8116 from nextcloud/8111_13
[stable13] Only handle encrypted property on folders
2018-01-31 14:46:18 +01:00
Nextcloud bot fb11969916 [tx-robot] updated from transifex 2018-01-31 01:11:04 +00:00
Roeland Jago Douma f924a6d7d9 Only handle encrypted property on folders
Exposing the encrypted property is required for E2E. However, there is
no need to expose this on files as then it is server side encryption
(which the clients don't care about).

Better to not confuse the output.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-30 21:56:32 +01:00
Nextcloud bot c30e958dac [tx-robot] updated from transifex 2018-01-30 01:11:20 +00:00
Robin Appelman 7ab3a7e2c3 Use S3Client::upload instead of splitting single/multipart upload ourselves
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-01-29 16:11:05 +01:00
Nextcloud bot 7b227d8712 [tx-robot] updated from transifex 2018-01-29 01:11:05 +00:00
Nextcloud bot 5700467c29 [tx-robot] updated from transifex 2018-01-27 01:11:03 +00:00
Arthur Schiwon d61dd36fdd do not catch ServerNotAvailable
might cause the user to be unavailable (race condition).

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-01-26 15:35:26 +01:00
Morris Jobke d82d1a8a81 Merge pull request #8027 from nextcloud/13.0.0-last-rc
13.0.0 RC3
2018-01-26 15:27:57 +01:00
Morris Jobke fabf75a7d3 13.0.0 RC3
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-26 14:43:20 +01:00
Nextcloud bot 0aca61d73e [tx-robot] updated from transifex 2018-01-26 01:11:04 +00:00
Roeland Jago Douma 2bed7a7f95 Fix tests
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-25 12:23:56 +01:00
Roeland Jago Douma 9dfd3544c2 Don't polute log when loggin into dav with email
* We first try the email as username but this fails
* Then we get the uid from the email and try again

We should not log the first attempt since it polutes the log with failed
login attempts while the login actually is valid.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-25 12:23:50 +01:00
Nextcloud bot e79a755d08 [tx-robot] updated from transifex 2018-01-25 01:11:19 +00:00
Roeland Jago Douma d76f08dfbd Merge pull request #8034 from nextcloud/13-8032
[stable13] Fix missing clipboard icon in shared links
2018-01-24 19:19:46 +01:00
Daniel Calviño Sánchez 326af0c9c3 Fix missing clipboard icon in shared links
The clipboard icon in shared links appears either directly on the link
input field or, if any social sharing app is enabled, in a menu. The
clipboard icon uses the same CSS rules as other icons (like the
information icon) to be posioned on the end of the input field, and
those rules have to be "cancelled" when the icon is shown in the menu.

Fixes #7990

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2018-01-24 17:25:50 +01:00
Morris Jobke 52149d2c54 Merge pull request #8031 from nextcloud/7921_12
[stable13] Removed additional and uneccessary request on password reset, to fix redirection afterwards.
2018-01-24 17:24:51 +01:00
Morris Jobke a0f62b71c8 Merge pull request #8030 from nextcloud/7986_12
[stable13] If the preview is size 0 it is invalid
2018-01-24 16:40:44 +01:00
Roeland Jago Douma 1a21524f6f Merge pull request #8025 from nextcloud/13-8020
[stable13] Make sure we always know for sure if an avatar is generated or not
2018-01-24 16:28:55 +01:00
Morris Jobke 76636dea9c Merge pull request #8029 from nextcloud/13-7991
[stable13] Send a proper response for status.php on trusted domain error
2018-01-24 16:22:06 +01:00
Luca Adrian Lindhorst 6b954e6cd6 Removed additional and uneccessary request on password reset, to fix redirection afterwards.
Signed-off-by: Luca Adrian Lindhorst <info@lucalindhorst.de>
2018-01-24 16:14:37 +01:00
Roeland Jago Douma f259e1cb8c If the preview is size 0 it is invalid
* delete it
* throw a NotFound Exception
  - This should a proper 404 to the user
  - Next time it is then regenerated

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2018-01-24 16:11:36 +01:00
Morris Jobke 986623e2ac Send a proper response for status.php on trusted domain error
* fixes #7732

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-24 15:42:25 +01:00
Julius Härtl 0209690d55 Make sure we always know for sure if an avatar is generated or not
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2018-01-24 15:05:38 +01:00
Nextcloud bot 3b35c226ce [tx-robot] updated from transifex 2018-01-24 01:11:02 +00:00
Robin Appelman 3d10c3ace5 increase the time we wait for smb notifications in the test
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-01-23 09:54:34 +01:00
Nextcloud bot 924298f740 [tx-robot] updated from transifex 2018-01-23 01:11:03 +00:00
Nextcloud bot 823a14fae6 [tx-robot] updated from transifex 2018-01-22 01:10:53 +00:00
Nextcloud bot 883817e62a [tx-robot] updated from transifex 2018-01-21 01:11:04 +00:00
Nextcloud bot 4c431d39eb [tx-robot] updated from transifex 2018-01-20 01:11:10 +00:00
Roeland Jago Douma 1ecf10e26d Merge pull request #7963 from nextcloud/smb-2.0.4-13
[13] update icewind/smb to 2.0.4
2018-01-19 20:24:21 +01:00
Robin Appelman 31b922d2f5 update icewind/smb to 2.0.4
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-01-19 16:23:22 +01:00
Nextcloud bot bec72bf9ff [tx-robot] updated from transifex 2018-01-19 01:11:08 +00:00
Morris Jobke 6719c7723a Merge pull request #7940 from nextcloud/13.0.0-rc2-prep
13.0.0 RC2
2018-01-18 17:41:43 +01:00
Morris Jobke 0b3623a71d 13.0.0 RC2
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-18 17:05:46 +01:00
Morris Jobke eb03435377 Merge pull request #7944 from nextcloud/backport/7912/correctly-drop-owncloud-migrations-table
[stable13] Correctly drop the ownCloud migrations table
2018-01-18 17:03:15 +01:00
Morris Jobke b7da6f13ff Merge pull request #7942 from nextcloud/7941-stable13
[stable13] remove hardcoded sharepoint icon path
2018-01-18 16:47:55 +01:00
Morris Jobke 0a76d72a1d Merge pull request #7943 from nextcloud/backport/7812/make-sure-the-arrays-are-arrays
[stable13] Make sure the arrays are arrays
2018-01-18 16:47:16 +01:00
Morris Jobke 9cda3206ff Properly catch InvalidTokenException for better error response
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-18 16:11:21 +01:00
Joas Schilling 809928c176 Correctly drop the ownCloud migrations table
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-18 15:59:05 +01:00
Joas Schilling 73a6717016 Make sure the arrays are arrays
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-18 15:56:24 +01:00
Arthur Schiwon 1703c25b26 remove hardcoded sharepoint icon path
it does not exist and if it would, it was not themable

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-01-18 15:47:25 +01:00
Daniel Calviño Sánchez a0499e0258 Merge pull request #7932 from nextcloud/7914-stable13
[stable13] format self-mentions, but don't offer them
2018-01-18 14:20:26 +01:00
Arthur Schiwon 92bc33dd1e Backport of format self-mentions, but don't offer them #7914
comments should compile mentions also if done by author

it is used by clients for formatting reasons, there is no reason not format
the author if her handle is included in the comment body.
It is unrelated to sending out notifications.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

do not offer the handle of the current user for auto completion

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>

add types to php doc

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2018-01-18 12:08:08 +01:00
Nextcloud bot 266c64069f [tx-robot] updated from transifex 2018-01-18 01:10:52 +00:00
Roeland Jago Douma 414d6e2184 Merge pull request #7915 from nextcloud/backport/7909/fix-migration-type-hints
Fix the type hints of migrations and correctly inject the wrapped sch…
2018-01-17 14:55:18 +01:00
Joas Schilling ed999066e5 Fix the type hints of migrations and correctly inject the wrapped schema into migrations
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-17 13:53:09 +01:00
Morris Jobke 9efdd684c4 Merge pull request #7903 from nextcloud/13-7891
[stable13] Fix systemtags/list to be compliant
2018-01-17 11:40:56 +01:00
Nextcloud bot c042ae8d61 [tx-robot] updated from transifex 2018-01-17 01:11:11 +00:00
Morris Jobke 7ea3623cd9 Merge pull request #7887 from nextcloud/backport/7879/dont-disable-shipped-apps-on-errors
[stable13] Keep all shipped apps enabled because they should be okay
2018-01-16 21:52:36 +01:00
Morris Jobke e643af16d3 Fix systemtags/list to be compliant
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-16 21:48:32 +01:00
Roeland Jago Douma 4b2e98953b Merge pull request #7883 from nextcloud/search-and-13
[13] Support arbitrary number of arguments for d:or and d:and in search queries
2018-01-16 20:21:08 +01:00
Joas Schilling c32a13fb5b Merge pull request #7886 from nextcloud/13-7885
[stable13] Add OCP\User deprecations to app code checker
2018-01-16 14:17:36 +01:00
Joas Schilling d639dfacb7 Keep all shipped apps enabled because they should be okay
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-16 13:41:09 +01:00
Morris Jobke 0fafa794da Add OCP\User deprecations to app code checker
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-16 13:33:58 +01:00
Robin Appelman 3a1390fdb7 Support arbitrary number of arguments for d:or and d:and in search queries
Signed-off-by: Robin Appelman <robin@icewind.nl>
2018-01-16 13:27:52 +01:00
Christoph Wurst c25da25180 Merge pull request #7878 from nextcloud/13-7877
[stable13] Deprecated checkLoggedIn and other old ways to access control
2018-01-16 12:23:39 +01:00
Morris Jobke 09908a737f Deprecated checkLoggedIn and other old ways to access control
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
2018-01-16 10:43:03 +01:00
Nextcloud bot 43a53c0c8e [tx-robot] updated from transifex 2018-01-16 01:11:05 +00:00
Morris Jobke 3baa5fada8 Merge pull request #7806 from nextcloud/fix-7805
Fix bug with proxies
2018-01-15 00:50:25 +01:00
Joas Schilling f2706cb572 Add unit test
Signed-off-by: Joas Schilling <coding@schilljs.com>
2018-01-15 00:49:28 +01:00
Mario Danic c7eaa26f73 Fix bug with proxies
Signed-off-by: Mario Danic <mario@lovelyhq.com>
2018-01-15 00:49:22 +01:00
4080 changed files with 92366 additions and 181683 deletions
-3
View File
@@ -1,8 +1,5 @@
codecov:
branch: master
ci:
- drone.nextcloud.com
- !scrutinizer-ci.com
coverage:
precision: 2
+934 -2300
View File
File diff suppressed because it is too large Load Diff
+1 -8
View File
@@ -1,5 +1,6 @@
# the default generated dir + db file
/data
/owncloud
/config/config.php
/config/*.config.php
/config/mimetype*.json
@@ -12,7 +13,6 @@
# ignore all apps except core ones
/apps*/*
!/apps/accessibility
!/apps/comments
!/apps/dav
!/apps/files
@@ -42,9 +42,6 @@
/apps/files_external/3rdparty/irodsphp/prods/test*
/apps/files_external/tests/config.*.php
# apps modules
/apps/*/node_modules
# ignore themes except the example and the README
/themes/*
@@ -121,7 +118,6 @@ nbproject
/build/jsdocs/
/npm-debug.log
/PhantomJS_*
/build/package-lock.json
# puphpet
puphpet
@@ -139,9 +135,6 @@ Vagrantfile
/tests/autotest*
/tests/data/lorem-copy.txt
/tests/data/testimage-copy.png
/tests/ui-regression/out/
/tests/ui-regression/node_modules/
/tests/ui-regression/package-lock.json
/config/config-autotest-backup.php
/config/autoconfig.php
clover.xml
+2 -3
View File
@@ -16,7 +16,6 @@
Header set X-Robots-Tag "none"
Header set X-Download-Options "noopen"
Header set X-Permitted-Cross-Domain-Policies "none"
Header set Referrer-Policy "no-referrer"
SetEnv modHeadersAvailable true
</IfModule>
@@ -24,7 +23,7 @@
<FilesMatch "\.(css|js|svg|gif)$">
Header set Cache-Control "max-age=15778463"
</FilesMatch>
# Let browsers cache WOFF files for a week
<FilesMatch "\.woff$">
Header set Cache-Control "max-age=604800"
@@ -64,7 +63,7 @@
RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L]
RewriteRule ^remote/(.*) remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
RewriteCond %{REQUEST_URI} !^/.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:\.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
<IfModule mod_mime.c>
+2
View File
@@ -0,0 +1,2 @@
pattern = "(?i):shipit:|:\\+1:|LGTM|👍"
self_approval_off = true
-6
View File
@@ -127,9 +127,3 @@ file_filter = translationfiles/<lang>/workflowengine.po
source_file = translationfiles/templates/workflowengine.pot
source_lang = en
type = PO
[nextcloud.accessibility]
file_filter = translationfiles/<lang>/accessibility.po
source_file = translationfiles/templates/accessibility.pot
source_lang = en
type = PO
+1 -1
View File
@@ -58,7 +58,7 @@ like `git config --global alias.ci 'commit -s'`. Now you can commit with
In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense]
[devmanual]: https://docs.nextcloud.org/server/13/developer_manual/
[devmanual]: https://docs.nextcloud.org/server/12/developer_manual/
[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin
[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md
+2 -15
View File
@@ -36,16 +36,7 @@
[…learn more about how to get support for Nextcloud here!](https://nextcloud.com/support)
## Join the team :family:
### How to contribute
1. [Set up your local development environment](https://docs.nextcloud.com/server/14/developer_manual/general/devenv.html) :rocket:
2. [Pick a good first issue](https://github.com/nextcloud/server/labels/good%20first%20issue) :notebook:
3. Create a branch, a [Pull Request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) and `@mention` the people from the issue :computer:
4. Wait for it to get merged and :tada:
### Contribution Guidelines
## Contribution Guidelines
All contributions to this repository from June, 16 2016 on are considered to be
licensed under the AGPLv3 or any later version.
@@ -65,7 +56,7 @@ Please review the [guidelines for contributing](https://github.com/nextcloud/ser
More information how to contribute: [https://nextcloud.com/contribute/](https://nextcloud.com/contribute/)
### Running master checkouts
## Running master checkouts
Third-party components are handled as git submodules which have to be initialized first. So aside from the regular git checkout invoking `git submodule update --init` or a similar command is needed, for details see Git documentation.
@@ -74,7 +65,3 @@ Several apps that are included by default in regular releases such as [firstrunw
That aside Git checkouts can be handled the same as release archives.
Note they should never be used on production systems.
## Tools we use
[![BrowserStack](https://user-images.githubusercontent.com/45821/41675934-61fa3442-74c4-11e8-8c8e-90768c56ba08.png)](https://www.browserstack.com/)
-12
View File
@@ -1,12 +0,0 @@
{
"presets": [
[
"env",
{
"targets": {
"browsers": ["last 2 versions", "not ie <= 11"]
}
}
]
]
}
-9
View File
@@ -1,9 +0,0 @@
root = true
[*]
charset = utf-8
indent_style = tab
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
-16
View File
@@ -1,16 +0,0 @@
module.exports = {
env: {
browser: true,
es6: true
},
extends: 'eslint:recommended',
parserOptions: {
sourceType: 'module'
},
rules: {
indent: ['error', 'tab'],
'linebreak-style': ['error', 'unix'],
quotes: ['error', 'single'],
semi: ['error', 'always']
}
};
-12
View File
@@ -1,12 +0,0 @@
.DS_Store
node_modules/
dist/
npm-debug.log
yarn-error.log
# Editor directories and files
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
-3
View File
@@ -1,3 +0,0 @@
{
"esversion": 6
}
-26
View File
@@ -1,26 +0,0 @@
all: dev-setup build-js-production
dev-setup: clean clean-dev npm-init
npm-init:
npm install
npm-update:
npm update
build-js:
npm run dev
build-js-production:
npm run build
watch-js:
npm run watch
clean:
rm -f js/accessibility.js
rm -f js/accessibility.js.map
clean-dev:
rm -rf node_modules
-22
View File
@@ -1,22 +0,0 @@
# Accessibility ♿
> This app provide multiple features to ease the use of nextcloud.
## Build Setup
``` bash
# install dependencies
make dev-setup
# build for development
make build-js
# build for development and watch edits
make watch-js
# build for production with minification
make build-js-production
# clean output files
make clean
```
-30
View File
@@ -1,30 +0,0 @@
<?php
declare (strict_types = 1);
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
$app = new \OCA\Accessibility\AppInfo\Application();
// Separate from the constructor since the route are not initialized before that
// 1. create the app
// 2. generate css route and inject
$app->injectCss();
-23
View File
@@ -1,23 +0,0 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>accessibility</id>
<name>Accessibility</name>
<summary>Accessibility options for nextcloud</summary>
<description><![CDATA[Provides multiple accessibilities options to ease your use of nextcloud]]></description>
<version>1.0.1</version>
<licence>agpl</licence>
<author>John Molakvoæ</author>
<namespace>Accessibility</namespace>
<category>accessibility</category>
<default_enable/>
<dependencies>
<nextcloud min-version="14" max-version="14"/>
</dependencies>
<default_enable/>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<settings>
<personal>OCA\Accessibility\Settings\Personal</personal>
<personal-section>OCA\Accessibility\Settings\PersonalSection</personal-section>
</settings>
</info>
-40
View File
@@ -1,40 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
return [
'routes' => [
['name' => 'accessibility#getCss', 'url' => '/css/user-{md5}', 'verb' => 'GET'],
],
'ocs' => [
[
'name' => 'Config#getConfig',
'url' => '/api/v1/config',
'verb' => 'GET',
],
[
'name' => 'Config#setConfig',
'url' => '/api/v1/config/{key}',
'verb' => 'POST',
],
]
];
-22
View File
@@ -1,22 +0,0 @@
@font-face {
font-family: 'OpenDyslexic';
font-style: normal;
font-weight: 300;
src: url('../fonts/OpenDyslexic-Regular.woff') format('woff');
}
@font-face {
font-family: 'OpenDyslexic';
font-style: normal;
font-weight: normal;
src: url('../fonts/OpenDyslexic-Regular.woff') format('woff');
}
@font-face {
font-family: 'OpenDyslexic';
font-style: normal;
font-weight: 600;
src: url('../fonts/OpenDyslexic-Bold.woff') format('woff');
}
$font-face: OpenDyslexic, 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
-59
View File
@@ -1,59 +0,0 @@
.preview-list {
display: flex;
flex-wrap: wrap;
}
.preview {
display: flex;
flex-direction: column;
min-width: 250px;
max-width: 400px;
flex: 1 1 300px;
border: 1px solid var(--color-border);
padding: 10px;
border-radius: var(--border-radius);
transition: all 200ms ease-in-out;
filter: drop-shadow(0 1px 2px var(--color-box-shadow));
background-color: var(--color-main-background);
opacity: 0.9;
margin: 10px;
position: relative;
&,
* {
cursor: pointer;
user-select: none;
}
&:hover,
&:focus,
&.selected {
filter: drop-shadow(0 1px 4px var(--color-box-shadow));
opacity: 1;
}
.preview-image {
height: 200px;
background-position: top left;
background-size: cover;
background-repeat: no-repeat;
}
h3 {
display: flex;
justify-content: space-between;
line-height: 1em;
align-items: center;
}
p {
text-align: justify;
}
.icon-checkmark-color {
transition: all 100ms ease-in-out;
border-radius: 1em;
padding: 4px 5px 4px 20px;
background-position: 4px center;
opacity: 0;
visibility: hidden;
}
&.selected .icon-checkmark-color {
opacity: 1;
visibility: visible;
box-shadow: 0 0 0 1px var(--color-success);
}
}
-52
View File
@@ -1,52 +0,0 @@
// SCSS variables
$color-main-text: #d8d8d8;
$color-main-background: #181818;
$color-background-dark: lighten($color-main-background, 4%);
$color-background-darker: lighten($color-main-background, 8%);
$color-text-maxcontrast: darken($color-main-text, 30%);
$color-text-light: darken($color-main-text, 10%);
$color-text-lighter: darken($color-main-text, 20%);
$color-loading-light: #777;
$color-loading-dark: #ccc;
$color-box-shadow: rgba(darken($color-main-background, 70%), 0.5);
$color-border: lighten($color-main-background, 7%);
$color-border-dark: lighten($color-main-background, 14%);
#app-navigation > ul > li > a:first-child,
#app-navigation > ul > li > ul > li > a:first-child,
#expanddiv a {
img {
filter: invert(100%);
}
}
.bubble,
.app-navigation-entry-menu,
.popovermenu {
li {
> button,
> a,
> .menuitem {
> img {
filter: invert(100%);
}
}
}
}
.bubble,
.app-navigation-entry-menu,
.popovermenu,
#header .menu {
border: 1px solid var(--color-border);
}
// since svg icons are inverted, revert to white for the header
.header-right > * {
[class^='icon-'], [class*=' icon-'] {
filter: invert(100%);
}
}
@@ -1,57 +0,0 @@
// Fonts
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: normal;
src: local('Open Sans'), local('OpenSans'),
url('../../../core/fonts/OpenSans-Regular.woff') format('woff');
}
/* overriding default light */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 300;
src: local('Open Sans'), local('OpenSans'),
url('../../../core/fonts/OpenSans-Regular.woff') format('woff');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 500 700;
src: local('Open Sans Bold'), local('OpenSans-Bold'),
url('../../../core/fonts/OpenSans-Bold.woff') format('woff');
}
// SCSS variables
$color-main-text: #000;
$color-main-background: #fff;
$color-background-dark: darken($color-main-background, 30%);
$color-background-darker: darken($color-main-background, 30%);
$color-text-maxcontrast: $color-main-text;
$color-text-light: $color-main-text;
$color-text-lighter: $color-main-text;
$color-loading-light: #ddd;
$color-loading-dark: #000;
$color-box-shadow: $color-main-text;
$color-border: darken($color-main-background, 50%);
$color-border-dark: darken($color-main-background, 50%);
$font-face: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif;
// Font weight reset
body {
font-weight: 400;
}
[class^='icon-'], [class*=' icon-'],
.action {
opacity: 1 !important;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-76
View File
@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="16"
height="16"
viewBox="0 0 16 16"
sodipodi:docname="app-dark.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1880"
inkscape:window-height="993"
id="namedview4"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="36.460193"
inkscape:cx="8.4752826"
inkscape:cy="18.273624"
inkscape:window-x="20"
inkscape:window-y="67"
inkscape:window-maximized="0"
inkscape:current-layer="g848"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<g
id="g848"
transform="matrix(1.1307959,0,0,1.0801738,-1.0463882,-0.84269722)"
style="stroke-width:0.90481776;fill:#000000">
<circle
r="1.9587879"
cy="2.8315151"
cx="7.990303"
id="path844"
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.90481776;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill" />
<path
sodipodi:nodetypes="scsssscsccccczzcccccssssccsscs"
inkscape:connector-curvature="0"
id="path843"
d="m 2.3519709,4.2557871 c -0.3126291,0 -0.4819578,0.1287194 -0.5322266,0.4028321 -0.053173,0.2899914 0.1062609,0.5159057 0.4370117,0.6274414 1.420521,0.4790277 2.4256503,0.6675279 3.8410483,0.9800416 0.327839,0.072385 0.6900295,0.2893751 0.6520998,1.0948483 C 6.6985575,8.451345 6.6372144,9.7041167 6.2631031,11.323353 6.0397526,12.290062 5.6782112,13.622766 5.4305838,14.3922 5.3416728,14.668443 5.281658,14.922355 5.281658,15.031849 c 0,0.08257 0.053443,0.249642 0.097656,0.307617 0.023823,0.03125 0.075039,0.07397 0.1147462,0.09522 0.062879,0.03361 0.096262,0.03787 0.2612304,0.03663 0.3361373,-0.0026 0.4608113,-0.08245 0.6665037,-0.429687 0.4838657,-0.939315 0.7378785,-2.132191 0.9402993,-3.014266 0.092189,-0.517235 0.2624476,-1.66347 0.6710287,-1.66347 0.4085811,0 0.4979093,0.95008 0.6812062,1.687228 0.1832969,0.737148 0.6122738,2.295202 0.7738717,2.704862 0.2137476,0.54186 0.5742238,0.836985 0.8764648,0.717774 0.03316,-0.01301 0.116937,-0.04526 0.187989,-0.0708 0.147435,-0.053 0.186715,-0.07824 0.219726,-0.156249 0.0655,-0.154793 -0.01013,-0.454047 -0.349121,-1.41114 C 9.7721847,11.597192 9.2651806,9.3990255 9.3334308,7.2974743 9.3630343,6.3859259 9.6837054,6.305369 10.075725,6.2075087 c 1.17285,-0.2927798 2.00228,-0.379973 3.387085,-0.8579717 0.468513,-0.1617184 0.727539,-0.2608264 0.727539,-0.5590819 0,-0.2554049 -0.153084,-0.4346541 -0.437011,-0.5102538 -0.116851,-0.031101 -0.318383,-0.028905 -0.632326,0.00243 -1.085189,0.10834 -2.939683,0.5153868 -4.0234365,0.6710819 -0.529944,0.076133 -1.7229392,0.094015 -2.2729489,0 C 5.6763224,4.7574297 4.1363176,4.4147025 2.9061699,4.2997326 2.6560099,4.2763537 2.4068766,4.2557871 2.3519709,4.2557871 Z"
style="fill:#000000;stroke-width:0.9048177" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

-76
View File
@@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="16"
height="16"
viewBox="0 0 16 16"
sodipodi:docname="app.svg"
inkscape:version="0.92.2 5c3e80d, 2017-08-06">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1880"
inkscape:window-height="993"
id="namedview4"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:zoom="36.460193"
inkscape:cx="8.4752826"
inkscape:cy="18.273624"
inkscape:window-x="20"
inkscape:window-y="67"
inkscape:window-maximized="0"
inkscape:current-layer="g848"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<g
id="g848"
transform="matrix(1.1307959,0,0,1.0801738,-1.0463882,-0.84269722)"
style="stroke-width:0.90481776;fill:#000000">
<circle
r="1.9587879"
cy="2.8315151"
cx="7.990303"
id="path844"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.90481776;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill" />
<path
sodipodi:nodetypes="scsssscsccccczzcccccssssccsscs"
inkscape:connector-curvature="0"
id="path843"
d="m 2.3519709,4.2557871 c -0.3126291,0 -0.4819578,0.1287194 -0.5322266,0.4028321 -0.053173,0.2899914 0.1062609,0.5159057 0.4370117,0.6274414 1.420521,0.4790277 2.4256503,0.6675279 3.8410483,0.9800416 0.327839,0.072385 0.6900295,0.2893751 0.6520998,1.0948483 C 6.6985575,8.451345 6.6372144,9.7041167 6.2631031,11.323353 6.0397526,12.290062 5.6782112,13.622766 5.4305838,14.3922 5.3416728,14.668443 5.281658,14.922355 5.281658,15.031849 c 0,0.08257 0.053443,0.249642 0.097656,0.307617 0.023823,0.03125 0.075039,0.07397 0.1147462,0.09522 0.062879,0.03361 0.096262,0.03787 0.2612304,0.03663 0.3361373,-0.0026 0.4608113,-0.08245 0.6665037,-0.429687 0.4838657,-0.939315 0.7378785,-2.132191 0.9402993,-3.014266 0.092189,-0.517235 0.2624476,-1.66347 0.6710287,-1.66347 0.4085811,0 0.4979093,0.95008 0.6812062,1.687228 0.1832969,0.737148 0.6122738,2.295202 0.7738717,2.704862 0.2137476,0.54186 0.5742238,0.836985 0.8764648,0.717774 0.03316,-0.01301 0.116937,-0.04526 0.187989,-0.0708 0.147435,-0.053 0.186715,-0.07824 0.219726,-0.156249 0.0655,-0.154793 -0.01013,-0.454047 -0.349121,-1.41114 C 9.7721847,11.597192 9.2651806,9.3990255 9.3334308,7.2974743 9.3630343,6.3859259 9.6837054,6.305369 10.075725,6.2075087 c 1.17285,-0.2927798 2.00228,-0.379973 3.387085,-0.8579717 0.468513,-0.1617184 0.727539,-0.2608264 0.727539,-0.5590819 0,-0.2554049 -0.153084,-0.4346541 -0.437011,-0.5102538 -0.116851,-0.031101 -0.318383,-0.028905 -0.632326,0.00243 -1.085189,0.10834 -2.939683,0.5153868 -4.0234365,0.6710819 -0.529944,0.076133 -1.7229392,0.094015 -2.2729489,0 C 5.6763224,4.7574297 4.1363176,4.4147025 2.9061699,4.2997326 2.6560099,4.2763537 2.4068766,4.2557871 2.3519709,4.2557871 Z"
style="fill:#ffffff;stroke-width:0.9048177" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,83 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility;
use OCP\IL10N;
use OCP\IURLGenerator;
class AccessibilityProvider {
/** @var string */
protected $appName;
/** @var IURLGenerator */
private $urlGenerator;
/** @var IL10N */
private $l;
/**
* Account constructor.
*
* @param string $appName
* @param IURLGenerator $urlGenerator
* @param IL10N $l
*/
public function __construct(string $appName,
IURLGenerator $urlGenerator,
IL10N $l) {
$this->appName = $appName;
$this->urlGenerator = $urlGenerator;
$this->l = $l;
}
public function getThemes() {
return array(
[
'id' => 'themehighcontrast',
'img' => $this->urlGenerator->imagePath($this->appName, 'theme-highcontrast.jpg'),
'title' => $this->l->t('High contrast theme'),
'text' => $this->l->t('A high contrast theme to ease your navigation. Visual quality will be reduced but clarity will be increased.')
], [
'id' => 'themedark',
'img' => $this->urlGenerator->imagePath($this->appName, 'theme-dark.jpg'),
'title' => $this->l->t('Dark theme (beta)'),
'text' => $this->l->t('A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find.')
]
);
}
public function getFonts() {
return array(
[
'id' => 'fontdyslexic',
'img' => $this->urlGenerator->imagePath($this->appName, 'font-opendyslexic.jpg'),
'title' => $this->l->t('Dyslexia font'),
'text' => $this->l->t('OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia. The typeface was created by Abelardo Gonzalez, who released it through an open-source license.')
]
);
}
}
@@ -1,65 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility\AppInfo;
use OCP\AppFramework\App;
use OCP\IConfig;
use OCP\IUserSession;
use OCP\IURLGenerator;
class Application extends App {
/** @var string */
protected $appName = 'accessibility';
/** @var IConfig */
private $config;
/** @var IUserSession */
private $userSession;
/** @var IURLGenerator */
private $urlGenerator;
public function __construct() {
parent::__construct($this->appName);
$this->config = \OC::$server->getConfig();
$this->userSession = \OC::$server->getUserSession();
$this->urlGenerator = \OC::$server->getURLGenerator();
}
public function injectCss() {
// Inject the fake css on all pages if enabled and user is logged
$loggedUser = $this->userSession->getUser();
if (!is_null($loggedUser)) {
$userValues = $this->config->getUserKeys($loggedUser->getUID(), $this->appName);
// we want to check if any theme or font is enabled.
if (count($userValues) > 0) {
$hash = $this->config->getUserValue($loggedUser->getUID(), $this->appName, 'icons-css', md5(implode('-', $userValues)));
$linkToCSS = $this->urlGenerator->linkToRoute($this->appName . '.accessibility.getCss', ['md5' => $hash]);
\OCP\Util::addHeader('link', ['rel' => 'stylesheet', 'href' => $linkToCSS]);
}
}
}
}
@@ -1,259 +0,0 @@
<?php
declare (strict_types = 1);
/**
* @copyright Copyright (c) 2018 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility\Controller;
use Leafo\ScssPhp\Compiler;
use Leafo\ScssPhp\Exception\ParserException;
use Leafo\ScssPhp\Formatter\Crunched;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataDisplayResponse;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\App\IAppManager;
use OCP\IConfig;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\IUserSession;
use OC\Template\IconsCacher;
class AccessibilityController extends Controller {
/** @var string */
protected $appName;
/** @var string */
protected $serverRoot;
/** @var IConfig */
private $config;
/** @var IUserManager */
private $userManager;
/** @var ILogger */
private $logger;
/** @var IURLGenerator */
private $urlGenerator;
/** @var ITimeFactory */
protected $timeFactory;
/** @var IUserSession */
private $userSession;
/** @var IAppManager */
private $appManager;
/** @var IconsCacher */
protected $iconsCacher;
/** @var \OC_Defaults */
private $defaults;
/** @var null|string */
private $injectedVariables;
/**
* Account constructor.
*
* @param string $appName
* @param IRequest $request
* @param IConfig $config
* @param IUserManager $userManager
* @param ILogger $logger
* @param IURLGenerator $urlGenerator
* @param ITimeFactory $timeFactory
* @param IUserSession $userSession
* @param IAppManager $appManager
* @param \OC_Defaults $defaults
*/
public function __construct(string $appName,
IRequest $request,
IConfig $config,
IUserManager $userManager,
ILogger $logger,
IURLGenerator $urlGenerator,
ITimeFactory $timeFactory,
IUserSession $userSession,
IAppManager $appManager,
IconsCacher $iconsCacher,
\OC_Defaults $defaults) {
parent::__construct($appName, $request);
$this->appName = $appName;
$this->config = $config;
$this->userManager = $userManager;
$this->logger = $logger;
$this->urlGenerator = $urlGenerator;
$this->timeFactory = $timeFactory;
$this->userSession = $userSession;
$this->appManager = $appManager;
$this->iconsCacher = $iconsCacher;
$this->defaults = $defaults;
$this->serverRoot = \OC::$SERVERROOT;
$this->appRoot = $this->appManager->getAppPath($this->appName);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*
* @return DataDisplayResponse
*/
public function getCss(): DataDisplayResponse {
$css = '';
$imports = '';
$userValues = $this->getUserValues();
foreach ($userValues as $key => $scssFile) {
if ($scssFile !== false) {
$imports .= '@import "' . $scssFile . '";';
}
}
if ($imports !== '') {
$scss = new Compiler();
$scss->setImportPaths([
$this->appRoot . '/css/',
$this->serverRoot . '/core/css/'
]);
// Continue after throw
$scss->setIgnoreErrors(true);
$scss->setFormatter(Crunched::class);
// Import theme, variables and compile css4 variables
try {
$css .= $scss->compile(
$imports .
$this->getInjectedVariables() .
'@import "variables.scss";' .
'@import "css-variables.scss";'
);
} catch (ParserException $e) {
$this->logger->error($e->getMessage(), ['app' => 'core']);
}
}
// We don't want to override vars with url since path is different
$css = $this->filterOutRule('/--[a-z-:]+url\([^;]+\)/mi', $css);
// Rebase all urls
$appWebRoot = substr($this->appRoot, strlen($this->serverRoot) - strlen(\OC::$WEBROOT));
$css = $this->rebaseUrls($css, $appWebRoot . '/css');
if (in_array('themedark', $userValues) && $this->iconsCacher->getCachedCSS() && $this->iconsCacher->getCachedCSS()->getSize() > 0) {
$iconsCss = $this->invertSvgIconsColor($this->iconsCacher->getCachedCSS()->getContent());
$css = $css . $iconsCss;
}
$response = new DataDisplayResponse($css, Http::STATUS_OK, ['Content-Type' => 'text/css']);
// Set cache control
$ttl = 31536000;
$response->addHeader('Cache-Control', 'max-age=' . $ttl . ', immutable');
$expires = new \DateTime();
$expires->setTimestamp($this->timeFactory->getTime());
$expires->add(new \DateInterval('PT' . $ttl . 'S'));
$response->addHeader('Expires', $expires->format(\DateTime::RFC1123));
$response->addHeader('Pragma', 'cache');
// store current cache hash
$this->config->setUserValue($this->userSession->getUser()->getUID(), $this->appName, 'icons-css', md5($css));
return $response;
}
/**
* Return an array with the user theme & font settings
*
* @return array
*/
private function getUserValues(): array{
$userTheme = $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'theme', false);
$userFont = $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'font', false);
return [$userTheme, $userFont];
}
/**
* Remove all matches from the $rule regex
*
* @param string $rule regex to match
* @param string $css string to parse
* @return string
*/
private function filterOutRule(string $rule, string $css): string {
return preg_replace($rule, '', $css);
}
/**
* Add the correct uri prefix to make uri valid again
*
* @param string $css
* @param string $webDir
* @return string
*/
private function rebaseUrls(string $css, string $webDir): string {
$re = '/url\([\'"]([^\/][\.\w?=\/-]*)[\'"]\)/x';
$subst = 'url(\'' . $webDir . '/$1\')';
return preg_replace($re, $subst, $css);
}
/**
* Remove all matches from the $rule regex
*
* @param string $css string to parse
* @return string
*/
private function invertSvgIconsColor(string $css) {
return str_replace(['/000', '/fff', '/***'], ['/***', '/000', '/fff'], $css);
}
/**
* @return string SCSS code for variables from OC_Defaults
*/
private function getInjectedVariables(): string {
if ($this->injectedVariables !== null) {
return $this->injectedVariables;
}
$variables = '';
foreach ($this->defaults->getScssVariables() as $key => $value) {
$variables .= '$' . $key . ': ' . $value . ';';
}
// check for valid variables / otherwise fall back to defaults
try {
$scss = new Compiler();
$scss->compile($variables);
$this->injectedVariables = $variables;
} catch (ParserException $e) {
$this->logger->error($e, ['app' => 'core']);
}
return $variables;
}
}
@@ -1,133 +0,0 @@
<?php
declare (strict_types = 1);
/**
* @copyright Copyright (c) 2018 John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility\Controller;
use OCA\Accessibility\AccessibilityProvider;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\AppFramework\OCS\OCSBadRequestException;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IUserSession;
class ConfigController extends OCSController {
/** @var string */
protected $appName;
/** @var string */
protected $userId;
/** @var string */
protected $serverRoot;
/** @var IConfig */
private $config;
/** @var IUserSession */
private $userSession;
/** @var AccessibilityProvider */
private $accessibilityProvider;
/**
* Config constructor.
*
* @param string $appName
* @param IRequest $request
* @param IConfig $config
* @param IUserSession $userSession
* @param AccessibilityProvider $accessibilityProvider
*/
public function __construct(string $appName,
IRequest $request,
IConfig $config,
IUserSession $userSession,
AccessibilityProvider $accessibilityProvider) {
parent::__construct($appName, $request);
$this->appName = $appName;
$this->config = $config;
$this->userSession = $userSession;
$this->accessibilityProvider = $accessibilityProvider;
$this->userId = $userSession->getUser()->getUID();
}
/**
* @NoAdminRequired
*
* Get user accessibility config
*
* @param string $key theme or font
* @return DataResponse
*/
public function getConfig(): DataResponse {
return new DataResponse([
'theme' => $this->config->getUserValue($this->userId, $this->appName, 'theme', false),
'font' => $this->config->getUserValue($this->userId, $this->appName, 'font', false)
]);
}
/**
* @NoAdminRequired
*
* Set theme or font config
*
* @param string $key theme or font
* @return DataResponse
* @throws Exception
*/
public function setConfig(string $key, $value): DataResponse {
if ($key === 'theme' || $key === 'font') {
if ($value === false) {
$this->config->deleteUserValue($this->userId, $this->appName, $key);
$userValues = $this->config->getUserKeys($this->userId, $this->appName);
// remove hash if no settings selected
if (count($userValues) === 1 && $userValues[0] === 'icons-css') {
$this->config->deleteUserValue($this->userId, $this->appName, 'icons-css');
}
return new DataResponse();
}
$themes = $this->accessibilityProvider->getThemes();
$fonts = $this->accessibilityProvider->getFonts();
$availableOptions = array_map(function($option) {
return $option['id'];
}, array_merge($themes, $fonts));
if (in_array($value, $availableOptions)) {
$this->config->setUserValue($this->userId, $this->appName, $key, $value);
return new DataResponse();
}
throw new OCSBadRequestException('Invalid value: ' . $value);
}
throw new OCSBadRequestException('Invalid key: ' . $key);
}
}
@@ -1,113 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility\Settings;
use OCA\Accessibility\AccessibilityProvider;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUserSession;
use OCP\Settings\ISettings;
class Personal implements ISettings {
/** @var string */
protected $appName;
/** @var IConfig */
private $config;
/** @var IUserSession */
private $userSession;
/** @var IL10N */
private $l;
/** @var IURLGenerator */
private $urlGenerator;
/** @var AccessibilityProvider */
private $accessibilityProvider;
/**
* Settings constructor.
*
* @param string $appName
* @param IConfig $config
* @param IUserSession $userSession
* @param IL10N $l
* @param IURLGenerator $urlGenerator
* @param AccessibilityProvider $accessibilityProvider
*/
public function __construct(string $appName,
IConfig $config,
IUserSession $userSession,
IL10N $l,
IURLGenerator $urlGenerator,
AccessibilityProvider $accessibilityProvider) {
$this->appName = $appName;
$this->config = $config;
$this->userSession = $userSession;
$this->l = $l;
$this->urlGenerator = $urlGenerator;
$this->accessibilityProvider = $accessibilityProvider;
}
/**
* @return TemplateResponse returns the instance with all parameters set, ready to be rendered
* @since 9.1
*/
public function getForm() {
$serverData = [
'themes' => $this->accessibilityProvider->getThemes(),
'fonts' => $this->accessibilityProvider->getFonts(),
'theme' => $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'theme', false),
'font' => $this->config->getUserValue($this->userSession->getUser()->getUID(), $this->appName, 'font', false)
];
return new TemplateResponse($this->appName, 'settings-personal', ['serverData' => $serverData]);
}
/**
* @return string the section ID, e.g. 'sharing'
* @since 9.1
*/
public function getSection() {
return $this->appName;
}
/**
* @return int whether the form should be rather on the top or bottom of
* the admin section. The forms are arranged in ascending order of the
* priority values. It is required to return a value between 0 and 100.
*
* E.g.: 70
* @since 9.1
*/
public function getPriority() {
return 40;
}
}
@@ -1,100 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Accessibility\Settings;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\Settings\IIconSection;
class PersonalSection implements IIconSection {
/** @var string */
protected $appName;
/** @var IURLGenerator */
private $urlGenerator;
/** @var IL10N */
private $l;
/**
* Personal Section constructor.
*
* @param string $appName
* @param IURLGenerator $urlGenerator
* @param IL10N $l
*/
public function __construct(string $appName,
IURLGenerator $urlGenerator,
IL10N $l) {
$this->appName = $appName;
$this->urlGenerator = $urlGenerator;
$this->l = $l;
}
/**
* returns the relative path to an 16*16 icon describing the section.
* e.g. '/core/img/places/files.svg'
*
* @returns string
* @since 13.0.0
*/
public function getIcon() {
return $this->urlGenerator->imagePath($this->appName, 'app-dark.svg');
}
/**
* returns the ID of the section. It is supposed to be a lower case string,
* e.g. 'ldap'
*
* @returns string
* @since 9.1
*/
public function getID() {
return $this->appName;
}
/**
* returns the translated name as it should be displayed, e.g. 'LDAP / AD
* integration'. Use the L10N service to translate it.
*
* @return string
* @since 9.1
*/
public function getName() {
return $this->l->t('Accessibility');
}
/**
* @return int whether the form should be rather on the top or bottom of
* the settings navigation. The sections are arranged in ascending order of
* the priority values. It is required to return a value between 0 and 99.
*
* E.g.: 70
* @since 9.1
*/
public function getPriority() {
return 15;
}
}
File diff suppressed because it is too large Load Diff
-33
View File
@@ -1,33 +0,0 @@
{
"name": "accessibility",
"description": "Provides multiple accessibilities options to ease your use of nextcloud",
"version": "1.0.2",
"author": "John Molakvoæ <skjnldsv@protonmail.com>",
"license": "agpl",
"private": true,
"scripts": {
"dev": "webpack --config webpack.dev.js",
"watch": "webpack --progress --watch --config webpack.dev.js",
"build": "webpack --progress --hide-modules --config webpack.prod.js"
},
"dependencies": {
"axios": "^0.18.1",
"vue": "^2.5.16"
},
"browserslist": [
"last 2 versions",
"not ie <= 11"
],
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"css-loader": "^1.0.0",
"file-loader": "^1.1.11",
"vue-loader": "^15.2.6",
"vue-template-compiler": "^2.5.16",
"webpack": "^4.16.1",
"webpack-cli": "^3.1.0",
"webpack-merge": "^4.1.3"
}
}
-116
View File
@@ -1,116 +0,0 @@
<template>
<div id="accessibility">
<div id="themes" class="section">
<h2>{{t('accessibility', 'Themes')}}</h2>
<div class="themes-list preview-list">
<preview v-for="preview in themes" :preview="preview"
:key="preview.id" :selected="selected.theme"
v-on:select="selectTheme"></preview>
</div>
</div>
<div id="fonts" class="section">
<h2>{{t('accessibility', 'Fonts')}}</h2>
<div class="fonts-list preview-list">
<preview v-for="preview in fonts" :preview="preview"
:key="preview.id" :selected="selected.font"
v-on:select="selectFont"></preview>
</div>
</div>
</div>
</template>
<script>
import preview from './components/itemPreview';
import axios from 'axios';
export default {
name: 'Accessibility',
components: { preview },
beforeMount() {
// importing server data into the app
const serverDataElmt = document.getElementById('serverData');
if (serverDataElmt !== null) {
this.serverData = JSON.parse(
document.getElementById('serverData').dataset.server
);
}
},
data() {
return {
serverData: []
};
},
computed: {
themes() {
return this.serverData.themes;
},
fonts() {
return this.serverData.fonts;
},
selected() {
return {
theme: this.serverData.theme,
font: this.serverData.font
};
},
tokenHeaders() {
return { headers: { requesttoken: OC.requestToken } };
}
},
methods: {
selectTheme(id) {
this.selectItem('theme', id);
},
selectFont(id) {
this.selectItem('font', id);
},
/**
* Commit a change and force reload css
* Fetching the file again will trigger the server update
*
* @param {string} type type of the change (font or theme)
* @param {string} id the data of the change
*/
selectItem(type, id) {
axios.post(
OC.linkToOCS('apps/accessibility/api/v1/config', 2) + type,
{ value: id },
this.tokenHeaders
)
.then(response => {
this.serverData[type] = id;
// Remove old link
let link = document.querySelector('link[rel=stylesheet][href*=accessibility][href*=user-]');
if (!link) {
// insert new css
let link = document.createElement('link');
link.rel = 'stylesheet';
link.href = OC.generateUrl('/apps/accessibility/css/user-style.css') + '?v=' + new Date().getTime();
document.head.appendChild(link);
} else {
// compare arrays
if (
JSON.stringify(Object.values(this.selected)) ===
JSON.stringify([false, false])
) {
// if nothing is selected, blindly remove the css
link.remove();
} else {
// force update
link.href =
link.href.split('?')[0] +
'?v=' +
new Date().getTime();
}
}
})
.catch(err => {
console.log(err, err.response);
OC.Notification.showTemporary(t('accessibility', err.response.data.ocs.meta.message + '. Unable to apply the setting.'));
});
}
}
};
</script>
@@ -1,27 +0,0 @@
<template>
<a :class="{preview: true, selected: preview.id === selected}"
href="#" @click="selectItem">
<div class="preview-image" :style="{backgroundImage: 'url(' + preview.img + ')'}"></div>
<h3>
<span>{{preview.title}}</span>
<div class="icon-checkmark-color">{{t('accessibility', 'enabled')}}</div>
</h3>
<p>{{preview.text}}</p>
</a>
</template>
<script>
export default {
name: 'itemPreview',
props: ['preview', 'selected'],
methods: {
selectItem() {
this.$emit(
'select',
// if we clicked the already selected one: disable it
this.preview.id === this.selected ? false : this.preview.id
);
}
}
};
</script>
-12
View File
@@ -1,12 +0,0 @@
import Vue from 'vue';
import App from './App.vue';
/* global t */
// bind to window
Vue.prototype.OC = OC;
Vue.prototype.t = t;
new Vue({
el: '#accessibility',
render: h => h(App)
});
@@ -1,29 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>
*
* @author John Molakvoæ <skjnldsv@protonmail.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
script('accessibility', 'accessibility');
style('accessibility', 'style');
?>
<span id="serverData" data-server="<?php p(json_encode($_['serverData']));?>"></span>
<span id="accessibility"></span>
-42
View File
@@ -1,42 +0,0 @@
const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');
module.exports = {
entry: path.join(__dirname, 'src', 'main.js'),
output: {
path: path.resolve(__dirname, './js'),
publicPath: '/js/',
filename: 'accessibility.js'
},
module: {
rules: [
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader']
},
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
}
]
},
plugins: [new VueLoaderPlugin()],
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js'
},
extensions: ['*', '.js', '.vue', '.json']
}
};
-12
View File
@@ -1,12 +0,0 @@
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
mode: 'development',
devServer: {
historyApiFallback: true,
noInfo: true,
overlay: true
},
devtool: '#eval-source-map'
});
-7
View File
@@ -1,7 +0,0 @@
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
module.exports = merge(common, {
mode: 'production',
devtool: '#source-map'
});
-1
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
* @copyright Copyright (c) 2017 Lukas Reschke <lukas@statuscode.ch>
+6 -13
View File
@@ -1,23 +1,16 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<info>
<id>admin_audit</id>
<name>Auditing / Logging</name>
<summary>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</summary>
<description>Provides logging abilities for Nextcloud such as logging file accesses or otherwise sensitive actions.</description>
<version>1.4.0</version>
<licence>agpl</licence>
<licence>AGPL</licence>
<author>Nextcloud</author>
<version>1.3.0</version>
<namespace>AdminAudit</namespace>
<dependencies>
<nextcloud min-version="13" max-version="13" />
</dependencies>
<types>
<logging/>
</types>
<category>monitoring</category>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
<background-jobs>
<job>OCA\AdminAudit\BackgroundJobs\Rotate</job>
</background-jobs>
</info>
@@ -43,7 +43,8 @@ namespace Composer\Autoload;
class ClassLoader
{
// PSR-4
private $prefixLengthsPsr4 = array();
private $firstCharsPsr4 = array();
private $prefixLengthsPsr4 = array(); // For BC with legacy static maps
private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array();
@@ -170,11 +171,10 @@ class ClassLoader
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
if ('\\' !== substr($prefix, -1)) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->firstCharsPsr4[$prefix[0]] = true;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
@@ -221,11 +221,10 @@ class ClassLoader
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
if ('\\' !== substr($prefix, -1)) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->firstCharsPsr4[$prefix[0]] = true;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
@@ -279,7 +278,7 @@ class ClassLoader
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
}
/**
@@ -373,11 +372,11 @@ class ClassLoader
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
if (isset($this->firstCharsPsr4[$first]) || isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
@@ -12,11 +12,9 @@ return array(
'OCA\\AdminAudit\\Actions\\Console' => $baseDir . '/../lib/Actions/Console.php',
'OCA\\AdminAudit\\Actions\\Files' => $baseDir . '/../lib/Actions/Files.php',
'OCA\\AdminAudit\\Actions\\GroupManagement' => $baseDir . '/../lib/Actions/GroupManagement.php',
'OCA\\AdminAudit\\Actions\\Security' => $baseDir . '/../lib/Actions/Security.php',
'OCA\\AdminAudit\\Actions\\Sharing' => $baseDir . '/../lib/Actions/Sharing.php',
'OCA\\AdminAudit\\Actions\\Trashbin' => $baseDir . '/../lib/Actions/Trashbin.php',
'OCA\\AdminAudit\\Actions\\UserManagement' => $baseDir . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => $baseDir . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => $baseDir . '/../lib/BackgroundJobs/Rotate.php',
);
@@ -6,11 +6,8 @@ namespace Composer\Autoload;
class ComposerStaticInitAdminAudit
{
public static $prefixLengthsPsr4 = array (
'O' =>
array (
'OCA\\AdminAudit\\' => 15,
),
public static $firstCharsPsr4 = array (
'O' => true,
);
public static $prefixDirsPsr4 = array (
@@ -27,19 +24,17 @@ class ComposerStaticInitAdminAudit
'OCA\\AdminAudit\\Actions\\Console' => __DIR__ . '/..' . '/../lib/Actions/Console.php',
'OCA\\AdminAudit\\Actions\\Files' => __DIR__ . '/..' . '/../lib/Actions/Files.php',
'OCA\\AdminAudit\\Actions\\GroupManagement' => __DIR__ . '/..' . '/../lib/Actions/GroupManagement.php',
'OCA\\AdminAudit\\Actions\\Security' => __DIR__ . '/..' . '/../lib/Actions/Security.php',
'OCA\\AdminAudit\\Actions\\Sharing' => __DIR__ . '/..' . '/../lib/Actions/Sharing.php',
'OCA\\AdminAudit\\Actions\\Trashbin' => __DIR__ . '/..' . '/../lib/Actions/Trashbin.php',
'OCA\\AdminAudit\\Actions\\UserManagement' => __DIR__ . '/..' . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => __DIR__ . '/..' . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => __DIR__ . '/..' . '/../lib/BackgroundJobs/Rotate.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitAdminAudit::$prefixLengthsPsr4;
$loader->firstCharsPsr4 = ComposerStaticInitAdminAudit::$firstCharsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitAdminAudit::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitAdminAudit::$classMap;
+2 -3
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
@@ -46,10 +45,10 @@ class Action {
* @param array $elements
* @param bool $obfuscateParameters
*/
public function log(string $text,
public function log($text,
array $params,
array $elements,
bool $obfuscateParameters = false) {
$obfuscateParameters = false) {
foreach($elements as $element) {
if(!isset($params[$element])) {
if ($obfuscateParameters) {
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
@@ -29,7 +28,7 @@ class AppManagement extends Action {
/**
* @param string $appName
*/
public function enableApp(string $appName) {
public function enableApp($appName) {
$this->log('App "%s" enabled',
['app' => $appName],
['app']
@@ -40,7 +39,7 @@ class AppManagement extends Action {
* @param string $appName
* @param string[] $groups
*/
public function enableAppForGroups(string $appName, array $groups) {
public function enableAppForGroups($appName, array $groups) {
$this->log('App "%s" enabled for groups: %s',
['app' => $appName, 'groups' => implode(', ', $groups)],
['app', 'groups']
@@ -50,7 +49,7 @@ class AppManagement extends Action {
/**
* @param string $appName
*/
public function disableApp(string $appName) {
public function disableApp($appName) {
$this->log('App "%s" disabled',
['app' => $appName],
['app']
-1
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
+1 -2
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
@@ -29,7 +28,7 @@ class Console extends Action {
/**
* @param $arguments
*/
public function runCommand(array $arguments) {
public function runCommand($arguments) {
if ($arguments[1] === '_completion') {
// Don't log autocompletion
return;
-1
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
-75
View File
@@ -1,75 +0,0 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AdminAudit\Actions;
use OCP\IUser;
/**
* Class Sharing logs the sharing actions
*
* @package OCA\AdminAudit\Actions
*/
class Security extends Action {
/**
* Log twofactor auth enabled
*
* @param IUser $user
* @param array $params
*/
public function twofactorFailed(IUser $user, array $params) {
$params['uid'] = $user->getUID();
$params['displayName'] = $user->getDisplayName();
$this->log(
'Failed two factor attempt by user %s (%s) with provider %s',
$params,
[
'displayName',
'uid',
'provider',
]
);
}
/**
* Logs unsharing of data
*
* @param IUser $user
* @param array $params
*/
public function twofactorSuccess(IUser $user, array $params) {
$params['uid'] = $user->getUID();
$params['displayName'] = $user->getDisplayName();
$this->log(
'Successful two factor attempt by user %s (%s) with provider %s',
$params,
[
'displayName',
'uid',
'provider',
]
);
}
}
-26
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
@@ -78,19 +77,6 @@ class Sharing extends Action {
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_ROOM) {
$this->log(
'The %s "%s" with ID "%s" has been shared to the room "%s" with permissions "%s" (Share ID: %s)',
$params,
[
'itemType',
'itemTarget',
'itemSource',
'shareWith',
'permissions',
'id',
]
);
}
}
@@ -135,18 +121,6 @@ class Sharing extends Action {
'id',
]
);
} elseif($params['shareType'] === Share::SHARE_TYPE_ROOM) {
$this->log(
'The %s "%s" with ID "%s" has been unshared from the room "%s" (Share ID: %s)',
$params,
[
'itemType',
'fileTarget',
'itemSource',
'shareWith',
'id',
]
);
}
}
+2 -3
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
*
@@ -28,13 +27,13 @@ namespace OCA\AdminAudit\Actions;
class Trashbin extends Action {
public function delete(array $params) {
public function delete($params) {
$this->log('File "%s" deleted from trash bin.',
['path' => $params['path']], ['path']
);
}
public function restore(array $params) {
public function restore($params) {
$this->log('File "%s" restored from trash bin.',
['path' => $params['filePath']], ['path']
);
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
*
@@ -50,19 +49,6 @@ class UserManagement extends Action {
);
}
/**
* Log assignments of users (typically user backends)
*
* @param string $uid
*/
public function assign(string $uid) {
$this->log(
'UserID assigned: "%s"',
[ 'uid' => $uid ],
[ 'uid' ]
);
}
/**
* Log deletion of users
*
@@ -78,19 +64,6 @@ class UserManagement extends Action {
);
}
/**
* Log unassignments of users (typically user backends, no data removed)
*
* @param string $uid
*/
public function unassign(string $uid) {
$this->log(
'UserID unassigned: "%s"',
[ 'uid' => $uid ],
[ 'uid' ]
);
}
/**
* Log enabling of users
*
+2 -3
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Bjoern Schiessle <bjoern@schiessle.org>
*
@@ -28,7 +27,7 @@ namespace OCA\AdminAudit\Actions;
class Versions extends Action {
public function rollback(array $params) {
public function rollback($params) {
$this->log('Version "%s" of "%s" was restored.',
[
'version' => $params['revision'],
@@ -38,7 +37,7 @@ class Versions extends Action {
);
}
public function delete(array $params) {
public function delete($params) {
$this->log('Version "%s" was deleted.',
['path' => $params['path']],
['path']
+40 -76
View File
@@ -1,5 +1,4 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2017 Joas Schilling <coding@schilljs.com>
*
@@ -34,14 +33,12 @@ use OCA\AdminAudit\Actions\Auth;
use OCA\AdminAudit\Actions\Console;
use OCA\AdminAudit\Actions\Files;
use OCA\AdminAudit\Actions\GroupManagement;
use OCA\AdminAudit\Actions\Security;
use OCA\AdminAudit\Actions\Sharing;
use OCA\AdminAudit\Actions\Trashbin;
use OCA\AdminAudit\Actions\UserManagement;
use OCA\AdminAudit\Actions\Versions;
use OCP\App\ManagerEvent;
use OCP\AppFramework\App;
use OCP\Authentication\TwoFactorAuth\IProvider;
use OCP\Console\ConsoleEvent;
use OCP\IGroupManager;
use OCP\ILogger;
@@ -49,30 +46,11 @@ use OCP\IPreview;
use OCP\IUserSession;
use OCP\Util;
use Symfony\Component\EventDispatcher\GenericEvent;
use OCP\Share;
class Application extends App {
/** @var ILogger */
protected $logger;
public function __construct() {
parent::__construct('admin_audit');
$this->initLogger();
}
public function initLogger() {
$c = $this->getContainer()->getServer();
$config = $c->getConfig();
$default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
$logFile = $config->getAppValue('admin_audit', 'logfile', $default);
if($logFile === null) {
$this->logger = $c->getLogger();
return;
}
$this->logger = $c->getLogFactory()->getCustomLogger($logFile);
}
public function register() {
@@ -83,24 +61,24 @@ class Application extends App {
* Register hooks in order to log them
*/
protected function registerHooks() {
$this->userManagementHooks();
$this->groupHooks();
$this->authHooks();
$logger = $this->getContainer()->getServer()->getLogger();
$this->consoleHooks();
$this->appHooks();
$this->userManagementHooks($logger);
$this->groupHooks($logger);
$this->authHooks($logger);
$this->sharingHooks();
$this->consoleHooks($logger);
$this->appHooks($logger);
$this->fileHooks();
$this->trashbinHooks();
$this->versionsHooks();
$this->sharingHooks($logger);
$this->securityHooks();
$this->fileHooks($logger);
$this->trashbinHooks($logger);
$this->versionsHooks($logger);
}
protected function userManagementHooks() {
$userActions = new UserManagement($this->logger);
protected function userManagementHooks(ILogger $logger) {
$userActions = new UserManagement($logger);
Util::connectHook('OC_User', 'post_createUser', $userActions, 'create');
Util::connectHook('OC_User', 'post_deleteUser', $userActions, 'delete');
@@ -109,12 +87,10 @@ class Application extends App {
/** @var IUserSession|Session $userSession */
$userSession = $this->getContainer()->getServer()->getUserSession();
$userSession->listen('\OC\User', 'postSetPassword', [$userActions, 'setPassword']);
$userSession->listen('\OC\User', 'assignedUserId', [$userActions, 'assign']);
$userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']);
}
protected function groupHooks() {
$groupActions = new GroupManagement($this->logger);
protected function groupHooks(ILogger $logger) {
$groupActions = new GroupManagement($logger);
/** @var IGroupManager|Manager $groupManager */
$groupManager = $this->getContainer()->getServer()->getGroupManager();
@@ -124,53 +100,53 @@ class Application extends App {
$groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']);
}
protected function sharingHooks() {
$shareActions = new Sharing($this->logger);
protected function sharingHooks(ILogger $logger) {
$shareActions = new Sharing($logger);
Util::connectHook(Share::class, 'post_shared', $shareActions, 'shared');
Util::connectHook(Share::class, 'post_unshare', $shareActions, 'unshare');
Util::connectHook(Share::class, 'post_update_permissions', $shareActions, 'updatePermissions');
Util::connectHook(Share::class, 'post_update_password', $shareActions, 'updatePassword');
Util::connectHook(Share::class, 'post_set_expiration_date', $shareActions, 'updateExpirationDate');
Util::connectHook(Share::class, 'share_link_access', $shareActions, 'shareAccessed');
Util::connectHook('OCP\Share', 'post_shared', $shareActions, 'shared');
Util::connectHook('OCP\Share', 'post_unshare', $shareActions, 'unshare');
Util::connectHook('OCP\Share', 'post_update_permissions', $shareActions, 'updatePermissions');
Util::connectHook('OCP\Share', 'post_update_password', $shareActions, 'updatePassword');
Util::connectHook('OCP\Share', 'post_set_expiration_date', $shareActions, 'updateExpirationDate');
Util::connectHook('OCP\Share', 'share_link_access', $shareActions, 'shareAccessed');
}
protected function authHooks() {
$authActions = new Auth($this->logger);
protected function authHooks(ILogger $logger) {
$authActions = new Auth($logger);
Util::connectHook('OC_User', 'pre_login', $authActions, 'loginAttempt');
Util::connectHook('OC_User', 'post_login', $authActions, 'loginSuccessful');
Util::connectHook('OC_User', 'logout', $authActions, 'logout');
}
protected function appHooks() {
protected function appHooks(ILogger $logger) {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function(ManagerEvent $event) {
$appActions = new AppManagement($this->logger);
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function(ManagerEvent $event) use ($logger) {
$appActions = new AppManagement($logger);
$appActions->enableApp($event->getAppID());
});
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function(ManagerEvent $event) {
$appActions = new AppManagement($this->logger);
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE_FOR_GROUPS, function(ManagerEvent $event) use ($logger) {
$appActions = new AppManagement($logger);
$appActions->enableAppForGroups($event->getAppID(), $event->getGroups());
});
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function(ManagerEvent $event) {
$appActions = new AppManagement($this->logger);
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_DISABLE, function(ManagerEvent $event) use ($logger) {
$appActions = new AppManagement($logger);
$appActions->disableApp($event->getAppID());
});
}
protected function consoleHooks() {
protected function consoleHooks(ILogger $logger) {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
$eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function(ConsoleEvent $event) {
$appActions = new Console($this->logger);
$eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function(ConsoleEvent $event) use ($logger) {
$appActions = new Console($logger);
$appActions->runCommand($event->getArguments());
});
}
protected function fileHooks() {
$fileActions = new Files($this->logger);
protected function fileHooks(ILogger $logger) {
$fileActions = new Files($logger);
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
$eventDispatcher->addListener(
IPreview::EVENT,
@@ -231,27 +207,15 @@ class Application extends App {
);
}
protected function versionsHooks() {
$versionsActions = new Versions($this->logger);
protected function versionsHooks(ILogger $logger) {
$versionsActions = new Versions($logger);
Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete',$versionsActions, 'delete');
}
protected function trashbinHooks() {
$trashActions = new Trashbin($this->logger);
protected function trashbinHooks(ILogger $logger) {
$trashActions = new Trashbin($logger);
Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete');
Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore');
}
protected function securityHooks() {
$eventDispatcher = $this->getContainer()->getServer()->getEventDispatcher();
$eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function(GenericEvent $event) {
$security = new Security($this->logger);
$security->twofactorSuccess($event->getSubject(), $event->getArguments());
});
$eventDispatcher->addListener(IProvider::EVENT_FAILED, function(GenericEvent $event) {
$security = new Security($this->logger);
$security->twofactorFailed($event->getSubject(), $event->getArguments());
});
}
}
@@ -1,52 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AdminAudit\BackgroundJobs;
use OC\BackgroundJob\TimedJob;
use OCP\Log\RotationTrait;
class Rotate extends TimedJob {
use RotationTrait;
public function __construct() {
$this->setInterval(60*60*3);
}
protected function run($argument) {
$config = \OC::$server->getConfig();
$default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
$this->filePath = $config->getAppValue('admin_audit', 'logfile', $default);
if($this->filePath === '') {
// default log file, nothing to do
return;
}
$this->maxSize = $config->getSystemValue('log_rotate_size', 100 * 1024 * 1024);
if($this->shouldRotateBySize()) {
$this->rotate();
}
}
}
@@ -1,75 +0,0 @@
<?php
declare(strict_types=1);
/**
* @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl>
*
* @author Roeland Jago Douma <roeland@famdouma.nl>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AdminAudit\Tests\Actions;
use OCA\AdminAudit\Actions\Security;
use OCP\ILogger;
use OCP\IUser;
use Test\TestCase;
class SecurityTest extends TestCase {
/** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */
private $logger;
/** @var Security */
private $security;
/** @var IUser|\PHPUnit_Framework_MockObject_MockObject */
private $user;
public function setUp() {
parent::setUp();
$this->logger = $this->createMock(ILogger::class);
$this->security = new Security($this->logger);
$this->user = $this->createMock(IUser::class);
$this->user->method('getUID')->willReturn('myuid');
$this->user->method('getDisplayName')->willReturn('mydisplayname');
}
public function testTwofactorFailed() {
$this->logger->expects($this->once())
->method('info')
->with(
$this->equalTo('Failed two factor attempt by user mydisplayname (myuid) with provider myprovider'),
['app' => 'admin_audit']
);
$this->security->twofactorFailed($this->user, ['provider' => 'myprovider']);
}
public function testTwofactorSuccess() {
$this->logger->expects($this->once())
->method('info')
->with(
$this->equalTo('Successful two factor attempt by user mydisplayname (myuid) with provider myprovider'),
['app' => 'admin_audit']
);
$this->security->twofactorSuccess($this->user, ['provider' => 'myprovider']);
}
}
-661
View File
@@ -1,661 +0,0 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.
-2
View File
@@ -1,2 +0,0 @@
# cloud_federation_api
The cloud federation API allows to share information like files, contacts, calendars, incoming calls, etc accross Nextcloud instances
-22
View File
@@ -1,22 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
$app = new \OCA\CloudFederationAPI\AppInfo\Application();
@@ -1,20 +0,0 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>cloud_federation_api</id>
<name>Cloud Federation API</name>
<summary>Enable clouds to communicate with each other and exchange data</summary>
<description>The Cloud Federation API enables various Nextcloud instances to communicate with each other and to exchange data.</description>
<version>0.0.1</version>
<licence>agpl</licence>
<author>Bjoern Schiessle</author>
<namespace>CloudFederationAPI</namespace>
<types>
<filesystem/>
</types>
<category>files</category>
<bugs>https://github.com/nextcloud/cloud_federation/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14"/>
</dependencies>
</info>
@@ -1,37 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\CloudFederationAPI\AppInfo;
use OCA\CloudFederationAPI\Capabilities;
use OCP\AppFramework\App;
class Application extends App {
public function __construct() {
parent::__construct('cloud_federation_api');
$container = $this->getContainer();
$container->registerCapability(Capabilities::class);
}
}
@@ -1,64 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2017 Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\CloudFederationAPI;
use OCP\Capabilities\ICapability;
use OCP\IURLGenerator;
class Capabilities implements ICapability {
/** @var IURLGenerator */
private $urlGenerator;
public function __construct(IURLGenerator $urlGenerator) {
$this->urlGenerator = $urlGenerator;
}
/**
* Function an app uses to return the capabilities
*
* @return array Array containing the apps capabilities
* @since 8.2.0
*/
public function getCapabilities() {
$url = $this->urlGenerator->linkToRouteAbsolute('cloud_federation_api.requesthandlercontroller.addShare');
$capabilities = ['ocm' =>
[
'enabled' => true,
'apiVersion' => '1.0-proposal1',
'endPoint' => substr($url, 0, strrpos($url, '/')),
'shareTypes' => [
[
'name' => 'file',
'protocols' => [
'webdav' => '/public.php/webdav/',
]
],
]
]
];
return $capabilities;
}
}
-60
View File
@@ -1,60 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\CloudFederationAPI;
use OCP\Federation\ICloudFederationProviderManager;
use OCP\GlobalScale\IConfig as IGsConfig;
use OCP\IConfig;
/**
* Class config
*
* handles all the config parameters
*
* @package OCA\CloudFederationAPI
*/
class Config {
/** @var ICloudFederationProviderManager */
private $cloudFederationProviderManager;
public function __construct(ICloudFederationProviderManager $cloudFederationProviderManager) {
$this->cloudFederationProviderManager = $cloudFederationProviderManager;
}
/**
* get a list of supported share types
*
* @param string $resourceType
* @return array
*/
public function getSupportedShareTypes($resourceType) {
try {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
return $provider->getSupportedShareTypes();
} catch (\Exception $e) {
return [];
}
}
}
@@ -1,300 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2018 Bjoern Schiessle <bjoern@schiessle.org>
*
* @author Bjoern Schiessle <bjoern@schiessle.org>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\CloudFederationAPI\Controller;
use OCA\CloudFederationAPI\Config;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\Federation\Exceptions\ActionNotSupportedException;
use OCP\Federation\Exceptions\AuthenticationFailedException;
use OCP\Federation\Exceptions\BadRequestException;
use OCP\Federation\Exceptions\ProviderCouldNotAddShareException;
use OCP\Federation\ICloudFederationFactory;
use OCP\Federation\ICloudFederationProviderManager;
use OCP\Federation\Exceptions\ProviderDoesNotExistsException;
use OCP\Federation\ICloudIdManager;
use OCP\IGroupManager;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\Share\Exceptions\ShareNotFound;
/**
* Class RequestHandlerController
*
* handle API between different Cloud instances
*
* @package OCA\CloudFederationAPI\Controller
*/
class RequestHandlerController extends Controller {
/** @var ILogger */
private $logger;
/** @var IUserManager */
private $userManager;
/** @var IGroupManager */
private $groupManager;
/** @var IURLGenerator */
private $urlGenerator;
/** @var ICloudFederationProviderManager */
private $cloudFederationProviderManager;
/** @var Config */
private $config;
/** @var ICloudFederationFactory */
private $factory;
/** @var ICloudIdManager */
private $cloudIdManager;
public function __construct($appName,
IRequest $request,
ILogger $logger,
IUserManager $userManager,
IGroupManager $groupManager,
IURLGenerator $urlGenerator,
ICloudFederationProviderManager $cloudFederationProviderManager,
Config $config,
ICloudFederationFactory $factory,
ICloudIdManager $cloudIdManager
) {
parent::__construct($appName, $request);
$this->logger = $logger;
$this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->urlGenerator = $urlGenerator;
$this->cloudFederationProviderManager = $cloudFederationProviderManager;
$this->config = $config;
$this->factory = $factory;
$this->cloudIdManager = $cloudIdManager;
}
/**
* add share
*
* @NoCSRFRequired
* @PublicPage
* @BruteForceProtection(action=receiveFederatedShare)
*
* @param string $shareWith
* @param string $name resource name (e.g. document.odt)
* @param string $description share description (optional)
* @param string $providerId resource UID on the provider side
* @param string $owner provider specific UID of the user who owns the resource
* @param string $ownerDisplayName display name of the user who shared the item
* @param string $sharedBy provider specific UID of the user who shared the resource
* @param string $sharedByDisplayName display name of the user who shared the resource
* @param array $protocol (e,.g. ['name' => 'webdav', 'options' => ['username' => 'john', 'permissions' => 31]])
* @param string $shareType ('group' or 'user' share)
* @param $resourceType ('file', 'calendar',...)
* @return Http\DataResponse|JSONResponse
*
* Example: curl -H "Content-Type: application/json" -X POST -d '{"shareWith":"admin1@serve1","name":"welcome server2.txt","description":"desc","providerId":"2","owner":"admin2@http://localhost/server2","ownerDisplayName":"admin2 display","shareType":"user","resourceType":"file","protocol":{"name":"webdav","options":{"sharedSecret":"secret","permissions":"webdav-property"}}}' http://localhost/server/index.php/ocm/shares
*/
public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
// check if all required parameters are set
if ($shareWith === null ||
$name === null ||
$providerId === null ||
$owner === null ||
$resourceType === null ||
$shareType === null ||
!is_array($protocol) ||
!isset($protocol['name']) ||
!isset ($protocol['options']) ||
!is_array($protocol['options']) ||
!isset($protocol['options']['sharedSecret'])
) {
return new JSONResponse(
['message' => 'Missing arguments'],
Http::STATUS_BAD_REQUEST
);
}
$supportedShareTypes = $this->config->getSupportedShareTypes($resourceType);
if (!in_array($shareType, $supportedShareTypes)) {
return new JSONResponse(
['message' => 'Share type "' . $shareType . '" not implemented'],
Http::STATUS_NOT_IMPLEMENTED
);
}
$cloudId = $this->cloudIdManager->resolveCloudId($shareWith);
$shareWith = $cloudId->getUser();
if ($shareType === 'user') {
$shareWith = $this->mapUid($shareWith);
if (!$this->userManager->userExists($shareWith)) {
return new JSONResponse(
['message' => 'User "' . $shareWith . '" does not exists at ' . $this->urlGenerator->getBaseUrl()],
Http::STATUS_BAD_REQUEST
);
}
}
if ($shareType === 'group') {
if(!$this->groupManager->groupExists($shareWith)) {
return new JSONResponse(
['message' => 'Group "' . $shareWith . '" does not exists at ' . $this->urlGenerator->getBaseUrl()],
Http::STATUS_BAD_REQUEST
);
}
}
// if no explicit display name is given, we use the uid as display name
$ownerDisplayName = $ownerDisplayName === null ? $owner : $ownerDisplayName;
$sharedByDisplayName = $sharedByDisplayName === null ? $sharedBy : $sharedByDisplayName;
// sharedBy* parameter is optional, if nothing is set we assume that it is the same user as the owner
if ($sharedBy === null) {
$sharedBy = $owner;
$sharedByDisplayName = $ownerDisplayName;
}
try {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
$share = $this->factory->getCloudFederationShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, '', $shareType, $resourceType);
$share->setProtocol($protocol);
$provider->shareReceived($share);
} catch (ProviderDoesNotExistsException $e) {
return new JSONResponse(
['message' => $e->getMessage()],
Http::STATUS_NOT_IMPLEMENTED
);
} catch (ProviderCouldNotAddShareException $e) {
return new JSONResponse(
['message' => $e->getMessage()],
$e->getCode()
);
} catch (\Exception $e) {
return new JSONResponse(
['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
Http::STATUS_BAD_REQUEST
);
}
$user = $this->userManager->get($shareWith);
$recipientDisplayName = '';
if($user) {
$recipientDisplayName = $user->getDisplayName();
}
return new JSONResponse(
['recipientDisplayName' => $recipientDisplayName],
Http::STATUS_CREATED);
}
/**
* receive notification about existing share
*
* @NoCSRFRequired
* @PublicPage
* @BruteForceProtection(action=receiveFederatedShareNotification)
*
* @param string $notificationType (notification type, e.g. SHARE_ACCEPTED)
* @param string $resourceType (calendar, file, contact,...)
* @param string $providerId id of the share
* @param array $notification the actual payload of the notification
* @return JSONResponse
*/
public function receiveNotification($notificationType, $resourceType, $providerId, array $notification) {
// check if all required parameters are set
if ($notificationType === null ||
$resourceType === null ||
$providerId === null ||
!is_array($notification)
) {
return new JSONResponse(
['message' => 'Missing arguments'],
Http::STATUS_BAD_REQUEST
);
}
try {
$provider = $this->cloudFederationProviderManager->getCloudFederationProvider($resourceType);
$result = $provider->notificationReceived($notificationType, $providerId, $notification);
} catch (ProviderDoesNotExistsException $e) {
return new JSONResponse(
['message' => $e->getMessage()],
Http::STATUS_BAD_REQUEST
);
} catch (ShareNotFound $e) {
return new JSONResponse(
['message' => $e->getMessage()],
Http::STATUS_BAD_REQUEST
);
} catch (ActionNotSupportedException $e) {
return new JSONResponse(
['message' => $e->getMessage()],
Http::STATUS_NOT_IMPLEMENTED
);
} catch (BadRequestException $e) {
return new JSONResponse($e->getReturnMessage(), Http::STATUS_BAD_REQUEST);
} catch (AuthenticationFailedException $e) {
return new JSONResponse(["message" => "RESOURCE_NOT_FOUND"], Http::STATUS_FORBIDDEN);
}
catch (\Exception $e) {
return new JSONResponse(
['message' => 'Internal error at ' . $this->urlGenerator->getBaseUrl()],
Http::STATUS_BAD_REQUEST
);
}
return new JSONResponse($result,Http::STATUS_CREATED);
}
/**
* map login name to internal LDAP UID if a LDAP backend is in use
*
* @param string $uid
* @return string mixed
*/
private function mapUid($uid) {
// FIXME this should be a method in the user management instead
$this->logger->debug('shareWith before, ' . $uid, ['app' => $this->appName]);
\OCP\Util::emitHook(
'\OCA\Files_Sharing\API\Server2Server',
'preLoginNameUsedAsUserName',
array('uid' => &$uid)
);
$this->logger->debug('shareWith after, ' . $uid, ['app' => $this->appName]);
return $uid;
}
}
-2
View File
@@ -1,2 +0,0 @@
# compiled vue templates
js/templates.js
+48 -11
View File
@@ -1,25 +1,62 @@
<?php
/**
* @copyright Copyright (c) 2018, Joas Schilling <coding@schilljs.com>
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Arthur Schiwon <blizzz@arthur-schiwon.de>
* @author Joas Schilling <coding@schilljs.com>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Vincent Petry <pvince81@owncloud.com>
*
* @license GNU AGPL version 3 or any later version
* @license AGPL-3.0
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
* This 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
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* 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/>
*
*/
$application = new \OCA\Comments\AppInfo\Application();
$application->register();
$eventDispatcher = \OC::$server->getEventDispatcher();
$eventDispatcher->addListener(
'OCA\Files::loadAdditionalScripts',
function() {
\OCP\Util::addScript('oc-backbone-webdav');
\OCP\Util::addScript('comments', 'merged');
\OCP\Util::addStyle('comments', 'autocomplete');
\OCP\Util::addStyle('comments', 'comments');
}
);
$eventDispatcher->addListener(\OCP\Comments\CommentsEntityEvent::EVENT_ENTITY, function(\OCP\Comments\CommentsEntityEvent $event) {
$event->addEntityCollection('files', function($name) {
$nodes = \OC::$server->getUserFolder()->getById(intval($name));
return !empty($nodes);
});
});
$notificationManager = \OC::$server->getNotificationManager();
$notificationManager->registerNotifier(
function() {
$application = new \OCP\AppFramework\App('comments');
return $application->getContainer()->query(\OCA\Comments\Notification\Notifier::class);
},
function () {
$l = \OC::$server->getL10N('comments');
return ['id' => 'comments', 'name' => $l->t('Comments')];
}
);
$commentsManager = \OC::$server->getCommentsManager();
$commentsManager->registerEventHandler(function () {
$application = new \OCP\AppFramework\App('comments');
/** @var \OCA\Comments\EventHandler $handler */
$handler = $application->getContainer()->query(\OCA\Comments\EventHandler::class);
return $handler;
});
+6 -11
View File
@@ -1,24 +1,19 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<info>
<id>comments</id>
<name>Comments</name>
<summary>Files app plugin to add comments to files</summary>
<description>Files app plugin to add comments to files</description>
<version>1.4.0</version>
<licence>agpl</licence>
<licence>AGPL</licence>
<author>Arthur Schiwon</author>
<author>Vincent Petry</author>
<default_enable/>
<version>1.3.0</version>
<dependencies>
<nextcloud min-version="13" max-version="13" />
</dependencies>
<types>
<logging/>
</types>
<category>office</category>
<category>social</category>
<bugs>https://github.com/nextcloud/server/issues</bugs>
<dependencies>
<nextcloud min-version="14" max-version="14" />
</dependencies>
<activity>
<settings>
@@ -43,7 +43,8 @@ namespace Composer\Autoload;
class ClassLoader
{
// PSR-4
private $prefixLengthsPsr4 = array();
private $firstCharsPsr4 = array();
private $prefixLengthsPsr4 = array(); // For BC with legacy static maps
private $prefixDirsPsr4 = array();
private $fallbackDirsPsr4 = array();
@@ -170,11 +171,10 @@ class ClassLoader
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
if ('\\' !== substr($prefix, -1)) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->firstCharsPsr4[$prefix[0]] = true;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
@@ -221,11 +221,10 @@ class ClassLoader
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
if ('\\' !== substr($prefix, -1)) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->firstCharsPsr4[$prefix[0]] = true;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
@@ -279,7 +278,7 @@ class ClassLoader
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
}
/**
@@ -373,11 +372,11 @@ class ClassLoader
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
if (isset($this->firstCharsPsr4[$first]) || isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
@@ -17,6 +17,4 @@ return array(
'OCA\\Comments\\JSSettingsHelper' => $baseDir . '/../lib/JSSettingsHelper.php',
'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\Search\\Provider' => $baseDir . '/../lib/Search/Provider.php',
'OCA\\Comments\\Search\\Result' => $baseDir . '/../lib/Search/Result.php',
);
@@ -6,11 +6,8 @@ namespace Composer\Autoload;
class ComposerStaticInitComments
{
public static $prefixLengthsPsr4 = array (
'O' =>
array (
'OCA\\Comments\\' => 13,
),
public static $firstCharsPsr4 = array (
'O' => true,
);
public static $prefixDirsPsr4 = array (
@@ -32,14 +29,12 @@ class ComposerStaticInitComments
'OCA\\Comments\\JSSettingsHelper' => __DIR__ . '/..' . '/../lib/JSSettingsHelper.php',
'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\Search\\Provider' => __DIR__ . '/..' . '/../lib/Search/Provider.php',
'OCA\\Comments\\Search\\Result' => __DIR__ . '/..' . '/../lib/Search/Result.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitComments::$prefixLengthsPsr4;
$loader->firstCharsPsr4 = ComposerStaticInitComments::$firstCharsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitComments::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitComments::$classMap;
+15 -15
View File
@@ -9,11 +9,11 @@
left: 0;
display: none;
margin-top: 18px;
background: var(--color-main-background);
color: var(--color-main-text);
border: 1px solid var(--color-border);
border-radius: var(--border-radius);
box-shadow: 0 0 5px var(--color-box-shadow);
background: $color-main-background;
color: $color-main-text;
border: 1px solid $color-border;
border-radius: $border-radius;
box-shadow: 0 0 5px $color-box-shadow;
min-width: 120px;
z-index: 11110 !important;
}
@@ -22,14 +22,14 @@
padding: 5px;
margin: 5px;
cursor: pointer;
border-bottom: solid 1px var(--color-border);
color: var(--color-main-text);
border-bottom: solid 1px $color-border;
color: $color-main-text;
font-size: 11px;
font-weight: bold;
}
.atwho-view .atwho-header .small {
color: var(--color-main-text);
color: $color-main-text;
float: right;
padding-top: 2px;
margin-right: -5px;
@@ -42,18 +42,18 @@
}
.atwho-view .cur {
background: var(--color-primary);
color: var(--color-primary-text);
background: $color-primary;
color: $color-primary-text;
}
.atwho-view .cur small {
color: var(--color-primary-text);
color: $color-primary-text;
}
.atwho-view strong {
color: var(--color-main-text);
color: $color-main-text;
font-weight: normal;
}
.atwho-view .cur strong {
color: var(--color-primary-text);
color: $color-primary-text;
font-weight: normal;
}
.atwho-view ul {
@@ -67,11 +67,11 @@
.atwho-view ul li {
display: block;
padding: 5px 10px;
border-bottom: 1px solid var(--color-border);
border-bottom: 1px solid $color-border;
cursor: pointer;
}
.atwho-view small {
font-size: smaller;
color: var(--color-main-text);
color: $color-main-text;
font-weight: normal;
}
@@ -13,46 +13,55 @@
}
#commentsTabView .newCommentForm {
margin-left: 36px;
position: relative;
margin-bottom: 20px;
}
#commentsTabView .newCommentForm .message {
width: 100%;
padding: 10px;
min-height: 44px;
margin: 0;
/* Prevent the text from overlapping with the submit button. */
width: calc(100% - 81px); /* 36 (left margin) + 30 (right padding) + 15 (right padding of surrounding box) */
margin-left: 36px;
padding-right: 30px;
display: block;
}
#commentsTabView .newCommentForm {
.submit,
.submitLoading {
width: 44px;
height: 44px;
margin: 0;
padding: 13px;
background-color: transparent;
border: none;
opacity: .3;
position: absolute;
bottom: 0;
right: 0;
}
#commentsTabView .newCommentForm .submit {
position: absolute;
bottom: 0px;
right: 8px;
width: 30px;
margin: 0;
padding: 7px 9px;
background-color: transparent;
border: none;
opacity: .3;
}
#commentsTabView .deleteLoading {
padding: 14px;
vertical-align: middle;
}
#commentsTabView .newCommentForm .submit:not(:disabled):hover,
#commentsTabView .newCommentForm .submit:not(:disabled):focus {
opacity: 1;
}
#commentsTabView .newCommentForm .submitLoading {
background-position: left;
/* Match rules for '#commentsTabView .newCommentForm .submit' to place the
loading icon at the same position as the confirm icon */
position: absolute;
bottom: 0px;
right: 8px;
width: 30px;
margin: 0;
padding: 7px 9px;
/* Match rules for 'input[type="submit"]' to place the loading icon at the
same position as the confirm icon */
min-height: 34px;
box-sizing: border-box;
}
#commentsTabView .newCommentForm .cancel {
margin-right: 6px;
}
#commentsTabView .newCommentForm div.message {
resize: none;
}
@@ -64,12 +73,9 @@
#commentsTabView .comment {
position: relative;
/** padding bottom is little more so that the top and bottom gap look uniform **/
padding: 10px 0px 15px;
}
#commentsTabView .comments .comment {
border-top: 1px solid var(--color-border);
margin-bottom: 30px;
word-wrap: break-word;
overflow-wrap: break-word;
}
#commentsTabView .comment .avatar,
@@ -117,23 +123,20 @@
background: -o-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: -ms-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1));
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00FFFFFF', endColorstr='#FFFFFFFF');
background-repeat: no-repeat;
}
#commentsTabView .hidden {
#commentsTabView .authorRow>div:not(.contactsmenu-popover) {
display: inline-block;
vertical-align: middle;
}
#commentsTabView .authorRow>div.hidden {
display: none !important;
}
/** set min-height as 44px to ensure that it fits the button sizes. **/
#commentsTabView .comment .authorRow {
min-height: 44px;
}
#commentsTabView .comment .authorRow .tooltip {
/** because of the padding on the element, the tooltip appear too far up,
adding this brings them closer to the element**/
margin-top: 5px;
}
#commentsTabView .comments li .message .avatar-name-wrapper,
.atwho-view-ul * .avatar-name-wrapper,
#commentsTabView .comment .authorRow {
position: relative;
@@ -144,105 +147,64 @@
#commentsTabView .comment:not(.newCommentRow) .message .avatar-name-wrapper:not(.currentUser),
#commentsTabView .comment:not(.newCommentRow) .message .avatar-name-wrapper:not(.currentUser) .avatar,
#commentsTabView .comment:not(.newCommentRow) .message .avatar-name-wrapper:not(.currentUser) .avatar img,
#commentsTabView .comment .authorRow .avatar:not(.currentUser),
#commentsTabView .comment .authorRow .author:not(.currentUser) {
cursor: pointer;
}
.atwho-view-ul .avatar-name-wrapper,
.atwho-view-ul .avatar-name-wrapper .avatar,
.atwho-view-ul .avatar-name-wrapper .avatar img {
.atwho-view-ul .avatar-name-wrapper .avatar {
cursor: pointer;
}
#commentsTabView .comments li .message .atwho-inserted,
#commentsTabView .newCommentForm .atwho-inserted {
.avatar-name-wrapper {
/* Make the wrapper the positioning context of its child contacts
* menu. */
position: relative;
display: inline;
vertical-align: top;
background-color: var(--color-background-dark);
border-radius: 50vh;
padding: 1px 7px 1px 1px;
/* Ensure that the avatar and the user name will be kept together. */
white-space: nowrap;
.avatar {
img {
vertical-align: top;
}
height: 16px;
width: 16px;
vertical-align: middle;
padding: 1px;
margin-top: -3px;
margin-left: 0;
margin-right: 2px;
}
strong {
/* Ensure that the user name is shown in bold, as different browsers
* use different font weights for strong elements. */
font-weight: bold;
}
}
.avatar-name-wrapper.currentUser {
background-color: var(--color-primary);
color: var(--color-primary-text);
}
#commentsTabView .comments li .message .atwho-inserted {
margin-left: 5px;
}
.atwho-view-ul * .avatar-name-wrapper {
white-space: nowrap;
}
#commentsTabView .comment .author,
#commentsTabView .comment .date {
opacity: .5;
}
#commentsTabView .comment .author {
max-width: 210px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
#commentsTabView .comment .date {
margin-left: auto;
/** this is to fix the tooltip being too close due to the margin-top applied
to bring the tooltip closer for the action icons **/
padding: 10px 0px;
}
#commentsTabView .comments > li:not(.newCommentRow) .message {
#commentsTabView .comments li .message {
padding-left: 40px;
word-wrap: break-word;
overflow-wrap: break-word;
display: inline-flex;
flex-wrap: wrap;
align-items: center;
}
#commentsTabView .comment .action {
opacity: 0.3;
padding: 14px;
display: block;
opacity: 0;
padding: 5px;
}
#commentsTabView .comment .action:hover,
#commentsTabView .comment .action:focus {
#commentsTabView .comment:hover .action {
opacity: 0.3;
}
#commentsTabView .comment .action:hover {
opacity: 1;
}
#commentsTabView .newCommentRow .action-container {
margin-left: auto;
#commentsTabView .comment .action.delete,
#commentsTabView .comment .deleteLoading {
position: absolute;
right: 0;
}
#commentsTabView .comment.disabled .message {
#commentsTabView .comment.disabled {
opacity: 0.3;
}
#commentsTabView .comment.disabled .action {
display: none;
visibility: hidden;
}
#commentsTabView .message.error {
@@ -254,8 +216,3 @@
.app-files .action-comment {
padding: 16px 14px;
}
#commentsTabView .comment .message .contactsmenu-popover {
left: -6px;
top: 24px;
}
-124
View File
@@ -1,124 +0,0 @@
/*
* Copyright (c) 2018
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
/* global Handlebars */
(function() {
var TEMPLATE_MENU =
'<ul>' +
'{{#each items}}' +
'<li>' +
'<a href="#" class="menuitem action {{name}} permanent" data-action="{{name}}">' +
'{{#if iconClass}}' +
'<span class="icon {{iconClass}}"></span>' +
'{{else}}' +
'<span class="no-icon"></span>' +
'{{/if}}' +
'<span>{{displayName}}</span>' +
'</li>' +
'{{/each}}' +
'</ul>';
/**
* Construct a new CommentsModifyMenuinstance
* @constructs CommentsModifyMenu
* @memberof OC.Comments
*/
var CommentsModifyMenu = OC.Backbone.View.extend({
tagName: 'div',
className: 'commentsModifyMenu popovermenu bubble menu',
_scopes: [
{
name: 'edit',
displayName: t('comments', 'Edit comment'),
iconClass: 'icon-rename'
},
{
name: 'delete',
displayName: t('comments', 'Delete comment'),
iconClass: 'icon-delete'
}
],
initialize: function() {
},
events: {
'click a.action': '_onClickAction'
},
template: Handlebars.compile(TEMPLATE_MENU),
/**
* Event handler whenever an action has been clicked within the menu
*
* @param {Object} event event object
*/
_onClickAction: function(event) {
var $target = $(event.currentTarget);
if (!$target.hasClass('menuitem')) {
$target = $target.closest('.menuitem');
}
OC.hideMenus();
this.trigger('select:menu-item-clicked', event, $target.data('action'));
},
/**
* Renders the menu with the currently set items
*/
render: function() {
this.$el.html(this.template({
items: this._scopes
}));
},
/**
* Displays the menu
*/
show: function(context) {
this._context = context;
for(var i in this._scopes) {
this._scopes[i].active = false;
}
var $el = $(context.target);
var offsetIcon = $el.offset();
var offsetContainer = $el.closest('.authorRow').offset();
// adding some extra top offset to push the menu below the button.
var position = {
top: offsetIcon.top - offsetContainer.top + 48,
left: '',
right: ''
};
position.left = offsetIcon.left - offsetContainer.left;
if (position.left > 200) {
// we need to position the menu to the right.
position.left = '';
position.right = this.$el.closest('.comment').find('.date').width();
this.$el.removeClass('menu-left').addClass('menu-right');
} else {
this.$el.removeClass('menu-right').addClass('menu-left');
}
this.$el.css(position);
this.render();
this.$el.removeClass('hidden');
OC.showMenu(null, this.$el);
}
});
OCA.Comments = OCA.Comments || {};
OCA.Comments.CommentsModifyMenu = CommentsModifyMenu;
})(OC, OCA);
+65 -100
View File
@@ -21,22 +21,24 @@
'<div class="loading hidden" style="height: 50px"></div>';
var EDIT_COMMENT_TEMPLATE =
'<{{tag}} class="newCommentRow comment" data-id="{{id}}">' +
'<div class="newCommentRow comment" data-id="{{id}}">' +
' <div class="authorRow">' +
' <div class="avatar currentUser" data-username="{{actorId}}"></div>' +
' <div class="author currentUser">{{actorDisplayName}}</div>' +
'{{#if isEditMode}}' +
' <div class="action-container">' +
' <a href="#" class="action cancel icon icon-close has-tooltip" title="{{cancelText}}"></a>' +
' </div>' +
' <a href="#" class="action delete icon icon-delete has-tooltip" title="{{deleteTooltip}}"></a>' +
' <div class="deleteLoading icon-loading-small hidden"></div>'+
'{{/if}}' +
' </div>' +
' <form class="newCommentForm">' +
' <div contentEditable="true" class="message" data-placeholder="{{newMessagePlaceholder}}">{{message}}</div>' +
' <input class="submit icon-confirm has-tooltip" type="submit" value="" title="{{submitText}}"/>' +
' <input class="submit icon-confirm" type="submit" value="" />' +
'{{#if isEditMode}}' +
' <input class="cancel pull-right" type="button" value="{{cancelText}}" />' +
'{{/if}}' +
' <div class="submitLoading icon-loading-small hidden"></div>'+
' </form>' +
'</{{tag}}>';
'</div>';
var COMMENT_TEMPLATE =
'<li class="comment{{#if isUnread}} unread{{/if}}{{#if isLong}} collapsed{{/if}}" data-id="{{id}}">' +
@@ -44,8 +46,7 @@
' <div class="avatar{{#if isUserAuthor}} currentUser{{/if}}" {{#if actorId}}data-username="{{actorId}}"{{/if}}> </div>' +
' <div class="author{{#if isUserAuthor}} currentUser{{/if}}">{{actorDisplayName}}</div>' +
'{{#if isUserAuthor}}' +
' <a href="#" class="action more icon icon-more has-tooltip"></a>' +
' <div class="deleteLoading icon-loading-small hidden"></div>' +
' <a href="#" class="action edit icon icon-rename has-tooltip" title="{{editTooltip}}"></a>' +
'{{/if}}' +
' <div class="date has-tooltip live-relative-timestamp" data-timestamp="{{timestamp}}" title="{{altDate}}">{{date}}</div>' +
' </div>' +
@@ -63,11 +64,12 @@
id: 'commentsTabView',
className: 'tab commentsTabView',
_autoCompleteData: undefined,
_commentsModifyMenu: undefined,
events: {
'submit .newCommentForm': '_onSubmitComment',
'click .showMore': '_onClickShowMore',
'click .action.edit': '_onClickEditComment',
'click .action.delete': '_onClickDeleteComment',
'click .cancel': '_onClickCloseComment',
'click .comment': '_onClickComment',
'keyup div.message': '_onTextChange',
@@ -112,9 +114,9 @@
actorId: currentUser.uid,
actorDisplayName: currentUser.displayName,
newMessagePlaceholder: t('comments', 'New comment …'),
deleteTooltip: t('comments', 'Delete comment'),
submitText: t('comments', 'Post'),
cancelText: t('comments', 'Cancel'),
tag: 'li'
cancelText: t('comments', 'Cancel')
}, params));
},
@@ -164,7 +166,7 @@
emptyResultLabel: t('comments', 'No comments yet, start the conversation!'),
moreLabel: t('comments', 'More comments …')
}));
this.$el.find('.comments').before(this.editCommentTemplate({ tag: 'div'}));
this.$el.find('.comments').before(this.editCommentTemplate({}));
this.$el.find('.has-tooltip').tooltip();
this.$container = this.$el.find('ul.comments');
this.$el.find('.avatar').avatar(OC.getCurrentUser().uid, 32);
@@ -172,7 +174,6 @@
this.$el.find('.message').on('keydown input change', this._onTypeComment);
autosize(this.$el.find('.newCommentRow .message'))
this.$el.find('.newCommentForm .message').focus();
},
_initAutoComplete: function($target) {
@@ -196,26 +197,24 @@
sorter: function (q, items) { return items; }
},
displayTpl: function (item) {
return '<li>' +
'<span class="avatar-name-wrapper">' +
'<span class="avatar" ' +
'data-username="' + escapeHTML(item.id) + '" ' + // for avatars
'data-user="' + escapeHTML(item.id) + '" ' + // for contactsmenu
'data-user-display-name="' + escapeHTML(item.label) + '">' +
'</span>' +
'<strong>' + escapeHTML(item.label) + '</strong>' +
'</span></li>';
return '<li>'
+ '<span class="avatar-name-wrapper">'
+ '<div class="avatar" '
+ ' data-username="' + escapeHTML(item.id) + '"' // for avatars
+ ' data-user="' + escapeHTML(item.id) + '"' // for contactsmenu
+ ' data-user-display-name="' + escapeHTML(item.label) + '"></div>'
+ ' <strong>' + escapeHTML(item.label) + '</strong>'
+ '</span></li>';
},
insertTpl: function (item) {
return '' +
'<span class="avatar-name-wrapper">' +
'<span class="avatar" ' +
'data-username="' + escapeHTML(item.id) + '" ' + // for avatars
'data-user="' + escapeHTML(item.id) + '" ' + // for contactsmenu
'data-user-display-name="' + escapeHTML(item.label) + '">' +
'</span>' +
'<strong>' + escapeHTML(item.label) + '</strong>' +
'</span>';
return ''
+ '<span class="avatar-name-wrapper">'
+ '<div class="avatar" '
+ ' data-username="' + escapeHTML(item.id) + '"' // for avatars
+ ' data-user="' + escapeHTML(item.id) + '"' // for contactsmenu
+ ' data-user-display-name="' + escapeHTML(item.label) + '"></div>'
+ ' <strong>' + escapeHTML(item.label) + '</strong>'
+ '</span>';
},
searchKey: "label"
});
@@ -226,7 +225,7 @@
// passing the whole comments form would re-apply and request
// avatars from the server
$(je.target).find(
'span[data-username="' + $el.find('[data-username]').data('username') + '"]'
'div[data-username="' + $el.find('[data-username]').data('username') + '"]'
).parent(),
editionMode
);
@@ -245,22 +244,19 @@
if(!_.isUndefined(this._autoCompleteRequestCall)) {
this._autoCompleteRequestCall.abort();
}
this._autoCompleteRequestCall = $.ajax({
url: OC.linkToOCS('core', 2) + 'autocomplete/get',
data: {
this._autoCompleteRequestCall = $.get(
OC.generateUrl('/autocomplete/get'),
{
search: query,
itemType: 'files',
itemId: s.model.get('id'),
sorter: 'commenters|share-recipients',
limit: OC.appConfig.comments.maxAutoCompleteResults
},
beforeSend: function (request) {
request.setRequestHeader('Accept', 'application/json');
},
success: function (result) {
callback(result.ocs.data);
function (data) {
callback(data);
}
});
);
}, 400);
},
@@ -310,8 +306,6 @@
}
);
}
this.$el.find('.newCommentForm .message').focus();
},
/**
@@ -392,15 +386,7 @@
_postRenderItem: function($el, editionMode) {
$el.find('.has-tooltip').tooltip();
var inlineAvatars = $el.find('.message .avatar');
if ($($el.context).hasClass('message')) {
inlineAvatars = $el.find('.avatar');
}
inlineAvatars.each(function () {
var $this = $(this);
$this.avatar($this.attr('data-username'), 16);
});
$el.find('.authorRow .avatar').each(function () {
$el.find('.avatar').each(function() {
var $this = $(this);
$this.avatar($this.attr('data-username'), 32);
});
@@ -416,24 +402,6 @@
// it is the case when writing a comment and mentioning a person
$message = $el;
}
if (!editionMode) {
var self = this;
// add the dropdown menu to display the edit and delete option
var modifyCommentMenu = new OCA.Comments.CommentsModifyMenu();
$el.find('.authorRow').append(modifyCommentMenu.$el);
$el.find('.more').on('click', _.bind(modifyCommentMenu.show, modifyCommentMenu));
self.listenTo(modifyCommentMenu, 'select:menu-item-clicked', function(ev, action) {
if (action === 'edit') {
self._onClickEditComment(ev);
} else if (action === 'delete') {
self._onClickDeleteComment(ev);
}
});
}
this._postRenderMessage($message, editionMode);
},
@@ -442,13 +410,14 @@
return;
}
$el.find('.avatar-name-wrapper').each(function() {
var $this = $(this);
var $avatar = $this.find('.avatar');
$el.find('.avatar').each(function() {
var avatar = $(this);
var strong = $(this).next();
var appendTo = $(this).parent();
var user = $avatar.data('user');
if (user !== OC.getCurrentUser().uid) {
$this.contactsMenu(user, 0, $this);
var username = $(this).data('username');
if (username !== oc_current_user) {
$.merge(avatar, strong).contactsMenu(avatar.data('user'), 0, appendTo);
}
});
},
@@ -487,22 +456,20 @@
},
_composeHTMLMention: function(uid, displayName) {
var avatar = '' +
'<span class="avatar" ' +
'data-username="' + _.escape(uid) + '" ' +
'data-user="' + _.escape(uid) + '" ' +
'data-user-display-name="' + _.escape(displayName) + '">' +
'</span>';
var avatar = '<div class="avatar" '
+ 'data-username="' + _.escape(uid) + '"'
+ ' data-user="' + _.escape(uid) + '"'
+ ' data-user-display-name="'
+ _.escape(displayName) + '"></div>';
var isCurrentUser = (uid === OC.getCurrentUser().uid);
return '' +
'<span class="atwho-inserted" contenteditable="false">' +
'<span class="avatar-name-wrapper' + (isCurrentUser ? ' currentUser' : '') + '">' +
avatar +
'<strong>' + _.escape(displayName) + '</strong>' +
'</span>' +
'</span>';
return ''
+ '<span class="atwho-inserted" contenteditable="false">'
+ '<span class="avatar-name-wrapper' + (isCurrentUser ? ' currentUser' : '') + '">'
+ avatar + ' <strong>'+ _.escape(displayName)+'</strong>'
+ '</span>'
+ '</span>';
},
nextPage: function() {
@@ -601,13 +568,15 @@
var $comment = $(ev.target).closest('.comment');
var commentId = $comment.data('id');
var $loading = $comment.find('.deleteLoading');
var $moreIcon = $comment.find('.more');
var $commentField = $comment.find('.message');
var $submit = $comment.find('.submit');
var $cancel = $comment.find('.cancel');
$commentField.prop('contenteditable', false);
$submit.prop('disabled', true);
$cancel.prop('disabled', true);
$comment.addClass('disabled');
$loading.removeClass('hidden');
$moreIcon.addClass('hidden');
$comment.data('commentEl', $comment);
this.collection.get(commentId).destroy({
success: function() {
@@ -616,8 +585,10 @@
},
error: function() {
$loading.addClass('hidden');
$moreIcon.removeClass('hidden');
$comment.removeClass('disabled');
$commentField.prop('contenteditable', true);
$submit.prop('disabled', false);
$cancel.prop('disabled', false);
OC.Notification.showTemporary(t('comments', 'Error occurred while retrieving comment with ID {id}', {id: commentId}));
}
@@ -698,12 +669,6 @@
}, {
success: function(model) {
self._onSubmitSuccess(model, $form);
if(model.get('message').trim() === model.previous('message').trim()) {
// model change event doesn't trigger, manually remove the row.
var $row = $form.closest('.comment');
$row.data('commentEl').removeClass('hidden');
$row.remove();
}
},
error: function() {
self._onSubmitError($form, commentId);
-2
View File
@@ -4,10 +4,8 @@
"commentcollection.js",
"commentsummarymodel.js",
"commentstabview.js",
"commentsmodifymenu.js",
"filesplugin.js",
"activitytabviewplugin.js",
"search.js",
"vendor/Caret.js/dist/jquery.caret.min.js",
"vendor/At.js/dist/js/jquery.atwho.min.js"
]
-136
View File
@@ -1,136 +0,0 @@
/*
* Copyright (c) 2014
*
* This file is licensed under the Affero General Public License version 3
* or later.
*
* See the COPYING-README file.
*
*/
(function(OC, OCA, $) {
"use strict";
/**
* Construct a new FileActions instance
* @constructs Files
*/
var Comment = function() {
this.initialize();
};
Comment.prototype = {
fileList: null,
/**
* Initialize the file search
*/
initialize: function() {
var self = this;
this.fileAppLoaded = function() {
return !!OCA.Files && !!OCA.Files.App;
};
function inFileList($row, result) {
return false;
if (! self.fileAppLoaded()) {
return false;
}
var dir = self.fileList.getCurrentDirectory().replace(/\/+$/,'');
var resultDir = OC.dirname(result.path);
return dir === resultDir && self.fileList.inList(result.name);
}
function hideNoFilterResults() {
var $nofilterresults = $('.nofilterresults');
if ( ! $nofilterresults.hasClass('hidden') ) {
$nofilterresults.addClass('hidden');
}
}
/**
*
* @param {jQuery} $row
* @param {Object} result
* @param {int} result.id
* @param {string} result.comment
* @param {string} result.authorId
* @param {string} result.authorName
* @param {string} result.link
* @param {string} result.fileName
* @param {string} result.path
* @returns {*}
*/
this.renderCommentResult = function($row, result) {
if (inFileList($row, result)) {
return null;
}
hideNoFilterResults();
/*render preview icon, show path beneath filename,
show size and last modified date on the right */
this.updateLegacyMimetype(result);
var $pathDiv = $('<div>').addClass('path').text(result.path);
var $avatar = $('<div>');
$avatar.addClass('avatar')
.css('display', 'inline-block')
.css('vertical-align', 'middle')
.css('margin', '0 5px 2px 3px');
if (result.authorName) {
$avatar.avatar(result.authorId, 21, undefined, false, undefined, result.authorName);
} else {
$avatar.avatar(result.authorId, 21);
}
$row.find('td.info div.name').after($pathDiv).text(result.comment).prepend($('<span>').addClass('path').css('margin-right', '5px').text(result.authorName)).prepend($avatar);
$row.find('td.result a').attr('href', result.link);
$row.find('td.icon')
.css('background-image', 'url(' + OC.imagePath('core', 'actions/comment') + ')')
.css('opacity', '.4');
var dir = OC.dirname(result.path);
// "result.path" does not include a leading "/", so "OC.dirname"
// returns the path itself for files or folders in the root.
if (dir === result.path) {
dir = '/';
}
$row.find('td.info a').attr('href',
OC.generateUrl('/apps/files/?dir={dir}&scrollto={scrollto}', {dir: dir, scrollto: result.fileName})
);
return $row;
};
this.handleCommentClick = function($row, result, event) {
if (self.fileAppLoaded() && self.fileList.id === 'files') {
self.fileList.changeDirectory(OC.dirname(result.path));
self.fileList.scrollTo(result.name);
return false;
} else {
return true;
}
};
this.updateLegacyMimetype = function (result) {
// backward compatibility:
if (!result.mime && result.mime_type) {
result.mime = result.mime_type;
}
};
this.setFileList = function (fileList) {
this.fileList = fileList;
};
OC.Plugins.register('OCA.Search.Core', this);
},
attach: function(search) {
search.setRenderer('comment', this.renderCommentResult.bind(this));
search.setHandler('comment', this.handleCommentClick.bind(this));
}
};
OCA.Search.comment = new Comment();
})(OC, OCA, $);
+15 -15
View File
@@ -1,7 +1,22 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met ID {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met ID {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongelese kommentaar","%n ongelese kommentare"],
"Comment" : "Kommentaar",
"You commented" : "U het kommentaar gelewer",
"%1$s commented" : "%1$s het kommentaar gelewer",
"{author} commented" : "{outeur} het kommentaar gelewer",
@@ -13,21 +28,6 @@ OC.L10N.register(
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Jy is genoem op “{lêer}”, in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"{user} mentioned you in a comment on “{file}”" : "{gebruiker} het u in n kommentaar oor “{lêer}” genoem",
"Files app plugin to add comments to files" : "Lêertoepinprop om kommentaar op lêers te lewer",
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met ID {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met ID {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongelese kommentaar","%n ongelese kommentare"],
"Comment" : "Kommentaar",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Jy was genoem op \"%s\", in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s het u in n kommentaar op “%2$s” genoem"
},
+15 -15
View File
@@ -1,5 +1,20 @@
{ "translations": {
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"Comments" : "Kommentare",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met ID {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met ID {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongelese kommentaar","%n ongelese kommentare"],
"Comment" : "Kommentaar",
"You commented" : "U het kommentaar gelewer",
"%1$s commented" : "%1$s het kommentaar gelewer",
"{author} commented" : "{outeur} het kommentaar gelewer",
@@ -11,21 +26,6 @@
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Jy is genoem op “{lêer}”, in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"{user} mentioned you in a comment on “{file}”" : "{gebruiker} het u in n kommentaar oor “{lêer}” genoem",
"Files app plugin to add comments to files" : "Lêertoepinprop om kommentaar op lêers te lewer",
"Edit comment" : "Wysig kommentaar",
"Delete comment" : "Skrap kommentaar",
"New comment …" : "Nuwe kommentaar…",
"Post" : "Plaas",
"Cancel" : "Kanselleer",
"[Deleted user]" : "[Geskrapte gebruiker]",
"No comments yet, start the conversation!" : "Nog geen kommentaar, begin die gesprek!",
"More comments …" : "Nog kommentare …",
"Save" : "Bewaar",
"Allowed characters {count} of {max}" : "Toegelate karakters {telling} van {maks}",
"Error occurred while retrieving comment with ID {id}" : "n Fout het voorgekom toe kommentaar met ID {id} opgehaal is",
"Error occurred while updating comment with id {id}" : "n Fout het voorgekom toe kommentaar met ID {id} bygewerk is",
"Error occurred while posting comment" : "n Fout het voorgekom toe kommentaar geplaas is",
"_%n unread comment_::_%n unread comments_" : ["%n ongelese kommentaar","%n ongelese kommentare"],
"Comment" : "Kommentaar",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Jy was genoem op \"%s\", in die kommentaar van 'n gebruiker wat intussen geskrap is.",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s het u in n kommentaar op “%2$s” genoem"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+8 -10
View File
@@ -1,27 +1,25 @@
OC.L10N.register(
"comments",
{
"Comments" : "تعليقات",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on %1$s" : "لقد علقت على %1$s",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات",
"Edit comment" : "تعديل التعليق",
"Delete comment" : "حذف التعليق",
"New comment …" : "تعليق جديد",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
"No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
"More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while updating comment with id {id}" : "حصل خطأ أثناء تعديل التعليق رقم {id}",
"Error occurred while posting comment" : "حصل خطأ أثناء إرسال التعليق",
"_%n unread comment_::_%n unread comments_" : ["%n تعليق غير مقروء","%n تعليق غير مقروء","تعليقان غير مقروءة","%n تعليقات غير مقروء","%n تعليق غير مقروء","%n تعليق غير مقروء"],
"Comment" : "تعليق"
"Comment" : "تعليق",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
+8 -10
View File
@@ -1,25 +1,23 @@
{ "translations": {
"Comments" : "تعليقات",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on %1$s" : "لقد علقت على %1$s",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات",
"Edit comment" : "تعديل التعليق",
"Delete comment" : "حذف التعليق",
"New comment …" : "تعليق جديد",
"Post" : "ارسال",
"Cancel" : "إلغاء",
"[Deleted user]" : "[مستخدم محذوف]",
"Comments" : "تعليقات",
"No comments yet, start the conversation!" : "لا يوجد تعليقات, ابدأ النقاش الآن!",
"More comments …" : "مزيد من التعليقات...",
"Save" : "حفظ",
"Allowed characters {count} of {max}" : "عدد الأحرف المسموح بها {count} من {max}",
"Error occurred while updating comment with id {id}" : "حصل خطأ أثناء تعديل التعليق رقم {id}",
"Error occurred while posting comment" : "حصل خطأ أثناء إرسال التعليق",
"_%n unread comment_::_%n unread comments_" : ["%n تعليق غير مقروء","%n تعليق غير مقروء","تعليقان غير مقروءة","%n تعليقات غير مقروء","%n تعليق غير مقروء","%n تعليق غير مقروء"],
"Comment" : "تعليق"
"Comment" : "تعليق",
"You commented" : "قمت بكتابة تعليق",
"%1$s commented" : "%1$s كتب تعليق",
"You commented on {file}" : "علقت على {file}",
"%1$s commented on %2$s" : "%1$s كتب تعليق على %2$s",
"{author} commented on {file}" : "{author} علّق على {file}",
"<strong>Comments</strong> for files" : "<strong>تعليقات</strong> على الملفات"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
+14 -14
View File
@@ -1,7 +1,21 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"You commented" : "Comentesti",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
@@ -11,20 +25,6 @@ OC.L10N.register(
"{author} commented on {file}" : "{autor} comentó en {ficheru}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
"{user} mentioned you in a comment on “{file}”" : "{user} mentóte nun comentariu de «{file}»",
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentóte nun comentariu de «%2$s»"
},
"nplurals=2; plural=(n != 1);");
+14 -14
View File
@@ -1,5 +1,19 @@
{ "translations": {
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"Comments" : "Comentarios",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"You commented" : "Comentesti",
"%1$s commented" : "%1$s comentó",
"{author} commented" : "{author} comentó",
@@ -9,20 +23,6 @@
"{author} commented on {file}" : "{autor} comentó en {ficheru}",
"<strong>Comments</strong> for files" : "<strong>Comentarios</strong> pa ficheros",
"{user} mentioned you in a comment on “{file}”" : "{user} mentóte nun comentariu de «{file}»",
"Edit comment" : "Editar comentariu",
"Delete comment" : "Desaniciar comentariu",
"New comment …" : "Comentariu nuevu...",
"Post" : "Espublizar",
"Cancel" : "Encaboxar",
"[Deleted user]" : "[Usuariu desaniciáu]",
"No comments yet, start the conversation!" : "Entá nun hai comentarios. ¡Entama una conversación!",
"More comments …" : "Más comentarios...",
"Save" : "Guardar",
"Allowed characters {count} of {max}" : "{count} caráuteres almitíos de {max}",
"Error occurred while updating comment with id {id}" : "Asocedió un fallu entrín s'anovaba'l comentariu cola ID {id}",
"Error occurred while posting comment" : "Asocedieron fallos entrín s'espublizaba'l comentariu",
"_%n unread comment_::_%n unread comments_" : ["%n comentariu ensin lleer","%n comentarios ensin lleer"],
"Comment" : "Comentariu",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s mentóte nun comentariu de «%2$s»"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+14 -14
View File
@@ -1,7 +1,21 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"Comments" : "Коментари",
"No comments yet, start the conversation!" : "Все още няма коментари, започнете разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
@@ -12,20 +26,6 @@ OC.L10N.register(
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"No comments yet, start the conversation!" : "Все още няма коментари, започнете разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”"
},
+14 -14
View File
@@ -1,5 +1,19 @@
{ "translations": {
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"Comments" : "Коментари",
"No comments yet, start the conversation!" : "Все още няма коментари, започнете разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You commented" : "Вие коментирахте",
"%1$s commented" : "%1$s коментира",
"{author} commented" : "{author} коментира",
@@ -10,20 +24,6 @@
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on “{file}”" : "{user} те спомена в коментар за “{file}”",
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",
"New comment …" : "Нов коментар...",
"Post" : "Публикация",
"Cancel" : "Отказ",
"[Deleted user]" : "[Изтрит потребител]",
"No comments yet, start the conversation!" : "Все още няма коментари, започнете разговор!",
"More comments …" : "Още коментари...",
"Save" : "Запазване",
"Allowed characters {count} of {max}" : "Позволени символи {count} от {max}",
"Error occurred while updating comment with id {id}" : "Възникна грешка по време на обновяване на коментар с код {id}",
"Error occurred while posting comment" : "Възникна грешка по време на изпращане на коментар",
"_%n unread comment_::_%n unread comments_" : ["%n непрочетен коментар","%n непрочетени коментари"],
"Comment" : "Коментар",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Бяхте споменат/а на “%s”, в коментар от потребител, който вече е изтрит",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s те спомена в коментар за “%2$s”"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+19 -22
View File
@@ -1,7 +1,21 @@
OC.L10N.register(
"comments",
{
"Edit comment" : "Editar comentari",
"Delete comment" : "Esborrar comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
@@ -9,27 +23,10 @@ OC.L10N.register(
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per fitxers",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Heu estat esmentats a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha esmentat en un comentari de “{file}”",
"Files app plugin to add comments to files" : "Connexió de laplicació de fitxers per afegir comentaris als fitxers",
"Edit comment" : "Edita comentari",
"Delete comment" : "Suprimeix comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[Usuari suprimit]",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Enceteu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with ID {id}" : "S'ha produït un error en recuperar el comentari amb l'ID {id}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"_1 new comment_::_{unread} new comments_" : ["1 comentari nou","{unread} comentaris nous"],
"Comment" : "Comentari",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Hau estat esmentats a \"%s\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha esmentat en un comentari a “%2$s”"
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”"
},
"nplurals=2; plural=(n != 1);");
+19 -22
View File
@@ -1,5 +1,19 @@
{ "translations": {
"Edit comment" : "Editar comentari",
"Delete comment" : "Esborrar comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[usuari Esborrat]",
"Comments" : "Comentaris",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Comenceu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"Comment" : "Comentari",
"You commented" : "Heu comentat",
"%1$s commented" : "%1$s ha comentat",
"{author} commented" : "{author} ha comentat",
@@ -7,27 +21,10 @@
"You commented on {file}" : "Heu comentat a {file}",
"%1$s commented on %2$s" : "%1$s ha comentat a %2$s",
"{author} commented on {file}" : "{author} ha comentat a {file}",
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per fitxers",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Heu estat esmentats a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha esmentat en un comentari de “{file}”",
"Files app plugin to add comments to files" : "Connexió de laplicació de fitxers per afegir comentaris als fitxers",
"Edit comment" : "Edita comentari",
"Delete comment" : "Suprimeix comentari",
"New comment …" : "Nou comentari...",
"Post" : "Publica",
"Cancel" : "Cancel·la",
"[Deleted user]" : "[Usuari suprimit]",
"No comments yet, start the conversation!" : "Encara no hi ha comentaris. Enceteu la conversa!",
"More comments …" : "Més comentaris...",
"Save" : "Desa",
"Allowed characters {count} of {max}" : "{count} caràcters permesos de {max}",
"Error occurred while retrieving comment with ID {id}" : "S'ha produït un error en recuperar el comentari amb l'ID {id}",
"Error occurred while updating comment with id {id}" : "Hi ha hagut un error en actualitzar el comentari amb id {id}",
"Error occurred while posting comment" : "Hi ha hagut un error en publicar el comentari",
"_%n unread comment_::_%n unread comments_" : ["%n comentari no llegit","%n comentaris no llegits"],
"_1 new comment_::_{unread} new comments_" : ["1 comentari nou","{unread} comentaris nous"],
"Comment" : "Comentari",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Hau estat esmentats a \"%s\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha esmentat en un comentari a “%2$s”"
"<strong>Comments</strong> for files" : "<strong>Comentaris</strong> per arxius",
"You were mentioned on “{file}”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"{file}\" en un comentari d'un usuari que ja no existeix",
"{user} mentioned you in a comment on “{file}”" : "{user} us ha nomenat en un comentari de “{file}”",
"You were mentioned on “%s”, in a comment by a user that has since been deleted" : "Has estat mencionat a \"%s\" en un comentari d'un usuari que ja no existeix",
"%1$s mentioned you in a comment on “%2$s”" : "%1$s us ha nomenat en un comentari a “%2$s”"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

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