1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
ConvertToCollabCommand.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Converter\Command;
6
7use Bitrix\Main\Error;
8use Bitrix\Main\Result;
9use Bitrix\Socialnetwork\Collab\Control\Command\ValueObject\CollabFeatures;
10use Bitrix\Socialnetwork\Collab\Control\Command\ValueObject\CollabOptions;
11use Bitrix\Socialnetwork\Collab\Control\Command\ValueObject\CollabSiteIds;
12use Bitrix\Socialnetwork\Collab\Control\Option\Type\WhoCanInviteOption;
13use Bitrix\Socialnetwork\Collab\Converter\Handler\AbstractHandler;
14use Bitrix\Socialnetwork\Collab\Converter\Handler\SendChatMessageHandler;
15use Bitrix\Socialnetwork\Collab\Converter\Handler\SetCollabOptionsHandler;
16use Bitrix\Socialnetwork\Collab\Converter\Handler\SetDefaultThemeHandler;
17use Bitrix\Socialnetwork\Collab\Converter\Handler\SetFeaturesHandler;
18use Bitrix\Socialnetwork\Collab\Converter\Handler\UpdateChatHandler;
19use Bitrix\Socialnetwork\Collab\Converter\Handler\UpdateGroupHandler;
20use Bitrix\Socialnetwork\Collab\Converter\Handler\UpdateGroupTypeHandler;
21use Bitrix\Socialnetwork\Collab\Integration\IM\ActionType;
22use Bitrix\Socialnetwork\Collab\Property\Feature;
23use Bitrix\Socialnetwork\Control\Command\UpdateCommand;
24use Bitrix\Socialnetwork\Control\Command\ValueObject\Features;
25use Bitrix\Socialnetwork\Control\Command\ValueObject\FeaturesPermissions;
26use Bitrix\Socialnetwork\Control\Enum\ViewMode;
27use Bitrix\Socialnetwork\Integration\Tasks\Flow\FlowService;
28use Bitrix\Socialnetwork\Item\Workgroup\AvatarType;
29use Bitrix\Socialnetwork\Item\Workgroup\Type;
30use Bitrix\Socialnetwork\Provider\FeatureProvider;
31
33{
34 public const ERROR_CODE_WRONG_TYPE = 10001;
35 public const ERROR_CODE_HAS_FLOWS = 10002;
36 private const TURNED_OFF_FEATURES = [
37 'forum' => [
38 'full' => SONET_ROLES_NONE,
39 'newtopic' => SONET_ROLES_NONE,
40 'answer' => SONET_ROLES_NONE,
41 ],
42 'photo' => [
43 'write'=> SONET_ROLES_NONE,
44 ],
45 'blog' => [
46 'premoderate_post' => SONET_ROLES_NONE,
47 'write_post' => SONET_ROLES_NONE,
48 'moderate_post' => SONET_ROLES_NONE,
49 'full_post' => SONET_ROLES_NONE,
50 'premoderate_comment' => SONET_ROLES_NONE,
51 'write_comment' => SONET_ROLES_NONE,
52 'moderate_comment' => SONET_ROLES_NONE,
53 'full_comment' => SONET_ROLES_NONE,
54 ],
55 'landing_knowledge' => [
56 'edit' => SONET_ROLES_NONE,
57 'sett' => SONET_ROLES_NONE,
58 'delete' => SONET_ROLES_NONE,
59 ],
60 'group_lists' => [
61 'write' => SONET_ROLES_NONE,
62 ],
63 ];
64
66 public function getHandlers(): array
67 {
68 $updateGroupCommand = (new UpdateCommand())
69 ->setSiteIds(CollabSiteIds::createWithDefaultValue())
70 ->setViewMode(ViewMode::SECRET)
71 ->setAvatarType(AvatarType::None)
72 ->setId($this->group->getId())
73 ->setInitiatorId($this->getInitiatorId())
74 ->setFeatures($this->prepareFeatures())
75 ->setPermissions(FeaturesPermissions::create(self::TURNED_OFF_FEATURES))
76 ;
77
78 $collabOptions = CollabOptions::create([WhoCanInviteOption::NAME => $this->group->getInitiatePermission()]);
79
80 return [
81 new UpdateGroupHandler($updateGroupCommand),
82 new UpdateGroupTypeHandler(Type::Collab),
83 new SetFeaturesHandler($this->prepareFeatures()),
85 new SetCollabOptionsHandler($collabOptions),
87 new SendChatMessageHandler(ActionType::ConvertGroupToCollab),
88 new SendChatMessageHandler(ActionType::ConvertGroupToCollabRich),
89 ];
90 }
91
92 private function prepareFeatures(): Features
93 {
94 $features = CollabFeatures::createWithDefaultValue();
96 $currentFeatures = FeatureProvider::getInstance()->getFeatures($this->group->getId());
97 foreach ($currentFeatures as $feature)
98 {
99 if ($feature->isActive)
100 {
101 $features->add($feature->feature);
102 }
103 }
104
105 return $features;
106 }
107
108 public function validateGroup(): Result
109 {
110 $result = new Result();
111
112 if ($this->group->getType() !== Type::Group)
113 {
114 $result->addError(new Error('Only groups can be converted into collabs', self::ERROR_CODE_WRONG_TYPE));
115 }
116
117 if ((new FlowService())->doesGroupHaveFlows($this->group->getId()))
118 {
119 $result->addError(new Error('The group should not have flows', self::ERROR_CODE_HAS_FLOWS));
120 }
121
122 return $result;
123 }
124}
Определения error.php:15
</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
const SONET_ROLES_NONE
Определения include.php:28