1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
socialnetwork.php
См. документацию.
1<?php
2namespace Bitrix\Landing\Connector;
3
4use Bitrix\Landing\Binding;
5use Bitrix\Landing\Copy\Integration\Group;
6use Bitrix\Landing\Manager;
7use Bitrix\Landing\Restriction;
8use Bitrix\Landing\Rights;
9use Bitrix\Landing\Site;
10use Bitrix\Main\Config\Option;
11use Bitrix\Main\Loader;
12use Bitrix\Main\Localization\Loc;
13
14Loc::loadMessages(__FILE__);
15
17{
21 const SETTINGS_CODE_SHORT = 'knowledge';
22
26 const SETTINGS_CODE = 'landing_knowledge';
27
32 const PATH_GROUP_BINDING = 'kb/binding/group/create.php?groupId=#groupId#';
33
40 public static function getBindingRow(int $groupId, bool $checkAccess = true)
41 {
43 \Bitrix\Landing\Site\Type::SCOPE_CODE_GROUP
44 );
45
46 $groupId = intval($groupId);
47 $bindings = Binding\Group::getList($groupId);
48
49 if ($bindings)
50 {
51 $bindings = array_pop($bindings);
52
53 if ($bindings['ENTITY_TYPE'] == Binding\Entity::ENTITY_TYPE_SITE)
54 {
55 $hasAccess = !$checkAccess || Rights::hasAccessForSite(
56 $bindings['ENTITY_ID'],
58 );
59 if ($hasAccess)
60 {
61 return $bindings;
62 }
63 }
64 }
65
66 return [];
67 }
68
75 public static function getSocNetMenuUrl($groupId, $returnCreateLink = true)
76 {
77 if (Option::get(Group::MODULE_ID, Group::CHECKER_OPTION . $groupId, '') == 'Y')
78 {
79 return '';
80 }
81
82 // tariff limits
83 if (!Restriction\Manager::isAllowed('limit_crm_free_knowledge_base_project'))
84 {
85 $asset = \Bitrix\Main\Page\Asset::getInstance();
86 $asset->addString(
87 $asset->insertJs(
88 'var KnowledgeCreate = function()
89 {
90 ' . Restriction\Manager::getActionCode('limit_crm_free_knowledge_base_project') . '
91 };',
92 '',
93 true
94 )
95 );
96 return 'javascript:void(KnowledgeCreate());';
97 }
98
99 $link = '';
100 $groupId = intval($groupId);
101 $bindings = self::getBindingRow($groupId, false);
102
103 // binding exist
104 if ($bindings)
105 {
106 if (self::canPerformOperation($groupId, Rights::ACCESS_TYPES['read']))
107 {
108 $link = $bindings['PUBLIC_URL'];
109 self::processTabHit($link);
110 }
111 }
112 // binding don't exist, allow to create new one
113 else if ($returnCreateLink && self::canCreateNewBinding($groupId))
114 {
115 \CJSCore::init('sidepanel');
116 $link = SITE_DIR . str_replace('#groupId#', $groupId, self::PATH_GROUP_BINDING);
117 }
118
119 return $link;
120 }
121
127 public static function getSocNetMenuTitle($groupId)
128 {
129 $title = '';
130 $groupId = intval($groupId);
131 $bindings = self::getBindingRow($groupId, false);
132 if ($bindings['TITLE'])
133 {
134 $title = $bindings['TITLE'];
135 }
136 return $title;
137 }
138
144 public static function onFillSocNetFeaturesList(&$socNetFeaturesSettings)
145 {
147 if (
148 \Bitrix\Landing\Site\Type::isEnabled($scopeCode) &&
149 \Bitrix\Main\ModuleManager::isModuleInstalled('intranet')
150 )
151 {
153
154 $socNetFeaturesSettings[self::SETTINGS_CODE] = [
155 'allowed' => [SONET_ENTITY_GROUP],
156 'title' => Loc::getMessage('LANDING_CONNECTOR_SN_TITLE'),
157 'operation_titles' => [
158 Rights::ACCESS_TYPES['read'] => Loc::getMessage('LANDING_CONNECTOR_SN_PERMS_READ'),
159 Rights::ACCESS_TYPES['edit'] => Loc::getMessage('LANDING_CONNECTOR_SN_PERMS_EDIT'),
160 Rights::ACCESS_TYPES['sett'] => Loc::getMessage('LANDING_CONNECTOR_SN_PERMS_SETT'),
161 Rights::ACCESS_TYPES['delete'] => Loc::getMessage('LANDING_CONNECTOR_SN_PERMS_DELETE'),
162 ],
163 'operations' => [
165 Rights::ACCESS_TYPES['edit'] => [SONET_ENTITY_GROUP => SONET_ROLES_USER, 'restricted' => $restrictedAccess],
166 Rights::ACCESS_TYPES['sett'] => [SONET_ENTITY_GROUP => SONET_ROLES_USER, 'restricted' => $restrictedAccess],
167 Rights::ACCESS_TYPES['delete'] => [SONET_ENTITY_GROUP => SONET_ROLES_USER, 'restricted' => $restrictedAccess],
168 ],
169 'minoperation' => ['read'],
170 ];
171 }
172 }
173
181 public static function onSocNetFeaturesUpdate(int $id, array $fields): void
182 {
183 $groupId = self::getGroupIdByFeatureId($id);
184
185 if ($groupId)
186 {
187 AddEventHandler('main', 'onEpilog', function() use($groupId)
188 {
190 if ($siteId)
191 {
192 $binding = new \Bitrix\Landing\Binding\Group($groupId);
193 $binding->rebindSite($siteId);
194 }
195 });
196 }
197 }
198
204 public static function onFillSocNetMenu(&$result)
205 {
206 // allowed only for groups
207 if (!isset($result['Group']['ID']))
208 {
209 return;
210 }
211 if (!isset($result['Urls']['View']))
212 {
213 return;
214 }
215
216 $enable = false;
217 if (
218 !Loader::includeModule('intranet')
219 || Restriction\ToolAvailabilityManager::getInstance()->check('knowledge_base')
220 )
221 {
222 $enable = true;
223 }
224
225 if ($enable)
226 {
227 // is enabled in features or not
228 if (!empty($result['ActiveFeatures']))
229 {
230 $enable = array_key_exists(
231 self::SETTINGS_CODE,
232 $result['ActiveFeatures']
233 );
234 }
235 else
236 {
237 $enable = false;
238 }
239 }
240
241 if ($enable)
242 {
243 $url = self::getSocNetMenuUrl($result['Group']['ID']);
244 if (!$url)
245 {
246 $enable = false;
247 }
248 $title = self::getSocNetMenuTitle($result['Group']['ID']);
249 if ($title !== '')
250 {
251 $title = ' - ' . $title;
252 }
253 }
254 else
255 {
256 $url = '';
257 $title = '';
258 }
259
260 // build menu params
261 $result['CanView'][self::SETTINGS_CODE] = $enable;
262 $result['Title'][self::SETTINGS_CODE] = Loc::getMessage('LANDING_CONNECTOR_SN_TITLE') . $title;
263 $result['Urls'][self::SETTINGS_CODE] = $url;
264 }
265
270 protected static function isExtranet()
271 {
272 if (\Bitrix\Main\Loader::includeModule('extranet'))
273 {
274 return \CExtranet::isExtranetSite();
275 }
276
277 return false;
278 }
279
285 protected static function processTabHit($url)
286 {
287 $request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
288 if ($request->get('tab') == self::SETTINGS_CODE_SHORT)
289 {
290 if ($request->get('page'))
291 {
292 $url = $request->get('page');
293 }
294 $asset = \Bitrix\Main\Page\Asset::getInstance();
295 $asset->addString(
296 $asset->insertJs(
297 'BX.ready(function(){BX.SidePanel.Instance.open(\'' . \CUtil::jsEscape($url) . '\');});',
298 '',
299 true
300 )
301 );
302 }
303 }
304
312 public static function getTabUrl(int $groupId, ?string $pagePath = null, bool $generalPath = false): ?string
313 {
314 static $groupPath = null;
315
316 if ($groupPath === null)
317 {
318 $groupPath = Option::get('socialnetwork', 'group_path_template', '', SITE_ID);
319 if (mb_substr($groupPath, -1) == '/')
320 {
321 $groupPath .= 'general/';
322 }
323 }
324
325 if ($groupId && $groupPath)
326 {
327 $groupPath = str_replace('#group_id#', $groupId, $groupPath);
328 }
329
330 if ($generalPath)
331 {
332 return $groupPath;
333 }
334
335 if ($groupId && $groupPath)
336 {
337 $uri = new \Bitrix\Main\Web\Uri($groupPath);
338 $uri->addParams([
339 'tab' => self::SETTINGS_CODE_SHORT
340 ]);
341 if ($pagePath)
342 {
343 $uri->addParams([
344 'page' => $pagePath
345 ]);
346 }
347 return $uri->getUri();
348 }
349
350 return null;
351 }
352
359 public static function userInGroup(int $groupId): bool
360 {
361 if (\Bitrix\Main\Loader::includeModule('socialnetwork'))
362 {
363 return \CSocNetUserToGroup::getUserRole(
364 Manager::getUserId(),
365 $groupId
366 ) <= SONET_ROLES_USER;
367 }
368
369 return false;
370 }
371
380 public static function canPerformOperation(int $groupId, string $operation): bool
381 {
382 if ($groupId && \Bitrix\Main\Loader::includeModule('socialnetwork'))
383 {
384 return \CSocNetFeaturesPerms::canPerformOperation(
385 Manager::getUserId(),
386 SONET_ENTITY_GROUP,
387 $groupId,
388 self::SETTINGS_CODE,
389 $operation
390 );
391 }
392
393 return false;
394 }
395
402 public static function canCreateNewBinding(int $groupId): bool
403 {
404 $operation = Rights::ACCESS_TYPES['edit'];
405 return self::userInGroup($groupId) && self::canPerformOperation($groupId, $operation);
406 }
407
413 public static function onSocNetGroupDelete($groupId)
414 {
415 \Bitrix\Landing\Site\Type::setScope(
416 \Bitrix\Landing\Site\Type::SCOPE_CODE_GROUP
417 );
418 $bindings = Binding\Group::getList($groupId);
419 foreach ($bindings as $binding)
420 {
421 if ($binding['ENTITY_TYPE'] == Binding\Group::ENTITY_TYPE_SITE)
422 {
423 Site::delete($binding['ENTITY_ID'], true)->isSuccess();
424 }
425 }
426 }
427
434 private static function getGroupIdByFeatureId(int $featureId): ?int
435 {
436 static $featureToGroup = null;
437
438 if ($featureToGroup === null)
439 {
440 $res = \CSocNetFeatures::getList(
441 [],
442 [
443 'ENTITY_TYPE' => SONET_ENTITY_GROUP,
444 'FEATURE' => self::SETTINGS_CODE,
445 ],
446 false, false,
447 ['ID', 'ENTITY_ID']
448 );
449 while ($row = $res->fetch())
450 {
451 $featureToGroup[$row['ID']] = $row['ENTITY_ID'];
452 }
453 }
454
455 return $featureToGroup[$featureId] ?? null;
456 }
457}
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
Определения catalog_reindex.php:36
static getSiteIdByGroupId(int $groupId)
Определения group.php:29
static onSocNetFeaturesUpdate(int $id, array $fields)
Определения socialnetwork.php:181
static onFillSocNetFeaturesList(&$socNetFeaturesSettings)
Определения socialnetwork.php:144
static processTabHit($url)
Определения socialnetwork.php:285
static getSocNetMenuTitle($groupId)
Определения socialnetwork.php:127
static getBindingRow(int $groupId, bool $checkAccess=true)
Определения socialnetwork.php:40
static getSocNetMenuUrl($groupId, $returnCreateLink=true)
Определения socialnetwork.php:75
static onFillSocNetMenu(&$result)
Определения socialnetwork.php:204
const ACCESS_TYPES
Определения rights.php:21
static hasAccessForSite($siteId, $accessType, $deleted=false)
Определения rights.php:546
static setScope($scope, array $params=[])
Определения type.php:88
const SCOPE_CODE_GROUP
Определения type.php:14
static getInstance()
Определения application.php:98
</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 SITE_DIR(!defined('LANG'))
Определения include.php:72
$siteId
Определения ajax.php:8
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
Определения entity.php:2
Определения cookies.php:2
Определения agent.php:3
$title
Определения pdf.php:123
const SONET_ROLES_USER
Определения include.php:31
const SONET_ENTITY_GROUP
Определения include.php:117
const SONET_ROLES_AUTHORIZED
Определения include.php:36
const SONET_ROLES_ALL
Определения include.php:35
$url
Определения iframe.php:7
$fields
Определения yandex_run.php:501