ver 0.250: migrate settings to form-edit and cleanup legacy settings classes

This commit is contained in:
2026-02-08 20:13:01 +01:00
parent 3c50440cb2
commit 9b4c92056d
15 changed files with 480 additions and 326 deletions

View File

@@ -2,65 +2,159 @@
namespace Domain\Settings;
/**
* Repozytorium ustawień - deleguje do admin\factory\Settings (legacy)
*
* Krok pośredni migracji: wyodrębnia logikę zapisu z kontrolera.
* Docelowo zastąpi factory bezpośrednim dostępem do bazy (jak BannerRepository).
* Repozytorium ustawien panelu administratora.
*/
class SettingsRepository
{
private $db;
public function __construct($db = null)
{
if ($db) {
$this->db = $db;
return;
}
global $mdb;
$this->db = $mdb;
}
/**
* Zapis ustawień
* Zapis ustawien.
*
* @param array $values Tablica wartości z formularza
* @return array Odpowiedź z factory ['status' => string, 'msg' => string]
* @param array $values Tablica wartosci z formularza
* @return array ['status' => string, 'msg' => string]
*/
public function saveSettings(array $values): array
{
$settings = \admin\factory\Settings::settings_details();
$currentSettings = $this->getSettings();
$response = \admin\factory\Settings::settings_save(
$values['firm_name'], $values['firm_adress'], $values['additional_info'], $values['contact_form'], $values['contact_email'], $values['email_host'],
$values['email_port'], $values['email_login'], $values['email_password'], $values['google_maps'], $values['facebook_link'], $values['statistic_code'], $values['htaccess'],
$values['robots'], $values['shop_bank_account_info'], $values['update'], $values['boot_animation'], $settings['newsletter_header'], $settings['newsletter_footer'], $values['hotpay_api']
);
$settingsToSave = [
'firm_name' => $values['firm_name'] ?? '',
'firm_adress' => $values['firm_adress'] ?? '',
'additional_info' => $values['additional_info'] ?? '',
'contact_form' => $this->isEnabled($values['contact_form'] ?? null) ? 1 : 0,
'contact_email' => $values['contact_email'] ?? '',
'email_host' => $values['email_host'] ?? '',
'email_port' => $values['email_port'] ?? '',
'email_login' => $values['email_login'] ?? '',
'email_password' => $values['email_password'] ?? '',
'google_maps' => $values['google_maps'] ?? '',
'facebook_link' => $values['facebook_link'] ?? '',
'statistic_code' => $values['statistic_code'] ?? '',
'htaccess' => $values['htaccess'] ?? '',
'robots' => $values['robots'] ?? '',
'shop_bank_account_info' => $values['shop_bank_account_info'] ?? '',
'update' => $this->isEnabled($values['update'] ?? null) ? 1 : 0,
'boot_animation' => $values['boot_animation'] ?? '',
// Te pola sa edytowane w module newsletter i musza zostac zachowane.
'newsletter_header' => $currentSettings['newsletter_header'] ?? '',
'newsletter_footer' => $currentSettings['newsletter_footer'] ?? '',
'hotpay_api' => $values['hotpay_api'] ?? '',
\admin\factory\Settings::settings_update( 'devel', $values['devel'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'ssl', $values['ssl'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'htaccess_cache', $values['htaccess_cache'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'free_delivery', $values['free_delivery'] );
\admin\factory\Settings::settings_update( 'przelewy24_sandbox', $values['przelewy24_sandbox'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'przelewy24_merchant_id', $values['przelewy24_merchant_id'] );
\admin\factory\Settings::settings_update( 'przelewy24_crc_key', $values['przelewy24_crc_key'] );
\admin\factory\Settings::settings_update( 'update_key', $values['update_key'] );
\admin\factory\Settings::settings_update( 'tpay_id', $values['tpay_id'] );
\admin\factory\Settings::settings_update( 'tpay_sandbox', $values['tpay_sandbox'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'tpay_security_code', $values['tpay_security_code'] );
\admin\factory\Settings::settings_update( 'piksel', $values['piksel'] );
\admin\factory\Settings::settings_update( 'generate_webp', $values['generate_webp'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'lazy_loading', $values['lazy_loading'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'orlen_paczka_map_token', $values['orlen_paczka_map_token'] );
\admin\factory\Settings::settings_update( 'google_tag_manager_id', $values['google_tag_manager_id'] );
\admin\factory\Settings::settings_update( 'infinitescroll', $values['infinitescroll'] == 'on' ? 1 : 0 );
\admin\factory\Settings::settings_update( 'own_gtm_js', $values['own_gtm_js'] );
\admin\factory\Settings::settings_update( 'own_gtm_html', $values['own_gtm_html'] );
'devel' => $this->isEnabled($values['devel'] ?? null) ? 1 : 0,
'ssl' => $this->isEnabled($values['ssl'] ?? null) ? 1 : 0,
'htaccess_cache' => $this->isEnabled($values['htaccess_cache'] ?? null) ? 1 : 0,
'free_delivery' => $values['free_delivery'] ?? '',
'przelewy24_sandbox' => $this->isEnabled($values['przelewy24_sandbox'] ?? null) ? 1 : 0,
'przelewy24_merchant_id' => $values['przelewy24_merchant_id'] ?? '',
'przelewy24_crc_key' => $values['przelewy24_crc_key'] ?? '',
'update_key' => $values['update_key'] ?? '',
'tpay_id' => $values['tpay_id'] ?? '',
'tpay_sandbox' => $this->isEnabled($values['tpay_sandbox'] ?? null) ? 1 : 0,
'tpay_security_code' => $values['tpay_security_code'] ?? '',
'piksel' => $values['piksel'] ?? '',
'generate_webp' => $this->isEnabled($values['generate_webp'] ?? null) ? 1 : 0,
'lazy_loading' => $this->isEnabled($values['lazy_loading'] ?? null) ? 1 : 0,
'orlen_paczka_map_token' => $values['orlen_paczka_map_token'] ?? '',
'google_tag_manager_id' => $values['google_tag_manager_id'] ?? '',
'infinitescroll' => $this->isEnabled($values['infinitescroll'] ?? null) ? 1 : 0,
'own_gtm_js' => $values['own_gtm_js'] ?? '',
'own_gtm_html' => $values['own_gtm_html'] ?? '',
];
foreach ( $values['warehouse_message_zero'] as $key => $val )
\admin\factory\Settings::settings_update( 'warehouse_message_zero_' . $key, $val );
$warehouseMessageZero = $values['warehouse_message_zero'] ?? [];
if (is_array($warehouseMessageZero)) {
foreach ($warehouseMessageZero as $key => $value) {
$settingsToSave['warehouse_message_zero_' . $key] = $value;
}
}
foreach ( $values['warehouse_message_nonzero'] as $key => $val )
\admin\factory\Settings::settings_update( 'warehouse_message_nonzero_' . $key, $val );
$warehouseMessageNonZero = $values['warehouse_message_nonzero'] ?? [];
if (is_array($warehouseMessageNonZero)) {
foreach ($warehouseMessageNonZero as $key => $value) {
$settingsToSave['warehouse_message_nonzero_' . $key] = $value;
}
}
return $response;
// Zachowanie zgodne z dotychczasowym flow: pelna podmiana zestawu ustawien.
$this->db->query('TRUNCATE pp_settings');
$this->updateSettings($settingsToSave);
\S::set_message('Ustawienia zostaly zapisane');
return ['status' => 'ok', 'msg' => 'Ustawienia zostaly zapisane.'];
}
/**
* Pobranie wszystkich ustawień
* Aktualizacja pojedynczego parametru.
*/
public function updateSetting(string $param, $value): bool
{
$this->db->delete('pp_settings', ['param' => $param]);
$this->db->insert('pp_settings', ['param' => $param, 'value' => $value]);
return true;
}
/**
* Aktualizacja wielu parametrow przez jedna sciezke.
*/
public function updateSettings(array $settings): bool
{
foreach ($settings as $param => $value) {
$this->updateSetting((string)$param, $value);
}
return true;
}
/**
* Pobranie wszystkich ustawien.
*
* @return array Tablica ustawień [param => value]
* @return array Tablica ustawien [param => value]
*/
public function getSettings(): array
{
return \admin\factory\Settings::settings_details() ?? [];
$results = $this->db->select('pp_settings', '*', ['ORDER' => ['id' => 'ASC']]);
$settings = [];
if (is_array($results)) {
foreach ($results as $row) {
if (isset($row['param'])) {
$settings[$row['param']] = $row['value'] ?? '';
}
}
}
return $settings;
}
private function isEnabled($value): bool
{
if (is_bool($value)) {
return $value;
}
if (is_int($value) || is_float($value)) {
return (int)$value === 1;
}
if (is_string($value)) {
$normalized = strtolower(trim($value));
return in_array($normalized, ['1', 'on', 'true', 'yes'], true);
}
return false;
}
}