- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/lib/integration/bizproc/document/task.php
- Класс: BitrixTasksIntegrationBizprocDocumentTask
- Вызов: Task::updateDocument
static function updateDocument($documentId, $fields, $modifiedById = null)
{
$whiteFieldsList = [
//string
'TITLE',
'DESCRIPTION',
'TAGS',
//int
'IS_IMPORTANT',
'DURATION_PLAN',
'TIME_ESTIMATE',
'MARK',
'STAGE_ID',
'STATUS',
//user
'RESPONSIBLE_ID',
'ACCOMPLICES',
'AUDITORS',
//date|datetime
'DEADLINE',
'START_DATE_PLAN',
'END_DATE_PLAN',
//bool
'ALLOW_CHANGE_DEADLINE',
'ALLOW_TIME_TRACKING',
//'MATCH_WORK_TIME',
'TASK_CONTROL',
'ADD_IN_REPORT',
];
$whiteFieldsList = array_merge($whiteFieldsList, array_keys(self::getFieldsCreatedByUser()));
$fields = array_intersect_key($fields, array_flip($whiteFieldsList));
if (isset($fields['RESPONSIBLE_ID']))
{
$fields['RESPONSIBLE_ID'] = CBPHelper::ExtractUsers(
$fields['RESPONSIBLE_ID'],
self::resolveDocumentId($documentId),
true
);
}
if (isset($fields['ACCOMPLICES']))
{
$fields['ACCOMPLICES'] = CBPHelper::ExtractUsers(
$fields['ACCOMPLICES'],
self::resolveDocumentId($documentId)
);
}
if (isset($fields['AUDITORS']))
{
$fields['AUDITORS'] = CBPHelper::ExtractUsers(
$fields['AUDITORS'],
self::resolveDocumentId($documentId)
);
}
if (isset($fields['IS_IMPORTANT']))
{
$fields['PRIORITY'] = $fields['IS_IMPORTANT'] === 'Y' ? Priority::HIGH : Priority::AVERAGE;
unset($fields['IS_IMPORTANT']);
}
$documentFields = self::getDocumentFields(null);
foreach ($fields as $fieldsName => $fieldValue)
{
if($documentFields[$fieldsName]['Type'] === 'bool')
{
$isUf = mb_strpos($fieldsName, 'UF_') === 0;
$fieldValue = CBPHelper::getBool($fieldValue);
$fields[$fieldsName] = $isUf ? (int) $fieldValue : ($fieldValue ? 'Y' : 'N');
}
}
//normalize date fields
$userDateFields = self::getFieldsCreatedByUser('datetime');
$allDateFields = array_merge(
['DEADLINE', 'END_DATE_PLAN', 'START_DATE_PLAN'],
array_keys($userDateFields)
);
foreach ($allDateFields as $dateField)
{
if (!isset($fields[$dateField]))
{
if (array_key_exists($dateField, $fields))
{
$fields[$dateField] = '';
}
continue;
}
$isMultiple = isset($userDateFields[$dateField]) && $userDateFields[$dateField]['Multiple'];
$fields[$dateField] = self::convertDateValue($fields[$dateField], $isMultiple);
}
if (empty($fields))
{
return false;
}
$prevOccurAsUserId = BitrixTasksUtilUser::getOccurAsId();
if ($modifiedById > 0)
{
BitrixTasksUtilUser::setOccurAsId($modifiedById);
}
$task = new CTasks();
$result = $task->update($documentId, $fields, [
'CHECK_RIGHTS_ON_FILES' => 'N',
'AUTHOR_ID' => $modifiedById ?: 1,
'USER_ID' => $modifiedById ?: 1,
]);
BitrixTasksUtilUser::setOccurAsId($prevOccurAsUserId);
$newUsers = [];
foreach (array('CREATED_BY', 'RESPONSIBLE_ID', 'AUDITORS', 'ACCOMPLICES') as $code)
{
if (isset($fields[$code]))
{
if (!is_array($fields[$code]))
{
$newUsers[] = $fields[$code];
}
else
{
$newUsers = array_merge($newUsers, $fields[$code]);
}
}
}
if (!empty($newUsers))
{
BitrixTasksKanbanStagesTable::pinInStage($documentId, $newUsers);
}
return $result;
}