tkr/src/Model/ConfigModel/ConfigModel.php
Greg Sarjeant 832b7b95fa Remove all static model methods. (#52)
Replace all static model methods. Support dependency injection for all models. Clean up things that used the static model methods. Decouple ConfigModel and CssModel.

Reviewed-on: https://gitea.subcultureofone.org/greg/tkr/pulls/52
Co-authored-by: Greg Sarjeant <greg@subcultureofone.org>
Co-committed-by: Greg Sarjeant <greg@subcultureofone.org>
2025-08-03 19:15:24 +00:00

91 lines
3.0 KiB
PHP

<?php
class ConfigModel {
// properties and default values
public string $siteTitle = 'My tkr';
public string $siteDescription = '';
public string $baseUrl = '';
public string $basePath = '';
public int $itemsPerPage = 25;
public string $timezone = 'relative';
public ?int $cssId = null;
public bool $strictAccessibility = true;
public ?int $logLevel = null;
public function __construct(private PDO $db) {}
// Instance method that uses injected database
public function get(): self {
$init = require APP_ROOT . '/config/init.php';
$c = new self($this->db);
$c->baseUrl = ($c->baseUrl === '') ? $init['base_url'] : $c->baseUrl;
$c->basePath = ($c->basePath === '') ? $init['base_path'] : $c->basePath;
$stmt = $this->db->query("SELECT site_title,
site_description,
base_url,
base_path,
items_per_page,
css_id,
strict_accessibility,
log_level
FROM settings WHERE id=1");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$c->siteTitle = $row['site_title'];
$c->siteDescription = $row['site_description'];
$c->baseUrl = $row['base_url'];
$c->basePath = $row['base_path'];
$c->itemsPerPage = (int) $row['items_per_page'];
$c->cssId = (int) $row['css_id'];
$c->strictAccessibility = (bool) $row['strict_accessibility'];
$c->logLevel = $row['log_level'];
}
return $c;
}
public function save(): self {
$settingsCount = (int) $this->db->query("SELECT COUNT(*) FROM settings")->fetchColumn();
if ($settingsCount === 0){
$stmt = $this->db->prepare("INSERT INTO settings (
id,
site_title,
site_description,
base_url,
base_path,
items_per_page,
css_id,
strict_accessibility,
log_level
)
VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?)");
} else {
$stmt = $this->db->prepare("UPDATE settings SET
site_title=?,
site_description=?,
base_url=?,
base_path=?,
items_per_page=?,
css_id=?,
strict_accessibility=?,
log_level=?
WHERE id=1");
}
$stmt->execute([$this->siteTitle,
$this->siteDescription,
$this->baseUrl,
$this->basePath,
$this->itemsPerPage,
$this->cssId,
$this->strictAccessibility,
$this->logLevel
]);
return $this->get();
}
}