Commit Graph

351 Commits

Author SHA1 Message Date
Thomas Müller 13ce6d0f1c Merge pull request #21544 from owncloud/trashbin-permissions
set etag and permission fields for trashbin entries
2016-01-15 13:22:54 +01:00
Thomas Müller 682821c71e Happy new year! 2016-01-12 15:02:18 +01:00
Robin Appelman 8890c88c11 handle not found in trash hook 2016-01-11 11:40:58 +01:00
Robin Appelman 300eb54c87 de-deplicate getUidAndFilename 2016-01-11 11:40:58 +01:00
Robin Appelman cb3d3ebf50 set etag and permission fields for trashbin entries 2016-01-08 13:07:23 +01:00
Morris Jobke ecdf88e41b Use proper public API for OC_Helper::getFileNameMimeType 2015-12-17 17:07:48 +01:00
Robin Appelman 415cf92784 Fix thrashbin wrapper when no user is loggedin 2015-12-11 14:27:37 +01:00
Scrutinizer Auto-Fixer 0f1be1b601 Scrutinizer Auto-Fixes
This commit consists of patches automatically generated for this project on https://scrutinizer-ci.com
2015-12-07 20:08:20 +00:00
Morris Jobke 574d0d08bb Cleanup trashbin expire code
* requested by @schiesbn
2015-11-30 11:54:03 +01:00
Morris Jobke 7aa07bcf1c Deduplicate queued trashbin expire jobs
* fixes #20425
* this removes the argument trashbin size from the expire job - it is now
  calculated in the expire job
* the queue now detects properly that the job is already queue and doesn't
  add it again
2015-11-27 14:40:31 +01:00
Robin Appelman b025f07fb7 Make Cache\Updater per storage 2015-11-25 14:16:00 +01:00
Lukas Reschke 8f09d5b67c Update license headers 2015-10-26 14:04:01 +01:00
Lukas Reschke 13e817e901 Throw exception on `getPath` if file does not exist
Currently the `getPath` methods returned `NULL` in case when a file with the specified ID does not exist. This however mandates that developers are checking for the `NULL` case and if they do not the door for bugs with all kind of impact is widely opened.

This is especially harmful if used in context with Views where the final result is limited based on the result of `getPath`, if `getPath` returns `NULL` PHP type juggles this to an empty string resulting in all possible kind of bugs.

While one could argue that this is a misusage of the API the fact is that it is very often misused and an exception will trigger an immediate stop of execution as well as log this behaviour and show a pretty error page.

I also adjusted some usages where I believe that we need to catch these errors, in most cases this is though simply an error that should hard-fail.
2015-10-25 17:58:21 +01:00
Robin Appelman 2e8232e803 Fix trashbin handling of unknown/unlimited free space 2015-10-16 21:41:51 +02:00
Morris Jobke b945d71384 update licence headers via script 2015-10-05 21:15:52 +02:00
Bjoern Schiessle b940287ffa first copy to owner and then move to current user because the encryption
wrapper always expect to work on the owner storage
2015-10-01 17:09:17 +02:00
Morris Jobke 1051a3c6f5 Change small thumbnails to 32 px
* fixes #16913
* fixes issues in IE8 where the thumbnail is too big
2015-09-30 10:49:48 +02:00
Martin 491250320a Replaces if ($file === '.' || $file === '..') by if(\OC\Files\Filesystem::isIgnoredDir($file)). Eases to find where this operation is used. 2015-09-22 17:53:15 +02:00
Bjoern Schiessle a174ba5a36 make sure to add the correct file size to the file info, otherwise we will not show the preview for every filetype 2015-09-21 12:41:19 +02:00
Victor Dubiniuk b75a1b40a2 Log deleted files 2015-09-16 22:29:54 +03:00
Lukas Reschke 47caac10f5 Add PHPDoc 2015-09-16 17:37:21 +03:00
Victor Dubiniuk 764726ce01 Updates according to review 2015-09-16 17:37:21 +03:00
Victor Dubiniuk 8ac3d5e36c Add expiration cronjob 2015-09-16 17:37:21 +03:00
Victor Dubiniuk 33c29d3da7 Migrate settings 2015-08-10 23:54:44 +03:00
Victor Dubiniuk 4ef2615788 Enhance trashbin expiration settings 2015-08-10 20:40:43 +02:00
Roeland Jago Douma e84cffc063 Moved core apps to the capabilities manager
* Files
* Files_Sharing
* Files_Trashbin
* Files_Versions
2015-08-10 10:45:16 +02:00
Roeland Jago Douma bc91c5c2de Set proper mimetype for directories 2015-08-05 13:54:09 +02:00
Bjoern Schiessle db65eeb580 only move real files to the trash bin 2015-07-08 11:32:06 +02:00
Thomas Müller d3ac73c0c9 Remove OC_Log 2015-07-03 18:00:16 +02:00
Morris Jobke 044d2ece07 Merge pull request #15506 from rullzer/core_apps_oc_log2ocp_util
Move core apps from OC_Log::write to OCP\Util
2015-07-01 08:53:16 +02:00
Morris Jobke f63915d0c8 update license headers and authors 2015-06-25 14:13:49 +02:00
Robin Appelman f02e110aea explain pre-hook scan 2015-06-15 15:43:19 +02:00
Robin Appelman 5efbab4ab8 ensure we dont have to scan a file in the trash wrapper 2015-06-15 14:32:29 +02:00
Vincent Petry 61356b5560 Keep versions when deleting as recipient
The original owner could not be resolved because the original file was
already deleted, so no versions were retained.

