소스 검색

Se agrega TR069 al formulario de ONU. Habilitar el servicio en el parameters.yml.

Maxi Schvindt 7 년 전
부모
커밋
8d5c7e30ca

+ 1 - 0
app/config/config.yml

@@ -25,6 +25,7 @@ imports:
     - { resource: "@AuthBundle/Resources/config/services.yml" }
     - { resource: "@AuditBundle/Resources/config/services.yml" }
     - { resource: '@BaseAdminBundle/Resources/config/sonata-config.yml' }
+    - { resource: '@TR069Bundle/Resources/config/services.yml' }
 
 
 parameters:

+ 6 - 0
app/config/parameters.yml.dist

@@ -49,3 +49,9 @@ parameters:
     
     # App Dummy URL
     env(HOST_DUMMY): http://www.flowdat.com/
+
+    tr069_service: false
+    tr069_user: admin
+    tr069_pass: admin
+    tr069_host: genieacs-nbi
+    tr069_port: 7557

+ 6 - 0
app/config/parameters.yml.docker

@@ -44,3 +44,9 @@ parameters:
     # nombre del servicio del nginx
     nginx_name: nginx-proxy
     onu.distance.nap: 0.2
+
+    tr069_service: false
+    tr069_user: admin
+    tr069_pass: admin
+    tr069_host: genieacs-nbi
+    tr069_port: 7557

+ 157 - 36
src/FTTHBundle/Admin/ONUAdmin.php

@@ -15,6 +15,8 @@ use Sonata\CoreBundle\Validator\ErrorElement;
 
 use Symfony\Component\Form\Extension\Core\Type\CollectionType;
 use FTTHBundle\Form\ServicePortType;
+use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+use Symfony\Component\Form\Extension\Core\Type\HiddenType;
 
 
 class ONUAdmin extends WorkflowBaseAdmin
