add all controllers logic

This commit is contained in:
root
2026-03-11 17:53:15 -04:00
parent 3e6c577085
commit 2ef71cc92b
421 changed files with 12009 additions and 5211 deletions
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests\Attendance;
use App\Http\Requests\ApiFormRequest;
class LateSlipLogIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'school_year' => ['nullable', 'string', 'max:9'],
'semester' => ['nullable', 'string', 'max:255'],
'q' => ['nullable', 'string', 'max:120'],
'date_from' => ['nullable', 'date'],
'date_to' => ['nullable', 'date'],
'sort_by' => ['nullable', 'string', 'in:id,slip_date,student_name,printed_at,updated_at'],
'sort_dir' => ['nullable', 'string', 'in:asc,desc'],
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:200'],
];
}
}
@@ -1,18 +0,0 @@
<?php
namespace App\Http\Requests\Auth;
use App\Http\Requests\ApiFormRequest;
class SessionTimeoutCheckRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [];
}
}
@@ -1,18 +0,0 @@
<?php
namespace App\Http\Requests\Auth;
use App\Http\Requests\ApiFormRequest;
class SessionTimeoutConfigRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [];
}
}
@@ -1,18 +0,0 @@
<?php
namespace App\Http\Requests\Auth;
use App\Http\Requests\ApiFormRequest;
class SessionTimeoutPingRequest extends ApiFormRequest
{
public function authorize(): bool
{
return auth()->check();
}
public function rules(): array
{
return [];
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\ClassPreparation;
use App\Http\Requests\ApiFormRequest;
class ClassPreparationAdjustmentRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'class_section_id' => ['required', 'string', 'max:32'],
'school_year' => ['nullable', 'string', 'max:9'],
'adjustments' => ['required', 'array'],
'adjustments.*' => ['required', 'integer'],
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\ClassPreparation;
use App\Http\Requests\ApiFormRequest;
class ClassPreparationIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'school_year' => ['nullable', 'string', 'max:9'],
'semester' => ['nullable', 'string', 'max:255'],
];
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\ClassPreparation;
use App\Http\Requests\ApiFormRequest;
class ClassPreparationMarkPrintedRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'school_year' => ['required', 'string', 'max:9'],
'semester' => ['nullable', 'string', 'max:255'],
'class_section_ids' => ['required', 'array'],
'class_section_ids.*' => ['required', 'string', 'max:32'],
];
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests\ClassPreparation;
use App\Http\Requests\ApiFormRequest;
class ClassPreparationPrintRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
protected function prepareForValidation(): void
{
parent::prepareForValidation();
$this->merge([
'class_section_id' => $this->route('classSectionId'),
'school_year' => $this->route('schoolYear'),
]);
}
public function rules(): array
{
return [
'class_section_id' => ['required', 'string', 'max:32'],
'school_year' => ['required', 'string', 'max:9'],
'semester' => ['nullable', 'string', 'max:255'],
];
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Requests\Classes;
use App\Http\Requests\ApiFormRequest;
class ClassSectionIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'search' => ['nullable', 'string', 'max:120'],
'class_id' => ['nullable', 'integer', 'min:1'],
'school_year' => ['nullable', 'string', 'max:9'],
'semester' => ['nullable', 'string', 'max:255'],
'sort_by' => ['nullable', 'string', 'in:class_section_name,class_section_id,class_id,school_year,semester,class_name'],
'sort_dir' => ['nullable', 'string', 'in:asc,desc'],
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:200'],
];
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests\Classes;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Validation\Rule;
class ClassSectionStoreRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'class_id' => ['required', 'integer', 'min:1'],
'class_section_id' => ['required', 'integer', 'min:1', Rule::unique('classSection', 'class_section_id')],
'class_section_name' => ['required', 'string', 'max:100'],
'semester' => ['required', 'string', 'max:255'],
'school_year' => ['required', 'string', 'max:9'],
];
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests\Classes;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Validation\Rule;
class ClassSectionUpdateRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
$section = $this->route('classSection');
$sectionId = is_object($section) ? $section->id : $section;
return [
'class_id' => ['sometimes', 'integer', 'min:1'],
'class_section_id' => [
'sometimes',
'integer',
'min:1',
Rule::unique('classSection', 'class_section_id')->ignore($sectionId),
],
'class_section_name' => ['sometimes', 'string', 'max:100'],
'semester' => ['sometimes', 'string', 'max:255'],
'school_year' => ['sometimes', 'string', 'max:9'],
];
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Requests\Frontend;
use App\Http\Requests\ApiFormRequest;
class ContactSubmitRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'email' => ['required', 'email', 'max:255'],
'message' => ['required', 'string', 'min:10'],
'subject' => ['nullable', 'string', 'max:255'],
];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Frontend;
use App\Http\Requests\ApiFormRequest;
class LandingTeacherRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'class_section_id' => ['nullable', 'integer', 'min:1'],
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Messaging;
use App\Http\Requests\ApiFormRequest;
class MessageIndexRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:100'],
'priority' => ['nullable', 'in:low,normal,high'],
'read_status' => ['nullable', 'in:0,1'],
'search' => ['nullable', 'string', 'max:255'],
'sort_by' => ['nullable', 'in:sent_datetime,subject,priority'],
'sort_dir' => ['nullable', 'in:asc,desc'],
];
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Requests\Messaging;
use App\Http\Requests\ApiFormRequest;
class MessageSendRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'recipient_id' => ['nullable', 'integer', 'min:1', 'required_without:recipient_role'],
'recipient_role' => ['nullable', 'string', 'required_without:recipient_id', 'in:teacher,parent,admin,student,guest,administrator'],
'subject' => ['required', 'string', 'max:255'],
'message' => ['required', 'string'],
'priority' => ['nullable', 'in:low,normal,high'],
'status' => ['nullable', 'in:sent,received,draft,trashed'],
'semester' => ['nullable', 'string', 'max:255'],
'school_year' => ['nullable', 'string', 'max:20'],
'attachment' => ['nullable', 'file', 'max:10240'],
];
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Requests\Messaging;
use App\Http\Requests\ApiFormRequest;
class MessageUpdateRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'status' => ['nullable', 'in:sent,received,draft,trashed'],
'priority' => ['nullable', 'in:low,normal,high'],
'read_status' => ['nullable', 'in:0,1'],
];
}
}
@@ -16,6 +16,7 @@ class PaypalExecuteRequest extends ApiFormRequest
return [
'payer_id' => ['required', 'string', 'max:100'],
'paypal_payment_id' => ['nullable', 'string', 'max:100'],
'payment_id' => ['nullable', 'integer', 'min:1'],
];
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests\Preferences;
use App\Http\Requests\ApiFormRequest;
class PreferencesIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'user_id' => ['nullable', 'integer', 'min:1'],
'q' => ['nullable', 'string', 'max:120'],
'sort_by' => ['nullable', 'string', 'in:updated_at,created_at,user_id'],
'sort_dir' => ['nullable', 'string', 'in:asc,desc'],
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:200'],
];
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Http\Requests\Preferences;
use App\Http\Requests\ApiFormRequest;
use App\Services\Preferences\PreferencesOptionsService;
use Illuminate\Validation\Rule;
class PreferencesUpsertRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
$options = app(PreferencesOptionsService::class);
return [
'receive_email_notifications' => ['nullable', 'boolean'],
'receive_sms_notifications' => ['nullable', 'boolean'],
'notification_email' => ['nullable', 'boolean'],
'notification_sms' => ['nullable', 'boolean'],
'theme' => ['nullable', 'string', Rule::in(['light', 'dark'])],
'language' => ['nullable', 'string', Rule::in(['en', 'fr', 'es'])],
'style_color' => ['nullable', 'string', Rule::in($options->styleOptions())],
'menu_color' => ['nullable', 'string', Rule::in($options->menuOptions())],
];
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Requests\Security;
use App\Http\Requests\ApiFormRequest;
class IpBanIndexRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'status' => ['nullable', 'string', 'in:all,active'],
'search' => ['nullable', 'string', 'max:100'],
'sort_by' => ['nullable', 'string', 'in:updated_at,blocked_until,attempts,ip_address,last_attempt_at'],
'sort_dir' => ['nullable', 'string', 'in:asc,desc'],
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:200'],
];
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Http\Requests\Security;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Contracts\Validation\Validator;
class IpBanRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'id' => ['nullable', 'integer', 'min:1'],
'ip' => ['nullable', 'ip'],
'hours' => ['nullable', 'integer', 'min:1', 'max:720'],
];
}
public function withValidator(Validator $validator): void
{
$validator->after(function (Validator $validator) {
$id = $this->input('id');
$ip = $this->input('ip');
if (!$id && !$ip) {
$validator->errors()->add('id', 'Either id or ip is required.');
}
});
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Http\Requests\Security;
use App\Http\Requests\ApiFormRequest;
use Illuminate\Contracts\Validation\Validator;
class IpUnbanRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'id' => ['nullable', 'integer', 'min:1'],
'ip' => ['nullable', 'ip'],
'all' => ['nullable', 'boolean'],
];
}
public function withValidator(Validator $validator): void
{
$validator->after(function (Validator $validator) {
$id = $this->input('id');
$ip = $this->input('ip');
$all = filter_var($this->input('all'), FILTER_VALIDATE_BOOLEAN);
if (!$all && !$id && !$ip) {
$validator->errors()->add('id', 'Either id, ip, or all=true is required.');
}
});
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Settings;
use App\Http\Requests\ApiFormRequest;
class PolicyShowRequest extends ApiFormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'format' => ['nullable', 'in:html'],
];
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Http\Requests\Settings;
use App\Http\Requests\ApiFormRequest;
class SettingsUpdateRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'site_name' => ['nullable', 'string', 'max:255'],
'administrator_email' => ['nullable', 'email', 'max:255'],
'timezone' => ['nullable', 'string', 'max:80'],
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Staff;
use App\Http\Requests\ApiFormRequest;
class StaffIndexRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:100'],
'role' => ['nullable', 'string', 'max:100'],
'school_year' => ['nullable', 'string', 'max:20'],
'semester' => ['nullable', 'string', 'max:20'],
'sort_by' => ['nullable', 'in:created_at,lastname,firstname'],
'sort_dir' => ['nullable', 'in:asc,desc'],
];
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Http\Requests\Staff;
use App\Http\Requests\ApiFormRequest;
class StaffStoreRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'user_id' => ['nullable', 'integer', 'min:1'],
'firstname' => ['required', 'string', 'max:100'],
'lastname' => ['required', 'string', 'max:100'],
'email' => ['required', 'email', 'max:150'],
'phone' => ['nullable', 'string', 'max:20'],
'role_name' => ['required', 'string', 'max:100'],
'school_year' => ['nullable', 'string', 'max:20'],
'status' => ['nullable', 'string', 'max:40'],
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\Staff;
use App\Http\Requests\ApiFormRequest;
class StaffUpdateRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'firstname' => ['nullable', 'string', 'max:100'],
'lastname' => ['nullable', 'string', 'max:100'],
'email' => ['nullable', 'email', 'max:150'],
'phone' => ['nullable', 'string', 'max:20'],
'role_name' => ['nullable', 'string', 'max:100'],
'school_year' => ['nullable', 'string', 'max:20'],
'status' => ['nullable', 'string', 'max:40'],
];
}
}
@@ -0,0 +1,18 @@
<?php
namespace App\Http\Requests\Support;
use App\Http\Requests\ApiFormRequest;
class ContactSendRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'name' => ['required', 'string', 'min:3', 'max:255'],
'email' => ['required', 'email', 'max:255'],
'subject' => ['required', 'string', 'min:3', 'max:255'],
'message' => ['required', 'string', 'min:10'],
];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Support;
use App\Http\Requests\ApiFormRequest;
class SupportRequestIndexRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'page' => ['nullable', 'integer', 'min:1'],
'per_page' => ['nullable', 'integer', 'min:1', 'max:100'],
'status' => ['nullable', 'string', 'max:25'],
'user_id' => ['nullable', 'integer', 'min:1'],
'sort_by' => ['nullable', 'in:created_at,status,subject'],
'sort_dir' => ['nullable', 'in:asc,desc'],
];
}
}
@@ -0,0 +1,16 @@
<?php
namespace App\Http\Requests\Support;
use App\Http\Requests\ApiFormRequest;
class SupportRequestStoreRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'subject' => ['required', 'string', 'min:3', 'max:255'],
'message' => ['required', 'string', 'min:10'],
];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Http\Requests\System;
use App\Http\Requests\ApiFormRequest;
class NavItemReorderRequest extends ApiFormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'orders' => ['required', 'array'],
'orders.*' => ['integer'],
];
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests\System;
use App\Http\Requests\ApiFormRequest;
class NavItemStoreRequest extends ApiFormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'id' => ['nullable', 'integer', 'min:1', 'exists:nav_items,id'],
'menu_parent_id' => ['nullable', 'integer', 'min:1', 'exists:nav_items,id'],
'parent_id' => ['nullable', 'integer', 'min:1', 'exists:nav_items,id'],
'label' => ['required', 'string', 'max:255'],
'url' => ['nullable', 'string', 'max:255'],
'icon_class' => ['nullable', 'string', 'max:255'],
'target' => ['nullable', 'string', 'max:50'],
'sort_order' => ['nullable', 'integer'],
'is_enabled' => ['nullable', 'boolean'],
'roles' => ['nullable', 'array'],
'roles.*' => ['integer', 'min:1', 'exists:roles,id'],
];
}
}
+19
View File
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Requests\Ui;
use App\Http\Requests\ApiFormRequest;
class UiStyleRequest extends ApiFormRequest
{
public function rules(): array
{
return [
'accent' => ['nullable', 'string', 'max:50'],
'menu' => ['nullable', 'string', 'max:50'],
'menu_bg' => ['nullable', 'string', 'max:20'],
'menu_text' => ['nullable', 'string', 'max:20'],
'menu_mode' => ['nullable', 'in:light,dark,auto'],
];
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Requests\Utilities;
use App\Http\Requests\ApiFormRequest;
class PhoneFormatRequest extends ApiFormRequest
{
public function authorize(): bool
{
return $this->user() !== null;
}
public function rules(): array
{
return [
'number' => ['required', 'string', 'max:50'],
];
}
}