Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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;
 }