File "ContactInquiryController.php"
Full Path: /home/trinadezambia/public_html/admin_panel/app/Http/Controllers/ContactInquiryController.php
File size: 7.22 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers;
use App\Models\ContactInquiry;
use App\Models\School;
use App\Services\ResponseService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\Eloquent\Builder;
use App\Repositories\ContactInquiry\ContactInquiryInterface;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use App\Services\BootstrapTableService;
class ContactInquiryController extends Controller
{
protected $contactInquiry;
public function __construct(ContactInquiryInterface $contactInquiry)
{
$this->contactInquiry = $contactInquiry;
}
public function index()
{
ResponseService::noPermissionThenRedirect('contact-inquiry-list');
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
return view('contact-inquiry.index');
}
public function show(Request $request)
{
ResponseService::noPermissionThenRedirect('contact-inquiry-list');
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
$offset = $request->input('offset', 0);
$limit = $request->input('limit', 10);
$sort = $request->input('sort', 'id');
$order = $request->input('order', 'DESC');
// Normalize the showDeleted parameter to a boolean
// The bootstrap table sends this as a string - "0" or "1"
$showDeleted = in_array(request('show_deleted', 0), [true, 1, '1', 'true'], true);
if (Auth::user() && Auth::user()->hasRole('Super Admin')) {
$sql = ContactInquiry::query();
} else {
$sql = ContactInquiry::query();
}
// Apply the onlyTrashed filter if needed
if ($showDeleted) {
$sql = $sql->onlyTrashed();
}
if (!empty($request->status)) {
$sql->where('status', $request->status);
}
if (!empty($request->search)) {
$sql->where(function ($query) use ($request) {
$query->where('name', 'LIKE', "%$request->search%")
->orWhere('email', 'LIKE', "%$request->search%");
});
}
$total = $sql->count();
if ($offset >= $total && $total > 0) {
$lastPage = floor(($total - 1) / $limit) * $limit; // calculate last page offset
$offset = $lastPage;
}
$res = $sql->orderBy($sort, $order)
->skip($offset)
->take($limit)
->get();
$bulkData['total'] = $total;
$rows = array();
$no = $offset + 1;
foreach ($res as $row) {
$operate = '';
$tempRow = $row->toArray();
$tempRow['no'] = $no++;
// Determine which buttons to show based on delete status
if ($showDeleted) {
$operate = BootstrapTableService::restoreButton(route('contact-inquiry.restore', $row->id));
$operate .= BootstrapTableService::trashButton(route('contact-inquiry.destroy', $row->id));
} else {
$operate .= BootstrapTableService::deleteButton(route('contact-inquiry.trash', $row->id));
}
$tempRow['operate'] = $operate;
$rows[] = $tempRow;
}
$bulkData['rows'] = $rows;
return response()->json($bulkData);
}
/**
* Set the database connection for both Super Admin and School Admin
*/
private function setSchoolDatabase()
{
if (Auth::check() && Auth::user()->hasRole('Super Admin') && !Auth::user()->school_id) {
// Super Admin without school_id uses main database
DB::setDefaultConnection('mysql');
} else {
// School Admin or Super Admin with school_id uses school database
$school = Auth::user()->school;
if ($school) {
$school = School::find($school->id);
if ($school && $school->database_name) {
Config::set('database.connections.school.database', $school->database_name);
DB::purge('school');
DB::connection('school')->reconnect();
DB::setDefaultConnection('school');
}
}
}
}
/**
* Soft delete the specified contact inquiry.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function trash($id)
{
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
try {
$this->contactInquiry->builder()->where('id', $id)->delete();
ResponseService::successResponse('Contact Inquiry Moved to Trash Successfully');
} catch (\Exception $e) {
ResponseService::errorResponse('Error deleting contact inquiry: ' . $e->getMessage());
}
}
/**
* Restore a soft deleted contact inquiry.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function restore($id)
{
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
try {
$this->contactInquiry->builder()->onlyTrashed()->where('id', $id)->restore();
ResponseService::successResponse('Contact Inquiry Restored Successfully');
} catch (\Exception $e) {
ResponseService::errorResponse('Error Restoring Contact Inquiry: ' . $e->getMessage());
}
}
/**
* Permanently delete a soft deleted contact inquiry.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function forceDelete($id)
{
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
try {
$this->contactInquiry->builder()->onlyTrashed()->where('id', $id)->forceDelete();
ResponseService::successResponse('Contact Inquiry Permanently Deleted Successfully');
} catch (\Exception $e) {
ResponseService::errorResponse('Error Permanently Deleting Contact Inquiry: ' . $e->getMessage());
}
}
public function destroy($id)
{
// Check and set the correct database connection for both Super Admin and School Admin
$this->setSchoolDatabase();
try {
// Check if show_deleted is true (we're in the trash view)
$showDeleted = request('show_deleted');
if (!$showDeleted) {
$this->contactInquiry->builder()->onlyTrashed()->where('id', $id)->forceDelete();
$message = 'Contact Inquiry Permanently Deleted Successfully';
} else {
// Regular delete (soft delete)
$this->contactInquiry->builder()->where('id', $id)->delete();
$message = 'Contact Inquiry Moved to Trash Successfully';
}
ResponseService::successResponse($message);
} catch (\Exception $e) {
ResponseService::errorResponse('Error Processing Contact Inquiry: ' . $e->getMessage());
}
}
}