ManagementSystem/BACKEND/Modules/Admin/app/Http/Controllers/DocumentController.php

168 lines
5.4 KiB
PHP

<?php
namespace Modules\Admin\app\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Traits\HasFilterRequest;
use App\Traits\HasOrderByRequest;
use App\Traits\HasSearchRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Modules\Admin\app\Models\Document;
class DocumentController extends Controller
{
use HasOrderByRequest;
use HasFilterRequest;
use HasSearchRequest;
public function all(Request $request)
{
$documents = new Document;
// Order by
$this->orderByRequest($documents, $request);
$documents->orderBy('title', 'asc');
// Filter
$this->filterRequest(
builder: $documents,
request: $request,
filterKeys: [
'title' => self::F_TEXT,
]
);
$this->searchRequest(
builder: $documents,
value: $request->get('search'),
fields: [
'title',
]
);
$responseData = $documents->get();
return AbstractController::ResultSuccess($responseData);
}
public function create(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'type' => 'required|in:file,link',
'uri' => 'nullable|array',
'uri.*' => 'nullable|url',
'files' => 'nullable|array',
'files.*' => 'file|mimes:doc,docx,xls,xlsx,pdf|max:20480',
'is_active' => 'required|boolean',
]);
if($request->type == "file") {
$uploadedFiles = [];
if ($request->hasFile('files')) {
foreach ($request->file('files') as $file) {
$path = $file->store('uploads', options: 'public');
$uploadedFiles[] = "storage/{$path}";
}
}
$document = Document::create([
'title' => $request->title,
'type' => $request->type,
'uri' => implode(',', $uploadedFiles),
'is_active' => $request->is_active,
]);
return AbstractController::ResultSuccess($document, "Document created successfully!");
}
$document = Document::create([
'title' => $request->title,
'type' => $request->type,
'uri' => implode(',', $request->uri),
'is_active' => $request->is_active,
]);
return AbstractController::ResultSuccess($document, "Document created successfully!");
}
public function update(Request $request)
{
$request->validate([
'id' => 'required|exists:documents,id',
'title' => 'required|string|max:255',
'type' => 'required|in:file,link',
'uri' => 'nullable|array',
'uri.*' => 'nullable|url',
'files' => 'nullable|array',
'files.*' => 'file|mimes:doc,docx,xls,xlsx,pdf|max:20480',
'existing_files' => 'nullable|array',
'is_active' => 'required|boolean',
]);
$document = Document::find($request->input('id'));
if (!$document) {
return AbstractController::ResultError("Document not found.");
}
if ($request->type === "file") {
$existingFiles = explode(',', $document->uri);
$selectedExistingFiles = $request->existing_files ?? [];
$filesToDelete = array_diff($existingFiles, $selectedExistingFiles);
foreach ($filesToDelete as $file) {
$filePath = str_replace('storage/', 'public/', $file);
if (Storage::exists($filePath)) {
Storage::delete($filePath);
}
}
$uploadedFiles = $selectedExistingFiles;
if ($request->hasFile('files')) {
foreach ($request->file('files') as $file) {
$path = $file->store('uploads', 'public');
$uploadedFiles[] = "storage/{$path}";
}
}
$document->update([
'title' => $request->title,
'type' => $request->type,
'uri' => implode(',', $uploadedFiles),
'is_active' => $request->is_active,
]);
return AbstractController::ResultSuccess($document, "Document updated successfully!");
}
$document->update([
'title' => $request->title,
'type' => $request->type,
'uri' => implode(',', $request->uri),
'is_active' => $request->is_active,
]);
return AbstractController::ResultSuccess($document, "Document updated successfully!");
}
public function delete(Request $request)
{
$id = $request->input('id');
$document = Document::find($id);
if (!$document) {
return AbstractController::ResultError("Document not found");
}
if ($document->type === "file") {
$existingFiles = explode(',', $document->uri);
foreach ($existingFiles as $file) {
$filePath = str_replace('storage/', 'public/', $file);
if (Storage::exists($filePath)) {
Storage::delete($filePath);
}
}
}
$document->delete();
return AbstractController::ResultSuccess("Document deleted successfully!");
}
}