raffles document uploader added / Free Resource Completed
This commit is contained in:
@@ -6,10 +6,13 @@ use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Str;
|
||||
use Modules\CCMS\Models\Country;
|
||||
use Modules\Document\Models\Document;
|
||||
use Modules\CCMS\Models\Service;
|
||||
use Modules\CCMS\Models\Test;
|
||||
use Modules\Document\Services\DocumentService;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
|
||||
class DocumentController extends Controller
|
||||
{
|
||||
@@ -33,39 +36,151 @@ class DocumentController extends Controller
|
||||
}
|
||||
|
||||
|
||||
public function dropzoneUpload(Request $request)
|
||||
public function destroy($id)
|
||||
{
|
||||
$request->validate([
|
||||
'model' => 'required|string',
|
||||
'file' => 'required|array',
|
||||
'file.*' => 'file|mimes:pdf,doc,docx,jpg,png|max:5120',
|
||||
'title' => 'nullable|string',
|
||||
try {
|
||||
$document = Document::findOrFail($id);
|
||||
if (File::exists('storage/' . $document->document_path)) {
|
||||
File::delete('storage/' . $document->document_path);
|
||||
}
|
||||
|
||||
$document->delete();
|
||||
|
||||
session()->flash('Document Deleted');
|
||||
return response()->json(['status' => true, 'msg' => 'Document Deleted']);
|
||||
|
||||
} catch (\Throwable $th) {
|
||||
session()->flash('error', $th->getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function uploadDocument(Request $request)
|
||||
{
|
||||
$isNumeric = is_numeric($request->title);
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'title' => $isNumeric ? 'required|exists:required_documents,id' : 'required|string',
|
||||
'model' => 'required',
|
||||
'document' => 'required|array',
|
||||
], [
|
||||
'title.required' => 'Document title is required!',
|
||||
'title.exists' => 'Document does not exists in record!',
|
||||
'document' => 'Please upload document first!',
|
||||
'model' => 'Please Select Category'
|
||||
]);
|
||||
|
||||
$parts = explode(':', $request->model);
|
||||
|
||||
if (count($parts) !== 2) {
|
||||
return response()->json(['error' => 'Invalid model format.'], 422);
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['status' => 422, 'errors' => $validator->errors()], 422);
|
||||
}
|
||||
|
||||
[$modelType, $modelId] = $parts;
|
||||
$modelClass = "App\\Models\\$modelType";
|
||||
try {
|
||||
|
||||
if (!class_exists($modelClass)) {
|
||||
return response()->json(['error' => 'Invalid model selected.'], 422);
|
||||
$modelValues = explode(':', $request->model);
|
||||
$modelClass = "Modules\\CCMS\\Models\\{$modelValues[0]}";
|
||||
|
||||
$model = $modelClass::findOrFail($modelValues[1]);
|
||||
|
||||
|
||||
foreach ($request->input('document', []) as $file) {
|
||||
$model->addToDocumentCollection(collectionName: 'uploads/document', file: $file, documentName: $request->title, referenceDocumentId: null);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'msg' => 'Document has been uploaded!',
|
||||
// 'view' => view('student::student.section.document.table', [
|
||||
// 'student' => $student,
|
||||
// ])->render(),
|
||||
], 200);
|
||||
} catch (\Throwable $th) {
|
||||
return response()->json([
|
||||
'status' => false,
|
||||
'msg' => $th->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$path = storage_path('tmp/uploads');
|
||||
|
||||
if (!file_exists($path)) {
|
||||
mkdir($path, 0777, true);
|
||||
}
|
||||
|
||||
$model = $modelClass::findOrFail($modelId);
|
||||
$file = $request->file('file');
|
||||
|
||||
foreach ($request->file('file') as $uploadedFile) {
|
||||
$path = $uploadedFile->store('documents');
|
||||
$name = uniqid() . '_' . trim($file->getClientOriginalName());
|
||||
|
||||
$model->documents()->create([
|
||||
'title' => $request->title ?? 'Untitled',
|
||||
'file_path' => $path,
|
||||
]);
|
||||
}
|
||||
$file->move($path, $name);
|
||||
|
||||
return response()->json(['success' => 'Files uploaded successfully']);
|
||||
return response()->json([
|
||||
'name' => $name,
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function getAllDocuments()
|
||||
{
|
||||
$model = Document::query()->latest();
|
||||
return DataTables::eloquent($model)
|
||||
->setRowClass('tableRow')
|
||||
->addColumn('name', function (Document $document) {
|
||||
$extension = $document->getExtension();
|
||||
$assetUrl = $document->getUrl();
|
||||
$html = $document->isImageFile()
|
||||
? "<div class='flex-shrink-0'>
|
||||
<div class='avatar-sm bg-light rounded p-1'>
|
||||
<a href='{$assetUrl}' data-fancybox='gallery' data-caption='{$document->title}'>
|
||||
<img src='{$assetUrl}' alt='' class='avatar-sm img-fluid d-block'>
|
||||
</a>
|
||||
</div>
|
||||
</div>"
|
||||
: "<div class='flex-shrink-0'>
|
||||
<div class='avatar-sm'>
|
||||
<a href='{$assetUrl}' data-fancybox='gallery' data-caption='{$document->title}'>
|
||||
<div class='avatar-title bg-" . getFileIcon($extension)[1] . "-subtle text-" . getFileIcon($extension)[1] . " fs-20 material-shadow rounded'>
|
||||
<i class='" . getFileIcon($extension)[0] . "'></i>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>";
|
||||
|
||||
return "<div class='d-flex align-items-center'>
|
||||
{$html} <div class='flex-grow-1 ms-3'>
|
||||
<h6 class='fs-12 mb-0'>{$document->title}</h6>
|
||||
</div>
|
||||
</div>";
|
||||
})
|
||||
->addColumn('type', function (Document $document) {
|
||||
return $document->getExtension();
|
||||
})
|
||||
->addColumn('size', function (Document $document) {
|
||||
return $document->getSize();
|
||||
})
|
||||
->editColumn('created_at', function (Document $document) {
|
||||
return getFormatted($document->created_at);
|
||||
})
|
||||
->addColumn('action', function (Document $document) {
|
||||
return view('document::document.partials.action', ['document' => $document]);
|
||||
})
|
||||
->rawColumns(['action', 'name', 'size'])
|
||||
->toJson();
|
||||
}
|
||||
|
||||
public function reorder(Request $request)
|
||||
{
|
||||
Document::chunkById(100, function (Collection $documents) use ($request) {
|
||||
foreach ($documents as $document) {
|
||||
foreach ($request->order as $order) {
|
||||
if ($order['id'] == $document->id) {
|
||||
$document->update(['order' => $order['position']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return response(['status' => true, 'message' => 'Reordered successfully'], 200);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user