/** * Replacing validators with their up-to-date equivalent from an embedded form. * * @param sfForm $form Form instance on which to replace validators * * @return sfValidatorSchema */ protected function correctValidators($form) { foreach ($form->getEmbeddedForms() as $field => $embed) { if ($form->getValidator($field) instanceof sfValidatorSchema) { foreach ($embed->getValidatorSchema()->getFields() as $name => $validator) { if (!$form->getValidator($field)->offsetExists($name)) { $embed->getValidatorSchema()->offsetUnset($name); } } $form->setValidator($field, $this->correctValidators($embed)); } } return $form->getValidatorSchema(); }
/** * Overrides sfForm::mergeForm() to also merge embedded forms * Allows autosave of merged collections * * @param sfForm $form The sfForm instance to merge with current form * * @throws LogicException If one of the form has already been bound */ public function mergeForm(sfForm $form) { foreach ($form->getEmbeddedForms() as $name => $embeddedForm) { $this->embedForm($name, clone $embeddedForm); } parent::mergeForm($form); }
protected function processForm(sfWebRequest $request, sfForm $form) { $this->getResponse()->setContentType('application/json'); $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName())); if ($form->isValid()) { $isNew = $this->ei_block->isNew(); $this->ei_block = $form->save(); if ($isNew && !$this->isFull) { if ($this->insert_after) { $this->ei_block->getNode()->insertAsNextSiblingOf($this->ei_block_parent); } else { $this->ei_block->getNode()->insertAsFirstChildOf($this->ei_block_parent); } } elseif ($isNew && $this->isFull && $this->ei_vs_precedent != null) { $this->ei_block->getNode()->insertAsNextSiblingOf($this->ei_vs_precedent); } elseif ($isNew && $this->isFull && $this->ei_block_parent != null && $this->ei_vs_precedent == null) { $this->ei_block->getNode()->insertAsFirstChildOf($this->ei_block_parent); } if ($isNew && $this->isFull && array_key_exists("EiBlockParams", $form->getEmbeddedForms()) && !$this->ei_block->isEiLoop()) { $forms = $form->getEmbeddedForm("EiBlockParams")->getEmbeddedForms(); $prev = null; /** @var EiBlockParamForm $form */ foreach ($forms as $form) { if ($prev == null) { $form->getObject()->getNode()->insertAsLastChildOf($this->ei_block); } else { $form->getObject()->getNode()->insertAsNextSiblingOf($prev); } $prev = $form->getObject(); } } elseif ($isNew && $this->isFull && $this->ei_block->isEiLoop()) { $this->ei_block->createAutoMapping(); } elseif (!$isNew && $this->isFull && array_key_exists("EiBlockParams", $form->getEmbeddedForms())) { $forms = $form->getEmbeddedForm("EiBlockParams")->getEmbeddedForms(); $prev = null; $nouvelleCollection = array(); /** @var EiBlockParamForm $form */ foreach ($forms as $form) { $nouvelleCollection[] = $form->getObject()->getId(); if ($prev == null && $form->getObject()->getLft() == null) { $form->getObject()->getNode()->insertAsLastChildOf($this->ei_block); } elseif ($form->getObject()->getLft() == null) { $form->getObject()->getNode()->insertAsNextSiblingOf($prev); } $prev = $form->getObject(); } foreach ($this->ei_block->getEiVersionStructures() as $key => $structureElt) { if ($structureElt instanceof EiBlockParam && !in_array($structureElt->getId(), $nouvelleCollection)) { $this->ei_block->getEiVersionStructures()->remove($key); } } $this->ei_block->save(); } return false; } else { $JSONResponse['status'] = "error"; $errors = $form->getErrorSchema()->getErrors(); if (isset($errors["name"])) { $nomErreur = $errors["name"]; } else { $nomErreur = ""; } $JSONResponse['message'] = "Unable to save the block. " . $nomErreur; } return $JSONResponse; }