瀏覽代碼

Made all your proposed changes, although new Javascript works only in prod environment

Tomasz Ignatiuk 13 年之前
父節點
當前提交
227c89ca69

+ 9 - 2
Controller/HelperController.php

@@ -151,7 +151,7 @@ class HelperController extends Controller
      * Toggle boolean value of property in list
      * @return \Symfony\Component\HttpFoundation\Response
      */
-    public function setBooleanListFieldValueAction()
+    public function setObjectFieldValueAction()
     {
         $field      = $this->get('request')->query->get('field');
         $code       = $this->get('request')->query->get('code');
@@ -160,6 +160,12 @@ class HelperController extends Controller
         $value      = $this->get('request')->query->get('value');
 
         $admin  = $this->container->get('sonata.admin.pool')->getInstance($code);
+        
+        if (false === $admin->isGranted('EDIT')) {
+            $response = new Response(json_encode(array('status' => 'Error')));
+            return $response;
+        }
+               
         if ($uniqid) {
             $admin->setUniqid($uniqid);
         }
@@ -181,7 +187,8 @@ class HelperController extends Controller
         $extension = $twig->getExtension('sonata_admin');
         $extension->initRuntime($this->get('twig'));
         
-        $html = strip_tags($extension->renderListElement($object, $admin->getListFieldDescription($field)), '<a><img>');
+        //$html = strip_tags($extension->renderListElement($object, $admin->getListFieldDescription($field)), '<a><img>');
+        $html = $extension->renderListElement($object, $admin->getListFieldDescription($field));
 
         $response = new Response(json_encode(array('status' => 'OK', 'html' => $html)));
         return $response;

+ 2 - 2
Resources/config/routing/sonata_admin.xml

@@ -20,8 +20,8 @@
         <default key="_controller">SonataAdminBundle:Helper:getShortObjectDescription</default>
     </route>
 
-    <route id="sonata_admin_set_boolean_list_field_value" pattern="/core/set-boolean-list-field-value">
-        <default key="_controller">SonataAdminBundle:Helper:setBooleanListFieldValue</default>
+    <route id="sonata_admin_set_object_field_value" pattern="/core/set-object-field-value">
+        <default key="_controller">SonataAdminBundle:Helper:setObjectFieldValue</default>
     </route>
       
 </routes>

+ 5 - 11
Resources/public/base.js

@@ -116,32 +116,26 @@ var Admin = {
 }
 
 /**
- * toggle list boolean property state (value))
+ * change object field value
  * @param MouseEvent
  */
-function sonata_admin_set_boolean_list_field_value(event)
+function sonata_admin_set_object_field_value(event)
 {
     var targetElement = Admin.stopEvent(event);
     var a = jQuery(targetElement).closest('a');
 
-    var linkId = a.attr('id');
-    var aParams = linkId.split("-");
-
-
     jQuery.ajax({
         url: a.attr('href'),
         type: 'GET',
-        data: "field=" + aParams[0] + "&objectId=" + aParams[1] + "&value=" + aParams[2] + "&code=" + aParams[3] + "&uniqid=" + aParams[4],
         success: function(json) {
             var jObj = jQuery.parseJSON(json);
-
-            Admin.log('['+aParams[1]+']|set_boolean_list_field_value] setting new boolean value: ' + aParams[2] + ' of field: ' + aParams[0] + ' for object with id: ' + aParams[1]);
-  
+     
             if(jObj.status === "OK")
             {
                 var td = jQuery(a).parent();
                 td.children().remove();
-                td.html(jObj.html);
+                var result_td = jQuery(jObj.html).html();
+                td.html(result_td);
                 td.effect("highlight", {'color' : '#57A957'}, 2000);
             }
             else

+ 4 - 4
Resources/views/CRUD/list_boolean_edit.html.twig

@@ -16,8 +16,8 @@ file that was distributed with this source code.
 {% if admin.isGranted('EDIT') %}
     {% if value %}
         <a
-            href="{{ url('sonata_admin_set_boolean_list_field_value') }}" class="sonata-ba-action"
-            onclick="sonata_admin_set_boolean_list_field_value(event)" id="{{ field_description.name }}-{{ object.id }}-0-{{ admin.code(object) }}-{{ admin.uniqid(object) }}"
+            href="{{ url('sonata_admin_set_object_field_value', { 'field': field_description.name, 'objectId': object.id, 'value': 0, 'code': admin.code(object), 'uniqid': admin.uniqid(object) }) }}" class="sonata-ba-action"
+            onclick="sonata_admin_set_object_field_value(event)"
             >
             <img 
                 src="{{ asset('bundles/sonataadmin/famfamfam/accept.png') }}" 
@@ -26,8 +26,8 @@ file that was distributed with this source code.
         </a>
     {% else %}
         <a
-            href="{{ url('sonata_admin_set_boolean_list_field_value') }}"
-            onclick="sonata_admin_set_boolean_list_field_value(event)" id="{{ field_description.name }}-{{ object.id }}-1-{{ admin.code(object) }}-{{ admin.uniqid(object) }}"
+            href="{{ url('sonata_admin_set_object_field_value', { 'field': field_description.name, 'objectId': object.id, 'value': 1, 'code': admin.code(object), 'uniqid': admin.uniqid(object) }) }}" class="sonata-ba-action"
+            onclick="sonata_admin_set_object_field_value(event)"
             >
             <img 
                 src="{{ asset('bundles/sonataadmin/famfamfam/exclamation.png') }}"