Files
alrahma_sunday_school/app/Database/Migrations/2026-08-06-000501_SyncEnrollmentAdministrationNavRoles.php
T
root 1ef2800f12
Tests / PHPUnit (push) Successful in 1m26s
fix enrollment for the new school-year
2026-08-07 23:43:31 -04:00

78 lines
2.1 KiB
PHP

<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class SyncEnrollmentAdministrationNavRoles extends Migration
{
public function up(): void
{
if (! $this->db->tableExists('nav_items') || ! $this->db->tableExists('role_nav_items')) {
return;
}
$nav = $this->db->table('nav_items')
->select('id')
->where('url', 'administrator/enrollment-admin')
->limit(1)
->get()
->getRowArray();
if ($nav === null) {
return;
}
$this->grantRoles((int) $nav['id'], [
'administrator',
'principal',
'vice_principal',
'head of department (education)',
]);
cache()->clean();
}
public function down(): void
{
}
private function grantRoles(int $navItemId, array $roleNames): void
{
if (! $this->db->fieldExists('role_id', 'role_nav_items') || ! $this->db->tableExists('roles')) {
return;
}
foreach ($roleNames as $roleName) {
$roleBuilder = $this->db->table('roles')->select('id');
$roleBuilder->groupStart()
->where('LOWER(name)', strtolower($roleName));
if ($this->db->fieldExists('slug', 'roles')) {
$roleBuilder->orWhere('LOWER(slug)', strtolower($roleName));
}
$role = $roleBuilder->groupEnd()
->limit(1)
->get()
->getRowArray();
if ($role === null) {
continue;
}
$exists = $this->db->table('role_nav_items')
->where('role_id', (int) $role['id'])
->where('nav_item_id', $navItemId)
->countAllResults() > 0;
if (! $exists) {
$this->db->table('role_nav_items')->insert([
'role_id' => (int) $role['id'],
'nav_item_id' => $navItemId,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
]);
}
}
}
}