. */ declare(strict_types=1); namespace Fisharebest\Webtrees; use Illuminate\Database\Capsule\Manager as DB; use function mb_substr; /** * Provide an interface to the wt_site_setting table. */ class Site { /** * Everything from the wt_site_setting table. * * @var array */ public static $preferences = []; /** * Get the site’s configuration settings * * @param string $setting_name * @param string $default * * @return string */ public static function getPreference(string $setting_name, string $default = ''): string { // There are lots of settings, and we need to fetch lots of them on every page // so it is quicker to fetch them all in one go. if (empty(self::$preferences)) { self::$preferences = DB::table('site_setting') ->pluck('setting_value', 'setting_name') ->all(); } return self::$preferences[$setting_name] ?? $default; } /** * Set the site’s configuration settings. * * @param string $setting_name * @param string $setting_value * * @return void */ public static function setPreference($setting_name, $setting_value): void { // The database column is only this long. $setting_value = mb_substr($setting_value, 0, 2000); if (self::getPreference($setting_name) !== $setting_value) { DB::table('site_setting')->updateOrInsert([ 'setting_name' => $setting_name, ], [ 'setting_value' => $setting_value, ]); self::$preferences[$setting_name] = $setting_value; Log::addConfigurationLog('Site preference "' . $setting_name . '" set to "' . $setting_value . '"', null); } } }