forked from aslan/applicant-site
101 lines
3.3 KiB
PHP
101 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Requests\admin\StoreDocumentRequest;
|
|
use App\Http\Requests\admin\UpdateDocumentRequest;
|
|
use App\Models\Admission;
|
|
use App\Models\Document;
|
|
|
|
use Illuminate\Contracts\View\Factory;
|
|
use Illuminate\Contracts\View\View;
|
|
use Illuminate\Foundation\Application;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class DocumentController extends Controller
|
|
{
|
|
public function index(): View|Application|Factory|\Illuminate\Contracts\Foundation\Application
|
|
{
|
|
$documents = Document::all();
|
|
return view('admin.documents.index', compact('documents'));
|
|
}
|
|
|
|
public function create(): View|Application|Factory|\Illuminate\Contracts\Foundation\Application
|
|
{
|
|
$admissions = Admission::pluck('name', 'id');
|
|
return view('admin.documents.create', compact('admissions'));
|
|
}
|
|
|
|
public function store(StoreDocumentRequest $request): RedirectResponse
|
|
{
|
|
$this->saveFile($request);
|
|
return redirect()->route('documents.index');
|
|
}
|
|
|
|
public function edit(Document $document)
|
|
{
|
|
$admissions = Admission::pluck('name', 'id');
|
|
return view('admin.documents.edit', compact('admissions', 'document'));
|
|
}
|
|
|
|
public function show(Document $document): View|Application|Factory|\Illuminate\Contracts\Foundation\Application
|
|
{
|
|
return view('admin.documents.show', compact('document'));
|
|
}
|
|
|
|
public function update(UpdateDocumentRequest $request, Document $document): RedirectResponse
|
|
{
|
|
$validated = $request->validated();
|
|
|
|
$document->name = $validated['name'];
|
|
$document->description = $validated['description'];
|
|
$document->position = $validated['position'];
|
|
$document->admission_id = $validated['admission_id'];
|
|
$document->save();
|
|
return redirect()->route('documents.index');
|
|
}
|
|
|
|
public function destroy(Document $document)
|
|
{
|
|
$document->delete();
|
|
return redirect()->route('documents.index');
|
|
}
|
|
|
|
public function download($id)
|
|
{
|
|
$file = (new Document())->find($id);
|
|
return Storage::url($file->url);
|
|
}
|
|
public function createFromAdmission(Admission $admission): View
|
|
{
|
|
$admissions = Admission::pluck('name', 'id');
|
|
$documents = Document::where('admission_id', '=', $admission->id)->get();
|
|
return view('admin.documents.create_from_admission', compact('admissions', 'admission', 'documents'));
|
|
}
|
|
|
|
public function storeFromAdmission(StoreDocumentRequest $request): RedirectResponse
|
|
{
|
|
$this->saveFile($request);
|
|
return redirect()->route('admissions.index');
|
|
}
|
|
|
|
private function saveFile(StoreDocumentRequest $request)
|
|
{
|
|
$fileName = $request->file('document')->getClientOriginalName();
|
|
$name = Storage::put('public', $request->file('document'));
|
|
|
|
$validated = $request->validated();
|
|
|
|
$document = new Document();
|
|
$document->name = $validated['name'];
|
|
$document->description = $validated['description'];
|
|
$document->file_name = $fileName;
|
|
$document->url = Storage::url($name);
|
|
$document->position = $validated['position'];
|
|
$document->admission_id = $validated['admission_id'];
|
|
$document->save();
|
|
}
|
|
}
|