/**
  * 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();
 }
Пример #2
0
 /**
  * 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);
 }
Пример #3
0
 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;
 }