@@ -69,30 +71,31 @@ class ONUAdmin extends WorkflowBaseAdmin
      */
     protected function configureFormFields(FormMapper $formMapper)
     {
+
         $formMapper
             ->tab('default')
-            ->with('')
-            ->add('clientId')
-            ->add('ponSerialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('profile')
-            ->add('nap')
-            ->add('model')
-            ->end()
+                ->with('')
+                    ->add('clientId')
+                    ->add('ponSerialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('profile')
+                    ->add('nap')
+                    ->add('model')
+                ->end()
             ->end()
             ->tab('Avanzado')
-            ->with('ONU')
-            ->add('serialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('ponSerialNumberAux', null, array('attr' => array('style' => 'text-transform: uppercase;')))
-            ->add('mac')
-            ->add('olt')
-            ->add('position')
-	    ->add('service_port',CollectionType::class, array(
-			'entry_type' => "FTTHBundle\\Form\\ServicePortType",
-			'allow_add' => true,
-			'allow_delete' => true,
-			'required' => false,
-		 ))
-            ->end()
+                ->with('ONU')
+                    ->add('serialNumber', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('ponSerialNumberAux', null, array('attr' => array('style' => 'text-transform: uppercase;')))
+                    ->add('mac')
+                    ->add('olt')
+                    ->add('position')
+	                ->add('service_port',CollectionType::class, array(
+		            	'entry_type' => "FTTHBundle\\Form\\ServicePortType",
+		            	'allow_add' => true,
+		            	'allow_delete' => true,
+		            	'required' => false,
+		            ))
+                ->end()
             ->end()
             ->setHelps(array(
                 'nap' => $this->trans("helps.check_address"),
@@ -103,6 +106,82 @@ class ONUAdmin extends WorkflowBaseAdmin
 		));
 
 
+
+        $tr069Data = 0;
+        
+        if($this->isCurrentRoute('edit') && $this->getParameter('tr069_service')) {
+            $object = $this->getSubject();
+            
+            $query = array('$or' => array());
+            if($object->getSerialNumber()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getSerialNumber()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getSerialNumber()));
+            }
+            
+            if($object->getPonSerialNumber()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
+            }
+            
+            if($object->getPonSerialNumberAux()) {
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
+                $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
+            }
+            
+            
+            $devices = $this->get('tr069.api')->getDevices($query);
+            
+            if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
+                $tr069Data = $this->getTR069Data($devices[0]);
+
+                $id = $tr069Data['_id'] ?? null;
+                $manufacturer = $tr069Data['_deviceId']['_Manufacturer'] ?? null;
+                $oui = $tr069Data['_deviceId']['_OUI'] ?? null;
+                $productClass = $tr069Data['_deviceId']['_ProductClass'] ?? null;
+                $serialNumber = $tr069Data['_deviceId']['_SerialNumber'] ?? null;
+                $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+
+                $ssid = $tr069Data['SSID']['_value'] ?? null;
+                //$pass = $tr069Data['keyPassphrase']['_value'] ?? null;
+                $pass = $tr069Data['preSharedKey']['_value'] ?? null;
+                
+                $catv = $tr069Data['CatvPower']['_value'] ?? null;
+                
+                $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
+                
+                $formMapper
+                    ->tab('TR069')
+                        ->with('General')
+                            ->add('tr069_id', 'text', array('mapped' => false, 'data' => $id, 'required' => false, 'disabled' => true))
+                            ->add('tr069_manufacturer', 'text', array('mapped' => false, 'data' => $manufacturer, 'required' => false, 'disabled' => true))
+                            ->add('tr069_oui', 'text', array('mapped' => false, 'data' => $oui, 'required' => false, 'disabled' => true))
+                            ->add('tr069_product_class', 'text', array('mapped' => false, 'data' => $productClass, 'required' => false, 'disabled' => true))
+                            ->add('tr069_serial_number', 'text', array('mapped' => false, 'data' => $serialNumber, 'required' => false, 'disabled' => true))
+                            ->add('tr069_ip', 'text', array('mapped' => false, 'data' => $ip, 'required' => false, 'disabled' => true))
+                        ->end()
+                        ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')])
+                            ->add('tr069_ssid', 'text', array('mapped' => false, 'data' => $ssid, 'required' => false))
+                            ->add('tr069_pass', 'text', array('mapped' => false, 'data' => $pass, 'required' => false))
+                        ->end()
+                        ->with('CATV',['description' => $this->trans('helps.tr069_catv')])
+                            ->add('tr069_catv', CheckboxType::class, array('mapped' => false, 'data' => $catv, 'required' => false))
+                        ->end()
+                    ->end();
+            }
+
+            $tr069Data = 1;
+
+        }
+
+        // If use tr069 > send data in preUpdate()
+        $formMapper
+        ->tab('default')
+            ->with('')
+                ->add('tr069_exist', HiddenType::class, array('mapped' => false, 'data' => $tr069Data))
+            ->end()
+        ->end();
+
+
         /*
          *  Si vienen parámetros por GET de olt=id o psn=string seteamos los campos
          */
@@ -193,6 +272,22 @@ class ONUAdmin extends WorkflowBaseAdmin
     public function preUpdate($onu)
     {
         $this->correctSerialNumber($onu);
+        
+        if((boolean) $this->getForm()->get('tr069_exist')->getData()) {
+            $ssid = ($this->getForm()->get('tr069_ssid')->getData()) ?? null;
+            $pass = ($this->getForm()->get('tr069_pass')->getData()) ?? null;
+            $id = ($this->getForm()->get('tr069_id')->getData()) ?? null;;
+            $catv = ($this->getForm()->get('tr069_catv')->getData()) ?? null;
+    
+            if($ssid) {
+                $aux = $this->get('tr069.api')->setWlan($id, $ssid, $pass);
+            }
+            
+            if(!is_null($catv)) {
+                $aux = $this->get('tr069.api')->setCATV($id, $catv);
+            }
+        }
+        
     }
 
     public function prePersist($onu)
@@ -276,22 +371,48 @@ class ONUAdmin extends WorkflowBaseAdmin
     }
 
     public function update($object){
-	$em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
-	$all = $em->getRepository(\FTTHBundle\Entity\ServicePort::class)->findBy(array("onu" => $object));
-	foreach($all as $sp){
-		if(!$object->getServicePort()->contains($sp)){
-			$em->remove($sp);
-		}
-	}
-
-	foreach($object->getServicePort() as $sp){
-		$sp->setOnu($object);
-		$em->persist($sp);
-		if(!$sp->getOlt()){
-			$sp->setOlt($object->getOlt());
-		}
-	}
-	return parent::update($object);
+	    $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
+	    $all = $em->getRepository(\FTTHBundle\Entity\ServicePort::class)->findBy(array("onu" => $object));
+	    foreach($all as $sp){
+	    	if(!$object->getServicePort()->contains($sp)){
+	    		$em->remove($sp);
+	    	}
+	    }
+
+	    foreach($object->getServicePort() as $sp){
+	    	$sp->setOnu($object);
+	    	$em->persist($sp);
+	    	if(!$sp->getOlt()){
+	    		$sp->setOlt($object->getOlt());
+	    	}
+	    }
+	    return parent::update($object);
+    }
+
+    private function getTR069Data($data) {
+        $result = array();
+
+        /* (isset($data['_id']))? $result['_id'] = $data['_id'] : $result['_id'] = null;
+        (isset($data['_deviceId']))? $result['_deviceId'] = $data['_deviceId'] : $result['_deviceId'] = null; */
+
+        $result['_id'] = $data['_id'] ?? null;
+        $result['_deviceId'] = $data['_deviceId'] ?? null;
+
+        $result['SSID'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['SSID'] ?? null;
+        $result['keyPassphrase'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['KeyPassphrase'] ?? null;
+        
+        //InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.PreSharedKey.1.PreSharedKey
+        $result['preSharedKey'] = $data['InternetGatewayDevice']['LANDevice']['1']['WLANConfiguration']['1']['PreSharedKey']['1']['PreSharedKey'] ?? null;
+        
+        $result['CatvPower'] = $data['InternetGatewayDevice']['VS_AppCfg']['VsCatvCfg']['CatvPower'] ?? null;
+        $result['ExternalIPAddress'] = $data['InternetGatewayDevice']['WANDevice']['1']['WANConnectionDevice']['2']['WANPPPConnection']['1']['ExternalIPAddress'] ?? null;
+
+        return $result;
+            
+
+        
+
+
     }
     
 }

+ 2 - 1
src/FTTHBundle/Controller/ONUCRUDController.php

@@ -47,7 +47,8 @@ class ONUCRUDController extends CRUDController
             $clients = $webservice->getData($clientApi, $filters);
             if(is_array($clients) && !empty($clients))
                 foreach($clients as $client) {
-                    $_clients[$client['id']] = "{$client['id']} - {$client['name']}";
+                    if(isset($client['id']) && isset($client['name']))
+                        $_clients[$client['id']] = "{$client['id']} - {$client['name']}";
                 }
         }
 

+ 11 - 0
src/FTTHBundle/Resources/translations/FTTHBundle.es.yml

@@ -114,6 +114,15 @@ form:
     label_address: Dirección
     label_service_port: Service Port
     label_position: Posición dentro del puerto
+    label_tr069_ssid: SSID
+    label_tr069_pass: Password
+    label_tr069_catv: CATV
+    label_tr069_id: TR069 ID
+    label_tr069_manufacturer: Manufacturer
+    label_tr069_oui: OUI
+    label_tr069_product_class: Product Class
+    label_tr069_serial_number: Serial Number
+    label_tr069_ip: IP
 
 list:
     label_id: Id
@@ -205,6 +214,8 @@ helps:
     onu_pon_serial_number: Identificador de la ONU, puede ser un Serial Number o Pon Serial Number.
     onu_pon_serial_number_aux: Pon Serial Number de la ONU conformado por 12 caracteres, si es vacío lo calculamos desde el Identificador.
     service_port: Los services ports son creados automaticamente, si el modelo de OLT tiene seteado 'auto-create-service-ports' == true, en caso de modificarlos <b>no</b> se actualizaran en la OLT, sino que seran utilizados en el siguiente comando.
+    tr069_wifi: La configuración de estos campos puede depender/variar según el modelo de la ONU/ONT. Los campos tardan en actualizarse.
+    tr069_catv: La configuración de este campo puede depender/variar según el modelo de la ONU/ONT. El campo puede tardar en actualizarse.
 
 error:
     address_not_found: La dirección "%client_address%" no fue encontrada en los servicios de google.