'JVBase\integrations\services\GoogleMaps', 'square' => 'JVBase\integrations\services\Square', 'facebook' => 'JVBase\integrations\services\Facebook', 'helcim' => 'JVBase\integrations\services\Helcim', 'instagram' => 'JVBase\integrations\services\Instagram', 'bluesky' => 'JVBase\integrations\services\BlueSky', 'gmb' => 'JVBase\integrations\services\GoogleMyBusiness', 'cloudflare' => 'JVBase\integrations\services\Cloudflare', 'umami' => 'JVBase\integrations\services\Umami', 'postmark' => 'JVBase\integrations\services\PostMark', ]; public function getService(string $service):Integrations|false { return array_key_exists($service, $this->serviceMap) ? $this->serviceMap[$service]::getInstance() : false; } public function getServiceUser(string $service, ?int $userID = null):Integrations|false { $service = $this->getService($service); if ($service->userID !== $userID && method_exists($service, 'switchUser')) { $service->switchUser($userID); } return $service; } public function getAvailableServices():array { return array_filter(array_keys($this->serviceMap), function ($service) { return Site::hasIntegration($service); }, ARRAY_FILTER_USE_KEY); } }