Jelajahi Sumber

FD3-340 Refactory Traits. Se modificó sonata admin listener

Guillermo Espinoza 7 tahun lalu
induk
melakukan
fdfa90821f

+ 35 - 18
Entity/Traits/ExtraDataTrait.php

@@ -19,17 +19,19 @@ trait ExtraDataTrait
      * )
      */
     private $extraData;
+
     /**
      * @var array Pasa el extra data a un array.
      */
     private $_extraData_array = null;
 
+
     /**
      * @return string
      */
     public function getExtraData()
     {
-        return $this->extraData;
+        return is_null($this->extraData) ? "" : $this->extraData;
     }
 
     /**
@@ -40,7 +42,8 @@ trait ExtraDataTrait
     public function setExtraData($extraData = null)
     {
         $this->extraData = $extraData;
-        $this->_extraData_array = json_decode($this->extraData, true);
+        $this->_extraData_array = json_decode($this->getExtraData(), true);
+
         return $this;
     }
 
@@ -50,8 +53,9 @@ trait ExtraDataTrait
     public function jsonExtraData()
     {
         if ($this->_extraData_array == null) {
-            $this->_extraData_array = json_decode($this->extraData, true);
+            $this->_extraData_array = json_decode($this->getExtraData(), true);
         }
+
         return $this->_extraData_array;
     }
 
@@ -62,7 +66,7 @@ trait ExtraDataTrait
      */
     public function setJsonExtraData($extraData)
     {
-        return $this->setExtraData(json_encode($extraData));
+        return $this->setExtraData(json_encode($extraData, JSON_UNESCAPED_UNICODE));
     }
 
     /**
@@ -77,41 +81,54 @@ trait ExtraDataTrait
         if (isset($extraData[$key])) {
             $value = $extraData[$key];
         }
+
         return $value;
     }
 
-    //public function __call($name, $arguments)
-    //{
-    //    if (substr($name, 0, 3) == 'get') {
-    //        return $this->__get(substr($name, 3));
-    //    } else if (substr($name, 0, 3) == 'set') {
-    //        return $this->__set(substr($name, 3), $arguments);
-    //    } else {
-    //        return null;
-    //    }
-    //}
-
-    public function __isset($name){
+    /**
+    * @param string $name
+    *
+    * @return boolean
+    */
+    public function __isset($name)
+    {
         $extraData = $this->jsonExtraData();
+
         return isset($extraData[$name]);
     }
 
-    public function __unset($name){
-	$extra = $this->jsonExtraData();
+    /**
+    * @param string $name
+    */
+    public function __unset($name)
+    {
+        $extra = $this->jsonExtraData();
         unset($extra[$name]);
         $this->setJsonExtraData($extra);
     }
 
+    /**
+    * @param string $name
+    *
+    * @return mixed
+    */
     public function __get($name)
     {
         return $this->getData($name);
     }
 
+    /**
+    * @param string $name
+    * @param string $value
+    *
+    * @return ExtraDataTrait
+    */
     public function __set($name, $value)
     {
         $extra = $this->jsonExtraData();
         $extra[$name] = $value;
         $this->setJsonExtraData($extra);
+
         return $this;
     }
 }

+ 10 - 10
Entity/Traits/ExtraDataWithParentTrait.php

@@ -4,24 +4,24 @@ namespace ExtraDataBundle\Entity\Traits;
 
 trait ExtraDataWithParentTrait
 {
-    
+
     use ExtraDataTrait;
 
     /**
      * @param string $extraData
-     * 
+     *
      * @return $this
      */
     public function setExtraData($extraData = null)
     {
         $this->extraData = $this->extraDataDiff($extraData);
-        
+
         return $this;
     }
-    
+
     /**
      * @param string $extraData
-     * 
+     *
      * @return string
      */
     public function extraDataDiff($extraData = null)
@@ -30,13 +30,13 @@ trait ExtraDataWithParentTrait
         if (!is_null($this->parent)) {
             $parentExtraData = json_decode($this->parent->getExtraData(), true);
         }
-        
-        $extraDataArray = json_decode($extraData, true);
+
+        $extraDataArray = (array)json_decode($extraData, true);
         if (json_last_error() === JSON_ERROR_NONE) {
-            return json_encode(array_diff($extraDataArray, $parentExtraData));
+            return json_encode(array_diff($extraDataArray, $parentExtraData), JSON_UNESCAPED_UNICODE);
         }
-        
+
         return $extraData;
     }
-    
+
 }

+ 29 - 9
EventListener/SonataAdminConfigureListener.php

@@ -4,24 +4,35 @@ namespace ExtraDataBundle\EventListener;
 
 use Sonata\AdminBundle\Event\ConfigureEvent;
 use Symfony\Component\Form\Extension\Core\Type\TextareaType;
+use Symfony\Component\Translation\TranslatorInterface;
 
 class SonataAdminConfigureListener
 {
 
+    /**
+    * @var TranslatorInterface $translator
+    */
+    private $translator;
+
+
+    /**
+    * @param TranslatorInterface $translator
+    */
+    public function __construct(TranslatorInterface $translator)
+    {
+        $this->translator = $translator;
+    }
+
     /**
      * @param ConfigureEvent $event
      */
     public function addOptions(ConfigureEvent $event)
     {
-        if ($event->getMapper()->has('extraData')) {
-            $formMapper = $event->getMapper();
-            $formMapper->add('extraData', TextareaType::class, array(
-                    'required' => false,
-                    'help' => 'help.json_format',
-                ), array(
-                    'translation_domain' => 'ExtraDataBundle',
-                )
-            );
+        $formMapper = $event->getMapper();
+        if ($formMapper->has('extraData')) {
+            $formMapper->addHelp('extraData', $this->trans('help.json_format'));
+            $extraDataField = $formMapper->get('extraData');
+            $extraDataField->setRequired(false);
         }
     }
 
@@ -38,4 +49,13 @@ class SonataAdminConfigureListener
         }
     }
 
+    /**
+    * @param string $message
+    * @param array $options
+    */
+    public function trans($message, $options = [])
+    {
+        return $this->translator->trans($message, $options, 'ExtraDataBundle');
+    }
+
 }

+ 1 - 0
Resources/config/services.yml

@@ -1,6 +1,7 @@
 services:
     extra_data.sonata_admin_configure.listener:
        class: ExtraDataBundle\EventListener\SonataAdminConfigureListener
+       arguments: ["@translator"]
        tags:
            - { name: kernel.event_listener, event: sonata.admin.event.configure.form, method: addOptions }
            - { name: kernel.event_listener, event: sonata.admin.event.configure.show, method: addTemplate }