• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/item/converter.php
  • Класс: BitrixTasksItemConverter
  • Вызов: Converter::convert
public function convert($instance)
{
	$result = new ConverterResult();

	$dstClass = $this->getTargetItemClass();
	$newInstance = null;
	$userId = $instance->getUserId();
	$data = array();

	if(!Item::isA($instance))
	{
		$result->getErrors()->add('ILLEGAL_SOURCE_INSTANCE', 'Illegal source instance');
	}
	else
	{
		$data = $instance->getData(); // will get all data: fields, user fields, sub-item collections, etc...
		if(empty($data))
		{
			$result->getErrors()->add('NO_SOURCE_DATA', 'No source data to work with (does item even exist?)');
		}
	}

	if($result->isSuccess())
	{
		/** @var Item $newInstance */
		$newInstance = new $dstClass(0, $userId);

		// step 1: convert base data
		$newData = $this->transformData($data, $instance, $newInstance, $result);

		if(is_array($newData))
		{
			$newInstance->setData($newData);
		} // else data was set inside transformData() (backward compatibility)

		// step 2: convert user fields
		$this->convertUserFieldData($instance, $newInstance, $result);

		// step 3: convert sub-entities
		$dstMap = $newInstance->getMap();
		/**
		 * @var ItemFieldScalar $v
		 */
		foreach($dstMap as $k => $v)
		{
			if(FieldCollection::isA($v)) // not implemented for other types
			{
				$subConverter = $this->getConverterForSubEntity($k);

				if(is_object($subConverter))
				{
					$subData = array();
					foreach($data[$k] as $j)
					{
						$subResult = $subConverter->convert($j);
						if($subResult->isSuccess())
						{
							$subData[] = $subResult->getInstance();
						}
						$result->getErrors()->load($subResult->getErrors()->prefixCode($k.'.'));
					}

					if(!empty($subData))
					{
						$newInstance[$k] = $subData;
					}
				}
			}
		}
	}

	$result->setInstance($newInstance);
	$result->setConverter($this);

	return $result;
}