// Define that both keys and values are strings * */ private static array $wpSettings = [ 'dateFormat' => 'date_format', 'timeFormat' => 'time_format', 'startOfWeek' => 'start_of_week', 'timeZoneString' => 'timezone_string', 'gmtOffset' => 'gmt_offset' ]; /** * SettingsService constructor. */ public function __construct() { $this->settingsCache = json_decode(get_option('ivyforms_settings'), true); foreach (self::$wpSettings as $setting => $wpSetting) { $this->settingsCache['wordpress'][$setting] = get_option($wpSetting); } } /** * @param string $settingCategoryKey * @param string $settingKey * * @return mixed */ public function getSetting(string $settingCategoryKey, string $settingKey) { return $this->settingsCache[$settingCategoryKey][$settingKey] ?? null; } /** * @param string $settingCategoryKey * * @return mixed */ public function getCategorySettings(string $settingCategoryKey) { return $this->settingsCache[$settingCategoryKey] ?? null; } /** * @return mixed[] */ public function getAllSettings(): array { return $this->settingsCache; } /** * Return settings for frontend * * @return mixed[] */ public function getFrontendSettings(): array { $capabilities = []; if (is_admin()) { $currentScreenId = get_current_screen()->id; $currentScreen = substr($currentScreenId, strrpos($currentScreenId, '-') + 1); $capabilities = [ 'canRead' => current_user_can('ivyforms_read_' . $currentScreen), 'canReadOthers' => current_user_can('ivyforms_read_others_' . $currentScreen), 'canWrite' => current_user_can('ivyforms_write_' . $currentScreen), 'canWriteOthers' => current_user_can('ivyforms_write_others_' . $currentScreen), 'canDelete' => current_user_can('ivyforms_delete_' . $currentScreen), 'canWriteStatus' => current_user_can('ivyforms_write_status_' . $currentScreen), ]; } return [ 'capabilities' => $capabilities, ]; } /** * @param string $settingCategoryKey * @param string $settingKey * @param mixed $settingValue * * @return void */ public function setSetting(string $settingCategoryKey, string $settingKey, $settingValue) { $this->settingsCache[$settingCategoryKey][$settingKey] = $settingValue; $settingsCopy = $this->settingsCache; unset($settingsCopy['wordpress']); update_option('ivyforms_settings', json_encode($settingsCopy)); } /** * @param string $settingCategoryKey * @param mixed $settingValue * * @return void */ public function setCategorySettings(string $settingCategoryKey, $settingValue) { $this->settingsCache[$settingCategoryKey] = $settingValue; $settingsCopy = $this->settingsCache; unset($settingsCopy['wordpress']); update_option('ivyforms_settings', json_encode($settingsCopy)); } /** * Get all settings * * Specify that $settings is an associative array with string keys and mixed values * @param array $settings * */ public function setAllSettings(array $settings): void { foreach ($settings as $settingCategoryKey => $settingValues) { $this->settingsCache[$settingCategoryKey] = $settingValues; } $settingsCopy = $this->settingsCache; unset($settingsCopy['wordpress']); update_option('ivyforms_settings', json_encode($settingsCopy)); } }