]> source.dussan.org Git - nextcloud-server.git/commitdiff
Correctly create activities for public downloads
authorJoas Schilling <nickvergessen@gmx.de>
Tue, 17 Feb 2015 14:08:16 +0000 (15:08 +0100)
committerJoas Schilling <nickvergessen@gmx.de>
Tue, 17 Feb 2015 16:26:03 +0000 (17:26 +0100)
apps/files_sharing/lib/controllers/sharecontroller.php

index 34339154b5c54b102e2e21e40950de4ebd168f96..cdcf3bbdc372dee2674be32adf1bc5b5512d3518 100644 (file)
@@ -230,26 +230,48 @@ class ShareController extends Controller {
                        }
                }
 
+               $files_list = null;
+               if (!is_null($files)) { // download selected files
+                       $files_list = json_decode($files);
+                       // in case we get only a single file
+                       if ($files_list === null) {
+                               $files_list = array($files);
+                       }
+               }
+
                $originalSharePath = self::getPath($token);
 
+               // Create the activities
                if (isset($originalSharePath) && Filesystem::isReadable($originalSharePath . $path)) {
                        $originalSharePath = Filesystem::normalizePath($originalSharePath . $path);
-                       $type = \OC\Files\Filesystem::is_dir($originalSharePath) ? 'folder' : 'file';
-                       $args = $type === 'folder' ? array('dir' => $originalSharePath) : array('dir' => dirname($originalSharePath), 'scrollto' => basename($originalSharePath));
-                       $linkToFile = \OCP\Util::linkToAbsolute('files', 'index.php', $args);
-                       $subject = $type === 'folder' ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
-                       $this->activityManager->publishActivity(
-                                       'files_sharing', $subject, array($originalSharePath), '', array(), $originalSharePath,
-                                       $linkToFile, $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM);
-               }
+                       $isDir = \OC\Files\Filesystem::is_dir($originalSharePath);
 
-               if (!is_null($files)) { // download selected files
-                       $files_list = json_decode($files);
-                       // in case we get only a single file
-                       if ($files_list === NULL) {
-                               $files_list = array($files);
+                       $activities = [];
+                       if (!$isDir) {
+                               // Single file public share
+                               $activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+                       } else if (!empty($files_list)) {
+                               // Only some files are downloaded
+                               foreach ($files_list as $file) {
+                                       $filePath = Filesystem::normalizePath($originalSharePath . '/' . $file);
+                                       $isDir = \OC\Files\Filesystem::is_dir($filePath);
+                                       $activities[$filePath] = ($isDir) ? Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED : Activity::SUBJECT_PUBLIC_SHARED_FILE_DOWNLOADED;
+                               }
+                       } else {
+                               // The folder is downloaded
+                               $activities[$originalSharePath] = Activity::SUBJECT_PUBLIC_SHARED_FOLDER_DOWNLOADED;
                        }
 
+                       foreach ($activities as $filePath => $subject) {
+                               $this->activityManager->publishActivity(
+                                       'files_sharing', $subject, array($filePath), '', array(),
+                                       $filePath, '', $linkItem['uid_owner'], Activity::TYPE_PUBLIC_LINKS, Activity::PRIORITY_MEDIUM
+                               );
+                       }
+               }
+
+               // download selected files
+               if (!is_null($files)) {
                        // FIXME: The exit is required here because otherwise the AppFramework is trying to add headers as well
                        // after dispatching the request which results in a "Cannot modify header information" notice.
                        OC_Files::get($originalSharePath, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD');