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.
 
 
 
 
 

77 lines
2.5 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;
class FilesController extends Controller
{
private $fileableTypes = [
'projects' => 'App\Entities\Projects\Project',
];
public function index(Request $request, $fileableId)
{
$fileableType = $request->segment(1); // projects, features
$modelName = $this->getModelName($fileableType);
$modelShortName = $this->getModelShortName($modelName);
$model = $modelName::findOrFail($fileableId);
$files = $model->files;
return view($fileableType.'.files', [$modelShortName => $model, 'files' => $files]);
}
public function create(Request $request, $fileableId)
{
$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();
}
private function proccessPhotoUpload($data, $fileableType, $fileableId)
{
// dd(get_class_methods($data['files']));
$file = $data['files'];
// $fileName = md5(uniqid(rand(), true)).'.'.$file->getClientOriginalExtension();
$fileName = $file->hashName();
// dd($fileName);
$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')));
$file->storeAs('public/files', $fileName);
// $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());
}
}