File: /home/xedaptot/be.naniguide.com/app/Http/Controllers/Refactor/Admin/LogController.php
<?php
namespace App\Http\Controllers\Refactor\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\TrackingLog;
use App\Model\BounceLog;
use App\Model\OpenLog;
use App\Model\ClickLog;
use App\Model\FeedbackLog;
use App\Model\UnsubscribeLog;
class LogController extends Controller
{
protected $logTypes = [
'tracking' => ['model' => TrackingLog::class, 'icon' => 'send', 'color' => '1'],
'bounce' => ['model' => BounceLog::class, 'icon' => 'error', 'color' => '5'],
'open' => ['model' => OpenLog::class, 'icon' => 'eye', 'color' => '2'],
'click' => ['model' => ClickLog::class, 'icon' => 'click', 'color' => '3'],
'feedback' => ['model' => FeedbackLog::class, 'icon' => 'warning', 'color' => '4'],
'unsubscribe' => ['model' => UnsubscribeLog::class, 'icon' => 'unsubscribe', 'color' => '6'],
];
public function index(Request $request, $type)
{
if (!isset($this->logTypes[$type])) {
abort(404);
}
$config = $this->logTypes[$type];
$modelClass = $config['model'];
$stats = ['total' => $modelClass::count()];
return view('refactor.pages.admin.logs.index', compact('type', 'config', 'stats'));
}
public function listing(Request $request, $type)
{
if (!isset($this->logTypes[$type])) {
abort(404);
}
$config = $this->logTypes[$type];
$modelClass = $config['model'];
$query = $modelClass::query();
if ($request->keyword) {
$query = $query->where(function ($q) use ($request) {
$q->where('message_id', 'like', '%' . $request->keyword . '%');
if (\Schema::hasColumn($q->getModel()->getTable(), 'email')) {
$q->orWhere('email', 'like', '%' . $request->keyword . '%');
}
});
}
$items = $query->orderBy('created_at', 'desc')->paginate($request->per_page ?? 25);
return view('refactor.pages.admin.logs._list', compact('items', 'type', 'config'));
}
}