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