false, 'cloudflare'=> true, 'facebook' => false, 'instagram' => false, 'maps' => false, 'gmb' => false, 'helcim' => false, 'postmark' => false, 'square' => false, 'umami' => true, ]; private function __construct(){ } public static function getInstance():Site { if (!isset(self::$instance)) { self::$instance = new self(); do_action('jvbLoadDefinitions'); } return self::$instance; } public static function set(string $property, ?string $value = null):void { $property = strtolower($property); if (property_exists(self::class, $property)) { switch ($property) { case 'icons': $allowed = ['thin', 'light', 'regular','bold','fill','duotone']; $value = strtolower($value); if (in_array($value, $allowed)) { self::$icons = $value; } else { error_log('[Site]::set Could not set icons to "'.$value.'", setting to default'); } break; default: self::${$property} = true; } } else { error_log('[Site]::set Could not set property: '.$property); } } public static function setAll(array $properties):void { foreach ($properties as $property) { self::set($property); } } public static function has(string $property):bool { return property_exists(self::class, $property) && self::${$property} === true; } public static function hasAny(array $properties):bool { foreach ($properties as $property) { if (self::has($property)) { return true; } } return false; } public static function hasAll(array $properties):bool { foreach ($properties as $property) { if (!self::has($property)) { return false; } } return true; } public static function icon():string { return self::$icons; } public static function setIntegration(string $integration, bool $set = true):void { $integration = strtolower($integration); if (array_key_exists($integration, self::$integrations)) { self::$integrations[$integration] = $set; }else { error_log('[Site]::setIntegration Could not set integration: '.$integration); } } public static function setIntegrations(array $integrations, bool $set = true):void { foreach ($integrations as $integration) { self::setIntegration($integration, $set); } } public static function hasIntegration(string $integration):bool { $integration = strtolower($integration); return array_key_exists($integration, self::$integrations); } public static function hasAnyIntegration(array $integrations = []):bool { if (empty($integrations)) { $integrations = array_keys(self::$integrations); } foreach ($integrations as $integration) { if (array_key_exists($integration, self::$integrations) && self::$integrations[$integration] === true) { return true; } } return false; } public static function getIntegrations():array { return array_filter(self::$integrations); } public static function login():Login|false { if (!isset(self::$loginConfig)) { self::$loginConfig = new Login(); } return self::$loginConfig; } public static function membership():Membership|false { if (!self::$membership) { return false; } if (!isset(self::$membershipConfig)) { self::$membershipConfig = new Membership(); } return self::$membershipConfig; } public function setDashboardTitle(string $title):void { self::$dashboardTitle = $title; } public static function dashboardTitle():bool|string { return self::$dashboardTitle ?? false; } public function setDirectorySingular(string $title):void { self::$directory_singular = $title; } public static function getDirectorySingular():bool|string { return self::$directory_singular ?? false; } public function setDirectoryPlural(string $title):void { self::$directory_plural = $title; } public static function getDirectoryPlural():bool|string { return self::$directory_plural ?? false; } public static function setDefaultReferralRole(string $role):void { self::$defaultReferralRole = $role; } public static function getDefaultReferralRole():string { return self::$defaultReferralRole; } }