remove codeigniter
This commit is contained in:
@@ -17,9 +17,6 @@ class AttendanceCommentTemplateController extends Controller
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap URLs for admin UIs (legacy CodeIgniter parity + SPA).
|
||||
*/
|
||||
public function bootstrapUrls(): JsonResponse
|
||||
{
|
||||
return response()->json([
|
||||
@@ -133,10 +130,6 @@ class AttendanceCommentTemplateController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* CodeIgniter {@see \App\Controllers\View\AttendanceCommentTemplateController::save}
|
||||
* POST fields: id?, min_score, max_score, template_text, is_active (checkbox "on").
|
||||
*/
|
||||
public function legacySave(Request $request): JsonResponse
|
||||
{
|
||||
$id = $request->input('id');
|
||||
@@ -183,9 +176,6 @@ class AttendanceCommentTemplateController extends Controller
|
||||
return response()->json(['status' => 'success']);
|
||||
}
|
||||
|
||||
/**
|
||||
* CodeIgniter {@see \App\Controllers\View\AttendanceCommentTemplateController::delete}.
|
||||
*/
|
||||
public function legacyDelete(Request $request): JsonResponse
|
||||
{
|
||||
$id = $request->input('id');
|
||||
|
||||
@@ -48,7 +48,7 @@ class AuthController extends BaseApiController
|
||||
], 401);
|
||||
}
|
||||
|
||||
if (! ci_password_verify($password, (string) $user->password)) {
|
||||
if (! verify_stored_password($password, (string) $user->password)) {
|
||||
$security->handleFailedLogin($user, $email, (string) $ip);
|
||||
|
||||
return response()->json([
|
||||
|
||||
@@ -26,9 +26,7 @@ class AuthSessionController extends Controller
|
||||
private ApplicationUrlService $urls,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* CI `loginMask` — login page bootstrap / redirect when already authenticated.
|
||||
*/
|
||||
/** Returns login bootstrap state for the web portal. */
|
||||
public function loginMask(Request $request): JsonResponse
|
||||
{
|
||||
$redirectTo = $this->sessionAuth->sanitizeRedirectTarget(
|
||||
@@ -77,9 +75,7 @@ class AuthSessionController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* CI `login` — POST /user/login.
|
||||
*/
|
||||
/** Creates a web session from the submitted credentials. */
|
||||
public function login(LoginSessionRequest $request): JsonResponse
|
||||
{
|
||||
$email = (string) $request->validated('email');
|
||||
@@ -116,7 +112,7 @@ class AuthSessionController extends Controller
|
||||
], 403);
|
||||
}
|
||||
|
||||
if (! ci_password_verify($password, (string) $user->password)) {
|
||||
if (! verify_stored_password($password, (string) $user->password)) {
|
||||
$this->security->handleFailedLogin($user, $email, $ip);
|
||||
|
||||
return response()->json([
|
||||
@@ -153,9 +149,7 @@ class AuthSessionController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* CI `logout` — GET /logout.
|
||||
*/
|
||||
/** Closes the current web session. */
|
||||
public function logout(Request $request): JsonResponse
|
||||
{
|
||||
$userId = Auth::guard('web')->id();
|
||||
@@ -174,9 +168,7 @@ class AuthSessionController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* CI `selectRole` — GET /select-role.
|
||||
*/
|
||||
/** Returns the available post-login roles for the current user. */
|
||||
public function selectRole(Request $request): JsonResponse
|
||||
{
|
||||
if (! Auth::guard('web')->check()) {
|
||||
@@ -207,9 +199,7 @@ class AuthSessionController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* CI `setRole` — POST /set-role.
|
||||
*/
|
||||
/** Stores the selected post-login role in session state. */
|
||||
public function setRole(SetRoleSessionRequest $request): JsonResponse
|
||||
{
|
||||
if (! Auth::guard('web')->check()) {
|
||||
|
||||
@@ -4,7 +4,7 @@ namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Http\Controllers\Api\Core\BaseApiController;
|
||||
use App\Http\Resources\Auth\RegisterResource;
|
||||
use App\Services\Auth\CodeIgniterApiRegistrationService;
|
||||
use App\Services\Auth\ApiRegistrationService;
|
||||
use App\Services\Auth\RegistrationCaptchaService;
|
||||
use App\Services\Auth\RegistrationService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
@@ -32,9 +32,9 @@ class RegisterController extends BaseApiController
|
||||
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
// CodeIgniter-style JSON register (POST api/v1/register): password + no captcha field.
|
||||
// Support direct JSON registration when the SPA skips the captcha bootstrap step.
|
||||
if (! $request->has('captcha') && $request->filled('password')) {
|
||||
return app(CodeIgniterApiRegistrationService::class)->registerResponse($request);
|
||||
return app(ApiRegistrationService::class)->registerResponse($request);
|
||||
}
|
||||
|
||||
if (app()->runningUnitTests() && $request->header('X-Debug-Request') === '1') {
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
namespace App\Http\Controllers\Api\Auth;
|
||||
|
||||
use App\Config\SessionTimeout;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\ApplicationUrlService;
|
||||
use App\Support\SessionTimeoutConfig;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Auth;
|
||||
*/
|
||||
class SessionTimeoutController extends Controller
|
||||
{
|
||||
/** CI-compatible session key */
|
||||
/** Shared session key for last-activity tracking. */
|
||||
private const SESSION_KEY = 'last_activity';
|
||||
|
||||
public function __construct(
|
||||
@@ -23,15 +23,15 @@ class SessionTimeoutController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* CI nested routes: SessionController::getTimeoutConfig shape (URLs point at this app).
|
||||
* Returns timeout metadata for the web portal.
|
||||
*/
|
||||
public function getTimeoutConfig(): JsonResponse
|
||||
{
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'timeout' => SessionTimeout::TIMEOUT_DURATION,
|
||||
'warning_time' => SessionTimeout::WARNING_THRESHOLD,
|
||||
'check_interval' => SessionTimeout::CHECK_INTERVAL,
|
||||
'timeout' => SessionTimeoutConfig::TIMEOUT_DURATION,
|
||||
'warning_time' => SessionTimeoutConfig::WARNING_THRESHOLD,
|
||||
'check_interval' => SessionTimeoutConfig::CHECK_INTERVAL,
|
||||
'logout_url' => $this->urls->webLogoutUrl(),
|
||||
'keep_alive_url' => $this->urls->webSessionPingUrl(),
|
||||
'check_url' => $this->urls->webSessionCheckTimeoutUrl(),
|
||||
@@ -49,20 +49,20 @@ class SessionTimeoutController extends Controller
|
||||
$lastActivity = (int) $session->get(self::SESSION_KEY);
|
||||
$elapsed = time() - $lastActivity;
|
||||
|
||||
if ($elapsed > SessionTimeout::TIMEOUT_DURATION) {
|
||||
if ($elapsed > SessionTimeoutConfig::TIMEOUT_DURATION) {
|
||||
return $this->expireSession($request);
|
||||
}
|
||||
|
||||
if ($elapsed > SessionTimeout::WARNING_THRESHOLD) {
|
||||
if ($elapsed > SessionTimeoutConfig::WARNING_THRESHOLD) {
|
||||
return response()->json([
|
||||
'status' => 'warning',
|
||||
'time_remaining' => SessionTimeout::TIMEOUT_DURATION - $elapsed,
|
||||
'time_remaining' => SessionTimeoutConfig::TIMEOUT_DURATION - $elapsed,
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'status' => 'active',
|
||||
'time_remaining' => SessionTimeout::TIMEOUT_DURATION - $elapsed,
|
||||
'time_remaining' => SessionTimeoutConfig::TIMEOUT_DURATION - $elapsed,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ class SessionTimeoutController extends Controller
|
||||
$session = $request->session();
|
||||
|
||||
if (! $session->has(self::SESSION_KEY)
|
||||
|| (time() - (int) $session->get(self::SESSION_KEY)) > SessionTimeout::TIMEOUT_DURATION) {
|
||||
|| (time() - (int) $session->get(self::SESSION_KEY)) > SessionTimeoutConfig::TIMEOUT_DURATION) {
|
||||
return $this->expireSession($request);
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ class SessionTimeoutController extends Controller
|
||||
|
||||
return response()->json([
|
||||
'status' => 'active',
|
||||
'time_remaining' => SessionTimeout::TIMEOUT_DURATION,
|
||||
'time_remaining' => SessionTimeoutConfig::TIMEOUT_DURATION,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class BadgeScanController extends BaseApiController
|
||||
}
|
||||
|
||||
/**
|
||||
* Public kiosk endpoint — POST JSON or form (legacy CI RFIDController::process).
|
||||
* Public kiosk endpoint — POST JSON or form (legacy RFIDController::process).
|
||||
*/
|
||||
public function scan(Request $request): JsonResponse
|
||||
{
|
||||
@@ -44,7 +44,7 @@ class BadgeScanController extends BaseApiController
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticated scan log listing (legacy CI RFIDController::log).
|
||||
* Authenticated scan log listing (legacy RFIDController::log).
|
||||
*/
|
||||
public function logs(): JsonResponse
|
||||
{
|
||||
|
||||
@@ -2,276 +2,8 @@
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Api\CiRequestAdapter;
|
||||
use App\Models\User;
|
||||
use Illuminate\Contracts\Validation\Validator as ValidatorContract;
|
||||
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use App\Http\Controllers\Api\Core\BaseApiController as CoreBaseApiController;
|
||||
|
||||
class BaseApiController extends Controller
|
||||
class BaseApiController extends CoreBaseApiController
|
||||
{
|
||||
protected Request $laravelRequest;
|
||||
protected CiRequestAdapter $request;
|
||||
protected ValidatorContract|null $validator = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->laravelRequest = request();
|
||||
$this->request = new CiRequestAdapter($this->laravelRequest);
|
||||
}
|
||||
|
||||
protected function success($data = null, string $message = 'Success', int $code = Response::HTTP_OK): JsonResponse
|
||||
{
|
||||
return response()->json([
|
||||
'status' => true,
|
||||
'message' => $message,
|
||||
'data' => $data,
|
||||
], $code);
|
||||
}
|
||||
|
||||
protected function error(string $message = 'An error occurred', int $code = Response::HTTP_BAD_REQUEST, ?array $errors = null): JsonResponse
|
||||
{
|
||||
$payload = [
|
||||
'status' => false,
|
||||
'message' => $message,
|
||||
];
|
||||
if (!empty($errors)) {
|
||||
$payload['errors'] = $errors;
|
||||
}
|
||||
|
||||
return response()->json($payload, $code);
|
||||
}
|
||||
|
||||
protected function respondSuccess($data = null, string $message = 'Success', int $code = Response::HTTP_OK): JsonResponse
|
||||
{
|
||||
return $this->success($data, $message, $code);
|
||||
}
|
||||
|
||||
protected function respondCreated($data = null, string $message = 'Resource created successfully'): JsonResponse
|
||||
{
|
||||
return $this->success($data, $message, Response::HTTP_CREATED);
|
||||
}
|
||||
|
||||
protected function respondDeleted($data = null, string $message = 'Resource deleted successfully'): JsonResponse
|
||||
{
|
||||
return $this->success($data, $message, Response::HTTP_OK);
|
||||
}
|
||||
|
||||
protected function respondError(string $message = 'An error occurred', int $code = Response::HTTP_BAD_REQUEST): JsonResponse
|
||||
{
|
||||
return $this->error($message, $code);
|
||||
}
|
||||
|
||||
protected function respondValidationError(array $errors, string $message = 'Validation failed'): JsonResponse
|
||||
{
|
||||
return $this->error($message, Response::HTTP_UNPROCESSABLE_ENTITY, $errors);
|
||||
}
|
||||
|
||||
protected function validateRequest(array $data, array $rules): array
|
||||
{
|
||||
$normalized = [];
|
||||
foreach ($rules as $field => $ruleSet) {
|
||||
$normalized[$field] = $this->normalizeRules($ruleSet);
|
||||
}
|
||||
|
||||
$validator = Validator::make($data, $normalized);
|
||||
$this->validator = $validator;
|
||||
|
||||
if ($validator->fails()) {
|
||||
return $validator->errors()->toArray();
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
protected function validate(array $rules): bool
|
||||
{
|
||||
$payload = $this->payloadData();
|
||||
$errors = $this->validateRequest($payload, $rules);
|
||||
return empty($errors);
|
||||
}
|
||||
|
||||
protected function payloadData(): array
|
||||
{
|
||||
$json = json_decode($this->laravelRequest->getContent() ?: '', true);
|
||||
if (is_array($json)) {
|
||||
return $json;
|
||||
}
|
||||
return array_merge($this->laravelRequest->query->all(), $this->laravelRequest->request->all());
|
||||
}
|
||||
|
||||
protected function normalizeRules(array|string $ruleSet): array|string
|
||||
{
|
||||
if (is_array($ruleSet)) {
|
||||
return $ruleSet;
|
||||
}
|
||||
$parts = explode('|', $ruleSet);
|
||||
$result = [];
|
||||
foreach ($parts as $part) {
|
||||
$part = trim($part);
|
||||
if ($part === '') {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^max_length\\[(\\d+)\\]$/', $part, $m)) {
|
||||
$result[] = 'max:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^min_length\\[(\\d+)\\]$/', $part, $m)) {
|
||||
$result[] = 'min:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^in_list\\[(.+)\\]$/', $part, $m)) {
|
||||
$result[] = 'in:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^greater_than_equal_to\\[(.+)\\]$/', $part, $m)) {
|
||||
$result[] = 'gte:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^less_than_equal_to\\[(.+)\\]$/', $part, $m)) {
|
||||
$result[] = 'lte:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^valid_date\\[(.+)\\]$/', $part, $m)) {
|
||||
$result[] = 'date_format:' . $m[1];
|
||||
continue;
|
||||
}
|
||||
if ($part === 'valid_email') {
|
||||
$result[] = 'email';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'permit_empty') {
|
||||
$result[] = 'nullable';
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^is_unique\\[([^\\.]+)\\.([^\\]]+)\\]$/', $part, $m)) {
|
||||
$result[] = 'unique:' . $m[1] . ',' . $m[2];
|
||||
continue;
|
||||
}
|
||||
if ($part === 'string') {
|
||||
$result[] = 'string';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'integer') {
|
||||
$result[] = 'integer';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'numeric') {
|
||||
$result[] = 'numeric';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'required') {
|
||||
$result[] = 'required';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'alpha_numeric') {
|
||||
$result[] = 'alpha_num';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'in_array') {
|
||||
$result[] = 'in_array';
|
||||
continue;
|
||||
}
|
||||
if ($part === 'valid_url') {
|
||||
$result[] = 'url';
|
||||
continue;
|
||||
}
|
||||
if (strpos($part, 'max_size') === 0) {
|
||||
$result[] = str_replace('max_size', 'max', $part);
|
||||
continue;
|
||||
}
|
||||
$result[] = $part;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function paginate($source, int $page = 1, int $perPage = 20): array
|
||||
{
|
||||
$page = max(1, $page);
|
||||
$perPage = max(1, $perPage);
|
||||
$offset = ($page - 1) * $perPage;
|
||||
|
||||
if ($source instanceof EloquentBuilder || $source instanceof \Illuminate\Database\Query\Builder) {
|
||||
$total = $source->toBase()->getCountForPagination();
|
||||
$items = $source->offset($offset)->limit($perPage)->get()->toArray();
|
||||
} elseif (is_array($source)) {
|
||||
$total = count($source);
|
||||
$items = array_slice($source, $offset, $perPage);
|
||||
} else {
|
||||
return [
|
||||
'data' => [],
|
||||
'pagination' => [
|
||||
'current_page' => $page,
|
||||
'per_page' => $perPage,
|
||||
'total' => 0,
|
||||
'total_pages' => 0,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
return [
|
||||
'data' => array_values($items),
|
||||
'pagination' => [
|
||||
'current_page' => $page,
|
||||
'per_page' => $perPage,
|
||||
'total' => $total,
|
||||
'total_pages' => (int) ceil($total / $perPage),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
protected function getCurrentUserId(): ?int
|
||||
{
|
||||
$userId = (int) (auth()->id() ?? 0);
|
||||
return $userId > 0 ? $userId : null;
|
||||
}
|
||||
|
||||
protected function getCurrentUser(): ?object
|
||||
{
|
||||
$userId = $this->getCurrentUserId();
|
||||
if (!$userId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$user = app(User::class);
|
||||
$row = $user->find($userId);
|
||||
if (!$row) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$name = trim(($row['firstname'] ?? '') . ' ' . ($row['lastname'] ?? ''));
|
||||
if ($name === '') {
|
||||
$name = $row['email'] ?? 'User #' . $userId;
|
||||
}
|
||||
|
||||
try {
|
||||
$roles = DB::table('user_roles ur')
|
||||
->select('LOWER(r.name) AS name')
|
||||
->join('roles r', 'r.id', '=', 'ur.role_id')
|
||||
->where('ur.user_id', $userId)
|
||||
->whereNull('ur.deleted_at')
|
||||
->pluck('name')
|
||||
->map(fn($name) => strtolower((string) $name))
|
||||
->unique()
|
||||
->values()
|
||||
->toArray();
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('Unable to load user roles: ' . $e->getMessage());
|
||||
$roles = [];
|
||||
}
|
||||
|
||||
return (object) [
|
||||
'id' => (int) $userId,
|
||||
'name' => $name,
|
||||
'email' => $row['email'] ?? null,
|
||||
'roles' => $roles,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
class CiRequestAdapter
|
||||
{
|
||||
public function __construct(protected Request $request)
|
||||
{
|
||||
}
|
||||
|
||||
public function getGet(string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $this->request->query->all();
|
||||
}
|
||||
return $this->request->query->get($key, $default);
|
||||
}
|
||||
|
||||
public function getPost(string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $this->request->request->all();
|
||||
}
|
||||
return $this->request->request->get($key, $default);
|
||||
}
|
||||
|
||||
public function getJSON(bool $assoc = false)
|
||||
{
|
||||
$content = $this->request->getContent();
|
||||
if ($content === '') {
|
||||
return $assoc ? [] : null;
|
||||
}
|
||||
return json_decode($content, $assoc);
|
||||
}
|
||||
|
||||
public function getVar(string $key, $default = null)
|
||||
{
|
||||
return $this->request->input($key, $default);
|
||||
}
|
||||
|
||||
public function getHeader(string $key)
|
||||
{
|
||||
return $this->request->headers->get($key);
|
||||
}
|
||||
|
||||
public function getHeaderLine(string $key)
|
||||
{
|
||||
return $this->request->header($key);
|
||||
}
|
||||
|
||||
public function getFile(string $key)
|
||||
{
|
||||
return $this->request->file($key);
|
||||
}
|
||||
|
||||
public function getRawInput(): string
|
||||
{
|
||||
return $this->request->getContent();
|
||||
}
|
||||
|
||||
public function all(): array
|
||||
{
|
||||
return array_merge(
|
||||
$this->request->query->all(),
|
||||
$this->request->request->all(),
|
||||
$this->request->json()->all()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -16,13 +16,11 @@ use Symfony\Component\HttpFoundation\Response;
|
||||
class BaseApiController extends Controller
|
||||
{
|
||||
protected Request $laravelRequest;
|
||||
protected CiRequestAdapter $request;
|
||||
protected ValidatorContract|null $validator = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->laravelRequest = request();
|
||||
$this->request = new CiRequestAdapter($this->laravelRequest);
|
||||
}
|
||||
|
||||
protected function success($data = null, string $message = 'Success', int $code = Response::HTTP_OK): JsonResponse
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\Core;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CiRequestAdapter
|
||||
{
|
||||
public function __construct(protected Request $request)
|
||||
{
|
||||
}
|
||||
|
||||
public function getGet(string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $this->request->query->all();
|
||||
}
|
||||
return $this->request->query->get($key, $default);
|
||||
}
|
||||
|
||||
public function getPost(string $key = null, $default = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return $this->request->request->all();
|
||||
}
|
||||
return $this->request->request->get($key, $default);
|
||||
}
|
||||
|
||||
public function getJSON(bool $assoc = false)
|
||||
{
|
||||
$content = $this->request->getContent();
|
||||
if ($content === '') {
|
||||
return $assoc ? [] : null;
|
||||
}
|
||||
return json_decode($content, $assoc);
|
||||
}
|
||||
|
||||
public function getVar(string $key, $default = null)
|
||||
{
|
||||
return $this->request->input($key, $default);
|
||||
}
|
||||
|
||||
public function getHeader(string $key)
|
||||
{
|
||||
return $this->request->headers->get($key);
|
||||
}
|
||||
|
||||
public function getHeaderLine(string $key)
|
||||
{
|
||||
return $this->request->header($key);
|
||||
}
|
||||
|
||||
public function getFile(string $key)
|
||||
{
|
||||
return $this->request->file($key);
|
||||
}
|
||||
|
||||
public function getRawInput(): string
|
||||
{
|
||||
return $this->request->getContent();
|
||||
}
|
||||
|
||||
public function all(): array
|
||||
{
|
||||
return array_merge(
|
||||
$this->request->query->all(),
|
||||
$this->request->request->all(),
|
||||
$this->request->json()->all()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,25 +4,18 @@ namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Api\BaseApiController;
|
||||
use App\Models\Stats;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class StatsController extends BaseApiController
|
||||
{
|
||||
protected Stats $stats;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->stats = model(Stats::class);
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
try {
|
||||
$stats = $this->stats->findAll();
|
||||
$stats = Stats::query()->get()->toArray();
|
||||
return $this->success($stats, 'Statistics retrieved successfully');
|
||||
} catch (\Throwable $e) {
|
||||
log_message('error', 'Stats retrieval error: ' . $e->getMessage());
|
||||
Log::error('Stats retrieval error: '.$e->getMessage());
|
||||
return $this->respondError('Failed to retrieve statistics', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ use Illuminate\Http\JsonResponse;
|
||||
|
||||
class AccessDeniedController extends Controller
|
||||
{
|
||||
/** CI route: GET /access_denied */
|
||||
/** legacy route: GET /access_denied */
|
||||
public function accessDenied(): JsonResponse
|
||||
{
|
||||
return response()->json([
|
||||
|
||||
@@ -19,7 +19,7 @@ class HealthController extends BaseApiController
|
||||
$payload = $this->service->check();
|
||||
$status = $payload['ok'] ? Response::HTTP_OK : Response::HTTP_SERVICE_UNAVAILABLE;
|
||||
|
||||
// CodeIgniter admin/API health returns a flat JSON body (no Laravel success envelope).
|
||||
// legacy admin/API health returns a flat JSON body (no Laravel success envelope).
|
||||
return response()->json($payload, $status);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,25 +4,18 @@ namespace App\Http\Controllers\Api\System;
|
||||
|
||||
use App\Http\Controllers\Api\Core\BaseApiController;
|
||||
use App\Models\Stats;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class StatsController extends BaseApiController
|
||||
{
|
||||
protected Stats $stats;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->stats = model(Stats::class);
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
try {
|
||||
$stats = $this->stats->findAll();
|
||||
$stats = Stats::query()->get()->toArray();
|
||||
return $this->success($stats, 'Statistics retrieved successfully');
|
||||
} catch (\Throwable $e) {
|
||||
log_message('error', 'Stats retrieval error: ' . $e->getMessage());
|
||||
Log::error('Stats retrieval error: '.$e->getMessage());
|
||||
return $this->respondError('Failed to retrieve statistics', Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
|
||||
/**
|
||||
* CodeIgniter {@see \App\Controllers\ProofreadController} — LanguageTool proxy for grading UI.
|
||||
* legacy {@see \App\Controllers\ProofreadController} — LanguageTool proxy for grading UI.
|
||||
*/
|
||||
class ProofreadController extends Controller
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user