/** * Updates the given condition group with the values from the given array. * * @param ConditionGroupEntity $conditionGroup * @param array $matchedEntry * * @return bool * * @throws ConditionGroupMismatchException * @throws FilterDependencyNotFoundException */ protected function updateConditionGroup(ConditionGroupEntity $conditionGroup, $matchedEntry) { if (array_key_exists('id', $matchedEntry) && isset($matchedEntry['conditions'])) { $conditionIds = []; foreach ($matchedEntry['conditions'] as $conditionData) { if (array_key_exists('id', $conditionData)) { /** @var ConditionEntity $conditionEntity */ $conditionEntity = $this->conditionRepository->findById($conditionData['id']); // check if condition exists at all if (!$conditionEntity) { throw new FilterDependencyNotFoundException(self::$conditionEntityName, $conditionData['id']); } // check if conditions is related with condition group if ($conditionEntity->getConditionGroup()->getId() !== $conditionGroup->getId()) { throw new ConditionGroupMismatchException($matchedEntry['id']); } $conditionIds[] = $conditionEntity->getId(); } else { $conditionEntity = new ConditionEntity(); $conditionEntity->setConditionGroup($conditionGroup); $conditionGroup->addCondition($conditionEntity); $this->em->persist($conditionEntity); } $conditionEntity->setField($this->getProperty($conditionData, 'field', $conditionEntity->getField())); $conditionEntity->setOperator($this->getProperty($conditionData, 'operator', $conditionEntity->getOperator())); $conditionEntity->setType($this->getProperty($conditionData, 'type', $conditionEntity->getType())); $value = $this->getValueForCondition($this->getProperty($conditionData, 'value', $conditionEntity->getValue()), $conditionEntity->getType()); $conditionEntity->setValue($value); } $this->removeNonExistentConditions($conditionGroup, $conditionIds); } return true; }