Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. public function configure()
  2. {
  3. $this->embedBeneficiarios();
  4. }
  5.  
  6. public function addBeneficiarioForm($key)
  7. {
  8. $beneficiario = new Beneficiario();
  9. $beneficiario->setAsociado($this->object->getId());
  10. $beneficiarioForm = new BeneficiarioForm($beneficiario);
  11.  
  12. // embebiendo el nuevo beneficiario en el container
  13. $this->embeddedForms['beneficiarios']->embedForm($key,$beneficiarioForm);
  14. // re-embebiendo el formulario container
  15. $this->embedForm('beneficiarios',$this->embeddedForms['beneficiarios']);
  16. }
  17.  
  18. public function updateEmbeddedBeneficiarios()
  19. {
  20. // update content item
  21. if (!is_null($beneficiarios = $this->getBeneficiarios()))
  22. {
  23.  
  24. $values = $this->getValues();
  25.  
  26. foreach($beneficiarios as $beneficiario)
  27. {
  28. if ( $beneficiario->isNew() )
  29. {
  30. $values['asociado'] = $this->object->getId();
  31. }
  32.  
  33. $beneficiario->fromArray($values, BasePeer::TYPE_FIELDNAME);
  34.  
  35. $beneficiario->save();
  36. }
  37. }
  38. }
  39.  
  40. protected function getBeneficiarios()
  41. {
  42. if (!$this->object->getBeneficiarios())
  43. {
  44. return new Beneficiario();
  45. }
  46. else
  47. {
  48. return $this->object->getBeneficiarios();
  49. }
  50. }
  51.  
  52. protected function embedBeneficiarios()
  53. {
  54. $BeneficiariosForm = new sfForm();
  55.  
  56. // solo necesitamos embeber al fromulario via ajax
  57. if (false === sfContext::getInstance()->getRequest()->isXmlHttpRequest())
  58. {
  59. $beneficiarios = $this->getObject()->getBeneficiarios();
  60. if(count($beneficiarios) == 0)
  61. {
  62. // creamos 3 por default
  63. for ($i=0; $i<1; $i++)
  64. {
  65. $beneficiario = new Beneficiario();
  66. $beneficiario->setAsociado($this->getObject()->getId());
  67. $beneficiarios[] = $beneficiario;
  68. }
  69. }
  70. foreach($beneficiarios as $key => $v)
  71. {
  72. $beneficiarioForm = new BeneficiarioForm($v);
  73. $BeneficiariosForm->embedForm('beneficiario'.($key+1),$beneficiarioForm);
  74. $BeneficiariosForm->widgetSchema['beneficiario'.($key+1)]->setLabel('Beneficiario '.($key+1));
  75. }
  76. }
  77.  
  78. $this->embedForm('beneficiarios', $BeneficiariosForm);
  79. $this->widgetSchema['beneficiarios']->setLabel('Beneficiarios');
  80. }
  81.  
  82. public function save($con = null)
  83. {
  84. if(!$this->getObject()->isNew())
  85. {
  86. $this->updateEmbeddedBeneficiarios();
  87. }
  88.  
  89. parent::save();
  90. }
  91.  
  92. /**
  93. ** Sobreescribirmos el método bind para manejar los formularios embebidos
  94. **/
  95. public function bind(array $taintedValues = null, array $taintedFiles = null)
  96. {
  97. foreach($taintedValues['beneficiarios'] as $key => $form) {
  98. if(false === $this->embeddedForms['beneficiarios']->offsetExists($key))
  99. {
  100. $this->addBeneficiarioForm($key);
  101. }
  102. }
  103. parent::bind($taintedValues,$taintedFiles);
  104. }
  105.  
  106. /**
  107. * sobreescribimos el método saveEmbeddedForms para que guarde correctamente
  108. */
  109. public function saveEmbeddedForms($con = null, $forms = null)
  110. {
  111. if(null === $con)
  112. {
  113. $con = $this->getConnection();
  114. }
  115.  
  116. if(null === $forms)
  117. {
  118. $beneficiarios = $this->getValue('beneficiarios');
  119. $forms = $this->embeddedForms;
  120.  
  121. foreach($this->embeddedForms['beneficiarios'] as $name => $form)
  122. {
  123. if(!isset($beneficiarios[$name]))
  124. {
  125. unset($forms['beneficiarios'][$name]);
  126. }
  127. }
  128. }
  129.  
  130. foreach($forms as $form)
  131. {
  132. if($form instanceof sfFormObject)
  133. {
  134. if($form->getObject()->isNew())
  135. {
  136. $form->saveEmbeddedForms($con);
  137. $form->getObject()->save($con);
  138. $this->updateEmbeddedBeneficiarios($form->getObject());
  139. }
  140. }
  141. else
  142. {
  143. $this->saveEmbeddedForms($con,$form->getEmbeddedForms());
  144. }
  145. }
  146. }// saveEmbeddedForms()