public function __invoke(Request $req, Response $res)
 {
     $school = $req->getAttribute('school');
     if ($req->isPost()) {
         $this->appFormInputFilter->setData(array_merge($req->getParams(), ['school_id' => $school->id, 'submitted_by' => $this->authService->getIdentity()->mail]));
         $isValid = $this->appFormInputFilter->isValid();
         if ($isValid) {
             $data = $this->appFormInputFilter->getValues();
             $appForm = $this->appFormService->submit($data);
             $_SESSION['applicationForm']['appForm'] = $appForm;
             $res = $res->withRedirect($this->successUrl);
             return $res;
         }
         $this->view['form'] = ['is_valid' => $isValid, 'values' => $this->appFormInputFilter->getValues(), 'raw_values' => $this->appFormInputFilter->getRawValues(), 'messages' => $this->appFormInputFilter->getMessages()];
     }
     $loadForm = (bool) $req->getParam('load', false);
     $this->view['choose'] = !$loadForm && !$req->isPost();
     if (!$req->isPost() && $loadForm) {
         if (null !== ($appForm = $this->appFormService->findSchoolApplicationForm($school->id))) {
             $this->view['form'] = ['values' => $appForm];
         }
     }
     $labs = $this->labService->getLabsBySchoolId($school->id);
     $res = $this->view->render($res, 'application_form/form.twig', ['lab_choices' => array_map(function ($lab) {
         return ['value' => $lab['id'], 'label' => $lab['name']];
     }, $labs), 'type_choices' => array_map(function ($category) {
         return ['value' => $category['id'], 'label' => $category['name']];
     }, $this->assetsService->getAllItemCategories())]);
     return $res;
 }
 /**
  * Validates the attributes according to the configuration and throws an exception in case of invalid input.
  * 
  * @param array $attributes
  * @throws Exception\InvalidInputException
  */
 public function filterValues(array $attributes)
 {
     $this->inputFilter->setData($attributes);
     if (!$this->inputFilter->isValid()) {
         throw new Exception\InvalidInputException($this->inputFilter->getMessages());
     }
     return $this->inputFilter->getValues();
 }
Exemple #3
0
 /**
  * @param BookEntity           $bookEntity
  * @param InputFilterInterface $filter
  *
  * @throws \LogicException
  * @return BookEntity
  */
 public function update(BookEntity $bookEntity, InputFilterInterface $filter)
 {
     if (!$filter->isValid()) {
         throw new \LogicException('Form is not valid!');
     }
     $data = $filter->getValues();
     $bookEntity = $this->bookRepository->hydrate($bookEntity, $data);
     $this->bookRepository->save($bookEntity);
     return $bookEntity;
 }
Exemple #4
0
 /**
  * Initialize instance
  * 
  * @param InputFilterInterface $inputFilter
  * @param string $variables
  * @param string $options
  */
 public function __construct(InputFilterInterface $inputFilter, $variables = null, $options = null)
 {
     parent::__construct($variables, $options);
     $this->setVariable('isValid', $inputFilter->isValid());
     $messages = $inputFilter->getMessages();
     $inputs = array();
     foreach ($inputFilter->getValues() as $name => $value) {
         $inputs[$name] = array('value' => $value, 'messages' => array_key_exists($name, $messages) ? $messages[$name] : array());
     }
     $this->setVariable('inputs', $inputs);
 }
Exemple #5
0
 /**
  * Execute the request
  *
  * @param  MvcEvent $e
  * @return ListViewModelInterface
  */
 public function onDispatch(MvcEvent $e)
 {
     if ($this->inputFilter) {
         $this->inputFilter->setData($this->query);
         if ($this->inputFilter->isValid()) {
             $validData = $this->inputFilter->getValues();
             $criteria = $this->repository->createCriteria($validData);
             $collection = $this->repository->findMany($criteria);
             $this->viewModel->setCollection($collection);
             $this->viewModel->setInputData($validData);
         } else {
             $this->viewModel->setErrors($this->inputFilter->getMessages());
             $this->viewModel->setInputData($this->query);
         }
     } else {
         $criteria = $this->repository->createCriteria($this->query);
         $collection = $this->repository->findMany($criteria);
         $this->viewModel->setCollection($collection);
         $this->viewModel->setInputData($this->query);
     }
     $e->setResult($this->viewModel);
     return $this->viewModel;
 }
Exemple #6
0
 public function getValues()
 {
     return $this->inputFilter->getValues();
 }
 public function updateInputFilter(InputFilterInterface $addInputFilter, $fieldsetName)
 {
     $inputFilter = $this->getInputFilter();
     if (!in_array($fieldsetName, array_keys($inputFilter->getInputs()))) {
         throw new \Exception("Sorry, {$fieldsetName} is invalid fieldset name", null, null);
     }
     foreach ($addInputFilter->getValues() as $key => $value) {
         $this->addInput($addInputFilter->get($key), $fieldsetName);
     }
 }
