/** * @param array $data * @return Entity\AddResult */ public static function addIfNonExists(array $data) { $filter = array_intersect_key($data, array('INVITE_USER_ID' => true, 'IBLOCK_ID' => true, 'SECTION_ID' => true)); $row = static::getRow(array('filter' => $filter, 'select' => array('ID', 'IS_DELETED'))); //if we add new invite by old deleted invite, then we delete old and add new. if ($row && empty($data['IS_DELETED']) && $row['IS_DELETED']) { static::delete($row['ID']); } elseif ($row) { $result = new \Bitrix\Main\Entity\AddResult(); $result->setId($row['ID']); return $result; } return static::add($data); }
/** * Save link user filter with filter * Requirement fields: USER_ID, FILTER_ID * * @param array $fields * @return \Bitrix\Main\Entity\AddResult * @throws \InvalidArgumentException */ public function addFilterUser(array $fields) { $userId = $fields['USER_ID']; $userData = \CUser::GetById($userId)->GetNext(); if ($this->isEmptyResult($userData)) { throw new \InvalidArgumentException('Invalid USER_ID'); } $queryBuilder = new Entity\Query(Model\SubscribeTable::getEntity()); $subscribe = $queryBuilder->setSelect(array('ID'))->setFilter(array('ID' => $fields['FILTER_ID']))->exec()->fetch(); if ($this->isEmptyResult($subscribe)) { throw new \InvalidArgumentException('Invalid FILTER_ID'); } $filterUserData = Model\SubscribeUserTable::getList(array('select' => array('ID'), 'filter' => array('USER_ID' => $userId, 'FILTER_ID' => $subscribe['ID'])))->fetch(); if (!$this->isEmptyResult($filterUserData)) { $addResult = new \Bitrix\Main\Entity\AddResult(); $addResult->setId($filterUserData['ID']); return $addResult; } $filterUserResult = Model\SubscribeUserTable::add(array('USER_ID' => $userData['ID'], 'FILTER_ID' => $subscribe['ID'])); if ($filterUserResult->isSuccess()) { Model\SubscribeStackTable::add(array('FILTER_USER_ID' => $filterUserResult->getId(), 'ACTION' => 'INSERT')); } return $filterUserResult; }