1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
group.php
См. документацию.
1<?php
2namespace Bitrix\Landing\Binding;
3
4use Bitrix\Landing\Connector\SocialNetwork;
5use \Bitrix\Landing\Role;
6use \Bitrix\Landing\Rights;
7use \Bitrix\Landing\Internals\RightsTable;
8use \Bitrix\Landing\Internals\BindingTable;
9
10class Group extends Entity
11{
15 const ROLE_TYPE = 'GROUP';
16
21 protected static $bindingType = 'G';
22
29 public static function getSiteIdByGroupId(int $groupId): ?int
30 {
31 $res = BindingTable::getList([
32 'select' => [
33 'ENTITY_ID',
34 ],
35 'filter' => [
36 '=BINDING_TYPE' => self::$bindingType,
37 '=BINDING_ID' => $groupId,
38 '=ENTITY_TYPE' => self::ENTITY_TYPE_SITE,
39 ],
40 ]);
41
42 return $res->fetch()['ENTITY_ID'] ?? null;
43 }
44
50 public static function recognizeSiteTitle(array $input): array
51 {
52 $sitesTitle = [];
53
54 if (!\Bitrix\Main\Loader::includeModule('socialnetwork'))
55 {
56 return $input;
57 }
58
59 foreach ($input as $key => $item)
60 {
61 if (isset($item['ID']))
62 {
63 $sitesTitle[$item['ID']] = '';
64 }
65 }
66
67 if ($sitesTitle)
68 {
69 // get real title for sonet group
70 $res = BindingTable::getList([
71 'select' => [
72 'ENTITY_ID',
73 'GROUP_TITLE' => 'GROUP.NAME',
74 ],
75 'filter' => [
76 '=BINDING_TYPE' => self::$bindingType,
77 '=ENTITY_TYPE' => self::ENTITY_TYPE_SITE,
78 '=ENTITY_ID' => array_keys($sitesTitle)
79 ],
80 'runtime' => [
81 new \Bitrix\Main\Entity\ReferenceField(
82 'GROUP',
83 'Bitrix\Socialnetwork\WorkgroupTable',
84 [
85 '=this.BINDING_ID' => new \Bitrix\Main\DB\SqlExpression('?s', 'ref.ID'),
86 ]
87 )
88 ]
89 ]);
90
91 while ($row = $res->fetch())
92 {
93 $sitesTitle[$row['ENTITY_ID']] = $row['GROUP_TITLE'];
94 }
95
96 // replace sites titles to thr groups titles
97 foreach ($input as $key => &$item)
98 {
99 if (isset($item['ID']) && $sitesTitle[$item['ID']])
100 {
101 $item['TITLE'] = $sitesTitle[$item['ID']];
102 }
103 }
104 unset($item);
105 }
106
107 return $input;
108 }
109
116 protected static function getAccessTasks(bool $fullData = false): array
117 {
118 static $tasks = [];
119
120 if (empty($tasks))
121 {
122 $res = \CTask::getList(
123 ['LETTER' => 'ASC'],
124 ['MODULE_ID' => 'landing'],
125 );
126 while ($row = $res->fetch())
127 {
128 if ($row['LETTER'] > 'D')
129 {
130 $row['NAME'] = str_replace('landing_right_', '', $row['NAME']);
131 $tasks[] = $fullData ? $row : $row['ID'];
132 }
133 }
134 }
135
136 return $tasks;
137 }
138
143 protected static function getRoleId()
144 {
145 static $roleId = null;
146
147 if ($roleId !== null)
148 {
149 return $roleId;
150 }
151
152 $res = Role::getList([
153 'select' => [
154 'ID'
155 ],
156 'filter' => [
157 '=TYPE' => self::ROLE_TYPE
158 ]
159 ]);
160 if ($row = $res->fetch())
161 {
162 $roleId = $row['ID'];
163 }
164 else
165 {
166 $res = Role::add([
167 'XML_ID' => 'MANAGER',
168 'TYPE' => self::ROLE_TYPE
169 ]);
170 if ($res->isSuccess())
171 {
172 $roleId = $res->getId();
173 }
174 }
175
176 if (!$roleId)
177 {
178 $roleId = 0;
179 }
180
181 return (int) $roleId;
182 }
183
191 protected function addSiteRights(int $siteId, array $groupRoles = []): void
192 {
193 $tasks = self::getAccessTasks(true);
194 $roleId = self::getRoleId();
195
196 // for new binding
197 if (!$groupRoles && \Bitrix\Main\Loader::includeModule('socialnetwork'))
198 {
199 $groupRoles = [
200 'read' => SONET_ROLES_USER,
201 'edit' => SONET_ROLES_USER,
202 'sett' => SONET_ROLES_USER,
203 'delete' => SONET_ROLES_USER,
204 ];
205
206 // try to retrieve roles from group features
207 $res = \CSocNetFeaturesPerms::getList(
208 [],
209 [
210 'FEATURE_ENTITY_ID' => $this->bindingId,
211 'FEATURE_ENTITY_TYPE' => SONET_ENTITY_GROUP,
212 'FEATURE_FEATURE' => SocialNetwork::SETTINGS_CODE,
213 ],
214 );
215 while ($row = $res->fetch())
216 {
217 $groupRoles[$row['OPERATION_ID']] = $row['ROLE'];
218 }
219 }
220
221 foreach ($tasks as $task)
222 {
223 if (!isset($groupRoles[$task['NAME']]))
224 {
225 continue;
226 }
227 $check = RightsTable::getList([
228 'select' => [
229 'ID'
230 ],
231 'filter' => [
232 'ENTITY_ID' => $siteId,
233 '=ENTITY_TYPE' => Rights::ENTITY_TYPE_SITE,
234 '=ACCESS_CODE' => 'SG' . $this->bindingId . '_' . $groupRoles[$task['NAME']],
235 'TASK_ID' => $task['ID'],
236 'ROLE_ID' => $roleId
237 ],
238 ])->fetch();
239 if (!$check)
240 {
241 RightsTable::add([
242 'ENTITY_ID' => $siteId,
243 'ENTITY_TYPE' => Rights::ENTITY_TYPE_SITE,
244 'TASK_ID' => $task['ID'],
245 'ACCESS_CODE' => 'SG' . $this->bindingId . '_' . $groupRoles[$task['NAME']],
246 'ROLE_ID' => $roleId
247 ])->isSuccess();
248 }
249 }
250 }
251
258 protected function updateSiteRights(int $siteId): void
259 {
260 $opsToRoles = $this->getOperationsToRolesMap($this->bindingId);
261 $this->removeSiteRights($siteId);
262 $this->addSiteRights($siteId, $opsToRoles);
263 }
264
270 protected function removeSiteRights($siteId)
271 {
272 $roleId = self::getRoleId();
273
274 $res = RightsTable::getList([
275 'select' => [
276 'ID'
277 ],
278 'filter' => [
279 'ENTITY_ID' => $siteId,
280 '=ENTITY_TYPE' => Rights::ENTITY_TYPE_SITE,
281 'ACCESS_CODE' => 'SG' . $this->bindingId . '_%',
282 'ROLE_ID' => $roleId
283 ]
284 ]);
285 while ($row = $res->fetch())
286 {
287 RightsTable::delete($row['ID'])->isSuccess();
288 }
289 }
290
297 private function getOperationsToRolesMap(int $groupId): array
298 {
299 $opsToRoles = [];
300
301 if (!\Bitrix\Main\Loader::includeModule('socialnetwork'))
302 {
303 return $opsToRoles;
304 }
305
306 $res = \CSocNetFeaturesPerms::getList(
307 [],
308 [
309 'FEATURE_ENTITY_ID' => $groupId,
310 'FEATURE_ENTITY_TYPE' => SONET_ENTITY_GROUP,
311 'FEATURE_FEATURE' => SocialNetwork::SETTINGS_CODE,
312 ],
313 );
314 while ($row = $res->fetch())
315 {
316 $opsToRoles[$row['OPERATION_ID']] = $row['ROLE'];
317 }
318
319 return $opsToRoles;
320 }
321}
addSiteRights(int $siteId, array $groupRoles=[])
Определения group.php:191
static getAccessTasks(bool $fullData=false)
Определения group.php:116
static getSiteIdByGroupId(int $groupId)
Определения group.php:29
const ROLE_TYPE
Определения group.php:15
static recognizeSiteTitle(array $input)
Определения group.php:50
updateSiteRights(int $siteId)
Определения group.php:258
removeSiteRights($siteId)
Определения group.php:270
static $bindingType
Определения group.php:21
static getRoleId()
Определения group.php:143
const ENTITY_TYPE_SITE
Определения rights.php:16
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$siteId
Определения ajax.php:8
Определения arrayresult.php:2
Определения ufield.php:9
if(empty($signedUserToken)) $key
Определения quickway.php:257
const SONET_ROLES_USER
Определения include.php:31
const SONET_ENTITY_GROUP
Определения include.php:117