Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
6.90% |
8 / 116 |
|
9.09% |
1 / 11 |
CRAP | |
0.00% |
0 / 2 |
| InstancyUserDTO | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
| __construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
| InstancyRepository | |
6.96% |
8 / 115 |
|
10.00% |
1 / 10 |
411.86 | |
0.00% |
0 / 1 |
| __construct | |
100.00% |
8 / 8 |
|
100.00% |
1 / 1 |
3 | |||
| request | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
| updateUser | |
0.00% |
0 / 30 |
|
0.00% |
0 / 1 |
20 | |||
| updateUserEmail | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
12 | |||
| deleteGroup | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
6 | |||
| updateGroup | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
6 | |||
| createGroup | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
6 | |||
| findGroups | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
2 | |||
| getGroups | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
| getGroup | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Http\Repositories; |
| 4 | |
| 5 | use App\Services\FlyMsgAI\SecretsAWS; |
| 6 | use Illuminate\Support\Facades\Http; |
| 7 | |
| 8 | class InstancyUserDTO |
| 9 | { |
| 10 | public function __construct( |
| 11 | public readonly string $userId, |
| 12 | public readonly string $groupId, |
| 13 | public readonly string $firstName, |
| 14 | public readonly string $lastName, |
| 15 | public readonly string $email, |
| 16 | public readonly ?string $companyName, |
| 17 | ) {} |
| 18 | } |
| 19 | |
| 20 | class InstancyRepository |
| 21 | { |
| 22 | protected $baseUrl; |
| 23 | protected $apiKey; |
| 24 | protected $sso_url; |
| 25 | protected $siteGroupId; |
| 26 | protected $newUserPassword = 'FlyMSGWelcome#2024'; |
| 27 | |
| 28 | public function __construct() |
| 29 | { |
| 30 | $this->baseUrl = "https://ondemand-admin.vengreso.com/InstancyService.asmx"; |
| 31 | $this->apiKey = "22A9838A-2196-47ED-8126-4321B7A07EF1"; |
| 32 | $this->sso_url = "https://ondemand-master-admin.vengreso.com/InstancyService.asmx"; |
| 33 | $this->siteGroupId = "388"; |
| 34 | |
| 35 | if (!isProduction() && !isLocalProduction()) { |
| 36 | $this->baseUrl = "https://ondemand-admin.instancy.net/instancyservice.asmx"; |
| 37 | $this->apiKey = "A58ABE98-1B0D-41FC-9805-0F34D6B99E80"; |
| 38 | $this->sso_url = "https://ondemand-master-admin.instancy.net/InstancyService.asmx"; |
| 39 | } |
| 40 | } |
| 41 | |
| 42 | protected function request($endpoint, $data) |
| 43 | { |
| 44 | $url = $this->baseUrl . '/' . $endpoint; |
| 45 | |
| 46 | $response = Http::withHeaders([ |
| 47 | 'Accept-Encoding' => '', |
| 48 | 'Content-Type' => 'application/x-www-form-urlencoded', |
| 49 | ])->asForm() |
| 50 | ->post($url, [ |
| 51 | 'astrKey' => $this->apiKey, |
| 52 | 'astrXML' => $data, |
| 53 | ])->body(); |
| 54 | |
| 55 | $response = parseInstancyXml($response); |
| 56 | |
| 57 | $response = parseInstancyXml($response["value"]); |
| 58 | |
| 59 | return $response; |
| 60 | } |
| 61 | |
| 62 | public function updateUser(InstancyUserDTO $user) |
| 63 | { |
| 64 | $userId = $user->userId; |
| 65 | $groupId = $user->groupId; |
| 66 | $firstName = str_replace("'", " ", $user->firstName); |
| 67 | $lastName = str_replace("'", " ", $user->lastName); |
| 68 | $email = $user->email; |
| 69 | $status = 1; |
| 70 | $password = $this->newUserPassword; |
| 71 | $mobileNumber = '0000000000'; |
| 72 | $jobTitle = 'User'; |
| 73 | $companyName = $user->companyName ?? 'Vengreso'; |
| 74 | |
| 75 | if (!isProduction() && !isLocalProduction()) { |
| 76 | $email = 'staging.' . $email; |
| 77 | } |
| 78 | |
| 79 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 80 | <InstancyWrapper><Request SiteID=\"$this->siteGroupId\"><UserDetails> |
| 81 | <UserID><![CDATA[$userId]]></UserID> |
| 82 | <GroupID><![CDATA[$groupId]]></GroupID> |
| 83 | <First_Name><![CDATA[$firstName]]></First_Name> |
| 84 | <Last_Name><![CDATA[$lastName]]></Last_Name> |
| 85 | <User_name><![CDATA[$email]]></User_name> |
| 86 | <Email><![CDATA[$email]]></Email> |
| 87 | <Password><![CDATA[$password]]></Password> |
| 88 | <Mobile_Number><![CDATA[$mobileNumber]]></Mobile_Number> |
| 89 | <Job_title><![CDATA[$jobTitle]]></Job_title> |
| 90 | <Company_Name><![CDATA[$companyName]]></Company_Name> |
| 91 | <Status><![CDATA[$status]]></Status> |
| 92 | </UserDetails></Request></InstancyWrapper>"; |
| 93 | |
| 94 | $group = $this->request('UpdateUser', $xml); |
| 95 | |
| 96 | if (isset($group['UserDetails'][0])) { |
| 97 | return $group['UserDetails'][0]['UserID'][0]['value']; |
| 98 | } |
| 99 | |
| 100 | return null; |
| 101 | } |
| 102 | |
| 103 | public function updateUserEmail($groupData) |
| 104 | { |
| 105 | $instancyId = $groupData->instancyId; |
| 106 | $newEmail = $groupData->email; |
| 107 | |
| 108 | if (!isProduction() && !isLocalProduction()) { |
| 109 | $newEmail = 'staging.' . $newEmail; |
| 110 | } |
| 111 | |
| 112 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 113 | <InstancyWrapper> |
| 114 | <Request SiteID=\"$this->siteGroupId\"> |
| 115 | <UpdateUserEmail> |
| 116 | <UserID><![CDATA[$instancyId]]></UserID> |
| 117 | <EmailToBeUpdated><![CDATA[$newEmail]]></EmailToBeUpdated> |
| 118 | </UpdateUserEmail> |
| 119 | </Request> |
| 120 | </InstancyWrapper>"; |
| 121 | |
| 122 | $group = $this->request('/UpdateUserEmail', $xml); |
| 123 | |
| 124 | // if (isset($group['Group'][0])) { |
| 125 | // return $group['Group'][0]['GroupID'][0]['value']; |
| 126 | // } |
| 127 | |
| 128 | return $group; |
| 129 | } |
| 130 | |
| 131 | public function deleteGroup($groupData) |
| 132 | { |
| 133 | $groupId = $groupData->groupId; |
| 134 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 135 | <InstancyWrapper> |
| 136 | <Request SiteID=\"$this->siteGroupId\"> |
| 137 | <DeleteGroup> |
| 138 | <GroupID><![CDATA[$groupId]]></GroupID> |
| 139 | </DeleteGroup> |
| 140 | </Request> |
| 141 | </InstancyWrapper>"; |
| 142 | |
| 143 | $group = $this->request('/DeleteGroup', $xml); |
| 144 | |
| 145 | if (isset($group['Group'][0])) { |
| 146 | return $group['Group'][0]['status'][0]['value'] == "Group deleted successfully"; |
| 147 | } |
| 148 | |
| 149 | return false; |
| 150 | } |
| 151 | |
| 152 | public function updateGroup($groupData) |
| 153 | { |
| 154 | $parentId = $groupData->parentId ?? $this->siteGroupId; |
| 155 | $groupName = str_replace("'", " ", $groupData->name); |
| 156 | $groupId = $groupData->groupId; |
| 157 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 158 | <InstancyWrapper> |
| 159 | <Request SiteID=\"$this->siteGroupId\"> |
| 160 | <UpdateGroup> |
| 161 | <GroupID><![CDATA[$groupId]]></GroupID> |
| 162 | <GroupName><![CDATA[$groupName]]></GroupName> |
| 163 | <ParentID><![CDATA[$parentId]]></ParentID> |
| 164 | </UpdateGroup> |
| 165 | </Request> |
| 166 | </InstancyWrapper>"; |
| 167 | |
| 168 | $group = $this->request('/UpdateGroup', $xml); |
| 169 | |
| 170 | if (isset($group['Group'][0])) { |
| 171 | return $group['Group'][0]['status'][0]['value'] == "Updated successfully"; |
| 172 | } |
| 173 | |
| 174 | return false; |
| 175 | } |
| 176 | |
| 177 | public function createGroup($groupData) |
| 178 | { |
| 179 | $parentId = $groupData->parentId ?? $this->siteGroupId; |
| 180 | $groupName = str_replace("'", " ", $groupData->name); |
| 181 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 182 | <InstancyWrapper> |
| 183 | <Request SiteID=\"$this->siteGroupId\"> |
| 184 | <CreateGroup> |
| 185 | <GroupID><![CDATA[-1]]></GroupID> |
| 186 | <GroupName><![CDATA[$groupName]]></GroupName> |
| 187 | <ParentID><![CDATA[$parentId]]></ParentID> |
| 188 | </CreateGroup> |
| 189 | </Request> |
| 190 | </InstancyWrapper>"; |
| 191 | |
| 192 | $group = $this->request('/CreateGroup', $xml); |
| 193 | |
| 194 | if (isset($group['Group'][0])) { |
| 195 | return $group['Group'][0]['GroupID'][0]['value']; |
| 196 | } |
| 197 | |
| 198 | return null; |
| 199 | } |
| 200 | |
| 201 | public function findGroups() |
| 202 | { |
| 203 | $xml = "<?xml version='1.0' encoding='iso-8859-1'?> |
| 204 | <InstancyWrapper> |
| 205 | <Request SiteID=\"$this->siteGroupId\"> |
| 206 | <GroupList> |
| 207 | <siteid> |
| 208 | <![CDATA[$this->siteGroupId]]> |
| 209 | </siteid> |
| 210 | </GroupList> |
| 211 | </Request> |
| 212 | </InstancyWrapper>"; |
| 213 | |
| 214 | $groups = $this->request('/GetGroupListing', $xml); |
| 215 | |
| 216 | return array_map(function($group) { |
| 217 | return json_decode(json_encode([ |
| 218 | 'id' => $group['GroupID'][0]['value'], |
| 219 | 'name' => $group['Name'][0]['value'], |
| 220 | 'parentId' => $group['ParentID'][0]['value'], |
| 221 | ])); |
| 222 | }, $groups['GroupList'][0]['Group']); |
| 223 | } |
| 224 | |
| 225 | public function getGroups($option, $searchName) |
| 226 | { |
| 227 | $groups = $this->findGroups(); |
| 228 | |
| 229 | return collect($groups)->where($option, $searchName); |
| 230 | } |
| 231 | |
| 232 | public function getGroup($searchName, $company, $parentId) |
| 233 | { |
| 234 | $groups = $this->findGroups(); |
| 235 | |
| 236 | $query = collect($groups)->where('name', $searchName); |
| 237 | |
| 238 | if ($company) { |
| 239 | $query = $query->where('parentId', $company); |
| 240 | } elseif ($parentId) { |
| 241 | $query = $query->where('parentId', $parentId); |
| 242 | } |
| 243 | |
| 244 | return $query->first(); |
| 245 | } |
| 246 | } |