This commit is contained in:
Čarodej
2021-11-03 17:34:46 +01:00
parent 98823504ba
commit cdaad931bb
40 changed files with 69 additions and 112 deletions

View File

@@ -49,5 +49,5 @@ return [
'size' => 120,
'name' => 'xs',
],
]
],
];

View File

@@ -13,6 +13,7 @@ use Domain\Plans\Controllers\ActivePlansController;
use Domain\Folders\Controllers\CreateFolderController;
use Domain\Browsing\Controllers\BrowseFolderController;
use Domain\Sharing\Controllers\ShareViaEmailController;
use Domain\Folders\Controllers\NavigationTreeController;
use Domain\Items\Controllers\MoveFileOrFolderController;
use Domain\Items\Controllers\DeleteFileOrFolderController;
use Domain\Items\Controllers\RenameFileOrFolderController;
@@ -22,7 +23,6 @@ use Domain\Browsing\Controllers\BrowseLatestFilesController;
use Domain\Browsing\Controllers\BrowseSharedItemsController;
use Domain\Browsing\Controllers\BrowseTrashContentController;
use Domain\Homepage\Controllers\SendContactMessageController;
use Domain\Folders\Controllers\NavigationTreeController;
use Domain\Browsing\Controllers\SearchFilesAndFoldersController;
// Pages

View File

@@ -1,16 +1,15 @@
<?php
use Domain\Teams\Controllers\InvitationsController;
use Domain\Teams\Controllers\LeaveTeamFolderController;
use Domain\Teams\Controllers\NavigationTreeController;
use Domain\Teams\Controllers\TeamFoldersController;
use Domain\Teams\Controllers\NavigationTreeController;
use Domain\Teams\Controllers\LeaveTeamFolderController;
use Domain\Teams\Controllers\BrowseSharedWithMeController;
use Domain\Teams\Controllers\ConvertFolderIntoTeamFolderController;
Route::apiResource('/invitations', InvitationsController::class);
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::apiResource('/folders', TeamFoldersController::class);
Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class);

View File