This fix passes the owner and path to retainVersions() since it was
already resolved before the file deletion. This reactivates the versions
logic and creates a copy of the versions in each trashbin.
2015-06-02 17:13:00 +02:00
Björn Schießle 9366dde875 Merge pull request #15985 from owncloud/hotfix/fix-encryption-references
[enc2] fix references to legacy encryption app name
2015-05-26 17:28:27 +02:00
Robin Appelman 733784ae41 cleanup move/copy logic in trash 2015-05-19 14:22:09 +02:00
Robin Appelman 89959a856c fix target path for move 2015-05-18 17:16:13 +02:00
Robin Appelman a0854b36f0 update cache after move to trash 2015-05-18 17:16:13 +02:00
Robin Appelman b70e1ffc6d dont go trough the view when moving to trash 2015-05-18 17:16:12 +02:00
Clark Tomlinson 7d2666699b removing encryption preview check 2015-05-18 09:47:46 -04:00
Clark Tomlinson d557519746 removing deletion of encryption keys
this will be handled in the wrapper now
2015-05-18 09:47:46 -04:00
Clark Tomlinson a0c6c01137 fix references to legacy encryption app name 2015-05-18 09:45:41 -04:00
Roeland Jago Douma 7a8072e958 Move core apps from OC_Log::write to OCP\Util 2015-05-18 10:57:52 +02:00
Vincent Petry f86699cd48 Fix restoring files from trash with unique name
When restoring a file, a unique name needs to be generated if a file
with the same name already exists.

Also fixed the restore() method to return false if the file to restore
does not exist.

Added unit tests to cover restore cases.
2015-05-15 12:42:27 +02:00
Vincent Petry beb6a38d85 Added rmdir to trashbin storage wrapper
This makes sure that folders are moved to trash when deleted with
rmdir() instead of unlink().

