Jake Vanderwerf
15 mins ago 3baf3d2545ba6ece6b74a64c0def59bd0774cf54
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
namespace JVBase\registrar\config;
 
use JVBase\registrar\Registrar;
use JVBase\base\Site;
 
if (!defined('ABSPATH')) {
    exit;
}
 
final class Integration extends Config{
    /**
     * @var string Must match as defined in the JVBase\integrations namespace
     */
    protected string $service_name;
    protected ?string $content_type = null;
    /**
     * @var bool Whether to send to the integration on publish
     */
    protected bool $initial;
    /**
     * @var bool Whether to sync changes with the service
     */
    protected bool $update;
    protected bool $canSchedule;
    /**
     * @var bool whether this is a customer role, used if this is a user-based Registrar
     */
    protected bool $isCustomer;
 
 
 
    public function __construct(string $service) {
        if (!Site::hasIntegration($service)) {
            error_log('Could not link with integration, as it is not enabled: '.$service);
            return;
        }
        $this->service_name = $service;
    }
 
 
    public function getService_name():string
    {
        return $this->service_name;
    }
 
    /**
     * @param ?string $content must match what integration expects
     * @return self
     */
    public function setContentType(?string $content):self
    {
        if (is_null($content)) {
            return $this;
        }
        $connection = JVB()->connect($this->service_name);
        if (!$connection){
            error_log('[Integration]::setContentType Service is not setup. '.$this->service_name);
            return $this;
        }
        $allowed = $connection->getAllowedContent();
        if (!in_array($content, $allowed)) {
            error_log($this->service_name.' Connection does not support this content: '.$content);
            return $this;
        }
        $this->content_type = $content;
        return $this;
    }
 
    public function getContentType():?string
    {
        return $this->content_type;
    }
 
    public function setInitial(bool $set):self
    {
        $this->initial = $set;
        return $this;
    }
    public function getInitial():bool|null
    {
        return $this->initial??null;
    }
 
    public function setUpdate(bool $set):self
    {
        $this->update = $set;
        return $this;
    }
    public function getUpdate():bool|null
    {
        return $this->update ?? null;
    }
 
    public function setCustomer(bool $set):self
    {
        $this->isCustomer = $set;
        return $this;
    }
    public function isCustomer():bool
    {
        return $this->isCustomer??false;
    }
 
 
    public function setCanSchedule(bool $set):self
    {
        $this->canSchedule = $set;
        return $this;
    }
    public function getCanSchedule():bool|null
    {
        return $this->canSchedule??null;
    }
 
    public function getConfig(): array
    {
        $config = [];
        if (isset($this->content_type)) {
            $config['content_type'] = $this->content_type;
        }
        if (isset($this->initial)) {
            $config['initial'] = $this->initial;
        }
        if (isset($this->update)) {
            $config['update'] = $this->update;
        }
 
        return $config;
    }
}