public function removeCriteria($filters, Revision $revision, $criteriaField) { $rawData = $revision->getRawData(); if (!isset($rawData[$criteriaField])) { $rawData[$criteriaField] = []; } $criteriaFieldType = $revision->getContentType()->getFieldType()->__get('ems_' . $criteriaField); $multipleField = $this->getMultipleField($criteriaFieldType); $found = false; foreach ($rawData[$criteriaField] as $index => $criteriaSet) { $found = true; foreach ($filters as $criterion => $value) { if ($criterion != $multipleField && $value != $criteriaSet[$criterion]) { $found = false; break; } } if ($found) { if ($multipleField) { $indexKey = array_search($filters[$multipleField], $criteriaSet[$multipleField]); if ($indexKey === FALSE) { $this->addFlash('notice', 'Criteria not found in multiple key'); } else { unset($rawData[$criteriaField][$index][$multipleField][$indexKey]); $rawData[$criteriaField][$index][$multipleField] = array_values($rawData[$criteriaField][$index][$multipleField]); if (count($rawData[$criteriaField][$index][$multipleField]) == 0) { unset($rawData[$criteriaField][$index]); $rawData[$criteriaField] = array_values($rawData[$criteriaField]); } if (!$revision->getDraft()) { $revision = $this->dataService->initNewDraft($revision->getContentType()->getName(), $revision->getOuuid(), $revision); } $revision->setRawData($rawData); $this->addFlash('notice', '<b>Remove</b> ' . $multipleField . ' with value ' . $filters[$multipleField] . ' from ' . $revision); return $revision; } } else { unset($rawData[$criteriaField][$index]); $rawData[$criteriaField][$index] = array_values($rawData[$criteriaField][$index]); if (!$revision->getDraft()) { $revision = $this->dataService->initNewDraft($revision->getContentType()->getName(), $revision->getOuuid(), $revision); } $revision->setRawData($rawData); $this->addFlash('notice', '<b>Remove</b> from ' . $revision); return $revision; } break; } } if (!$found) { $this->addFlash('notice', 'Criteria not found for ' . $revision); } return false; }
public function replaceData(Revision $revision, array $rawData, $replaceOrMerge = "replace") { if (!$revision->getDraft()) { $em = $this->doctrine->getManager(); $this->lockRevision($revision, false, false); $now = new \DateTime(); $newDraft = new Revision($revision); if ($replaceOrMerge === "replace") { $newDraft->setRawData($rawData); } elseif ($replaceOrMerge === "merge") { $newRawData = array_merge($revision->getRawData(), $rawData); $newDraft->setRawData($newRawData); } else { $this->session->getFlashBag()->add('error', 'The revision ' . $revision . ' has not been replaced or replaced'); return $revision; } $newDraft->setStartTime($now); $revision->setEndTime($now); $this->lockRevision($newDraft, false, false); $em->persist($revision); $em->persist($newDraft); $em->flush(); return $newDraft; } else { $this->session->getFlashBag()->add('error', 'The revision ' . $revision . ' is not a finalize version'); } return $revision; }