/**
  * 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;
 }