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