- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/util/userfield.php
- Класс: BitrixTasksUtilUserField
- Вызов: UserField::cloneValues
public function cloneValues($data, $dstUFController, $userId = 0, array $parameters = array() /*todo: configure object later */)
{
$result = new Result();
$scheme = static::getScheme();
$toScheme = $dstUFController->getScheme();
$newData = $data;
$values = array();
// try to map field values...
foreach($scheme as $field => $desc)
{
if(
array_key_exists($field, $toScheme) && // field exists in the destination entity
!empty($scheme[$field]['USER_TYPE_ID']) &&
$toScheme[$field]['USER_TYPE_ID'] == $scheme[$field]['USER_TYPE_ID'] && // types are equal
!static::isValueEmpty($data[$field]) // the source field is not empty
)
{
$skip =
isset($parameters['FILTER'])
&& Filter::isA($parameters['FILTER'])
&& !$parameters['FILTER']->match($desc)
;
$typeClass = BitrixTasksUtilUserFieldType::getClass($scheme[$field]['USER_TYPE_ID']);
// even if $skip == true here, we must call cloneValue(), because it may affect other entity fields
$valueClone = $typeClass::cloneValue(
$data[$field],
$newData,
$scheme[$field],
$toScheme[$field],
$userId,
array('SKIP' => $skip)
);
$values[$field] = $valueClone;
if($skip)
{
unset($newData[$field]);
}
else
{
if(!static::isValueEmpty($valueClone))
{
$newData[$field] = $valueClone;
}
}
}
}
$result->setData($newData);
return $result;
}