Author: jaimesuez
Date: 2010-04-14 18:31:48 +0200 (Wed, 14 Apr 2010)
New Revision: 29150

Added:
   plugins/sfDoctrineAjaxFormPlugin/lib/sfDoctrineAjaxFormPluginHelper.class.php
Modified:
   plugins/sfDoctrineAjaxFormPlugin/modules/ajax_form/actions/actions.class.php
Log:
metiendo a helper para sacar cosas del baseform


Added: 
plugins/sfDoctrineAjaxFormPlugin/lib/sfDoctrineAjaxFormPluginHelper.class.php
===================================================================
--- 
plugins/sfDoctrineAjaxFormPlugin/lib/sfDoctrineAjaxFormPluginHelper.class.php   
                            (rev 0)
+++ 
plugins/sfDoctrineAjaxFormPlugin/lib/sfDoctrineAjaxFormPluginHelper.class.php   
    2010-04-14 16:31:48 UTC (rev 29150)
@@ -0,0 +1,115 @@
+<?php
+
+/* 
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+*/
+/**
+ * Description of sfDoctrineAjaxFormPluginHelperclass
+ *
+ * @author jaimejaime
+ */
+class sfDoctrineAjaxFormPluginHelper
+{
+
+################################  FUNCIONES PARA EMBEDD FORMS DINAMICOS  
########################################
+  static public function configureDinamicEmbeddedForms( & $form)
+  {
+    //obtenemos los "widget_name" de todos los dinamic embedded forms
+    $widget_names_dinamic_embedded_forms = 
$form->getOption('widget_names_dinamic_embedded_forms');
+
+    //recorremos los formularios
+    foreach ($widget_names_dinamic_embedded_forms as $widget_name)
+    {
+      //datos que vamos a utilizar
+      $form_class = 
module_to_form($form->getWidget($widget_name)->getOption('widget_model'));
+      $embedded_name = 
$form->getWidget($widget_name)->getOption('embedded_name');
+      $unset = $form->getWidget($widget_name)->getOption('unset');
+      $foreign_type = 
$form->getWidget($widget_name)->getOption('foreign_type');
+      $foreign_alias = 
$form->getWidget($widget_name)->getOption('foreign_alias');
+      $module_relation = 
$form->getWidget($widget_name)->getOption('module_relation');
+      $form_module_relation = 
$form->getWidget($widget_name)->getOption('form_module_relation');
+
+      //Un formulario vacio hara de contenedor para todas los embedded forms
+      $objects_container_form = new sfForm();
+      $count = 0;
+
+      //consultamos los objetos existentes
+      if ($foreign_type == 'ONE-one' || $foreign_type == 'ONE-ONE')
+      {
+        $object = $form->getObject()->$form_module_relation;
+        if ($object->id > 0)
+        {
+          $object_form = new $form_class($object);
+          $object_form->unsetFields($unset);
+          $objects_container_form->embedForm($count++, $object_form);
+        }
+      }
+      elseif($foreign_type == "many-many" || $foreign_type == "one-MANY")
+      {
+        $objects = $form->getObject()->$foreign_alias;
+
+        //Embebemos los objetos existentes
+        foreach ($objects as $object)
+        {
+          $object_form = new $form_class($object);
+          $object_form->unsetFields($unset);
+          $objects_container_form->embedForm($count++, $object_form);
+        }
+      }
+
+      $form->embedForm($embedded_name, $objects_container_form);
+    }
+  }
+  
+  public static function embedFormDinamic( & $form, $widget_name, $num, 
$id_related_object, $taintedValues = null)
+  {
+    $foreign_type = $form->getWidget($widget_name)->getOption('foreign_type');
+    $foreign_alias = 
$form->getWidget($widget_name)->getOption('foreign_alias');
+    $embedded_name = 
$form->getWidget($widget_name)->getOption('embedded_name');
+    $unset = $form->getWidget($widget_name)->getOption('unset');
+    $widget_model = 
module_to_class($form->getWidget($widget_name)->getOption('widget_model'));
+    $widget_form = class_to_form($widget_model);
+    $set_module_relation = 'set' . 
$form->getWidget($widget_name)->getOption('module_relation');  //setConyuge x ej
+    $form_module_relation = 
$form->getWidget($widget_name)->getOption('form_module_relation');  //Conyuge x 
ej
+    $set_form_module_relation = 'set' . $form_module_relation;  //setConyuge x 
ej
+    
+    $related_object = $id_related_object > 0 ? 
Doctrine::getTable($widget_model)->find($id_related_object) : new 
$widget_model();
+    
+    //la foreign key esta en el objeto contenedor , x ej feligres
+    if ($foreign_type == 'ONE-one')
+    {
+      $form->getObject()->$set_form_module_relation($related_object);
+    }
+    
+    //la clave foranea esta en los dos objetos
+    elseif ($foreign_type == 'ONE-ONE')
+    {
+      $form->getObject()->$set_form_module_relation($related_object);
+//      $related_object->$set_module_relation($form->getObject());  #NO 
FUNCIONA QUE SE SETEE LA CLAVE FORANEA AL EMBEDDED OBJECT
+    }
+    
+    //se usa tabla de referencia
+    elseif ($foreign_type == "many-many")
+    {
+      $reference_object = $form->getObject()->$foreign_alias;   //por ej 
Padrinos
+      $reference_object[count($reference_object)] = $related_object;
+    }
+    
+    //la clave foranea esta en el objeto embebido, x ej hijo (one-many)
+    else
+    {
+      $related_object->$set_module_relation($form->getObject());
+    }
+    
+    //unseteamos los campos
+    $object_form = new $widget_form($related_object);
+    $object_form->unsetFields($unset);
+    
+    //Empotramos el nuevo objeto en el contenedor
+    $form->getEmbeddedForm($embedded_name)->embedForm($num, $object_form);
+    
+    //Volvemos a empotrar el contenedor
+    $form->embedForm($embedded_name, $form->getEmbeddedForm($embedded_name));
+  }
+}

Modified: 
plugins/sfDoctrineAjaxFormPlugin/modules/ajax_form/actions/actions.class.php
===================================================================
--- 
plugins/sfDoctrineAjaxFormPlugin/modules/ajax_form/actions/actions.class.php    
    2010-04-14 16:09:57 UTC (rev 29149)
+++ 
plugins/sfDoctrineAjaxFormPlugin/modules/ajax_form/actions/actions.class.php    
    2010-04-14 16:31:48 UTC (rev 29150)
@@ -115,8 +115,9 @@
       $form = new $module_form(null);
     }
 
-    $form->embedFormDinamic($widget_name, $number, $id_related_object);
+    sfDoctrineAjaxFormPluginHelper::embedFormDinamic($form, $widget_name, 
$number, $id_related_object);
 
+
     return $this->renderPartial('ajax_form/add_embedded_form',array(
         'form' => $form,
         'widget_name' => $widget_name,

-- 
You received this message because you are subscribed to the Google Groups 
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/symfony-svn?hl=en.

Reply via email to