• Модуль: rest
  • Путь к файлу: ~/bitrix/modules/rest/lib/app.php
  • Класс: BitrixRestAppTable
  • Вызов: AppTable::updateAppStatusInfo
static function updateAppStatusInfo()
{
	$appList = OAuthService::getEngine()->getClient()->getApplicationList();

	if(is_array($appList) && is_array($appList['result']))
	{
		$dbApps = static::getList(array(
			'filter' => array(
				'!=STATUS' => static::STATUS_LOCAL,
			),
			'select' => array(
				'ID', 'CLIENT_ID', 'STATUS', 'DATE_FINISH',
			)
		));

		$localApps = array();
		while($app = $dbApps->fetch())
		{
			$localApps[$app['CLIENT_ID']] = $app;
		}

		foreach($appList['result'] as $app)
		{
			if(array_key_exists($app['client_id'], $localApps))
			{
				$dateFinishLocal = $localApps[$app['client_id']]['DATE_FINISH']
					? $localApps[$app['client_id']]['DATE_FINISH']->getTimestamp()
					: '';
				$dateFinishRemote = ($app['date_finish'] ?? null) ? MainTypeDate::createFromTimestamp($app['date_finish'])->getTimestamp() : '';

				if(
					$localApps[$app['client_id']]['STATUS'] !== $app['status']
					|| $dateFinishRemote != $dateFinishLocal
				)
				{
					$appFields = array(
						'STATUS' => $app['status'],
						'DATE_FINISH' => $app['date_finish']
							? MainTypeDate::createFromTimestamp($app['date_finish'])
							: '',
					);

					static::setSkipRemoteUpdate(true);
					$result = static::update($localApps[$app['client_id']]['ID'], $appFields);
					static::setSkipRemoteUpdate(false);

					if(
						$result->isSuccess()
						&& $appFields['STATUS'] === static::STATUS_PAID
					)
					{
						static::callAppPaymentEvent($localApps[$app['client_id']]['ID']);
					}
				}
			}
			else
			{
				$appFields = array(
					'CLIENT_ID' => $app['client_id'],
					'CODE' => $app['code'],
					'ACTIVE' => $app['active'] ? static::ACTIVE : static::INACTIVE,
					'INSTALLED' => static::NOT_INSTALLED,
					'VERSION' => $app['version'],
					'STATUS' => $app['status'],
					'SCOPE' => $app['scope'],
				);

				if(!empty($app['date_finish']))
				{
					$appFields['DATE_FINISH'] = MainTypeDate::createFromTimestamp($app['date_finish']);
				}

				$result = static::add($appFields);

				if($result->isSuccess() && $appFields['STATUS'] === static::STATUS_PAID)
				{
					static::callAppPaymentEvent($result->getId());
				}
			}
		}
	}
}