• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/entity/compatibility/adapter/lastactivity.php
  • Класс: Bitrix\Crm\Entity\Compatibility\Adapter\LastActivity
  • Вызов: LastActivity::doPerformUpdate
protected function doPerformUpdate(int $id, array &$fields, array $compatibleOptions): Result
{
	// these field values can't be changed from outside
	unset($fields[$this->lastActivityTimeField], $fields[$this->lastActivityByField]);

	$monitor = Monitor::getInstance();
	$identifier = new ItemIdentifier($this->factory->getEntityTypeId(), $id);

	if ($monitor->isTimelineChanged($identifier))
	{
		/** @var DateTime|null $lastActivityTime */
		/** @var int|null $lastActivityBy */
		[$lastActivityTime, $lastActivityBy] = $monitor->calculateLastActivityInfo($identifier);

		if (is_null($lastActivityTime) || is_null($lastActivityBy))
		{
			$item = $this->getItem($id);
			if (!$item)
			{
				return (new Result())->addError(new Error("Could not find item with ID={$id} in " . self::class));
			}

			if (is_null($lastActivityTime))
			{
				$lastActivityTime = $item->getCreatedTime() ?? new DateTime();
			}
			if (is_null($lastActivityBy))
			{
				$lastActivityBy = $item->getCreatedBy() ?? 0;
			}
		}

		$fields[$this->lastActivityTimeField] = (string)$lastActivityTime;
		$fields[$this->lastActivityByField] = $lastActivityBy;
	}

	return new Result();
}