1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
Registrar.php
См. документацию.
1<?php
2
3namespace Bitrix\MessageService\Providers\Edna;
4
5use Bitrix\Main\Error;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\Result;
8use Bitrix\MessageService\Providers\Constants\InternalOption;
9use Bitrix\MessageService\Providers\Edna\EdnaRu;
10use Bitrix\MessageService\Providers;
11use Bitrix\MessageService\Providers\Edna;
12use Bitrix\MessageService\Sender\Traits\RussianProvider;
13
15{
16
17 use RussianProvider { RussianProvider::isSupported as isRussianRegion; }
18
19 protected EdnaRu $utils;
20 protected string $channelType = '';
21
22 abstract protected function getCallbackTypeList(): array;
23
25 {
26 parent::__construct($providerId, $optionManager);
27
28 $this->utils = $utils;
29 }
30
31 public function isRegistered(): bool
32 {
33 return
34 !is_null($this->optionManager->getOption(InternalOption::API_KEY))
35 && !is_null($this->optionManager->getOption(InternalOption::SENDER_ID));
36 }
37
38 public function register(array $fields): Result
39 {
40 if (isset($fields['subject_id']))
41 {
42 $fields[InternalOption::SENDER_ID] = $fields['subject_id'];
43 }
44
45 if (!isset($fields[InternalOption::API_KEY], $fields[InternalOption::SENDER_ID]))
46 {
47 return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_EDNARU_EMPTY_REQUIRED_FIELDS')));
48 }
49 $this->optionManager->setOption(InternalOption::API_KEY, (string)$fields[InternalOption::API_KEY]);
50
51 $subjectIdList = [];
52 foreach (explode(';', (string)$fields[InternalOption::SENDER_ID]) as $senderId)
53 {
54 $senderId = trim($senderId);
55 if ($senderId !== '')
56 {
57 $subjectIdList[] = (int)$senderId;
58 }
59 }
60 if (!$this->utils->checkActiveChannelBySubjectIdList($subjectIdList, $this->channelType))
61 {
62 $this->optionManager->clearOptions();
63
64 return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_EDNARU_INACTIVE_CHANNEL_ERROR')));
65 }
66
67 foreach ($subjectIdList as $subjectId)
68 {
69 $setCallbackResult = $this->utils->setCallback(
70 $this->getCallbackUrl(),
71 $this->getCallbackTypeList(),
72 $subjectId
73 );
74 if (!$setCallbackResult->isSuccess())
75 {
76 $this->optionManager->clearOptions();
77
78 $errorData = $setCallbackResult->getData();
79
80 if (isset($errorData['detail']))
81 {
82 return (new Result())->addError(new Error($errorData['detail']));
83 }
84
85 return $setCallbackResult;
86 }
87 }
88
89 $this->optionManager->setOption(InternalOption::SENDER_ID, $subjectIdList);
90 $this->optionManager->setOption(InternalOption::MIGRATED_TO_STANDART_SETTING_NAMES, 'Y');
91
92 return new Result();
93 }
94
98 public function getOwnerInfo(): array
99 {
100 return [
101 InternalOption::API_KEY => $this->optionManager->getOption(InternalOption::API_KEY),
102 InternalOption::SENDER_ID => $this->optionManager->getOption(InternalOption::SENDER_ID),
103 ];
104 }
105
106 public function isSupported(): bool
107 {
108 return self::isRussianRegion();
109 }
110
111 public function canUse(): bool
112 {
113 return ($this->isRegistered() && $this->isConfirmed());
114 }
115
116 public function getExternalManageUrl(): string
117 {
119 {
120 return 'https://app.edna.io/';
121 }
122
123 return 'https://app.edna.ru/';
124 }
125
126 public function resetCallback(): Result
127 {
129
130 if (!$this->isRegistered())
131 {
132 return (new Result())->addError(new Error('It is impossible to reinstall the callback url because the provider is not registered'));
133 }
134
135 $fields = $this->getOwnerInfo();
136
137 $subjectIdList = [];
138 foreach (explode(';', (string)$fields[InternalOption::SENDER_ID][0]) as $senderId)
139 {
140 $senderId = trim($senderId);
141 if ($senderId !== '')
142 {
143 $subjectIdList[] = (int)$senderId;
144 }
145 }
146
147 if (!$this->utils->checkActiveChannelBySubjectIdList($subjectIdList, $this->channelType))
148 {
149 return (new Result())->addError(new Error(Loc::getMessage('MESSAGESERVICE_EDNARU_INACTIVE_CHANNEL_ERROR')));
150 }
151
152 foreach ($subjectIdList as $subjectId)
153 {
154 $setCallbackResult = $this->utils->setCallback(
155 $this->getCallbackUrl(),
156 $this->getCallbackTypeList(),
157 $subjectId
158 );
159 if (!$setCallbackResult->isSuccess())
160 {
161 $errorData = $setCallbackResult->getData();
162
163 if (isset($errorData['detail']))
164 {
165 return (new Result())->addError(new Error($errorData['detail']));
166 }
167
168 return $setCallbackResult;
169 }
170 }
171
172 return new Result();
173 }
174}
Определения error.php:15
Providers OptionManager $optionManager
Определения Registrar.php:11
__construct(string $providerId, Providers\OptionManager $optionManager, EdnaRu $utils)
Определения Registrar.php:24
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$fields
Определения yandex_run.php:501