Compare commits

...

235 Commits

Author SHA1 Message Date
Frank Karlitschek 2020f35c6a 5.0.6 2013-05-14 08:14:24 +02:00
Frank Karlitschek cc495ed6d8 backport https://github.com/owncloud/core/pull/3329 2013-05-13 03:23:07 +02:00
Lukas Reschke f2911e76bc Add requesttoken to guest view
Should fix #3321
2013-05-13 14:54:18 +02:00
Frank Karlitschek 726350ea97 5.0.6 RC2 2013-05-12 23:59:31 +02:00
Lukas Reschke 9a53d50e16 Merge pull request #3290 from owncloud/config-data
Move config data to template
2013-05-12 11:41:42 +02:00
Jörn Friedrich Dreyer bc767f1899 don't emit rename hooks on partial file renames 2013-05-10 15:19:02 +02:00
Jörn Friedrich Dreyer 35b1f40ba4 rename isIgnoredFile to isPartialFile, remove check of blacklisted files in isPartialFile, correct usage of isPartialFile and isFileBlacklisted 2013-05-10 15:18:57 +02:00
Björn Schießle a23e8833c3 Merge pull request #3282 from owncloud/fix_etag_update
Fix etag update
2013-05-08 13:58:24 -07:00
Björn Schießle 8875bae0c3 don't call correctFolder() in touchHook, it will be called later in the writeUpdate() 2013-05-08 22:57:08 +02:00
Robin Appelman 144977352d Cache: only look for child entires when doing a move operation when moving a folder 2013-05-08 22:35:38 +02:00
Björn Schießle 35da6f25b1 rename a file if it gets restored so that it no longer exists as a version. Otherwise it can happen that the expire() function removes all other versions so that we end up with only one version which is exactly the same as the original file 2013-05-08 16:32:29 +02:00
Björn Schießle c43ec33ecb update etag for for the touched file 2013-05-08 15:49:45 +02:00
Björn Schießle 08561da5b6 touch file relative to users file folder, otherwise the hooks will be ignored 2013-05-08 15:05:03 +02:00
Bart Visscher d6fe8f213d Merge pull request #3141 from owncloud/fix_2553
Cache: mount user mountpoints to make sure that $data/$user/ exists before accessi...
2013-05-08 05:05:21 -07:00
Morris Jobke dd8c1f7759 Merge pull request #3244 from owncloud/allow_set_quota_to_zero
allow to set quota to zero, issue #2696
2013-05-07 01:37:10 -07:00
Björn Schießle 7ff26af107 allow to set quota to zero, issue #2696 2013-05-06 11:43:50 +02:00
blizzz 44fedae69f Merge pull request #3143 from owncloud/ldap_guid_check
LDAP: do not reset UUID attribute setting when guid is detected
2013-05-06 01:16:32 -07:00
Frank Karlitschek ffb91cdd66 5.0.6 RC 2013-05-05 23:35:20 +02:00
Lukas Reschke 1dfb757593 Merge pull request #3245 from owncloud/use-$view
Use the internal ownCloud view
2013-05-06 18:23:58 +02:00
Michael Gapczynski c0047b9079 Fix #2816 renaming shared files 2013-05-06 11:40:55 -04:00
Arthur Schiwon 0d5c82cd2a LDAP: cachekey in set method needs to match with that one from get 2013-05-03 16:05:46 +02:00
Bernhard Posselt e3c7386be4 respect format output 2013-05-03 15:39:51 +02:00
Bernhard Posselt 5db33b47c2 logout before output to not run into header already sent problems 2013-05-03 15:39:45 +02:00
Bernhard Posselt 6c26143516 fix bug that would only return error responses for 3rdparty apps 2013-05-03 15:39:35 +02:00
Robin Appelman 9c605c3fd1 Dont task external storages with creating their own root 2013-05-03 15:11:56 +02:00
Arthur Schiwon 0639634782 LDAP: remove restriction from group names to be in line with core behaviour again 2013-05-03 15:07:10 +02:00
blizzz 7d5b8e85ac Merge pull request #3197 from owncloud/fix_userlist
Fix retrieval of users with multiple backends
2013-05-03 04:48:51 -07:00
Arthur Schiwon c99b667021 Fix retrieval of users with multiple backends 2013-04-30 19:51:28 +02:00
Lukas Reschke c08c22aa54 It's a class 2013-04-29 14:28:49 +02:00
Lukas Reschke cbd216414a Remove uneeded onclick handler 2013-04-29 14:28:43 +02:00
Lukas Reschke 5428086204 Move onclick handler 2013-04-29 14:28:33 +02:00
Robin Appelman b38a1adf2d Files: Fix XSS when creating dropshadow 2013-04-28 19:33:54 +02:00
Tom Needham a5978ad544 Correct the api response when both a shipped app and/or a third party app fail 2013-04-28 11:56:31 +01:00
Tom Needham b24e6f11ba Fix typo 2013-04-28 11:53:30 +01:00
Tom Needham d642480c55 Code style for ocs/routes.php 2013-04-28 11:53:23 +01:00
Tom Needham 556ea61f8e Change app identifier for core api routes 2013-04-28 11:53:17 +01:00
Tom Needham 3bcd10a97c Use correct variable when checking auth 2013-04-28 11:53:08 +01:00
Arthur Schiwon 54a3038dc0 Cache Test: set datadir to temporary location, otherwise initmountpoints will access to productive location 2013-04-26 22:14:38 +02:00
Arthur Schiwon a6ece109ba LDAP: do not reset UUID attribute setting when guid is detected 2013-04-26 15:02:05 +02:00
Arthur Schiwon 4c008a8f92 Cache: mount user mountpoints to make sure that // exists before accessing it. Fixes #2553 and #2374 2013-04-26 13:20:12 +02:00
Morris Jobke 2030037301 modify password clone to password type right on submit to prevent the browser remind the content 2013-04-26 11:05:07 +02:00
Morris Jobke 794ed99927 turn off autocompletion for password field
refs #2632
2013-04-26 11:04:54 +02:00
Morris Jobke 65c7746504 Merge pull request #3115 from owncloud/backport-3109-stable5-2
backport #3109 to stable5 - changed *.po and *.pot have been ignored
2013-04-25 01:51:38 -07:00
Jenkins for ownCloud faa51bd002 backport #3109 to stable5 - changed *.po and *.pot have been ignored 2013-04-24 22:37:41 +02:00
Robin Appelman d9f10e2c26 Files: fix the order fileactions are computed for a file 2013-04-24 19:58:43 +02:00
Morris Jobke 8d92aaf3b7 fix wrong shared icon description
fix #2928

