/
home
/
corsairdevelopme
/
public_html
/
amplivo-console
/
app
/
Http
/
Controllers
/
Backend
/
Upload File
HOME
<?php namespace App\Http\Controllers\Backend; use App\Http\Controllers\Controller; use App\Models\Documents; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Gate; class DocumentsController extends Controller { protected $permissionPrefix; function __construct() { $permissionPrefix = $this->permissionPrefix = 'documents'; $this->middleware("permission:$permissionPrefix-list", ['only' => ['index', 'getDocuments']]); $this->middleware("permission:$permissionPrefix-create", ['only' => ['store']]); $this->middleware("permission:$permissionPrefix-edit",['only' => ['edit', 'update', 'updateStatus']]); $this->middleware("permission:$permissionPrefix-view", ['only' => ['show']]); $this->middleware("permission:$permissionPrefix-view-archive", ['only' => ['getArchiveDocuments']]); } // public function index(Request $request) { return view('backend.documents.index'); } public function getDocuments(Request $request) { $search = $request->filter; $filter = (array)json_decode($search); $sort = $request->sort ?: 'created_at'; $order = $request->order ?: 'desc'; $offset = $request->offset; $limit = $request->limit; $pageType = $request->page_type; $results = Documents::select('documents.*') ->whereIn('created_at', function ($query) { $query->select(\DB::raw('MAX(created_at)')) ->from('documents') ->groupBy('category'); })->with('amplivoUser')->when($search, function ($q) use ($filter) { foreach ($filter as $key => $item) { if ($key == 'created_at') { $dates = explode(' - ', $item); $startDate = createFromFormatCustom($dates[0]); $endDate = createFromFormatCustom($dates[1]); $q->whereDate('created_at', '>=', $startDate)->whereDate('created_at', '<=', $endDate); } else { $q->where($key, 'like', '%' . $item . '%'); } } }) // ->groupBy('category') ->when($sort, function ($q) use ($sort, $order) { if ($sort == 'created_at') { $q->orderBy('created_at', $order); } else { $q->orderBy($sort, $order); } }); $count = $results->count(); $row = $results->when($offset, function ($q) use ($offset) { $q->offset($offset); })->when($limit, function ($q) use ($limit) { $q->limit($limit); })->get()->toArray(); $index = $offset + 1; foreach ($row as $key => $item) { $editURL = "'" . route('admin.documents.edit', ['id' => basicEncrypt($item['id'])]) . "'"; $showURL = "'" . route('admin.documents.show', ['id' => basicEncrypt($item['id'])]) . "'"; $archiveURL = "'" . route('admin.documents.show', ['id' => basicEncrypt($item['id'])]) . "'"; $row[$key]['counter'] = $index; $row[$key]['action'] = ''; if (Gate::check('documents-edit')) { $row[$key]['action'] .= '<a id="edit" title="Edit" data-toggle="tooltip" data-placement="top" href="javascript:void(0);" onclick="editPageRecords(' . $editURL . ')" class="editBtn waves-effect waves-light btn btn-sm btn-success text-white me-2">'.renderIconHtml('edit').'Edit</a>'; } if (Gate::check('documents-view')) { $row[$key]['action'] .= '<a id="view" title="View" data-toggle="tooltip" data-placement="top" href="javascript:void(0);" onclick="viewDetails(' . $showURL . ')" class="editBtn waves-effect waves-light btn btn-sm btn-primary text-white me-2">'.renderIconHtml('view').'View</a>'; } if (Gate::check('documents-view-archive')) { $row[$key]['action'] .= '<a id="archive" title="View Archive" data-toggle="tooltip" data-placement="top" href="javascript:void(0);" onclick="viewArchiveDetails(\'' . route('admin.documents.getArchiveDocuments') . '\', \'' . $item['category'] . '\')" class="editBtn waves-effect waves-light btn btn-sm btn-warning text-white me-2">'.renderIconHtml('archive').'View Archive</a>'; } $row[$key]['title'] = $item['title']; $row[$key]['created_at'] = getDateWithIcon($item['created_at']); $index++; } if (count($row) == 0) { $count = 0; } return [ 'items' => $row, 'count' => $count, ]; } public function store(Request $request) { $request->validate([ 'upload_file' => ['required', 'file', 'mimes:pdf'], 'title' => ['required','max:255','alpha_dash_spaces'], 'category' => 'required' ], [ 'upload_file.mimes' => 'The upload file must be a PDF.', 'upload_file.required' => 'The Upload File field is required', 'title.required' => 'The Title field is required', 'category.required' => 'The Category field is required', ]); $exists = Documents::where('category', $request->category)->exists(); if($exists) { return response()->json(['success' => false,'msg' => 'The Category already exists','errors' => ['category' => ['The Category already exists.']]], 422); } if ($request->hasFile('upload_file')) { $uploadFile = $request->file('upload_file'); $name = time() . '.' . $uploadFile->getClientOriginalExtension(); $destinationPath = public_path('/upload/documents/'); if (!File::isDirectory($destinationPath)) { File::makeDirectory($destinationPath, 0777, true, true); } $uploadFile->move($destinationPath, $name); $filePath = '/upload/documents/' . $name; } $reqData = [ 'title' => $request->title, 'category' => $request->category, 'upload_file' => isset($filePath) ? $filePath : null, 'is_private' => $request->is_private ?? 1, 'created_by' => Auth::user()->id ]; $results = Documents::create($reqData); return response()->json(['success' => true, 'message' => 'Document created successfully.']); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $data['documents'] = Documents::find(basicDecrypt($id)); return view('backend.documents.edit', $data); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $id = basicDecrypt($id); $request->validate([ 'upload_file' => ['file', 'mimes:pdf'], 'title' => ['required','max:255','alpha_dash_spaces'], 'category' => 'required' ], [ 'upload_file.mimes' => 'The upload file must be a PDF.', 'upload_file.required' => 'The Upload File field is required', 'title.required' => 'The Title field is required', 'category.required' => 'The Category field is required', ]); $documents = Documents::find($id); if ($request->category != $documents->category) { // Check if the new category exists in the database $exists = Documents::where('category', $request->category)->exists(); if ($exists) { return response()->json(['success' => false, 'msg' => 'The Category already exists','errors' => ['category' => ['The category already exists.']]], 422); } } $filePath = $documents->upload_file; if ($request->hasFile('upload_file')) { $uploadFile = $request->file('upload_file'); $name = time() . '.' . $uploadFile->getClientOriginalExtension(); $destinationPath = public_path('/upload/documents/'); if (!File::isDirectory($destinationPath)) { File::makeDirectory($destinationPath, 0777, true, true); } $uploadFile->move($destinationPath, $name); $filePath = '/upload/documents/' . $name; if ($documents->category == $request->category) { $documents->update(['status' => 0]); } $newRecordData = [ 'title' => $request->title, 'category' => $request->category, 'upload_file' => $filePath, 'is_private' => $request->is_private ?? 1, 'updated_by' => Auth::user()->id, 'created_by' => $documents->created_by ]; Documents::create($newRecordData); } else { $input = [ 'title' => $request->title, 'category' => $request->category, 'is_private' => $request->is_private ?? 1, 'created_by' => $documents->created_by, 'status' => $request->status ]; $documents->update($input); } return response()->json([ 'success' => true, 'message' => 'Document updated successfully', ]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $id = basicDecrypt($id); $document = Documents::find($id); if (!$document) { return response()->json(['error' => 'Document not found'], 404); } return response()->json([ 'documents' => [ 'title' => $document->title, 'category' => $document->category, 'is_private' => $document->is_private, 'created_at' => getDateWithIcon($document->created_at), 'updated_at' => getDateWithIcon($document->updated_at), 'upload_file' => $document->upload_file, ] ]); } public function getArchiveDocuments(Request $request) { $search = $request->filter; $filter = (array)json_decode($search); $sort = $request->sort ?: 'created_at'; $order = $request->order ?: 'desc'; $offset = $request->offset ?: 0; $limit = $request->limit ?: 10; $category = $request->input('category'); // Build the query $query = Documents::where('status', 0) ->where('category', $category) ->when($search, function ($q) use ($filter) { foreach ($filter as $key => $item) { if ($key == 'created_at') { $dates = explode(' - ', $item); $startDate = createFromFormatCustom($dates[0]); $endDate = createFromFormatCustom($dates[1]); $q->whereDate('created_at', '>=', $startDate) ->whereDate('created_at', '<=', $endDate); } elseif ($key == 'status') { $q->where('status', $item == 'Active' ? 1 : 0); } else { $q->where($key, 'like', '%' . $item . '%'); } } }) ->when($sort, function ($q) use ($sort, $order) { $q->orderBy($sort, $order); }); // Get the total count of records $count = $query->count(); // Fetch the paginated results $row = $query->offset($offset) ->limit($limit) ->get() ->toArray(); // Process the results $index = $offset + 1; foreach ($row as $key => $item) { $editURL = route('admin.documents.edit', ['id' => basicEncrypt($item['id'])]); $showURL = route('admin.documents.show', ['id' => basicEncrypt($item['id'])]); $row[$key]['counter'] = $index; $row[$key]['action'] = ''; if (Gate::check('email-management-edit')) { $row[$key]['action'] .= '<a id="edit" title="View" data-toggle="tooltip" data-placement="top" href="javascript:void(0);" onclick="viewDetails(\'' . $showURL . '\')" class="editBtn waves-effect waves-light btn btn-sm btn-primary me-2"><i class="bi bi-eye"></i></a>'; } // Category mapping $categoryMapping = [ 1 => "Terms & Conditions", 2 => "Cookie Policy", 3 => "Disclaimer", 4 => "Company Details", 5 => "Privacy Policy" ]; $row[$key]['category'] = $categoryMapping[$item['category']] ?? 'Unknown'; $row[$key]['title'] = "<span class='w-100'>".$item['title']."</span>"; // Private/Public status $row[$key]['is_private'] = $item['is_private'] == 1 ? 'Public' : 'Private'; $row[$key]['upload_file'] = '<a href="'.$item['upload_file'].'" target="_blank">View Document</a>'; // Format date $row[$key]['created_at'] = getDateWithIcon($item['created_at']); $index++; } return [ 'items' => $row, 'count' => $count, ]; } }