/**
  * Update criteria from a criteriagroup
  *
  * @param array $criteriagroupJS
  * @param Criteriagroup $criteriagroupDB
  * @return array
  */
 protected function publishCriteria($criteriagroupJS = array(), Criteriagroup $criteriagroupDB)
 {
     $processedCriteria = array();
     // Retrieve existing criteriagroups for this condition
     $existingCriteria = $criteriagroupDB->getCriteria();
     foreach ($criteriagroupJS->criterion as $criterionJS) {
         //criterion attributes
         $data = isset($criterionJS->data) ? $criterionJS->data : null;
         $ctype = isset($criterionJS->type) ? $criterionJS->type : null;
         //echo "criterionid ".$criterionJS->id."<br>\n";
         // Current criterion has never been published or criterion entity has been deleted => create it
         if (empty($criterionJS->critid) || !$existingCriteria->containsKey($criterionJS->critid)) {
             //echo "criterion add <br>\n";
             $criterionDB = $this->stepConditionsManager->createCriterion($data, $ctype, $criteriagroupDB);
             $uniqId = "_CRIT" . uniqid();
             $this->uniqId2crit[$uniqId] = $criterionDB;
             // Update json structure with new resource ID
             $criterionJS->critid = $uniqId;
         } else {
             //echo "criterion edit <br>\n";
             //retrieve criterion
             $criterionDB = $existingCriteria->get($criterionJS->critid);
             //edit criterion in DB
             $criterionDB = $this->stepConditionsManager->editCriterion($data, $ctype, $criteriagroupDB, $criterionDB);
         }
         // Store criteria to know it doesn't have to be deleted when we will clean the condition
         $processedCriteria[] = $criterionDB;
     }
     return $processedCriteria;
 }
 /**
  * Update the Criteria of a CriteriaGroup.
  *
  * @param Criteriagroup $group
  * @param array         $criteria
  *
  * @return array
  */
 public function updateCriteria(Criteriagroup $group, array $criteria = [])
 {
     $processedCriteria = [];
     $existingCriteria = $group->getCriteria();
     foreach ($criteria as $criterionStructure) {
         if (empty($criterionStructure->critid) || !$existingCriteria->containsKey($criterionStructure->critid)) {
             // Current CriteriaGroup has never been published or has been deleted => create it
             $criterion = $this->createCriterion($group, $criterionStructure);
         } else {
             // CriteriaGroup already exists => update it
             $criterion = $existingGroups->get($group->cgid);
             $criterion = $this->editCriterion($group, $criterionStructure, $criterion);
         }
         // Store CriteriaGroup to know it doesn't have to be deleted when we will clean the StepCondition
         $processedCriteria[] = $criterion;
     }
     return $processedCriteria;
 }