Files
alrahma_sunday_school/app/Database/Migrations/2026-09-13-000100_AddAcademicStatisticsNavItem.php
T
root c3a30989b2
Deploy to Shared Hosting / Shared hosting deploy (push) Failing after 51s
Tests / PHPUnit (push) Successful in 1m25s
add new ststs feature
2026-09-13 02:20:14 -04:00

93 lines
3.0 KiB
PHP

<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class AddAcademicStatisticsNavItem extends Migration
{
private string $url = 'administrator/stats';
public function up(): void
{
if (! $this->db->tableExists('nav_items')) {
return;
}
$existing = $this->db->table('nav_items')->where('url', $this->url)->get()->getRowArray();
if ($existing !== null) {
return;
}
$parentColumn = $this->parentColumn();
$parentBuilder = $this->db->table('nav_items')->where('label', 'Student-Affairs');
if ($parentColumn !== null) {
$parentBuilder->where($parentColumn, null);
}
$parent = $parentBuilder->get()->getRowArray();
$insert = [
'label' => 'School Statistics',
'url' => $this->url,
'sort_order' => 14,
'is_enabled' => 1,
'created_at' => date('Y-m-d H:i:s'),
];
if ($parentColumn !== null) {
$insert[$parentColumn] = $parent['id'] ?? null;
}
$this->db->table('nav_items')->insert($insert);
$navItemId = (int) $this->db->insertID();
$this->grantToRoles($navItemId, ['administrator', 'admin', 'principal', 'vice_principal', 'administrative staff', 'head of department (education)']);
}
public function down(): void
{
if (! $this->db->tableExists('nav_items')) {
return;
}
$row = $this->db->table('nav_items')->where('url', $this->url)->get()->getRowArray();
if ($row === null) {
return;
}
if ($this->db->tableExists('role_nav_items')) {
$this->db->table('role_nav_items')->where('nav_item_id', (int) $row['id'])->delete();
}
$this->db->table('nav_items')->where('id', (int) $row['id'])->delete();
}
private function grantToRoles(int $navItemId, array $roles): void
{
if ($navItemId <= 0 || ! $this->db->tableExists('role_nav_items')) {
return;
}
foreach ($roles as $role) {
$insert = ['nav_item_id' => $navItemId, 'created_at' => date('Y-m-d H:i:s')];
if ($this->db->fieldExists('role_id', 'role_nav_items') && $this->db->tableExists('roles')) {
$roleRow = $this->db->table('roles')->select('id')->where('LOWER(name)', strtolower($role))->get()->getRowArray();
if ($roleRow === null) {
continue;
}
$insert['role_id'] = (int) $roleRow['id'];
} elseif ($this->db->fieldExists('role', 'role_nav_items')) {
$insert['role'] = $role;
} else {
continue;
}
$this->db->table('role_nav_items')->insert($insert);
}
}
private function parentColumn(): ?string
{
if ($this->db->fieldExists('parent_id', 'nav_items')) {
return 'parent_id';
}
return $this->db->fieldExists('menu_parent_id', 'nav_items') ? 'menu_parent_id' : null;
}
}