2namespace Bitrix\Bizproc\BaseType;
4use Bitrix\HumanResources\Compatibility\Utils\DepartmentBackwardAccessCode;
5use Bitrix\HumanResources\Service\Container;
7use Bitrix\Bizproc\FieldType;
8use Bitrix\Bizproc\Automation;
33 'callable' =>
'formatValueFriendly',
51 $value = current($value);
64 if (!is_array($value))
65 $value =
array($value);
67 return \CBPHelper::usersArrayToString($value,
null, $fieldType->
getDocumentType());
77 if (!is_array($value))
78 $value =
array($value);
80 return \CBPHelper::usersArrayToString($value,
null, $fieldType->
getDocumentType(),
false);
92 $type = $toTypeClass::getType();
97 $value = (string)$value;
98 if (mb_strpos($value,
'user_') === 0)
99 $value = mb_substr($value, mb_strlen(
'user_'));
100 $value = (int)$value;
105 $value = (string)$value;
141 if ($value !==
null && !is_array($value))
143 if (self::isRawValue($value))
156 $valueString = \CBPHelper::usersArrayToString($value,
null, $fieldType->
getDocumentType());
158 if ($allowSelection && !$isPublic)
160 return static::renderControlSelector($field, $valueString,
'combine',
'', $fieldType);
165 \CUtil::InitJSCore([
'bp_user_selector']);
166 $name = static::generateControlName($field);
167 $controlId = static::generateControlId($field);
172 'valueInputName' =>
$name,
173 'value' => $valueString,
174 'items' => $value ? static::getSelectedItems($value,
$settings) : [],
177 'canUseHumanResources' => static::canUseHumanResources(),
186 \CBPRuntime::GetRuntime()
187 ->getDocumentService()
194 foreach (
$groups as $id => $groupName)
196 if (!$groupName || mb_strpos($id,
'group_') === 0)
202 'id' => preg_match(
'/^[0-9]+$/', $id) ?
'G'.$id : $id,
208 $controlIdJs = \CUtil::JSEscape($controlId);
211 $className =
htmlspecialcharsbx(static::generateControlClassName($fieldType, $field));
213 $property[
'Type'] = static::getType();
219 const c = document.getElementById(
'{$controlIdJs}');
222 BX.Bizproc.FieldType.initControl(c.parentNode, JSON.parse(c.dataset.property));
226 <div
id=
"{$controlIdHtml}" data-role=
"user-selector" data-
property=
"{$propertyHtml}" data-config=
"{$configHtml}" class=
"{$className}"></div>
230 $renderResult = parent::renderControl($fieldType, $field, $valueString, $allowSelection, $renderMode);
231 $renderResult .= static::renderControlSelector($field,
null,
false,
'', $fieldType);
233 return $renderResult;
246 return static::renderControl($fieldType, $field, $value, $allowSelection, $renderMode);
259 return static::renderControl($fieldType, $field, $value, $allowSelection, $renderMode);
270 $value = parent::extractValue($fieldType, $field,
$request);
273 if (is_string($value) && $value !==
'')
294 static::cleanErrors();
308 static::cleanErrors();
309 return static::extractValue($fieldType, $field,
$request);
314 $useExtraction = $fieldType->
getSettings()[
'ExternalExtract'] ??
false;
318 $useExtraction =
true;
321 if ($useExtraction && $value)
325 return \CBPHelper::ExtractUsers($value, $docId,
true);
328 return parent::externalizeValue($fieldType,
$context, $value);
333 $useExtraction = $fieldType->
getSettings()[
'ExternalExtract'] ??
false;
337 $useExtraction =
true;
340 if ($useExtraction && $value)
343 return \CBPHelper::ExtractUsers($value, $docId);
346 return parent::externalizeValueMultiple($fieldType,
$context, $value);
353 $value =
'user_' . $value;
356 return parent::internalizeValue($fieldType,
$context, $value);
361 if (!class_exists(\
Bitrix\
UI\EntitySelector\Dialog::class))
366 $mapCallback =
static function ($value)
368 if ($value && str_starts_with($value,
'user_'))
370 return [
'user', \CBPHelper::StripUserPrefix($value)];
373 if ($value && str_starts_with($value,
'group_d'))
375 return [
'department', preg_replace(
'|\D+|',
'', $value)];
378 if ($value && str_starts_with($value,
'group_hr'))
380 return [
'structure-node', preg_replace(
'|\D+|',
'', $value)];
386 $preselectedItems = array_filter(array_map($mapCallback, $value));
388 if (!$preselectedItems)
393 if (static::canUseHumanResources())
395 $nodeRepository = Container::getNodeRepository();
396 foreach ($preselectedItems as
$key => $item)
398 if ($item[0] ===
'department')
400 $node = $nodeRepository->getByAccessCode(DepartmentBackwardAccessCode::makeById((
int)$item[1]));
403 unset($preselectedItems[
$key]);
404 $preselectedItems[] = [
'structure-node', $node->id];
412 if (!empty(
$settings[
'allowEmailUsers']))
418 'emailUsers' =>
true,
419 'myEmailUsers' =>
true,
425 return \Bitrix\UI\EntitySelector\Dialog::getPreselectedItems($preselectedItems,
$options)->toArray();
430 $value = static::toSingleValue($fieldType, $value);
432 $value = trim($value);
434 $isUser = (mb_strpos($value,
'user_') !==
false);
440 $isGroup = (mb_strpos($value,
'group_') !==
false);
446 $isNumber = preg_match(
'#^[0-9]+$#', $value);
453 if ($isDocumentGroup)
463 $value = parent::validateValueMultiple($value, $fieldType);
464 $value = array_filter($value,
static fn($v) => ($v !==
null));
466 return array_values(array_unique($value));
473 $value = \CBPHelper::flatten($fieldType->
getValue());
474 $value = array_values(array_filter($value, fn($v) => strpos($v,
'user_') !==
false));
476 $property[
'Settings'] = [
'entityList' => static::getSelectedItems($value)];
477 $property[
'Type'] = static::getType();
480 return parent::convertPropertyToView($fieldType, $viewMode, $property);
483 private static function isRawValue($value): bool
487 && !is_numeric($value)
488 && strpos($value,
'user_') ===
false
489 && strpos($value,
'group_') ===
false
493 private static function canUseHumanResources(): bool
if(!Loader::includeModule('catalog')) if(!AccessController::getCurrent() ->check(ActionDictionary::ACTION_PRICE_EDIT)) if(!check_bitrix_sessid()) $request
static isDocumentUserGroup(string $value, array $documentType)
static convertTo(FieldType $fieldType, $value, $toTypeClass)
static renderControl(FieldType $fieldType, array $field, $value, $allowSelection, $renderMode)
static extractValueSingle(FieldType $fieldType, array $field, array $request)
static extractValueMultiple(FieldType $fieldType, array $field, array $request)
static extractValue(FieldType $fieldType, array $field, array $request)
static externalizeValue(FieldType $fieldType, $context, $value)
static renderControlSingle(FieldType $fieldType, array $field, $value, $allowSelection, $renderMode)
static formatValuePrintable(FieldType $fieldType, $value)
static internalizeValue(FieldType $fieldType, $context, $value)
static validateValueSingle($value, FieldType $fieldType)
static toSingleValue(FieldType $fieldType, $value)
static convertPropertyToView(FieldType $fieldType, int $viewMode, array $property)
static renderControlMultiple(FieldType $fieldType, array $field, $value, $allowSelection, $renderMode)
static getConversionMap()
static formatValueFriendly(FieldType $fieldType, $value)
static externalizeValueMultiple(FieldType $fieldType, $context, $value)
static validateValueMultiple($value, FieldType $fieldType)
const RENDER_MODE_JN_MOBILE
const VALUE_CONTEXT_JN_MOBILE
static includeModule($moduleName)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
if(empty($signedUserToken)) $key