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']);
 }
Beispiel #6
0
 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));
 }
Beispiel #9
0
 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]);
 }
Beispiel #11
0
 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]);
 }
Beispiel #12
0
 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);
 }
Beispiel #16
0
 /**
  * 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;
 }
Beispiel #17
0
    /**
     * {@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;
 }
Beispiel #22
0
$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([]);
 }