3declare(strict_types=1);
5namespace Bitrix\Socialnetwork\Collab\Controller;
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;
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;
38 use GetCollabIdBySourceTrait;
53 $requestData =
$request->getPostList()->toArray();
54 $requestData[
'id'] = $this->resolveCollabId(
$request,
'id');
60 CollabUpdateDto::class,
63 $requestData =
$request->getPostList()->toArray();
64 $requestData[
'id'] = $this->resolveCollabId(
$request,
'id');
66 return CollabUpdateDto::createFromRequest($requestData);
73 $requestData =
$request->getPostList()->toArray();
74 $requestData[
'id'] = $this->resolveCollabId(
$request,
'id');
76 return CollabGetDto::createFromRequest($requestData);
80 CollabDeleteDto::class,
83 $requestData =
$request->getPostList()->toArray();
84 $requestData[
'id'] = $this->resolveCollabId(
$request,
'id');
120 $collab = $this->provider->getCollab((
int)$dto->id);
121 if ($collab ===
null)
126 if (!CollabAccessController::can($this->userId, CollabDictionary::VIEW, $dto->id))
128 $this->addError(
new Error(
'Access denied'));
133 $memberIds = array_keys($collab->getMemberIdsWithRole());
134 $users = UserProvider::getInstance()->enrich($memberIds);
136 $collab->setAdditionInfo(
'users', $users);
138 $imageId = $collab->getImageId();
139 $file = FileProvider::getInstance()->get($imageId);
141 $collab->setAdditionInfo(
'image', $file);
153 $command = CollabAddCommand::createFromArray($dto)->setInitiatorId($this->userId);
157 $this->addError(Error::createFromThrowable($e));
163 $result = (
new RequirementDecorator(
new AccessDecorator(
new CorrectModeratorDecorator($this->service))))->add($command);
166 $this->addErrors(
$result->getErrors());
171 $collabId = (int)
$result->getCollab()?->getId();
172 $getDto =
new CollabGetDto($collabId);
184 $command = CollabUpdateCommand::createFromArray($dto)->setInitiatorId($this->userId);
188 $this->addError(Error::createFromThrowable($e));
196 $this->addErrors(
$result->getErrors());
201 $collabId = (int)
$result->getCollab()?->getId();
214 $command = CollabDeleteCommand::createFromArray($dto)->setInitiatorId($this->userId);
218 $this->addError(Error::createFromThrowable($e));
226 $this->addErrors(
$result->getErrors());
234 protected function init(): void
238 $this->service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.service');
239 $this->registry = CollabRegistry::getInstance();
240 $this->provider = CollabProvider::getInstance();
242 $this->userId = (int)CurrentUser::get()->getId();
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
deleteAction(CollabDeleteDto $dto)
updateAction(CollabUpdateDto $dto)
getAction(CollabGetDto $dto)
static createFromRequest(mixed $request)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)