webservice = $webservice; $this->devicePostUrl = $devicePostUrl; $this->deviceDeletePostUrl = $deviceDeletePostUrl; $this->devicePutUrl = $devicePutUrl; } /** * @param LifecycleEventArgs $args */ public function postPersist(LifecycleEventArgs $args) { $this->send($args, $this->devicePostUrl, HttpRequestInterface::METHOD_POST); } /** * @param LifecycleEventArgs $args */ public function preRemove(LifecycleEventArgs $args) { $entity = $args->getEntity(); if ($entity instanceof DeviceInterface) { if($deviceId = $this->getRemoteDeviceId($entity)) { $data = array('id' => $deviceId); return $this->webservice->makeGetRequest($this->deviceDeletePostUrl, HttpRequestInterface::METHOD_DELETE, $data); } } } /** * @param LifecycleEventArgs $args */ public function postUpdate(LifecycleEventArgs $args) { $entity = $args->getEntity(); if ($entity instanceof DeviceInterface) { if($deviceId = $this->getRemoteDeviceId($entity)) { $url = "{$this->devicePutUrl}{$deviceId}"; $this->send($args, $url, HttpRequestInterface::METHOD_PUT); } else { $this->send($args, $this->devicePostUrl, HttpRequestInterface::METHOD_POST); } } } /** * @param LifecycleEventArgs $args * @param string $url * @param string $method */ private function send(LifecycleEventArgs $args, $url, $method) { $entity = $args->getEntity(); if ($entity instanceof DeviceInterface) { $data = $entity->getDeviceData(); $data = $this->addLocationData($entity, $data); return $this->webservice->makeGetRequest($url, $method, $data); } } /** * Agrega la ubicación de $entity si implementa LocationInterface * * @param Entity $entity * @param array $data * * @return array */ private function addLocationData($entity, $data) { $locationInterface = 'MapBundle\Entity\Interfaces\LocationInterface'; if (interface_exists($locationInterface) && is_a($entity, $locationInterface)) { $extraData = json_decode($data['extraData'], true); $extraData['location'] = $entity->getLocation() ? $entity->getLocation()->getData() : array(); $data['extraData'] = json_encode($extraData); } return $data; } /** * @param object $entity */ private function getRemoteDeviceId($entity) { $deviceId = $entity->getId(); $deviceType = get_class($entity); $tenancyId = $entity->getTenancyId(); $filters = array('deviceId'=>$deviceId,'deviceType'=>$deviceType,'tenancyId'=>$tenancyId); $data = $this->webservice->getData("device_post_url",$filters); // file_put_contents("/var/flowdat/error.log",json_encode($data)); $deviceId = null; if(isset($data[0])) $deviceId = $data[0]['id']; return $deviceId; } }