Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public function configure()
- {
- $this->embedBeneficiarios();
- }
- public function addBeneficiarioForm($key)
- {
- $beneficiario = new Beneficiario();
- $beneficiario->setAsociado($this->object->getId());
- $beneficiarioForm = new BeneficiarioForm($beneficiario);
- // embebiendo el nuevo beneficiario en el container
- $this->embeddedForms['beneficiarios']->embedForm($key,$beneficiarioForm);
- // re-embebiendo el formulario container
- $this->embedForm('beneficiarios',$this->embeddedForms['beneficiarios']);
- }
- public function updateEmbeddedBeneficiarios()
- {
- // update content item
- if (!is_null($beneficiarios = $this->getBeneficiarios()))
- {
- $values = $this->getValues();
- foreach($beneficiarios as $beneficiario)
- {
- if ( $beneficiario->isNew() )
- {
- $values['asociado'] = $this->object->getId();
- }
- $beneficiario->fromArray($values, BasePeer::TYPE_FIELDNAME);
- $beneficiario->save();
- }
- }
- }
- protected function getBeneficiarios()
- {
- if (!$this->object->getBeneficiarios())
- {
- return new Beneficiario();
- }
- else
- {
- return $this->object->getBeneficiarios();
- }
- }
- protected function embedBeneficiarios()
- {
- $BeneficiariosForm = new sfForm();
- // solo necesitamos embeber al fromulario via ajax
- if (false === sfContext::getInstance()->getRequest()->isXmlHttpRequest())
- {
- $beneficiarios = $this->getObject()->getBeneficiarios();
- if(count($beneficiarios) == 0)
- {
- // creamos 3 por default
- for ($i=0; $i<1; $i++)
- {
- $beneficiario = new Beneficiario();
- $beneficiario->setAsociado($this->getObject()->getId());
- $beneficiarios[] = $beneficiario;
- }
- }
- foreach($beneficiarios as $key => $v)
- {
- $beneficiarioForm = new BeneficiarioForm($v);
- $BeneficiariosForm->embedForm('beneficiario'.($key+1),$beneficiarioForm);
- $BeneficiariosForm->widgetSchema['beneficiario'.($key+1)]->setLabel('Beneficiario '.($key+1));
- }
- }
- $this->embedForm('beneficiarios', $BeneficiariosForm);
- $this->widgetSchema['beneficiarios']->setLabel('Beneficiarios');
- }
- public function save($con = null)
- {
- if(!$this->getObject()->isNew())
- {
- $this->updateEmbeddedBeneficiarios();
- }
- parent::save();
- }
- /**
- ** Sobreescribirmos el método bind para manejar los formularios embebidos
- **/
- public function bind(array $taintedValues = null, array $taintedFiles = null)
- {
- foreach($taintedValues['beneficiarios'] as $key => $form) {
- if(false === $this->embeddedForms['beneficiarios']->offsetExists($key))
- {
- $this->addBeneficiarioForm($key);
- }
- }
- parent::bind($taintedValues,$taintedFiles);
- }
- /**
- * sobreescribimos el método saveEmbeddedForms para que guarde correctamente
- */
- public function saveEmbeddedForms($con = null, $forms = null)
- {
- if(null === $con)
- {
- $con = $this->getConnection();
- }
- if(null === $forms)
- {
- $beneficiarios = $this->getValue('beneficiarios');
- $forms = $this->embeddedForms;
- foreach($this->embeddedForms['beneficiarios'] as $name => $form)
- {
- if(!isset($beneficiarios[$name]))
- {
- unset($forms['beneficiarios'][$name]);
- }
- }
- }
- foreach($forms as $form)
- {
- if($form instanceof sfFormObject)
- {
- if($form->getObject()->isNew())
- {
- $form->saveEmbeddedForms($con);
- $form->getObject()->save($con);
- $this->updateEmbeddedBeneficiarios($form->getObject());
- }
- }
- else
- {
- $this->saveEmbeddedForms($con,$form->getEmbeddedForms());
- }
- }
- }// saveEmbeddedForms()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement