[ 'data_type' => 'boolean', ], E::SHORT_NAME . '_logging' => [ 'data_type' => 'boolean', ], E::SHORT_NAME . '_mlmmj_host' => [ 'data_type' => 'string', ], E::SHORT_NAME . '_mlmmj_token' => [ 'data_type' => 'string', ], E::SHORT_NAME . '_mlmmj_port' => [ 'data_type' => 'integer', 'default_value' => 443, ], E::SHORT_NAME . '_dovecot_host' => [ 'data_type' => 'string', ], E::SHORT_NAME . '_dovecot_token' => [ 'data_type' => 'string', ], E::SHORT_NAME . '_dovecot_port' => [ 'data_type' => 'integer', 'default_value' => 443, ], E::SHORT_NAME . '_participant_status' => [ 'data_type' => 'array', ], E::SHORT_NAME . '_ad_contact_tags' => [ 'data_type' => 'array', ], ]; /** * Stores a setting in Civi::settings * * @param array $settings * Expects an array with key => value for the setting */ public static function set(array $settings): void { // Remove possibly illegal data from settings $settings = array_intersect_key($settings, self::SETTINGS); // Cast settings to the correct datatype foreach ($settings as $key => $value) { if ($value !== '') { settype($settings[$key], self::SETTINGS[$key]['data_type']); } else { $settings[$key] = NULL; } } \Civi::settings()->add($settings); } /** * Returns a specific value of a setting if the key is passed as parameter. * Else all settings will be returned as associative array. * * @param null $key * The name of the setting or NULL * * @return array|mixed|null */ public static function get($key = NULL): mixed { if (!is_null($key)) { return \Civi::settings()->get($key); } else { $settings = []; foreach (array_keys(self::SETTINGS) as $key) { $settings[$key] = \Civi::settings()->get($key) ?? self::SETTINGS[$key]['default_value'] ?? NULL; } return $settings; } } /** * Validates the settings. * * @param array $values * @param array $errors * * @return void */ public static function validate(array $values, array &$errors): void { // Validate url if synchronization is enabled $url = $values[E::SHORT_NAME . '_mailinglist_mlmmj_host']; if (!empty($values[E::SHORT_NAME . '_mailinglist_mlmmj_enable']) && !filter_var($url, FILTER_VALIDATE_URL)) { $errors[E::SHORT_NAME . '_mailinglist_mlmmj_host'] = E::ts('Invalid URL'); } // Validate port if synchronization is enabled and port is set $port = $values[E::SHORT_NAME . '_mailinglist_mlmmj_port'] ?? NULL; if (!empty($values[E::SHORT_NAME . '_mailinglist_mlmmj_enable']) && !empty($port)) { if (is_numeric($port)) { $errors[E::SHORT_NAME . '_mailinglist_mlmmj_port'] = E::ts('Port must be a number'); } if ($port < 1 || $port > 65535) { $errors[E::SHORT_NAME . '_mailinglist_mlmmj_port'] = E::ts('Port must be between 1 and 65535'); } } // Require host and token if mlmmj is enabled if (!empty($values[E::SHORT_NAME . '_mailinglist_mlmmj_enable'])) { if (empty($values[E::SHORT_NAME . '_mailinglist_mlmmj_host'])) { $errors[E::SHORT_NAME . '_mailinglist_mlmmj_host'] = E::ts('Host is required'); } if (empty($values[E::SHORT_NAME . '_mailinglist_mlmmj_token'])) { $errors[E::SHORT_NAME . '_mailinglist_mlmmj_token'] = E::ts('Token is required'); } } } }