162 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			162 lines
		
	
	
		
			5.0 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([
 | 
						|
            'type' => 'required|in:file,link',
 | 
						|
            'files' => 'nullable|array',
 | 
						|
            'files.*.title' => 'required|string|max:255',
 | 
						|
            'files.*.file' => 'required|file|mimes:doc,docx,xls,xlsx,pdf|max:20480',
 | 
						|
            'links' => 'nullable|array',
 | 
						|
            'links.*.title' => 'required|string|max:255',
 | 
						|
            'links.*.uri' => 'required|string|url',
 | 
						|
            'is_active' => 'required|boolean',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $documents = [];
 | 
						|
        
 | 
						|
        if ($request->type === "file") {
 | 
						|
            foreach ($request->file('files') as $index => $file) {
 | 
						|
                $path = $file['file']->store('uploads', 'public');
 | 
						|
                $documents[] = [
 | 
						|
                    'title' => $request->input("files.$index.title"),
 | 
						|
                    'type' => 'file',
 | 
						|
                    'uri' => "storage/{$path}",
 | 
						|
                    'is_active' => $request->is_active,
 | 
						|
                    'created_at' => now(),
 | 
						|
                    'updated_at' => now(),
 | 
						|
                ];
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            foreach ($request->links as $link) {
 | 
						|
                $documents[] = [
 | 
						|
                    'title' => $link['title'],
 | 
						|
                    'type' => 'link',
 | 
						|
                    'uri' => $link['uri'],
 | 
						|
                    'is_active' => $request->is_active,
 | 
						|
                    'created_at' => now(),
 | 
						|
                    'updated_at' => now(),
 | 
						|
                ];
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        if (!empty($documents)) {
 | 
						|
            Document::insert($documents);
 | 
						|
        }
 | 
						|
 | 
						|
        return AbstractController::ResultSuccess($documents, "Documents 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|url',
 | 
						|
            'file' => 'nullable|file|mimes:doc,docx,xls,xlsx,pdf|max:20480',
 | 
						|
            'existing_file' => 'nullable|string',
 | 
						|
            'is_active' => 'required|boolean',
 | 
						|
        ]);
 | 
						|
 | 
						|
        $document = Document::find($request->input('id'));
 | 
						|
        if (!$document) {
 | 
						|
            return AbstractController::ResultError("Document not found.");
 | 
						|
        }
 | 
						|
 | 
						|
        if ($request->type === "file") {
 | 
						|
            $uri = $request->existing_file;
 | 
						|
 | 
						|
            if ($request->hasFile('file')) {
 | 
						|
                $filePath = str_replace('storage/', 'public/', $request->existing_file);
 | 
						|
                if (Storage::exists($filePath)) {
 | 
						|
                    Storage::delete($filePath);
 | 
						|
                }
 | 
						|
 | 
						|
                $path = $request->file('file')->store('uploads', 'public');
 | 
						|
                $uri = "storage/{$path}";
 | 
						|
            }
 | 
						|
 | 
						|
            $document->update([
 | 
						|
                'title' => $request->title,
 | 
						|
                'type' => $request->type,
 | 
						|
                'uri' => $uri,
 | 
						|
                'is_active' => $request->is_active,
 | 
						|
            ]);
 | 
						|
 | 
						|
            return AbstractController::ResultSuccess($document, "Document updated successfully!");
 | 
						|
        }
 | 
						|
 | 
						|
        $document->update([
 | 
						|
            'title' => $request->title,
 | 
						|
            'type' => $request->type,
 | 
						|
            'uri' =>  $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") {
 | 
						|
            $filePath = str_replace('storage/', 'public/', $document->uri);
 | 
						|
            if (Storage::exists($filePath)) {
 | 
						|
                Storage::delete($filePath);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $document->delete();
 | 
						|
        return AbstractController::ResultSuccess("Document deleted successfully!");
 | 
						|
    }
 | 
						|
}
 |