/** * Save filter, requirement fields: IBLOCK_ID, FILTER * * @param array $fields * @return \Bitrix\Main\Entity\AddResult * @throws \InvalidArgumentException */ public function addFilter(array $fields) { $filter = $fields['FILTER']; if (!is_array($filter) || sizeof($filter) <= 0) { throw new \InvalidArgumentException('Filter can not be empty'); } $filter = $this->normalizeFilter($filter); $iblockId = (int) $fields['IBLOCK_ID']; $sectionId = (int) $fields['SECTION_ID']; $queryBuilder = new Entity\Query(Iblock\IblockTable::getEntity()); $iblockDataResult = $queryBuilder->setSelect(array('ID'))->setFilter(array('ID' => $iblockId))->exec()->fetch(); if ($this->isEmptyResult($iblockDataResult)) { throw new \InvalidArgumentException('Invalid IBLOCK_ID'); } if ($sectionId > 0) { $queryBuilder = new Entity\Query(Iblock\SectionTable::getEntity()); $sectionDataResult = $queryBuilder->setSelect(array('ID'))->setFilter(array('IBLOCK_ID' => $iblockDataResult['ID'], 'ID' => $sectionId))->exec()->fetch(); if ($this->isEmptyResult($sectionDataResult)) { throw new \InvalidArgumentException('Invalid SECTION_ID'); } } $queryBuilder = new Entity\Query(Model\SubscribeTable::getEntity()); $subscribe = $queryBuilder->setSelect(array('ID'))->setFilter(array('FILTER' => $filter, 'IBLOCK_ID' => $iblockDataResult['ID'], 'SECTION_ID' => isset($sectionDataResult) ? $sectionDataResult['ID'] : ''))->exec()->fetch(); if (!empty($subscribe)) { $addResult = new \Bitrix\Main\Entity\AddResult(); $addResult->setId($subscribe['ID']); return $addResult; } $subscribeResult = Model\SubscribeTable::add(array('FILTER' => $filter, 'IBLOCK_ID' => $iblockDataResult['ID'], 'SECTION_ID' => isset($sectionDataResult) ? $sectionDataResult['ID'] : '')); return $subscribeResult; }