71 lines
1.9 KiB
PHP
71 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class DataTable
|
|
{
|
|
public static function isDataTableRequest(Request $request): bool
|
|
{
|
|
return $request->ajax() || $request->has('draw');
|
|
}
|
|
|
|
public static function draw(Request $request): int
|
|
{
|
|
return max(0, (int) $request->input('draw', 0));
|
|
}
|
|
|
|
public static function start(Request $request): int
|
|
{
|
|
return max(0, (int) $request->input('start', 0));
|
|
}
|
|
|
|
public static function length(Request $request, int $default = 25): int
|
|
{
|
|
$length = (int) $request->input('length', $default);
|
|
|
|
return $length > 0 ? $length : $default;
|
|
}
|
|
|
|
public static function globalSearch(Request $request): ?string
|
|
{
|
|
return self::normalize($request->input('search.value'));
|
|
}
|
|
|
|
public static function columnSearch(Request $request, int $index): ?string
|
|
{
|
|
return self::normalize($request->input("columns.$index.search.value"));
|
|
}
|
|
|
|
public static function order(Request $request, int $defaultIndex = 0, string $defaultDir = 'asc'): array
|
|
{
|
|
$index = (int) $request->input('order.0.column', $defaultIndex);
|
|
$dir = strtolower((string) $request->input('order.0.dir', $defaultDir)) === 'desc' ? 'desc' : 'asc';
|
|
|
|
return [$index, $dir];
|
|
}
|
|
|
|
public static function response(Request $request, int $recordsTotal, int $recordsFiltered, array $data): JsonResponse
|
|
{
|
|
return response()->json([
|
|
'draw' => self::draw($request),
|
|
'recordsTotal' => $recordsTotal,
|
|
'recordsFiltered' => $recordsFiltered,
|
|
'data' => $data,
|
|
]);
|
|
}
|
|
|
|
protected static function normalize(mixed $value): ?string
|
|
{
|
|
if (! is_string($value)) {
|
|
return null;
|
|
}
|
|
|
|
$value = trim($value);
|
|
|
|
return $value === '' ? null : $value;
|
|
}
|
|
}
|