1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
CollabProvider.php
См. документацию.
1<?php
2
3declare(strict_types=1);
4
5namespace Bitrix\Socialnetwork\Collab\Provider;
6
7use Bitrix\Main\ArgumentException;
8use Bitrix\Main\ObjectPropertyException;
9use Bitrix\Main\ORM\Query\Filter\Condition;
10use Bitrix\Main\ORM\Query\Query;
11use Bitrix\Main\SystemException;
12use Bitrix\Main\Type\Collection;
13use Bitrix\Socialnetwork\Collab\Collab;
14use Bitrix\Socialnetwork\Collab\CollabCollection;
15use Bitrix\Socialnetwork\Collab\Registry\CollabRegistry;
16use Bitrix\Socialnetwork\Internals\Registry\UserRegistry;
17use Bitrix\Socialnetwork\Item\Workgroup\Type;
18use Bitrix\Socialnetwork\Provider\FeatureProvider;
19use Bitrix\Socialnetwork\Provider\GroupProvider;
20use Bitrix\Socialnetwork\Helper\InstanceTrait;
21
23{
24 use InstanceTrait;
25
26 protected bool $useCache = true;
27
29 {
31
32 $items = $ormQuery->exec()->fetchAll();
33
34 $collection = new CollabCollection();
35 foreach ($items as $item)
36 {
37 $collab = new Collab($item);
38 $collection[$collab->getId()] = $collab;
39 }
40
41 return $collection;
42 }
43
44 public function getCountByUserId(int $userId): int
45 {
46 $query = (new CollabQuery($userId))->setAccessCheck();
47
48 return $this->getCount($query);
49 }
50
51 public function getCount(CollabQuery $query): int
52 {
53 $query->setSelect([Query::expr('COUNT')->countDistinct('ID')]);
54
56
57 $result = $ormQuery->exec()->fetch();
58
59 return (int)$result['COUNT'];
60 }
61
63 {
64 $registry = UserRegistry::getInstance($userId);
65 if (!$this->useCache)
66 {
67 $registry->invalidate($userId);
68 }
69
70 $userGroups = $registry->getUserGroups(UserRegistry::MODE_COLLAB);
71
72 $this->enableCache();
73
74 $userGroups = array_keys($userGroups);
75
76 Collection::normalizeArrayValuesByInt($userGroups, false);
77
78 if (empty($userGroups))
79 {
80 return new CollabCollection();
81 }
82
83 if ($query === null || $query->isOnlyId())
84 {
85 $collabs = array_map(static fn (int $id) => Collab::createFromId($id), $userGroups);
86
87 return new CollabCollection(...$collabs);
88 }
89
90 $query->addWhere(new Condition('ID', 'in', $userGroups));
91
92 $collabs = $this->getList($query);
93
94 return $collabs;
95 }
96
97 public function getCollab(int $id): ?Collab
98 {
99 $registry = CollabRegistry::getInstance();
100 if (!$this->useCache)
101 {
102 $registry->invalidate($id);
103 }
104
105 $collab = $registry->get($id);
106
107 $this->enableCache();
108
109 if ($collab === null)
110 {
111 return null;
112 }
113
114
115 $optionsProvider = CollabOptionProvider::getInstance();
116
117 $collab->setOptions(...$optionsProvider->get($id));
118
119 $featuresProvider = FeatureProvider::getInstance();
120
121 $collab->setFeatures(...$featuresProvider->getFeatures($id));
122
123 $collab->setPermissions(...$featuresProvider->getPermissions($id));
124
125 return $collab;
126 }
127
133 public function isCollab(int $id): bool
134 {
135 return GroupProvider::getInstance()->getGroupType($id) === Type::Collab;
136 }
137
138 public function isExistingGroup(string $name, int $groupId = 0): bool
139 {
140 return GroupProvider::getInstance()->isExistingGroup($name, $groupId);
141 }
142
143 public function enableCache(): static
144 {
145 $this->useCache = true;
146
147 return $this;
148 }
149
150 public function disableCache(): static
151 {
152 $this->useCache = false;
153
154 return $this;
155 }
156}
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
getListByUserId(int $userId, ?CollabQuery $query=null)
Определения CollabProvider.php:62
isExistingGroup(string $name, int $groupId=0)
Определения CollabProvider.php:138
static build(CollabQuery $collabQuery)
Определения CollabQueryBuilder.php:18
$result
Определения get_property_values.php:14
$query
Определения get_search.php:11
static createFromId(int $itemId)
$name
Определения menu_edit.php:35
$items
Определения template.php:224