소스 검색

generate an uniqid per admin to ensure there is not clashing with nested admin

Thomas 14 년 전
부모
커밋
6d130eb0b6

+ 51 - 14
Admin/Admin.php

@@ -102,6 +102,14 @@ abstract class Admin extends ContainerAware
      */
     protected $parentFieldDescription;
 
+    /**
+     * The uniqid is used to avoid clashing with 2 admin related to the code
+     * ie: a Block linked to a Block
+     *
+     * @var
+     */
+    protected $uniqid;
+
     protected $loaded = array(
         'form_fields' => false,
         'form_groups' => false,
@@ -148,14 +156,19 @@ abstract class Admin extends ContainerAware
 
     }
 
-    public function __construct(ContainerInterface $container)
+    public function __construct($code, ContainerInterface $container)
     {
+        $this->code = $code;
+        
         $this->setContainer($container);
         $this->configure();
     }
 
     public function configure()
     {
+
+        $this->uniqid = uniqid();
+        
         if($this->parentAssociationMapping) {
             if(!isset($this->getClassMetaData()->associationMappings[$this->parentAssociationMapping])) {
                 throw new \RuntimeException(sprintf('The value set to `relatedReflectionProperty` refer to a non existant association', $this->relatedReflectionProperty));
@@ -554,8 +567,9 @@ abstract class Admin extends ContainerAware
      *
      * @return return a complete url
      */
-    public function generateUrl($name, $params = array())
+    public function generateUrl($name, array $params = array())
     {
+        
         // if the admin is a child we automatically append the parent's id
         if($this->isChild()) {
             $name = $this->baseCodeRoute.$name;
@@ -568,20 +582,27 @@ abstract class Admin extends ContainerAware
             }
 
             $params[$this->getParent()->getIdParameter()] = $this->container->get('request')->get($this->getParent()->getIdParameter());
+        }
 
-
+        // if the admin is linked to a FieldDescription (ie, embeded widget)
+        if($this->hasParentFieldDescription()) {
+            $params['uniqid']  = $this->getUniqid();
+            $params['code']    = $this->getCode();
+            $params['pcode']   = $this->getParentFieldDescription()->getAdmin()->getCode();
+            $params['puniqid'] = $this->getParentFieldDescription()->getAdmin()->getUniqid();
         }
 
+        if($name == 'update' || substr($name, -7) == '.update') {
+            $params['uniqid'] = $this->getUniqid();
+            $params['code']   = $this->getCode();
+        }
+        
         $url = $this->getUrl($name);
 
         if (!$url) {
             throw new \RuntimeException(sprintf('unable to find the url `%s`', $name));
         }
 
-        if (!is_array($params)) {
-            $params = array();
-        }
-
         return $this->container->get('router')->generate($url['name'], $params);
     }
 
@@ -623,7 +644,11 @@ abstract class Admin extends ContainerAware
      */
     public function getBaseForm($object, $options = array())
     {
-        return $this->getFormBuilder()->getBaseForm($object, array_merge($this->formOptions, $options));
+        return $this->getFormBuilder()->getBaseForm(
+            'object_'.$this->getUniqid(),
+            $object,
+            array_merge($this->formOptions, $options)
+        );
     }
 
     /**
@@ -806,6 +831,7 @@ abstract class Admin extends ContainerAware
     /**
      * return the master admin      
      *
+     * @return Admin the root admin class
      */
     public function getRoot()
     {
@@ -830,14 +856,9 @@ abstract class Admin extends ContainerAware
         return $this->baseControllerName;
     }
 
-    public function setConfigurationPool($configurationPool)
-    {
-        $this->configurationPool = $configurationPool;
-    }
-
     public function getConfigurationPool()
     {
-        return $this->configurationPool;
+        return $this->container->get('base_application.admin.pool');
     }
 
     public function setCode($code)
@@ -892,6 +913,12 @@ abstract class Admin extends ContainerAware
         return $this->parentFieldDescription;
     }
 
+    public function hasParentFieldDescription()
+    {
+
+        return $this->parentFieldDescription instanceof FieldDescription;
+    }
+
     public function setSubject($subject)
     {
         $this->subject = $subject;
@@ -1075,4 +1102,14 @@ abstract class Admin extends ContainerAware
     {
         return count($this->children) > 0;
     }
+
+    public function setUniqid($uniqid)
+    {
+        $this->uniqid = $uniqid;
+    }
+
+    public function getUniqid()
+    {
+        return $this->uniqid;
+    }
 }

+ 1 - 4
Admin/Pool.php

@@ -147,9 +147,7 @@ class Pool
     {
         $class = $configuration['class'];
         
-        $instance = new $class($this->getContainer());
-        $instance->setConfigurationPool($this);
-        $instance->setCode($code);
+        $instance = new $class($code, $this->getContainer());
         $instance->setLabel($configuration['label']);
 
         if(isset($configuration['children'])) {
@@ -159,7 +157,6 @@ class Pool
         }
 
         return $instance;
-
     }
 
     /**

+ 2 - 2
Builder/FormBuilder.php

@@ -466,9 +466,9 @@ class FormBuilder implements FormBuilderInterface
         return $this->formFieldClasses;
     }
 
-    public function getBaseForm($object, array $options = array())
+    public function getBaseForm($name, $object, array $options = array())
     {
-        return new Form('object', array_merge(array(
+        return new Form($name, array_merge(array(
             'data'      => $object,
             'validator' => $this->getValidator(),
             'context'   => $this->getFormContext(),

+ 1 - 1
Builder/FormBuilderInterface.php

@@ -28,5 +28,5 @@ interface FormBuilderInterface
 
     function fixFieldDescription(Admin $admin, FieldDescription $fieldDescription, array $options = array());
 
-    function getBaseForm($object, array $options = array());
+    function getBaseForm($name, $object, array $options = array());
 }

+ 5 - 2
Controller/CRUDController.php

@@ -62,6 +62,9 @@ class CRUDController extends Controller
             throw new \RuntimeException(sprintf('Unable to find the admin class related to the current controller (%s)', get_class($this)));
         }
 
+        if($this->container->get('request')->get('uniqid')) {
+            $this->admin->setUniqid($this->container->get('request')->get('uniqid'));
+        }
     }
 
     /**
@@ -191,9 +194,9 @@ class CRUDController extends Controller
             $action = 'create';
         }
 
-        $form = $this->admin->getForm($object);
-
         $this->admin->setSubject($object);
+        
+        $form = $this->admin->getForm($object);
 
         $form->bind($this->get('request'));
 

+ 13 - 5
Controller/CoreController.php

@@ -54,6 +54,10 @@ class CoreController extends Controller
            ->get('base_application.admin.pool')
            ->getInstance($code);
 
+        if($this->container->get('request')->get('uniqid')) {
+            $admin->setUniqid($this->container->get('request')->get('uniqid'));
+        }
+
         if (is_numeric($this->get('request')->get('object_id'))) {
             $object = $admin->getObject($this->get('request')->get('object_id'));
         } else {
@@ -155,14 +159,18 @@ class CoreController extends Controller
         return $this->createResponse($extension->renderFormElement($fieldDescription, $form, $form->getData()));
     }
 
-    public function getShortObjectDescriptionAction()
+    public function getShortObjectDescriptionAction($code = null, $objectId = null, $uniqid = null)
     {
 
-        $code = $this->get('request')->query->get('code');
-        $objectId = $this->get('request')->query->get('objectId');
-        
-        $admin  = $this->container->get('base_application.admin.pool')->getInstance($code);
+        $code       = $code     ?: $this->get('request')->query->get('code');
+        $objectId   = $objectId ?: $this->get('request')->query->get('objectId');
+        $uniqid     = $uniqid   ?: $this->get('request')->get('uniqid');
 
+        $admin  = $this->container->get('base_application.admin.pool')->getInstance($code);
+        if($uniqid) {
+            $admin->setUniqid($uniqid);
+        }
+        
         $object = $admin->getObject($objectId);
 
         if (!$object) {

+ 1 - 1
Form/FormMapper.php

@@ -43,7 +43,7 @@ class FormMapper
 
     public function add($name, array $fieldOptions = array(), array $fieldDescriptionOptions = array())
     {
-
+        
         $field = false;
         if ($name instanceof FieldDescription) {
 

+ 1 - 1
Resources/views/CRUD/base_inline_edit_field.twig.html

@@ -9,7 +9,7 @@ file that was distributed with this source code.
 
 #}
 
-<div id="sonata-ba-field-container-{{ admin.code }}-{{ field_element.id}}" class="sonata-ba-field sonata-ba-field-{{ edit }}-{{ inline }} {% if field_element.haserrors %}sonata-ba-field-error{% endif %}">
+<div id="sonata-ba-field-container-{{ admin.uniqid }}-{{ field_element.id}}" class="sonata-ba-field sonata-ba-field-{{ edit }}-{{ inline }} {% if field_element.haserrors %}sonata-ba-field-error{% endif %}">
     {% block field %}{{ form_field(field_element) }}{% endblock %}
 
     <div class="sonata-ba-field-error-messages">

+ 1 - 1
Resources/views/CRUD/base_standard_edit_field.twig.html

@@ -9,7 +9,7 @@ file that was distributed with this source code.
 
 #}
 
-<div id="sonata-ba-field-container-{{ admin.code }}-{{ field_element.id}}">
+<div id="sonata-ba-field-container-{{ admin.uniqid }}-{{ field_element.id}}">
     {% block label %}{{ form_label(field_element) }} <br />{% endblock %}
 
     <div class="sonata-ba-field sonata-ba-field-{{ edit }}-{{ inline }} {% if field_element.haserrors %}sonata-ba-field-error{% endif %}">

+ 50 - 49
Resources/views/CRUD/edit_many_association_script.twig.html

@@ -26,8 +26,8 @@ This code manage the many-to-[one|many] association field popup
         - if the parent has an objectId defined then the related input get updated
         - if the parent has NO object then an ajax request is made to refresh the popup
     #}
-    var field_dialog_form_list_link_{{ admin.code }}_{{ field_element.id }} = function(event) {
-        initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+    var field_dialog_form_list_link_{{ admin.uniqid }}_{{ field_element.id }} = function(event) {
+        initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
         
         event.preventDefault();
 
@@ -35,12 +35,12 @@ This code manage the many-to-[one|many] association field popup
 
         // the user does does click on a row column
         if(element.length == 0) {
-            // make a recurive call (ie: reset the filter)
+            // make a recursive call (ie: reset the filter)
             jQuery.ajax({
                 type: 'GET',
                 url: jQuery(this).attr('href'),
                 success: function(html) {
-                   field_dialog_{{ admin.code }}_{{ field_element.id }}.html(html);
+                   field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html(html);
                 }
             });
 
@@ -50,20 +50,21 @@ This code manage the many-to-[one|many] association field popup
         jQuery('#{{ field_element.id}}').val(element.attr('objectId'));
         jQuery('#{{ field_element.id}}').change();
 
-        field_dialog_{{ admin.code }}_{{ field_element.id }}.dialog('close');
+        field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.dialog('close');
     }
 
 
     // handle the add link
-    var field_dialog_form_list_{{ admin.code }}_{{ field_element.id }} = function(event) {
+    var field_dialog_form_list_{{ admin.uniqid }}_{{ field_element.id }} = function(event) {
 
-        initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+        initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
 
         event.preventDefault();
 
         var a = jQuery(this);
 
-        field_dialog_{{ admin.code }}_{{ field_element.id }}.html('');
+        field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html('');
+
 
         // retrieve the form element from the related admin generator
         jQuery.ajax({
@@ -71,18 +72,18 @@ This code manage the many-to-[one|many] association field popup
             success: function(html) {
 
                 // populate the popup container
-                field_dialog_{{ admin.code }}_{{ field_element.id }}.html(html);
+                field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html(html);
 
                 // capture the submit event to make an ajax call, ie : POST data to the
                 // related create admin
 
                 // make sure we have a clean state
-                jQuery('a', field_dialog_{{ admin.code }}_{{ field_element.id }}).die('click');
-                jQuery('form', field_dialog_{{ admin.code }}_{{ field_element.id }}).die('submit');
+                jQuery('a', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).die('click');
+                jQuery('form', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).die('submit');
 
                 // add live event
-                jQuery('a', field_dialog_{{ admin.code }}_{{ field_element.id }}).live('click', field_dialog_form_list_link_{{ admin.code }}_{{ field_element.id }});
-                jQuery('form', field_dialog_{{ admin.code }}_{{ field_element.id }}).live('submit', function(event) {
+                jQuery('a', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).live('click', field_dialog_form_list_link_{{ admin.uniqid }}_{{ field_element.id }});
+                jQuery('form', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).live('submit', function(event) {
                     event.preventDefault();
 
                     var form = jQuery(this);
@@ -92,13 +93,13 @@ This code manage the many-to-[one|many] association field popup
                         url: form.attr('action'),
                         data: form.serializeArray(),
                         success: function(html) {
-                           field_dialog_{{ admin.code }}_{{ field_element.id }}.html(html);
+                           field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html(html);
                         }
                     });
                 });
 
                 // open the dialog in modal mode
-                field_dialog_{{ admin.code }}_{{ field_element.id }}.dialog({
+                field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.dialog({
                     height: 'auto',
                     width: 980,
                     modal: true,
@@ -111,14 +112,14 @@ This code manage the many-to-[one|many] association field popup
     };
 
     // handle the add link
-    var field_dialog_form_add_{{ admin.code }}_{{ field_element.id }} = function(event) {
-        initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+    var field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }} = function(event) {
+        initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
 
         event.preventDefault();
 
         var a = jQuery(this);
 
-        field_dialog_{{ admin.code }}_{{ field_element.id }}.html('');
+        field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html('');
 
         // retrieve the form element from the related admin generator
         jQuery.ajax({
@@ -126,14 +127,14 @@ This code manage the many-to-[one|many] association field popup
             success: function(html) {
                 
                 // populate the popup container
-                field_dialog_{{ admin.code }}_{{ field_element.id }}.html(html);
+                field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html(html);
 
                 // capture the submit event to make an ajax call, ie : POST data to the
                 // related create admin
-                jQuery('form', field_dialog_{{ admin.code }}_{{ field_element.id }}).submit(field_dialog_form_action_{{ admin.code }}_{{ field_element.id }});
+                jQuery('form', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).submit(field_dialog_form_action_{{ admin.uniqid }}_{{ field_element.id }});
 
                 // open the dialog in modal mode
-                field_dialog_{{ admin.code }}_{{ field_element.id }}.dialog({
+                field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.dialog({
                     height: 'auto',
                     width: 650,
                     modal: true,
@@ -145,9 +146,9 @@ This code manage the many-to-[one|many] association field popup
     };
     
     // handle the post data
-    var field_dialog_form_action_{{ admin.code }}_{{ field_element.id }} = function(event) {
+    var field_dialog_form_action_{{ admin.uniqid }}_{{ field_element.id }} = function(event) {
 
-        initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+        initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
 
         event.preventDefault();
 
@@ -163,7 +164,7 @@ This code manage the many-to-[one|many] association field popup
                 // if the crud action return ok, then the element has been added
                 // so the widget container must be refresh with the last option available
                 if (json.result == 'ok') {
-                    field_dialog_{{ admin.code }}_{{ field_element.id }}.dialog('close');
+                    field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.dialog('close');
 
                     {% if field_description.options.edit == 'list' %}
                         {#
@@ -178,14 +179,15 @@ This code manage the many-to-[one|many] association field popup
                         // reload the form element
                         jQuery.ajax({
                             url: '{{ url('sonata_base_application_retrieve_form_element', {
-                                'code':         admin.root.code,
-                                'elementId':   field_element.id,
-                                'objectId':    admin.root.subject.id,
+                                'elementId': field_element.id,
+                                'objectId':  admin.root.subject.id,
+                                'uniqid':    admin.root.uniqid,
+                                'code':      admin.root.code
                             }) }}',
-                            data: jQuery('#field_widget_{{ admin.code }}_{{ field_element.id}}').closest('form').serializeArray(),
+                            data: jQuery('#field_widget_{{ admin.uniqid }}_{{ field_element.id}}').closest('form').serializeArray(),
                             type: 'POST',
                             success: function(html) {
-                                jQuery('#field_widget_{{ admin.code }}_{{ field_element.id}}').html(html);
+                                jQuery('#field_widget_{{ admin.uniqid }}_{{ field_element.id}}').html(html);
                             }
                         });
 
@@ -195,27 +197,27 @@ This code manage the many-to-[one|many] association field popup
                 }
 
                 // otherwise, display form error
-                field_dialog_{{ admin.code }}_{{ field_element.id }}.html(html);
+                field_dialog_{{ admin.uniqid }}_{{ field_element.id }}.html(html);
 
-                BaseApplication.add_pretty_errors(field_dialog_{{ admin.code }}_{{ field_element.id }});
+                BaseApplication.add_pretty_errors(field_dialog_{{ admin.uniqid }}_{{ field_element.id }});
 
                 // reattach the event
-                jQuery('form', field_dialog_{{ admin.code }}_{{ field_element.id }}).submit(field_dialog_form_action_{{ admin.code }}_{{ field_element.id }});
+                jQuery('form', field_dialog_{{ admin.uniqid }}_{{ field_element.id }}).submit(field_dialog_form_action_{{ admin.uniqid }}_{{ field_element.id }});
             }
         });
 
         return false;
     }
 
-    var field_dialog_{{ admin.code }}_{{ field_element.id }} = false;
+    var field_dialog_{{ admin.uniqid }}_{{ field_element.id }} = false;
 
-    function initialize_popup_{{ admin.code }}_{{ field_element.id }}() {
+    function initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}() {
         // initialize component
-        if(!field_dialog_{{ admin.code }}_{{ field_element.id }}) {
-            field_dialog_{{ admin.code }}_{{ field_element.id }} = jQuery("#field_dialog_{{ admin.code }}_{{ field_element.id }}");
+        if(!field_dialog_{{ admin.uniqid }}_{{ field_element.id }}) {
+            field_dialog_{{ admin.uniqid }}_{{ field_element.id }} = jQuery("#field_dialog_{{ admin.uniqid }}_{{ field_element.id }}");
 
             // move the dialog as a child of the root element, nested form breaks html ...
-            jQuery(document).append(field_dialog_{{ admin.code }}_{{ field_element.id }});
+            jQuery(document).append(field_dialog_{{ admin.uniqid }}_{{ field_element.id }});
         }
     }
 
@@ -224,19 +226,17 @@ This code manage the many-to-[one|many] association field popup
     #}
     // this function initialize the popup
     // this can be only done this way has popup can be cascaded
-    function start_field_dialog_form_add_{{ admin.code }}_{{ field_element.id }}(event) {
+    function start_field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }}(event) {
         event.preventDefault();
 
         // remove the html event a
         var a = jQuery(event.target).closest('a');
         a.attr('onclick', '');
 
-        console.log('click');
-
-        initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+        initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
 
        // add the jQuery event to the a element
-        a.click(field_dialog_form_add_{{ admin.code }}_{{ field_element.id }});
+        a.click(field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }});
 
         // trigger the event
         a.trigger('click');
@@ -244,7 +244,7 @@ This code manage the many-to-[one|many] association field popup
         return false;
     }
 
-    BaseApplication.add_pretty_errors(field_dialog_{{ admin.code }}_{{ field_element.id }});
+    BaseApplication.add_pretty_errors(field_dialog_{{ admin.uniqid }}_{{ field_element.id }});
 
 
     {% if field_description.options.edit == 'list' %}
@@ -253,17 +253,17 @@ This code manage the many-to-[one|many] association field popup
         #}
         // this function initialize the popup
         // this can be only done this way has popup can be cascaded
-        function start_field_dialog_form_list_{{ admin.code }}_{{ field_element.id }}(event) {
+        function start_field_dialog_form_list_{{ admin.uniqid }}_{{ field_element.id }}(event) {
             event.preventDefault();
 
             // remove the html event a
             var a = jQuery(event.target).closest('a');
             a.attr('onclick', '');
 
-            initialize_popup_{{ admin.code }}_{{ field_element.id }}();
+            initialize_popup_{{ admin.uniqid }}_{{ field_element.id }}();
 
             // add the jQuery event to the a element
-            a.click(field_dialog_form_list_{{ admin.code }}_{{ field_element.id }});
+            a.click(field_dialog_form_list_{{ admin.uniqid }}_{{ field_element.id }});
 
             // trigger the event
             a.trigger('click');
@@ -280,11 +280,12 @@ This code manage the many-to-[one|many] association field popup
             jQuery.ajax({
                 type: 'GET',
                 url: '{{ url('sonata_base_application_short_object_information', {
-                    'code': field_description.associationadmin.code,
-                    'objectId': 'OBJECT_ID'
+                    'objectId': 'OBJECT_ID',
+                    'uniqid': field_description.associationadmin.uniqid,
+                    'code': field_description.associationadmin.code
                 })}}'.replace('OBJECT_ID', jQuery(this).val()),
                 success: function(html) {
-                    jQuery('#field_widget_{{ admin.code }}_{{ field_element.id}}').html(html);
+                    jQuery('#field_widget_{{ admin.uniqid }}_{{ field_element.id}}').html(html);
                 }
             });
         });

+ 10 - 5
Resources/views/CRUD/edit_many_to_many.twig.html

@@ -12,16 +12,21 @@ file that was distributed with this source code.
 {% extends base_template %}
 
 {% block field %}
-    <div id="field_container_{{ admin.code }}_{{ field_element.id}}">
-        <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+    <div id="field_container_{{ admin.uniqid }}_{{ field_element.id}}">
+        <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
             {{ form_field(field_element) }}
         </span>
         
-        <span id="field_actions_{{ admin.code }}_{{ field_element.id}}" >
-            <a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ admin.code }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
+        <span id="field_actions_{{ admin.uniqid }}_{{ field_element.id}}" >
+            <a
+                href="{{ field_description.associationadmin.generateUrl('create') }}"
+                onclick="start_field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }}(event)"
+                class="action">
+                    <img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" />
+            </a>
         </span>
         
-        <div style="display: hidden" id="field_dialog_{{ admin.code }}_{{ field_element.id }}">
+        <div style="display: none" id="field_dialog_{{ admin.uniqid }}_{{ field_element.id }}">
 
         </div>
     </div>

+ 10 - 8
Resources/views/CRUD/edit_many_to_one.twig.html

@@ -19,14 +19,15 @@ file that was distributed with this source code.
 
     {% else %}
 
-        <div id="field_container_{{ admin.code }}_{{ field_element.id}}">
+        <div id="field_container_{{ admin.uniqid }}_{{ field_element.id}}">
 
             {% if field_description.options.edit == 'list' %}
-                <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+                <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
                     {% if value.id %}
                         {% render 'SonataBaseApplicationBundle:Core:getShortObjectDescription' with {
                             'code': field_description.associationadmin.code,
-                            'objectId': value.id
+                            'objectId': value.id,
+                            'uniqid':  field_description.associationadmin.uniqid
                         }%}
                     {% endif %}
                 </span>
@@ -34,20 +35,21 @@ file that was distributed with this source code.
                     {{ form_field(field_element) }}
                 </span>
             {% else %}
-                <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+                <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
                     {{ form_field(field_element) }}
                 </span>
             {% endif %}
-            <span id="field_actions_{{ admin.code }}_{{ field_element.id}}" >
+            
+            <span id="field_actions_{{ admin.uniqid }}_{{ field_element.id}}" >
 
                 {% if field_description.options.edit == 'list' %}
-                    <a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ admin.code }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
+                    <a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ admin.uniqid }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
                 {% endif %}
 
-                <a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ admin.code }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
+                <a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
             </span>
 
-            <div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ admin.code }}_{{ field_element.id }}">
+            <div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ admin.uniqid }}_{{ field_element.id }}">
 
             </div>
         </div>

+ 11 - 10
Resources/views/CRUD/edit_one_association_script.twig.html

@@ -23,7 +23,7 @@ This code manage the one-to-many association field popup
     <!-- edit one association -->
 
     // handle the add link
-    var field_add_{{ admin.code }}_{{ field_element.id }} = function(event) {
+    var field_add_{{ admin.uniqid }}_{{ field_element.id }} = function(event) {
 
         event.preventDefault();
 
@@ -32,37 +32,38 @@ This code manage the one-to-many association field popup
         // the ajax post
         jQuery.ajax({
             url: '{{ url('sonata_base_application_append_form_element', {
-                'code':         admin.root.code,
-                'elementId':   field_element.id,
-                'objectId':    admin.root.subject.id,
+                'code': admin.root.code,
+                'elementId': field_element.id,
+                'objectId': admin.root.subject.id,
+                'uniqid': admin.root.uniqid
             }) }}',
             type: "POST",
             data: form.serializeArray(),
             success: function(html) {
-                jQuery('#sonata-ba-field-container-{{ admin.code }}-{{ field_element.id}}').replaceWith(html);
+                jQuery('#sonata-ba-field-container-{{ admin.uniqid }}-{{ field_element.id}}').replaceWith(html);
             }
         });
 
         return false;
     };
 
-    var field_widget_{{ admin.code }}_{{ field_element.id }} = false;
+    var field_widget_{{ admin.uniqid }}_{{ field_element.id }} = false;
 
-    
     // this function initialize the popup
     // this can be only done this way has popup can be cascaded
-    function start_field_retrieve_{{ admin.code }}_{{ field_element.id }}(event) {
+    function start_field_retrieve_{{ admin.uniqid }}_{{ field_element.id }}(event) {
         event.preventDefault();
 
+        alert('jer');
         // remove the html event a
         var a = jQuery(event.target).closest('a');
         a.attr('onclick', '');
 
         // initialize component
-        field_widget_{{ admin.code }}_{{ field_element.id }} = jQuery("#field_widget_{{ admin.code }}_{{ field_element.id}}");
+        field_widget_{{ admin.uniqid }}_{{ field_element.id }} = jQuery("#field_widget_{{ admin.uniqid }}_{{ field_element.id}}");
 
         // add the jQuery event to the a element
-        a.click(field_add_{{ admin.code }}_{{ field_element.id }});
+        a.click(field_add_{{ admin.uniqid }}_{{ field_element.id }});
 
         // trigger the event
         a.trigger('click');

+ 30 - 17
Resources/views/CRUD/edit_one_to_many.twig.html

@@ -11,12 +11,9 @@ file that was distributed with this source code.
 
 {% extends base_template %}
 
-
 {% block field %}
-
-
-    <div id="field_container_{{ admin.code }}_{{ field_element.id}}">
-        <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+    <div id="field_container_{{ admin.uniqid }}_{{ field_element.id}}">
+        <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
             {% if field_description.options.edit == 'inline' %}
                 {% if inline == 'table' %}
                     <table>
@@ -62,21 +59,37 @@ file that was distributed with this source code.
 
         </span>
 
-        <span id="field_actions_{{ admin.code }}_{{ field_element.id}}" >
-            <a
-                href="{{ field_description.associationadmin.generateUrl('create') }}"
-                onclick="start_field_retrieve_{{ admin.code }}_{{ field_element.id }}(event)"
-                class="action">
-                <img
-                    src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}"
-                    alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}"
-                 />
-            </a>
-        </span>
-
         {% if field_description.options.edit == 'inline' %}
+            <span id="field_actions_{{ admin.uniqid }}_{{ field_element.id}}" >
+                <a
+                    href="{{ field_description.associationadmin.generateUrl('create') }}"
+                    onclick="start_field_retrieve_{{ admin.uniqid }}_{{ field_element.id }}(event)"
+                    class="action">
+                    <img
+                        src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}"
+                        alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}"
+                     />
+                </a>
+            </span>
+        
             {% include 'SonataBaseApplicationBundle:CRUD:edit_one_association_script.twig.html' %}
         {% else %}
+            <span id="field_actions_{{ admin.uniqid }}_{{ field_element.id}}" >
+                <a
+                    href="{{ field_description.associationadmin.generateUrl('create') }}"
+                    onclick="start_field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }}(event)"
+                    class="action">
+                    <img
+                        src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}"
+                        alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}"
+                     />
+                </a>
+            </span>
+
+            <div style="display: none" id="field_dialog_{{ admin.uniqid }}_{{ field_element.id }}">
+
+            </div>
+        
             {% include 'SonataBaseApplicationBundle:CRUD:edit_many_association_script.twig.html' %}
         {% endif %}
     </div>

+ 9 - 8
Resources/views/CRUD/edit_one_to_one.twig.html

@@ -19,14 +19,15 @@ file that was distributed with this source code.
 
     {% else %}
 
-        <div id="field_container_{{ admin.code }}_{{ field_element.id}}">
+        <div id="field_container_{{ admin.uniqid }}_{{ field_element.id}}">
 
             {% if field_description.options.edit == 'list' %}
-                <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+                <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
                     {% if value.id %}
                         {% render 'SonataBaseApplicationBundle:Core:getShortObjectDescription' with {
                             'code': field_description.associationadmin.code,
-                            'objectId': value.id
+                            'objectId': value.id,
+                            'uniqid':  field_description.associationadmin.uniqid
                         }%}
                     {% endif %}
                 </span>
@@ -34,20 +35,20 @@ file that was distributed with this source code.
                     {{ form_field(field_element) }}
                 </span>
             {% else %}
-                <span id="field_widget_{{ admin.code }}_{{ field_element.id}}" >
+                <span id="field_widget_{{ admin.uniqid }}_{{ field_element.id}}" >
                     {{ form_field(field_element) }}
                 </span>
             {% endif %}
-            <span id="field_actions_{{ admin.code }}_{{ field_element.id}}" >
+            <span id="field_actions_{{ admin.uniqid }}_{{ field_element.id}}" >
 
                 {% if field_description.options.edit == 'list' %}
-                    <a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ admin.code }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
+                    <a href="{{ field_description.associationadmin.generateUrl('list') }}" onclick="start_field_dialog_form_list_{{ admin.uniqid }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/application_view_list.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
                 {% endif %}
 
-                <a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ admin.code }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
+                <a href="{{ field_description.associationadmin.generateUrl('create') }}" onclick="start_field_dialog_form_add_{{ admin.uniqid }}_{{ field_element.id }}(event)" class="action"><img src="{{ asset('bundles/sonatabaseapplication/famfamfam/add.png') }}" alt="{% trans 'btn_add' from 'BaseApplicationBundle' %}" /></a>
             </span>
 
-            <div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ admin.code }}_{{ field_element.id }}">
+            <div class="container sonata-ba-modal sonata-ba-modal-edit-one-to-one" style="display: none" id="field_dialog_{{ admin.uniqid }}_{{ field_element.id }}">
 
             </div>
         </div>

+ 0 - 1
Resources/views/CRUD/list_one_to_many.twig.html

@@ -8,4 +8,3 @@ For the full copyright and license information, please view the LICENSE
 file that was distributed with this source code.
 
 #}
-

+ 0 - 1
Twig/Extension/BaseApplicationExtension.php

@@ -176,7 +176,6 @@ class BaseApplicationExtension extends \Twig_Extension
             $base_template = sprintf('SonataBaseApplicationBundle:CRUD:base_%s_edit_field.twig.html', $params['edit']);
         }
 
-
         $template = $this->environment->loadTemplate($fieldDescription->getTemplate());
         
         return $this->output($fieldDescription, $template->render(array_merge($params, array(