/**
  * Create the fieldset.
  *
  * {@inheritDoc}
  *
  * @return EmployeeFieldset
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     /* @var $serviceLocator \Zend\ServiceManager\AbstractPluginManager */
     $services = $serviceLocator->getServiceLocator();
     $fieldset = new EmployeeFieldset();
     $hydrator = new \Zend\Hydrator\ClassMethods(false);
     //new EntityHydrator();
     $repositories = $services->get('repositories');
     $users = $repositories->get('Auth/User');
     /* @var $users \Auth\Repository\User */
     /* todo: WRITE own Hydrator strategy class */
     $strategy = new ClosureStrategy(function ($object) use($users) {
         if (is_string($object)) {
             return $users->find($object);
         }
         return $object;
     }, function ($data) use($users) {
         if (is_string($data)) {
             $data = $users->find($data);
         }
         return $data;
     });
     /* todo: write own strategy class */
     $permStrategy = new ClosureStrategy(function ($object) {
         /* @var $object \Organizations\Entity\EmployeePermissionsInterface */
         $values = array();
         foreach (array(Perms::JOBS_VIEW, Perms::JOBS_CHANGE, PERMS::JOBS_CREATE, Perms::APPLICATIONS_VIEW, Perms::APPLICATIONS_CHANGE) as $perm) {
             if ($object->isAllowed($perm)) {
                 $values[] = $perm;
             }
         }
         return $values;
     }, function ($data) {
         $permissions = array_reduce($data, function ($c, $i) {
             return $c | $i;
         }, 0);
         return new EmployeePermissions($permissions);
     });
     $hydrator->addStrategy('user', $strategy);
     $hydrator->addStrategy('permissions', $permStrategy);
     $fieldset->setHydrator($hydrator);
     $fieldset->setObject(new \Organizations\Entity\Employee());
     return $fieldset;
 }
 public function findAll()
 {
     //        $select = new \Zend\Db\Sql\Select('contact');
     //        $select->columns(array('prenom', 'nom'));
     //        $select->limit(100);
     //        $rs = $this->gateway->selectWith($select); // TODO ajouter une clause LIMIT
     $rs = $this->gateway->select();
     $tabContacts = $rs->toArray();
     $contacts = array();
     $hydrator = new \Zend\Hydrator\ClassMethods();
     foreach ($tabContacts as $contactAssoc) {
         $contact = new \AddressBook\Entity\Contact();
         $hydrator->hydrate($contactAssoc, $contact);
         //            $contact->setId($contactAssoc['id'])
         //                    ->setPrenom($contactAssoc['prenom'])
         //                    ->setNom($contactAssoc['nom'])
         //                    ->setEmail($contactAssoc['email'])
         //                    ->setTelephone($contactAssoc['telephone']);
         $contacts[] = $contact;
     }
     return $contacts;
 }