Files
admin_hura_8/inc/Hura8/System/Model/SettingModel.php
2024-01-29 10:39:53 +07:00

174 lines
4.5 KiB
PHP

<?php
namespace Hura8\System\Model;
use Hura8\Database\iConnectDB;
use Hura8\System\Security\DataClean;
use Hura8\System\Security\DataType;
class SettingModel
{
protected $db;
protected $tb_setting = 'tb_settings';
const KEY = [
'pcbuilder_config' => 'pcbuilder_config',
];
public function __construct(){
$this->db = get_db('', ENABLE_DB_DEBUG);
}
public function getAll(){
$query = $this->db->runQuery(
"SELECT * FROM `".$this->tb_setting."` WHERE 1 ORDER BY `id` DESC LIMIT 100 "
);
$result = [];
foreach ( $this->db->fetchAll($query) as $rs ){
if($rs['setting_value']) {
$rs['setting_value'] = \unserialize($rs['setting_value']);
}
$result[] = $rs;
}
return $result;
}
// get a list of keys
public function getList(array $keys){
$conditions = [];
$bind_types = [];
$bind_values = [];
foreach ($keys as $key) {
$conditions[] = " `setting_key`= ? ";
$bind_types[] = 's';
$bind_values[] = $key;
}
if(sizeof($conditions)) {
$query = $this->db->runQuery(
" SELECT `setting_key`, `setting_value` FROM `".$this->tb_setting."` WHERE ".join(" OR ", $conditions)." LIMIT 100 ",
$bind_types, $bind_values
);
$result = [];
foreach ( $this->db->fetchAll($query) as $rs ){
$result[$rs['setting_key']] = \unserialize($rs['setting_value']);
}
return $result;
}
return [];
}
// get a single key, = false if not found and no default is set
public function get($key, $default = null){
$key = $this->cleanKey($key);
if(!$key) return null;
$query = $this->db->runQuery(
"SELECT `setting_value` FROM `".$this->tb_setting."` WHERE `setting_key`= ? LIMIT 1 ",
['s'], [ $key ]
);
if($rs = $this->db->fetchAssoc($query)){
return \unserialize($rs['setting_value']);
}
return ($default) ?: null;
}
public function delete($key){
return $this->db->runQuery(
"DELETE FROM `" . $this->tb_setting . "` WHERE `setting_key` = ? LIMIT 1 ",
['s'], [ $key ]
);
}
// update or create
public function updateOrCreate($key, $value = null, $comment = ''){
$key = $this->cleanKey($key);
if(!$key) return false;
if($this->checkKeyExist($key)) {
return $this->db->update(
$this->tb_setting ,
[
'setting_value' => ($value) ? \serialize($value) : null,
'comment' => subString($comment, 80),
'last_update' => CURRENT_TIME,
'last_update_by' => ADMIN_NAME,
],
[
'setting_key' => $key,
]
);
}
return $this->db->insert(
$this->tb_setting ,
[
'setting_key' => $key,
'setting_value' => ($value) ? \serialize($value) : null,
'comment' => subString($comment, 80),
'create_time' => CURRENT_TIME,
'create_by' => ADMIN_NAME,
'last_update' => CURRENT_TIME,
'last_update_by' => ADMIN_NAME,
]
);
}
public function populateKeys(array $key_list) {
$build_inserts = [];
foreach ($key_list as $key) {
if( ! $this->checkKeyExist($key)) {
$build_inserts[] = [
"setting_key" => $key,
"create_time" => CURRENT_TIME,
"create_by" => 'system',
];
}
}
if(sizeof($build_inserts)) {
$this->db->insert($this->tb_setting, $build_inserts);
}
return sizeof($build_inserts);
}
protected function checkKeyExist($key) : bool {
$key = $this->cleanKey($key);
if(!$key) return false;
$query = $this->db->runQuery(
" SELECT `id` FROM `".$this->tb_setting."` WHERE `setting_key`= ? LIMIT 1 ", ['s'], [ $key ]
);
return (bool) $this->db->fetchAssoc($query);
}
// only allow some characters
protected function cleanKey($key) {
return DataClean::makeInputSafe($key, DataType::ID);
}
}