public function execute() { $hydrator = new DoctrineHydrator($this->getEntityManager()); $dataPrepared = []; foreach ($this->getData() as $row) { $dataExtracted = $hydrator->extract($row); $rowExtracted = []; foreach ($this->getColumns() as $column) { /* @var $column \ZfcDatagrid\Column\AbstractColumn */ $part1 = $column->getSelectPart1(); $part2 = $column->getSelectPart2(); if (null === $part2) { if (isset($dataExtracted[$part1])) { $rowExtracted[$column->getUniqueId()] = $dataExtracted[$part1]; } } else { // NESTED if (isset($dataExtracted[$part1])) { $dataExtractedNested = $hydrator->extract($dataExtracted[$part1]); if (isset($dataExtractedNested[$part2])) { $rowExtracted[$column->getUniqueId()] = $dataExtractedNested[$part2]; } } } } $dataPrepared[] = $rowExtracted; } $source = new SourceArray($dataPrepared); $source->setColumns($this->getColumns()); $source->setSortConditions($this->getSortConditions()); $source->setFilters($this->getFilters()); $source->execute(); $this->setPaginatorAdapter($source->getPaginatorAdapter()); }
public function getDepartmentsAction() { $results = []; $departmentId = $this->params('id', false); try { $UserContainer = new Container('User'); $em = $this->getEntityManager(); if ($departmentId === false) { $restrictedBy['parent'] = null; if (empty($UserContainer->id)) { $restrictedBy['isActive'] = true; } $departments = $em->getRepository('AdministrativeStructure\\Entity\\Department')->findBy($restrictedBy); } else { if (empty($UserContainer->id)) { $departments = $em->getReference('AdministrativeStructure\\Entity\\Department', $departmentId)->getActiveChildren()->toArray(); } else { $departments = $em->getReference('AdministrativeStructure\\Entity\\Department', $departmentId)->getChildren()->toArray(); } } if (count($departments) > 0) { $hydrator = new DoctrineHydrator($em); foreach ($departments as $dep) { $extractedArray = $hydrator->extract($dep); $extractedArray['numberOfChildren'] = $dep->getNumberOfChildren(); $results[] = $extractedArray; } } return new JsonModel(['message' => null, 'results' => $results]); } catch (Exception $ex) { return new JsonModel(['message' => $ex->getMessage(), 'results' => []]); } }
/** * Extract entity into a flat array where references become getId() * then hydrate the auditEntity with those values. * Return the array of values for identifier processing. * * The auditing entity may have fields the target does not. To handle changes * to the data model without losing data fields are revisioned. All fields * remain in the audit database but only those fields which are active will be * audited here. */ private function hydrateAuditEntityFromTargetEntity($auditEntity, $entity) : array { // Get list of active fields $queryBuilder = $this->getAuditObjectManager()->createQueryBuilder(); $queryBuilder2 = $this->getAuditObjectManager()->createQueryBuilder(); $queryBuilder->select('field.name')->from('ZF\\Doctrine\\Audit\\Entity\\Field', 'field')->innerJoin('field.fieldRevision', 'fieldRevision')->innerJoin('fieldRevision.fieldStatus', 'fieldStatus')->andWhere('fieldStatus.name = :fieldStatusName')->andWhere($queryBuilder->expr()->in('fieldRevision.id', $queryBuilder2->select('MAX(fieldRevision2.id)')->from('ZF\\Doctrine\\Audit\\Entity\\FieldRevision', 'fieldRevision2')->innerJoin('fieldRevision2.field', 'field2')->innerJoin('field2.targetEntity', 'targetEntity')->andWhere('targetEntity.name = :targetEntity')->groupBy('field2.id')->getQuery()->getDql()))->setParameter('fieldStatusName', 'active')->setParameter('targetEntity', get_class($entity)); $auditFields = array_column($queryBuilder->getQuery()->getArrayResult(), 'name'); $properties = array(); $hydrator = new DoctrineHydrator($this->getObjectManager(), true); $auditHydrator = new DoctrineHydrator($this->getAuditObjectManager(), false); foreach ($hydrator->extract($entity) as $key => $value) { if (gettype($value) == 'object' and method_exists($value, 'getId')) { // Set values to getId for classes $value = $value->getId(); } elseif ($value instanceof \Doctrine\ORM\PersistentCollection) { // If a property is an object we probably are not mapping that to // a field. Do no special handing... continue; } elseif ($value instanceof \DateTime) { // DateTime is special and ok as-is } elseif (gettype($value) == 'object' and !method_exists($value, 'getId')) { throw new Exception(get_class($value) . " does not have a getId function"); } if (in_array($key, $auditFields)) { $properties[$key] = $value; } } $auditHydrator->hydrate($properties, $auditEntity); return $properties; }
public function getForm($entity = null) { if ($entity == null) { $entity = new NotificationEntity(); } $hydrator = new DoctrineObjectHydrator($this->getEntityManager()); $form = $this->getServiceLocator()->get('Mailer\\Form\\Notification'); $data = $hydrator->extract($entity); $localesData = array(); foreach ($data['locale'] as $translation) { $localesData[$translation->getLanguageId()] = $hydrator->extract($translation); unset($localesData[$translation->getLanguageId()]['mailer']); } $data['locale'] = $localesData; $form->setData($data); return $form; }
public function testExtractByValueUsesNamingStrategy() { $this->configureObjectManagerForNamingStrategyEntity(); $name = 'Bar'; $this->hydratorByValue->setNamingStrategy(new UnderscoreNamingStrategy()); $data = $this->hydratorByValue->extract(new NamingStrategyEntity($name)); $this->assertEquals($name, $data['camel_case']); }
public function extract($object) { $result = parent::extract($object); if (isset($_REQUEST['permissions'])) { $result['_embedded']['permissions'] = $this->getPermissions($object); } return $result; }
public function testHydratingObjectsWithStrategy() { $data = array('username' => 'foo', 'password' => 'bar'); $modifiedData = array('username' => 'MODIFIED', 'password' => 'bar'); $this->hydrator->addStrategy('username', new TestAsset\HydratorStrategy()); $object = $this->hydrator->hydrate($data, new stdClass()); $extract = $this->hydrator->extract($object); $this->assertEquals($modifiedData, $extract); }
public function loadAction() { $userId = $this->params()->fromRoute('user_id'); $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); $userRepository = $em->getRepository(User::class); $user = $userRepository->find($userId); $hydrator = new DoctrineObject($em, User::class); return new JsonModel($hydrator->extract($user)); }
public function testCanHydrateEntity() { $hydrator = new DoctrineObject($this->entityManager, 'Program\\Entity\\Roadmap'); $this->roadmap = $hydrator->hydrate($this->roadmapData, new Roadmap()); $dataArray = $hydrator->extract($this->roadmap); $this->assertSame($this->roadmapData['roadmap'], $dataArray['roadmap']); $this->assertSame($this->roadmapData['description'], $dataArray['description']); $this->assertSame($this->roadmapData['dateReleased'], $dataArray['dateReleased']); }
public function revisionEntityValueAction() { $revisionEntity = $this->getObjectManager()->getRepository('ZF\\Doctrine\\Audit\\Entity\\RevisionEntity')->find($this->params()->fromRoute('revision_entity_id')); $auditEntity = $this->getObjectManager()->getRepository($revisionEntity->getTargetEntity()->getAuditEntity()->getName())->findOneBy(['revisionEntity' => $revisionEntity]); $hydrator = new DoctrineHydrator($this->getObjectManager(), false); $data = $hydrator->extract($auditEntity); unset($data['revisionEntity']); ksort($data); return new ViewModel(['payload' => $data]); }
public function indexAction() { $user = $this->identity(); $em = $this->getServiceLocator()->get('Doctrine\\ORm\\EntityManager'); $hydrator = new DoctrineObject($em, get_class($user)); $data = $hydrator->extract($user); $form = new RegisterForm(); $form->bind(new ArrayObject($data)); return new ViewModel(['form' => $form]); }
public function testCanHydrateEntity() { $hydrator = new DoctrineObject($this->entityManager, 'Program\\Entity\\Domain'); $this->domain = $hydrator->hydrate($this->domainData, new Domain()); $dataArray = $hydrator->extract($this->domain); $this->assertSame($this->domainData['domain'], $dataArray['domain']); $this->assertSame($this->domainData['roadmap']->getId(), $dataArray['roadmap']->getId()); $this->assertSame($this->domainData['description'], $dataArray['description']); $this->assertSame($this->domainData['color'], $dataArray['color']); $this->assertSame($this->domainData['mainId'], $dataArray['mainId']); }
public function testExtractWithPropertyNameFilterByReference() { $entity = new Asset\SimpleEntity(); $entity->setId(2); $entity->setField('foo', false); $filter = new Filter\PropertyName(array('id'), false); $this->configureObjectManagerForSimpleEntity(); $this->hydratorByReference->addFilter('propertyname', $filter); $data = $this->hydratorByReference->extract($entity); $this->assertEquals(2, $data['id']); $this->assertEquals(array('id'), array_keys($data), 'Only the "id" field should have been extracted.'); }
public function extract($object) { $data = parent::extract($object); $plugins = $this->getPlugins(); /* @var $plugin HydratorPluginInterface */ foreach ($plugins as $plugin) { $pluginExtraction = $plugin->extract($object); if (!empty($pluginExtraction)) { $data = array_merge($data, $pluginExtraction); } } }
public function getList() { $hydrator = new DoctrineObject($this->getEntityManager(), 'Application\\Entity\\Position'); $positionEntities = $this->getEntityManager()->getRepository('Application\\Entity\\Position')->getLastPosition(['timeToExpire' => self::TIME_TO_EXPIRE]); $position = []; foreach ($positionEntities as $entity) { $img = $this->getImageDir() . '' . $entity->getImage(); $entity->setImage($img); $position[] = $hydrator->extract($entity); } return new JsonModel($position); }
/** * display form to let user update some of profile data * * @return ViewModel */ public function indexAction() { $form = new RegisterForm(); $profileLayout = new ViewModel(); $profileLayout->setTemplate('layout/profile'); $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $user = $this->identity(); $hydrate = new DoctrineObject($em, '\\Application\\Entity\\User'); $userData = $hydrate->extract($user); $form->bind(new ArrayObject($userData)); $this->actionView->setVariables(['form' => $form]); return $this->actionView; }
/** * {@inheritdoc} */ public function extract($object) { // extract object $array = parent::extract($object); // extract collection properties using strategies foreach ($array as $name => $values) { $computedFieldName = $this->computeHydrateFieldName($name); if ($this->hasStrategy($computedFieldName)) { $method = 'get' . ucfirst($computedFieldName); $array[$name] = $this->getStrategy($computedFieldName)->extract($object->$method()); } } return $array; }
public function searchByZipcodeAction() { $request = $this->getRequest(); try { if ($request->isPost()) { $data = $request->getPost(); $em = $this->getEntityManager(); $address = $em->getRepository('Recruitment\\Entity\\Address')->findOneBy(array('addressPostalCode' => $data['zipcode'])); $hydrator = new DoctrineHydrator($em); $whitelist = array('addressState', 'addressCity', 'addressNeighborhood', 'addressStreet'); $result = $address !== null ? array_intersect_key($hydrator->extract($address), array_flip($whitelist)) : null; return new JsonModel(array('response' => true, 'data' => $result)); } return new JsonModel(array('response' => false, 'msg' => 'Requisição sem dados')); } catch (Exception $ex) { return new JsonModel(['response' => false, 'msg' => $ex->getMessage()]); } }
public function testExtractOneToManyAssociationByReference() { // When using extraction by reference, it won't use the public API of the entity to retrieve values (getters) $toMany1 = new Asset\SimpleEntity(); $toMany1->setId(2); $toMany1->setField('foo', false); $toMany2 = new Asset\SimpleEntity(); $toMany2->setId(3); $toMany2->setField('bar', false); $collection = new ArrayCollection(array($toMany1, $toMany2)); $entity = new Asset\OneToManyEntity(); $entity->setId(4); $entity->addEntities($collection); $this->configureObjectManagerForOneToManyEntity(); $data = $this->hydratorByReference->extract($entity); $this->assertEquals(4, $data['id']); $this->assertInstanceOf('Doctrine\\Common\\Collections\\Collection', $data['entities']); $this->assertEquals($toMany1->getId(), $data['entities'][0]->getId()); $this->assertSame($toMany1, $data['entities'][0]); $this->assertEquals($toMany2->getId(), $data['entities'][1]->getId()); $this->assertSame($toMany2, $data['entities'][1]); }
/** * {@inheritDoc} */ public function extract($object) { return array_merge(parent::extract($object), $this->extractFromPlugins($object)); }
public function executeDetail($filterValue = array()) { $hydrator = new DoctrineHydrator($this->getEntityManager()); $qb = $this->getData(); if ($qb instanceof \Doctrine\ORM\QueryBuilder) { $alias = current($qb->getRootAliases()); while (list($chiave, $valore) = each($filterValue)) { $qb->andWhere($alias . '.' . $chiave . ' = ' . $valore); } $row = $this->getData()->getQuery()->getResult(); if (is_array($row[0])) { $dataExtracted = $row[0]; } else { $dataExtracted = $hydrator->extract($row[0]); } } return $dataExtracted; }
$app = new Application(); $app['debug'] = true; $app->register(new JsonRequestServiceProvider()); $app->register(new DoctrineServiceProvider(), require_once 'app/config/db.php'); $app->register(new DoctrineOrmServiceProvider(), require_once 'app/config/db.orm.php'); $app->get('/posts', function () use($app) { $em = $app['orm.em']; $results = $em->getRepository('App\\Entities\\Post')->findAll(); $hydrator = new CollectionExtractor(new DoctrineHydrator($em)); return $app->json($hydrator->extract($results)); }); $app->get('/posts/{id}', function ($id) use($app) { $em = $app['orm.em']; $post = $em->getRepository('App\\Entities\\Post')->find($id); $hydrator = new DoctrineHydrator($em); return $app->json($hydrator->extract($post)); }); $app->post('/posts', function (Request $request) use($app) { $em = $app['orm.em']; $post = new Post(); $post->setTitle($request->get('title')); $post->setContent($request->get('content')); $em->persist($post); $em->flush(); return $app->json($hydrator->extract($post)); }); $app->put('/posts/{id}', function ($id, Request $request) use($app) { $em = $app['orm.em']; $post = $em->getRepository('App\\Entities\\Post')->find($id); $post->setTitle($request->get('title')); $post->setContent($request->get('content'));
public function eventsAction() { $id = $this->params()->fromRoute('id'); $em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); $calendar = $em->getRepository(Calendar::class)->find($id); if ($calendar && $this->getRequest()->isPost()) { try { $data = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY); if (!isset($data['action'])) { return new ApiProblemResponse(new ApiProblem(404, 'Not Found Action')); } switch ($data['action']) { case 'save': $calendarEvent = new CalendarEvent(); $calendarEvent->setStartAt(new \DateTime($data['data']['startAt']))->setEndAt(new \DateTime($data['data']['endAt']))->setEmail($data['data']['email'])->setName($data['data']['name'])->setNotes($data['data']['notes'])->setCalendar($calendar); $em->persist($calendarEvent); $em->flush(); try { $date = new \DateTime($data['data']['startAt']); $mail = new Mail\Message(); $mail->setBody($calendar->getUser()->getDisplayName() . ' will be ready start conversation at ' . $date->format("m/d/Y H:i")); $mail->setFrom('*****@*****.**', 'Calendar OpsDesk'); $mail->addTo($data['data']['email'], $data['data']['name']); $mail->setSubject('You created meet with ' . $calendar->getUser()->getDisplayName()); $mail->addReplyTo($calendar->getUser()->getEmail()); $transport = new Mail\Transport\Sendmail(); $transport->send($mail); $mail = new Mail\Message(); $mail->setBody($data['data']['name'] . ' will be ready start conversation at ' . $date->format("m/d/Y H:i")); $mail->setFrom('*****@*****.**', 'Calendar OpsDesk'); $mail->addTo($calendar->getUser()->getEmail(), $data['data']['name']); $mail->setSubject('New booking with ' . $data['data']['name']); $mail->addReplyTo($data['data']['email']); $transport = new Mail\Transport\Sendmail(); $transport->send($mail); } catch (Exception $e) { } break; case 'list': $hydrator = new DoctrineObject($em, true); $expr = Criteria::expr(); $criteria = Criteria::create(); $criteria->where($expr->andX($expr->gte('startAt', new \DateTime($data['startAt'])), $expr->lte('endAt', new \DateTime($data['endAt'])))); return new JsonModel(array_map(function ($event) use($hydrator) { return $hydrator->extract($event); }, $calendar->getEventsCollection()->matching($criteria)->getValues())); break; default: return new ApiProblemResponse(new ApiProblem(404, 'Not Found Action')); } } catch (Exception $e) { return new ApiProblemResponse(new ApiProblem(503, $e->getMessage())); } } return new JsonModel([]); }
/** * Retorna informações do candidato ao processo seletivo de alunos. * * @return \Recruitment\Controller\JsonModel */ public function getStudentInfoAction() { $registrationId = $this->params('id', false); if ($registrationId) { try { $em = $this->getEntityManager(); $hydrator = new DoctrineHydrator($em); $registration = $em->find('Recruitment\\Entity\\Registration', $registrationId); // informações de inscrição $data = $hydrator->extract($registration); $data['registrationNumber'] = $registration->getRegistrationNumber(); // informações pessoais $person = $registration->getPerson(); $data['person'] = $hydrator->extract($person); // informações de endereço $data['person']['addresses'] = []; $addresses = $person->getAddresses(); foreach ($addresses as $addr) { $data['person']['addresses'][] = $hydrator->extract($addr); } // informações de parentes (para menores de idade) // pega apenas o primeiro $relatives = $person->getRelatives(); $data['person']['relatives'] = []; if (count($relatives) > 0) { $data['person']['relatives'][] = $hydrator->extract($relatives[0]); } //informações da pré-entrevista $preInterview = $registration->getPreInterview(); if ($preInterview !== null) { $data['preInterview'] = $hydrator->extract($preInterview); // informações sobre as despesas da família $data['preInterview']['familyExpenses'] = []; $familyExpenses = $preInterview->getFamilyExpenses(); foreach ($familyExpenses as $familyExpense) { $data['preInterview']['familyExpenses'][] = $hydrator->extract($familyExpense); } // informações sobre os bens da família $data['preInterview']['familyGoods'] = []; $familyGoods = $preInterview->getFamilyGoods(); foreach ($familyGoods as $familyGood) { $data['preInterview']['familyGoods'][] = $hydrator->extract($familyGood); } // informações sobre a saúde dos familiares $data['preInterview']['familyHealth'] = []; $familyHealth = $preInterview->getFamilyHealth(); foreach ($familyHealth as $individualHealth) { $data['preInterview']['familyHealth'][] = $hydrator->extract($individualHealth); } // informações sobre a renda da família $data['preInterview']['familyIncome'] = []; $familyIncome = $preInterview->getFamilyIncome(); foreach ($familyIncome as $incomeSource) { $data['preInterview']['familyIncome'][] = $hydrator->extract($incomeSource); } // informações sobre os membros da família $data['preInterview']['familyMembers'] = []; $familyMembers = $preInterview->getFamilyMembers(); foreach ($familyMembers as $familyMember) { $data['preInterview']['familyMembers'][] = $hydrator->extract($familyMember); } // informações sobre as propriedades da família $data['preInterview']['familyProperties'] = []; $familyProperties = $preInterview->getFamilyProperties(); foreach ($familyProperties as $familyProperty) { $data['preInterview']['familyProperties'][] = $hydrator->extract($familyProperty); } // informações sobre a infraestrutura do local de moradia $data['preInterview']['infrastructureElements'] = []; $infrastructureElements = $preInterview->getInfrastructureElements(); foreach ($infrastructureElements as $infrastructureElement) { $data['preInterview']['infrastructureElements'][] = $hydrator->extract($infrastructureElement); } } // informações sobre a entrevista $studentInterview = $registration->getStudentInterview(); if ($studentInterview !== null) { $data['studentInterview'] = $hydrator->extract($studentInterview); } return new JsonModel(['info' => $data]); } catch (\Throwable $ex) { return new JsonModel(['message' => $ex->getMessage()]); } } return new JsonModel([]); }