Преглед изворни кода

Added MAC address and Radius Auth method in the ONU form. When select
radius authentication by mac, the mac in required in the form. The MAC
is unique in DB.

Maximiliano Schvindt пре 6 година
родитељ
комит
0f32ab29de

+ 10 - 1
src/FTTHBundle/Admin/ONUAdmin.php

@@ -229,6 +229,13 @@ class ONUAdmin extends WorkflowBaseAdmin
                     ->add('olt','hidden', array('attr' => array("hidden" => true)))
                     ->add('position')
                     ->add('ip')
+                    ->add('mac')
+                    ->add('radiusAuth', 'choice', [
+                        'choices' => [
+                            'Pon Serial Number' => 'psn',
+                            'MAC Address' => 'mac'
+                        ]
+                    ])
                 ->end()
                 ->with('Huawei', ['class' => "col-md-12 {$hidden['Huawei']} olt_mark Huawei"])
                     ->add('servicePorts', CollectionType::class, array(
@@ -265,6 +272,8 @@ class ONUAdmin extends WorkflowBaseAdmin
                 'ponSerialNumber' => $this->trans("helps.onu_pon_serial_number"),
                 'ponSerialNumberAux' => $this->trans("helps.onu_pon_serial_number_aux"),
                 'servicePorts' => $this->trans("helps.service_port"),
+                'mac' => $this->trans("helps.mac"),
+                'radiusAuth' => $this->trans("helps.radiusAuth")
             ));
 
 
@@ -425,7 +434,7 @@ class ONUAdmin extends WorkflowBaseAdmin
             $olt = $subject->getOlt();
 
             // Según el modelo de OLT se muestran algunos campos específicos
-            if ($olt && $olt->getModel()) {
+            if ($olt && !is_string($olt) && $olt->getModel()) {
                 $oltModel = $olt->getModel();
                 $mark = $oltModel->getMark();
                 $hidden[$mark] = '';

+ 32 - 1
src/FTTHBundle/Entity/ONU.php

@@ -31,6 +31,7 @@ use Doctrine\ORM\Mapping\HasLifecycleCallbacks;
  * @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="unique_idx", columns={"pon_serial_number", "tenancy_id"})})
  *
  * @UniqueEntity(fields={"ponSerialNumber", "tenancyId"}, message="errors.duplicate_key")
+ * @UniqueEntity(fields={"mac"}, message="errors.duplicate_key")
  *
  * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=true)
  *
@@ -274,6 +275,12 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
      */
     protected $logOLT;
 
+     /**
+     * @ORM\Column(type="string", nullable=false, options={"default": "psn"})
+     * psn | mac
+     */
+    protected $radiusAuth = 'psn';
+
     /**
      * Constructor
      */
@@ -348,7 +355,7 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
      */
     public function setMac($mac)
     {
-        $this->mac = $mac;
+        $this->mac = strtolower($mac);
 
         return $this;
     }
@@ -1147,4 +1154,28 @@ class ONU implements DeviceInterface, TenancyIdTraitInterface, LocationInterface
 
         return $hex;
     }
+
+    /**
+     * Set radiusAuth
+     *
+     * @param string $radiusAuth
+     *
+     * @return ONU
+     */
+    public function setRadiusAuth($radiusAuth)
+    {
+        $this->radiusAuth = $radiusAuth;
+
+        return $this;
+    }
+
+    /**
+     * Get radiusAuth
+     *
+     * @return string
+     */
+    public function getRadiusAuth()
+    {
+        return $this->radiusAuth;
+    }
 }

+ 5 - 1
src/FTTHBundle/Resources/translations/FTTHBundle.es.yml

@@ -179,6 +179,7 @@ form:
     label_time_discovery: Tiempo de escaneo
     label_discovery_profile: Perfíl
     label_date: Fecha
+    label_radius_auth: Autenticación en Radius
 
 list:
     label_id: Id
@@ -341,6 +342,8 @@ helps:
     tr069_onu_no_detected: No se encontró la ONU/ONT en el servicio TR069.
     onuTemplate: Al seleccionar una Plantilla de ONU se recargará la página y el formulario seteará sus valores 
     ip_static: Ip estática
+    radiusAuth: Selecciona el tipo de autenticación en Radius. Al selecciona por MAC, debe ingresar una MAC.
+    mac: 'MAC Address para realizar autenticación por Radius. Formato sin :'
 error:
     address_not_found: La dirección "%client_address%" no fue encontrada en los servicios de google.
     nap_relation_olt_not_found: No se encontró la relación entre el nap y la olt.
@@ -386,4 +389,5 @@ error_onu_position: La posición dentro del puerto seleccionada ya se encuentra
 Stats: Estadísticas
 Show stats: Mostrar detalle
 Set 0 to disable autodiscovery or set a x number to scan each x minutes the ONUs connected but without configuration: Seleccione 0 para deshabilitar la función 'Autodiscovery' o seleccione un valor x para escanear cada x minutos las ONUs conectadas pero sin configurar. 
-Profile to set the ONUs by autodiscovery: Perfíl con el cual se configurarán las ONUs mediante Autodiscovery.
+Profile to set the ONUs by autodiscovery: Perfíl con el cual se configurarán las ONUs mediante Autodiscovery.
+errors.duplicate_mac_key: La MAC se encuentra asignada a otra ONU

+ 2 - 1
src/FTTHBundle/Resources/translations/validators.es.yml

@@ -1,2 +1,3 @@
 error.max_number_onu_invalid: Máxima cantidad de ONU por NAP. Seleccione otro NAP de la lista
-error_onu_position: La posición dentro del puerto seleccionada ya se encuentra asignada a otra ONU
+error_onu_position: La posición dentro del puerto seleccionada ya se encuentra asignada a otra ONU
+error_onu_mac_duplicate: La MAC se encuentra asignada a otra ONU

+ 41 - 0
src/FTTHBundle/Resources/views/ONU/form.html.twig

@@ -352,6 +352,47 @@
             }
         }
 
+
+        $('#{{ admin.uniqid ~ "_radiusAuth" }}').on('change', function() {
+            validateMac();
+        });
+        
+        $('#{{ admin.uniqid ~ "_mac" }}').on('change', function() {
+            validateMac();
+        });
+
+        function validateMac() {
+            let uniqid = '{{ admin.uniqid }}';
+            
+            let radiusAuth = $(`#${uniqid}_radiusAuth`).val();
+            let macObj = $(`#${uniqid}_mac`);
+            let macLabel = $(`label[for=${uniqid}_mac]`);
+            let macDiv = $(`#sonata-ba-field-container-${uniqid}_mac`);
+
+            macObj.attr('placeholder','cafecafecafe');
+            if(radiusAuth === 'mac') {
+                if(macObj.val().length != 12) {
+                    macDiv.addClass("has-error");
+                } else {
+                    macDiv.removeClass("has-error");
+                }
+
+                macObj.attr('maxlength',12);
+                macObj.attr('minlength',12);
+                macObj.attr('required','required');
+                macDiv.attr('required','required');
+                macLabel.addClass('required');
+            } else {
+                macObj.removeAttr("maxlength");
+                macObj.removeAttr("minlength");
+                macObj.removeAttr("required");
+                macDiv.removeAttr("required");
+                macLabel.removeClass('required');
+            }
+        }
+
+        validateMac();
+
     </script>
 
 {% endblock %}