Explorar o código

Twig extension para device log

Guillermo Espinoza %!s(int64=7) %!d(string=hai) anos
pai
achega
5af388f4ab

+ 7 - 1
Resources/config/services.yml

@@ -10,4 +10,10 @@ services:
         tags:
             - { name: doctrine.event_listener, event: postPersist }
             - { name: doctrine.event_listener, event: preRemove }
-            - { name: doctrine.event_listener, event: postUpdate }
+            - { name: doctrine.event_listener, event: postUpdate }
+            
+    device.twig_device_log_extension:
+       class: DeviceBundle\Twig\DeviceLogExtension
+       arguments: ["@webservice", "%remote_device_url%", "%remote_device_log_url%"]
+       tags:
+           - { name: twig.extension }

+ 1 - 0
Resources/translations/DeviceBundle.es.yml

@@ -0,0 +1 @@
+show.label_device_log: Log Dispositivo

+ 6 - 0
Resources/views/show_device_log.html.twig

@@ -0,0 +1,6 @@
+{% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
+
+{% block field %}
+    {% set class = admin.class %}
+    <pre style="font-size: 10px;">{{ device_log(object) }}</pre>
+{% endblock %}

+ 92 - 0
Twig/DeviceLogExtension.php

@@ -0,0 +1,92 @@
+<?php
+
+namespace DeviceBundle\Twig;
+
+use WebserviceBundle\Services\Webservice;
+
+class DeviceLogExtension extends \Twig_Extension
+{
+
+    /**
+     * @var Webservice
+     */
+    protected $webservice;
+
+    /**
+     * @var string
+     */
+    protected $deviceGetUrl;
+
+    /**
+     * @var string
+     */
+    protected $deviceLogGetUrl;
+
+
+    /**
+     * @param Webservice $webservice
+     * @param string $deviceGetUrl
+     * @param string $deviceLogGetUrl
+     */
+    public function __construct(Webservice $webservice, $deviceGetUrl, $deviceLogGetUrl)
+    {
+        $this->webservice = $webservice;
+        $this->deviceGetUrl = $deviceGetUrl;
+        $this->deviceLogGetUrl = $deviceLogGetUrl;
+    }
+
+    /**
+     * @return array
+     */
+    public function getFunctions()
+    {
+        return array(
+            new \Twig_SimpleFunction('device_log', array($this, 'getDeviceLog')),
+        );
+    }
+
+    /**
+     * @param Entity $object
+     * @param int $limit
+     * @param int $offset
+     * 
+     * @return array
+     */
+    public function getDeviceLog($object, $limit = 50, $offset = 0)
+    {
+        $filters = array(
+            'deviceType' => get_class($object),
+            'deviceId' => $object->getId(),
+        );
+        
+        $device = $this->webservice->get($this->deviceGetUrl, $filters);
+        
+        $log = '';
+        if (count($device)) {
+            $filters = array(
+                'device' => $device[0]['id'],
+            );
+//            $order = array(
+//                'created' => 'DESC'
+//            );
+            $deviceLogs = $this->webservice->get($this->deviceLogGetUrl, $filters, array(), $limit, $offset);
+            
+            foreach ($deviceLogs as $deviceLog) {
+                unset($deviceLog['device']);
+                $created = new \DateTime($deviceLog['created']);
+                $log .= $created->format('d/m/Y H:i') . ' - ' . $deviceLog['message'] . PHP_EOL;
+            }
+        }
+
+        return $log;
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return 'device_log_extension';
+    }
+
+}