This happens for example when deleting a folder over WebDAV.
The web UI uses unlink() so it wasn't affected.
2015-05-12 11:09:02 +02:00
Vincent Petry ffc796edcb Do not trash part files, delete directly 2015-04-21 18:28:15 +02:00
Thomas Müller 54a3bdf1c5 fixing unit test execution related to trashbin 2015-04-07 13:30:31 +02:00
Bjoern Schiessle 5ea94b7c45 add priority to trashbin storage wrapper so that he is always on top 2015-04-07 13:30:30 +02:00
Thomas Müller 3458b5ab4c Remove old encryption left overs from trashbin 2015-04-07 13:30:29 +02:00
Thomas Müller 1b42b492dc kill OC_FileProxy 💥 2015-04-07 13:30:28 +02:00
Robin Appelman 3cb53b7756 setup storage wrappers before setting up the filesystem 2015-04-01 17:12:06 +02:00
Roeland Jago Douma 2b81d0f237 Move core apps from private to public functions
Apps still use OC_Helper and OC_Util functions even when public ones are
already available. Sometimes the public one is even used in the same
file.
2015-04-01 12:06:04 +02:00
Morris Jobke e8109f0bc3 Merge pull request #13802 from owncloud/share-partfilepermissions
Fix share permission checks
2015-03-26 22:01:05 +01:00
Jenkins for ownCloud b585d87d9d Update license headers 2015-03-26 11:44:36 +01:00
Vincent Petry f8f543945f Recreate trashbin folder after full deletion 2015-03-24 23:02:14 +01:00
Vincent Petry a9e6eba018 Reenable trashbin after failed rename
After a failed rename, the post_rename hook is not called.
This quickfix makes sure the trashbin storage logic is reenabled
also after a failed rename.
2015-03-18 19:56:31 +01:00
Thomas Müller bbaf97ca43 Merge pull request #14644 from owncloud/trash-expire-command
Expire files from the trash in the background
2015-03-16 10:04:05 +01:00
Thomas Müller 4ffca58bc4 don't rely on \OCP\User::getUser() - it is not set properly in case of async operations 2015-03-10 11:47:52 +01:00
Robin Appelman c80522ed63 Expire files from the trash in the background 2015-03-02 15:25:50 +01:00
Vincent Petry 7432c73f5c Only rescan versions once in trashbin
Whenever versions need to be rescanned, only do it once per PHP request.
Happens whenever multiple files need to be expired.
2015-03-02 12:59:38 +01:00
Morris Jobke 06aef4e8b1 Revert "Updating license headers"
This reverts commit 6a1a4880f0.
2015-02-26 11:37:37 +01:00
Jenkins for ownCloud 6a1a4880f0 Updating license headers 2015-02-23 12:13:59 +01:00
Lukas Reschke 012d06e8a2 Merge pull request #13797 from owncloud/fix_move_del_of_remote_shares
make sure that we get the correct user from the path
2015-01-31 08:52:07 +01:00
Bjoern Schiessle 9ef96e4dd5 no need to initialize the same view twice 2015-01-30 14:39:31 +01:00
Robin Appelman a59612752e Fix trash error when deleting files with the same name at the same time (happens in unit tests) 2015-01-28 15:16:55 +01:00
Robin Appelman ce0aa02aac Dont do a cache rename if we cant delete the source file 2015-01-29 15:52:40 +01:00
Robin Appelman 215388f4e0 Make sure we delete the file when doing a cross storage trashbin move 2015-01-29 15:40:01 +01:00
Robin Appelman d4c4e2a322 Detect failed deletes in the trashbin 2015-01-29 15:39:58 +01:00
Vincent Petry 02b9bad81b Fix bogus deletion on copy + unlink through rename
Cross-storage rename would cause copy + unlink. That unlink operation
must not trigger the trashbin.
2015-01-26 12:22:22 +01:00
Robin Appelman 87a1b2bdc4 Preserve mtime when doing cross storage move 2015-01-23 15:11:27 +01:00
Robin Appelman 91f3952ac1 Only move files from the current user to the trashbin 2015-01-23 14:19:36 +01:00
Vincent Petry 67f1534e0f Call final unlink in trash wrapper's storage
In the case of cross-storage delete, the files are copied to the trash,
then deleted. The final delete on the source storage would still reach
the trash wrapper.

This fix makes forwards that second call to the wrapped storage to make
the final delete work.

It fixes the issue with remote shares, local shares and external
storage.

