Setting.php

2.42 KB
27/04/2025 13:37
PHP
<?php
class Setting extends Model
{
    /**
     * @var string
     */
    protected $table = 'settings';

    /**
     * @param array $keys
     */
    public function getSettingsByKeys($keys = [])
    {
        $result = [];

        if (empty($keys)) {
            // Get all settings
            $settings = $this->db->fetchAll("SELECT setting_key, setting_value FROM {$this->table}");

            foreach ($settings as $setting) {
                $result[$setting['setting_key']] = $setting['setting_value'];
            }
        } else {
            // Get specific settings
            $placeholders = implode(',', array_fill(0, count($keys), '?'));
            $settings = $this->db->fetchAll(
                "SELECT setting_key, setting_value FROM {$this->table} WHERE setting_key IN ($placeholders)",
                $keys
            );

            // Fill in missing keys with null
            foreach ($keys as $key) {
                $result[$key] = null;
            }

            // Populate with actual values
            foreach ($settings as $setting) {
                $result[$setting['setting_key']] = $setting['setting_value'];
            }
        }

        return $result;
    }

    /**
     * @param $settings
     */
    public function updateSettings($settings)
    {
        $this->db->beginTransaction();

        try {
            foreach ($settings as $key => $value) {
                if ($value === null) {
                    continue;
                }

                // Check if setting already exists
                $exists = $this->db->fetchColumn(
                    "SELECT COUNT(*) FROM {$this->table} WHERE setting_key = ?",
                    [$key]
                );

                if ($exists > 0) {
                    // Update existing setting
                    $this->db->update(
                        $this->table,
                        ['setting_value' => $value],
                        ['setting_key = ?'],
                        [$key]
                    );
                } else {
                    // Insert new setting
                    $this->db->insert($this->table, [
                        'setting_key' => $key,
                        'setting_value' => $value
                    ]);
                }
            }

            $this->db->commit();
            return true;
        } catch (Exception $e) {
            $this->db->rollBack();
            throw $e;
        }
    }
}