add('clientId') ->add('ponSerialNumber', CallbackFilter::class, array( 'callback' => function (ProxyQuery $query, $alias, $field, $data) { if (!$data || !is_array($data) || !array_key_exists('value', $data) || !isset($data['value'])) { return; } $alias = $query->getRootAlias(); $query ->andWhere("{$alias}.serialNumber LIKE :id OR {$alias}.ponSerialNumber LIKE :id OR {$alias}.ponSerialNumberAux LIKE :id") ->setParameter('id', "%{$data['value']}%"); },), null, [ 'attr' => [ 'placeholder' => $this->trans('sonata.filter.onu_id') ] ]) ->add('profile') ->add('nap') ->add('model') ->add('mac') ->add('olt'); } /** * @param ListMapper $listMapper */ protected function configureListFields(ListMapper $listMapper) { $listMapper ->add('client', 'string', array( 'template' => 'FTTHBundle:ONU:base_list_field_client.html.twig' )) ->add('ip') ->add('mac') ->add('serialNumber', 'string', array( 'template' => 'FTTHBundle:ONU:base_list_field_upper.html.twig' )) ->add('ponSerialNumber', 'string', array( 'template' => 'FTTHBundle:ONU:base_list_field_upper.html.twig' )) ; if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) { $listMapper->add('activationCode'); } $listMapper ->add('profile') ->add('nap') ->add('position') ->add('service_port') ->add('model') ->add('olt') ->add('currentState', 'string', array( 'template' => 'WorkflowBundle:Workflow:base_list_field_current_state.html.twig' )) ->add('created') ->add('_action', 'with-workflow-action', array( 'actions' => array( 'show' => array(), 'edit' => array(), 'delete' => array(), 'state' => array('template' => 'WorkflowBundle:Workflow:show_transitions.html.twig') ))); } /** * @param FormMapper $formMapper */ protected function configureFormFields(FormMapper $formMapper) { $marks = OLTModelMark::getChoices(); $em = $this->get("doctrine.orm.entity_manager"); $template = $em->getRepository('FTTHBundle:ONUTemplate')->findOneBy(array('base'=>true)); $subject = $this->getSubject(); foreach ($marks as $m) {$hidden[$m] = 'hidden';} if ($subject->getId() || $template) { if($subject->getOlt()) { $olt = $subject->getOlt(); } elseif($template) { $olt = $template->getOlt(); } else { $olt = null; } if ($olt && $olt->getModel()) { $mark = $olt->getModel()->getMark(); $hidden[$mark] = ''; } } if($template && $this->isCurrentRoute('create')) { $translator = $this->get('translator'); $flashbag = $this->get('session')->getFlashBag(); $flashbag->add("warning", $translator->trans("msg_use_template_onu_in_create_onu_ftth",array(),"FTTHBundle")); } $formMapper ->tab('default') ->with('') ->add('clientId') ->add('ponSerialNumber', null, array( 'attr' => array( 'style' => 'text-transform: uppercase;' ))); if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) { $formMapper->add('activationCode'); } $formMapper ->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') ->end() ->with('Huawei', ['class' => "col-md-12 {$hidden['Huawei']} olt_mark Huawei"]) ->add('service_port',CollectionType::class, array( 'entry_type' => "FTTHBundle\\Form\\ServicePortType", 'allow_add' => true, 'allow_delete' => true, 'required' => false, )) ->end() ->with('ZTE', ['class' => "col-md-12 {$hidden['ZTE']} olt_mark ZTE"]) ->add('vlan') ->add('traffic_profile') ->add('tcontprofile') ->add('catv') ->end() ->with('FiberLink', ['class' => "col-md-12 {$hidden['FiberLink']} olt_mark FiberLink"]) ->add('vlans', null, array( 'required' => false, 'multiple' => true, )) ->end() ->with('Extra') ->add('extraData') ->end() ->end() ->setHelps(array( 'nap' => $this->trans("helps.check_address"), 'serialNumber' => $this->trans("helps.onu_serial_number"), 'ponSerialNumber' => $this->trans("helps.onu_pon_serial_number"), 'ponSerialNumberAux' => $this->trans("helps.onu_pon_serial_number_aux"), 'service_port' => $this->trans("helps.service_port"), )); $tr069Data = 0; if($this->isCurrentRoute('edit')) { if($this->getParameter('tr069_service')) { $object = $this->getSubject(); $serviceName = $this->getParameter('tr069_api'); if($model = $object->getModel()) { if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api'); } $tr069 = $this->get($serviceName); $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 = $tr069->getDevices($query); if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) { $tr069Data = $tr069->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['preSharedKey']['_value'] ?? null; $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null; $status = $tr069Data['Status']['_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)) ->add('tr069_broadcast', CheckboxType::class, array('mapped' => false, 'data' => $broadcast, 'required' => false)) ->add('tr069_status', CheckboxType::class, array('mapped' => false, 'data' => $status, '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; } else { $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_onu_no_detected')])->end()->end(); } } else { $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_disabled')])->end()->end(); } } else { $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_no_edit')])->end()->end(); } // 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 */ $formMapper->getFormBuilder()->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($formMapper, $template, $subject) { $form = $event->getForm(); if($template && $this->isCurrentRoute('create')) { $this->completeWithTemplate($form, $template); } $olt = $this->getRequest()->query->get('olt'); if(!is_null($olt)) { $em = $this->get("doctrine.orm.entity_manager"); $query_olt = $em->createQueryBuilder('o') ->select('o') ->from('FTTHBundle:OLT', 'o') ->where('o.id = :id') ->setParameter('id', $olt); $form->add('olt', 'entity', array('class' => 'FTTHBundle:OLT', 'query_builder' => $query_olt)); } $ponSerialNumber = $this->getRequest()->query->get('psn'); if ($ponSerialNumber) { $form->add('ponSerialNumber', null, array( 'data' => $ponSerialNumber, )); } } ); } /** * @param ShowMapper $showMapper */ protected function configureShowFields(ShowMapper $showMapper) { $showMapper ->tab('default') ->with('') ->add('clientId') ->add('ponSerialNumber'); if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) { $formMapper->add('activationCode'); } $showMapper ->add('profile') ->add('nap') ->add('model') ->add('created') ->end() ->end() ->tab('Avanzado') ->with('ONU') ->add('serialNumber') ->add('ponSerialNumberAux') ->add('mac') ->add('olt') ->add('currentState') ->end() ->end() ->tab('Log') ->with('Log') ->add('log', 'string', array('template' => 'FTTHBundle:ONU:show_log.html.twig')) ->add('deviceLog', 'string', array( 'template' => 'DeviceBundle::show_device_log.html.twig', 'translation_domain' => 'DeviceBundle', )) ->end() ->end(); if($this->getParameter('tr069_service')) { $object = $this->getSubject(); $serviceName = $this->getParameter('tr069_api'); if($model = $object->getModel()) { if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api'); } $tr069 = $this->get($serviceName); $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 = $tr069->getDevices($query); if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) { $tr069Data = $tr069->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['preSharedKey']['_value'] ?? null; $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null; $status = $tr069Data['Status']['_value'] ?? null; $catv = $tr069Data['CatvPower']['_value'] ?? null; $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null; $showMapper ->tab('TR069') ->with('General') ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $id)) ->add('tr069_manufacturer', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $manufacturer)) ->add('tr069_oui', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $oui)) ->add('tr069_product_class', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $productClass)) ->add('tr069_serial_number', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $serialNumber)) ->add('tr069_ip', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ip)) ->end() ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')]) ->add('tr069_ssid', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ssid)) ->add('tr069_pass', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $pass)) ->add('tr069_broadcast', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $broadcast)) ->add('tr069_status', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $status)) ->end() ->with('CATV',['description' => $this->trans('helps.tr069_catv')]) ->add('tr069_catv', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $catv)) ->end() ->end(); } else { $showMapper ->tab('TR069') ->with('General') ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_onu_no_detected'))) ->end() ->end(); } } else { $showMapper ->tab('TR069') ->with('General') ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_disabled'))) ->end() ->end(); } } /** * @param string $action * @param Object $object * * @return array */ public function configureActionButtons($action, $object = null) { $actions = parent::configureActionButtons($action, $object); if($action == "list") { $actions['import_onu'] = array('template' => 'FTTHBundle:ONU:import_button.html.twig'); } return $actions; } public function configure() { $this->setTemplate('create', 'FTTHBundle:ONU:form.html.twig'); $this->setTemplate('edit', 'FTTHBundle:ONU:form.html.twig'); } 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; $broadcast = ($this->getForm()->get('tr069_broadcast')->getData()) ?? null; $status = ($this->getForm()->get('tr069_status')->getData()) ?? null; $serviceName = $this->getParameter('tr069_api'); if($model = $onu->getModel()) { if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api'); } $tr069 = $this->get($serviceName); if(!is_null($catv)) $aux = $tr069->setCATV($id, $catv); if($ssid) $aux = $tr069->setWlan($id, $ssid, $pass); if(!is_null($broadcast)) $aux = $tr069->setWbroadcast($id, $broadcast); if(!is_null($status)) $aux = $tr069->setWstatus($id, $status); } } public function prePersist($onu) { $this->correctSerialNumber($onu); } public function correctSerialNumber($onu) { $ponSerialNumber = $onu->getPonSerialNumber(); //Identificador $serialNumber = $onu->getSerialNumber(); $ponSerialNumberAux = $onu->getPonSerialNumberAux(); if(strlen($ponSerialNumber) == 12 || strlen($ponSerialNumber) == 16) { if(is_null($serialNumber) || empty($serialNumber)) { if(strlen($ponSerialNumber) == 16) { // It is a serial number > set serial number $onu->setSerialNumber($ponSerialNumber); } else { // It is a pon serial number > convert vendor id from string to hexa and set serial number $vendoId = $this->str2hex(substr($ponSerialNumber,0,4)); $rest = substr($ponSerialNumber,4); $sn = strtolower($vendoId.$rest); $onu->setSerialNumber($sn); } } if(is_null($ponSerialNumberAux) || empty($ponSerialNumberAux)) { if(strlen($ponSerialNumber) == 16) { // It is a serial number > convert vendor id from hexa to string and set pon serial number $_vendor = substr($ponSerialNumber,0,8); $hex = strtoupper($_vendor); $isNumeric = true; for($i=0;$ihex2str($hex); $rest = substr($ponSerialNumber,8); $psn = strtolower($vendoId.$rest); $onu->setPonSerialNumberAux($psn); } else { $onu->setPonSerialNumberAux($ponSerialNumber); } } else { // It is a pon serial number > set pon serial number $onu->setPonSerialNumberAux($ponSerialNumber); } } } else { if(is_null($serialNumber) || empty($serialNumber)) $onu->setSerialNumber($ponSerialNumber); if(is_null($ponSerialNumberAux) || empty($ponSerialNumberAux)) $onu->setPonSerialNumberAux($ponSerialNumber); } } function hex2str($hex) { $hex = strtoupper($hex); $str = ""; for($i=0;$igetConfigurationPool()->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 completeWithTemplate(&$form, $template){ /* if($client = $template->getClientId()) { $form->add('clientId', null, array('data' => $client, 'label' => $this->trans("form.label_client"))); } */ if($profile = $template->getProfile()) { $form->add('profile', null, array('data' => $profile)); } if($olt = $template->getOlt()) { $form->add('olt', null, array('data' => $olt)); } if($model = $template->getModel()) { $form->add('model', null, array('data' => $model)); } /* if($nap = $template->getNap()) { $form->add('nap', null, array('data' => $nap)); } */ if($vlan = $template->getVlan()) { $form->add('vlan', null, array('data' => $vlan)); } if($trafficProfile = $template->getTrafficProfile()) { $form->add('traffic_profile', null, array('data' => $trafficProfile)); } if($tcontprofile = $template->getTcontprofile()) { $form->add('tcontprofile', null, array('data' => $tcontprofile)); } if($vlans = $template->getVlans()) { $form->add('vlans', null, array('data' => $vlans)); } if($position = $template->getPosition()) { $form->add('position', null, array('data' => $position)); } if($extraData = $template->getExtraData()) { $form->add('extraData', null, array('data' => $extraData)); } } }