customerModel = new CustomerModel(); $this->requestMethod = $this->getServerRequestMethod(); $this->arrQueryStringParams = $this->getQueryStringParams(); } public function processAction() { $this->strErrorDesc = ''; try { switch($this->action) { case "select": if (isset($this->arrQueryStringParams['id'])) { $response = $this->selectByIdAction(); } else { $response = $this->selectAction(); } break; case "insert": /*$customerModel->first = $arrQueryStringParams['first']; $customerModel->last = $arrQueryStringParams['last']; $customerModel->email = $arrQueryStringParams['email']; $customerModel->phone = $arrQueryStringParams['phone']; $customerModel->birthday = $arrQueryStringParams['birthday']; $customerModel->street = $arrQueryStringParams['street']; $customerModel->city = $arrQueryStringParams['city']; $customerModel->state = $arrQueryStringParams['state']; $customerModel->zip = $arrQueryStringParams['zip']; $customerModel->loyalty = $arrQueryStringParams['loyalty'];*/ $response = $this->insertCustomer(); /*unset($customerModel->first); unset($customerModel->last); unset($customerModel->email); unset($customerModel->phone); unset($customerModel->birthday); unset($customerModel->street); unset($customerModel->city); unset($customerModel->state); unset($customerModel->zip); unset($customerModel->loyalty);*/ break; case "update": $response = $this->updateCustomer(); /*$arrCustomer = $this->customerModel->updateCustomer($arrQueryStringParams);*/ break; case "delete": /*$arrCustomer = $this->customerModel->deleteCustomer($arrQueryStringParams);*/ $this->customerModel->customerId = $this->arrQueryStringParams['customer_id']; $response = $this->deleteCustomer(); break; default: $strErrorDesc = 'Controller Method not supported for processAction: ' . $action; $strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity'; break; } $responseData = json_encode($response); } catch (Error $e) { $this->strErrorDesc = $e->getMessage().' Something went wrong in processAction! Please contact support.'; $this->strErrorHeader = 'HTTP/1.1 500 Internal Server Error'; } // send output if (!$strErrorDesc) { $this->sendOutput( $responseData, array('Content-Type: application/json', 'HTTP/1.1 200 OK') ); } else { $this->sendOutput(json_encode(array('error' => $strErrorDesc)), array('Content-Type: application/json', $strErrorHeader) ); } } private function selectAction(){ if ($this->checkRequestType('GET') == 'false') { $this->strErrorDesc = 'Request Method not supported for processAction'; $this->strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity'; return; } $this->customerModel->limit = 10; if (isset($this->arrQueryStringParams['limit'])) { $this->customerModel->limit = $this->arrQueryStringParams['limit']; } $response = $this->customerModel->findAllCustomers(); unset($this->customerModel->limit); return $response; } private function selectByIdAction(){ if ($this->checkRequestType('GET') == 'false') { $this->strErrorDesc = 'Request Method not supported for processAction'; $this->strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity'; return; } if (isset($this->arrQueryStringParams['customerId'])) { $this->customerModel->customerId = $this->arrQueryStringParams['customerId']; $response = $this->customerModel->findByCustomerId(); unset($this->customerModel->customerId); } else { return $this->notFoundResponse(); } return $response; } private function checkRequestType($request) { $response = 'false'; if (strtoupper($this->requestMethod) == $request) { $response = 'true'; } return $response; } private function insertCustomer() { if ($this->checkRequestType('POST') == 'false') { $this->strErrorDesc = 'Request Method not supported for processAction'; $this->strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity'; return; } // reads the raw POST data and returns it as a string. $jsonPayload = (array) json_decode(file_get_contents('php://input'), TRUE); if (! $this->validatePerson($jsonPayload)) { return $this->unprocessableEntityResponse(); } $response = $this->customerModel->insertCustomer($jsonPayload); return $response; } private function updateCustomer() { if ($this->checkRequestType('PUT') == 'false') { $this->strErrorDesc = 'Request Method not supported for processAction'; $this->strErrorHeader = 'HTTP/1.1 422 Unprocessable Entity'; return; } if (isset($this->arrQueryStringParams['customerId'])) { $this->customerModel->customerId = $this->arrQueryStringParams['customerId']; $result = $this->customerModel->findByCustomerId(); if (! $result) { return $this->notFoundResponse(); } $input = (array) json_decode(file_get_contents('php://input'), TRUE); if (! $this->validatePerson($input)) { return $this->unprocessableEntityResponse(); } $response = $this->customerModel->updateCustomer($input); unset($this->customerModel->customerId); } else { return $this->notFoundResponse(); } return $response; } private function deleteCustomer() { if (isset($this->arrQueryStringParams['customerId'])) { $this->customerModel->customerId = $this->arrQueryStringParams['customerId']; $result = $this->customerModel->findByCustomerId(); if (! $result) { return $this->notFoundResponse(); } $response = $this->customerModel->deleteCustomer(); unset($this->customerModel->customerId); } else { return $this->notFoundResponse(); } return $response; } private function validatePerson($input) { if (! isset($input['first'])) { return false; } if (! isset($input['last'])) { return false; } return true; } private function unprocessableEntityResponse() { $response['status_code_header'] = 'HTTP/1.1 422 Unprocessable Entity'; $response['body'] = json_encode([ 'error' => 'Invalid input' ]); return $response; } private function notFoundResponse() { $response['status_code_header'] = 'HTTP/1.1 404 Not Found'; $response['body'] = null; return $response; } }