本文整理汇总了PHP中CartRule::autoAddToCart方法的典型用法代码示例。如果您正苦于以下问题:PHP CartRule::autoAddToCart方法的具体用法?PHP CartRule::autoAddToCart怎么用?PHP CartRule::autoAddToCart使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CartRule
的用法示例。
在下文中一共展示了CartRule::autoAddToCart方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: postProcess
/**
* Do whatever you have to before redirecting the customer on the website of your payment processor.
*/
public function postProcess()
{
/**
* Oops, an error occured.
*/
if (Tools::getValue('action') == 'error') {
return $this->displayError('An error occurred while trying to redirect the customer');
} else {
//First solution to know if refreshed page: http://stackoverflow.com/a/6127748
$refreshButtonPressed = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
$result = $this->module->callToRest('GET', '/orders?mid=' . Context::getContext()->cart->id, null, false);
$result['response'] = json_decode($result['response'], true);
if ($result['code'] == '200' && isset($result['response']['results'][0]['id']) && !$refreshButtonPressed) {
//The cart exists on Aplazame, we try to send with another ID
$oldCart = new Cart(Context::getContext()->cart->id);
$data = $oldCart->duplicate();
if ($data['success']) {
$cart = $data['cart'];
Context::getContext()->cart = $cart;
CartRule::autoAddToCart(Context::getContext());
Context::getContext()->cookie->id_cart = $cart->id;
} else {
$this->module->logError('Error: Cannot duplicate cart ' . Context::getContext()->cart->id);
}
}
$this->context->smarty->assign(array('cart_id' => Context::getContext()->cart->id, 'secure_key' => Context::getContext()->customer->secure_key, 'aplazame_order_json' => json_encode($this->module->getCheckoutSerializer(0, Context::getContext()->cart->id), 128), 'aplazame_version' => ConfigurationCore::get('APLAZAME_API_VERSION', null), 'aplazame_url' => Configuration::get('APLAZAME_API_URL', null), 'aplazame_mode' => Configuration::get('APLAZAME_LIVE_MODE', null) ? 'false' : 'true'));
return $this->setTemplate('redirect.tpl');
}
}
示例2: login_customer
/**
* Logs a given customer in.
*/
public static function login_customer($id_customer)
{
// Make sure that that the customers exists.
$sql = "SELECT * FROM `" . _DB_PREFIX_ . "customer` WHERE `id_customer` = '" . pSQL($id_customer) . "'";
$result = Db::getInstance()->GetRow($sql);
// The user account has been found!
if (!empty($result['id_customer'])) {
// See => CustomerCore::getByEmail
$customer = new Customer();
$customer->id = $result['id_customer'];
foreach ($result as $key => $value) {
if (key_exists($key, $customer)) {
$customer->{$key} = $value;
}
}
// See => AuthControllerCore::processSubmitLogin
Hook::exec('actionBeforeAuthentication');
$context = Context::getContext();
$context->cookie->id_compare = isset($context->cookie->id_compare) ? $context->cookie->id_compare : CompareProduct::getIdCompareByIdCustomer($customer->id);
$context->cookie->id_customer = (int) $customer->id;
$context->cookie->customer_lastname = $customer->lastname;
$context->cookie->customer_firstname = $customer->firstname;
$context->cookie->logged = 1;
$customer->logged = 1;
$context->cookie->is_guest = $customer->isGuest();
$context->cookie->passwd = $customer->passwd;
$context->cookie->email = $customer->email;
// Add customer to the context
$context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($context->cookie->id_cart) || Cart::getNbProducts($context->cookie->id_cart) == 0) && ($id_cart = (int) Cart::lastNoneOrderedCart($context->customer->id))) {
$context->cart = new Cart($id_cart);
} else {
$context->cart->id_carrier = 0;
$context->cart->setDeliveryOption(null);
$context->cart->id_address_delivery = Address::getFirstCustomerAddressId((int) $customer->id);
$context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int) $customer->id);
}
$context->cart->id_customer = (int) $customer->id;
$context->cart->secure_key = $customer->secure_key;
$context->cart->save();
$context->cookie->id_cart = (int) $context->cart->id;
$context->cookie->update();
$context->cart->autosetProductAddress();
Hook::exec('actionAuthentication');
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($context);
CartRule::autoAddToCart($context);
// Customer is now logged in.
return true;
}
// Invalid customer specified.
return false;
}
示例3: duplicateCart
private function duplicateCart(Cart $oldCart)
{
$data = $oldCart->duplicate();
if (!$data || !$data['success']) {
$this->module->log(Aplazame::LOG_WARNING, 'Cannot duplicate cart', $oldCart->id);
return $oldCart;
}
$cart = $data['cart'];
$this->context->cookie->id_cart = $cart->id;
$this->context->cart = $cart;
CartRule::autoAddToCart($this->context);
$this->context->cookie->write();
return $cart;
}
示例4: submit
public function submit()
{
if ($this->validate()) {
Hook::exec('actionAuthenticationBefore');
$customer = new Customer();
$authentication = $customer->getByEmail($this->getValue('email'), $this->getValue('password'));
if (isset($authentication->active) && !$authentication->active) {
$this->errors[''][] = $this->translator->trans('Your account isn\'t available at this time, please contact us', [], 'Shop.Notifications.Error');
} elseif (!$authentication || !$customer->id || $customer->is_guest) {
$this->errors[''][] = $this->translator->trans('Authentication failed.', [], 'Shop.Notifications.Error');
} else {
$this->context->updateCustomer($customer);
Hook::exec('actionAuthentication', ['customer' => $this->context->customer]);
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
}
}
return !$this->hasErrors();
}
示例5: postProcess
public function postProcess()
{
parent::postProcess();
if (Tools::isSubmit('submitReorder') && ($id_order = (int) Tools::getValue('id_order'))) {
$oldCart = new Cart(Order::getCartIdStatic($id_order, $this->context->customer->id));
$duplication = $oldCart->duplicate();
if (!$duplication || !Validate::isLoadedObject($duplication['cart'])) {
$this->errors[] = $this->trans('Sorry. We cannot renew your order.', array(), 'Shop.Notifications.Error');
} elseif (!$duplication['success']) {
$this->errors[] = $this->trans('Some items are no longer available, and we are unable to renew your order.', array(), 'Shop.Notifications.Error');
} else {
$this->context->cookie->id_cart = $duplication['cart']->id;
$context = $this->context;
$context->cart = $duplication['cart'];
CartRule::autoAddToCart($context);
$this->context->cookie->write();
Tools::redirect('index.php?controller=order');
}
}
$this->bootstrap();
}
示例6: updateQty
//.........这里部分代码省略.........
if (!Validate::isLoadedObject($product)) {
die(Tools::displayError());
}
if (isset(self::$_nbProducts[$this->id])) {
unset(self::$_nbProducts[$this->id]);
}
if (isset(self::$_totalWeight[$this->id])) {
unset(self::$_totalWeight[$this->id]);
}
if ((int) $quantity <= 0) {
return $this->deleteProduct($id_product, $id_product_attribute, (int) $id_customization);
} elseif (!$product->available_for_order || Configuration::get('PS_CATALOG_MODE')) {
return false;
} else {
/* Check if the product is already in the cart */
$result = $this->containsProduct($id_product, $id_product_attribute, (int) $id_customization, (int) $id_address_delivery);
/* Update quantity if product already exist */
if ($result) {
if ($operator == 'up') {
$sql = 'SELECT stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity
FROM ' . _DB_PREFIX_ . 'product p
' . Product::sqlStock('p', $id_product_attribute, true, $shop) . '
WHERE p.id_product = ' . $id_product;
$result2 = Db::getInstance()->getRow($sql);
$product_qty = (int) $result2['quantity'];
// Quantity for product pack
if (Pack::isPack($id_product)) {
$product_qty = Pack::getQuantity($id_product, $id_product_attribute);
}
$new_qty = (int) $result['quantity'] + (int) $quantity;
$qty = '+ ' . (int) $quantity;
if (!Product::isAvailableWhenOutOfStock((int) $result2['out_of_stock'])) {
if ($new_qty > $product_qty) {
return false;
}
}
} else {
if ($operator == 'down') {
$qty = '- ' . (int) $quantity;
$new_qty = (int) $result['quantity'] - (int) $quantity;
if ($new_qty < $minimal_quantity && $minimal_quantity > 1) {
return -1;
}
} else {
return false;
}
}
/* Delete product from cart */
if ($new_qty <= 0) {
return $this->deleteProduct((int) $id_product, (int) $id_product_attribute, (int) $id_customization);
} else {
if ($new_qty < $minimal_quantity) {
return -1;
} else {
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'cart_product`
SET `quantity` = `quantity` ' . $qty . ', `date_add` = NOW()
WHERE `id_product` = ' . (int) $id_product . (!empty($id_product_attribute) ? ' AND `id_product_attribute` = ' . (int) $id_product_attribute : '') . '
AND `id_cart` = ' . (int) $this->id . (Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery() ? ' AND `id_address_delivery` = ' . (int) $id_address_delivery : '') . '
LIMIT 1');
}
}
} elseif ($operator == 'up') {
$sql = 'SELECT stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity
FROM ' . _DB_PREFIX_ . 'product p
' . Product::sqlStock('p', $id_product_attribute, true, $shop) . '
WHERE p.id_product = ' . $id_product;
$result2 = Db::getInstance()->getRow($sql);
// Quantity for product pack
if (Pack::isPack($id_product)) {
$result2['quantity'] = Pack::getQuantity($id_product, $id_product_attribute);
}
if (!Product::isAvailableWhenOutOfStock((int) $result2['out_of_stock'])) {
if ((int) $quantity > $result2['quantity']) {
return false;
}
}
if ((int) $quantity < $minimal_quantity) {
return -1;
}
$result_add = Db::getInstance()->insert('cart_product', array('id_product' => (int) $id_product, 'id_product_attribute' => (int) $id_product_attribute, 'id_cart' => (int) $this->id, 'id_address_delivery' => (int) $id_address_delivery, 'id_shop' => $shop->id, 'quantity' => (int) $quantity, 'date_add' => date('Y-m-d H:i:s')));
if (!$result_add) {
return false;
}
}
}
// refresh cache of self::_products
$this->_products = $this->getProducts(true);
$this->update(true);
$context = Context::getContext()->cloneContext();
$context->cart = $this;
if ($auto_add_cart_rule) {
CartRule::autoAddToCart($context);
}
if ($product->customizable) {
return $this->_updateCustomizationQuantity((int) $quantity, (int) $id_customization, (int) $id_product, (int) $id_product_attribute, (int) $id_address_delivery, $operator);
} else {
return true;
}
}
示例7: processSubmitLogin
/**
* Process login
*/
protected function processSubmitLogin()
{
Hook::exec('actionBeforeAuthentication');
$passwd = trim(Tools::getValue('passwd'));
$_POST['passwd'] = null;
$email = trim(Tools::getValue('email'));
if (empty($email)) {
$this->errors[] = Tools::displayError('An email address required.');
} elseif (!Validate::isEmail($email)) {
$this->errors[] = Tools::displayError('Invalid email address.');
} elseif (empty($passwd)) {
$this->errors[] = Tools::displayError('Password is required.');
} elseif (!Validate::isPasswd($passwd)) {
$this->errors[] = Tools::displayError('Invalid password.');
} else {
$customer = new Customer();
$authentication = $customer->getByEmail(trim($email), trim($passwd));
if (isset($authentication->active) && !$authentication->active) {
$this->errors[] = Tools::displayError('Your account isn\'t available at this time, please contact us');
} elseif (!$authentication || !$customer->id) {
$this->errors[] = Tools::displayError('Authentication failed.');
} else {
$this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare : CompareProduct::getIdCompareByIdCustomer($customer->id);
$this->context->cookie->id_customer = (int) $customer->id;
$this->context->cookie->customer_lastname = $customer->lastname;
$this->context->cookie->customer_firstname = $customer->firstname;
$this->context->cookie->logged = 1;
$customer->logged = 1;
$this->context->cookie->is_guest = $customer->isGuest();
$this->context->cookie->passwd = $customer->passwd;
$this->context->cookie->email = $customer->email;
// Add customer to the context
$this->context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && ($id_cart = (int) Cart::lastNoneOrderedCart($this->context->customer->id))) {
$this->context->cart = new Cart($id_cart);
} else {
$id_carrier = (int) $this->context->cart->id_carrier;
$this->context->cart->id_carrier = 0;
$this->context->cart->setDeliveryOption(null);
$this->context->cart->id_address_delivery = (int) Address::getFirstCustomerAddressId((int) $customer->id);
$this->context->cart->id_address_invoice = (int) Address::getFirstCustomerAddressId((int) $customer->id);
}
$this->context->cart->id_customer = (int) $customer->id;
$this->context->cart->secure_key = $customer->secure_key;
if ($this->ajax && isset($id_carrier) && $id_carrier && Configuration::get('PS_ORDER_PROCESS_TYPE')) {
$delivery_option = array($this->context->cart->id_address_delivery => $id_carrier . ',');
$this->context->cart->setDeliveryOption($delivery_option);
}
$this->context->cart->save();
$this->context->cookie->id_cart = (int) $this->context->cart->id;
$this->context->cookie->write();
$this->context->cart->autosetProductAddress();
Hook::exec('actionAuthentication', array('customer' => $this->context->customer));
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
if (!$this->ajax) {
$back = Tools::getValue('back', 'my-account');
if ($back == Tools::secureReferrer($back)) {
Tools::redirect(html_entity_decode($back));
}
Tools::redirect('index.php?controller=' . ($this->authRedirection !== false ? urlencode($this->authRedirection) : $back));
}
}
}
if ($this->ajax) {
$return = array('hasError' => !empty($this->errors), 'errors' => $this->errors, 'token' => Tools::getToken(false));
$this->ajaxDie(Tools::jsonEncode($return));
} else {
$this->context->smarty->assign('authentification_error', $this->errors);
}
}
示例8: processDeleteProductInCart
/**
* This process delete a product from the cart
*/
protected function processDeleteProductInCart()
{
if ($this->context->cart->deleteProduct($this->id_product, $this->id_product_attribute, $this->customization_id, $this->id_address_delivery)) {
if (!Cart::getNbProducts((int) $this->context->cart->id)) {
$this->context->cart->setDeliveryOption(null);
$this->context->cart->gift = 0;
$this->context->cart->gift_message = '';
$this->context->cart->update();
}
}
$removed = CartRule::autoAddToCart();
if (count($removed) && (int) Tools::getValue('allow_refresh')) {
$this->ajax_refresh = true;
}
}
示例9: initContent
/**
* Assign template vars related to page content
* @see FrontController::initContent()
*/
public function initContent()
{
parent::initContent();
/* id_carrier is not defined in database before choosing a carrier, set it to a default one to match a potential cart _rule */
if (empty($this->context->cart->id_carrier)) {
$checked = $this->context->cart->simulateCarrierSelectedOutput();
$checked = (int) Cart::desintifier($checked);
$this->context->cart->id_carrier = $checked;
$this->context->cart->update();
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
}
// SHOPPING CART
$this->_assignSummaryInformations();
// WRAPPING AND TOS
$this->_assignWrappingAndTOS();
if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) {
$countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
} else {
$countries = Country::getCountries($this->context->language->id, true);
}
// If a rule offer free-shipping, force hidding shipping prices
$free_shipping = false;
foreach ($this->context->cart->getCartRules() as $rule) {
if ($rule['free_shipping'] && !$rule['carrier_restriction']) {
$free_shipping = true;
break;
}
}
$this->context->smarty->assign(array('free_shipping' => $free_shipping, 'isGuest' => isset($this->context->cookie->is_guest) ? $this->context->cookie->is_guest : 0, 'countries' => $countries, 'sl_country' => (int) Tools::getCountry(), 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), 'errorCarrier' => Tools::displayError('You must choose a carrier.', false), 'errorTOS' => Tools::displayError('You must accept the Terms of Service.', false), 'isPaymentStep' => isset($_GET['isPaymentStep']) && $_GET['isPaymentStep'], 'genders' => Gender::getGenders(), 'one_phone_at_least' => (int) Configuration::get('PS_ONE_PHONE_AT_LEAST'), 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop')));
$years = Tools::dateYears();
$months = Tools::dateMonths();
$days = Tools::dateDays();
$this->context->smarty->assign(array('years' => $years, 'months' => $months, 'days' => $days));
/* Load guest informations */
if ($this->isLogged && $this->context->cookie->is_guest) {
$this->context->smarty->assign('guestInformations', $this->_getGuestInformations());
}
// ADDRESS
if ($this->isLogged) {
$this->_assignAddress();
}
// CARRIER
$this->_assignCarrier();
// PAYMENT
$this->_assignPayment();
Tools::safePostVars();
$newsletter = Configuration::get('PS_CUSTOMER_NWSL') || Module::isInstalled('blocknewsletter') && Module::getInstanceByName('blocknewsletter')->active;
$this->context->smarty->assign('newsletter', $newsletter);
$this->context->smarty->assign('optin', (bool) Configuration::get('PS_CUSTOMER_OPTIN'));
$this->context->smarty->assign('field_required', $this->context->customer->validateFieldsRequiredDatabase());
$this->_processAddressFormat();
$link = new Link();
if (Tools::getValue('deleteFromOrderLine')) {
$id_product = Tools::getValue('id_product');
$date_from = Tools::getValue('date_from');
$date_to = Tools::getValue('date_to');
$obj_cart_bk_data = new HotelCartBookingData();
$cart_data_dlt = $obj_cart_bk_data->deleteRoomDataFromOrderLine($this->context->cart->id, $this->context->cart->id_guest, $id_product, $date_from, $date_to);
if ($cart_data_dlt) {
Tools::redirect($link->getPageLink('order', null, $this->context->language->id));
}
}
if ((bool) Configuration::get('PS_ADVANCED_PAYMENT_API')) {
$this->addJS(_THEME_JS_DIR_ . 'advanced-payment-api.js');
$this->setTemplate(_PS_THEME_DIR_ . 'order-opc-advanced.tpl');
} else {
if (Module::isInstalled('hotelreservationsystem')) {
require_once _PS_MODULE_DIR_ . 'hotelreservationsystem/define.php';
$obj_cart_bk_data = new HotelCartBookingData();
$obj_htl_bk_dtl = new HotelBookingDetail();
$obj_rm_type = new HotelRoomType();
$htl_rm_types = $this->context->cart->getProducts();
if (!empty($htl_rm_types)) {
foreach ($htl_rm_types as $type_key => $type_value) {
$product = new Product($type_value['id_product'], false, $this->context->language->id);
$cover_image_arr = $product->getCover($type_value['id_product']);
if (!empty($cover_image_arr)) {
$cover_img = $this->context->link->getImageLink($product->link_rewrite, $product->id . '-' . $cover_image_arr['id_image'], 'small_default');
} else {
$cover_img = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code . "-default", 'small_default');
}
$unit_price = Product::getPriceStatic($type_value['id_product'], true, null, 6, null, false, true, 1);
if (isset($this->context->customer->id)) {
$cart_bk_data = $obj_cart_bk_data->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $type_value['id_product']);
} else {
$cart_bk_data = $obj_cart_bk_data->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $type_value['id_product']);
}
$rm_dtl = $obj_rm_type->getRoomTypeInfoByIdProduct($type_value['id_product']);
$cart_htl_data[$type_key]['id_product'] = $type_value['id_product'];
$cart_htl_data[$type_key]['cover_img'] = $cover_img;
$cart_htl_data[$type_key]['name'] = $product->name;
$cart_htl_data[$type_key]['unit_price'] = $unit_price;
$cart_htl_data[$type_key]['adult'] = $rm_dtl['adult'];
$cart_htl_data[$type_key]['children'] = $rm_dtl['children'];
foreach ($cart_bk_data as $data_k => $data_v) {
//.........这里部分代码省略.........
示例10: substr
}
$address->firstname = Tools::getValue('firstname');
$address->lastname = ' ';
$address->phone_mobile = Tools::getValue('phone');
$address->other = 'Эл.адрес:' . ' default@default.ru' . "\r\n" . 'Время: ' . Tools::getValue('time');
$address->address1 = ' ';
$address->city = ' ';
$address->alias = 'quickorder_' . substr(md5(time() . _COOKIE_KEY_), 0, 7);
$address->id_customer = $customer->id;
$address->save();
$cart->id_address_invoice = (int) $address->id;
$cart->id_address_delivery = (int) $address->id;
$id_address = (int) $address->id;
$cart->update();
CartRule::autoRemoveFromCart($context);
CartRule::autoAddToCart($context);
if (!$context->cart->isMultiAddressDelivery()) {
$context->cart->setNoMultishipping();
}
} else {
$message = new Message();
$message->id_cart = $cart->id;
$message->message = 'Имя:' . ' ' . Tools::getValue('firstname') . "\r\n" . 'Эл.адрес:' . ' default@default.ru' . "\r\n" . 'Телефон:' . ' ' . Tools::getValue('phone') . "\r\n" . 'Время: ' . Tools::getValue('time');
$message->private = true;
$message->add();
}
if (Configuration::get('QUI_CARRIER')) {
$cart->id_carrier = Configuration::get('QUI_CARRIER');
}
if (Configuration::get('QUI_PAYMENT')) {
$payment = Module::getInstanceById(Configuration::get('QUI_PAYMENT'));
示例11: updateQuantity
//.........这里部分代码省略.........
if (!JeproshopValidator::isLoadedObject($product, 'product_id')) {
die(Tools::displayError());
}
if (isset(self::$_nbProducts[$this->cart_id])) {
unset(self::$_nbProducts[$this->cart_id]);
}
if (isset(self::$_totalWeight[$this->cart_id])) {
unset(self::$_totalWeight[$this->cart_id]);
}
if ((int) $quantity <= 0) {
return $this->deleteProduct($product_id, $product_attribute_id, (int) $customization_id);
} elseif (!$product->available_for_order || JeproshopSettingModelSeting::getValue('catalog_mode')) {
return false;
} else {
/* Check if the product is already in the cart */
$result = $this->containsProduct($product_id, $product_attribute_id, (int) $customization_id, (int) $address_delivery_id);
/* Update quantity if product already exist */
if ($result) {
if ($operator == 'up') {
$query = "SELECT stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity FROM " . $db->quoteName('#__jeproshop_product') . " AS product" . JeproshopProductModelProduct::sqlStock('p', $product_attribute_id, true, $shop);
$query .= " WHERE product.product_id = " . $product_id;
$db->setQuery($query);
$result2 = $db->loadObject();
$product_qty = (int) $result2->quantity;
// Quantity for product pack
if (JeproshopProductPack::isPack($product_id)) {
$product_qty = JeproshopProductPack::getQuantity($product_id, $product_attribute_id);
}
$new_qty = (int) $result->quantity + (int) $quantity;
$qty = '+ ' . (int) $quantity;
if (!JeproshopProductModelProduct::isAvailableWhenOutOfStock((int) $result2->out_of_stock)) {
if ($new_qty > $product_qty) {
return false;
}
}
} else {
if ($operator == 'down') {
$qty = '- ' . (int) $quantity;
$new_qty = (int) $result->quantity - (int) $quantity;
if ($new_qty < $minimal_quantity && $minimal_quantity > 1) {
return -1;
}
} else {
return false;
}
}
/* Delete product from cart */
if ($new_qty <= 0) {
return $this->deleteProduct((int) $product_id, (int) $product_attribute_id, (int) $customization_id);
} else {
if ($new_qty < $minimal_quantity) {
return -1;
} else {
$query = "UPDATE " . $db->quoteName('#__jeproshop_cart_product') . " SET " . $db->quoteName('quantity') . " = " . $db->quoteName('quantity') . $qty . ", ";
$query .= $db->quoteName('date_add') . " = NOW() WHERE " . $db->quoteName('product_id') . " = " . (int) $product_id;
$query .= (!empty($product_attribute_id) ? " AND " . $db->quoteName('product_attribute_id') . " = " . (int) $product_attribute_id : "") . " AND " . $db->quoteName('cart_id') . " = " . (int) $this->cart_id;
$query .= (JeproshopSettingModelSeting::getValue('allow_multi_shipping') && $this->isMultiAddressDelivery() ? " AND " . $db->quoteName('address_delivery_id') . " = " . (int) $address_delivery_id : "") . " LIMIT 1";
$db->setQuery($query);
$db->query();
}
}
} elseif ($operator == 'up') {
$sql = 'SELECT stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity
FROM ' . _DB_PREFIX_ . 'product p
' . Product::sqlStock('p', $product_attribute_id, true, $shop) . '
WHERE p.id_product = ' . $product_id;
$result2 = Db::getInstance()->getRow($sql);
// Quantity for product pack
if (Pack::isPack($product_id)) {
$result2['quantity'] = Pack::getQuantity($product_id, $product_attribute_id);
}
if (!Product::isAvailableWhenOutOfStock((int) $result2['out_of_stock'])) {
if ((int) $quantity > $result2['quantity']) {
return false;
}
}
if ((int) $quantity < $minimal_quantity) {
return -1;
}
$result_add = Db::getInstance()->insert('cart_product', array('id_product' => (int) $product_id, 'id_product_attribute' => (int) $product_attribute_id, 'id_cart' => (int) $this->cart_id, 'id_address_delivery' => (int) $address_delivery_id, 'id_shop' => $shop->shop_id, 'quantity' => (int) $quantity, 'date_add' => date('Y-m-d H:i:s')));
if (!$result_add) {
return false;
}
}
}
// refresh cache of self::_products
$this->_products = $this->getProducts(true);
$this->update(true);
$context = Context::getContext()->cloneContext();
$context->cart = $this;
Cache::clean('getContextualValue_*');
if ($auto_add_cart_rule) {
CartRule::autoAddToCart($context);
}
if ($product->customizable) {
return $this->updateCustomizationQuantity((int) $quantity, (int) $customization_id, (int) $product_id, (int) $product_attribute_id, (int) $address_delivery_id, $operator);
} else {
return true;
}
}
示例12: init
public function init()
{
self::$amz_payments = new AmzPayments();
$this->isLogged = (bool) $this->context->customer->id && Customer::customerIdExistsStatic((int) $this->context->cookie->id_customer);
parent::init();
/* Disable some cache related bugs on the cart/order */
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
$this->display_column_left = false;
$this->display_column_right = false;
// Service initialisieren
$this->service = self::$amz_payments->getService();
if (Tools::isSubmit('ajax')) {
if (Tools::isSubmit('method')) {
switch (Tools::getValue('method')) {
case 'redirectAuthentication':
case 'setusertoshop':
if (Tools::getValue('access_token')) {
$this->context->cookie->amz_access_token = AmzPayments::prepareCookieValueForPrestaShopUse(Tools::getValue('access_token'));
$this->context->cookie->amz_access_token_set_time = time();
} else {
if (Tools::getValue('method') == 'redirectAuthentication') {
Tools::redirect('index');
} else {
error_log('Error, method not submitted and no token');
die('error');
}
}
if (Tools::getValue('action') == 'fromCheckout') {
$accessTokenValue = AmzPayments::prepareCookieValueForAmazonPaymentsUse(Tools::getValue('access_token'));
} else {
$accessTokenValue = Tools::getValue('access_token');
}
$d = self::$amz_payments->requestTokenInfo($accessTokenValue);
if ($d->aud != self::$amz_payments->client_id) {
if (Tools::getValue('method') == 'redirectAuthentication') {
Tools::redirect('index');
} else {
error_log('auth error LPA');
die('error');
}
}
$d = self::$amz_payments->requestProfile($accessTokenValue);
$customer_userid = $d->user_id;
$customer_name = $d->name;
$customer_email = $d->email;
// $postcode = $d->postal_code;
if ($customers_local_id = AmazonPaymentsCustomerHelper::findByAmazonCustomerId($customer_userid)) {
// Customer already exists - login
Hook::exec('actionBeforeAuthentication');
$customer = new Customer();
$authentication = AmazonPaymentsCustomerHelper::getByCustomerID($customers_local_id, true, $customer);
if (isset($authentication->active) && !$authentication->active) {
$this->errors[] = Tools::displayError('Your account isn\'t available at this time, please contact us');
} elseif (!$authentication || !$customer->id) {
$this->errors[] = Tools::displayError('Authentication failed.');
} else {
$this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare : CompareProduct::getIdCompareByIdCustomer($customer->id);
$this->context->cookie->id_customer = (int) $customer->id;
$this->context->cookie->customer_lastname = $customer->lastname;
$this->context->cookie->customer_firstname = $customer->firstname;
$this->context->cookie->logged = 1;
$customer->logged = 1;
$this->context->cookie->is_guest = $customer->isGuest();
$this->context->cookie->passwd = $customer->passwd;
$this->context->cookie->email = $customer->email;
// Add customer to the context
$this->context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && ($id_cart = (int) Cart::lastNoneOrderedCart($this->context->customer->id))) {
$this->context->cart = new Cart($id_cart);
} else {
$id_carrier = (int) $this->context->cart->id_carrier;
$this->context->cart->id_carrier = 0;
$this->context->cart->setDeliveryOption(null);
$this->context->cart->id_address_delivery = (int) Address::getFirstCustomerAddressId((int) $customer->id);
$this->context->cart->id_address_invoice = (int) Address::getFirstCustomerAddressId((int) $customer->id);
}
$this->context->cart->id_customer = (int) $customer->id;
$this->context->cart->secure_key = $customer->secure_key;
if ($this->ajax && isset($id_carrier) && $id_carrier && Configuration::get('PS_ORDER_PROCESS_TYPE')) {
$delivery_option = array($this->context->cart->id_address_delivery => $id_carrier . ',');
$this->context->cart->setDeliveryOption($delivery_option);
}
$this->context->cart->save();
$this->context->cookie->id_cart = (int) $this->context->cart->id;
$this->context->cookie->write();
$this->context->cart->autosetProductAddress();
Hook::exec('actionAuthentication');
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
if (Tools::getValue('action') == 'fromCheckout' && isset($this->context->cookie->amz_connect_order)) {
AmzPayments::switchOrderToCustomer($this->context->customer->id, $this->context->cookie->amz_connect_order, true);
}
if (Tools::getValue('action') == 'checkout') {
$goto = $this->context->link->getModuleLink('amzpayments', 'amzpayments');
} elseif (Tools::getValue('action') == 'fromCheckout') {
$goto = 'index.php?controller=history';
} elseif ($this->context->cart->nbProducts()) {
$goto = 'index.php?controller=order';
//.........这里部分代码省略.........
示例13: processChangeProductInCart
//.........这里部分代码省略.........
$cart_products = $this->context->cart->getProducts();
if (is_array($cart_products)) {
foreach ($cart_products as $cart_product) {
if ((!isset($this->id_product_attribute) || $cart_product['id_product_attribute'] == $this->id_product_attribute) && (isset($this->id_product) && $cart_product['id_product'] == $this->id_product)) {
$qty_to_check = $cart_product['cart_quantity'];
if (Tools::getValue('op', 'up') == 'down') {
$qty_to_check -= $this->qty;
} else {
$qty_to_check += $this->qty;
}
break;
}
}
}
// Check product quantity availability
if ($this->id_product_attribute) {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
} elseif ($product->hasAttributes()) {
$minimumQuantity = $product->out_of_stock == 2 ? !Configuration::get('PS_ORDER_OUT_OF_STOCK') : !$product->out_of_stock;
$this->id_product_attribute = Product::getDefaultAttribute($product->id, $minimumQuantity);
// @todo do something better than a redirect admin !!
if (!$this->id_product_attribute) {
Tools::redirectAdmin($this->context->link->getProductLink($product));
} elseif (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
} elseif (!$product->checkQty($qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
// If no errors, process product addition
if (!$this->errors && $mode == 'add') {
// Add cart if no cart found
if (!$this->context->cart->id) {
if (Context::getContext()->cookie->id_guest) {
$guest = new Guest(Context::getContext()->cookie->id_guest);
$this->context->cart->mobile_theme = $guest->mobile_theme;
}
$this->context->cart->add();
if ($this->context->cart->id) {
$this->context->cookie->id_cart = (int) $this->context->cart->id;
}
}
// Check customizable fields
if (!$product->hasAllRequiredCustomizableFields() && !$this->customization_id) {
$this->errors[] = Tools::displayError('Please fill in all of the required fields, and then save your customizations.', !Tools::getValue('ajax'));
}
if (!$this->errors) {
$cart_rules = $this->context->cart->getCartRules();
$available_cart_rules = CartRule::getCustomerCartRules($this->context->language->id, isset($this->context->customer->id) ? $this->context->customer->id : 0, true, true, true, $this->context->cart, false, true);
$update_quantity = $this->context->cart->updateQty($this->qty, $this->id_product, $this->id_product_attribute, $this->customization_id, Tools::getValue('op', 'up'), $this->id_address_delivery);
if ($update_quantity < 0) {
// If product has attribute, minimal quantity is set with minimal quantity of attribute
$minimal_quantity = $this->id_product_attribute ? Attribute::getAttributeMinimalQty($this->id_product_attribute) : $product->minimal_quantity;
$this->errors[] = sprintf(Tools::displayError('You must add %d minimum quantity', !Tools::getValue('ajax')), $minimal_quantity);
} elseif (!$update_quantity) {
$this->errors[] = Tools::displayError('You already have the maximum quantity available for this product.', !Tools::getValue('ajax'));
} elseif ((int) Tools::getValue('allow_refresh')) {
// If the cart rules has changed, we need to refresh the whole cart
$cart_rules2 = $this->context->cart->getCartRules();
if (count($cart_rules2) != count($cart_rules)) {
$this->ajax_refresh = true;
} elseif (count($cart_rules2)) {
$rule_list = array();
foreach ($cart_rules2 as $rule) {
$rule_list[] = $rule['id_cart_rule'];
}
foreach ($cart_rules as $rule) {
if (!in_array($rule['id_cart_rule'], $rule_list)) {
$this->ajax_refresh = true;
break;
}
}
} else {
$available_cart_rules2 = CartRule::getCustomerCartRules($this->context->language->id, isset($this->context->customer->id) ? $this->context->customer->id : 0, true, true, true, $this->context->cart, false, true);
if (count($available_cart_rules2) != count($available_cart_rules)) {
$this->ajax_refresh = true;
} elseif (count($available_cart_rules2)) {
$rule_list = array();
foreach ($available_cart_rules2 as $rule) {
$rule_list[] = $rule['id_cart_rule'];
}
foreach ($cart_rules2 as $rule) {
if (!in_array($rule['id_cart_rule'], $rule_list)) {
$this->ajax_refresh = true;
break;
}
}
}
}
}
}
}
$removed = CartRule::autoRemoveFromCart();
CartRule::autoAddToCart();
if (count($removed) && (int) Tools::getValue('allow_refresh')) {
$this->ajax_refresh = true;
}
}
示例14: refillCart
function refillCart($orderId)
{
if (!$orderId) {
return false;
}
$oldCart = new Cart(Order::getCartIdStatic($orderId, $this->context->customer->id));
$duplication = $oldCart->duplicate();
if (!$duplication || !Validate::isLoadedObject($duplication['cart'])) {
//$this->errors[] = Tools::displayError('Sorry. We cannot renew your order.');
return false;
} elseif (!$duplication['success']) {
//$this->errors[] = Tools::displayError('Some items are no longer available, and we are unable to renew your order.');
return false;
} else {
$this->context->cookie->id_cart = $duplication['cart']->id;
$context = $this->context;
$context->cart = $duplication['cart'];
CartRule::autoAddToCart($context);
$this->context->cookie->write();
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) {
//Tools::redirect('index.php?controller=order-opc');
}
//Tools::redirect('index.php?controller=order');
return true;
}
}
示例15: initContent
/**
* @see FrontController::initContent()
*/
public function initContent()
{
parent::initContent();
$fb_connect_appid = Configuration::get('FB_CONNECT_APPID');
$fb_connect_appkey = Configuration::get('FB_CONNECT_APPKEY');
$this->login_url = $this->context->link->getModuleLink('fbconnect_psb', 'login', array(), TRUE, $this->context->language->id);
require_once _PS_ROOT_DIR_ . '/modules/fbconnect_psb/fb_sdk/facebook.php';
$facebook = new Facebook(array('appId' => $fb_connect_appid, 'secret' => $fb_connect_appkey));
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$fb_user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
//die('Error: '.$e);
error_log($e);
$user = null;
}
} else {
// Get new Access tokens
Tools::redirect($facebook->getLoginUrl(array('scope' => 'email')));
}
// current user state Logged In with FB
if ($user) {
//get the user email from DB with FB ID
$sql = 'SELECT c.`email`
FROM `' . _DB_PREFIX_ . 'customer` c
LEFT JOIN `' . _DB_PREFIX_ . 'customer_profile_connect` pc ON pc.id_customer = c.id_customer
WHERE pc.`facebook_id` = ' . (int) $fb_user_profile['id'] . Shop::addSqlRestriction(Shop::SHARE_CUSTOMER, 'c');
$email = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
if (empty($email)) {
Tools::redirect($this->context->link->getModuleLink('fbconnect_psb', 'registration', array(), TRUE, $this->context->language->id));
} else {
$customer = new Customer();
$authentication = $customer->getByEmail(trim($email));
if (!$authentication || !$customer->id) {
$this->errors[] = Tools::displayError('Error: Authentication failed.');
} else {
$this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare : CompareProduct::getIdCompareByIdCustomer($customer->id);
$this->context->cookie->id_customer = (int) $customer->id;
$this->context->cookie->customer_lastname = $customer->lastname;
$this->context->cookie->customer_firstname = $customer->firstname;
$this->context->cookie->logged = 1;
$customer->logged = 1;
$this->context->cookie->is_guest = $customer->isGuest();
$this->context->cookie->passwd = $customer->passwd;
$this->context->cookie->email = $customer->email;
// Add customer to the context
$this->context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && ($id_cart = (int) Cart::lastNoneOrderedCart($this->context->customer->id))) {
$this->context->cart = new Cart($id_cart);
} else {
$this->context->cart->id_carrier = 0;
$this->context->cart->setDeliveryOption(null);
$this->context->cart->id_address_delivery = Address::getFirstCustomerAddressId((int) $customer->id);
$this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int) $customer->id);
}
$this->context->cart->id_customer = (int) $customer->id;
$this->context->cart->secure_key = $customer->secure_key;
$this->context->cart->save();
$this->context->cookie->id_cart = (int) $this->context->cart->id;
$this->context->cookie->update();
$this->context->cart->autosetProductAddress();
Hook::exec('actionAuthentication');
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
if ($back = Tools::getValue('back')) {
Tools::redirect(html_entity_decode($back));
} else {
Tools::redirect('index.php?controller=' . ($this->authRedirection !== false ? url_encode($this->authRedirection) : 'my-account'));
}
}
}
$this->context->smarty->assign(array('redirect_uri' => urlencode($this->login_url), 'fb_connect_appid' => $fb_connect_appid, 'fb_connect_error' => $this->errors));
$this->setTemplate('login_fb.tpl');
} else {
if (isset($_GET['error']) && isset($_GET['error_code'])) {
$msg = 'There was error while trying to get information from Facebook.';
$msg .= '<br>' . $_GET['error'] . ' - ' . $_GET['error_code'] . ' - ' . $_GET['error_description'] . ' - ' . $_GET['error_reason'];
$this->errors[] = Tools::displayError($msg);
$this->setTemplate('login_fb.tpl');
} else {
Tools::redirect($facebook->getLoginUrl(array('scope' => 'email')));
}
}
}