@@ -1,5 +1,4 @@
<?php
namespace App\Console\Commands;
use App\Users\Models\User;
@@ -14,10 +13,10 @@ use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\WithFaker;
use Domain\Teams\Models\TeamFolderInvitation;
use Domain\Pages\Actions\SeedDefaultPagesAction;
use Intervention\Image\ImageManagerStatic as Image;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
use Intervention\Image\ImageManagerStatic as Image;
class SetupDevEnvironment extends Command
{
@@ -36,11 +35,10 @@ class SetupDevEnvironment extends Command
public function __construct(
private CreateDiskDirectoriesAction $createDiskDirectories,
private SeedDefaultSettingsAction $seedDefaultSettings,
private SeedDefaultLanguageAction $seedDefaultLanguage,
private SeedDefaultPagesAction $seedDefaultPages,
)
{
private SeedDefaultSettingsAction $seedDefaultSettings,
private SeedDefaultLanguageAction $seedDefaultLanguage,
private SeedDefaultPagesAction $seedDefaultPages,
) {
parent::__construct();
$this->setUpFaker();
}
@@ -636,7 +634,6 @@ class SetupDevEnvironment extends Command
'demo/images/memes/You Are My Sunshine.jpg',
])
->each(function ($file) use ($user) {
$thumbnail = $this->generate_thumbnails($file, $user);
// Create file record
@@ -664,7 +661,6 @@ class SetupDevEnvironment extends Command
'demo/images/apartments/Kitchen Island.jpg',
])
->each(function ($file) use ($user, $apartments) {
$thumbnail = $this->generate_thumbnails($file, $user);
// Create file record
@@ -696,7 +692,6 @@ class SetupDevEnvironment extends Command
'demo/images/nature/Yellow Animal Eyes Fur.jpg',
])
->each(function ($file) use ($user, $nature) {
$thumbnail = $this->generate_thumbnails($file, $user);
// Create file record
@@ -753,7 +748,7 @@ class SetupDevEnvironment extends Command
collect([$members[0]->id, $members[1]->id])
->each(
fn($id) => DB::table('team_folder_members')
fn ($id) => DB::table('team_folder_members')
->insert([
'parent_id' => $companyProjectFolder->id,
'user_id' => $id,
@@ -763,7 +758,7 @@ class SetupDevEnvironment extends Command
collect([$members[2]->id, $members[3]->id])
->each(
fn($id) => DB::table('team_folder_members')
fn ($id) => DB::table('team_folder_members')
->insert([
'parent_id' => $financeDocumentsFolder->id,
'user_id' => $id,
@@ -774,7 +769,7 @@ class SetupDevEnvironment extends Command
// Create invitations
collect([$members[4], $members[5]])
->each(
fn($user) => TeamFolderInvitation::factory()
fn ($user) => TeamFolderInvitation::factory()
->create([
'email' => $user->email,
'parent_id' => $companyProjectFolder->id,
@@ -833,7 +828,7 @@ class SetupDevEnvironment extends Command
'parent_id' => $folder->id,
'user_id' => $johan->id,
'permission' => 'owner',
]
],
]);
// Get meme gallery
@@ -879,7 +874,6 @@ class SetupDevEnvironment extends Command
]);
});
collect([
'demo/images/memes/Eggcited bro.jpg',
'demo/images/memes/Get a Rest.jpg',
@@ -1112,8 +1106,7 @@ class SetupDevEnvironment extends Command
// Generate avatar
collect(config('vuefilemanager.avatar_sizes'))
->each(function ($size) use ($img, $image, $avatar_name) {
->each(function ($size) use ($img , $avatar_name) {
// fit thumbnail
$img->fit($size['size'], $size['size'])->stream();
@@ -1145,12 +1138,10 @@ class SetupDevEnvironment extends Command
// Generate avatar sizes
collect(config('vuefilemanager.image_sizes'))
->each(function ($size) use ($intervention, $file_name, $user) {
// Create thumbnail only if image is larger than predefined image sizes
if ($intervention->getWidth() > $size['size']) {
// Generate thumbnail
$intervention->resize($size['size'], null, fn($constraint) => $constraint->aspectRatio())->stream();
$intervention->resize($size['size'], null, fn ($constraint) => $constraint->aspectRatio())->stream();
// Store thumbnail to disk
Storage::put("files/$user->id/{$size['name']}-{$file_name}", $intervention);

View File

@@ -1,8 +1,8 @@
<?php
namespace App\Providers;
use Auth;
use DB;
use Auth;
use App\Users\Models\User;
use Domain\Files\Models\File;
use Domain\Sharing\Models\Share;
@@ -18,7 +18,6 @@ class AuthServiceProvider extends ServiceProvider
* @var array
*/
protected $policies = [
//
];
/**
@@ -54,7 +53,6 @@ class AuthServiceProvider extends ServiceProvider
// Define owner of file or folder
Gate::define('owner', function (?User $user, File | Folder $item) {
// Check user owner status
return $user?->id === $item->user_id;
});

View File

@@ -1,12 +1,10 @@
<?php
namespace App\Users\Controllers\Account;
use App\Users\Requests\UpdateUserProfileSettingsRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\Users\Requests\UpdateUserProfileSettingsRequest;
class UpdateProfileSettingsController extends Controller
{

View File

@@ -24,7 +24,6 @@ class UserSettings extends Model
// Get avatar from external storage
if ($this->attributes['avatar'] && ! is_storage_driver('local')) {
foreach (config('vuefilemanager.avatar_sizes') as $item) {
$filePath = "avatars/{$item['name']}-{$this->attributes['avatar']}";
@@ -36,7 +35,6 @@ class UserSettings extends Model
// Get avatar from local storage
if ($this->attributes['avatar']) {
foreach (config('vuefilemanager.avatar_sizes') as $item) {
$link[$item['name']] = url("/avatars/{$item['name']}-{$this->attributes['avatar']}");
}

View File

@@ -1,5 +1,4 @@
<?php
namespace App\Users\Requests;
use Illuminate\Foundation\Http\FormRequest;

View File

@@ -2,7 +2,6 @@
namespace Domain\Files\Actions;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\ImageManagerStatic as Image;
class CreateImageThumbnailAction
@@ -23,20 +22,16 @@ class CreateImageThumbnailAction
$file,
string $user_id
): void {
// Create thumbnail from image
if (in_array($file->getClientMimeType(), $this->availableFormats)) {
// Create intervention image
$intervention = Image::make($file)->orientate();
// Generate avatar sizes
collect(config('vuefilemanager.image_sizes'))
->each(function ($size) use ($intervention, $file_name, $user_id) {
// Create thumbnail only if image is larger than predefined image sizes
if ($intervention->getWidth() > $size['size']) {
// Generate thumbnail
$intervention->resize($size['size'], null, fn ($constraint) => $constraint->aspectRatio())->stream();

View File

@@ -19,7 +19,6 @@ class DownloadThumbnailAction
// Check if file exist
if (! Storage::exists($path)) {
// Get original file path
$substituteFilePath = "/files/$file->user_id/$file->basename";

View File

@@ -1,6 +1,7 @@
<?php
namespace Domain\Files\Actions;
use Illuminate\Support\Str;
use Domain\Sharing\Models\Share;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\File;
@@ -9,7 +10,6 @@ use Domain\Files\Requests\UploadRequest;
use Domain\Files\Models\File as UserFile;
use Domain\Traffic\Actions\RecordUploadAction;
use App\Users\Actions\CheckStorageCapacityAction;
use Illuminate\Support\Str;
class UploadFileAction
{

View File

@@ -13,12 +13,12 @@ class GetFileController extends Controller
public function __construct(
private RecordDownloadAction $recordDownload,
private DownloadFileAction $downloadFile,
) {}
) {
}
public function __invoke(
string $filename,
): BinaryFileResponse {
$file = UserFile::withTrashed()
->where('basename', $filename)
->firstOrFail();

View File

@@ -13,13 +13,13 @@ class GetThumbnailController extends Controller
{
public function __construct(
private DownloadThumbnailAction $downloadThumbnail,
) {}
) {
}
public function __invoke(
Request $request,
string $filename,
): FileNotFoundException | StreamedResponse {
$originalFileName = substr($filename, 3);
$file = File::withTrashed()

View File

@@ -1,12 +1,11 @@
<?php
namespace Domain\Files\Controllers;
use Domain\Files\Models\File;
use Gate;
use Domain\Files\Models\File;
use Illuminate\Http\Response;
use Domain\Sharing\Models\Share;
use Domain\Files\Resources\FileResource;
use Domain\Sharing\Actions\ProtectShareRecordAction;
/**
* Get shared file record
@@ -16,7 +15,6 @@ class VisitorShowFileController
public function __invoke(
Share $shared
): Response {
$file = File::whereUserId($shared->user_id)
->whereId($shared->item_id)
->firstOrFail();

View File

@@ -94,9 +94,7 @@ class File extends Model
// Generate thumbnail link for external storage service
if ($this->type === 'image' && ! is_storage_driver(['local'])) {
foreach (config('vuefilemanager.image_sizes') as $item) {
$filePath = "files/{$this->user_id}/{$item['name']}-{$this->basename}";
$links[$item['name']] = Storage::temporaryUrl($filePath, now()->addHour());
@@ -107,9 +105,7 @@ class File extends Model
// Generate thumbnail link for local storage
if ($this->type === 'image') {
foreach (config('vuefilemanager.image_sizes') as $item) {
$route = route('thumbnail', ['name' => $item['name'] . '-' . $this->basename]);
if ($this->public_access) {

View File

@@ -1,5 +1,4 @@
<?php
namespace Domain\Files\Resources;
use Carbon\Carbon;
@@ -45,10 +44,10 @@ class FileResource extends JsonResource
),*/
],
'relationships' => [
$this->mergeWhen($this->shared, fn() => [
$this->mergeWhen($this->shared, fn () => [
'shared' => new ShareResource($this->shared),
]),
$this->mergeWhen($this->parent, fn() => [
$this->mergeWhen($this->parent, fn () => [
'parent' => [
'data' => [
'type' => 'folder',
@@ -59,7 +58,7 @@ class FileResource extends JsonResource
],
],
]),
$this->mergeWhen($this->owner, fn() => [
$this->mergeWhen($this->owner, fn () => [
'user' => [
'data' => [
'type' => 'user',

View File

@@ -1,10 +1,9 @@
<?php
namespace Domain\Folders\Controllers;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class NavigationTreeController
{

View File

@@ -1,8 +1,8 @@
<?php
namespace Domain\Items\Actions;
use Domain\Sharing\Models\Share;
use Gate;
use Domain\Sharing\Models\Share;
class MoveFileOrFolderAction
{
@@ -12,7 +12,6 @@ class MoveFileOrFolderAction
public function __invoke($request, ?Share $share = null): void
{
foreach ($request->input('items') as $item) {
$item = get_item($item['type'], $item['id']);
Gate::authorize('can-edit', [$item, $share]);

View File

@@ -6,7 +6,6 @@ use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Domain\Items\Requests\DeleteItemRequest;
use Domain\Items\Actions\DeleteFileOrFolderAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
/**

View File

@@ -7,7 +7,6 @@ use Domain\Sharing\Models\Share;
use App\Http\Controllers\Controller;
use Domain\Items\Requests\MoveItemRequest;
use Domain\Items\Actions\MoveFileOrFolderAction;
use Domain\Sharing\Actions\ProtectShareRecordAction;
use Domain\Sharing\Actions\VerifyAccessToItemAction;
/**

View File

@@ -1,16 +1,15 @@
<?php
namespace Domain\Teams\Controllers;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderCollection;
use Domain\Folders\Resources\FolderResource;
use Gate;
use Str;
use Gate;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Domain\Files\Resources\FilesCollection;
use Domain\Folders\Resources\FolderResource;
use Domain\Folders\Resources\FolderCollection;
class BrowseSharedWithMeController
{
@@ -36,7 +35,7 @@ class BrowseSharedWithMeController
->get();
}
if (!$id) {
if (! $id) {
$sharedFolderIds = DB::table('team_folder_members')
->where('user_id', Auth::id())
->whereIn('permission', ['can-edit', 'can-view'])

View File

@@ -1,14 +1,13 @@
<?php
namespace Domain\Teams\Controllers;
use Auth;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Teams\Requests\ConvertIntoTeamFolderRequest;
use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction;
use Illuminate\Support\Facades\DB;
class ConvertFolderIntoTeamFolderController extends Controller
{

View File

@@ -2,12 +2,12 @@
namespace Domain\Teams\Controllers;
use App\Users\Models\User;
use Domain\Teams\Resources\TeamInvitationResource;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Domain\Teams\Models\TeamFolderInvitation;
use Illuminate\Contracts\Routing\ResponseFactory;
use Domain\Teams\Resources\TeamInvitationResource;
class InvitationsController extends Controller
{

View File

@@ -1,18 +1,17 @@
<?php
namespace Domain\Teams\Controllers;
use Auth;
use Illuminate\Http\Response;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\Routing\ResponseFactory;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Domain\Folders\Models\Folder;
use Auth;
class LeaveTeamFolderController extends Controller
{
public function __invoke(Folder $folder): Response|Application|ResponseFactory
public function __invoke(Folder $folder): Response | Application | ResponseFactory
{
// Find and delete attached member from team folder
DB::table('team_folder_members')
@@ -22,4 +21,4 @@ class LeaveTeamFolderController extends Controller
return response('Done.', 204);
}
}
}

View File

@@ -1,8 +1,8 @@
<?php
namespace Domain\Teams\Controllers;
use Domain\Folders\Models\Folder;
use Gate;
use Domain\Folders\Models\Folder;
class NavigationTreeController
{

View File

@@ -1,7 +1,6 @@
<?php
namespace Domain\Teams\Controllers;
use Gate;
use Illuminate\Support\Str;
use Domain\Files\Models\File;
use Illuminate\Http\Response;

View File

@@ -2,9 +2,9 @@
namespace Domain\Teams\Models;
use App\Users\Models\User;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Str;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Database\Factories\TeamFolderInvitationFactory;
use Illuminate\Database\Eloquent\Factories\HasFactory;

View File

@@ -1,5 +1,4 @@
<?php
namespace Domain\Teams\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -20,7 +19,7 @@ class TeamInvitationResource extends JsonResource
'permission' => $this->permission,
],
'relationships' => [
$this->mergeWhen($this->inviter, fn() => [
$this->mergeWhen($this->inviter, fn () => [
'inviter' => [
'data' => [
'type' => 'user',

View File

@@ -325,7 +325,7 @@ if (! function_exists('store_avatar')) {
function store_avatar($request, $name): ?string
{
// Check if file exist in http request
if (!$request->hasFile($name)) {
if (! $request->hasFile($name)) {
return null;
}
@@ -346,7 +346,6 @@ if (! function_exists('store_avatar')) {
// Generate avatar sizes
collect(config('vuefilemanager.avatar_sizes'))
->each(function ($size) use ($intervention, $avatar_name) {
// fit thumbnail
$intervention->fit($size['size'], $size['size'])->stream();

View File

@@ -115,7 +115,8 @@ class UserAccountTest extends TestCase
])->assertStatus(204);
collect(config('vuefilemanager.avatar_sizes'))
->each(fn ($size) =>
->each(
fn ($size) =>
Storage::disk('local')
->assertExists("avatars/{$size['name']}-{$user->settings->getRawOriginal('avatar')}")
);

View File

@@ -236,10 +236,11 @@ class AdminTest extends TestCase
'name' => 'John Doe',
]);
$avatar = User::whereEmail('john@doe.com')->first()->settings->getRawOriginal('avatar');
$avatar = User::whereEmail('john@doe.com')->first()->settings->getRawOriginal('avatar');
collect(config('vuefilemanager.avatar_sizes'))
->each(fn ($size) =>
->each(
fn ($size) =>
Storage::disk('local')
->assertExists("avatars/{$size['name']}-{$avatar}")
);

View File

@@ -1,5 +1,4 @@
<?php
namespace Tests\Domain\Browsing;
use Tests\TestCase;

View File

@@ -1,12 +1,10 @@
<?php
namespace Tests\Domain\Files;
use Storage;
use Tests\TestCase;
use App\Users\Models\User;
use Illuminate\Support\Str;
use Laravel\Sanctum\Sanctum;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Illuminate\Http\UploadedFile;

View File

@@ -54,7 +54,8 @@ class FileTest extends TestCase
);
collect(config('vuefilemanager.image_sizes'))
->each(fn ($item) =>
->each(
fn ($item) =>
$disk->assertExists(
"files/{$user->id}/{$item['name']}-{$file->basename}"
)

View File

@@ -1,5 +1,4 @@
<?php
namespace Tests\Domain\Homepage;
use Mail;

View File

@@ -273,7 +273,8 @@ class SetupWizardTest extends TestCase
$this->assertNotNull($avatar);
collect(config('vuefilemanager.avatar_sizes'))
->each(fn ($size) =>
->each(
fn ($size) =>
Storage::disk('local')
->assertExists("avatars/{$size['name']}-{$avatar}")
);

View File

@@ -1,5 +1,4 @@
<?php
namespace Tests\Domain\Sharing;
use Storage;
@@ -54,7 +53,7 @@ class VisitorAccessToItemsTest extends TestCase
->assertStatus(200);
}
if (!$is_protected) {
if (! $is_protected) {
// Get shared file
$this->get("/file/$document->name/$share->token")
->assertStatus(200);
@@ -136,7 +135,7 @@ class VisitorAccessToItemsTest extends TestCase
->assertStatus(200);
}
if (!$is_protected) {
if (! $is_protected) {
$this->get("/share/$share->token")
->assertStatus(200);
}
@@ -189,7 +188,7 @@ class VisitorAccessToItemsTest extends TestCase
->assertStatus(200);
}
if (!$is_protected) {
if (! $is_protected) {
$this->get("/thumbnail/xs-$fileName/$share->token")
->assertStatus(200);
}

View File

@@ -37,13 +37,13 @@ class SearchTest extends TestCase
collect([$english, $russian, $turkish])
->each(
fn ($file) => $this
->actingAs($user)
->getJson('/api/browse/search?query=' . mb_strtolower(mb_substr($file->name, 0, 3)))
->assertStatus(200)
->assertJsonFragment([
'id' => $file->id,
'name' => $file->name,
])
->actingAs($user)
->getJson('/api/browse/search?query=' . mb_strtolower(mb_substr($file->name, 0, 3)))
->assertStatus(200)
->assertJsonFragment([
'id' => $file->id,
'name' => $file->name,
])
);
}

View File

@@ -1,15 +1,14 @@
<?php
namespace Tests\Domain\Teams;
use Str;
use Notification;
use Tests\TestCase;
use App\Users\Models\User;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\DB;
use Domain\Teams\Models\TeamFolderInvitation;
use Domain\Teams\Notifications\InvitationIntoTeamFolder;
use Illuminate\Support\Facades\DB;
use Notification;
use Str;
use Tests\TestCase;
class TeamManagementTest extends TestCase
{
@@ -635,4 +634,4 @@ class TeamManagementTest extends TestCase
->assertDatabaseCount('team_folder_members', 2)
->assertDatabaseCount('team_folder_invitations', 1);
}
}
}

View File

@@ -7,7 +7,6 @@ use App\Users\Models\User;
use Domain\Files\Models\File;
use Domain\Folders\Models\Folder;
use Illuminate\Support\Facades\DB;
use Domain\Teams\Models\TeamFolderInvitation;
use Domain\Teams\Notifications\InvitationIntoTeamFolder;
class TeamsTest extends TestCase