浏览代码

FD3-576 se agrega pool y subnet en listado de leases

Espinoza Guillermo 7 年之前
父节点
当前提交
5c1b387d06

+ 6 - 6
composer.lock

@@ -1457,7 +1457,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/BaseAdmin.git",
-                "reference": "329e1ae099e739ba2770f4c3029c02b139dece91"
+                "reference": "e14efccf1d5598768f78f454924fd5a5a71bdf0c"
             },
             "type": "library",
             "autoload": {
@@ -1472,7 +1472,7 @@
                 "bootstrap",
                 "sonata"
             ],
-            "time": "2018-06-26T14:21:26+00:00"
+            "time": "2018-07-03T16:29:14+00:00"
         },
         {
             "name": "ik/device-bundle",
@@ -1549,7 +1549,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/BaseOAuthClientBundle.git",
-                "reference": "b554fd50c877a46b9f864be768493710a8f25f27"
+                "reference": "2373f6de17349f1c99a768c4c3a0803df2cc08ca"
             },
             "require": {
                 "ext-curl": "*",
@@ -1568,7 +1568,7 @@
                 "bundle",
                 "oauth"
             ],
-            "time": "2018-07-02T17:29:09+00:00"
+            "time": "2018-07-03T12:02:21+00:00"
         },
         {
             "name": "ik/owner-voter-bundle",
@@ -1625,7 +1625,7 @@
             "source": {
                 "type": "git",
                 "url": "ssh://git@200.50.168.30:222/VendorSoftwareFlowdat3/Webservice.git",
-                "reference": "2051a376f191c1b72f3a8f2feb875dca03de77fc"
+                "reference": "4fb907804f45b182cda4c48551adf5240386111a"
             },
             "require": {
                 "ext-curl": "*",
@@ -1638,7 +1638,7 @@
                 }
             },
             "description": "The Flowdat3 Webservice Rest",
