- Модуль: rest
- Путь к файлу: ~/bitrix/modules/rest/lib/api/event.php
- Класс: BitrixRestApiEvent
- Вызов: Event::eventUnbind
static function eventUnbind($query, $n, CRestServer $server)
{
global $USER;
if($server->getAuthType() !== Auth::AUTH_TYPE)
{
throw new AuthTypeException();
}
$query = array_change_key_case($query, CASE_UPPER);
$eventName = ToUpper($query['EVENT']);
$eventType = ToLower($query['EVENT_TYPE']);
$eventCallback = $query['HANDLER'];
if($eventName == '')
{
throw new ArgumentNullException("EVENT");
}
if($eventType <> '')
{
if(!in_array($eventType, array(EventTable::TYPE_ONLINE, EventTable::TYPE_OFFLINE)))
{
throw new ArgumentException('Value must be one of {'.EventTable::TYPE_ONLINE.'|'.EventTable::TYPE_OFFLINE.'}', 'EVENT_TYPE');
}
}
else
{
$eventType = EventTable::TYPE_ONLINE;
}
if($eventType === EventTable::TYPE_OFFLINE)
{
if(!CRestUtil::isAdmin())
{
throw new AccessException('Offline events unbinding requires administrator access rights');
}
$eventCallback = '';
}
elseif($eventCallback == '')
{
throw new ArgumentNullException("HANDLER");
}
$clientInfo = AppTable::getByClientId($server->getClientId());
$filter = array(
'=APP_ID' => $clientInfo["ID"],
'=EVENT_NAME' => $eventName,
'=EVENT_HANDLER' => $eventCallback,
);
if($eventType === EventTable::TYPE_OFFLINE)
{
$authData = $server->getAuthData();
$filter['=CONNECTOR_ID'] = isset($authData['auth_connector']) ? $authData['auth_connector'] : '';
}
else
{
if(isset($query['AUTH_TYPE']))
{
if(!CRestUtil::isAdmin() && $query['AUTH_TYPE'] !== intval($USER->GetID()))
{
throw new AccessException('Event unbinding with AUTH_TYPE requires administrator access rights');
}
$filter['=USER_ID'] = intval($query['AUTH_TYPE']);
}
elseif(!CRestUtil::isAdmin())
{
$filter['=USER_ID'] = intval($USER->GetID());
}
}
$dbRes = EventTable::getList(array(
'filter' => $filter,
'select' => ['ID']
));
$cnt = 0;
while($eventInfo = $dbRes->fetch())
{
$result = EventTable::delete($eventInfo["ID"]);
if($result->isSuccess())
{
// we shouldn't make Unbind here, it'll be done during the first event call
$cnt++;
}
}
return array('count' => $cnt);
}