Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions lib/FilesHooks.php
Original file line number Diff line number Diff line change
Expand Up @@ -413,14 +413,23 @@ protected function fileMoving($oldPath, $newPath) {
$beforeUsers = array_keys($oldUsers);
$afterUsers = array_keys($affectedUsers);

// Resolve notification/email settings (and favorites) once for every user involved
// in the move, instead of recomputing them for each delete/add/move subset of the
// same file. The maps are keyed by user and each subset only reads its own keys.
$allUsers = array_values(array_unique(array_merge($beforeUsers, $afterUsers)));
$filteredEmailUsers = $filteredNotificationUsers = [];
if (!empty($allUsers)) {
[$filteredEmailUsers, $filteredNotificationUsers] = $this->getFileChangeActivitySettings($fileId, $allUsers);
}

$deleteUsers = array_diff($beforeUsers, $afterUsers);
$this->generateDeleteActivities($deleteUsers, $oldUsers, $fileId, $oldFileName);
$this->generateDeleteActivities($deleteUsers, $oldUsers, $fileId, $oldFileName, $filteredEmailUsers, $filteredNotificationUsers);

$addUsers = array_diff($afterUsers, $beforeUsers);
$this->generateAddActivities($addUsers, $affectedUsers, $fileId, $fileName);
$this->generateAddActivities($addUsers, $affectedUsers, $fileId, $fileName, $filteredEmailUsers, $filteredNotificationUsers);

$moveUsers = array_intersect($beforeUsers, $afterUsers);
$this->generateMoveActivities($moveUsers, $oldUsers, $affectedUsers, $fileId, $oldFileName, $parentId, $fileName);
$this->generateMoveActivities($moveUsers, $oldUsers, $affectedUsers, $fileId, $oldFileName, $parentId, $fileName, $filteredEmailUsers, $filteredNotificationUsers);

$beforeRemotes = $this->oldAccessList['remotes'];
$afterRemotes = $accessList['remotes'];
Expand Down Expand Up @@ -455,14 +464,14 @@ protected function fileMoving($oldPath, $newPath) {
* @param string[] $pathMap
* @param int $fileId
* @param string $oldFileName
* @param array $filteredEmailUsers
* @param array $filteredNotificationUsers
*/
protected function generateDeleteActivities($users, $pathMap, $fileId, $oldFileName) {
protected function generateDeleteActivities($users, $pathMap, $fileId, $oldFileName, array $filteredEmailUsers, array $filteredNotificationUsers) {
if (empty($users)) {
return;
}

[$filteredEmailUsers, $filteredNotificationUsers] = $this->getFileChangeActivitySettings($fileId, $users);

$shouldFlush = $this->startActivityTransaction();
foreach ($users as $user) {
$path = $pathMap[$user];
Expand Down Expand Up @@ -491,14 +500,14 @@ protected function generateDeleteActivities($users, $pathMap, $fileId, $oldFileN
* @param string[] $pathMap
* @param int $fileId
* @param string $fileName
* @param array $filteredEmailUsers
* @param array $filteredNotificationUsers
*/
protected function generateAddActivities($users, $pathMap, $fileId, $fileName) {
protected function generateAddActivities($users, $pathMap, $fileId, $fileName, array $filteredEmailUsers, array $filteredNotificationUsers) {
if (empty($users)) {
return;
}

[$filteredEmailUsers, $filteredNotificationUsers] = $this->getFileChangeActivitySettings($fileId, $users);

$shouldFlush = $this->startActivityTransaction();
foreach ($users as $user) {
$path = $pathMap[$user];
Expand Down Expand Up @@ -530,14 +539,14 @@ protected function generateAddActivities($users, $pathMap, $fileId, $fileName) {
* @param string $oldFileName
* @param int $newParentId
* @param string $fileName
* @param array $filteredEmailUsers
* @param array $filteredNotificationUsers
*/
protected function generateMoveActivities($users, $beforePathMap, $afterPathMap, $fileId, $oldFileName, $newParentId, $fileName) {
protected function generateMoveActivities($users, $beforePathMap, $afterPathMap, $fileId, $oldFileName, $newParentId, $fileName, array $filteredEmailUsers, array $filteredNotificationUsers) {
if (empty($users)) {
return;
}

[$filteredEmailUsers, $filteredNotificationUsers] = $this->getFileChangeActivitySettings($fileId, $users);

$shouldFlush = $this->startActivityTransaction();
foreach ($users as $user) {
if ($oldFileName === $fileName) {
Expand Down
Loading