use Bitrix\Main\Entity; use Citfact\FilterSubscribe\Model\SubscribeUserTable; Loc::loadMessages(__FILE__); Loader::includeModule('citfact.filter.subscribe'); $app = Application::getInstance(); $request = $app->getContext()->getRequest(); if (!$GLOBALS['USER']->IsAuthorized()) { return; } $isAjax = getenv('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'; $subscribeManager = new \Citfact\FilterSubscribe\SubscribeManager(); // Check whether there is a user filter if ($request->getQuery('CHECK_FILTER') && $isAjax) { $filterData = $GLOBALS[$arParams['FILTER_NAME']]; $filterData = $subscribeManager->normalizeFilter($filterData); $queryBuilder = new Entity\Query(SubscribeUserTable::getEntity()); $filter = $queryBuilder->registerRuntimeField('filter', array('data_type' => 'Citfact\\FilterSubscribe\\Model\\SubscribeTable', 'reference' => array('=this.FILTER_ID' => 'ref.ID')))->setSelect(array('*', 'filter'))->setFilter(array('USER_ID' => $GLOBALS['USER']->GetId(), 'filter.FILTER' => $filterData))->setLimit(1)->exec()->fetch(); $GLOBALS['APPLICATION']->RestartBuffer(); header('Content-Type: application/json'); exit(json_encode(array('data' => $filter))); } // Saves the current filter, // If such a filter not already exists if ($request->getQuery('SAVE_FILTER') && $isAjax) { $filterData = $GLOBALS[$arParams['FILTER_NAME']]; $filterResult = $subscribeManager->addFilter(array('FILTER' => $filterData, 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'SECTION_ID' => $arParams['SECTION_ID'])); $filterUserResult = $subscribeManager->addFilterUser(array('USER_ID' => $GLOBALS['USER']->GetId(), 'FILTER_ID' => $filterResult->getId())); $GLOBALS['APPLICATION']->RestartBuffer(); header('Content-Type: application/json'); exit(json_encode(array('success' => $filterResult->isSuccess() && $filterUserResult->isSuccess()))); }
/** * Remove filter user and relationships * * @param int $id * @return \Bitrix\Main\Entity\DeleteResult * @throws \InvalidArgumentException */ public function removeFilterUser($id) { $filterUser = Model\SubscribeUserTable::getById($id)->fetch(); if ($this->isEmptyResult($filterUser)) { throw new \InvalidArgumentException('Invalid filter user id'); } $queryBuilder = new Entity\Query(Model\SubscribeStackTable::getEntity()); $subscribeStack = $queryBuilder->setSelect(array('ID'))->setFilter(array('FILTER_USER_ID' => $filterUser['ID']))->exec(); while ($row = $subscribeStack->fetch()) { Model\SubscribeStackTable::delete(array('ID' => $row['ID'])); } $result = Model\SubscribeUserTable::delete(array('ID' => $filterUser['ID'])); $queryBuilder = new Entity\Query(Model\SubscribeUserTable::getEntity()); $filterUserResult = $queryBuilder->registerRuntimeField('cnt', array('data_type' => 'integer', 'expression' => array('count(%s)', 'ID')))->setSelect(array('ID', 'cnt'))->setFilter(array('FILTER_ID' => $filterUser['FILTER_ID']))->exec()->fetch(); if ($filterUserResult['cnt'] <= 0) { Model\SubscribeTable::delete(array('ID' => $filterUser['FILTER_ID'])); } return $result; }