Skip to content

Commit

Permalink
feat: add media management
Browse files Browse the repository at this point in the history
  • Loading branch information
rakieta2015 committed Jan 13, 2020
1 parent 41b0a70 commit 4e38dc7
Show file tree
Hide file tree
Showing 14 changed files with 1,810 additions and 189 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
/public/svg
/public/icons
/public/vendors
/public/public
/storage/*.key
/vendor
.env
Expand Down
157 changes: 157 additions & 0 deletions app/Http/Controllers/MediaController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Folder;
use App\Services\RemoveFolderService;

class MediaController extends Controller
{

public function index(Request $request){
if($request->has('id') && $request->input('id') != null && $request->input('id') != 'null'){
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
if($thisFolder->folder_id == null){
$result = view('dashboard.media.index', array(
'medias' => $thisFolder->getMedia(),
'mediaFolders' => Folder::where('folder_id', '=', $thisFolder->id)->get(),
'thisFolder' => $thisFolder->id,
'parentFolder' => 'disable'
));
}else{
$result = view('dashboard.media.index', array(
'medias' => $thisFolder->getMedia(),
'mediaFolders' => Folder::where('folder_id', '=', $request->input('id'))->get(),
'thisFolder' => $request->input('id'),
'parentFolder' => $thisFolder['folder_id']
));
}
}else{
$rootFolder = Folder::whereNull('folder_id')->first();
$result = view('dashboard.media.index', array(
'medias' => $rootFolder->getMedia(),
'mediaFolders' => Folder::where('folder_id', '=', $rootFolder->id)->get(),
'thisFolder' => $rootFolder->id,
'parentFolder' => 'disable'
));
}
return $result;
}

public function folderAdd(Request $request){
$mediaFolder = new Folder();
$mediaFolder->name = 'New Folder';
if($request->input('thisFolder') !== 'null'){
$mediaFolder->folder_id = $request->input('thisFolder');
}
$mediaFolder->save();
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function folderUpdate(Request $request){
$validatedData = $request->validate([
'name' => 'required|min:1|max:256',
]);
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
$thisFolder->name = $request->input('name');
$thisFolder->save();
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function folder(Request $request){
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
return response()->json(array(
'id' => $request->input('id'),
'name' => $thisFolder['name'],
));
}

public function folderMove(Request $request){
if($request->input('id') != $request->input('folder')){
$thisFolder = Folder::where('id', '=', $request->input('id'))->first();
if($request->input('folder') === 'moveUp'){
$newFolder = Folder::where('id', '=', $thisFolder->folder_id)->first();
$newFolder = $newFolder->folder_id;
}else{
$newFolder = $request->input('folder');
}
$thisFolder->folder_id = $newFolder;
$thisFolder->save();
}
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function folderDelete(Request $request){
$validatedData = $request->validate([
'id' => 'numeric',
]);
$removeFolderService = new RemoveFolderService();
$removeFolderService->folderDelete($request->input('id'), $request->input('thisFolder'));
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function fileAdd(Request $request){
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
if($request->hasFile('file')){
$file = $request->file('file');
$path = $file->path();
$oryginalName = $file->getClientOriginalName();
if(!empty($mediaFolder)){
$mediaFolder->addMedia($path)->usingName($oryginalName)->toMediaCollection();

}
}
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function file(Request $request){
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
return response()->json(array(
'id' => $request->input('id'),
'name' => $media['name'],
'realName' => $media['file_name'],
'url' => $media->getUrl(),
'mimeType' => $media['mime_type'],
'size' => $media['size'],
'createdAt' => substr($media['created_at'], 0, 10) . ' ' . substr($media['created_at'], 11, 19),
'updatedAt' => substr($media['updated_at'], 0, 10) . ' ' . substr($media['updated_at'], 11, 19),
));
}

public function fileDelete(Request $request){
$validatedData = $request->validate([
'id' => 'numeric',
]);
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
$media->delete();
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function fileUpdate(Request $request){
$validatedData = $request->validate([
'name' => 'required|min:1|max:256',
]);
$mediaFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
$media = $mediaFolder->getMedia()->where('id', $request->input('id'))->first();
$media->name = $request->input('name');
$media->save();
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

public function fileMove(Request $request){
$oldFolder = Folder::where('id', '=', $request->input('thisFolder'))->first();
$media = $oldFolder->getMedia()->where('id', $request->input('id'))->first();
if($oldFolder->folder_id != NULL && $request->input('folder') === 'moveUp'){
$newFolder = Folder::where('id', '=', $oldFolder->folder_id)->first();
}else{
$newFolder = Folder::where('id', '=', $request->input('folder'))->first();
}
$newFolder->addMedia($media->getPath())->usingName($media->name)->toMediaCollection();
$media->delete();
return redirect()->route('media.folder.index', ['id' => $request->input('thisFolder')]);
}

}
24 changes: 24 additions & 0 deletions app/Models/Folder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia\HasMedia;
use Spatie\MediaLibrary\HasMedia\HasMediaTrait;

class Folder extends Model implements HasMedia
{
use HasMediaTrait;

protected $table = 'folder';

/**
* Get the comments for the blog post.
*/
/*
public function media()
{
return $this->hasMany('App\Models\Media');
}
*/
}
38 changes: 38 additions & 0 deletions app/Services/RemoveFolderService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php
/*
16.12.2019
RolesService.php
*/

namespace App\Services;

use App\Models\Folder;

class REmoveFolderService{

public $foldersArray;

public function findFolderChildAnd($thisFolderId, $thisFolder){
array_push($this->foldersArray, $thisFolderId);
$childs = Folder::where('folder_id', '=', $thisFolderId)->get();
if(!empty($childs)){
foreach($childs as $child){
$this->findFolderChildAnd($child->id, $thisFolder);
}
}
}

public function folderDelete($id, $thisFolder){
$folder = Folder::where('id', '=', $id)->first();
if($folder->folder_id != NULL){
$this->foldersArray = array();
$this->findFolderChildAnd($id, $thisFolder);
foreach($this->foldersArray as $folderId){
$folder = Folder::where('id', '=', $folderId)->first();
$folder->delete();
}
}

}

}
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"fideloper/proxy": "^4.0",
"laravel/framework": "^6.0",
"laravel/tinker": "^1.0",
"spatie/laravel-medialibrary": "^7.0.0",
"spatie/laravel-permission": "^3.3"
},
"require-dev": {
Expand Down
Loading

2 comments on commit 4e38dc7

@X0rh0
Copy link

@X0rh0 X0rh0 commented on 4e38dc7 Feb 15, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This update cause migration error
Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'json null,custom_propertiesjson null,responsive_imagesjson null,order_' at line 1 (SQL: create table media (id bigint unsigned not null auto_increment primary key, model_type varchar(191) not null, model_id bigint unsigned not null, collection_name varchar(191) not null, name varchar(191) not null, file_name varchar(191) not null, mime_type varchar(191) null, disk varchar(191) not null, size bigint unsigned not null, manipulations json null, custom_properties json null, responsive_images json null, order_column int unsigned null, created_at timestamp null, updated_at timestamp null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')
`
unless commenting out those three migration lines:

`$table->json('manipulations')->nullable();

$table->json('custom_properties')->nullable();

$table->json('responsive_images')->nullable();`

@rakieta2015
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi,
You probably have an outdated version of the database.
From laravel documentation https://laravel.com/docs/6.x/database
We know that the minimum version of the MySQL is: 5.6+
Please check version of your database.

Please sign in to comment.