Updated user profile image delete to delete all uploads

Also moved test and made more comprehensive
This commit is contained in:
Dan Brown 2018-01-28 14:08:14 +00:00
parent 35e00ddb95
commit ead4b14d94
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
4 changed files with 37 additions and 25 deletions

View File

@ -1,9 +1,11 @@
<?php namespace BookStack\Repos;
use Activity;
use BookStack\Image;
use BookStack\Role;
use BookStack\User;
use Exception;
use BookStack\Services\ImageService;
use Images;
class UserRepo
{
@ -11,7 +13,6 @@ class UserRepo
protected $user;
protected $role;
protected $entityRepo;
protected $imageService;
/**
* UserRepo constructor.
@ -19,12 +20,11 @@ class UserRepo
* @param Role $role
* @param EntityRepo $entityRepo
*/
public function __construct(User $user, Role $role, EntityRepo $entityRepo, ImageService $imageService)
public function __construct(User $user, Role $role, EntityRepo $entityRepo)
{
$this->user = $user;
$this->role = $role;
$this->entityRepo = $entityRepo;
$this->imageService = $imageService;
}
/**
@ -88,7 +88,7 @@ class UserRepo
// Get avatar from gravatar and save
if (!config('services.disable_services')) {
try {
$avatar = \Images::saveUserGravatar($user);
$avatar = Images::saveUserGravatar($user);
$user->avatar()->associate($avatar);
$user->save();
} catch (Exception $e) {
@ -143,16 +143,17 @@ class UserRepo
/**
* Remove the given user from storage, Delete all related content.
* @param User $user
* @throws Exception
*/
public function destroy(User $user)
{
$user->socialAccounts()->delete();
$user->delete();
// Deleting User profile pics
$profilePic = $user->image_id ? $user->avatar->findOrFail($user->image_id) : FALSE;
if ($profilePic) {
$this->imageService->destroyImage($profilePic);
// Delete user profile images
$profileImages = $images = Image::where('type', '=', 'user')->where('created_by', '=', $user->id)->get();
foreach ($profileImages as $image) {
Images::destroyImage($image);
}
}
@ -165,7 +166,7 @@ class UserRepo
*/
public function getActivity(User $user, $count = 20, $page = 0)
{
return \Activity::userActivity($user, $count, $page);
return Activity::userActivity($user, $count, $page);
}
/**

View File

@ -236,6 +236,7 @@ class ImageService extends UploadService
* Destroys an Image object along with its files and thumbnails.
* @param Image $image
* @return bool
* @throws Exception
*/
public function destroyImage(Image $image)
{

View File

@ -184,4 +184,28 @@ class ImageTest extends TestCase
$this->assertTrue($testImageData === $uploadedImageData, "Uploaded image file data does not match our test image as expected");
}
public function test_user_images_deleted_on_user_deletion()
{
$editor = $this->getEditor();
$this->actingAs($editor);
$imageName = 'profile.png';
$relPath = $this->getTestImagePath('gallery', $imageName);
$this->deleteImage($relPath);
$file = $this->getTestImage($imageName);
$this->call('POST', '/images/user/upload', [], [], ['file' => $file], []);
$this->call('POST', '/images/user/upload', [], [], ['file' => $file], []);
$profileImages = Image::where('type', '=', 'user')->where('created_by', '=', $editor->id)->get();
$this->assertTrue($profileImages->count() === 2, "Found profile images does not match upload count");
$userDelete = $this->asAdmin()->delete("/settings/users/{$editor->id}");
$userDelete->assertStatus(302);
$this->assertDatabaseMissing('images', [
'type' => 'user',
'created_by' => $editor->id
]);
}
}

View File

@ -115,19 +115,5 @@ class UserProfileTest extends BrowserKitTest
->visit('/books')
->pageHasElement('.featured-image-container');
}
public function test_user_delete()
{
$newUser = $this->getNewBlankUser();
$this->actingAs($newUser);
$this->asAdmin()->visit('/settings/users/' . $newUser->id . '/delete')
->see('Delete User')
->press('Confirm')
->seePageIs('/settings/users/')
->see('USERS')->see('ADD NEW USER');
$this->dontSeeInDatabase('images', [
'id' => $newUser->image_id
]);
}
}