-            "time": "2018-06-07T18:40:05+00:00"
+            "time": "2018-07-03T12:59:44+00:00"
         },
         {
             "name": "ik/workflow-bundle",

+ 5 - 0
src/IPv4Bundle/Resources/config/services.yml

@@ -26,3 +26,8 @@ services:
         calls:
             - [setTranslationDomain, [IPv4Bundle]]
         public: true
+        
+    pool_ipv4_service:
+        class: IPv4Bundle\Services\PoolService
+        arguments: [ '@doctrine.orm.entity_manager' ]
+        public: true

+ 50 - 0
src/IPv4Bundle/Services/PoolService.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace IPv4Bundle\Services;
+
+use Doctrine\ORM\EntityManager;
+use Doctrine\ORM\EntityRepository;
+use IPv4Bundle\Entity\Pool;
+use KeaBundle\Entity\Lease4;
+
+class PoolService
+{
+    
+    /**
+     * @var EntityRepository
+     */
+    private $poolRepository;
+    
+    
+    /**
+     * @param EntityManager $em
+     */
+    public function __construct(EntityManager $em)
+    {
+        $this->poolRepository = $em->getRepository(Pool::class);
+    }
+    
+    /**
+     * Retorna el primer pool donde se encuentra el lease
+     *
+     * @param Lease4 $lease
+     *
+     * @return Pool
+     */
+    public function getPoolFromLease(Lease4 $lease)
+    {
+        $address = ip2long($lease->getAddress());
+        $pools = $this->poolRepository->findAll();
+        foreach ($pools as $pool) {
+            $firstIp = ip2long($pool->getFirstIp());
+            $lastIp =  ip2long($pool->getLastIp());
+            
+            if ($firstIp <= $address && $address <= $lastIp) {
+                return $pool;
+            }
+        }
+        
+        return null;
+    }
+    
+}

+ 24 - 1
src/KeaBundle/Admin/Lease4Admin.php

@@ -3,6 +3,9 @@
 namespace KeaBundle\Admin;
 
 use Base\AdminBundle\Admin\BaseAdmin;
+use HostBundle\Entity\Host;
+use IPv4Bundle\Entity\Pool;
+use IPv4Bundle\Entity\SubNet;
 use Sonata\AdminBundle\Datagrid\DatagridMapper;
 use Sonata\AdminBundle\Datagrid\ListMapper;
 use Sonata\AdminBundle\Form\FormMapper;
@@ -52,8 +55,28 @@ class Lease4Admin extends BaseAdmin
     {
         $listMapper
             ->add('address')
-            ->add('hwaddr')
+            ->add('hwaddr', null, [
+                'template' => 'BaseAdminBundle:CRUD:show_entity.html.twig',
+                'data' => [
+                    'class' => Host::class,
+                    'field' => 'mac'
+                ],
+            ])
             ->add('client_id')
+            ->add('pool', null, [
+                'template' => 'KeaBundle:CRUD:lease_pool_ipv4.html.twig',
+                'data' => [
+                    'class' => Pool::class,
+                    'field' => 'name',
+                ],
+            ])
+            ->add('subnet', null, [
+                'template' => 'KeaBundle:CRUD:lease_subnet_ipv4.html.twig',
+                'data' => [
+                    'class' => SubNet::class,
+                    'field' => 'address',
+                ],
+            ])
             ->add('valid_lifetime')
             ->add('expire')
             ->add('_action', null, array(

+ 6 - 0
src/KeaBundle/Resources/config/services.yml

@@ -20,3 +20,9 @@ services:
         calls:
             - [setTranslationDomain, [KeaBundle]]
         public: true
+
+    kea.twig_ipv4_pool_extension:
+       class: KeaBundle\Twig\PoolIPv4Extension
+       arguments: [ '@pool_ipv4_service' ]
+       tags:
+           - { name: twig.extension }

+ 2 - 0
src/KeaBundle/Resources/translations/KeaBundle.es.yml

@@ -28,6 +28,8 @@ list:
     label_client_id: Client id
     label_valid_lifetime: Valid lifetime
     label_expire: Expire
+    label_pool: Pool
+    label_subnet: Subnet
 
 show:
     label_description: Descripción

+ 4 - 0
src/KeaBundle/Resources/views/CRUD/lease_pool_ipv4.html.twig

@@ -0,0 +1,4 @@
+{% extends 'BaseAdminBundle:CRUD:show_entity.html.twig' %}
+
+{% set pool = pool_ipv4(object) %}
+{% set value = pool is not null ? pool.getName() : '' %}

+ 4 - 0
src/KeaBundle/Resources/views/CRUD/lease_subnet_ipv4.html.twig

@@ -0,0 +1,4 @@
+{% extends 'BaseAdminBundle:CRUD:show_entity.html.twig' %}
+
+{% set pool = pool_ipv4(object) %}
+{% set value = pool is not null ? pool.getSubNet().getAddress() : '' %}

+ 53 - 0
src/KeaBundle/Twig/PoolIPv4Extension.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace KeaBundle\Twig;
+
+use IPv4Bundle\Services\PoolService;
+use KeaBundle\Entity\Lease4;
+
+class PoolIPv4Extension extends \Twig_Extension
+{
+
+    /**
+     * @var PoolService
+     */
+    private $poolService;
+
+
+    /**
+     * @param PoolService $poolService
+     */
+    public function __construct(PoolService $poolService)
+    {
+        $this->poolService = $poolService;
+    }
+
+    /**
+     * @return array
+     */
+    public function getFunctions()
+    {
+        return array(
+            new \Twig_SimpleFunction('pool_ipv4', array($this, 'getPool')),
+        );
+    }
+
+    /**
+     * @param Lease4 $object
+     *
+     * @return string
+     */
+    public function getPool(Lease4 $object)
+    {
+        return $this->poolService->getPoolFromLease($object);
+    }
+
+    /**
+     * @return string
+     */
+    public function getName()
+    {
+        return 'pool_ipv4_extension';
+    }
+
+}