Files
alrahma_sunday_school/app/Models/ConfigurationModel.php
T
root feb1b29a32
Tests / PHPUnit (push) Failing after 1m19s
apply the school year concept
2026-07-14 00:59:00 -04:00

123 lines
3.3 KiB
PHP

<?php
namespace App\Models;
use CodeIgniter\Model;
class ConfigurationModel extends Model
{
protected $table = 'configuration'; // The name of the table
protected $primaryKey = 'id'; // The primary key of the table
protected $allowedFields = [
'config_key',
'config_value',
];
/**
* Get configuration value by key.
*
* @param string $key
* @return string|null
*/
public function getConfigValueByKey(string $key)
{
// Use a fresh builder to avoid stale state from shared model builder.
$builder = $this->db->table($this->table);
$result = $builder->where('config_key', $key)
->orderBy('id', 'DESC')
->get(1)
->getRowArray();
return $result['config_value'] ?? null;
}
/**
* Set configuration value by key.
*
* @param string $key
* @param string $value
* @return bool
*/
public function setConfigValueByKey(string $key, string $value): bool
{
// If one or more rows exist for this key, update ALL of them to avoid
// inconsistent reads when duplicates are present.
$count = $this->where('config_key', $key)->countAllResults();
if ($count > 0) {
// Use a direct builder update scoped by key to affect all matches
$ok = (bool) $this->db->table($this->table)
->where('config_key', $key)
->update(['config_value' => $value]);
return $ok;
}
// Insert a new record if none exist
return $this->insert(['config_key' => $key, 'config_value' => $value]) !== false;
}
// Method to retrieve all configuration data
public function getAllConfigs()
{
return $this->findAll();
}
// Method to update configuration by key
public function updateConfig($id, $data)
{
return $this->update($id, $data);
}
// Method to add new configuration
public function addConfig($data)
{
return $this->insert($data);
}
public function getConfig($key)
{
$key = (string) $key;
if ($key === 'school_year') {
$activeSchoolYear = $this->activeSchoolYearName();
if ($activeSchoolYear !== null) {
return $activeSchoolYear;
}
}
if ($key === 'semester') {
try {
$semester = (new \App\Services\SemesterRangeService($this))->getSemesterForDate();
if ($semester !== '') {
return $semester;
}
} catch (\Throwable $e) {
// ignore and fall back
}
}
return $this->getConfigValueByKey($key);
}
private function activeSchoolYearName(): ?string
{
try {
if (! $this->db->tableExists('school_years')) {
return null;
}
$row = $this->db->table('school_years')
->select('name')
->where('status', 'active')
->orderBy('id', 'DESC')
->get(1)
->getRowArray();
$name = trim((string) ($row['name'] ?? ''));
return $name !== '' ? $name : null;
} catch (\Throwable) {
return null;
}
}
}