You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

122 lines
3.9 KiB

<?php
namespace App\Http\Controllers\Projects;
use App\Entities\Projects\File;
use App\Http\Controllers\Controller;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use File as FileSystem;
class FilesController extends Controller
{
private $fileableTypes = [
'projects' => 'App\Entities\Projects\Project',
];
public function index(Request $request, $fileableId)
{
$editableFile = null;
$fileableType = $request->segment(1); // projects, features
$modelName = $this->getModelName($fileableType);
$modelShortName = $this->getModelShortName($modelName);
$model = $modelName::findOrFail($fileableId);
$files = $model->files;
if (in_array($request->get('action'), ['edit', 'delete']) && $request->has('id')) {
$editableFile = File::find($request->get('id'));
}
return view($fileableType.'.files', [$modelShortName => $model, 'files' => $files, 'editableFile' => $editableFile]);
}
public function create(Request $request, $fileableId)
{
$this->validate($request, [
'fileable_type' => 'required',
'file' => 'required|file|max:10000',
'title' => 'required|max:60',
'description' => 'nullable|max:255',
]);
$fileableExist = array_search($request->get('fileable_type'), $this->fileableTypes);
if ($fileableExist) {
$file = $this->proccessPhotoUpload($request->except('_token'), $request->get('fileable_type'), $fileableId);
if ($file->exists)
flash()->success('Upload file berhasil.');
else
flash()->error('Upload file gagal, coba kembali.');
} else
flash()->error('Upload file gagal, coba kembali.');
return back();
}
public function show($fileId)
{
$file = File::find($fileId);
if ($file && file_exists(storage_path('app/public/files/'.$file->filename))) {
$extension = FileSystem::extension('public/files/'.$file->filename);
return response()->download(storage_path('app/public/files/'.$file->filename), $file->title.'.'.$extension);
}
flash(trans('file.not_found'), 'danger');
if (\URL::previous() != \URL::current()) {
return back();
}
return redirect()->home();
}
public function update(Request $request, File $file)
{
$file->title = $request->get('title');
$file->description = $request->get('description');
$file->save();
flash(trans('file.updated'), 'success');
$resourceName = array_search($file->fileable_type, $this->fileableTypes);
return redirect()->route($resourceName.'.files', $file->fileable_id);
}
private function proccessPhotoUpload($data, $fileableType, $fileableId)
{
$file = $data['file'];
$fileName = $file->hashName();
$fileData['fileable_id'] = $fileableId;
$fileData['fileable_type'] = $fileableType;
$fileData['filename'] = $fileName;
$fileData['title'] = $data['title'];
$fileData['description'] = $data['description'];
\DB::beginTransaction();
// dd(is_dir(storage_path('app/public/files')));
if (env('APP_ENV') == 'testing') {
$file->store('public/files', 'avatar');
} else {
$file->store('public/files');
}
// $file->move(storage_path('app/public/files'));
$file = File::create($fileData);
\DB::commit();
return $file;
}
public function getModelName($fileableType)
{
return isset($this->fileableTypes[$fileableType]) ? $this->fileableTypes[$fileableType] : false;
}
public function getModelShortName($modelName)
{
return strtolower((new \ReflectionClass($modelName))->getShortName());
}
}