/** * @param Form $entity * @param array $actions */ public function deleteActions(Form $entity, $actions) { if (empty($actions)) { return; } $existingActions = $entity->getActions()->toArray(); $deleteActions = []; foreach ($actions as $actionId) { if (isset($existingActions[$actionId])) { $actionEntity = $this->em->getReference('MauticFormBundle:Action', (int) $actionId); $entity->removeAction($actionEntity); $deleteActions[] = $actionId; } } // Delete actions from db if (count($deleteActions)) { $this->formActionModel->deleteEntities($deleteActions); } }
/** * @param Form $entity * @param $sessionActions */ public function setActions(Form $entity, $sessionActions) { $order = 1; $existingActions = $entity->getActions()->toArray(); $savedFields = $entity->getFields()->toArray(); //match sessionId with field Id to update mapped fields $fieldIds = array(); foreach ($savedFields as $id => $field) { $fieldIds[$field->getSessionId()] = $field->getId(); } foreach ($sessionActions as $properties) { $isNew = !empty($properties['id']) && isset($existingActions[$properties['id']]) ? false : true; $action = !$isNew ? $existingActions[$properties['id']] : new Action(); foreach ($properties as $f => $v) { if (in_array($f, array('id', 'order'))) { continue; } $func = "set" . ucfirst($f); if ($f == 'properties') { if (isset($v['mappedFields'])) { foreach ($v['mappedFields'] as $pk => $pv) { if (strpos($pv, 'new') !== false) { $v['mappedFields'][$pk] = $fieldIds[$pv]; } } } } if (method_exists($action, $func)) { $action->{$func}($v); } } $action->setForm($entity); $action->setOrder($order); $order++; $entity->addAction($properties['id'], $action); } // Persist if form is being edited if ($entity->getId()) { $this->formActionModel->saveEntities($existingActions); } }