public function testCircularReferenceHandler() { $serializer = new Serializer(array($this->normalizer)); $this->normalizer->setSerializer($serializer); $this->normalizer->setCircularReferenceHandler(function ($obj) { return get_class($obj); }); $obj = new CircularReferenceDummy(); $expected = array('me' => 'Symfony\\Component\\Serializer\\Tests\\Fixtures\\CircularReferenceDummy'); $this->assertEquals($expected, $this->normalizer->normalize($obj)); }
/** * @Route("/dossier/{id}/prequalified/list", name="contracting_dossier_prequalified_loader") * @Template() * @Security("has_role('ROLE_CONTRACTING')") */ public function dossierPrequalifiedListAction($id) { $em = $this->getDoctrine()->getManager(); $query = $em->createQuery('SELECT p,c FROM AppBundle:PreQualified p JOIN p.contract c WHERE p.contract=:id')->setParameter('id', $id); $prequalified = $query->getResult(); $encoder = new JsonEncoder(); $normalizer = new GetSetMethodNormalizer(); $normalizer->setCircularReferenceHandler(function ($object) { return $object->getId(); }); $serializer = new Serializer(array($normalizer), array($encoder)); $jsonContent = $serializer->serialize(array('data' => $prequalified), 'json'); //Audit $contract = $em->getRepository('AppBundle:Contract')->findOneBy(array('id' => $id)); if ($prequalified) { $audit = new Audit(); $user = $this->get('security.token_storage')->getToken()->getUser(); $audit->setUsername($user->getUsername()); $audit->setName($user->getFirstname() . " " . $user->getLastname()); $audit->setFunctionType("Contracting"); $audit->setEventType("View pre-qualified suppliers"); $audit->setDossier($contract); $em->persist($audit); $em->flush(); } return new Response($jsonContent); }
/** * @Route("/client/clone/{idClient}", requirements={"idClient" = "\d+"}, defaults={"id" = "-1"}, name="cloneClient") * @Method("POST") * @Template() */ public function cloneClientAction(Request $request, $idClient) { $t = $this->get('translator'); $idoriginal = $idClient; if (null == $idClient) { throw $this->createNotFoundException($t->trans('Unable to find Client entity:', array(), 'BinovoElkarBackup') . $idClient); } $clientrow = array(); try { // CLONE CLIENT $repository = $this->getDoctrine()->getRepository('BinovoElkarBackupBundle:Client'); $client = $repository->find($idoriginal); if (null == $client) { throw $this->createNotFoundException($t->trans('Unable to find Client entity:', array(), 'BinovoElkarBackup') . $client); } $newname = $client->getName() . "-cloned1"; while ($repository->findOneByName($newname)) { $newname++; } $new = clone $client; $new->setName($newname); $newem = $this->getDoctrine()->getManager(); $newem->persist($new); $newem->flush(); $newem->detach($new); $idnew = $new->getId(); // CLONE JOBS $repository = $this->getDoctrine()->getRepository('BinovoElkarBackupBundle:Job'); $jobs = $repository->findBy(array('client' => $idoriginal)); foreach ($jobs as $job) { $repository = $this->getDoctrine()->getRepository('BinovoElkarBackupBundle:Client'); $client = $repository->find($idnew); $newjob = clone $job; $newjob->setClient($client); $newjob->setDiskUsage(0); $newjob->setStatus(''); $newem = $this->getDoctrine()->getManager(); $newem->persist($newjob); $newem->flush(); $newem->detach($newjob); } } catch (Exception $e) { $this->get('session')->getFlashBag()->add('clone', $t->trans('Unable to clone your client: %extrainfo%', array('%extrainfo%' => $e->getMessage()), 'BinovoElkarBackup')); } //$response = new Response($t->trans('Client cloned successfully', array(), 'BinovoElkarBackup')); //$response->headers->set('Content-Type', 'text/plain'); // Custom normalizer //$normalizers[] = new ClientNormalizer(); //$normalizer = new ObjectNormalizer(); $normalizer = new GetSetMethodNormalizer(); $normalizer->setCircularReferenceHandler(function ($object) { return $object->getId(); }); $normalizers[] = $normalizer; $encoders[] = new JsonEncoder(); $encoders[] = new XmlEncoder(); $serializer = new Serializer($normalizers, $encoders); $repository = $this->getDoctrine()->getRepository('BinovoElkarBackupBundle:Client'); $client = $repository->find($idnew); //syslog(LOG_ERR, "Obtaining first job: ".$client->getJobs()[0]->getId()); syslog(LOG_ERR, "Serializing object: " . $client->getName()); $json = $serializer->serialize($client, 'json'); syslog(LOG_ERR, "Output: " . print_r($json, TRUE)); $response = new JsonResponse(array('msg' => $t->trans('Client cloned successfully', array(), 'BinovoElkarBackup'), 'action' => 'callbackClonedClient', 'data' => array($json))); return $response; }
/** * @Route("/profile_attachment/list", name="user_profile_attachment_list") * @Template() * @Security("has_role('ROLE_ECONOMIC')") */ public function profileAttachmentListAction() { $user = $this->get('security.token_storage')->getToken()->getUser(); $em = $this->getDoctrine()->getManager(); $query = $em->createQuery('SELECT p FROM AppBundle:Portfolio p WHERE p.economicUser=:id')->setParameter('id', $user->getId()); $profileAttachments = $query->getResult(); $encoder = new JsonEncoder(); $normalizer = new GetSetMethodNormalizer(); $normalizer->setCircularReferenceHandler(function ($object) { return $object->getId(); }); if ($profileAttachments) { //Audit $audit = new Audit(); $audit->setUsername($user->getUsername()); $audit->setName($user->getFirstname() . " " . $user->getLastname()); $audit->setFunctionType("Economic"); $audit->setEventType("Load profile attachment"); $em->persist($audit); $em->flush(); } $serializer = new Serializer(array($normalizer), array($encoder)); $jsonContent = $serializer->serialize(array('data' => $profileAttachments), 'json'); return new Response($jsonContent); }