ONUAdmin.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <?php
  2. namespace FTTHBundle\Admin;
  3. use Doctrine\ORM\EntityRepository;
  4. use Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Form\FormMapper;
  8. use Sonata\AdminBundle\Show\ShowMapper;
  9. use Sonata\CoreBundle\Validator\ErrorElement;
  10. use Sonata\DoctrineORMAdminBundle\Filter\CallbackFilter;
  11. use Symfony\Component\Form\FormEvent;
  12. use Symfony\Component\Form\FormEvents;
  13. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  14. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  15. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  16. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  17. use FTTHBundle\Form\ServicePortType;
  18. use FTTHBundle\Utils\OLTModelMark;
  19. use WorkflowBundle\Admin\WorkflowBaseAdmin;
  20. class ONUAdmin extends WorkflowBaseAdmin
  21. {
  22. /**
  23. * @param DatagridMapper $datagridMapper
  24. */
  25. protected function configureDatagridFilters(DatagridMapper $datagridMapper)
  26. {
  27. $datagridMapper
  28. ->add('clientId')
  29. ->add('ponSerialNumber', CallbackFilter::class, array(
  30. 'callback' => function (ProxyQuery $query, $alias, $field, $data) {
  31. if (!$data || !is_array($data) || !array_key_exists('value', $data) || !isset($data['value'])) {
  32. return;
  33. }
  34. $alias = $query->getRootAlias();
  35. $query
  36. ->andWhere("{$alias}.serialNumber LIKE :id OR
  37. {$alias}.ponSerialNumber LIKE :id OR
  38. {$alias}.ponSerialNumberAux LIKE :id")
  39. ->setParameter('id', "%{$data['value']}%");
  40. },), null, [
  41. 'attr' => [
  42. 'placeholder' => $this->trans('sonata.filter.onu_id')
  43. ]
  44. ])
  45. ->add('profile')
  46. ->add('nap')
  47. ->add('model')
  48. ->add('mac')
  49. ->add('olt');
  50. }
  51. /**
  52. * @param ListMapper $listMapper
  53. */
  54. protected function configureListFields(ListMapper $listMapper)
  55. {
  56. $listMapper
  57. ->add('client', 'string', array(
  58. 'template' => 'FTTHBundle:ONU:base_list_field_client.html.twig'
  59. ))
  60. ->add('ip')
  61. ->add('mac')
  62. ->add('serialNumber', 'string', array(
  63. 'template' => 'FTTHBundle:ONU:base_list_field_upper.html.twig'
  64. ))
  65. ->add('ponSerialNumber', 'string', array(
  66. 'template' => 'FTTHBundle:ONU:base_list_field_upper.html.twig'
  67. ))
  68. ;
  69. if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) {
  70. $listMapper->add('activationCode');
  71. }
  72. $listMapper
  73. ->add('profile')
  74. ->add('nap')
  75. ->add('position')
  76. ->add('service_port')
  77. ->add('model')
  78. ->add('olt')
  79. ->add('currentState', 'string', array(
  80. 'template' => 'WorkflowBundle:Workflow:base_list_field_current_state.html.twig'
  81. ))
  82. ->add('created')
  83. ->add('_action', 'with-workflow-action', array(
  84. 'actions' => array(
  85. 'show' => array(),
  86. 'edit' => array(),
  87. 'delete' => array(),
  88. 'state' => array('template' => 'WorkflowBundle:Workflow:show_transitions.html.twig')
  89. )));
  90. }
  91. /**
  92. * @param FormMapper $formMapper
  93. */
  94. protected function configureFormFields(FormMapper $formMapper)
  95. {
  96. $marks = OLTModelMark::getChoices();
  97. $em = $this->get("doctrine.orm.entity_manager");
  98. $template = $em->getRepository('FTTHBundle:ONUTemplate')->findOneBy(array('base'=>true));
  99. $subject = $this->getSubject();
  100. foreach ($marks as $m) {$hidden[$m] = 'hidden';}
  101. if ($subject->getId() || $template) {
  102. if($subject->getOlt()) {
  103. $olt = $subject->getOlt();
  104. } elseif($template) {
  105. $olt = $template->getOlt();
  106. } else {
  107. $olt = null;
  108. }
  109. if ($olt && $olt->getModel()) {
  110. $mark = $olt->getModel()->getMark();
  111. $hidden[$mark] = '';
  112. }
  113. }
  114. if($template && $this->isCurrentRoute('create')) {
  115. $translator = $this->get('translator');
  116. $flashbag = $this->get('session')->getFlashBag();
  117. $flashbag->add("warning", $translator->trans("msg_use_template_onu_in_create_onu_ftth",array(),"FTTHBundle"));
  118. }
  119. $formMapper
  120. ->tab('default')
  121. ->with('')
  122. ->add('clientId')
  123. ->add('ponSerialNumber', null, array(
  124. 'attr' => array(
  125. 'style' => 'text-transform: uppercase;'
  126. )));
  127. if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) {
  128. $formMapper->add('activationCode');
  129. }
  130. $formMapper
  131. ->add('profile')
  132. ->add('nap')
  133. ->add('model')
  134. ->end()
  135. ->end()
  136. ->tab('Avanzado')
  137. ->with('ONU')
  138. ->add('serialNumber', null, array(
  139. 'attr' => array(
  140. 'style' => 'text-transform: uppercase;'
  141. )))
  142. ->add('ponSerialNumberAux', null, array(
  143. 'attr' => array(
  144. 'style' => 'text-transform: uppercase;'
  145. )))
  146. ->add('mac')
  147. ->add('olt')
  148. ->add('position')
  149. ->end()
  150. ->with('Huawei', ['class' => "col-md-12 {$hidden['Huawei']} olt_mark Huawei"])
  151. ->add('service_port',CollectionType::class, array(
  152. 'entry_type' => "FTTHBundle\\Form\\ServicePortType",
  153. 'allow_add' => true,
  154. 'allow_delete' => true,
  155. 'required' => false,
  156. ))
  157. ->end()
  158. ->with('ZTE', ['class' => "col-md-12 {$hidden['ZTE']} olt_mark ZTE"])
  159. ->add('vlan')
  160. ->add('traffic_profile')
  161. ->add('tcontprofile')
  162. ->add('catv')
  163. ->end()
  164. ->with('FiberLink', ['class' => "col-md-12 {$hidden['FiberLink']} olt_mark FiberLink"])
  165. ->add('vlans', null, array(
  166. 'required' => false,
  167. 'multiple' => true,
  168. ))
  169. ->end()
  170. ->with('Extra')
  171. ->add('extraData')
  172. ->end()
  173. ->end()
  174. ->setHelps(array(
  175. 'nap' => $this->trans("helps.check_address"),
  176. 'serialNumber' => $this->trans("helps.onu_serial_number"),
  177. 'ponSerialNumber' => $this->trans("helps.onu_pon_serial_number"),
  178. 'ponSerialNumberAux' => $this->trans("helps.onu_pon_serial_number_aux"),
  179. 'service_port' => $this->trans("helps.service_port"),
  180. ));
  181. $tr069Data = 0;
  182. if($this->isCurrentRoute('edit')) {
  183. if($this->getParameter('tr069_service')) {
  184. $object = $this->getSubject();
  185. $serviceName = $this->getParameter('tr069_api');
  186. if($model = $object->getModel()) {
  187. if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api');
  188. }
  189. $tr069 = $this->get($serviceName);
  190. $query = array('$or' => array());
  191. if($object->getSerialNumber()) {
  192. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getSerialNumber()));
  193. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getSerialNumber()));
  194. }
  195. if($object->getPonSerialNumber()) {
  196. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
  197. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
  198. }
  199. if($object->getPonSerialNumberAux()) {
  200. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
  201. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
  202. }
  203. $devices = $tr069->getDevices($query);
  204. if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
  205. $tr069Data = $tr069->getTR069Data($devices[0]);
  206. $id = $tr069Data['_id'] ?? null;
  207. $manufacturer = $tr069Data['_deviceId']['_Manufacturer'] ?? null;
  208. $oui = $tr069Data['_deviceId']['_OUI'] ?? null;
  209. $productClass = $tr069Data['_deviceId']['_ProductClass'] ?? null;
  210. $serialNumber = $tr069Data['_deviceId']['_SerialNumber'] ?? null;
  211. $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
  212. $ssid = $tr069Data['SSID']['_value'] ?? null;
  213. $pass = $tr069Data['preSharedKey']['_value'] ?? null;
  214. $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null;
  215. $status = $tr069Data['Status']['_value'] ?? null;
  216. $catv = $tr069Data['CatvPower']['_value'] ?? null;
  217. $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
  218. $formMapper
  219. ->tab('TR069')
  220. ->with('General')
  221. ->add('tr069_id', 'text', array('mapped' => false, 'data' => $id, 'required' => false, 'disabled' => true))
  222. ->add('tr069_manufacturer', 'text', array('mapped' => false, 'data' => $manufacturer, 'required' => false, 'disabled' => true))
  223. ->add('tr069_oui', 'text', array('mapped' => false, 'data' => $oui, 'required' => false, 'disabled' => true))
  224. ->add('tr069_product_class', 'text', array('mapped' => false, 'data' => $productClass, 'required' => false, 'disabled' => true))
  225. ->add('tr069_serial_number', 'text', array('mapped' => false, 'data' => $serialNumber, 'required' => false, 'disabled' => true))
  226. ->add('tr069_ip', 'text', array('mapped' => false, 'data' => $ip, 'required' => false, 'disabled' => true))
  227. ->end()
  228. ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')])
  229. ->add('tr069_ssid', 'text', array('mapped' => false, 'data' => $ssid, 'required' => false))
  230. ->add('tr069_pass', 'text', array('mapped' => false, 'data' => $pass, 'required' => false))
  231. ->add('tr069_broadcast', CheckboxType::class, array('mapped' => false, 'data' => $broadcast, 'required' => false))
  232. ->add('tr069_status', CheckboxType::class, array('mapped' => false, 'data' => $status, 'required' => false))
  233. ->end()
  234. ->with('CATV',['description' => $this->trans('helps.tr069_catv')])
  235. ->add('tr069_catv', CheckboxType::class, array('mapped' => false, 'data' => $catv, 'required' => false))
  236. ->end()
  237. ->end();
  238. $tr069Data = 1;
  239. } else {
  240. $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_onu_no_detected')])->end()->end();
  241. }
  242. } else {
  243. $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_disabled')])->end()->end();
  244. }
  245. } else {
  246. $formMapper->tab('TR069')->with('General', ['description' => $this->trans('helps.tr069_no_edit')])->end()->end();
  247. }
  248. // If use tr069 > send data in preUpdate()
  249. $formMapper
  250. ->tab('default')
  251. ->with('')
  252. ->add('tr069_exist', HiddenType::class, array('mapped' => false, 'data' => $tr069Data))
  253. ->end()
  254. ->end();
  255. /*
  256. * Si vienen parámetros por GET de olt=id o psn=string seteamos los campos
  257. */
  258. $formMapper->getFormBuilder()->addEventListener(FormEvents::PRE_SET_DATA,
  259. function (FormEvent $event) use ($formMapper, $template, $subject) {
  260. $form = $event->getForm();
  261. if($template && $this->isCurrentRoute('create')) {
  262. $this->completeWithTemplate($form, $template);
  263. }
  264. $olt = $this->getRequest()->query->get('olt');
  265. if(!is_null($olt)) {
  266. $em = $this->get("doctrine.orm.entity_manager");
  267. $query_olt = $em->createQueryBuilder('o')
  268. ->select('o')
  269. ->from('FTTHBundle:OLT', 'o')
  270. ->where('o.id = :id')
  271. ->setParameter('id', $olt);
  272. $form->add('olt', 'entity', array('class' => 'FTTHBundle:OLT', 'query_builder' => $query_olt));
  273. }
  274. $ponSerialNumber = $this->getRequest()->query->get('psn');
  275. if ($ponSerialNumber) {
  276. $form->add('ponSerialNumber', null, array(
  277. 'data' => $ponSerialNumber,
  278. ));
  279. }
  280. }
  281. );
  282. }
  283. /**
  284. * @param ShowMapper $showMapper
  285. */
  286. protected function configureShowFields(ShowMapper $showMapper)
  287. {
  288. $showMapper
  289. ->tab('default')
  290. ->with('')
  291. ->add('clientId')
  292. ->add('ponSerialNumber');
  293. if ($this->hasParameter('show.onu.activationCode') && $this->getParameter('show.onu.activationCode') == true) {
  294. $formMapper->add('activationCode');
  295. }
  296. $showMapper
  297. ->add('profile')
  298. ->add('nap')
  299. ->add('model')
  300. ->add('created')
  301. ->end()
  302. ->end()
  303. ->tab('Avanzado')
  304. ->with('ONU')
  305. ->add('serialNumber')
  306. ->add('ponSerialNumberAux')
  307. ->add('mac')
  308. ->add('olt')
  309. ->add('currentState')
  310. ->end()
  311. ->end()
  312. ->tab('Log')
  313. ->with('Log')
  314. ->add('log', 'string', array('template' => 'FTTHBundle:ONU:show_log.html.twig'))
  315. ->add('deviceLog', 'string', array(
  316. 'template' => 'DeviceBundle::show_device_log.html.twig',
  317. 'translation_domain' => 'DeviceBundle',
  318. ))
  319. ->end()
  320. ->end();
  321. if($this->getParameter('tr069_service')) {
  322. $object = $this->getSubject();
  323. $serviceName = $this->getParameter('tr069_api');
  324. if($model = $object->getModel()) {
  325. if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api');
  326. }
  327. $tr069 = $this->get($serviceName);
  328. $object = $this->getSubject();
  329. $query = array('$or' => array());
  330. if($object->getSerialNumber()) {
  331. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getSerialNumber()));
  332. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getSerialNumber()));
  333. }
  334. if($object->getPonSerialNumber()) {
  335. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumber()));
  336. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumber()));
  337. }
  338. if($object->getPonSerialNumberAux()) {
  339. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtoupper($object->getPonSerialNumberAux()));
  340. $query['$or'][] = array("InternetGatewayDevice.DeviceInfo.SerialNumber" => strtolower($object->getPonSerialNumberAux()));
  341. }
  342. $devices = $tr069->getDevices($query);
  343. if(is_array($devices) && isset($devices[0]) && isset($devices[0]['_id'])) {
  344. $tr069Data = $tr069->getTR069Data($devices[0]);
  345. $id = $tr069Data['_id'] ?? null;
  346. $manufacturer = $tr069Data['_deviceId']['_Manufacturer'] ?? null;
  347. $oui = $tr069Data['_deviceId']['_OUI'] ?? null;
  348. $productClass = $tr069Data['_deviceId']['_ProductClass'] ?? null;
  349. $serialNumber = $tr069Data['_deviceId']['_SerialNumber'] ?? null;
  350. $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
  351. $ssid = $tr069Data['SSID']['_value'] ?? null;
  352. $pass = $tr069Data['preSharedKey']['_value'] ?? null;
  353. $broadcast = $tr069Data['SSIDAdvertisementEnabled']['_value'] ?? null;
  354. $status = $tr069Data['Status']['_value'] ?? null;
  355. $catv = $tr069Data['CatvPower']['_value'] ?? null;
  356. $ip = $tr069Data['ExternalIPAddress']['_value'] ?? null;
  357. $showMapper
  358. ->tab('TR069')
  359. ->with('General')
  360. ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $id))
  361. ->add('tr069_manufacturer', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $manufacturer))
  362. ->add('tr069_oui', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $oui))
  363. ->add('tr069_product_class', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $productClass))
  364. ->add('tr069_serial_number', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $serialNumber))
  365. ->add('tr069_ip', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ip))
  366. ->end()
  367. ->with('WIFI',['description' => $this->trans('helps.tr069_wifi')])
  368. ->add('tr069_ssid', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $ssid))
  369. ->add('tr069_pass', null, array('template' => 'FTTHBundle:ONU:base_show_text.html.twig', 'text' => $pass))
  370. ->add('tr069_broadcast', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $broadcast))
  371. ->add('tr069_status', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $status))
  372. ->end()
  373. ->with('CATV',['description' => $this->trans('helps.tr069_catv')])
  374. ->add('tr069_catv', null, array('template' => 'FTTHBundle:ONU:base_show_boolean.html.twig', 'boolean' => $catv))
  375. ->end()
  376. ->end();
  377. } else {
  378. $showMapper
  379. ->tab('TR069')
  380. ->with('General')
  381. ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_onu_no_detected')))
  382. ->end()
  383. ->end();
  384. }
  385. } else {
  386. $showMapper
  387. ->tab('TR069')
  388. ->with('General')
  389. ->add('tr069_id', null, array('template' => 'FTTHBundle:ONU:base_show_field.html.twig', 'text' => $this->trans('helps.tr069_disabled')))
  390. ->end()
  391. ->end();
  392. }
  393. }
  394. /**
  395. * @param string $action
  396. * @param Object $object
  397. *
  398. * @return array
  399. */
  400. public function configureActionButtons($action, $object = null)
  401. {
  402. $actions = parent::configureActionButtons($action, $object);
  403. if($action == "list") {
  404. $actions['import_onu'] = array('template' => 'FTTHBundle:ONU:import_button.html.twig');
  405. }
  406. return $actions;
  407. }
  408. public function configure()
  409. {
  410. $this->setTemplate('create', 'FTTHBundle:ONU:form.html.twig');
  411. $this->setTemplate('edit', 'FTTHBundle:ONU:form.html.twig');
  412. }
  413. public function preUpdate($onu)
  414. {
  415. $this->correctSerialNumber($onu);
  416. if((boolean) $this->getForm()->get('tr069_exist')->getData()) {
  417. $ssid = ($this->getForm()->get('tr069_ssid')->getData()) ?? null;
  418. $pass = ($this->getForm()->get('tr069_pass')->getData()) ?? null;
  419. $id = ($this->getForm()->get('tr069_id')->getData()) ?? null;;
  420. $catv = ($this->getForm()->get('tr069_catv')->getData()) ?? null;
  421. $broadcast = ($this->getForm()->get('tr069_broadcast')->getData()) ?? null;
  422. $status = ($this->getForm()->get('tr069_status')->getData()) ?? null;
  423. $serviceName = $this->getParameter('tr069_api');
  424. if($model = $onu->getModel()) {
  425. if($model->getData('tr069_api')) $serviceName = $model->getData('tr069_api');
  426. }
  427. $tr069 = $this->get($serviceName);
  428. if(!is_null($catv)) $aux = $tr069->setCATV($id, $catv);
  429. if($ssid) $aux = $tr069->setWlan($id, $ssid, $pass);
  430. if(!is_null($broadcast)) $aux = $tr069->setWbroadcast($id, $broadcast);
  431. if(!is_null($status)) $aux = $tr069->setWstatus($id, $status);
  432. }
  433. }
  434. public function prePersist($onu)
  435. {
  436. $this->correctSerialNumber($onu);
  437. }
  438. public function correctSerialNumber($onu) {
  439. $ponSerialNumber = $onu->getPonSerialNumber(); //Identificador
  440. $serialNumber = $onu->getSerialNumber();
  441. $ponSerialNumberAux = $onu->getPonSerialNumberAux();
  442. if(strlen($ponSerialNumber) == 12 || strlen($ponSerialNumber) == 16) {
  443. if(is_null($serialNumber) || empty($serialNumber)) {
  444. if(strlen($ponSerialNumber) == 16) {
  445. // It is a serial number > set serial number
  446. $onu->setSerialNumber($ponSerialNumber);
  447. } else {
  448. // It is a pon serial number > convert vendor id from string to hexa and set serial number
  449. $vendoId = $this->str2hex(substr($ponSerialNumber,0,4));
  450. $rest = substr($ponSerialNumber,4);
  451. $sn = strtolower($vendoId.$rest);
  452. $onu->setSerialNumber($sn);
  453. }
  454. }
  455. if(is_null($ponSerialNumberAux) || empty($ponSerialNumberAux)) {
  456. if(strlen($ponSerialNumber) == 16) {
  457. // It is a serial number > convert vendor id from hexa to string and set pon serial number
  458. $_vendor = substr($ponSerialNumber,0,8);
  459. $hex = strtoupper($_vendor);
  460. $isNumeric = true;
  461. for($i=0;$i<strlen($hex);$i+=2) {
  462. if(!is_numeric(substr($hex,$i,2))) {
  463. $isNumeric = false;
  464. break;
  465. }
  466. }
  467. if(ctype_xdigit($isNumeric)) { //hexa check
  468. $vendoId = $this->hex2str($hex);
  469. $rest = substr($ponSerialNumber,8);
  470. $psn = strtolower($vendoId.$rest);
  471. $onu->setPonSerialNumberAux($psn);
  472. } else {
  473. $onu->setPonSerialNumberAux($ponSerialNumber);
  474. }
  475. } else {
  476. // It is a pon serial number > set pon serial number
  477. $onu->setPonSerialNumberAux($ponSerialNumber);
  478. }
  479. }
  480. } else {
  481. if(is_null($serialNumber) || empty($serialNumber))
  482. $onu->setSerialNumber($ponSerialNumber);
  483. if(is_null($ponSerialNumberAux) || empty($ponSerialNumberAux))
  484. $onu->setPonSerialNumberAux($ponSerialNumber);
  485. }
  486. }
  487. function hex2str($hex) {
  488. $hex = strtoupper($hex);
  489. $str = "";
  490. for($i=0;$i<strlen($hex);$i+=2)
  491. $str .= chr(hexdec(substr($hex,$i,2)));
  492. return $str;
  493. }
  494. function str2hex($string){
  495. $string = strtoupper($string);
  496. $hex = "";
  497. for ($i=0; $i < strlen($string); $i++)
  498. $hex .= dechex(ord($string[$i]));
  499. return $hex;
  500. }
  501. public function update($object){
  502. $em = $this->getConfigurationPool()->getContainer()->get('doctrine.orm.entity_manager');
  503. $all = $em->getRepository(\FTTHBundle\Entity\ServicePort::class)->findBy(array("onu" => $object));
  504. foreach($all as $sp){
  505. if(!$object->getServicePort()->contains($sp)){
  506. $em->remove($sp);
  507. }
  508. }
  509. foreach($object->getServicePort() as $sp){
  510. $sp->setOnu($object);
  511. $em->persist($sp);
  512. if(!$sp->getOlt()){
  513. $sp->setOlt($object->getOlt());
  514. }
  515. }
  516. return parent::update($object);
  517. }
  518. private function completeWithTemplate(&$form, $template){
  519. /*
  520. if($client = $template->getClientId()) {
  521. $form->add('clientId', null, array('data' => $client, 'label' => $this->trans("form.label_client")));
  522. }
  523. */
  524. if($profile = $template->getProfile()) {
  525. $form->add('profile', null, array('data' => $profile));
  526. }
  527. if($olt = $template->getOlt()) {
  528. $form->add('olt', null, array('data' => $olt));
  529. }
  530. if($model = $template->getModel()) {
  531. $form->add('model', null, array('data' => $model));
  532. }
  533. /*
  534. if($nap = $template->getNap()) {
  535. $form->add('nap', null, array('data' => $nap));
  536. }
  537. */
  538. if($vlan = $template->getVlan()) {
  539. $form->add('vlan', null, array('data' => $vlan));
  540. }
  541. if($trafficProfile = $template->getTrafficProfile()) {
  542. $form->add('traffic_profile', null, array('data' => $trafficProfile));
  543. }
  544. if($tcontprofile = $template->getTcontprofile()) {
  545. $form->add('tcontprofile', null, array('data' => $tcontprofile));
  546. }
  547. if($vlans = $template->getVlans()) {
  548. $form->add('vlans', null, array('data' => $vlans));
  549. }
  550. if($position = $template->getPosition()) {
  551. $form->add('position', null, array('data' => $position));
  552. }
  553. if($extraData = $template->getExtraData()) {
  554. $form->add('extraData', null, array('data' => $extraData));
  555. }
  556. }
  557. }