Exemple #8
0
 /**
  * validateUser
  *
  * @param User                 $requestUser requestUser
  * @param InputFilterInterface $inputFilter inputFilter
  *
  * @return Result
  */
 public function validateUser(User $requestUser, InputFilterInterface $inputFilter)
 {
     $validUser = new User();
     $validUser->populate($requestUser);
     $inputFilter->setData($validUser);
     if ($inputFilter->isValid()) {
         $validUser->populate($inputFilter->getValues());
         return new Result($validUser);
     } else {
         $result = new Result($validUser, Result::CODE_FAIL, 'User input not valid');
         foreach ($inputFilter->getInvalidInput() as $error) {
             $msg = $error->getName() . ': ';
             $errs = $error->getMessages();
             foreach ($errs as $key => $val) {
                 $result->setMessage($msg .= "{$val} ({$key})");
             }
         }
         return $result;
     }
 }
 public function __invoke(Request $req, Response $res)
 {
     $school = $req->getAttribute('school');
     if ($req->isPost()) {
         $reqParams = $req->getParams();
         array_splice($reqParams['items'], 0, 0);
         $this->appFormInputFilter->setData(array_merge($reqParams, ['school_id' => $school->id, 'submitted_by' => $this->authService->getIdentity()->mail]));
         $isValid = $this->appFormInputFilter->isValid();
         if ($isValid) {
             $data = $this->appFormInputFilter->getValues();
             $appForm = $this->appFormService->submit($data);
             $_SESSION['applicationForm']['appForm'] = $appForm;
             $res = $res->withRedirect($this->successUrl);
             return $res;
         }
         $this->view['form'] = ['is_valid' => $isValid, 'values' => $this->appFormInputFilter->getValues(), 'raw_values' => $this->appFormInputFilter->getRawValues(), 'messages' => $this->appFormInputFilter->getMessages()];
     }
     $loadForm = (bool) $req->getParam('load', false);
     $this->view['choose'] = !$loadForm && !$req->isPost();
     if (!$req->isPost() && $loadForm) {
         // take care of new options in applications and migrate existing ones
         if (null !== ($appForm = $this->appFormService->findSchoolApplicationForm($school->id))) {
             /**
              * Do mapping of old items to new only if items do exist (old form) 
              * and the map is available at the app settings.
              * TODO: Only one version migrations are supported. If the old items are
              * two or more versions older, they will not be handled.
              */
             // get the existing (db) application form version
             $items_version = $this->version;
             if (isset($appForm['items']) && \count($appForm['items']) > 0) {
                 $items_version = array_values($appForm['items'])[0]['version'];
             }
             if ($this->version != $items_version && isset($appForm['items']) && isset($this->container['settings']['application_form']['itemcategory']['map']) && $this->container['settings']['application_form']['itemcategory']['map']['fromversion'] == $items_version && $this->container['settings']['application_form']['itemcategory']['map']['toversion'] == $this->version && isset($this->container['settings']['application_form']['itemcategory']['map']['items'])) {
                 // if map exists for this version, use it
                 $items_map = $this->container['settings']['application_form']['itemcategory']['map']['items'];
                 $appForm['items'] = array_map(function ($item) use($items_map) {
                     $migrate_values = [];
                     if (isset($items_map[$item['itemcategory_id']]) && intval($items_map[$item['itemcategory_id']]) > 0) {
                         $migrate_values = ['itemcategory_prev' => $item['itemcategory_id'], 'itemcategory_id_prev' => $item['itemcategory_id'], 'itemcategory_id' => intval($items_map[$item['itemcategory_id']])];
                     } else {
                         $migrate_values = ['itemcategory_prev' => '', 'itemcategory_id_prev' => -1];
                     }
                     $migrate_values['prev_form_load'] = true;
                     return array_merge($item, $migrate_values);
                 }, $appForm['items']);
             } elseif ($this->version != $items_version && isset($appForm['items']) && isset($this->container['settings']['application_form']['itemcategory']['map']) && ($this->container['settings']['application_form']['itemcategory']['map']['fromversion'] != $items_version || $this->container['settings']['application_form']['itemcategory']['map']['toversion'] != $this->version)) {
                 // if map does not exist for this version, notify user
                 $items_map = $this->container['settings']['application_form']['itemcategory']['map']['items'];
                 $appForm['items'] = array_map(function ($item) use($items_map) {
                     $migrate_values = ['itemcategory_prev' => '', 'itemcategory_id_prev' => -2, 'prev_form_load' => true];
                     return array_merge($item, $migrate_values);
                 }, $appForm['items']);
             }
             $this->view['form'] = ['values' => $appForm];
         }
     }
     $labs = $this->labService->getLabsBySchoolId($school->id);
     $res = $this->view->render($res, 'application_form/form.twig', ['lab_choices' => array_map(function ($lab) {
         return ['value' => $lab['id'], 'label' => $lab['name']];
     }, $labs), 'type_choices' => array_map(function ($category) {
         return ['value' => $category['id'], 'label' => $category['name']];
     }, $this->assetsService->getAllItemCategories($this->version))]);
     return $res;
 }