translation of string "Shared" has to be marked as located in "files" for the translation extractor
2013-04-24 17:51:50 +02:00
Lukas Reschke 9894145f8d Allow loading of external media ressources 2013-04-24 17:20:00 +02:00
Florian Scholz deba972093 - xframe restriction configurable now 2013-04-24 17:02:58 +02:00
Daniel Molkentin 41dc1fee68 Merge pull request #3100 from owncloud/ensure_index_php
Fix for #3049(cherry picked from commit ff6fb0906b)
2013-04-24 16:23:21 +02:00
Bernhard Posselt 72ea678c0e use variable instead of relative path to file 2013-04-24 16:12:23 +02:00
Bernhard Posselt ff49824312 check if there is a default/ folder in the theme directory if no theme exists 2013-04-24 16:12:10 +02:00
Lukas Reschke bb3d39f728 Disallow URLs containing a @ 2013-04-23 21:24:05 +02:00
Robin Appelman a7f1269f92 Files: also check if the source path is valid when doing a rename or copy operation 2013-04-23 21:13:29 +02:00
Arthur Schiwon 7ae0e38c4f LDAP: reset user/group-config association only after exists-check, may performance in some cases 2013-04-23 19:20:54 +02:00
Thomas Tanghus b626e514f7 Merge pull request #3076 from owncloud/manually_backport_insertIfNotExist
Backport #2567 OC_DB:insertIfNotExist()
2013-04-22 13:48:55 -07:00
Thomas Tanghus 3e8beddfe3 Backport #2567 2013-04-22 21:12:30 +02:00
Jan-Christoph Borchardt 18d515450a remove unnecessary border from navigation, looked strange with scrollbar and pushed the text over 1px 2013-04-22 16:17:22 +02:00
Jan-Christoph Borchardt 969bcb3ced make textarea inherit ownCloud font instead of using monospace 2013-04-22 16:16:52 +02:00
Bart Visscher 1d255ebf70 No need to strip slashes, json_decode handles that for us 2013-04-19 15:08:46 +02:00
Frank Karlitschek 9aae21db79 5.0.5 2013-04-10 02:14:16 +02:00
Jan-Christoph Borchardt 536117da2a apply navigation hover effect directly to img and span, cleaner code 2013-04-18 10:03:14 +02:00
Brice Maron 29054c27c9 Warn when we do an upgrade 2013-04-17 22:03:05 +02:00
Jan-Christoph Borchardt 207bf4bffe additional comments 2013-04-17 19:44:20 +02:00
Jan-Christoph Borchardt 4e11814a0c fix navigation hover effect, documentation 2013-04-17 19:44:07 +02:00
Thomas Tanghus 32667f8c38 Remove not null constraint. Fix #2976 2013-04-17 19:18:17 +02:00
Thomas Müller 1c06bec262 Merge pull request #2967 from Mirodin/patch-6
Update de_DE.php
2013-04-17 02:29:34 -07:00
Thomas Müller a82965edf2 Merge pull request #2965 from Mirodin/patch-5
Update de.php
2013-04-17 02:29:02 -07:00
Mirodin 76f12567be Update de_DE.php 2013-04-17 11:54:56 +03:00
Mirodin d7cbf45d15 Update de.php
Fixed a translation issue
2013-04-17 11:53:17 +03:00
Bart Visscher 05a2f31352 Merge pull request #2960 from owncloud/always_load_file_cache_hooks_first_stable5
always connect file cache updater hooks first
2013-04-17 00:32:45 -07:00
Jörn Friedrich Dreyer 811d649262 always connect file cache updater hooks first 2013-04-17 08:21:33 +02:00
Frank Karlitschek 6e32fc1db7 Merge pull request #2945 from owncloud/improved_quota_calc
Improved free space calculation for trash and versions
2013-04-16 19:55:32 -07:00
Björn Schießle e718a728c4 adapt free space calculation to the way it is done for the trash bin 2013-04-16 13:52:46 +02:00
Björn Schießle a065ae5db2 improved free space calculation if no quota is set, discussed in #2936 2013-04-16 13:51:53 +02:00
Bernhard Posselt 623db8549e also show black background on links that are active, fixes the news app that doesnt show the bg for folders correctly 2013-04-15 21:07:50 +02:00
Jan-Christoph Borchardt 16ef7c62dc Merge pull request #2931 from owncloud/info_message_trash_bin
write a info message to the log if a file gets removed from the trash bin automatically
2013-04-15 11:16:43 -07:00
Björn Schießle 0978ebd195 add explenation of the expire function to the apps description 2013-04-15 11:42:50 +02:00
Björn Schießle 1ddfefed3f write a info message to the log if a file gets removed from the trash bin automatically 2013-04-15 10:34:38 +02:00
Arthur Schiwon 16b62c697f allow Storages to join MountPoint initialization 2013-04-15 10:28:14 +02:00
Jan-Christoph Borchardt f70b1c1b0d add .disabled class so it can be used for simple a buttons as well 2013-04-14 22:07:07 +02:00
raghunayyar b400c29944 Add span tag while enabling or disbling apps as well. 2013-04-13 20:08:25 +05:30
Lukas Reschke 86d8b831f2 Add a name to the version parameter
Without an additional name it's nearly impossible to write positive security model based rules since the parameter name isn't defined.
2013-04-13 15:49:15 +02:00
Thomas Mueller 5fbb8b374d more accurate safe_mode check - refs #2258 2013-04-13 01:16:45 +02:00
Bernhard Posselt 0a3e87c890 used oc version 5.0.3 2013-04-13 01:15:35 +02:00
Bernhard Posselt 2220802cdd added yet another test for the verion compare check due to mail 2013-04-13 01:15:35 +02:00
Jan-Christoph Borchardt 0ff7aa4436 add styles for disabled input fields 2013-04-12 19:14:09 +02:00
Jan-Christoph Borchardt 5e817584db use proper sans-serif font-stack 2013-04-12 19:10:20 +02:00
Bernhard Posselt fbcb4b2673 Merge pull request #2899 from owncloud/stable5-backport-buttonfix
dont overwrite background image when hovering over button
2013-04-12 09:44:13 -07:00
Bernhard Posselt edae196f34 dont overwrite background image when hovering over button 2013-04-12 15:41:37 +02:00
Bernhard Posselt 11dcc29c0c Merge pull request #2867 from owncloud/cleanup_after_delUser
Cleanup database after del user
2013-04-11 05:00:44 -07:00
Björn Schießle d068325bdb cleanup the trash bin tables in the database after a user was deleted 2013-04-11 12:37:52 +02:00
Björn Schießle 6dc66e14fb remove used space for versions from db is a user was deleted 2013-04-11 12:36:08 +02:00
raghunayyar 30d5c70180 Using max-width instead of width for filename. 2013-04-11 13:55:31 +05:30
raghunayyar e9c3caeb9b Adds a fixed width to the filename to prevent horizontal scroll. 2013-04-11 13:55:11 +05:30
raghunayyar 9a0344f1d5 The Opacity for the navigation loads fine for icon and App name. 2013-04-11 11:00:35 +05:30
raghunayyar 33b27362ff Long Application Names are ellipsis correctly. 2013-04-11 10:59:46 +05:30
Frank Karlitschek 15c50017cc 5.0.5 RC1 2013-04-09 20:04:37 +02:00
Frank Karlitschek c43e33cdf5 5.0.4 2013-04-09 18:01:26 +02:00
Robin Appelman ef1481c7bb Fix touch for creating new files 2013-04-10 14:52:56 +02:00
Robin Appelman 892d85556b Add the quota change listeners to newly added user entries in the user list 2013-04-10 14:50:42 +02:00
Frank Karlitschek 5fb891e20a Merge pull request #2828 from owncloud/trashbin_fixes
Trashbin fixes
2013-04-10 01:07:17 -07:00
Frank Karlitschek c241985f04 5.0.4 RC 2013-04-09 16:59:03 +02:00
Lukas Reschke 9a4fe09979 Use a more random source... 2013-04-10 00:15:44 +02:00
Bart Visscher e26cdc4cdd Suppress the notice from the nullbyte check 2013-04-09 22:20:48 +02:00
Björn Schießle 317b00988a size of the trash bin could be incorrect, remove it for all users to enforce a recalculation during next usage. 2013-04-09 15:27:19 +02:00
Thomas Mueller 9159d55639 fixes #2743 - use public OC_User::getDisplayName instead of OC_User::determineDisplayName 2013-04-09 15:23:35 +02:00
Thomas Mueller 06ab314c15 fixes #2125 - the warning is now displayed with a disabled button 2013-04-09 15:18:19 +02:00
Björn Schießle f26a4e0b80 only add filesize to trashbin size if the file was moved to the trash bin successfully 2013-04-09 15:16:15 +02:00
Robin Appelman 2c3d66c776 Users: fix "Other.." quota option for the default quota 2013-04-09 15:15:08 +02:00
Frank Karlitschek aef66e06b3 Merge pull request #2818 from owncloud/fix_versioncheck
fix versioning check
2013-04-09 05:35:46 -07:00
kondou 67a84ad487 Fix #2730
Swap OC.dialogs.alert()'s parameters, so Error is shown
as its title.
2013-04-09 14:20:23 +02:00
Frank Karlitschek 440148aa1f fix versioning check 2013-04-09 13:13:52 +02:00
OpenLarry b35148bbb6 fixes #2679 2013-04-09 13:02:35 +02:00
Lukas Reschke 5ef8762886 Merge pull request #2786 from owncloud/disable-archive-app
manually disable archive app for stable5 to fix upgrade problems
2013-04-09 03:04:46 -07:00
Thomas Mueller b52666567a fixes #2792 - only touch if writable 2013-04-09 10:52:06 +02:00
Bernhard Posselt 1e580bf04b manually disable archive app for stable5 to fix upgrade problems 2013-04-08 15:53:43 +02:00
Bart Visscher 2a5599b3e0 Merge pull request #2614 from eMerzh/fix_internet_check
Improve internet connection check with proxy
2013-04-06 09:50:40 -07:00
Bernhard Posselt f82799cf7d Merge pull request #2741 from owncloud/fix_2650
Make FileCache upgrade more robust, fixes #2650
2013-04-05 12:22:59 -07:00
root e6d286b449 Proper CSS comment
CSS comments don't work like that.
2013-04-05 17:13:17 +02:00
Arthur Schiwon dc3a7e09af Make FileCache upgrade more robust, fixes #2650 2013-04-05 11:27:08 +02:00
Lukas Reschke 5add001373 Unescape the update hint
Backport of 8000f9db74ef2890cac74a34132c2550e4be6f11, fixes #2676
2013-04-05 00:41:08 +03:00
Bernhard Posselt 5317e7071e Merge pull request #2680 from owncloud/fix_2666
PostgreSQL compatibility, fixes #2666
2013-04-03 13:06:40 -07:00
Arthur Schiwon f5592cc88e Typo, fixes #2690 2013-04-03 20:06:33 +02:00
Arthur Schiwon 09f11c2679 PostreSQL compatibility, fixes #2666 2013-04-03 13:04:38 +02:00
Frank Karlitschek db48f5302a 5.0.3 2013-04-03 00:53:09 +02:00
Bernhard Posselt 4cd4bbd489 Merge pull request #2665 from owncloud/backport-2275-app-styles
manually backport #2275 app styles to stable
2013-04-02 14:24:00 -07:00
Bernhard Posselt 7b42c20180 Merge pull request #2595 from owncloud/fix_part_file_ignoring_stable5
Fix part file ignoring stable5
2013-04-02 14:01:17 -07:00
Jan-Christoph Borchardt 835df6c177 manually backport #2275 app styles to stable 2013-04-02 22:20:46 +02:00
root 5268aadb62 Backport PR #2622 2013-04-02 21:13:09 +02:00
Frank Karlitschek d7dccfb648 5.0.3 RC1 2013-04-02 19:14:24 +02:00
Frank Karlitschek cc204a608a Merge pull request #2656 from owncloud/fix_2642
fix upgrade error for instances not upgraded from 4.5
2013-04-02 09:34:29 -07:00
Arthur Schiwon 22c8194cc8 fix upgrade error for instances not upgraded from 4.5 2013-04-02 16:25:12 +02:00
Frank Karlitschek 8231f657d9 Merge pull request #2641 from owncloud/fix_2612
Key must use less then 767 bytes long
2013-04-02 02:58:57 -07:00
Arthur Schiwon 4f9f5a41b1 Key must use less then 767 bytes long 2013-04-02 11:29:41 +02:00
Frank Karlitschek 5944ee6ebe 5.0.2 2013-04-02 11:23:47 +02:00
VicDeo e1b6574ce7 Merge pull request #2625 from owncloud/fix_namespace_in_autoloader_stable5
Fix namespace in autoloader stable5
2013-03-31 06:10:47 -07:00
VicDeo c16860e648 Remove space before parethesis 2013-03-31 16:51:54 +04:00
Lukas Reschke d4a492d321 Show a warning in the installer if the used PHP version is vulnerable to the NULL Byte attack 2013-03-31 16:51:29 +04:00
Lukas Reschke a004266b7c Check if the installed PHP version has a fix for the nullbyte vulnerability 2013-03-31 16:51:12 +04:00
Thomas Mueller da96d1adb0 some basic unit test for loading classes 2013-03-31 16:50:29 +04:00
VicDeo ed39e47c9d Remove leading and trailing backslashes in classname. Ref #2310 2013-03-31 16:49:43 +04:00
Thomas Tanghus b9213cf451 User list: Keep array of available groups. Should fix #873 2013-03-29 20:45:35 +01:00
Brice Maron f308b0e321 Improve internet connection check with proxy 2013-03-29 15:37:39 +00:00
Thomas Mueller eeebf21fce fixes #1463 - file size is now displayed correctly in IE8 2013-03-29 13:50:53 +01:00
Thomas Mueller 75d944f96a fixes #1461 2013-03-29 13:50:53 +01:00
Jörn Friedrich Dreyer 9bfdfdf071 supress write hook for .part files 2013-03-28 12:21:00 +01:00
Jörn Friedrich Dreyer 2bb22d3aab ignore files in scanFile instead of scan to catch all occurences.
Conflicts:
	lib/files/cache/scanner.php
