コード例 #1
0
 public function scheduleAction()
 {
     $session = new Container('bookingData');
     $request = $this->getRequest();
     if ($request->isPost() || isset($session->bookingData)) {
         $id = (int) $this->params()->fromRoute('id', 0);
         if (!$id) {
             return $this->redirect()->toRoute('practitioner', array('action' => 'list'));
         }
         $bookingModel = new Bookings();
         $model = new Practitioners();
         $slots = $errors = array();
         $address = array();
         $work_address = array();
         /* Validation for booking form start here */
         $filter = new InputFilter();
         $filter->add(array('name' => 'service_location', 'required' => true));
         $filter->add(array('name' => 'service_id', 'required' => true));
         $filter->add(array('name' => 'duration', 'required' => true));
         $filter->add(array('name' => 'service_date', 'required' => true));
         /* Validation for booking form end here */
         $api = new Api();
         $api_url = $this->getServiceLocator()->get('config')['api_url']['value'];
         $res = $api->curl($api_url . "/api/spusers/" . $id . "/", array(), "GET");
         if ($res->getStatusCode() != 200) {
             return $this->redirect()->toRoute('practitioner', array('action' => 'list'));
         }
         $content = json_decode($res->getBody(), true);
         // retrieving work_address
         foreach ($content['work_address'] as $wadd) {
             $work_address[] = json_decode($wadd, true);
         }
         // retrieving services
         foreach ($content['service'] as $service) {
             $service_list[] = $temp = json_decode($service, true);
             $services[$temp['id']] = $temp['duration'];
         }
         $form = new BookingForm($work_address, $service_list);
         $auth = new FrontEndAuth();
         if (!$auth->hasIdentity(4)) {
             if ($request->isPost()) {
                 $form->setInputFilter($filter);
                 $form->setData($request->getPost());
                 if ($form->isValid()) {
                     $session->bookingData = $request->getPost();
                 } else {
                     $errors = $form->getMessages();
                     isset($errors['service_location']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service location') : '';
                     isset($errors['service_id']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service.') : '';
                     isset($errors['duration']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service duration.') : '';
                     isset($errors['service_date']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service date.') : '';
                     return $this->redirect()->toRoute('practitioner', array('action' => 'view', 'id' => $id));
                 }
             }
             $session->sp = $id;
             return $this->redirect()->toRoute('login', array('action' => 'index'));
         }
         if (isset($session->bookingData)) {
             $bookingData = $session->bookingData;
             $form->bind($session->bookingData);
             //$session->offsetUnset('bookingData');
         }
         if ($request->isPost() || isset($session->bookingData)) {
             $form->setInputFilter($filter);
             $request->isPost() ? $form->setData($request->getPost()) : $form->setData($session->bookingData);
             if ($form->isValid()) {
                 // Create a session
                 $bookingsession = new Container('bookingsession');
                 $bookingsession->locationid = $request->isPost() ? $request->getPost('service_location') : $session->bookingData->service_location;
                 $bookingsession->serviceid = $request->isPost() ? $request->getPost('service_id') : $session->bookingData->service_id;
                 $bookingsession->durationid = $request->isPost() ? $request->getPost('duration') : $session->bookingData->duration;
                 $bookingsession->servicedate = $request->isPost() ? $request->getPost('service_date') : $session->bookingData->service_date;
                 $bookingsession->serviceprice = $model->getServicePrice($api_url, $request->isPost() ? $request->getPost('duration') : $session->bookingData->duration);
                 $bookingsession->sp_id = $id;
                 return $this->redirect()->toRoute('booking', array('action' => 'checkout'));
             } else {
                 $errors = $form->getMessages();
                 isset($errors['service_location']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service location') : '';
                 isset($errors['service_id']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service.') : '';
                 isset($errors['duration']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service duration.') : '';
                 isset($errors['service_date']['isEmpty']) ? $this->flashMessenger()->addErrorMessage('Please select service date.') : '';
                 return $this->redirect()->toRoute('practitioner', array('action' => 'view', 'id' => $id));
             }
         }
     } else {
         return $this->redirect()->toRoute('practitioner', array('action' => 'list'));
     }
     exit;
 }