1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
Collab.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Controller;
6
7use Bitrix\Main\ArgumentException;
8use Bitrix\Main\DI\ServiceLocator;
9use Bitrix\Main\Engine\AutoWire\Parameter;
10use Bitrix\Main\Engine\Controller;
11use Bitrix\Main\Engine\CurrentUser;
12use Bitrix\Main\Error;
13use Bitrix\Main\Validation\Engine\AutoWire\ValidationParameter;
14use Bitrix\SocialNetwork\Collab\Access\CollabAccessController;
15use Bitrix\SocialNetwork\Collab\Access\CollabDictionary;
16use Bitrix\Socialnetwork\Collab\Control\CollabResult;
17use Bitrix\Socialnetwork\Collab\Control\CollabService;
18use Bitrix\Socialnetwork\Collab\Control\Command\CollabAddCommand;
19use Bitrix\Socialnetwork\Collab\Control\Command\CollabDeleteCommand;
20use Bitrix\Socialnetwork\Collab\Control\Command\CollabUpdateCommand;
21use Bitrix\Socialnetwork\Collab\Control\Decorator\CorrectModeratorDecorator;
22use Bitrix\Socialnetwork\Collab\Control\Decorator\RequirementDecorator;
23use Bitrix\Socialnetwork\Collab\Controller\Dto\CollabDeleteDto;
24use Bitrix\Socialnetwork\Collab\Controller\Dto\CollabAddDto;
25use Bitrix\Socialnetwork\Collab\Controller\Dto\CollabGetDto;
26use Bitrix\Socialnetwork\Collab\Controller\Dto\CollabUpdateDto;
27use Bitrix\Socialnetwork\Collab\Controller\Filter\FeatureFilter;
28use Bitrix\Socialnetwork\Collab\Controller\Filter\IntranetUserFilter;
29use Bitrix\Socialnetwork\Collab\Controller\Trait\GetCollabIdBySourceTrait;
30use Bitrix\Socialnetwork\Collab\Provider\CollabProvider;
31use Bitrix\Socialnetwork\Collab\Registry\CollabRegistry;
32use Bitrix\Socialnetwork\Control\Decorator\AccessDecorator;
33use Bitrix\Socialnetwork\Provider\FileProvider;
34use Bitrix\Socialnetwork\Provider\UserProvider;
35
36class Collab extends Controller
37{
38 use GetCollabIdBySourceTrait;
39
43
44 protected int $userId;
45
46 public function getAutoWiredParameters(): array
47 {
48 return [
49 new Parameter(
50 CollabAddDto::class,
51 function (): CollabAddDto {
52 $request = $this->getRequest();
53 $requestData = $request->getPostList()->toArray();
54 $requestData['id'] = $this->resolveCollabId($request, 'id');
55
56 return CollabAddDto::createFromRequest($requestData);
57 }
58 ),
60 CollabUpdateDto::class,
61 function (): CollabUpdateDto {
62 $request = $this->getRequest();
63 $requestData = $request->getPostList()->toArray();
64 $requestData['id'] = $this->resolveCollabId($request, 'id');
65
66 return CollabUpdateDto::createFromRequest($requestData);
67 }
68 ),
70 CollabGetDto::class,
71 function (): CollabGetDto {
72 $request = $this->getRequest();
73 $requestData = $request->getPostList()->toArray();
74 $requestData['id'] = $this->resolveCollabId($request, 'id');
75
76 return CollabGetDto::createFromRequest($requestData);
77 }
78 ),
80 CollabDeleteDto::class,
81 function (): CollabDeleteDto {
82 $request = $this->getRequest();
83 $requestData = $request->getPostList()->toArray();
84 $requestData['id'] = $this->resolveCollabId($request, 'id');
85
86 return CollabDeleteDto::createFromRequest($requestData);
87 }
88 ),
89 ];
90 }
91
92 public function configureActions(): array
93 {
94 return [
95 'add' => [
96 '+prefilters' => [
98 new FeatureFilter(),
99 ],
100 ],
101 'update' => [
102 '+prefilters' => [
103 new IntranetUserFilter(),
104 new FeatureFilter(),
105 ],
106 ],
107 'delete' => [
108 '+prefilters' => [
109 new IntranetUserFilter(),
110 ],
111 ],
112 ];
113 }
114
119 {
120 $collab = $this->provider->getCollab((int)$dto->id);
121 if ($collab === null)
122 {
123 return null;
124 }
125
126 if (!CollabAccessController::can($this->userId, CollabDictionary::VIEW, $dto->id))
127 {
128 $this->addError(new Error('Access denied'));
129
130 return null;
131 }
132
133 $memberIds = array_keys($collab->getMemberIdsWithRole());
134 $users = UserProvider::getInstance()->enrich($memberIds);
135
136 $collab->setAdditionInfo('users', $users);
137
138 $imageId = $collab->getImageId();
139 $file = FileProvider::getInstance()->get($imageId);
140
141 $collab->setAdditionInfo('image', $file);
142
143 return $collab;
144 }
145
149 public function addAction(CollabAddDto $dto): ?\Bitrix\Socialnetwork\Collab\Collab
150 {
151 try
152 {
153 $command = CollabAddCommand::createFromArray($dto)->setInitiatorId($this->userId);
154 }
155 catch (ArgumentException $e)
156 {
157 $this->addError(Error::createFromThrowable($e));
158
159 return null;
160 }
161
163 $result = (new RequirementDecorator(new AccessDecorator(new CorrectModeratorDecorator($this->service))))->add($command);
164 if (!$result->isSuccess())
165 {
166 $this->addErrors($result->getErrors());
167
168 return null;
169 }
170
171 $collabId = (int)$result->getCollab()?->getId();
172 $getDto = new CollabGetDto($collabId);
173
174 return $this->getAction($getDto);
175 }
176
181 {
182 try
183 {
184 $command = CollabUpdateCommand::createFromArray($dto)->setInitiatorId($this->userId);
185 }
186 catch (ArgumentException $e)
187 {
188 $this->addError(Error::createFromThrowable($e));
189
190 return null;
191 }
192
193 $result = (new AccessDecorator($this->service))->update($command);
194 if (!$result->isSuccess())
195 {
196 $this->addErrors($result->getErrors());
197
198 return null;
199 }
200
201 $collabId = (int)$result->getCollab()?->getId();
202 $getDto = new CollabGetDto($collabId);
203
204 return $this->getAction($getDto);
205 }
206
210 public function deleteAction(CollabDeleteDto $dto): ?bool
211 {
212 try
213 {
214 $command = CollabDeleteCommand::createFromArray($dto)->setInitiatorId($this->userId);
215 }
216 catch (ArgumentException $e)
217 {
218 $this->addError(Error::createFromThrowable($e));
219
220 return null;
221 }
222
223 $result = (new AccessDecorator($this->service))->delete($command);
224 if (!$result->isSuccess())
225 {
226 $this->addErrors($result->getErrors());
227
228 return null;
229 }
230
231 return true;
232 }
233
234 protected function init(): void
235 {
236 parent::init();
237
238 $this->service = ServiceLocator::getInstance()->get('socialnetwork.collab.service');
239 $this->registry = CollabRegistry::getInstance();
240 $this->provider = CollabProvider::getInstance();
241
242 $this->userId = (int)CurrentUser::get()->getId();
243 }
244}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
Определения error.php:15
deleteAction(CollabDeleteDto $dto)
Определения Collab.php:210
CollabRegistry $registry
Определения Collab.php:41
updateAction(CollabUpdateDto $dto)
Определения Collab.php:180
getAction(CollabGetDto $dto)
Определения Collab.php:118
CollabService $service
Определения Collab.php:40
CollabProvider $provider
Определения Collab.php:42
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14