public function checkoutAction() { $container = new Container('initialized'); if (!is_array($container->checkout)) { $container->checkout = array(); } $container->checkout['/order/checkout'] = 1; $cartContainer = new Container('cart'); $orderContainer = new Container('order'); $orderService = $this->getServiceLocator()->get('ErsBase\\Service\\OrderService'); $order = $orderService->getOrder(); #$this->checkItemPrices(); $em = $this->getServiceLocator()->get('Doctrine\\ORM\\EntityManager'); $paymenttype = $em->getRepository("ErsBase\\Entity\\PaymentType")->findOneBy(array('id' => $order->getPaymentTypeId())); $order->setPaymentType($paymenttype); if (isset($orderContainer->order_id)) { $order = $em->getRepository("ErsBase\\Entity\\Order")->findOneBy(array('id' => $orderContainer->order_id)); if ($order) { return $this->redirect()->toRoute('order', array('action' => 'view', 'hashkey' => $order->getHashkey())); } } $form = new Form\Checkout(); $request = $this->getRequest(); if ($request->isPost()) { $inputFilter = new InputFilter\Checkout(); $form->setInputFilter($inputFilter->getInputFilter()); $form->setData($request->getPost()); foreach ($order->getPackages() as $package) { if (count($package->getItems()) <= 0) { $order->removePackage($package); $em->remove($package); continue; } $participant = $package->getParticipant(); if ($participant->getFirstname() == '' || $participant->getSurname() == '') { $participant = $buyer; } $user = null; if ($participant->getEmail() == '') { $participant->setEmail(null); } else { $user = $em->getRepository("ErsBase\\Entity\\User")->findOneBy(array('email' => $participant->getEmail())); } $role = $em->getRepository("ErsBase\\Entity\\Role")->findOneBy(array('roleId' => 'participant')); if ($user instanceof Entity\User) { $package->setParticipant($user); if (!$user->hasRole($role)) { $user->addRole($role); $em->persist($user); } #$package->setParticipantId($user->getId()); } else { $em->persist($participant); $package->setParticipant($participant); #$package->setParticipantId($participant->getId()); } $country = $em->getRepository("ErsBase\\Entity\\Country")->findOneBy(array('id' => $participant->getCountryId())); if (!$country) { $participant->setCountry(null); } else { $participant->setCountry($country); } } $status = $em->getRepository('ErsBase\\Entity\\Status')->findOneBy(array('value' => 'ordered')); $order->setStatus($status); $em->persist($order); # add log entry $log = new Entity\Log(); $log->setOrder($order); $log->setUser($order->getBuyer()); $log->setData($order->getCode()->getValue() . ' ordered'); $em->persist($log); $em->flush(); $orderContainer->order_id = $order->getId(); $cartContainer->init = 0; $emailService = $this->getServiceLocator()->get('ErsBase\\Service\\EmailService'); $emailService->sendConfirmationEmail($order->getId()); $forrest = new Service\BreadcrumbService(); $forrest->remove('terms'); switch (strtolower($order->getPaymentType()->getType())) { case 'banktransfer': return $this->redirect()->toRoute('payment', array('action' => 'banktransfer', 'hashkey' => $order->getHashkey())); case 'cheque': return $this->redirect()->toRoute('payment', array('action' => 'cheque', 'hashkey' => $order->getHashkey())); case 'creditcard': return $this->redirect()->toRoute('payment', array('action' => 'creditcard', 'hashkey' => $order->getHashkey())); case 'paypal': return $this->redirect()->toRoute('payment', array('action' => 'paypal', 'hashkey' => $order->getHashkey())); break; default: } } $forrest = new Service\BreadcrumbService(); $forrest->set('terms', 'order', array('action' => 'checkout')); /* * Check the buyers email, if it's not valid, delete buyer */ $email_validator = new Validator\EmailAddress(); $buyer = $order->getBuyer(); if ($buyer) { $email = $order->getBuyer()->getEmail(); if (!$email_validator->isValid($email)) { $order->setBuyer(); } } return new ViewModel(array('form' => $form, 'order' => $order)); }