This does set the i18n locale as well as the Translatable or Fluent locale (if any of these modules is installed)
public static install_locale ( string $locale ) | ||
$locale | string | the locale to install |
/** * Update the cart using data collected */ public function updatecart($data, $form) { $items = $this->cart->Items(); $updatecount = $removecount = 0; $request = $this->getRequest(); $order = ShoppingCart::curr(); if ($request && $request->isAjax() && $order) { ShopTools::install_locale($order->Locale); } $messages = array(); if (isset($data['Items']) && is_array($data['Items'])) { foreach ($data['Items'] as $itemid => $fields) { $item = $items->byID($itemid); if (!$item) { continue; } //delete lines if (isset($fields['Remove']) || isset($fields['Quantity']) && (int) $fields['Quantity'] <= 0) { $items->remove($item); $removecount++; continue; } //update quantities if (isset($fields['Quantity']) && ($quantity = Convert::raw2sql($fields['Quantity']))) { $item->Quantity = $quantity; } //update variations if (isset($fields['ProductVariationID']) && ($id = Convert::raw2sql($fields['ProductVariationID']))) { if ($item->ProductVariationID != $id) { $item->ProductVariationID = $id; } } //TODO: make updates through ShoppingCart class //TODO: combine with items that now match exactly //TODO: validate changes if ($item->isChanged()) { $item->write(); $updatecount++; } } } if ($removecount) { $messages['remove'] = _t('CartForm.REMOVED_ITEMS', "Removed {count} items.", "count is the amount that was removed", array('count' => $removecount)); } if ($updatecount) { $messages['updatecount'] = _t('CartForm.UPDATED_ITEMS', "Updated {count} items.", "count is the amount that was updated", array('count' => $updatecount)); } if (count($messages)) { $form->sessionMessage(implode(" ", $messages), "good"); } $this->extend('updateCartFormResponse', $request, $response, $form); return $response ? $response : $this->controller->redirectBack(); }
public function addtocart($data, $form) { if ($buyable = $this->getBuyable($data)) { $cart = ShoppingCart::singleton(); $request = $this->getRequest(); $order = $cart->current(); if ($request && $request->isAjax() && $order) { ShopTools::install_locale($order->Locale); } $saveabledata = !empty($this->saveablefields) ? Convert::raw2sql(array_intersect_key($data, array_combine($this->saveablefields, $this->saveablefields))) : $data; $quantity = isset($data['Quantity']) ? (int) $data['Quantity'] : 1; $cart->add($buyable, $quantity, $saveabledata); if (!ShoppingCart_Controller::config()->direct_to_cart_page) { $form->SessionMessage($cart->getMessage(), $cart->getMessageType()); } $this->extend('updateAddToCart', $form, $buyable); $this->extend('updateAddProductFormResponse', $request, $response, $buyable, $quantity, $form); return $response ? $response : ShoppingCart_Controller::direct($cart->getMessageType()); } }
/** * Adds a given product to the cart. If a hidden field is passed * (ValidateVariant) then simply a validation of the user including that * product is done and the users cart isn't actually changed. * * @return mixed */ public function addtocart($data, $form) { if ($variation = $this->getBuyable($data)) { $quantity = isset($data['Quantity']) && is_numeric($data['Quantity']) ? (int) $data['Quantity'] : 1; $cart = ShoppingCart::singleton(); $request = $this->getRequest(); $order = $cart->current(); if ($request && $request->isAjax() && $order) { ShopTools::install_locale($order->Locale); } // if we are in just doing a validation step then check if ($this->request->requestVar('ValidateVariant')) { $message = ''; $success = false; try { $success = $variation->canPurchase(null, $data['Quantity']); } catch (ShopBuyableException $e) { $message = get_class($e); // added hook to update message $this->extend('updateVariationAddToCartMessage', $e, $message, $variation); } $ret = array('Message' => $message, 'Success' => $success, 'Price' => $variation->dbObject('Price')->TrimCents()); $this->extend('updateVariationAddToCartAjax', $ret, $variation, $form); return json_encode($ret); } if ($cart->add($variation, $quantity)) { $form->sessionMessage(_t('ShoppingCart.ITEMADD', "Item has been added successfully."), "good"); } else { $form->sessionMessage($cart->getMessage(), $cart->getMessageType()); } } else { $variation = null; $form->sessionMessage(_t('VariationForm.VARIATION_NOT_AVAILABLE', "That variation is not available, sorry."), "bad"); //validation fail } $this->extend('updateVariationAddToCart', $form, $variation); $this->extend('updateVariationFormResponse', $request, $response, $variation, $quantity, $form); return $response ? $response : ShoppingCart_Controller::direct(); }
protected function updateLocale($request) { $order = $this->cart->current(); if ($request && $request->isAjax() && $order) { ShopTools::install_locale($order->Locale); } }
/** * Takes an order from being a cart to awaiting payment. * * @param Member $member - assign a member to the order * * @return boolean - success/failure */ public function placeOrder() { if (!$this->order) { $this->error(_t("OrderProcessor.NoOrderStarted", "A new order has not yet been started.")); return false; } if (!$this->canPlace($this->order)) { //final cart validation return false; } if ($this->order->Locale) { ShopTools::install_locale($this->order->Locale); } // recalculate order to be sure we have the correct total $this->order->calculate(); if (ShopTools::DBConn()->supportsTransactions()) { ShopTools::DBConn()->transactionStart(); } //update status if ($this->order->TotalOutstanding(false)) { $this->order->Status = 'Unpaid'; } else { $this->order->Status = 'Paid'; } if (!$this->order->Placed) { $this->order->Placed = SS_Datetime::now()->Rfc2822(); //record placed order datetime if ($request = Controller::curr()->getRequest()) { $this->order->IPAddress = $request->getIP(); //record client IP } } // Add an error handler that throws an exception upon error, so that we can catch errors as exceptions // in the following block. set_error_handler(function ($severity, $message, $file, $line) { throw new ErrorException($message, 0, $severity, $file, $line); }, E_ALL & ~(E_STRICT | E_NOTICE)); try { //re-write all attributes and modifiers to make sure they are up-to-date before they can't be changed again $items = $this->order->Items(); if ($items->exists()) { foreach ($items as $item) { $item->onPlacement(); $item->write(); } } $modifiers = $this->order->Modifiers(); if ($modifiers->exists()) { foreach ($modifiers as $modifier) { $modifier->write(); } } //add member to order & customers group if ($member = Member::currentUser()) { if (!$this->order->MemberID) { $this->order->MemberID = $member->ID; } $cgroup = ShopConfig::current()->CustomerGroup(); if ($cgroup->exists()) { $member->Groups()->add($cgroup); } } //allow decorators to do stuff when order is saved. $this->order->extend('onPlaceOrder'); $this->order->write(); } catch (Exception $ex) { // Rollback the transaction if an error occurred if (ShopTools::DBConn()->supportsTransactions()) { ShopTools::DBConn()->transactionRollback(); } $this->error($ex->getMessage()); return false; } finally { // restore the error handler, no matter what restore_error_handler(); } // Everything went through fine, complete the transaction if (ShopTools::DBConn()->supportsTransactions()) { ShopTools::DBConn()->transactionEnd(); } //remove from session $cart = ShoppingCart::curr(); if ($cart && $cart->ID == $this->order->ID) { // clear the cart, but don't write the order in the process (order is finalized and should NOT be overwritten) ShoppingCart::singleton()->clear(false); } //send confirmation if configured and receipt hasn't been sent if (self::config()->send_confirmation && !$this->order->ReceiptSent) { $this->notifier->sendConfirmation(); } //notify admin, if configured if (self::config()->send_admin_notification) { $this->notifier->sendAdminNotification(); } // Save order reference to session OrderManipulation::add_session_order($this->order); return true; //report success }
/** * Takes an order from being a cart to awaiting payment. * * @param Member $member - assign a member to the order * * @return boolean - success/failure */ public function placeOrder() { if (!$this->order) { $this->error(_t("OrderProcessor.NULL", "A new order has not yet been started.")); return false; } if (!$this->canPlace($this->order)) { //final cart validation return false; } if ($this->order->Locale) { ShopTools::install_locale($this->order->Locale); } //remove from session $cart = ShoppingCart::curr(); if ($cart && $cart->ID == $this->order->ID) { ShoppingCart::singleton()->clear(); } //update status if ($this->order->TotalOutstanding()) { $this->order->Status = 'Unpaid'; } else { $this->order->Status = 'Paid'; } if (!$this->order->Placed) { $this->order->Placed = SS_Datetime::now()->Rfc2822(); //record placed order datetime if ($request = Controller::curr()->getRequest()) { $this->order->IPAddress = $request->getIP(); //record client IP } } //re-write all attributes and modifiers to make sure they are up-to-date before they can't be changed again $items = $this->order->Items(); if ($items->exists()) { foreach ($items as $item) { $item->onPlacement(); $item->write(); } } $modifiers = $this->order->Modifiers(); if ($modifiers->exists()) { foreach ($modifiers as $modifier) { $modifier->write(); } } //add member to order & customers group if ($member = Member::currentUser()) { if (!$this->order->MemberID) { $this->order->MemberID = $member->ID; } $cgroup = ShopConfig::current()->CustomerGroup(); if ($cgroup->exists()) { $member->Groups()->add($cgroup); } } //allow decorators to do stuff when order is saved. $this->order->extend('onPlaceOrder'); $this->order->write(); //send confirmation if configured and receipt hasn't been sent if (self::config()->send_confirmation && !$this->order->ReceiptSent) { $this->notifier->sendConfirmation(); } //notify admin, if configured if (self::config()->send_admin_notification) { $this->notifier->sendAdminNotification(); } // Save order reference to session OrderManipulation::add_session_order($this->order); return true; //report success }