1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
PermissionDictionary.php
См. документацию.
1<?php
8
9namespace Bitrix\Catalog\Access\Permission;
10
11use Bitrix\Catalog\StoreTable;
12use Bitrix\Crm\Service\Container;
13use Bitrix\Crm\Category\DealCategory;
14use Bitrix\Main\Access\Permission;
15use Bitrix\Main\Loader;
16use Bitrix\Catalog\StoreDocumentTable;
17use Bitrix\Main\Localization\Loc;
18use Bitrix\Catalog\Integration\Report\Dashboard\DashboardManager;
19
21{
22 public const VALUE_VARIATION_ALL = -1;
23
25 public const CATALOG_STORE_MODIFY = 2;
26 public const CATALOG_STORE_VIEW = 3;
28
29 public const CATALOG_RESERVE_DEAL = 101;
30 public const CATALOG_STORE_RESERVE = 102;
31
32 public const CATALOG_STORE_DOCUMENT = 200;
33 public const CATALOG_STORE_DOCUMENT_VIEW = 201;
39
40 public const CATALOG_SETTINGS_ACCESS = 301;
41 public const CATALOG_SETTINGS_EDIT_RIGHTS = 302;
46 public const CATALOG_RESERVE_SETTINGS = 307;
47 public const CATALOG_VAT_MODIFY = 308;
48 public const CATALOG_MEASURE_MODIFY = 309;
49 public const CATALOG_PRICE_GROUP_MODIFY = 310;
50 public const CATALOG_IMPORT_EDIT = 311;
51 public const CATALOG_EXPORT_EDIT = 312;
52
53 public const CATALOG_PRODUCT_VIEW = 400;
54 public const CATALOG_PRODUCT_READ = 401;
55 public const CATALOG_PRODUCT_ADD = 402;
56 public const CATALOG_PRODUCT_EDIT = 403;
57 public const CATALOG_PRODUCT_DELETE = 404;
61 public const CATALOG_PRODUCT_SET_DISCOUNT = 408;
63 public const CATALOG_EXPORT_EXECUTION = 414;
64 public const CATALOG_IMPORT_EXECUTION = 415;
66
68 protected static $stores;
69
71 protected static $dynamicTypes;
72
74 protected static $storeAnalitycs;
75
77 protected static $priceEntities;
78
80 protected static $dealCategories;
81
82 public static function getPermission($permissionId): array
83 {
84 $permission = parent::getPermission($permissionId);
85
86 if (empty($permission['title']))
87 {
88 $name = self::getName($permissionId);
89 $permission['title'] =
90 Loc::getMessage($name . '_MSGVER_1')
91 ?? ''
92 ;
93 }
94
95 $storePermissions = [
96 self::CATALOG_STORE_VIEW,
97 self::CATALOG_STORE_RESERVE,
98 ];
99
100 $permissionId = (int)$permissionId;
101 if (in_array($permissionId, $storePermissions, true))
102 {
103 $permission['type'] = Permission\PermissionDictionary::TYPE_MULTIVARIABLES;
104 $permission['enableSearch'] = true;
105 $permission['variables'] = self::getStoreVariables();
106 $permission['minValue'] = [];
107 $permission['hintTitle'] = Loc::getMessage('CATALOG_STORE_VIEW_DESCRIPTION_HINT');
108 }
109 elseif ($permissionId === self::CATALOG_RESERVE_DEAL)
110 {
111 $permission['type'] = Permission\PermissionDictionary::TYPE_MULTIVARIABLES;
112 $permission['variables'] = self::getDealCategoryVariables();
113 $permission['minValue'] = [];
114 $permission['showAvatars'] = false;
115 $permission['compactView'] = true;
116 $permission['hintTitle'] = Loc::getMessage('CATALOG_RESERVE_DEAL_DESCRIPTION_HINT');
117 }
118 elseif (
119 $permissionId === self::CATALOG_PRODUCT_EDIT_ENTITY_PRICE
120 || $permissionId === self::CATALOG_PRODUCT_SET_DISCOUNT
121 )
122 {
123 $permission['type'] = Permission\PermissionDictionary::TYPE_MULTIVARIABLES;
124 $permission['variables'] = self::getPriceSelectorVariables();
125 $permission['minValue'] = [];
126 $permission['showAvatars'] = false;
127 $permission['compactView'] = true;
128 }
129 elseif ($permissionId === self::CATALOG_STORE_ANALYTIC_VIEW)
130 {
131 $permission['type'] = Permission\PermissionDictionary::TYPE_MULTIVARIABLES;
132 $permission['variables'] = self::getStoreAnalyticVariables();
133 $permission['minValue'] = [];
134 $permission['showAvatars'] = false;
135 $permission['compactView'] = true;
136 }
137
138 if ($permission['type'] === Permission\PermissionDictionary::TYPE_TOGGLER)
139 {
140 $permission['minValue'] = '0';
141 $permission['maxValue'] = '1';
142 $permission['defaultValue'] = '0';
143 }
144 elseif ($permission['type'] === Permission\PermissionDictionary::TYPE_MULTIVARIABLES)
145 {
146 $permission['allSelectedCode'] = (string)static::VALUE_VARIATION_ALL;
147 $permission['maxValue'] = (string)static::VALUE_VARIATION_ALL;
148 }
149
150 return $permission;
151 }
152
153 public static function getDefaultPermissionValue($permissionId): int
154 {
155 $permission = static::getPermission($permissionId);
156 if ($permission['type'] === static::TYPE_MULTIVARIABLES)
157 {
158 return static::VALUE_VARIATION_ALL;
159 }
160
161 return static::VALUE_YES;
162 }
163
164 public static function getStoreDocumentPermissionRules(array $permissions, array $documents = null): array
165 {
166 $result = [];
167
168 if ($documents === null)
169 {
170 $documents = [
177 ];
178 }
179
180 foreach ($documents as $document)
181 {
182 foreach ($permissions as $permissionId)
183 {
184 $result[] = self::getStoreDocumentPermissionId($permissionId, $document);
185 }
186 }
187
188 return $result;
189 }
190
191
192 public static function getStoreDocumentPermission($permissionId, $documentCode): array
193 {
194 $permission = self::getPermission($permissionId);
195 $permission['id'] = self::getStoreDocumentPermissionId($permissionId, $documentCode);
196
197 // personal langs
198 $fields = [
199 'title' => self::getName($permissionId) . '_' . $documentCode,
200 'hint' => self::HINT_PREFIX . self::getName($permissionId) . '_' . $documentCode,
201 ];
202 foreach ($fields as $field => $langMessage)
203 {
204 $fieldValue = Loc::getMessage($langMessage);
205 if ($fieldValue)
206 {
207 $permission[$field] = $fieldValue;
208 }
209 }
210
211 return $permission;
212 }
213
214 public static function getStoreDocumentPermissionId($permissionId, $documentCode): string
215 {
216 return "{$permissionId}_{$documentCode}";
217 }
218
219 public static function getStoreVariables(): array
220 {
221 if (static::$stores !== null)
222 {
223 return static::$stores;
224 }
225
226 $items = [];
227 $stores = StoreTable::getList([
228 'select' => ['ID', 'TITLE', 'ADDRESS'],
229 'cache' => [
230 'ttl' => 3600
231 ]
232 ]);
233
234 while ($store = $stores->fetch())
235 {
236 $title = $store['TITLE'];
237 if ($title === '')
238 {
239 $title = $store['ADDRESS'];
240 }
241 $items[] = [
242 'id' => $store['ID'],
243 'title' => htmlspecialcharsbx($title),
244 'entityId' => 'store',
245 ];
246 }
247
248 static::$stores = $items;
249
250 return static::$stores;
251 }
252
253 public static function getDealCategoryVariables(): array
254 {
255 if (static::$dealCategories !== null)
256 {
257 return static::$dealCategories;
258 }
259
260 if (!Loader::includeModule('crm'))
261 {
262 static::$dealCategories = [];
263
264 return static::$dealCategories;
265 }
266
267 $items = [];
268 $dealCategories = DealCategory::getSelectListItems();
269 foreach ($dealCategories as $key => $dealCategory)
270 {
271 $items[] = [
272 'id' => $key,
273 'title' => htmlspecialcharsbx($dealCategory),
274 'avatar' => null,
275 ];
276 }
277
278 static::$dealCategories = $items;
279
280 return static::$dealCategories;
281 }
282
294
295 public static function getPriceSelectorVariables()
296 {
297 if (static::$priceEntities !== null)
298 {
299 return static::$priceEntities;
300 }
301
302 static::$priceEntities = [];
303 if (!Loader::includeModule('crm'))
304 {
305 return static::$priceEntities;
306 }
307
308 $items = [
309 \CCrmOwnerType::Deal => 'deal',
310 \CCrmOwnerType::Lead => 'lead',
311 \CCrmOwnerType::SmartInvoice => 'invoice',
312 \CCrmOwnerType::Quote => 'quote',
313 \CCrmOwnerType::Order => 'order',
314 ];
315
316 foreach ($items as $crmItem => $entityId)
317 {
318 static::$priceEntities[] = [
319 'id' => $crmItem,
320 'title' => \CCrmOwnerType::GetDescription($crmItem),
321 'entityId' => $entityId,
322 ];
323 }
324
325 static::$priceEntities = array_merge(static::$priceEntities, self::getDynamicTypeVariables());
326
327 return static::$priceEntities;
328 }
329
330 private static function getDynamicTypeVariables(): array
331 {
332 if (static::$dynamicTypes !== null)
333 {
334 return static::$dynamicTypes;
335 }
336
337 if (!Loader::includeModule('crm'))
338 {
339 static::$dynamicTypes = [];
340
341 return static::$dynamicTypes;
342 }
343
344 $items = [];
345 $types = Container::getInstance()
346 ->getDynamicTypesMap()
347 ->load()
348 ->getTypes()
349 ;
350
351 foreach ($types as $type)
352 {
353 $items[] = [
354 'id' => $type->getEntityTypeId(),
355 'title' => $type->getTitle(),
356 'supertitle' => Loc::getMessage('CRM_DYNAMIC_TYPE_NAME'),
357 ];
358 }
359
360 static::$dynamicTypes = $items;
361
362 return static::$dynamicTypes;
363 }
364 public static function getStoreAnalyticVariables(): array
365 {
366 if (static::$storeAnalitycs !== null)
367 {
368 return static::$storeAnalitycs;
369 }
370
371 $items = [];
372 if (Loader::includeModule('report'))
373 {
375 foreach ($dashboards as $dashboard)
376 {
377 $items[] = [
378 'id' => $dashboard->getAccessBoardId(),
379 'title' => $dashboard->getBoardTitle(),
380 ];
381 }
382 }
383
384 static::$storeAnalitycs = $items;
385
386 return static::$storeAnalitycs;
387 }
388}
$type
Определения options.php:106
static getStoreDocumentPermissionId($permissionId, $documentCode)
Определения PermissionDictionary.php:214
static getStoreDocumentPermissionRules(array $permissions, array $documents=null)
Определения PermissionDictionary.php:164
static getStoreDocumentPermission($permissionId, $documentCode)
Определения PermissionDictionary.php:192
</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
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
$name
Определения menu_edit.php:35
$entityId
Определения payment.php:4
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$items
Определения template.php:224
$title
Определения pdf.php:123
$fields
Определения yandex_run.php:501