protected function performSave($data, $fork) { $fitEntryType = array(); $fitEntryTypes1 = ECP\FitEntryTypeQuery::create()->find(); foreach ($fitEntryTypes1 as $fitEntryType1) { $fitEntryType[$fitEntryType1->getName()] = $fitEntryType1->getId(); } $entity = $this->getLocalyMappedEntityToSave($data, $fork); $connection = $this->getPropelConnection(); try { $connection->beginTransaction(); $entity->setRulesetEntityId($data->ruleset->id); foreach ($data->content as $dataRow) { $compositionRow = $this->getSubentity($entity, 'CompositionRow', $dataRow); $compositionRow->setShipId($dataRow->shipId); $compositionRow->setNotes(property_exists($dataRow, 'notes') ? $dataRow->notes : ''); $dataFitContent = $dataRow->fit->content; $compositionRow->setFitName($dataFitContent->header->shipName); $fitEntries = $compositionRow->getFitEntries(); $fitEntryIndex = 0; foreach ($dataFitContent->body as $dataFitEntry) { $fitEntryExists = count($fitEntries) > $fitEntryIndex; $fitEntry = null; if ($fitEntryExists) { $fitEntry = $fitEntries[$fitEntryIndex]; } else { $fitEntry = new ECP\FitEntry(); $fitEntry->setInd3x($fitEntryIndex); } $fitEntry->setFitEntryTypeId($fitEntryType[property_exists($dataFitEntry, 'type') ? $dataFitEntry->type : 'none']); $fitEntry->setItemId(property_exists($dataFitEntry, 'item') ? $dataFitEntry->item : 0); $fitEntry->setAmmoId(property_exists($dataFitEntry, 'ammo') ? $dataFitEntry->ammo : 0); $fitEntry->setAmount(property_exists($dataFitEntry, 'amount') ? $dataFitEntry->amount : 0); $this->prepareSubentitySave2($connection, $compositionRow, 'FitEntry', $fitEntry, !$fitEntryExists); $fitEntryIndex++; } for (; $fitEntryIndex < count($fitEntries); $fitEntryIndex++) { $compositionRow->removeFitEntry($fitEntries[$fitEntryIndex]); } $this->prepareSubentitySave($connection, $entity, 'CompositionRow', $compositionRow, $dataRow); } $this->cleanupOldEnties($entity, 'CompositionRow', $data->content); $this->saveGroupAccess($connection, $entity, $data); $entity->save($connection); $connection->commit(); return $this->createIdObj($entity->getId()); } catch (Exception $e) { $connection->rollBack(); throw $e; } }