2013-03-28 12:21:00 +01:00
blizzz 4742d0eb94 Merge pull request #2602 from owncloud/fix_share_with_displayname
Fix share with displayname
2013-03-27 14:54:16 -07:00
Arthur Schiwon c901709d53 Whitespaces 2013-03-27 21:18:19 +01:00
Arthur Schiwon 84bc4c175a Share Dialog: show Displayname instead of internal name 2013-03-27 21:17:58 +01:00
blizzz 4d50a21eb4 Merge pull request #2558 from owncloud/fix_cache_upgrade
Fix cache upgrade
2013-03-27 11:10:22 -07:00
blizzz 37971133f1 Merge pull request #2596 from owncloud/fix_files_external_displayname
Files External: show display names instead of internal user names in Set...
2013-03-27 11:06:49 -07:00
blizzz c962f9db47 Merge pull request #2593 from owncloud/fix_userlist_append_displayname
Users: use DisplayName in the Display Name col when appending users
2013-03-27 10:47:52 -07:00
Jan-Christoph Borchardt 6333036a1a Merge pull request #2599 from owncloud/backport-2515-nav-scrollbar
Backport 2515 nav scrollbar
2013-03-27 09:19:06 -07:00
yannickoo 73758c1f78 Fixed typo 2013-03-27 17:13:06 +01:00
yannickoo 7e9e94d8d7 No Scrolling for more than approximately 10 Applications 2013-03-27 17:13:04 +01:00
Arthur Schiwon 07d0245336 Files External: show display names instead of internal user names in Settings UI 2013-03-27 14:33:35 +01:00
Arthur Schiwon 0bbac66ec5 Users: use DisplayName in the Display Name col when appending users 2013-03-27 14:05:00 +01:00
Arthur Schiwon 4411de0dbf Cache: on equal mtime also for equal size before keeping ETag, at least makes Unit Test happy 2013-03-26 23:42:00 +01:00
Thomas Mueller 871bbbba8a prevent to fire delete ajax a second time.
Before the click on a single file delete icon fired two different handlers - one of them is for multiple deletion only
2013-03-26 22:56:42 +01:00
Arthur Schiwon 4384cf70da Cache: Do not overwrite ETag when file did not change 2013-03-26 16:03:40 +01:00
Thomas Müller e0cf61dfc8 Merge pull request #2272 from owncloud/fix_json_encoded_pubic_download_oc5
let public link download handle json encoded file lists [oc5]
2013-03-26 01:55:40 -07:00
Björn Schießle 2387fbd9dd Merge pull request #2562 from owncloud/update_mtime_after_sync
listen to touch hook to update the mtime after sync
2013-03-26 01:41:41 -07:00
Arthur Schiwon 0b6b5e807c Only prepare an SQL statement once. 2013-03-25 21:46:50 +01:00
Arthur Schiwon b2b78228d6 Add PHPDoc 2013-03-25 21:45:55 +01:00
Arthur Schiwon 2e5829445f Adjust to Icewind's fix 2013-03-25 21:45:10 +01:00
Robin Appelman e63a12a481 Cache: fix property path for getting legacy etag 2013-03-25 21:43:51 +01:00
Robin Appelman 56302ff9cf Port Icewind's fix I 2013-03-25 21:43:49 +01:00
Arthur Schiwon 707de3e644 Add Index to properties table for better performance on upgrade 2013-03-25 17:54:45 +01:00
Arthur Schiwon 19a65f6c3f Change LIMIT in DB query respectively remove where not necessary 2013-03-25 17:54:10 +01:00
Björn Schießle 011ab3a11c listen to touch hook to update the mtime after sync 2013-03-25 16:26:17 +01:00
Arthur Schiwon ad62d89f2b Remove Debug output 2013-03-25 14:23:46 +01:00
Jörn Friedrich Dreyer 9b84c50f15 Merge pull request #2533 from owncloud/fix_sharing_updater
fix shared updated for rename action
2013-03-25 05:13:57 -07:00
Thomas Müller 01ffa519d5 Fixing author and copyright 2013-03-24 19:17:56 +01:00
Thomas Mueller fe73b5919d some more test cases & fix on file name generation with index 2013-03-24 19:17:56 +01:00
Thomas Mueller 5ad7eb080e adding extension to slugified physical path 2013-03-24 19:17:55 +01:00
Thomas Müller 2ce8329503 Merge pull request #2531 from Mirodin/patch-5
Update de.php
2013-03-24 11:14:33 -07:00
Thomas Müller 83e5383912 Merge pull request #2532 from Mirodin/patch-6
Update de_DE.php
2013-03-24 11:13:25 -07:00
Bernhard Posselt 660d204cbf Merge pull request #2525 from owncloud/fix_db_queries
add backticks around table names
2013-03-23 05:39:01 -07:00
Bernhard Posselt d091db4bc7 Merge pull request #2474 from owncloud/fix_2299
skip update if the recipient is the same user as the owner
2013-03-23 05:35:50 -07:00
Bernhard Posselt d61e820285 Merge pull request #2538 from eMerzh/improve_pbm_detect
Improve detection of installations errors
2013-03-23 05:31:19 -07:00
Brice Maron 85613cc66c Improve detection of installations errors 2013-03-23 12:19:43 +01:00
Arthur Schiwon 0fb9cc3c25 Upgrade FileCache on ownCloud upgrade for all users with files 2013-03-22 23:33:40 +01:00
Björn Schießle 76e5ffaa92 the old path no longer exists after rename, update the parent folder instead 2013-03-22 16:20:40 +01:00
Mirodin 9a26b1e0a6 Update de_DE.php
Fixed some translation issues
2013-03-22 15:33:52 +01:00
Mirodin bfd69dc8e0 Update de.php
Fixed some translation issues
2013-03-22 15:28:20 +01:00
Arthur Schiwon 0d075df15e Performance: prepare queries only once 2013-03-22 13:36:31 +01:00
Arthur Schiwon c82f43ee55 Fix lost ETag on Cache Upgrade 2013-03-22 13:23:43 +01:00
Björn Schießle 0eaf141528 add backticks around table names 2013-03-22 12:47:43 +01:00
Arthur Schiwon ee0dab1b13 LDAP: fix wrong return value 2013-03-20 13:17:40 +01:00
Björn Schießle 98ee292c93 fix indention 2013-03-20 12:58:39 +01:00
Björn Schießle 4ff5658475 skip update if the recipient is the same user as the owner, otherwise we run in a infinite loop for group shares 2013-03-20 12:45:24 +01:00
Thomas Mueller 7de540b8ee using rtrim 2013-03-19 17:00:48 +01:00
Thomas Mueller 9a41453254 fixes #2081 2013-03-19 17:00:35 +01:00
Jörn Friedrich Dreyer 707b319157 Merge pull request #2449 from owncloud/fix_npe
fix npe when createStorage() returns null
2013-03-19 07:48:54 -07:00
Bernhard Posselt f7911412e0 Merge pull request #2444 from owncloud/fix_ldap_issues
Fix ldap issues
2013-03-19 06:20:33 -07:00
Jörn Friedrich Dreyer 1cb3872df0 fix npe when createStorage() returns null 2013-03-19 14:18:44 +01:00
Arthur Schiwon 432fb55d91 LDAP: specify appid when selecting from appconfig 2013-03-19 13:39:52 +01:00
Arthur Schiwon 98c5d10bb5 LDAP: remove unnecessary func call, was a leftover from earlier refactor 2013-03-19 13:29:09 +01:00
Thomas Tanghus 84a2be1aad Backport #2440 js parameter. 2013-03-19 13:13:11 +01:00
Thomas Tanghus 9e383db75b User list: Avoid dupes and better sorting. Fix #2420 2013-03-19 12:59:32 +01:00
Arthur Schiwon c12b30f7a2 LDAP: check first whether group exists in this backend before doing other operations 2013-03-19 11:52:35 +01:00
Arthur Schiwon 5bf111e75f LDAP: check whether user exists for before trying to determine displayname 2013-03-19 11:16:57 +01:00
Arthur Schiwon f42d98edab LDAP: avoid irritating log output 2013-03-19 00:23:59 +01:00
Arthur Schiwon d392aa81c7 LDAP: user exists check on getHome, otherwise check will be performed with wrong configs on a multi LDAP server setup. 2013-03-19 00:23:35 +01:00
Frank Karlitschek 532e5463db backport https://github.com/owncloud/core/pull/2411 2013-03-17 22:17:24 +01:00
Robin Appelman cfea3ce2d7 Cache: better rename hook for cache updater 2013-03-17 14:16:13 +01:00
Robin Appelman 2c76ee1c8b Close sessions when doing background jobs 2013-03-17 02:25:21 +01:00
Michael Gapczynski 9a2c1cbcc3 Merge pull request #2384 from owncloud/error-handling-upgrade-backport
Backport add error handling to the file cache upgrade
2013-03-16 13:17:01 -07:00
Michael Gapczynski e6616ed758 Add error handling to the file cache upgrade 2013-03-16 15:22:27 -04:00
Ceri Davies b51b41468d Correct emails when folders are shared.
itemType is never "dir"; it's either "file" or "folder".
2013-03-15 12:43:22 +01:00
Frank Karlitschek 6f86802a48 Merge pull request #2348 from owncloud/fix_version_db_query
Fix db query in versions app, add backticks
2013-03-15 03:37:35 -07:00
Björn Schießle 0c6c175d62 remove backticks around table names 2013-03-15 11:24:13 +01:00
Brice Maron 885b81ba23 Add backtick for trash app to prevent pg errors 2013-03-15 11:19:02 +01:00
Björn Schießle fc86815a2c add backtick for db queries to prevent postgresql errors 2013-03-15 11:06:51 +01:00
Björn Schießle 6ca2abc108 create new version if the same file is uploaded again over the web interface, approved in #2317 2013-03-15 10:47:19 +01:00
Björn Schießle 0fe2f81a0c create new version if the same file is uploaded again over the web interface 2013-03-15 10:44:27 +01:00
Bernhard Posselt 2cd52e52c8 Merge pull request #2294 from owncloud/use_display_name_in_mail
use display name as sender for private link mails
2013-03-14 05:22:45 -07:00
Björn Schießle d06fec658c use display name as sender for private link mails 2013-03-14 11:48:04 +01:00
Bernhard Posselt 049329588f Merge pull request #2276 from owncloud/fix_sharing_hooks_oc5
listen to the pre delete hook in the sharing app [oc5]
2013-03-13 10:16:14 -07:00
Jörn Friedrich Dreyer 09d3b9ef26 Merge pull request #2278 from owncloud/fix_2267_master
use OC_DB instead of MDB2
2013-03-13 10:09:39 -07:00
Björn Schießle 92ce2bf89b fix for #2267, use OC_DB instead of MDB2 2013-03-13 16:51:41 +01:00
Björn Schießle ca93f6e1de don't show share action for the Shared folder, approved pull request #2265 2013-03-13 16:26:20 +01:00
Björn Schießle d166471a46 we need to listen to the pre delete hook, otherwise the file is already gone 2013-03-13 15:36:02 +01:00
Björn Schießle 896c56996e let public link download handle json encoded file lists 2013-03-13 11:40:46 +01:00
Arthur Schiwon 6017ca5ddd LDAP: compatibility with Novell eDirectory UUID 2013-03-12 20:16:09 +01:00
Thomas Mueller eedc1e76db enable UTF-8 charset on mssql
disable MDB2_PORTABILITY_EMPTY_TO_NULL for mssql to allow insert of empty string to no null fields
2013-03-12 20:01:40 +01:00
Thomas Mueller 510cbc4ff9 write error message to log file in case insert to file cache failed - took hours to find that the insert failed :-( 2013-03-12 20:01:40 +01:00
Thomas Mueller 9b9497bedf fixing various filesystem/storage unit tests on windows
fixing copy operation on mapper
2013-03-12 19:57:56 +01:00
Thomas Mueller 8846edd919 skip archive tests for now 2013-03-12 19:57:42 +01:00
Thomas Mueller 253f7ec932 adding //IGNORE to iconv to prevent nasty php warnings 2013-03-12 19:57:28 +01:00
Thomas Mueller 8bafcd1414 slug generates uniqid in case the file/folder name contains not one single valid character 2013-03-12 19:56:44 +01:00
Thomas Mueller 40bb805b83 indexed slug should be created based on logic path 2013-03-12 19:56:33 +01:00
icewind1991 00030a6c24 Merge pull request #2248 from otetard/bugfix/fix-public-link-file-sharing
Fix file sharing via public link for one particular file.
2013-03-12 11:49:08 -07:00
Olivier Tétard 2afece459a Fix file sharing via public link for one particular file.
Fix OC_Files::get() to not return the first character of the filename
if only one file is requested.
2013-03-12 11:53:41 +01:00
157 changed files with 1687 additions and 491 deletions
+3
View File
@@ -32,5 +32,8 @@ RewriteRule ^remote/(.*) remote.php [QSA,L]
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
</IfModule>
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
AddDefaultCharset utf-8
Options -Indexes
+1 -1
View File
@@ -8,7 +8,7 @@ OCP\JSON::callCheck();
// Get data
$dir = stripslashes($_POST["dir"]);
$files = isset($_POST["file"]) ? stripslashes($_POST["file"]) : stripslashes($_POST["files"]);
$files = isset($_POST["file"]) ? $_POST["file"] : $_POST["files"];
$files = json_decode($files);
$filesWithError = '';
+7
View File
@@ -12,3 +12,10 @@ OCP\App::addNavigationEntry( array( "id" => "files_index",
"name" => $l->t("Files") ));
OC_Search::registerProvider('OC_Search_Provider_File');
// cache hooks must be connected before all other apps.
// since 'files' is always loaded first the hooks need to be connected here
\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Updater', 'writeHook');
\OC_Hook::connect('OC_Filesystem', 'post_touch', '\OC\Files\Cache\Updater', 'touchHook');
\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Updater', 'deleteHook');
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Updater', 'renameHook');
+1 -1
View File
@@ -84,7 +84,7 @@ table td.filename input.filename { width:100%; cursor:text; }
table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 0; }
table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0; }
/* TODO fix usability bug (accidental file/folder selection) */
table td.filename .nametext { overflow:hidden; text-overflow:ellipsis; }
table td.filename .nametext { overflow:hidden; text-overflow:ellipsis; max-width:800px; }
table td.filename .uploadtext { font-weight:normal; margin-left:.5em; }
table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
+9 -8
View File
@@ -22,18 +22,18 @@ var FileActions = {
if (FileActions.actions.all) {
actions = $.extend(actions, FileActions.actions.all);
}
if (mime) {
if (FileActions.actions[mime]) {
actions = $.extend(actions, FileActions.actions[mime]);
if (type) {//type is 'dir' or 'file'
if (FileActions.actions[type]) {
actions = $.extend(actions, FileActions.actions[type]);
}
}
if (mime) {
var mimePart = mime.substr(0, mime.indexOf('/'));
if (FileActions.actions[mimePart]) {
actions = $.extend(actions, FileActions.actions[mimePart]);
}
}
if (type) {//type is 'dir' or 'file'
if (FileActions.actions[type]) {
actions = $.extend(actions, FileActions.actions[type]);
if (FileActions.actions[mime]) {
actions = $.extend(actions, FileActions.actions[mime]);
}
}
var filteredActions = {};
@@ -112,7 +112,8 @@ var FileActions = {
addAction(name, action);
}
});
if(actions.Share){
if(actions.Share && !($('#dir').val() === '/' && file === 'Shared')){
// t('files', 'Share')
addAction('Share', actions.Share);
}
+35 -10
View File
@@ -115,6 +115,11 @@ $(document).ready(function() {
return false;
});
// Trigger cancelling of file upload
$('#uploadprogresswrapper .stop').on('click', function() {
Files.cancelUploads();
});
// Show trash bin
$('#trash a').live('click', function() {
window.location=OC.filePath('files_trashbin', '', 'index.php');
@@ -226,14 +231,14 @@ $(document).ready(function() {
OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
// use special download URL if provided, e.g. for public shared files
if ( (downloadURL = document.getElementById("downloadURL")) ) {
window.location=downloadURL.value+"&download&files="+files;
window.location=downloadURL.value+"&download&files="+encodeURIComponent(fileslist);
} else {
window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist });
}
return false;
});
$('.delete').click(function(event) {
$('.delete-selected').click(function(event) {
var files=getSelectedFiles('name');
event.preventDefault();
FileList.do_delete(files);
@@ -407,7 +412,9 @@ $(document).ready(function() {
$('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
if(size==t('files','Pending')){
$('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
var sizeElement = $('tr').filterAttr('data-file',file.name).find('td.filesize');
sizeElement.text(simpleFileSize(file.size));
sizeElement.attr('title',humanFileSize(file.size));
}
//TODO update file upload size limit
FileList.loadingDone(file.name, file.id);
@@ -438,7 +445,9 @@ $(document).ready(function() {
$('tr').filterAttr('data-file',file.name).data('mime',file.mime).data('id',file.id);
var size = $('tr').filterAttr('data-file',file.name).find('td.filesize').text();
if(size==t('files','Pending')){
$('tr').filterAttr('data-file',file.name).find('td.filesize').text(file.size);
var sizeElement = $('tr').filterAttr('data-file',file.name).find('td.filesize');
sizeElement.text(simpleFileSize(file.size));
sizeElement.attr('title',humanFileSize(file.size));
}
//TODO update file upload size limit
FileList.loadingDone(file.name, file.id);
@@ -459,6 +468,10 @@ $(document).ready(function() {
// TODO: show nice progress bar in file row
},
progressall: function(e, data) {
//IE < 10 does not fire the necessary events for the progress bar.
if($.browser.msie && parseInt($.browser.version) < 10) {
return;
}
var progress = (data.loaded/data.total)*100;
$('#uploadprogressbar').progressbar('value',progress);
},
@@ -477,6 +490,11 @@ $(document).ready(function() {
if(data.dataType != 'iframe ') {
$('#upload input.stop').hide();
}
//IE < 10 does not fire the necessary events for the progress bar.
if($.browser.msie && parseInt($.browser.version) < 10) {
return;
}
$('#uploadprogressbar').progressbar('value',100);
$('#uploadprogressbar').fadeOut();
}
@@ -637,12 +655,19 @@ $(document).ready(function() {
localName=(localName.match(/:\/\/(.[^/]+)/)[1]).replace('www.','');
}
localName = getUniqueName(localName);
$('#uploadprogressbar').progressbar({value:0});
$('#uploadprogressbar').fadeIn();
//IE < 10 does not fire the necessary events for the progress bar.
if($.browser.msie && parseInt($.browser.version) < 10) {
} else {
$('#uploadprogressbar').progressbar({value:0});
$('#uploadprogressbar').fadeIn();
}
var eventSource=new OC.EventSource(OC.filePath('files','ajax','newfile.php'),{dir:$('#dir').val(),source:name,filename:localName});
eventSource.listen('progress',function(progress){
$('#uploadprogressbar').progressbar('value',progress);
if($.browser.msie && parseInt($.browser.version) < 10) {
} else {
$('#uploadprogressbar').progressbar('value',progress);
}
});
eventSource.listen('success',function(data){
var mime=data.mime;
@@ -839,9 +864,9 @@ var createDragShadow = function(event){
var dir=$('#dir').val();
$(selectedFiles).each(function(i,elem){
var newtr = $('<tr data-dir="'+dir+'" data-filename="'+elem.name+'">'
+'<td class="filename">'+elem.name+'</td><td class="size">'+humanFileSize(elem.size)+'</td>'
+'</tr>');
var newtr = $('<tr/>').attr('data-dir', dir).attr('data-filename', elem.name);
newtr.append($('<td/>').addClass('filename').text(elem.name));
newtr.append($('<td/>').addClass('size').text(humanFileSize(elem.size)));
tbody.append(newtr);
if (elem.type === 'dir') {
newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
+2
View File
@@ -5,6 +5,8 @@
"No file was uploaded" => "لم يتم ترفيع أي من الملفات",
"Missing a temporary folder" => "المجلد المؤقت غير موجود",
"Files" => "الملفات",
"Share" => "شارك",
"Delete permanently" => "حذف بشكل دائم",
"Delete" => "محذوف",
"Close" => "إغلق",
"Name" => "الاسم",
+1
View File
@@ -3,6 +3,7 @@
"Failed to write to disk" => "Възникна проблем при запис в диска",
"Invalid directory." => "Невалидна директория.",
"Files" => "Файлове",
"Share" => "Споделяне",
"Delete permanently" => "Изтриване завинаги",
"Delete" => "Изтриване",
"Rename" => "Преименуване",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ",
"Invalid directory." => "ভুল ডিরেক্টরি",
"Files" => "ফাইল",
"Share" => "ভাগাভাগি কর",
"Delete" => "মুছে ফেল",
"Rename" => "পূনঃনামকরণ",
"Pending" => "মুলতুবি",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "No hi ha prou espai disponible",
"Invalid directory." => "Directori no vàlid.",
"Files" => "Fitxers",
"Share" => "Comparteix",
"Delete permanently" => "Esborra permanentment",
"Delete" => "Suprimeix",
"Rename" => "Reanomena",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nedostatek dostupného úložného prostoru",
"Invalid directory." => "Neplatný adresář",
"Files" => "Soubory",
"Share" => "Sdílet",
"Delete permanently" => "Trvale odstranit",
"Delete" => "Smazat",
"Rename" => "Přejmenovat",
+74
View File
@@ -0,0 +1,74 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "Methwyd symud %s - Mae ffeil gyda'r enw hwn eisoes yn bodoli",
"Could not move %s" => "Methwyd symud %s",
"Unable to rename file" => "Methu ailenwi ffeil",
"No file was uploaded. Unknown error" => "Ni lwythwyd ffeil i fyny. Gwall anhysbys.",
"There is no error, the file uploaded with success" => "Does dim gwall, llwythodd y ffeil i fyny'n llwyddiannus",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb upload_max_filesize yn php.ini:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Mae'r ffeil lwythwyd i fyny'n fwy na chyfarwyddeb MAX_FILE_SIZE bennwyd yn y ffurflen HTML",
"The uploaded file was only partially uploaded" => "Dim ond yn rhannol y llwythwyd y ffeil i fyny",
"No file was uploaded" => "Ni lwythwyd ffeil i fyny",
"Missing a temporary folder" => "Plygell dros dro yn eisiau",
"Failed to write to disk" => "Methwyd ysgrifennu i'r ddisg",
"Not enough storage available" => "Dim digon o le storio ar gael",
"Invalid directory." => "Cyfeiriadur annilys.",
"Files" => "Ffeiliau",
"Share" => "Rhannu",
"Delete permanently" => "Dileu'n barhaol",
"Delete" => "Dileu",
"Rename" => "Ailenwi",
"Pending" => "I ddod",
"{new_name} already exists" => "{new_name} yn bodoli'n barod",
"replace" => "amnewid",
"suggest name" => "awgrymu enw",
"cancel" => "diddymu",
"replaced {new_name} with {old_name}" => "newidiwyd {new_name} yn lle {old_name}",
"undo" => "dadwneud",
"perform delete operation" => "cyflawni gweithred dileu",
"1 file uploading" => "1 ffeil yn llwytho i fyny",
"files uploading" => "ffeiliau'n llwytho i fyny",
"'.' is an invalid file name." => "Mae '.' yn enw ffeil annilys.",
"File name cannot be empty." => "Does dim hawl cael enw ffeil gwag.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Enw annilys, ni chaniateir, '\\', '/', '<', '>', ':', '\"', '|', '?' na '*'.",
"Your storage is full, files can not be updated or synced anymore!" => "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!",
"Your storage is almost full ({usedSpacePercent}%)" => "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Wrthi'n paratoi i lwytho i lawr. Gall gymryd peth amser os yw'r ffeiliau'n fawr.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Methu llwytho'ch ffeil i fyny gan ei fod yn gyferiadur neu'n cynnwys 0 beit",
"Not enough space available" => "Dim digon o le ar gael",
"Upload cancelled." => "Diddymwyd llwytho i fyny.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.",
"URL cannot be empty." => "Does dim hawl cael URL gwag.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Enw plygell annilys. Mae'r defnydd o 'Shared' yn cael ei gadw gan Owncloud",
"Error" => "Gwall",
"Name" => "Enw",
"Size" => "Maint",
"Modified" => "Addaswyd",
"1 folder" => "1 blygell",
"{count} folders" => "{count} plygell",
"1 file" => "1 ffeil",
"{count} files" => "{count} ffeil",
"Upload" => "Llwytho i fyny",
"File handling" => "Trafod ffeiliau",
"Maximum upload size" => "Maint mwyaf llwytho i fyny",
"max. possible: " => "mwyaf. posib:",
"Needed for multi-file and folder downloads." => "Angen ar gyfer llwytho mwy nag un ffeil neu blygell i lawr yr un pryd.",
"Enable ZIP-download" => "Galluogi llwytho i lawr ZIP",
"0 is unlimited" => "0 yn ddiderfyn",
"Maximum input size for ZIP files" => "Maint mewnbynnu mwyaf ffeiliau ZIP",
"Save" => "Cadw",
"New" => "Newydd",
"Text file" => "Ffeil destun",
"Folder" => "Plygell",
"From link" => "Dolen o",
"Deleted files" => "Ffeiliau ddilewyd",
"Cancel upload" => "Diddymu llwytho i fyny",
"You dont have write permissions here." => "Nid oes gennych hawliau ysgrifennu fan hyn.",
"Nothing in here. Upload something!" => "Does dim byd fan hyn. Llwythwch rhywbeth i fyny!",
"Download" => "Llwytho i lawr",
"Unshare" => "Dad-rannu",
"Upload too large" => "Maint llwytho i fyny'n rhy fawr",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Mae'r ffeiliau rydych yn ceisio llwytho i fyny'n fwy na maint mwyaf llwytho ffeiliau i fyny ar y gweinydd hwn.",
"Files are being scanned, please wait." => "Arhoswch, mae ffeiliau'n cael eu sganio.",
"Current scanning" => "Sganio cyfredol",
"Upgrading filesystem cache..." => "Uwchraddio storfa system ffeiliau..."
);
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Der er ikke nok plads til rådlighed",
"Invalid directory." => "Ugyldig mappe.",
"Files" => "Filer",
"Share" => "Del",
"Delete permanently" => "Slet permanent",
"Delete" => "Slet",
"Rename" => "Omdøb",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nicht genug Speicherplatz verfügbar",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Share" => "Teilen",
"Delete permanently" => "Permanent löschen",
"Delete" => "Löschen",
"Rename" => "Umbenennen",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nicht genug Speicher vorhanden.",
"Invalid directory." => "Ungültiges Verzeichnis.",
"Files" => "Dateien",
"Share" => "Teilen",
"Delete permanently" => "Entgültig löschen",
"Delete" => "Löschen",
"Rename" => "Umbenennen",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος",
"Invalid directory." => "Μη έγκυρος φάκελος.",
"Files" => "Αρχεία",
"Share" => "Διαμοιρασμός",
"Delete permanently" => "Μόνιμη διαγραφή",
"Delete" => "Διαγραφή",
"Rename" => "Μετονομασία",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "Malsukcesis skribo al disko",
"Invalid directory." => "Nevalida dosierujo.",
"Files" => "Dosieroj",
"Share" => "Kunhavigi",
"Delete" => "Forigi",
"Rename" => "Alinomigi",
"Pending" => "Traktotaj",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "No hay suficiente espacio disponible",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Eliminar",
"Rename" => "Renombrar",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "No hay suficiente capacidad de almacenamiento",
"Invalid directory." => "Directorio invalido.",
"Files" => "Archivos",
"Share" => "Compartir",
"Delete permanently" => "Borrar de manera permanente",
"Delete" => "Borrar",
"Rename" => "Cambiar nombre",
+1
View File
@@ -11,6 +11,7 @@
"Not enough storage available" => "Saadaval pole piisavalt ruumi",
"Invalid directory." => "Vigane kaust.",
"Files" => "Failid",
"Share" => "Jaga",
"Delete permanently" => "Kustuta jäädavalt",
"Delete" => "Kustuta",
"Rename" => "ümber",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
"Invalid directory." => "Baliogabeko karpeta.",
"Files" => "Fitxategiak",
"Share" => "Elkarbanatu",
"Delete permanently" => "Ezabatu betirako",
"Delete" => "Ezabatu",
"Rename" => "Berrizendatu",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
"Invalid directory." => "فهرست راهنما نامعتبر می باشد.",
"Files" => "فایل ها",
"Share" => "اشتراک‌گذاری",
"Delete permanently" => "حذف قطعی",
"Delete" => "پاک کردن",
"Rename" => "تغییرنام",
+1
View File
@@ -12,6 +12,7 @@
"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
"Invalid directory." => "Virheellinen kansio.",
"Files" => "Tiedostot",
"Share" => "Jaa",
"Delete permanently" => "Poista pysyvästi",
"Delete" => "Poista",
"Rename" => "Nimeä uudelleen",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Plus assez d'espace de stockage disponible",
"Invalid directory." => "Dossier invalide.",
"Files" => "Fichiers",
"Share" => "Partager",
"Delete permanently" => "Supprimer de façon définitive",
"Delete" => "Supprimer",
"Rename" => "Renommer",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Non hai espazo de almacenamento abondo",
"Invalid directory." => "O directorio é incorrecto.",
"Files" => "Ficheiros",
"Share" => "Compartir",
"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Eliminar",
"Rename" => "Renomear",
+1
View File
@@ -8,6 +8,7 @@
"Missing a temporary folder" => "תיקייה זמנית חסרה",
"Failed to write to disk" => "הכתיבה לכונן נכשלה",
"Files" => "קבצים",
"Share" => "שתף",
"Delete permanently" => "מחק לצמיתות",
"Delete" => "מחיקה",
"Rename" => "שינוי שם",
+1
View File
@@ -6,6 +6,7 @@
"Missing a temporary folder" => "Nedostaje privremena mapa",
"Failed to write to disk" => "Neuspjelo pisanje na disk",
"Files" => "Datoteke",
"Share" => "Podijeli",
"Delete" => "Briši",
"Rename" => "Promjeni ime",
"Pending" => "U tijeku",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nincs elég szabad hely.",
"Invalid directory." => "Érvénytelen mappa.",
"Files" => "Fájlok",
"Share" => "Megosztás",
"Delete permanently" => "Végleges törlés",
"Delete" => "Törlés",
"Rename" => "Átnevezés",
+1
View File
@@ -3,6 +3,7 @@
"No file was uploaded" => "Nulle file esseva incargate",
"Missing a temporary folder" => "Manca un dossier temporari",
"Files" => "Files",
"Share" => "Compartir",
"Delete" => "Deler",
"Close" => "Clauder",
"Name" => "Nomine",
+2
View File
@@ -6,6 +6,8 @@
"Missing a temporary folder" => "Kehilangan folder temporer",
"Failed to write to disk" => "Gagal menulis ke disk",
"Files" => "Berkas",
"Share" => "Bagikan",
"Delete permanently" => "Hapus secara permanen",
"Delete" => "Hapus",
"Pending" => "Menunggu",
"replace" => "mengganti",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "Tókst ekki að skrifa á disk",
"Invalid directory." => "Ógild mappa.",
"Files" => "Skrár",
"Share" => "Deila",
"Delete" => "Eyða",
"Rename" => "Endurskýra",
"Pending" => "Bíður",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Spazio di archiviazione insufficiente",
"Invalid directory." => "Cartella non valida.",
"Files" => "File",
"Share" => "Condividi",
"Delete permanently" => "Elimina definitivamente",
"Delete" => "Elimina",
"Rename" => "Rinomina",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "ストレージに十分な空き容量がありません",
"Invalid directory." => "無効なディレクトリです。",
"Files" => "ファイル",
"Share" => "共有",
"Delete permanently" => "完全に削除する",
"Delete" => "削除",
"Rename" => "名前の変更",
+2
View File
@@ -6,6 +6,8 @@
"Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს",
"Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას",
"Files" => "ფაილები",
"Share" => "გაზიარება",
"Delete permanently" => "სრულად წაშლა",
"Delete" => "წაშლა",
"Rename" => "გადარქმევა",
"Pending" => "მოცდის რეჟიმში",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "디스크에 쓰지 못했습니다",
"Invalid directory." => "올바르지 않은 디렉터리입니다.",
"Files" => "파일",
"Share" => "공유",
"Delete" => "삭제",
"Rename" => "이름 바꾸기",
"Pending" => "보류 중",
+1
View File
@@ -6,6 +6,7 @@
"Missing a temporary folder" => "Et feelt en temporären Dossier",
"Failed to write to disk" => "Konnt net op den Disk schreiwen",
"Files" => "Dateien",
"Share" => "Deelen",
"Delete" => "Läschen",
"replace" => "ersetzen",
"cancel" => "ofbriechen",
+1
View File
@@ -6,6 +6,7 @@
"Missing a temporary folder" => "Nėra laikinojo katalogo",
"Failed to write to disk" => "Nepavyko įrašyti į diską",
"Files" => "Failai",
"Share" => "Dalintis",
"Delete" => "Ištrinti",
"Rename" => "Pervadinti",
"Pending" => "Laukiantis",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nav pietiekami daudz vietas",
"Invalid directory." => "Nederīga direktorija.",
"Files" => "Datnes",
"Share" => "Dalīties",
"Delete permanently" => "Dzēst pavisam",
"Delete" => "Dzēst",
"Rename" => "Pārsaukt",
+1
View File
@@ -8,6 +8,7 @@
"Missing a temporary folder" => "Не постои привремена папка",
"Failed to write to disk" => "Неуспеав да запишам на диск",
"Files" => "Датотеки",
"Share" => "Сподели",
"Delete" => "Избриши",
"Rename" => "Преименувај",
"Pending" => "Чека",
+1
View File
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Folder sementara hilang",
"Failed to write to disk" => "Gagal untuk disimpan",
"Files" => "fail",
"Share" => "Kongsi",
"Delete" => "Padam",
"Pending" => "Dalam proses",
"replace" => "ganti",
+1
View File
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "Mangler en midlertidig mappe",
"Failed to write to disk" => "Klarte ikke å skrive til disk",
"Files" => "Filer",
"Share" => "Del",
"Delete permanently" => "Slett permanent",
"Delete" => "Slett",
"Rename" => "Omdøp",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Niet genoeg opslagruimte beschikbaar",
"Invalid directory." => "Ongeldige directory.",
"Files" => "Bestanden",
"Share" => "Delen",
"Delete permanently" => "Verwijder definitief",
"Delete" => "Verwijder",
"Rename" => "Hernoem",
+1
View File
@@ -6,6 +6,7 @@
"Missing a temporary folder" => "Un dorsièr temporari manca",
"Failed to write to disk" => "L'escriptura sul disc a fracassat",
"Files" => "Fichièrs",
"Share" => "Parteja",
"Delete" => "Escafa",
"Rename" => "Torna nomenar",
"Pending" => "Al esperar",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Za mało dostępnego miejsca",
"Invalid directory." => "Zła ścieżka.",
"Files" => "Pliki",
"Share" => "Udostępnij",
"Delete permanently" => "Trwale usuń",
"Delete" => "Usuń",
"Rename" => "Zmień nazwę",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Espaço de armazenamento insuficiente",
"Invalid directory." => "Diretório inválido.",
"Files" => "Arquivos",
"Share" => "Compartilhar",
"Delete permanently" => "Excluir permanentemente",
"Delete" => "Excluir",
"Rename" => "Renomear",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Não há espaço suficiente em disco",
"Invalid directory." => "Directório Inválido",
"Files" => "Ficheiros",
"Share" => "Partilhar",
"Delete permanently" => "Eliminar permanentemente",
"Delete" => "Apagar",
"Rename" => "Renomear",
+1
View File
@@ -12,6 +12,7 @@
"Failed to write to disk" => "Eroare la scriere pe disc",
"Invalid directory." => "Director invalid.",
"Files" => "Fișiere",
"Share" => "Partajează",
"Delete" => "Șterge",
"Rename" => "Redenumire",
"Pending" => "În așteptare",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Недостаточно доступного места в хранилище",
"Invalid directory." => "Неправильный каталог.",
"Files" => "Файлы",
"Share" => "Открыть доступ",
"Delete permanently" => "Удалено навсегда",
"Delete" => "Удалить",
"Rename" => "Переименовать",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Недостаточно места в хранилище",
"Invalid directory." => "Неверный каталог.",
"Files" => "Файлы",
"Share" => "Сделать общим",
"Delete permanently" => "Удалить навсегда",
"Delete" => "Удалить",
"Rename" => "Переименовать",
+1
View File
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "තාවකාලික ෆොල්ඩරයක් සොයාගත නොහැක",
"Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි",
"Files" => "ගොනු",
"Share" => "බෙදා හදා ගන්න",
"Delete" => "මකන්න",
"Rename" => "නැවත නම් කරන්න",
"replace" => "ප්‍රතිස්ථාපනය කරන්න",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Nedostatok dostupného úložného priestoru",
"Invalid directory." => "Neplatný priečinok",
"Files" => "Súbory",
"Share" => "Zdieľať",
"Delete permanently" => "Zmazať trvalo",
"Delete" => "Odstrániť",
"Rename" => "Premenovať",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Na voljo ni dovolj prostora",
"Invalid directory." => "Neveljavna mapa.",
"Files" => "Datoteke",
"Share" => "Souporaba",
"Delete permanently" => "Izbriši trajno",
"Delete" => "Izbriši",
"Rename" => "Preimenuj",
+74
View File
@@ -0,0 +1,74 @@
<?php $TRANSLATIONS = array(
"Could not move %s - File with this name already exists" => "%s nuk u spostua - Aty ekziston një skedar me të njëjtin emër",
"Could not move %s" => "%s nuk u spostua",
"Unable to rename file" => "Nuk është i mundur riemërtimi i skedarit",
"No file was uploaded. Unknown error" => "Nuk u ngarkua asnjë skedar. Veprim i gabuar i panjohur",
"There is no error, the file uploaded with success" => "Nuk pati veprime të gabuara, skedari u ngarkua me sukses",
"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Skedari i ngarkuar tejkalon udhëzimin upload_max_filesize tek php.ini:",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Skedari i ngarkuar tejkalon udhëzimin MAX_FILE_SIZE të specifikuar në formularin HTML",
"The uploaded file was only partially uploaded" => "Skedari i ngarkuar u ngarkua vetëm pjesërisht",
"No file was uploaded" => "Nuk u ngarkua asnjë skedar",
"Missing a temporary folder" => "Një dosje e përkohshme nuk u gjet",
"Failed to write to disk" => "Ruajtja në disk dështoi",
"Not enough storage available" => "Nuk ka mbetur hapësirë memorizimi e mjaftueshme",
"Invalid directory." => "Dosje e pavlefshme.",
"Files" => "Skedarët",
"Share" => "Nda",
"Delete permanently" => "Elimino përfundimisht",
"Delete" => "Elimino",
"Rename" => "Riemërto",
"Pending" => "Pezulluar",
"{new_name} already exists" => "{new_name} ekziston",
"replace" => "zëvëndëso",
"suggest name" => "sugjero një emër",
"cancel" => "anulo",
"replaced {new_name} with {old_name}" => "U zëvëndësua {new_name} me {old_name}",
"undo" => "anulo",
"perform delete operation" => "ekzekuto operacionin e eliminimit",
"1 file uploading" => "Po ngarkohet 1 skedar",
"files uploading" => "po ngarkoj skedarët",
"'.' is an invalid file name." => "'.' është emër i pavlefshëm.",
"File name cannot be empty." => "Emri i skedarit nuk mund të jetë bosh.",
"Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Emër i pavlefshëm, '\\', '/', '<', '>', ':', '\"', '|', '?' dhe '*' nuk lejohen.",
"Your storage is full, files can not be updated or synced anymore!" => "Hapësira juaj e memorizimit është plot, nuk mund të ngarkoni apo sinkronizoni më skedarët.",
"Your storage is almost full ({usedSpacePercent}%)" => "Hapësira juaj e memorizimit është gati plot ({usedSpacePercent}%)",
"Your download is being prepared. This might take some time if the files are big." => "Shkarkimi juaj po përgatitet. Mund të duhet pak kohë nqse skedarët janë të mëdhenj.",
"Unable to upload your file as it is a directory or has 0 bytes" => "Nuk është i mundur ngarkimi i skedarit tuaj sepse është dosje ose ka dimension 0 byte",
"Not enough space available" => "Nuk ka hapësirë memorizimi e mjaftueshme",
"Upload cancelled." => "Ngarkimi u anulua.",
"File upload is in progress. Leaving the page now will cancel the upload." => "Ngarkimi i skedarit është në vazhdim. Nqse ndërroni faqen tani ngarkimi do të anulohet.",
"URL cannot be empty." => "URL-i nuk mund të jetë bosh.",
"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Emri i dosjes është i pavlefshëm. Përdorimi i \"Shared\" është i rezervuar nga Owncloud-i.",
"Error" => "Veprim i gabuar",
"Name" => "Emri",
"Size" => "Dimensioni",
"Modified" => "Modifikuar",
"1 folder" => "1 dosje",
"{count} folders" => "{count} dosje",
"1 file" => "1 skedar",
"{count} files" => "{count} skedarë",
"Upload" => "Ngarko",
"File handling" => "Trajtimi i skedarit",
"Maximum upload size" => "Dimensioni maksimal i ngarkimit",
"max. possible: " => "maks. i mundur:",
"Needed for multi-file and folder downloads." => "Duhet për shkarkimin e dosjeve dhe të skedarëve",
"Enable ZIP-download" => "Aktivizo shkarkimin e ZIP-eve",
"0 is unlimited" => "0 është i pakufizuar",
"Maximum input size for ZIP files" => "Dimensioni maksimal i ngarkimit të skedarëve ZIP",
"Save" => "Ruaj",
"New" => "I ri",
"Text file" => "Skedar teksti",
"Folder" => "Dosje",
"From link" => "Nga lidhja",
"Deleted files" => "Skedarë të eliminuar",
"Cancel upload" => "Anulo ngarkimin",
"You dont have write permissions here." => "Nuk keni të drejta për të shkruar këtu.",
"Nothing in here. Upload something!" => "Këtu nuk ka asgjë. Ngarkoni diçka!",
"Download" => "Shkarko",
"Unshare" => "Hiq ndarjen",
"Upload too large" => "Ngarkimi është shumë i madh",
"The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skedarët që doni të ngarkoni tejkalojnë dimensionet maksimale për ngarkimet në këtë server.",
"Files are being scanned, please wait." => "Skedarët po analizohen, ju lutemi pritni.",
"Current scanning" => "Analizimi aktual",
"Upgrading filesystem cache..." => "Po përmirësoj memorjen e filesystem-it..."
);
+2
View File
@@ -7,6 +7,8 @@
"Missing a temporary folder" => "Недостаје привремена фасцикла",
"Failed to write to disk" => "Не могу да пишем на диск",
"Files" => "Датотеке",
"Share" => "Дели",
"Delete permanently" => "Обриши за стално",
"Delete" => "Обриши",
"Rename" => "Преименуј",
"Pending" => "На чекању",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
"Invalid directory." => "Felaktig mapp.",
"Files" => "Filer",
"Share" => "Dela",
"Delete permanently" => "Radera permanent",
"Delete" => "Radera",
"Rename" => "Byt namn",
+1
View File
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
"Failed to write to disk" => "வட்டில் எழுத முடியவில்லை",
"Files" => "கோப்புகள்",
"Share" => "பகிர்வு",
"Delete" => "அழிக்க",
"Rename" => "பெயர்மாற்றம்",
"Pending" => "நிலுவையிலுள்ள",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
"Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง",
"Files" => "ไฟล์",
"Share" => "แชร์",
"Delete" => "ลบ",
"Rename" => "เปลี่ยนชื่อ",
"Pending" => "อยู่ระหว่างดำเนินการ",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Yeterli disk alanı yok",
"Invalid directory." => "Geçersiz dizin.",
"Files" => "Dosyalar",
"Share" => "Paylaş",
"Delete permanently" => "Kalıcı olarak sil",
"Delete" => "Sil",
"Rename" => "İsim değiştir.",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Місця більше немає",
"Invalid directory." => "Невірний каталог.",
"Files" => "Файли",
"Share" => "Поділитися",
"Delete permanently" => "Видалити назавжди",
"Delete" => "Видалити",
"Rename" => "Перейменувати",
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "Không đủ không gian lưu trữ",
"Invalid directory." => "Thư mục không hợp lệ",
"Files" => "Tập tin",
"Share" => "Chia sẻ",
"Delete permanently" => "Xóa vĩnh vễn",
"Delete" => "Xóa",
"Rename" => "Sửa tên",
+1
View File
@@ -7,6 +7,7 @@
"Missing a temporary folder" => "丢失了一个临时文件夹",
"Failed to write to disk" => "写磁盘失败",
"Files" => "文件",
"Share" => "分享",
"Delete" => "删除",
"Rename" => "重命名",
"Pending" => "Pending",
+2
View File
@@ -12,6 +12,8 @@
"Failed to write to disk" => "写入磁盘失败",
"Invalid directory." => "无效文件夹。",
"Files" => "文件",
"Share" => "分享",
"Delete permanently" => "永久删除",
"Delete" => "删除",
"Rename" => "重命名",
"Pending" => "操作等待中",
+12
View File
@@ -0,0 +1,12 @@
<?php $TRANSLATIONS = array(
"Files" => "文件",
"Share" => "分享",
"Delete" => "刪除",
"Error" => "錯誤",
"Name" => "名稱",
"{count} folders" => "{}文件夾",
"Upload" => "上傳",
"Save" => "儲存",
"Download" => "下載",
"Unshare" => "取消分享"
);
+1
View File
@@ -13,6 +13,7 @@
"Not enough storage available" => "儲存空間不足",
"Invalid directory." => "無效的資料夾。",
"Files" => "檔案",
"Share" => "分享",
"Delete permanently" => "永久刪除",
"Delete" => "刪除",
"Rename" => "重新命名",
+4 -5
View File
@@ -32,7 +32,7 @@
value="(max <?php p($_['uploadMaxHumanFilesize']); ?>)">
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<input type="file" id="file_upload_start" name='files[]'/>
<a href="#" class="svg" onclick="return false;"></a>
<a href="#" class="svg"></a>
</form>
</div>
<?php if ($_['trash'] ): ?>
@@ -44,13 +44,12 @@
<div id="uploadprogressbar"></div>
<input type="button" class="stop" style="display:none"
value="<?php p($l->t('Cancel upload'));?>"
onclick="javascript:Files.cancelUploads();"
/>
</div>
</div>
<div id="file_action_panel"></div>
<?php else:?>
<div class="crumb last"><?php p($l->t('You dont have write permissions here.'))?></div>
<div class="actions"><input type="button" disabled value="<?php p($l->t('You dont have write permissions here.'))?>"></div>
<input type="hidden" name="dir" value="<?php p($_['dir']) ?>" id="dir">
<?php endif;?>
<input type="hidden" name="permissions" value="<?php p($_['permissions']); ?>" id="permissions">
@@ -82,13 +81,13 @@
<?php if ($_['permissions'] & OCP\PERMISSION_DELETE): ?>
<!-- NOTE: Temporary fix to allow unsharing of files in root of Shared folder -->
<?php if ($_['dir'] == '/Shared'): ?>
<span class="selectedActions"><a href="" class="delete">
<span class="selectedActions"><a href="" class="delete-selected">
<?php p($l->t('Unshare'))?>
<img class="svg" alt="<?php p($l->t('Unshare'))?>"
src="<?php print_unescaped(OCP\image_path("core", "actions/delete.svg")); ?>" />
</a></span>
<?php else: ?>
<span class="selectedActions"><a href="" class="delete">
<span class="selectedActions"><a href="" class="delete-selected">
<?php p($l->t('Delete'))?>
<img class="svg" alt="<?php p($l->t('Delete'))?>"
src="<?php print_unescaped(OCP\image_path("core", "actions/delete.svg")); ?>" />
-1
View File
@@ -45,7 +45,6 @@ class Dropbox extends \OC\Files\Storage\Common {
$oauth = new \Dropbox_OAuth_Curl($params['app_key'], $params['app_secret']);
$oauth->setToken($params['token'], $params['token_secret']);
$this->dropbox = new \Dropbox_API($oauth, 'dropbox');
$this->mkdir('');
} else {
throw new \Exception('Creating \OC\Files\Storage\Dropbox storage failed');
}
-6
View File
@@ -35,10 +35,6 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
if ( ! $this->root || $this->root[0]!='/') {
$this->root='/'.$this->root;
}
//create the root folder if necessary
if ( ! $this->is_dir('')) {
$this->mkdir('');
}
} else {
throw new \Exception();
}
@@ -63,7 +59,6 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
return $url;
}
public function fopen($path,$mode) {
$this->init();
switch($mode) {
case 'r':
case 'rb':
@@ -100,7 +95,6 @@ class FTP extends \OC\Files\Storage\StreamWrapper{
}
public function writeBack($tmpFile) {
$this->init();
if (isset(self::$tempFiles[$tmpFile])) {
$this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
unlink($tmpFile);
-4
View File
@@ -50,10 +50,6 @@ class SFTP extends \OC\Files\Storage\Common {
$host_keys[$this->host] = $current_host_key;
$this->write_host_keys($host_keys);
}
if(!$this->file_exists('')){
$this->mkdir('');
}
}
public function test() {
-1
View File
@@ -73,7 +73,6 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
* @return bool
*/
public function hasUpdated($path,$time) {
$this->init();
if(!$path and $this->root=='/') {
// mtime doesn't work for shares, but giving the nature of the backend,
// doing a full update is still just fast enough
+5 -31
View File
@@ -8,46 +8,28 @@
namespace OC\Files\Storage;
abstract class StreamWrapper extends \OC\Files\Storage\Common{
private $ready = false;
protected function init(){
if($this->ready) {
return;
}
$this->ready = true;
//create the root folder if necesary
if(!$this->is_dir('')) {
$this->mkdir('');
}
}
abstract class StreamWrapper extends Common{
abstract public function constructUrl($path);
public function mkdir($path) {
$this->init();
return mkdir($this->constructUrl($path));
}
public function rmdir($path) {
$this->init();
if($this->file_exists($path)) {
$succes = rmdir($this->constructUrl($path));
$success = rmdir($this->constructUrl($path));
clearstatcache();
return $succes;
return $success;
} else {
return false;
}
}
public function opendir($path) {
$this->init();
return opendir($this->constructUrl($path));
}
public function filetype($path) {
$this->init();
return filetype($this->constructUrl($path));
}
@@ -60,24 +42,20 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
}
public function file_exists($path) {
$this->init();
return file_exists($this->constructUrl($path));
}
public function unlink($path) {
$this->init();
$succes = unlink($this->constructUrl($path));
$success = unlink($this->constructUrl($path));
clearstatcache();
return $succes;
return $success;
}
public function fopen($path, $mode) {
$this->init();
return fopen($this->constructUrl($path), $mode);
}
public function touch($path, $mtime=null) {
$this->init();
if(is_null($mtime)) {
$fh = $this->fopen($path, 'a');
fwrite($fh, '');
@@ -88,22 +66,18 @@ abstract class StreamWrapper extends \OC\Files\Storage\Common{
}
public function getFile($path, $target) {
$this->init();
return copy($this->constructUrl($path), $target);
}
public function uploadFile($path, $target) {
$this->init();
return copy($path, $this->constructUrl($target));
}
public function rename($path1, $path2) {
$this->init();
return rename($this->constructUrl($path1), $this->constructUrl($path2));
}
public function stat($path) {
$this->init();
return stat($this->constructUrl($path));
}
-2
View File
@@ -73,8 +73,6 @@ class DAV extends \OC\Files\Storage\Common{
$this->client->addTrustedCertificates($certPath);
}
}
//create the root folder if necessary
$this->mkdir('');
}
public function getId(){
+1
View File
@@ -32,6 +32,7 @@ $tmpl->assign('mounts', OC_Mount_Config::getSystemMountPoints());
$tmpl->assign('backends', OC_Mount_Config::getBackends());
$tmpl->assign('groups', OC_Group::getGroups());
$tmpl->assign('users', OCP\User::getUsers());
$tmpl->assign('userDisplayNames', OC_User::getDisplayNames());
$tmpl->assign('dependencies', OC_Mount_Config::checkDependencies());
$tmpl->assign('allowUserMounting', OCP\Config::getAppValue('files_external', 'allow_user_mounting', 'yes'));
return $tmpl->fetchPage();
+1 -1
View File
@@ -102,7 +102,7 @@
<option value="<?php p($user); ?>"
<?php if (isset($mount['applicable']['users']) && in_array($user, $mount['applicable']['users'])): ?>
selected="selected"
<?php endif; ?>><?php p($user); ?></option>
<?php endif; ?>><?php p($_['userDisplayNames'][$user]); ?></option>
<?php endforeach; ?>
</optgroup>
</select>
+1
View File
@@ -19,6 +19,7 @@ class FTP extends Storage {
}
$this->config['ftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
$this->instance = new \OC\Files\Storage\FTP($this->config['ftp']);
$this->instance->mkdir('/');
}
public function tearDown() {
+2 -1
View File
@@ -33,6 +33,7 @@ class SFTP extends Storage {
}
$this->config['sftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
$this->instance = new \OC\Files\Storage\SFTP($this->config['sftp']);
$this->instance->mkdir('/');
}
public function tearDown() {
@@ -40,4 +41,4 @@ class SFTP extends Storage {
$this->instance->rmdir('/');
}
}
}
}
+1
View File
@@ -20,6 +20,7 @@ class SMB extends Storage {
}
$this->config['smb']['root'] .= $id; //make sure we have an new empty folder to work in
$this->instance = new \OC\Files\Storage\SMB($this->config['smb']);
$this->instance->mkdir('/');
}
public function tearDown() {
+1
View File
@@ -20,6 +20,7 @@ class DAV extends Storage {
}
$this->config['webdav']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
$this->instance = new \OC\Files\Storage\DAV($this->config['webdav']);
$this->instance->mkdir('/');
}
public function tearDown() {
+1 -1
View File
@@ -12,7 +12,7 @@ OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file');
OCP\Util::addScript('files_sharing', 'share');
\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Shared_Updater', 'writeHook');
\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OC_Hook::connect('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
\OC_Hook::connect('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'shareHook');
\OC_Hook::connect('OCP\Share', 'pre_unshare', '\OC\Files\Cache\Shared_Updater', 'shareHook');
+3 -5
View File
@@ -182,12 +182,10 @@ class Shared_Cache extends Cache {
*/
public function move($source, $target) {
if ($cache = $this->getSourceCache($source)) {
$targetPath = \OC_Share_Backend_File::getSourcePath(dirname($target));
if ($targetPath) {
$targetPath .= '/' . basename($target);
$cache->move($this->files[$source], $targetPath);
$file = \OC_Share_Backend_File::getSource($target);
if ($file && isset($file['path'])) {
$cache->move($this->files[$source], $file['path']);
}
}
}
+13 -9
View File
@@ -38,10 +38,12 @@ class Shared_Updater {
while (!empty($users)) {
$reshareUsers = array();
foreach ($users as $user) {
$etag = \OC\Files\Filesystem::getETag('');
\OCP\Config::setUserValue($user, 'files_sharing', 'etag', $etag);
// Look for reshares
$reshareUsers = array_merge($reshareUsers, \OCP\Share::getUsersItemShared('file', $info['fileid'], $user, true));
if ( $user !== $uidOwner ) {
$etag = \OC\Files\Filesystem::getETag('');
\OCP\Config::setUserValue($user, 'files_sharing', 'etag', $etag);
// Look for reshares
$reshareUsers = array_merge($reshareUsers, \OCP\Share::getUsersItemShared('file', $info['fileid'], $user, true));
}
}
$users = $reshareUsers;
}
@@ -66,8 +68,8 @@ class Shared_Updater {
* @param array $params
*/
static public function renameHook($params) {
self::correctFolders($params['oldpath']);
self::correctFolders($params['newpath']);
self::correctFolders(pathinfo($params['oldpath'], PATHINFO_DIRNAME));
}
/**
@@ -88,10 +90,12 @@ class Shared_Updater {
while (!empty($users)) {
$reshareUsers = array();
foreach ($users as $user) {
$etag = \OC\Files\Filesystem::getETag('');
\OCP\Config::setUserValue($user, 'files_sharing', 'etag', $etag);
// Look for reshares
$reshareUsers = array_merge($reshareUsers, \OCP\Share::getUsersItemShared('file', $params['fileSource'], $user, true));
if ($user !== $uidOwner) {
$etag = \OC\Files\Filesystem::getETag('');
\OCP\Config::setUserValue($user, 'files_sharing', 'etag', $etag);
// Look for reshares
$reshareUsers = array_merge($reshareUsers, \OCP\Share::getUsersItemShared('file', $params['fileSource'], $user, true));
}
}
$users = $reshareUsers;
}
+7 -1
View File
@@ -113,7 +113,13 @@ if (isset($path)) {
// Download the file
if (isset($_GET['download'])) {
if (isset($_GET['files'])) { // download selected files
OC_Files::get($path, $_GET['files'], $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
$files = urldecode($_GET['files']);
$files_list = json_decode($files);
// in case we get only a single file
if ($files_list === NULL ) {
$files_list = array($files);
}
OC_Files::get($path, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
} else {
OC_Files::get($dir, $file, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
}
+3 -1
View File
@@ -3,5 +3,7 @@
OC::$CLASSPATH['OCA\Files_Trashbin\Hooks'] = 'files_trashbin/lib/hooks.php';
OC::$CLASSPATH['OCA\Files_Trashbin\Trashbin'] = 'files_trashbin/lib/trash.php';
//Listen to delete file signal
OCP\Util::connectHook('OC_Filesystem', 'delete', "OCA\Files_Trashbin\Hooks", "remove_hook");
//Listen to delete user signal
OCP\Util::connectHook('OC_User', 'pre_deleteUser', "OCA\Files_Trashbin\Hooks", "deleteUser_hook");
+14 -1
View File
@@ -2,7 +2,20 @@
<info>
<id>files_trashbin</id>
<name>Deleted files</name>
<description>Keep a copy of deleted files so that they can be restored if needed</description>
<description>
ownCloud keeps a copy of your deleted files in case you need them again.
To make sure that the user doesn't run out of memory the deleted files app
manages the size of the deleted files for the user. By default deleted files
stay in the trash bin for 180 days. ownCloud checks the age of the files
every time a new files gets moved to the deleted files and remove all files
older than 180 days. The user can adjust this value in the config.php by
setting the "trashbin_retention_obligation" value.
Beside that the delted files app take care to never use more that 50% of
your currently available free space. If your deleted files exceed this limit
ownCloud deletes the oldest versions until it meets the memory usage limit
again.
</description>
<licence>AGPL</licence>
<author>Bjoern Schiessle</author>
<shipped>true</shipped>
+5 -35
View File
@@ -1,40 +1,10 @@
<?php
$installedVersion=OCP\Config::getAppValue('files_trashbin', 'installed_version');
// move versions to new directory
if (version_compare($installedVersion, '0.2', '<')) {
$datadir = \OCP\Config::getSystemValue('datadirectory').'/';
$users = \OCP\User::getUsers();
foreach ($users as $user) {
//create new folders
@mkdir($datadir.$user.'/files_trashbin/files');
@mkdir($datadir.$user.'/files_trashbin/versions');
@mkdir($datadir.$user.'/files_trashbin/keyfiles');
// move files to the new folders
if ($handle = opendir($datadir.$user.'/files_trashbin')) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".." && $file != 'files' && $file != 'versions' && $file != 'keyfiles') {
rename($datadir.$user.'/files_trashbin/'.$file,
$datadir.$user.'/files_trashbin/files/'.$file);
}
}
closedir($handle);
}
// move versions to the new folder
if ($handle = opendir($datadir.$user.'/versions_trashbin')) {
while (false !== ($file = readdir($handle))) {
rename($datadir.$user.'/versions_trashbin/'.$file,
$datadir.$user.'/files_trashbin/versions/'.$file);
}
closedir($handle);
}
@rmdir($datadir.$user.'/versions_trashbin');
}
if (version_compare($installedVersion, '0.4', '<')) {
//size of the trash bin could be incorrect, remove it for all users to
//enforce a recalculation during next usage.
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trashsize`');
$result = $query->execute();
}
+1 -1
View File
@@ -1 +1 @@
0.3
0.4
+2 -3
View File
@@ -21,8 +21,7 @@ $dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
$result = array();
if ($dir) {
$dirlisting = true;
$fullpath = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($dir);
$dirContent = opendir($fullpath);
$dirContent = $view->opendir($dir);
$i = 0;
while($entryName = readdir($dirContent)) {
if ( $entryName != '.' && $entryName != '..' ) {
@@ -43,7 +42,7 @@ if ($dir) {
} else {
$dirlisting = false;
$query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE user = ?');
$query = \OC_DB::prepare('SELECT `id`,`location`,`timestamp`,`type`,`mime` FROM `*PREFIX*files_trash` WHERE `user` = ?');
$result = $query->execute(array($user))->fetchAll();
}
+14
View File
@@ -42,4 +42,18 @@ class Hooks {
Trashbin::move2trash($path);
}
}
/**
* @brief clean up user specific settings if user gets deleted
* @param array with uid
*
* This function is connected to the pre_deleteUser signal of OC_Users
* to remove the used space for the trash bin stored in the database
*/
public static function deleteUser_hook($params) {
if( \OCP\App::isEnabled('files_trashbin') ) {
$uid = $params['uid'];
Trashbin::deleteUser($uid);
}
}
}
+77 -37
View File
@@ -61,10 +61,12 @@ class Trashbin {
if ( $trashbinSize === false || $trashbinSize < 0 ) {
$trashbinSize = self::calculateSize(new \OC\Files\View('/'. $user.'/files_trashbin'));
}
$trashbinSize += self::copy_recursive($file_path, 'files_trashbin/files/'.$deleted.'.d'.$timestamp, $view);
$sizeOfAddedFiles = self::copy_recursive($file_path, 'files_trashbin/files/'.$deleted.'.d'.$timestamp, $view);
if ( $view->file_exists('files_trashbin/files/'.$deleted.'.d'.$timestamp) ) {
$query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)");
$trashbinSize += $sizeOfAddedFiles;
$query = \OC_DB::prepare("INSERT INTO `*PREFIX*files_trash` (`id`,`timestamp`,`location`,`type`,`mime`,`user`) VALUES (?,?,?,?,?,?)");
$result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user));
if ( !$result ) { // if file couldn't be added to the database than also don't store it in the trash bin.
$view->deleteAll('files_trashbin/files/'.$deleted.'.d'.$timestamp);
@@ -102,27 +104,8 @@ class Trashbin {
} else {
\OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin', \OC_log::ERROR);
}
// get available disk space for user
$quota = \OC_Preferences::getValue($user, 'files', 'quota');
if ( $quota === null || $quota === 'default') {
$quota = \OC_Appconfig::getValue('files', 'default_quota');
}
if ( $quota === null || $quota === 'none' ) {
$quota = \OC\Files\Filesystem::free_space('/') / count(\OCP\User::getUsers());
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
// calculate available space for trash bin
$rootInfo = $view->getFileInfo('/files');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions
} else {
$availableSpace = $free-$trashbinSize;
}
$trashbinSize -= self::expire($availableSpace);
$trashbinSize -= self::expire($trashbinSize);
self::setTrashbinSize($user, $trashbinSize);
@@ -144,8 +127,8 @@ class Trashbin {
$trashbinSize = self::calculateSize(new \OC\Files\View('/'. $user.'/files_trashbin'));
}
if ( $timestamp ) {
$query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash'
.' WHERE user=? AND id=? AND timestamp=?');
$query = \OC_DB::prepare('SELECT `location`,`type` FROM `*PREFIX*files_trash`'
.' WHERE `user`=? AND `id`=? AND `timestamp`=?');
$result = $query->execute(array($user,$filename,$timestamp))->fetchAll();
if ( count($result) != 1 ) {
\OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
@@ -228,7 +211,7 @@ class Trashbin {
}
if ( $timestamp ) {
$query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=? AND `id`=? AND `timestamp`=?');
$query->execute(array($user,$filename,$timestamp));
}
@@ -259,7 +242,7 @@ class Trashbin {
}
if ( $timestamp ) {
$query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=? AND `id`=? AND `timestamp`=?');
$query->execute(array($user,$filename,$timestamp));
$file = $filename.'.d'.$timestamp;
} else {
@@ -335,16 +318,71 @@ class Trashbin {
}
/**
* clean up the trash bin
* @param max. available disk space for trashbin
* @brief deletes used space for trash bin in db if user was deleted
*
* @param type $uid id of deleted user
* @return result of db delete operation
*/
private static function expire($availableSpace) {
public static function deleteUser($uid) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trash` WHERE `user`=?');
$result = $query->execute(array($uid));
if ($result) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_trashsize` WHERE `user`=?');
return $query->execute(array($uid));
}
return false;
}
/**
* calculate remaining free space for trash bin
*
* @param $trashbinSize current size of the trash bin
* @return available free space for trash bin
*/
private static function calculateFreeSpace($trashbinSize) {
$softQuota = true;
$user = \OCP\User::getUser();
$quota = \OC_Preferences::getValue($user, 'files', 'quota');
$view = new \OC\Files\View('/'.$user);
if ( $quota === null || $quota === 'default') {
$quota = \OC_Appconfig::getValue('files', 'default_quota');
}
if ( $quota === null || $quota === 'none' ) {
$quota = \OC\Files\Filesystem::free_space('/');
$softQuota = false;
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
// calculate available space for trash bin
// subtract size of files and current trash bin size from quota
if ($softQuota) {
$rootInfo = $view->getFileInfo('/files/');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions
} else {
$availableSpace = $free-$trashbinSize;
}
} else {
$availableSpace = $quota;
}
return $availableSpace;
}
/**
* clean up the trash bin
* @param current size of the trash bin
*/
private static function expire($trashbinSize) {
$user = \OCP\User::getUser();
$view = new \OC\Files\View('/'.$user);
$availableSpace = self::calculateFreeSpace($trashbinSize);
$size = 0;
$query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?');
$query = \OC_DB::prepare('SELECT `location`,`type`,`id`,`timestamp` FROM `*PREFIX*files_trash` WHERE `user`=?');
$result = $query->execute(array($user))->fetchAll();
$retention_obligation = \OC_Config::getValue('trashbin_retention_obligation',
@@ -357,18 +395,20 @@ class Trashbin {
$filename = $r['id'];
if ( $r['timestamp'] < $limit ) {
$size += self::delete($filename, $timestamp);
\OC_Log::write('files_trashbin', 'remove "'.$filename.'" fom trash bin because it is older than '.$retention_obligation, \OC_log::INFO);
}
}
$availableSpace = $availableSpace + $size;
// if size limit for trash bin reached, delete oldest files in trash bin
if ($availableSpace < 0) {
$query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash'
.' WHERE user=? ORDER BY timestamp ASC');
$query = \OC_DB::prepare('SELECT `location`,`type`,`id`,`timestamp` FROM `*PREFIX*files_trash`'
.' WHERE `user`=? ORDER BY `timestamp` ASC');
$result = $query->execute(array($user))->fetchAll();
$length = count($result);
$i = 0;
while ( $i < $length && $availableSpace < 0 ) {
$tmp = self::delete($result[$i]['id'], $result[$i]['timestamp']);
\OC_Log::write('files_trashbin', 'remove "'.$result[$i]['id'].'" ('.$tmp.'B) to meet the limit of trash bin size (50% of available quota)', \OC_log::INFO);
$availableSpace += $tmp;
$size += $tmp;
$i++;
@@ -490,7 +530,7 @@ class Trashbin {
* @return mixed trash bin size or false if no trash bin size is stored
*/
private static function getTrashbinSize($user) {
$query = \OC_DB::prepare('SELECT size FROM *PREFIX*files_trashsize WHERE user=?');
$query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*files_trashsize` WHERE `user`=?');
$result = $query->execute(array($user))->fetchAll();
if ($result) {
@@ -507,9 +547,9 @@ class Trashbin {
*/
private static function setTrashbinSize($user, $size) {
if ( self::getTrashbinSize($user) === false) {
$query = \OC_DB::prepare('INSERT INTO *PREFIX*files_trashsize (size, user) VALUES (?, ?)');
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*files_trashsize` (`size`, `user`) VALUES (?, ?)');
}else {
$query = \OC_DB::prepare('UPDATE *PREFIX*files_trashsize SET size=? WHERE user=?');
$query = \OC_DB::prepare('UPDATE `*PREFIX*files_trashsize` SET `size`=? WHERE `user`=?');
}
$query->execute(array($size, $user));
}
+2
View File
@@ -12,3 +12,5 @@ OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "wri
// Listen to delete and rename signals
OCP\Util::connectHook('OC_Filesystem', 'post_delete', "OCA\Files_Versions\Hooks", "remove_hook");
OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
//Listen to delete user signal
OCP\Util::connectHook('OC_User', 'pre_deleteUser', "OCA\Files_Versions\Hooks", "deleteUser_hook");
+19 -1
View File
@@ -6,7 +6,25 @@
<author>Frank Karlitschek</author>
<require>4.93</require>
<shipped>true</shipped>
<description>Versioning of files</description>
<description>
ownCloud supports simple version control for files. The versioning app
expires old versions automatically to make sure that
the user doesn't run out of space. Following pattern is used to delete
old versions:
For the first 10 seconds ownCloud keeps one version every 2 seconds;
For the first hour ownCloud keeps one version every minute;
For the first 24 hours ownCloud keeps one version every hour;
For the first 30 days ownCloud keeps one version every day;
After the first 30 days ownCloud keeps one version every week.
The versions are adjusted along this pattern every time a new version gets
created.
Beside that the version app takes care to never use more that 50% of the users
currently available free space. If the stored versions exceed this limit
ownCloud deletes the oldest versions until it meets the memory usage limit
again.
</description>
<types>
<filesystem/>
</types>
+14
View File
@@ -63,4 +63,18 @@ class Hooks {
}
}
/**
* @brief clean up user specific settings if user gets deleted
* @param array with uid
*
* This function is connected to the pre_deleteUser signal of OC_Users
* to remove the used space for versions stored in the database
*/
public static function deleteUser_hook($params) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
$uid = $params['uid'];
Storage::deleteUser($uid);
}
}
}
+46 -18
View File
@@ -53,7 +53,7 @@ class Storage {
* @return mixed versions size or false if no versions size is stored
*/
private static function getVersionsSize($user) {
$query = \OC_DB::prepare('SELECT size FROM *PREFIX*files_versions WHERE user=?');
$query = \OC_DB::prepare('SELECT `size` FROM `*PREFIX*files_versions` WHERE `user`=?');
$result = $query->execute(array($user))->fetchAll();
if ($result) {
@@ -70,9 +70,9 @@ class Storage {
*/
private static function setVersionsSize($user, $size) {
if ( self::getVersionsSize($user) === false) {
$query = \OC_DB::prepare('INSERT INTO *PREFIX*files_versions (size, user) VALUES (?, ?)');
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*files_versions` (`size`, `user`) VALUES (?, ?)');
}else {
$query = \OC_DB::prepare('UPDATE *PREFIX*files_versions SET size=? WHERE user=?');
$query = \OC_DB::prepare('UPDATE `*PREFIX*files_versions` SET `size`=? WHERE `user`=?');
}
$query->execute(array($size, $user));
}
@@ -156,11 +156,18 @@ class Storage {
/**
* rename versions of a file
*/
public static function rename($oldpath, $newpath) {
list($uid, $oldpath) = self::getUidAndFilename($oldpath);
list($uidn, $newpath) = self::getUidAndFilename($newpath);
public static function rename($old_path, $new_path) {
list($uid, $oldpath) = self::getUidAndFilename($old_path);
list($uidn, $newpath) = self::getUidAndFilename($new_path);
$versions_view = new \OC\Files\View('/'.$uid .'/files_versions');
$files_view = new \OC\Files\View('/'.$uid .'/files');
// if the file already exists than it was a upload of a existing file
// over the web interface -> store() is the right function we need here
if ($files_view->file_exists($newpath)) {
return self::store($new_path);
}
$abs_newpath = $versions_view->getLocalFile($newpath);
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
@@ -177,11 +184,12 @@ class Storage {
/**
* rollback to an old version of a file.
*/
public static function rollback($filename, $revision) {
public static function rollback($file, $revision) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
list($uid, $filename) = self::getUidAndFilename($file);
$users_view = new \OC\Files\View('/'.$uid);
$files_view = new \OC\Files\View('/'.\OCP\User::getUser().'/files');
$versionCreated = false;
//first create a new version
@@ -192,9 +200,9 @@ class Storage {
}
// rollback
if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
$users_view->touch('files'.$filename, $revision);
Storage::expire($filename);
if( @$users_view->rename('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {
$files_view->touch($file, $revision);
Storage::expire($file);
return true;
}else if ( $versionCreated ) {
@@ -272,6 +280,18 @@ class Storage {
}
/**
* @brief deletes used space for files versions in db if user was deleted
*
* @param type $uid id of deleted user
* @return result of db delete operation
*/
public static function deleteUser($uid) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*files_versions` WHERE `user`=?');
return $query->execute(array($uid));
}
/**
* @brief get the size of all stored versions from a given user
* @param $uid id from the user
@@ -359,12 +379,14 @@ class Storage {
$versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
// get available disk space for user
$softQuota = true;
$quota = \OC_Preferences::getValue($uid, 'files', 'quota');
if ( $quota === null || $quota === 'default') {
$quota = \OC_Appconfig::getValue('files', 'default_quota');
}
if ( $quota === null || $quota === 'none' ) {
$quota = \OC\Files\Filesystem::free_space('/') / count(\OCP\User::getUsers());
$quota = \OC\Files\Filesystem::free_space('/');
$softQuota = false;
} else {
$quota = \OCP\Util::computerFileSize($quota);
}
@@ -378,15 +400,21 @@ class Storage {
}
// calculate available space for version history
$files_view = new \OC\Files\View('/'.$uid.'/files');
$rootInfo = $files_view->getFileInfo('/');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions
// subtract size of files and current versions size from quota
if ($softQuota) {
$files_view = new \OC\Files\View('/'.$uid.'/files');
$rootInfo = $files_view->getFileInfo('/');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $versionsSize; // how much space can be used for versions
} else {
$availableSpace = $free-$versionsSize;
}
} else {
$availableSpace = $free-$versionsSize;
$availableSpace = $quota;
}
// after every 1000s run reduce the number of all versions not only for the current file
$random = rand(0, 1000);
if ($random == 0) {
+10 -1
View File
@@ -139,6 +139,9 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
if(!$this->enabled) {
return array();
}
if(!$this->groupExists($gid)) {
return array();
}
$cachekey = 'usersInGroup-'.$gid.'-'.$search.'-'.$limit.'-'.$offset;
// check for cache of the exact query
$groupUsers = $this->connection->getFromCache($cachekey);
@@ -178,7 +181,7 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
//we got uids, need to get their DNs to 'tranlsate' them to usernames
$filter = $this->combineFilterWithAnd(array(
\OCP\Util::mb_str_replace('%uid', $member,
$this->connection>ldapLoginFilter, 'UTF-8'),
$this->connection->ldapLoginFilter, 'UTF-8'),
$this->getFilterPartForUserSearch($search)
));
$ldap_users = $this->fetchListOfUsers($filter, 'dn');
@@ -214,6 +217,12 @@ class GROUP_LDAP extends lib\Access implements \OCP\GroupInterface {
* @returns array with display names (value) and user ids(key)
*/
public function displayNamesInGroup($gid, $search, $limit, $offset) {
if(!$this->enabled) {
return array();
}
if(!$this->groupExists($gid)) {
return array();
}
$users = $this->usersInGroup($gid, $search, $limit, $offset);
$displayNames = array();
foreach($users as $user) {
+9 -2
View File
@@ -76,8 +76,15 @@ class Group_Proxy extends lib\Proxy implements \OCP\GroupInterface {
if(isset($this->backends[$prefix])) {
$result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
if(!$result) {
//not found here, reset cache to null
$this->writeToCache($cacheKey, null);
//not found here, reset cache to null if group vanished
//because sometimes methods return false with a reason
$groupExists = call_user_func_array(
array($this->backends[$prefix], 'groupExists'),
array($gid)
);
if(!$groupExists) {
$this->writeToCache($cacheKey, null);
}
}
return $result;
}
+8 -5
View File
@@ -62,7 +62,10 @@ abstract class Access {
$dn = $this->DNasBaseParameter($dn);
$rr = @ldap_read($cr, $dn, $filter, array($attr));
if(!is_resource($rr)) {
\OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN '.$dn, \OCP\Util::DEBUG);
if(!empty($attr)) {
//do not throw this message on userExists check, irritates
\OCP\Util::writeLog('user_ldap', 'readAttribute failed for DN '.$dn, \OCP\Util::DEBUG);
}
//in case an error occurs , e.g. object does not exist
return false;
}
@@ -84,7 +87,7 @@ abstract class Access {
for($i=0;$i<$result[$attr]['count'];$i++) {
if($this->resemblesDN($attr)) {
$values[] = $this->sanitizeDN($result[$attr][$i]);
} elseif(strtolower($attr) == 'objectguid') {
} elseif(strtolower($attr) == 'objectguid' || strtolower($attr) == 'guid') {
$values[] = $this->convertObjectGUID2Str($result[$attr][$i]);
} else {
$values[] = $result[$attr][$i];
@@ -314,7 +317,7 @@ abstract class Access {
}
$ldapname = $ldapname[0];
}
$intname = $isUser ? $this->sanitizeUsername($uuid) : $this->sanitizeUsername($ldapname);
$intname = $isUser ? $this->sanitizeUsername($uuid) : $ldapname;
//a new user/group! Add it only if it doesn't conflict with other backend's users or existing groups
//disabling Cache is required to avoid that the new user is cached as not-existing in fooExists check
@@ -895,7 +898,7 @@ abstract class Access {
}
//for now, supported (known) attributes are entryUUID, nsuniqueid, objectGUID
$testAttributes = array('entryuuid', 'nsuniqueid', 'objectguid');
$testAttributes = array('entryuuid', 'nsuniqueid', 'objectguid', 'guid');
foreach($testAttributes as $attribute) {
\OCP\Util::writeLog('user_ldap', 'Testing '.$attribute.' as UUID attr', \OCP\Util::DEBUG);
@@ -1028,7 +1031,7 @@ abstract class Access {
*/
private function setPagedResultCookie($base, $filter, $limit, $offset, $cookie) {
if(!empty($cookie)) {
$cachekey = 'lc' . dechex(crc32($base)) . '-' . dechex(crc32($filter)) . '-' .$limit . '-' . $offset;
$cachekey = 'lc' . crc32($base) . '-' . crc32($filter) . '-' .$limit . '-' . $offset;
$cookie = $this->connection->writeToCache($cachekey, $cookie);
}
}
+3 -2
View File
@@ -212,7 +212,6 @@ class Connection {
*/
private function readConfiguration($force = false) {
if((!$this->configured || $force) && !is_null($this->configID)) {
$defaults = $this->getDefaults();
$v = 'getValue';
$this->config['ldapHost'] = $this->$v('ldap_host');
$this->config['ldapBackupHost'] = $this->$v('ldap_backup_host');
@@ -428,7 +427,9 @@ class Connection {
'No group filter is specified, LDAP group feature will not be used.',
\OCP\Util::INFO);
}
if(!in_array($this->config['ldapUuidAttribute'], array('auto', 'entryuuid', 'nsuniqueid', 'objectguid'))
$uuidAttributes = array(
'auto', 'entryuuid', 'nsuniqueid', 'objectguid', 'guid');
if(!in_array($this->config['ldapUuidAttribute'], $uuidAttributes)
&& (!is_null($this->configID))) {
\OCP\Config::setAppValue($this->configID, $this->configPrefix.'ldap_uuid_attribute', 'auto');
\OCP\Util::writeLog('user_ldap',
+2 -1
View File
@@ -51,7 +51,8 @@ class Helper {
$query = '
SELECT DISTINCT `configkey`
FROM `*PREFIX*appconfig`
WHERE `configkey` LIKE ?
WHERE `appid` = \'user_ldap\'
AND `configkey` LIKE ?
';
if($activeConfigurations) {
$query .= ' AND `configvalue` = \'1\'';
+9
View File
@@ -180,6 +180,11 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
* @return boolean
*/
public function getHome($uid) {
// user Exists check required as it is not done in user proxy!
if(!$this->userExists($uid)) {
return false;
}
$cacheKey = 'getHome'.$uid;
if($this->connection->isCached($cacheKey)) {
return $this->connection->getFromCache($cacheKey);
@@ -217,6 +222,10 @@ class USER_LDAP extends lib\Access implements \OCP\UserInterface {
* @return display name
*/
public function getDisplayName($uid) {
if(!$this->userExists($uid)) {
return false;
}
$cacheKey = 'getDisplayName'.$uid;
if(!is_null($displayName = $this->connection->getFromCache($cacheKey))) {
return $displayName;
+9 -2
View File
@@ -76,8 +76,15 @@ class User_Proxy extends lib\Proxy implements \OCP\UserInterface {
if(isset($this->backends[$prefix])) {
$result = call_user_func_array(array($this->backends[$prefix], $method), $parameters);
if(!$result) {
//not found here, reset cache to null
$this->writeToCache($cacheKey, null);
//not found here, reset cache to null if user vanished
//because sometimes methods return false with a reason
$userExists = call_user_func_array(
array($this->backends[$prefix], 'userExists'),
array($uid)
);
if(!$userExists) {
$this->writeToCache($cacheKey, null);
}
}
return $result;
}
+5 -1
View File
@@ -136,8 +136,12 @@ $CONFIG = array(
"remember_login_cookie_lifetime" => 60*60*24*15,
/* Custom CSP policy, changing this will overwrite the standard policy */
"custom_csp_policy" => "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src *; img-src *; font-src 'self' data:",
"custom_csp_policy" => "default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src *; img-src *; font-src 'self' data:; media-src *",
/* Enable/disable X-Frame-Restriction */
/* HIGH SECURITY RISK IF DISABLED*/
"xframe_restriction" => true,
/* The directory where the user data is stored, default to data in the owncloud
* directory. The sqlite database is also stored here, when sqlite is used.
*/

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