Jake Vanderwerf
2026-08-26 d8cc8f9eedcb21c4ba5ac4d91852591fbb179d92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
namespace JVBase\integrations;
 
use JVBase\base\Site;
if (!defined('ABSPATH')) {
    exit;
}
trait ServiceMap {
    protected array $serviceMap = [
        'maps' => '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);
    }
}