<?php /** * A helper class to provide configuration options for the library. * * @since 1.0.0 * * @package StellarWP\Telemetry * * @license GPL-2.0-or-later * Modified using Strauss. * @see https://github.com/BrianHenryIE/strauss */ namespace iThemesSecurity\Strauss\StellarWP\Telemetry; use iThemesSecurity\Strauss\StellarWP\ContainerContract\ContainerInterface; /** * A configuration class to help set up the library. * * @since 1.0.0 * * @package StellarWP\Telemetry */ class Config { /** * Container object. * * @since 1.0.0 * * @var ?\StellarWP\ContainerContract\ContainerInterface */ protected static $container; /** * Prefix for hook names. * * @since 1.0.0 * * @var string */ protected static $hook_prefix = ''; /** * Unique ID for the stellarwp slug. * * @since 1.0.0 * * @var string */ protected static $stellar_slug = ''; /** * Unique IDs and optional plugin slugs for StellarWP slugs. * * @since 2.0.0 * * @var array */ protected static $stellar_slugs = []; /** * The url of the telemetry server. * * @since 1.0.0 * * @var string */ protected static $server_url = 'https://telemetry.stellarwp.com/api/v1'; /** * Get the container. * * @since 1.0.0 * * @throws \RuntimeException Throws exception if container is not set. * * @return \iThemesSecurity\Strauss\StellarWP\ContainerContract\ContainerInterface */ public static function get_container() { if ( null === self::$container ) { throw new \RuntimeException( 'You must provide a container via StellarWP\Telemetry\Config::set_container() before attempting to fetch it.' ); } return self::$container; } /** * Gets the hook prefix. * * @since 1.0.0 * * @return string */ public static function get_hook_prefix() { return static::$hook_prefix; } /** * Gets the telemetry server url. * * @since 1.0.0 * * @return string */ public static function get_server_url() { return static::$server_url; } /** * Gets the stellar slug. * * @since 1.0.0 * * @return string */ public static function get_stellar_slug() { return static::$stellar_slug; } /** * Gets the registered stellar slugs. * * @since 2.0.0 * * @return array<string,string> */ public static function get_all_stellar_slugs() { return static::$stellar_slugs; } /** * Returns whether the container has been set. * * @since 1.0.0 * * @return bool */ public static function has_container() { return null !== self::$container; } /** * Resets this class back to the defaults. * * @since 1.0.0 * * @return void */ public static function reset() { static::$hook_prefix = ''; static::$server_url = 'https://telemetry.stellarwp.com/api/v1'; static::$stellar_slug = ''; static::$container = null; } /** * Set the container object. * * @since 1.0.0 * * @param \iThemesSecurity\Strauss\StellarWP\ContainerContract\ContainerInterface $container Container object. * * @return void */ public static function set_container( ContainerInterface $container ) { self::$container = $container; } /** * Sets the hook prefix. * * @since 1.0.0 * * @param string $prefix The prefix to use for hooks. * * @return void */ public static function set_hook_prefix( string $prefix ) { // Make sure the prefix always ends with a separator. if ( substr( $prefix, -1 ) !== '/' ) { $prefix = $prefix . '/'; } static::$hook_prefix = $prefix; } /** * Sets the stellar slug. * * @since 1.0.0 * * @param string $stellar_slug The unique slug to identify the plugin with the server. * * @return void */ public static function set_stellar_slug( string $stellar_slug ) { static::$stellar_slug = $stellar_slug; // Also add the stellar slug to the array of all registered stellar slugs. static::$stellar_slugs[ $stellar_slug ] = ''; } /** * Adds a new stellar slug to the stellar slugs array. * * Utilizing an array of stellar slugs, the library can be tailored for use in a single plugin * or use within a shared library for several plugins. Each stellar slug registered will * generate unique filters and hooks that give further customization for each slug * * @since 2.0.0 * * @param string $stellar_slug A unique slug to add to the config. * @param string $wp_slug The plugin's basename (used for capturing deactivation "Exit Interview" info). * * @return void */ public static function add_stellar_slug( string $stellar_slug, string $wp_slug = '' ) { static::$stellar_slugs[ $stellar_slug ] = $wp_slug; } /** * Sets the telemetry server url. * * @since 1.0.0 * * @param string $url The url of the telemetry server. * * @return void */ public static function set_server_url( string $url ) { static::$server_url = $url; } }