public function setupJson($source = false) { $request = Ajde::app()->getRequest(); // Init vars $name = null; $email = null; $address = null; $zipcode = null; $city = null; $region = null; $country = null; $shipmentMethod = null; $comment = null; if ($source === false) { // Read request $name = $request->getPostParam('name', false); $email = $request->getPostParam('email', false); $address = $request->getPostParam('shipment_address', false); $zipcode = $request->getPostParam('shipment_zipcode', false); $city = $request->getPostParam('shipment_city', false); $region = $request->getPostParam('shipment_region', false); $country = $request->getPostParam('shipment_country', false); $shipmentMethod = $request->getPostParam('shipment_method', false); $comment = $request->getPostParam('comment', false); } else { if ($source instanceof Ajde_User) { // Read user $name = $source->fullname; $email = $source->email; $address = $source->address; $zipcode = $source->zipcode; $city = $source->city; $region = $source->region; $country = $source->country; $shipmentMethod = false; $comment = false; } } // Return when fields are not complete if ($source === false) { if (empty($name) || empty($email) || empty($address) || empty($zipcode) || empty($city) || empty($country)) { return ['success' => false, 'message' => trans('Not all your details are filled out')]; } if (Ajde_Component_String::validEmail($email) === false) { return ['success' => false, 'message' => trans('Please provide a valid e-mail address')]; } if (empty($shipmentMethod)) { return ['success' => false, 'message' => trans('Please choose a shipment method')]; } } // Check for current transaction $transaction = new TransactionModel(); $session = new Ajde_Session('AC.Shop'); if ($session->has('currentTransaction') && $transaction->loadByPK($session->get('currentTransaction'))) { // Edit existing transaction $method = 'save'; } else { // Insert new transaction $method = 'insert'; } // Update transaction info $transaction->name = $name; $transaction->email = $email; $transaction->shipment_address = $address; $transaction->shipment_zipcode = $zipcode; $transaction->shipment_city = $city; $transaction->shipment_region = $region; $transaction->shipment_country = $country; $transaction->shipment_method = $shipmentMethod; $transaction->comment = $comment; // Save info to user if ($user = $this->getLoggedInUser()) { if ($request->hasPostParam('save_details', false)) { $user->address = $address; $user->zipcode = $zipcode; $user->city = $city; $user->region = $region; $user->country = $country; $user->save(); $user->login(); } $transaction->user = $user->getPK(); } // Update shipping total $shipping = new ShippingModel($transaction); $transaction->shipment_cost = 0; if (!empty($shipmentMethod) && $shipping->isAvailable($shipmentMethod)) { $transaction->shipment_cost = $shipping->getMethod($shipmentMethod)->getTotal(); } // Insert new transaction if ($method === 'insert') { if ($transaction->insert()) { $this->updateFromCart($transaction); $session = new Ajde_Session('AC.Shop'); $session->set('currentTransaction', $transaction->getPK()); if (!$transaction->shipment_itemsqty > 0) { return ['success' => false, 'message' => trans('No items added to current order')]; } return ['success' => true]; } return ['success' => false, 'message' => trans('Something went wrong')]; } $transaction->payment_amount = $transaction->shipment_itemstotal + $transaction->shipment_cost; // Update current transaction if ($transaction->save()) { if (!$transaction->shipment_itemsqty > 0) { return ['success' => false, 'message' => trans('No items added to current transaction')]; } return ['success' => true]; } // Everything else failed return ['success' => false, 'message' => trans('Something went wrong')]; }