Skip to content

Commit 4e38dc7

Browse files
committed
feat: add media management
1 parent 41b0a70 commit 4e38dc7

14 files changed

+1810
-189
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
/public/svg
1515
/public/icons
1616
/public/vendors
17+
/public/public
1718
/storage/*.key
1819
/vendor
1920
.env
+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use Illuminate\Http\Request;
6+
use App\Models\Folder;
7+
use App\Services\RemoveFolderService;
8+
9+
class MediaController extends Controller
10+
{
11+
12+
public function index(Request $request){
13+
if($request->has('id') && $request->input('id') != null && $request->input('id') != 'null'){
14+
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
15+
if($thisFolder->folder_id == null){
16+
$result = view('dashboard.media.index', array(
17+
'medias' => $thisFolder->getMedia(),
18+
'mediaFolders' => Folder::where('folder_id', '=', $thisFolder->id)->get(),
19+
'thisFolder' => $thisFolder->id,
20+
'parentFolder' => 'disable'
21+
));
22+
}else{
23+
$result = view('dashboard.media.index', array(
24+
'medias' => $thisFolder->getMedia(),
25+
'mediaFolders' => Folder::where('folder_id', '=', $request->input('id'))->get(),
26+
'thisFolder' => $request->input('id'),
27+
'parentFolder' => $thisFolder['folder_id']
28+
));
29+
}
30+
}else{
31+
$rootFolder = Folder::whereNull('folder_id')->first();
32+
$result = view('dashboard.media.index', array(
33+
'medias' => $rootFolder->getMedia(),
34+
'mediaFolders' => Folder::where('folder_id', '=', $rootFolder->id)->get(),
35+
'thisFolder' => $rootFolder->id,
36+
'parentFolder' => 'disable'
37+
));
38+
}
39+
return $result;
40+
}
41+
42+
public function folderAdd(Request $request){
43+
$mediaFolder = new Folder();
44+
$mediaFolder->name = 'New Folder';
45+
if($request->input('thisFolder') !== 'null'){
46+
$mediaFolder->folder_id = $request->input('thisFolder');
47+
}
48+
$mediaFolder->save();
49+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
50+
}
51+
52+
public function folderUpdate(Request $request){
53+
$validatedData = $request->validate([
54+
'name' => 'required|min:1|max:256',
55+
]);
56+
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
57+
$thisFolder->name = $request->input('name');
58+
$thisFolder->save();
59+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
60+
}
61+
62+
public function folder(Request $request){
63+
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
64+
return response()->json(array(
65+
'id' => $request->input('id'),
66+
'name' => $thisFolder['name'],
67+
));
68+
}
69+
70+
public function folderMove(Request $request){
71+
if($request->input('id') != $request->input('folder')){
72+
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
73+
if($request->input('folder') === 'moveUp'){
74+
$newFolder = Folder::where('id', '=', $thisFolder->folder_id)->first();
75+
$newFolder = $newFolder->folder_id;
76+
}else{
77+
$newFolder = $request->input('folder');
78+
}
79+
$thisFolder->folder_id = $newFolder;
80+
$thisFolder->save();
81+
}
82+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
83+
}
84+
85+
public function folderDelete(Request $request){
86+
$validatedData = $request->validate([
87+
'id' => 'numeric',
88+
]);
89+
$removeFolderService = new RemoveFolderService();
90+
$removeFolderService->folderDelete($request->input('id'), $request->input('thisFolder'));
91+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
92+
}
93+
94+
public function fileAdd(Request $request){
95+
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
96+
if($request->hasFile('file')){
97+
$file = $request->file('file');
98+
$path = $file->path();
99+
$oryginalName = $file->getClientOriginalName();
100+
if(!empty($mediaFolder)){
101+
$mediaFolder->addMedia($path)->usingName($oryginalName)->toMediaCollection();
102+
103+
}
104+
}
105+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
106+
}
107+
108+
public function file(Request $request){
109+
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
110+
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
111+
return response()->json(array(
112+
'id' => $request->input('id'),
113+
'name' => $media['name'],
114+
'realName' => $media['file_name'],
115+
'url' => $media->getUrl(),
116+
'mimeType' => $media['mime_type'],
117+
'size' => $media['size'],
118+
'createdAt' => substr($media['created_at'], 0, 10) . ' ' . substr($media['created_at'], 11, 19),
119+
'updatedAt' => substr($media['updated_at'], 0, 10) . ' ' . substr($media['updated_at'], 11, 19),
120+
));
121+
}
122+
123+
public function fileDelete(Request $request){
124+
$validatedData = $request->validate([
125+
'id' => 'numeric',
126+
]);
127+
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
128+
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
129+
$media->delete();
130+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
131+
}
132+
133+
public function fileUpdate(Request $request){
134+
$validatedData = $request->validate([
135+
'name' => 'required|min:1|max:256',
136+
]);
137+
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
138+
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
139+
$media->name = $request->input('name');
140+
$media->save();
141+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
142+
}
143+
144+
public function fileMove(Request $request){
145+
$oldFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
146+
$media = $oldFolder->getMedia()->where('id', $request->input('id'))->first();
147+
if($oldFolder->folder_id != NULL && $request->input('folder') === 'moveUp'){
148+
$newFolder = Folder::where('id', '=', $oldFolder->folder_id)->first();
149+
}else{
150+
$newFolder = Folder::where('id', '=', $request->input('folder'))->first();
151+
}
152+
$newFolder->addMedia($media->getPath())->usingName($media->name)->toMediaCollection();
153+
$media->delete();
154+
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
155+
}
156+
157+
}

app/Models/Folder.php

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace App\Models;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
use Spatie\MediaLibrary\HasMedia\HasMedia;
7+
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;
8+
9+
class Folder extends Model implements HasMedia
10+
{
11+
use HasMediaTrait;
12+
13+
protected $table = 'folder';
14+
15+
/**
16+
* Get the comments for the blog post.
17+
*/
18+
/*
19+
public function media()
20+
{
21+
return $this->hasMany('App\Models\Media');
22+
}
23+
*/
24+
}

app/Services/RemoveFolderService.php

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
/*
3+
16.12.2019
4+
RolesService.php
5+
*/
6+
7+
namespace App\Services;
8+
9+
use App\Models\Folder;
10+
11+
class REmoveFolderService{
12+
13+
public $foldersArray;
14+
15+
public function findFolderChildAnd($thisFolderId, $thisFolder){
16+
array_push($this->foldersArray, $thisFolderId);
17+
$childs = Folder::where('folder_id', '=', $thisFolderId)->get();
18+
if(!empty($childs)){
19+
foreach($childs as $child){
20+
$this->findFolderChildAnd($child->id, $thisFolder);
21+
}
22+
}
23+
}
24+
25+
public function folderDelete($id, $thisFolder){
26+
$folder = Folder::where('id', '=', $id)->first();
27+
if($folder->folder_id != NULL){
28+
$this->foldersArray = array();
29+
$this->findFolderChildAnd($id, $thisFolder);
30+
foreach($this->foldersArray as $folderId){
31+
$folder = Folder::where('id', '=', $folderId)->first();
32+
$folder->delete();
33+
}
34+
}
35+
36+
}
37+
38+
}

composer.json

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"fideloper/proxy": "^4.0",
1313
"laravel/framework": "^6.0",
1414
"laravel/tinker": "^1.0",
15+
"spatie/laravel-medialibrary": "^7.0.0",
1516
"spatie/laravel-permission": "^3.3"
1617
},
1718
"require-dev": {

0 commit comments

Comments
 (0)