Files
2026-03-24 01:02:36 -04:00

94 lines
2.5 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 === 'semester') {
try {
$semester = (new \App\Services\SemesterRangeService($this))->getSemesterForDate();
if ($semester !== '') {
return $semester;
}
} catch (\Throwable $e) {
// ignore and fall back
}
}
return $this->getConfigValueByKey($key);
}
}