Also, it uses a new function "renameRecursive" that renames the files
and preserves the mtimes (like "copy_recursive" did in the past))
2015-01-23 12:20:54 +01:00
Bjoern Schiessle 15ae6b47ed replace hook with storage wrapper 2015-01-19 09:16:15 +01:00
Morris Jobke 5352b4b2b8 Merge pull request #10292 from owncloud/external-share-delete
Fix trashbin when deleting a file over an external share
2014-12-23 11:21:06 +01:00
Morris Jobke 75e8b39826 Merge pull request #12879 from owncloud/mountconfig
Add mount specific options
2014-12-18 23:38:14 +01:00
Robin Appelman fd85424742 Add getMountPoint to FileInfo 2014-12-17 14:03:50 +01:00
Morris Jobke d41082f4d6 first step to drop \OCP\Config:: in favour of IConfig 2014-12-17 11:12:37 +01:00
Joas Schilling 78a307995c Fix namespace of Files_Encryption outside of the app 2014-12-09 09:47:26 +01:00
Morris Jobke 0d4f0ab871 reduce OC_Preferences, OC_Config and \OCP\Config usage
* files_encryption
* files_versions
* files_trashbin
* tests
* status.php
* core
* server container
2014-12-08 22:42:37 +01:00
Morris Jobke 3fdb1937a3 Merge pull request #12382 from owncloud/enc_reorganize_folders2
[encryption] reorganize folder structure (second try to make Jenkins happy)
2014-12-03 16:08:40 +01:00
Joas Schilling 1bd018a70c Autoload exception from files_trashbin 2014-12-02 17:26:42 +01:00
Bjoern Schiessle fd86d76f98 new folder structure for keys
all keys are now in files_encryption/key/path_to_file/filename/
share keys are named: user.shareKey
file key is named: fileKey
2014-11-26 10:57:47 +01:00
Joas Schilling 2c39aec8cb Replace deprecated constant with new class constant 2014-11-25 16:30:21 +01:00
Lukas Reschke 61641293f4 Only show undelete capability if files_trashbin is enabled
Fixes the OCS capability API at /ocs/v1.php/cloud/capabilities
2014-11-18 23:06:39 +01:00
Vincent Petry 97a51c46ed Only rescan trash folder when checking deleted versions
This fix prevents the file scanner to rescan the WHOLE storage and reset
the etags by mistake.
2014-11-04 12:29:42 +01:00
Lukas Reschke b3a04840b5 Add type hinting to functions
It's only reasonable to have proper type hinting here which might even help us to catch bugs.
2014-10-24 14:13:40 +02:00
Robin Appelman c71deea0d5 Fix SPACE_UNKNOWN constant 2014-10-16 12:26:26 +02:00
Jörn Friedrich Dreyer 0254a3c406 make trashbin compatible with objectstore, replace glob with search in cache, make unknown free space work like unlimited free space 2014-10-16 10:15:43 +02:00
Bjoern Schiessle 5b5e9d148e check if I can create a file at the location 2014-10-08 10:56:06 +02:00
Vincent Petry 75593f87d5 Merge pull request #11137 from owncloud/enc-pregfix
Fix share key pattern matching
2014-09-23 12:36:34 +02:00
Vincent Petry 1e631754d7 Fix share key finding algorithm in various cases
Instead of inaccurate pattern matching, use the list of users who we
know have access to the file to build the list of share keys.

This covers the following cases:

- Move/copy files into a subfolder within a share
- Unsharing from a user
- Deleting files directlry / moving share keys to trashbin
2014-09-23 12:33:07 +02:00
Vincent Petry 8aca127e52 Added extra check to avoid deleting key folders
Whenever a delete operation is called twice in a row, it could happen
that the first call already deleted the file.

The second call would return an empty $ownerPath because the file does
not exist. That empty $ownerPath would run the key deletion operation on
the wrong path.

