x Sorry, these patches are not available anymore due to data migration. Please run a fresh inspection.
Completed
Push — master ( 61bbce...62078e )
by Diego
01:10
created

ZimbraApiClient::api()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace DiegoSouza\Zimbra;
4
5
use Illuminate\Log\LogManager;
6
use Illuminate\Support\Traits\ForwardsCalls;
7
use Zimbra\Admin\AdminFactory;
8
use Zimbra\Admin\Struct\DistributionListSelector;
9
use Zimbra\Admin\Struct\DomainSelector;
10
use Zimbra\Enum\AccountBy;
11
use Zimbra\Enum\DistributionListBy;
12
use Zimbra\Enum\DomainBy;
13
use Zimbra\Struct\AccountSelector;
14
use Zimbra\Struct\KeyValuePair;
15
16
class ZimbraApiClient
17
{
18
    use ForwardsCalls;
19
20
    protected $api;
21
    protected $logger;
22
    protected $domain;
23
24
    public function __construct($host, $emailDomain, $user, $password, LogManager $logger)
25
    {
26
        $this->api = AdminFactory::instance("https://{$host}:7071/service/admin/soap");
27
        $this->api->auth($user, $password);
28
29
        $this->domain = $emailDomain;
30
        $this->logger = $logger;
31
32
        $this->api->getClient()->on('before.request', function ($request) {
33
            $this->logger->debug("SOAP REQUEST: {$request}");
34
        });
35
36
        $this->api->getClient()->on('after.request', function ($response) {
37
            $this->logger->debug("SOAP RESPONSE: {$response}");
38
        });
39
    }
40
41
    public function createDistributionList($name)
42
    {
43
        $dynamic = false;
44
        $attr = $this->createKeyPair();
45
46
        return $this->api->createDistributionList("{$name}@{$this->domain}", $dynamic, [$attr]);
47
    }
48
49
    public function deleteDistributionList($id)
50
    {
51
        return $this->api->deleteDistributionList($id);
52
    }
53
54
    public function getAllDistributionLists()
55
    {
56
        $domainSelector = new DomainSelector(DomainBy::NAME(), $this->domain);
57
        return $this->api->getAllDistributionLists($domainSelector);
58
    }
59
60
    public function addDistributionListMember($listId, array $users)
61
    {
62
        return $this->api->addDistributionListMember($listId, $users);
63
    }
64
65 View Code Duplication
    public function getDistributionListById($id)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
66
    {
67
        $limit = 0;
68
        $offset = 0;
69
        $sortAscending = true;
70
        $attr = $this->createKeyPair();
71
72
        $dl = new DistributionListSelector(DistributionListBy::ID(), $id);
73
74
        return $this->api->getDistributionList($dl, $limit, $offset, $sortAscending, [$attr]);
75
    }
76
77 View Code Duplication
    public function getDistributionListByName($name)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
78
    {
79
        $limit = 0;
80
        $offset = 0;
81
        $sortAscending = true;
82
        $attr = $this->createKeyPair();
83
84
        $dl = new DistributionListSelector(DistributionListBy::NAME(), $name);
85
86
        return $this->api->getDistributionList($dl, $limit, $offset, $sortAscending, [$attr]);
87
    }
88
89
    public function getDistributionListMembership($distListName)
90
    {
91
        $limit = 0;
92
        $offset = 0;
93
94
        $dl = new DistributionListSelector(DistributionListBy::Name(), $distListName);
95
96
        return $this->api->getDistributionListMembership($dl, $limit, $offset);
97
    }
98
99
    public function getAllAccounts() {
100
        $serverSelector = null;
101
        $domainSelector = new DomainSelector(DomainBy::NAME(), $this->domain);
102
103
        return $this->api->getAllAccounts($serverSelector, $domainSelector);
104
    }
105
106
    public function modifyCoS($accountId, $cosId)
107
    {
108
        $attr = $this->createKeyPair('zimbraCOSId', $cosId);
109
        return $this->api->modifyAccount($accountId, [$attr]);
110
    }
111
112
    public function removeDistributionListMember($listId, $member)
113
    {
114
        $dlms = [$member];
115
        $accounts = [];
116
117
        return $this->api->removeDistributionListMember($listId, $dlms, $accounts);
118
    }
119
120
    public function renameDistributionList($listId, $newName)
121
    {
122
        return $this->api->renameDistributionList($listId, $newName);
123
    }
124
125 View Code Duplication
    public function getAccountById($id)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
126
    {
127
        $apllyCos = null;
128
129
        $attr = [
130
            'sn',
131
            'uid',
132
            'mail',
133
            'givenName',
134
            'zimbraMailQuota',
135
            'zimbraAccountStatus',
136
        ];
137
138
        $account = new AccountSelector(AccountBy::ID(), $id);
139
140
        return $this->api->getAccount($account, $apllyCos, $attr)->account;
141
    }
142
143 View Code Duplication
    public function getAccountByName($name)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
144
    {
145
        $apllyCos = null;
146
147
        $attr = [
148
            'sn',
149
            'uid',
150
            'mail',
151
            'givenName',
152
            'zimbraMailQuota',
153
            'zimbraAccountStatus',
154
        ];
155
156
        $account = new AccountSelector(AccountBy::NAME(), $name);
157
158
        return $this->api->getAccount($account, $apllyCos, $attr)->account;
159
    }
160
161
    public function getAccountMembershipByName($name)
162
    {
163
        $account = new AccountSelector(AccountBy::NAME(), $name);
164
        return $this->api->getAccountMembership($account);
165
    }
166
167
    public function getAccountMembershipbyId($id)
168
    {
169
        $account = new AccountSelector(AccountBy::ID(), $id);
170
        return $this->api->getAccountMembership($account);
171
    }
172
173
    public function getAccountInfoById($id)
174
    {
175
        $account = new AccountSelector(AccountBy::ID(), $id);
176
        return $this->api->getAccountInfo($account);
177
    }
178
179
    public function getAccountInfoByName($name)
180
    {
181
        $account = new AccountSelector(AccountBy::NAME(), $name);
182
        return $this->api->getAccountInfo($account);
183
    }
184
185
    public function getAllCos()
186
    {
187
        return $this->api->getAllCos()->cos;
188
    }
189
190
    public function getAllDomains()
191
    {
192
        return $this->api->getAllDomains()->domain;
193
    }
194
195
    public function api()
196
    {
197
        return $this->api;
198
    }
199
200
    public function __call($method, $parameters)
201
    {
202
        return $this->forwardCallTo($this->api, $method, $parameters);
203
    }
204
205
    private function createKeyPair($key = '', $value = '')
206
    {
207
        return new KeyValuePair($key, $value);
208
    }
209
}
210