168 lines
5.4 KiB
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!");
|
|
}
|
|
}
|