This fix adds checks in many places to make sure we don't use $ownerPath
when it's empty or null.
2014-09-19 19:01:02 +02:00
Lukas Reschke ba5d3fb96b Merge pull request #11081 from owncloud/trash_fix_expire
also expire file if timestamp = limit, happens if trashbin_retention_obl...
2014-09-16 13:58:12 +02:00
Bjoern Schiessle f23116ce50 also expire file if timestamp = limit, happens if trashbin_retention_obligation is set to zero 2014-09-15 13:00:04 +02:00
Robin McCorkell 99d41bec5d Show original path information in trashbin and sharing views
Path will only be shown if in subdirectory, not in root.
2014-09-11 15:45:42 +01:00
Robin Appelman d0266c0bf8 Use public api for getting l10n 2014-08-31 10:08:22 +02:00
Robin Appelman 07d5725de2 Fix trashbin when deleting a file over an external share 2014-08-08 15:48:59 +02:00
Bjoern Schiessle 40fe1275de throw exception if file is to large for trash bin 2014-07-15 13:56:02 +02:00
Morris Jobke 1973fdb11d Merge pull request #9093 from owncloud/remove_unused_code
remove unused code
2014-06-19 01:17:36 +02:00
Bjoern Schiessle 05cd150fd2 add additional tests for the trash bin 2014-06-18 14:41:16 +02:00
Bjoern Schiessle e06fa200b3 make sure that we always use the right user 2014-06-18 14:41:16 +02:00
Bjoern Schiessle e20bb71a42 remove unused code 2014-06-18 13:26:42 +02:00
Bjoern Schiessle b486f48fbc fix trash bin expire operation and add unit tests 2014-06-17 22:36:30 +02:00
Thomas Müller 6fcd135d0e table files_trashsizes was still used in some locations -> removed 2014-06-05 10:44:32 +02:00
Thomas Müller a2db53b928 Merge pull request #8471 from owncloud/versioning_no_longer_track_the_size
[versioning] let the file cache track the size of the versions
2014-06-04 18:19:48 +02:00
Thomas Müller 9f3fcf036c fixing typo 2014-06-04 09:36:27 +02:00
Bjoern Schiessle 05cf34ea1f get files in trash from file cache 2014-06-03 16:45:11 +02:00
Bjoern Schiessle a7f6a051ad return size '0' if the trashbin folder doesn't exists yet 2014-06-02 18:56:04 +02:00
Morris Jobke dc36d30953 Remove all occurences of @brief and @returns from PHPDoc
* test case added to avoid adding them later
2014-05-19 17:50:53 +02:00
Robin McCorkell 6930ae22e4 Fix more missing or broken PHPDoc 2014-05-16 22:21:57 +01:00
Robin McCorkell c4f1de63a8 Fix PHPDoc in /apps 2014-05-16 22:21:57 +01:00
Vincent Petry 818c77684d Fixed trashbin to use correct class
It seems that \OC_Filesystemview has been removed.
Now using the correct class \OC\Files\View()
2014-05-15 15:21:27 +02:00
Thomas Müller e0dd69e4e6 remove legacy aka deprecated code: OC_FilesystemView 2014-05-12 16:30:39 +02:00
Vincent Petry 9a9665f361 Merge pull request #8041 from owncloud/files-sortcolumns
File list sorting by clicking on column headers
2014-05-12 12:50:27 +02:00
Sjors van der Pluijm 49822dfcdb refs #8376; spaces=>tabs 2014-04-29 14:59:47 +02:00
Sjors van der Pluijm 54f482ff9c refs #8376; added comment and applied patch on other files 2014-04-28 19:32:25 +02:00
Vincent Petry 688f6162da Add sorting to files list, trashbin and public files 2014-04-28 17:42:04 +02:00
Robin McCorkell 869e7a51f0 Prevent error in files_trashbin
`glob` can return FALSE when the directory is empty, instead of an empty array,
causing an error at `foreach`.

"Note: On some systems it is impossible to distinguish between empty match and
an error."

See http://www.php.net/manual/en/function.glob.php -> Return Values
2014-04-13 14:51:33 +01:00
Robin McCorkell fa8814902e Adjust logic for deciding if trashbin empty
Any error in opening the trashbin directory returns 'true' for isEmpty.
An error is prevented by checking if the directory exists before trying to
open it.
2014-04-13 13:49:04 +01:00
Vincent Petry 0be9de5df5 Files, trashbin, public apps use ajax/JSON for the file list
Files app:

- removed file list template, now rendering list from JSON response
- FileList.addFile/addDir is now FileList.add() and takes a JS map with all required
  arguments instead of having a long number of function arguments
- added unit tests for many FileList operations
- fixed newfile.php, newfolder.php and rename.php to return the file's
  full JSON on success
- removed obsolete/unused undo code
- removed download_url / loading options, now using
  Files.getDownloadUrl() for that
- server side now uses Helper::getFileInfo() to prepare file JSON response
- previews are now client-side only

Breadcrumbs are now JS only:

- Added BreadCrumb class to handle breadcrumb rendering and events
- Added unit test for BreadCrumb class
- Moved all relevant JS functions to the BreadCrumb class

Public page now uses ajax to load the file list:

- Added Helper class in sharing app to make it easier to authenticate
  and retrieve the file's real path
- Added ajax/list.php to retrieve the file list
- Fixed FileActions and FileList to work with the ajax list

Core:

