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