- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/integration/recyclebin/task.php
- Класс: BitrixTasksIntegrationRecyclebinTask
- Вызов: Task::restoreAdditionalData
static function restoreAdditionalData($taskId, $value)
{
$data = unserialize($value['DATA'], ['allowed_classes' => ['BitrixTasksUtilTypeDateTime', 'BitrixMainTypeDateTime', 'DateTime']]);
$action = $value['ACTION'];
$result = new Result();
try
{
$map = [
'MEMBERS' => [
'VALUE' => 'TASK_ID',
'CLASS' => CTaskMembers::class
],
'DEPENDENCE_TASK' => [
'VALUE' => 'TASK_ID',
'CLASS' => CTaskDependence::class
],
'DEPENDENCE_ON' => [
'VALUE' => 'DEPENDS_ON_ID',
'CLASS' => CTaskDependence::class
],
'REMINDERS' => [
'VALUE' => '',
'CLASS' => CTaskReminders::class
]
];
switch ($action)
{
case 'TASK':
TaskTable::insert($data);
break;
case 'STAGES':
foreach ($data as $value)
{
if (StagesTable::getById($value['STAGE_ID'])->fetch())
{
StagesTable::pinInTheStage($taskId, $value['STAGE_ID']);
}
else
{
StagesTable::pinInStage($taskId);
}
}
break;
case 'MEMBERS':
case 'REMINDERS':
case 'DEPENDENCE_ON':
case 'DEPENDENCE_TASK':
foreach ($data as $value)
{
$currentMap = $map[$action];
if ($currentMap['VALUE'])
{
$value[$currentMap['VALUE']] = $taskId;
}
$class = new $currentMap['CLASS'];
$class->Add($value);
}
break;
case 'ACTIVITIES':
if (CModule::IncludeModule('crm'))
{
foreach ($data as $value)
{
CCrmActivity::Add($value);
}
}
break;
case 'TEMPLATES':
$connection = Application::getConnection();
foreach ($data as $templateId)
{
$connection->queryExecute('UPDATE b_tasks_template SET TASK_ID = ' . $taskId . ' WHERE ID = ' . $templateId);
}
break;
case 'PARENT_DEPENDENCIES':
$parentId = $data['PARENT_ID'];
$connection = Application::getConnection();
foreach ($data['SUBTASKS'] as $subTaskId)
{
$filter = [
'ID' => $subTaskId,
'PARENT_ID' => $parentId
];
if (CTasks::GetList([], $filter, ['ID'])->Fetch())
{
$connection->queryExecute('UPDATE b_tasks SET PARENT_ID = ' . $taskId . ' WHERE ID = ' . $subTaskId);
Dependence::attach($subTaskId, $taskId);
}
}
if ($parentId && CTasks::GetList([], ['ID' => $parentId], ['ID'])->Fetch())
{
Dependence::attach($taskId, $parentId);
}
break;
case 'TAGS':
$tagService = new Tag(CurrentUser::get()->getId());
$tagService->linkTags($taskId, $data);
break;
case 'SCENARIO':
ScenarioTable::insertIgnore($taskId, $data);
break;
case 'SUBTASK_IDS':
$subtaskIds = array_map('intval', $data);
if (empty($subtaskIds))
{
break;
}
$registry = TaskRegistry::getInstance();
$registry->load($subtaskIds);
foreach ($subtaskIds as $subtaskId)
{
$task = $registry->get($subtaskId);
if (is_null($task))
{
continue;
}
$result = Dependence::attach($subtaskId, $taskId);
if (!$result->isSuccess())
{
continue;
}
TaskTable::update($subtaskId, [
'PARENT_ID' => $taskId,
]);
}
break;
}
}
catch (Exception $e)
{
$result->addError(new Error($e->getMessage(), $e->getCode()));
}
return $result;
}