- Fixed file picker dialog to use the same list format as files app
2014-04-02 15:33:47 +02:00
icewind1991 d87001a093 Merge pull request #7768 from owncloud/trashempty-nocache
Use a more efficient way to determine that the trashbin is empty that doesn't rely on the cache
2014-03-24 13:34:30 +01:00
Robin Appelman 6b66b42f6e catch the case where files_trashbin/files doesn't exist 2014-03-24 12:33:44 +01:00
Robin Appelman 214357ca68 Improve sorting performance of large lists of files 2014-03-19 13:53:59 +01:00
Robin Appelman 38b1529c2a More robust way to check if the folder is empty 2014-03-17 17:03:32 +01:00
Robin Appelman 332c14a878 Use a more efficient way to determine that the trashbin is empty that doesn't rely on the cache 2014-03-17 16:35:08 +01:00
Georg Ehrke 0f864c38bb add preDelete hook for files_trashbin app 2014-03-11 14:10:12 +01:00
Bjoern Schiessle 5ddabd7cd0 fix mimetype detection, introduce fake etag to identify preview images 2014-03-10 15:13:28 +01:00
Bjoern Schiessle 4562909a20 get trash size from file cache 2014-03-10 15:13:28 +01:00
Bjoern Schiessle abad625cac only enable previews if the encryption is disabled 2014-03-10 15:13:28 +01:00
Bjoern Schiessle eab844e226 if file is not in db, fall back to restore file to the users root 2014-03-10 15:13:28 +01:00
Thomas Müller c6f4f85e27 Merge branch 'master' into scrutinizer_documentation_patches
Conflicts:
	lib/private/migration/content.php
2014-02-18 18:31:33 +01:00
Thomas Müller 1e84d6b14b Merge pull request #7190 from owncloud/appconfig-legacy-apps
Remove usage of legacy OC_Appconfig
2014-02-18 18:10:22 +01:00
Thomas Müller 9fac95c2ab Merge branch 'master' into scrutinizer_documentation_patches
Conflicts:
	lib/private/appconfig.php
2014-02-14 23:03:27 +01:00
Robin Appelman 181bbd4325 Remove usage of legacy OC_Appconfig 2014-02-13 16:28:49 +01:00
Jörn Friedrich Dreyer 2a6a9a8cef polish documentation based on scrutinizer patches 2014-02-06 17:02:21 +01:00
Vincent Petry d49c7ad4fb Fixed double file encoding for previews 2014-01-30 16:34:37 +01:00
Vincent Petry ca57a849ff When reading the size of "files" mountpoints need to be excluded
The versions and trashbin app are now passing "includeMountPoints=false"
to "getFileInfo()" to make sure that the calculated total size doesn't
include mount points like Shared or external storage.

This is because the default call (legacy) used to return the size of
mount points as well.

Fixes #6731
2014-01-20 17:11:33 +01:00
Bjoern Schiessle 592ae16603 remove old code 2014-01-15 14:35:17 +01:00
Bjoern Schiessle f11f65c6a5 copy files to owner trash recursively 2014-01-15 14:27:23 +01:00
Bjoern Schiessle 6b7fdda4f5 config switch to disable auto expire for the trash bin 2013-12-04 16:11:40 +01:00
Bjoern Schiessle ee66db447f make it possible to select folders 2013-12-02 16:30:03 +01:00
Bjoern Schiessle 8ce3ea3e2c fix delete files from trash bin 2013-12-02 11:50:55 +01:00
Bjoern Schiessle 5d2299eab8 only create complete share key if we know the exact path 2013-11-26 13:30:59 +01:00
Bjoern Schiessle f8fcd567a7 move files to owners trash 2013-11-25 16:51:31 +01:00
Georg Ehrke 90fac1f371 replace $path with '/files_trashbin/files/' . $file 2013-11-12 14:03:50 +01:00
Georg Ehrke feee4b865b add delete hook for trash bin app 2013-11-12 14:00:36 +01:00
Thomas Müller db39fede97 Merge branch 'master' into appframework-master
Conflicts:
	apps/files/lib/helper.php
	apps/files_trashbin/lib/helper.php
2013-09-25 09:52:12 +02:00
Jörn Friedrich Dreyer 4b3e56bcf9 remove unneccessary lib in namespace 2013-09-20 16:46:33 +02:00
Jörn Friedrich Dreyer 9e39118b52 namespaces use upcasefirst parts
when _ is left in namespace and files are named after their classes the autoloader will also find classes in the lib folder of an app
its magic!
2013-09-20 16:37:07 +02:00
Thomas Müller 9b420e8660 use \OC::$server->getPreviewManager() instead of \OCP\Preview 2013-09-17 13:33:47 +02:00