• Модуль: 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;
}