public function init() { /* * Globals are DEPRECATED as of version 1.5. * Use the Context to access objects instead. * Example: $this->context->cart */ global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency; if (self::$initialized) { return; } self::$initialized = true; parent::init(); // If current URL use SSL, set it true (used a lot for module redirect) if (Tools::usingSecureMode()) { $useSSL = true; } // For compatibility with globals, DEPRECATED as of version 1.5 $css_files = $this->css_files; $js_files = $this->js_files; // If we call a SSL controller without SSL or a non SSL controller with SSL, we redirect with the right protocol if (Configuration::get('PS_SSL_ENABLED') && $_SERVER['REQUEST_METHOD'] != 'POST' && $this->ssl != Tools::usingSecureMode()) { header('HTTP/1.1 301 Moved Permanently'); header('Cache-Control: no-cache'); if ($this->ssl) { header('Location: ' . Tools::getShopDomainSsl(true) . $_SERVER['REQUEST_URI']); } else { header('Location: ' . Tools::getShopDomain(true) . $_SERVER['REQUEST_URI']); } exit; } if ($this->ajax) { $this->display_header = false; $this->display_footer = false; } // if account created with the 2 steps register process, remove 'accoun_created' from cookie if (isset($this->context->cookie->account_created)) { $this->context->smarty->assign('account_created', 1); unset($this->context->cookie->account_created); } ob_start(); // Init cookie language // @TODO This method must be moved into switchLanguage Tools::setCookieLanguage($this->context->cookie); $protocol_link = Configuration::get('PS_SSL_ENABLED') || Tools::usingSecureMode() ? 'https://' : 'http://'; $useSSL = isset($this->ssl) && $this->ssl && Configuration::get('PS_SSL_ENABLED') || Tools::usingSecureMode() ? true : false; $protocol_content = $useSSL ? 'https://' : 'http://'; $link = new Link($protocol_link, $protocol_content); $this->context->link = $link; if ($id_cart = (int) $this->recoverCart()) { $this->context->cookie->id_cart = (int) $id_cart; } if ($this->auth && !$this->context->customer->isLogged($this->guestAllowed)) { Tools::redirect('index.php?controller=authentication' . ($this->authRedirection ? '&back=' . $this->authRedirection : '')); } /* Theme is missing */ if (!is_dir(_PS_THEME_DIR_)) { throw new PrestaShopException(sprintf(Tools::displayError('Current theme unavailable "%s". Please check your theme directory name and permissions.'), basename(rtrim(_PS_THEME_DIR_, '/\\')))); } if (Configuration::get('PS_GEOLOCATION_ENABLED')) { if (($newDefault = $this->geolocationManagement($this->context->country)) && Validate::isLoadedObject($newDefault)) { $this->context->country = $newDefault; } } $currency = Tools::setCurrency($this->context->cookie); if (isset($_GET['logout']) || $this->context->customer->logged && Customer::isBanned($this->context->customer->id)) { $this->context->customer->logout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } elseif (isset($_GET['mylogout'])) { $this->context->customer->mylogout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } /* Cart already exists */ if ((int) $this->context->cookie->id_cart) { $cart = new Cart($this->context->cookie->id_cart); if ($cart->OrderExists()) { unset($this->context->cookie->id_cart, $cart, $this->context->cookie->checkedTOS); $this->context->cookie->check_cgv = false; } elseif (intval(Configuration::get('PS_GEOLOCATION_ENABLED')) && !in_array(strtoupper($this->context->cookie->iso_code_country), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES'))) && $cart->nbProducts() && intval(Configuration::get('PS_GEOLOCATION_NA_BEHAVIOR')) != -1 && !FrontController::isInWhitelistForGeolocation() && !in_array($_SERVER['SERVER_NAME'], array('localhost', '127.0.0.1'))) { unset($this->context->cookie->id_cart, $cart); } elseif ($this->context->cookie->id_customer != $cart->id_customer || $this->context->cookie->id_lang != $cart->id_lang || $currency->id != $cart->id_currency) { if ($this->context->cookie->id_customer) { $cart->id_customer = (int) $this->context->cookie->id_customer; } $cart->id_lang = (int) $this->context->cookie->id_lang; $cart->id_currency = (int) $currency->id; $cart->update(); } /* Select an address if not set */ if (isset($cart) && (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0 || !isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) && $this->context->cookie->id_customer) { $to_update = false; if (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0) { $to_update = true; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if (!isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) { $to_update = true; $cart->id_address_invoice = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if ($to_update) { $cart->update(); } } } if (!isset($cart) || !$cart->id) { $cart = new Cart(); $cart->id_lang = (int) $this->context->cookie->id_lang; $cart->id_currency = (int) $this->context->cookie->id_currency; $cart->id_guest = (int) $this->context->cookie->id_guest; $cart->id_shop_group = (int) $this->context->shop->id_shop_group; $cart->id_shop = $this->context->shop->id; if ($this->context->cookie->id_customer) { $cart->id_customer = (int) $this->context->cookie->id_customer; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); $cart->id_address_invoice = $cart->id_address_delivery; } else { $cart->id_address_delivery = 0; $cart->id_address_invoice = 0; } // Needed if the merchant want to give a free product to every visitors $this->context->cart = $cart; CartRule::autoAddToCart($this->context); } else { $this->context->cart = $cart; } /* get page name to display it in body id */ // Are we in a payment module $module_name = ''; if (Validate::isModuleName(Tools::getValue('module'))) { $module_name = Tools::getValue('module'); } if (!empty($this->page_name)) { $page_name = $this->page_name; } elseif (!empty($this->php_self)) { $page_name = $this->php_self; } elseif (Tools::getValue('fc') == 'module' && $module_name != '' && Module::getInstanceByName($module_name) instanceof PaymentModule) { $page_name = 'module-payment-submit'; } elseif (preg_match('#^' . preg_quote($this->context->shop->physical_uri, '#') . 'modules/([a-zA-Z0-9_-]+?)/(.*)$#', $_SERVER['REQUEST_URI'], $m)) { $page_name = 'module-' . $m[1] . '-' . str_replace(array('.php', '/'), array('', '-'), $m[2]); } else { $page_name = Dispatcher::getInstance()->getController(); $page_name = preg_match('/^[0-9]/', $page_name) ? 'page_' . $page_name : $page_name; } $this->context->smarty->assign(Meta::getMetaTags($this->context->language->id, $page_name)); $this->context->smarty->assign('request_uri', Tools::safeOutput(urldecode($_SERVER['REQUEST_URI']))); /* Breadcrumb */ $navigationPipe = Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>'; $this->context->smarty->assign('navigationPipe', $navigationPipe); // Automatically redirect to the canonical URL if needed if (!empty($this->php_self) && !Tools::getValue('ajax')) { $this->canonicalRedirection($this->context->link->getPageLink($this->php_self, $this->ssl, $this->context->language->id)); } Product::initPricesComputation(); $display_tax_label = $this->context->country->display_tax_label; if (isset($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) && $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) { $infos = Address::getCountryAndState((int) $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $country = new Country((int) $infos['id_country']); $this->context->country = $country; if (Validate::isLoadedObject($country)) { $display_tax_label = $country->display_tax_label; } } $languages = Language::getLanguages(true, $this->context->shop->id); $meta_language = array(); foreach ($languages as $lang) { $meta_language[] = $lang['iso_code']; } $compared_products = array(); if (Configuration::get('PS_COMPARATOR_MAX_ITEM') && isset($this->context->cookie->id_compare)) { $compared_products = CompareProduct::getCompareProducts($this->context->cookie->id_compare); } $this->context->smarty->assign(array('mobile_device' => $this->context->getMobileDevice(), 'link' => $link, 'cart' => $cart, 'currency' => $currency, 'cookie' => $this->context->cookie, 'page_name' => $page_name, 'hide_left_column' => !$this->display_column_left, 'hide_right_column' => !$this->display_column_right, 'base_dir' => _PS_BASE_URL_ . __PS_BASE_URI__, 'base_dir_ssl' => $protocol_link . Tools::getShopDomainSsl() . __PS_BASE_URI__, 'content_dir' => $protocol_content . Tools::getHttpHost() . __PS_BASE_URI__, 'base_uri' => $protocol_content . Tools::getHttpHost() . __PS_BASE_URI__ . (!Configuration::get('PS_REWRITING_SETTINGS') ? 'index.php' : ''), 'tpl_dir' => _PS_THEME_DIR_, 'modules_dir' => _MODULE_DIR_, 'mail_dir' => _MAIL_DIR_, 'lang_iso' => $this->context->language->iso_code, 'come_from' => Tools::getHttpHost(true, true) . Tools::htmlentitiesUTF8(str_replace(array('\'', '\\'), '', urldecode($_SERVER['REQUEST_URI']))), 'cart_qties' => (int) $cart->nbProducts(), 'currencies' => Currency::getCurrencies(), 'languages' => $languages, 'meta_language' => implode(',', $meta_language), 'priceDisplay' => Product::getTaxCalculationMethod((int) $this->context->cookie->id_customer), 'is_logged' => (bool) $this->context->customer->isLogged(), 'is_guest' => (bool) $this->context->customer->isGuest(), 'add_prod_display' => (int) Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'shop_name' => Configuration::get('PS_SHOP_NAME'), 'roundMode' => (int) Configuration::get('PS_PRICE_ROUND_MODE'), 'use_taxes' => (int) Configuration::get('PS_TAX'), 'show_taxes' => (int) (Configuration::get('PS_TAX_DISPLAY') == 1 && (int) Configuration::get('PS_TAX')), 'display_tax_label' => (bool) $display_tax_label, 'vat_management' => (int) Configuration::get('VATNUMBER_MANAGEMENT'), 'opc' => (bool) Configuration::get('PS_ORDER_PROCESS_TYPE'), 'PS_CATALOG_MODE' => (bool) Configuration::get('PS_CATALOG_MODE') || !(bool) Group::getCurrent()->show_prices, 'b2b_enable' => (bool) Configuration::get('PS_B2B_ENABLE'), 'request' => $link->getPaginationLink(false, false, false, true), 'PS_STOCK_MANAGEMENT' => Configuration::get('PS_STOCK_MANAGEMENT'), 'quick_view' => (bool) Configuration::get('PS_QUICK_VIEW'), 'shop_phone' => Configuration::get('PS_SHOP_PHONE'), 'compared_products' => is_array($compared_products) ? $compared_products : array(), 'comparator_max_item' => (int) Configuration::get('PS_COMPARATOR_MAX_ITEM'))); // Add the tpl files directory for mobile if ($this->useMobileTheme()) { $this->context->smarty->assign(array('tpl_mobile_uri' => _PS_THEME_MOBILE_DIR_)); } // Deprecated $this->context->smarty->assign(array('id_currency_cookie' => (int) $currency->id, 'logged' => $this->context->customer->isLogged(), 'customerName' => $this->context->customer->logged ? $this->context->cookie->customer_firstname . ' ' . $this->context->cookie->customer_lastname : false)); $assign_array = array('img_ps_dir' => _PS_IMG_, 'img_cat_dir' => _THEME_CAT_DIR_, 'img_lang_dir' => _THEME_LANG_DIR_, 'img_prod_dir' => _THEME_PROD_DIR_, 'img_manu_dir' => _THEME_MANU_DIR_, 'img_sup_dir' => _THEME_SUP_DIR_, 'img_ship_dir' => _THEME_SHIP_DIR_, 'img_store_dir' => _THEME_STORE_DIR_, 'img_col_dir' => _THEME_COL_DIR_, 'img_dir' => _THEME_IMG_DIR_, 'css_dir' => _THEME_CSS_DIR_, 'js_dir' => _THEME_JS_DIR_, 'pic_dir' => _THEME_PROD_PIC_DIR_); // Add the images directory for mobile if ($this->useMobileTheme()) { $assign_array['img_mobile_dir'] = _THEME_MOBILE_IMG_DIR_; } // Add the CSS directory for mobile if ($this->useMobileTheme()) { $assign_array['css_mobile_dir'] = _THEME_MOBILE_CSS_DIR_; } foreach ($assign_array as $assign_key => $assign_value) { if (substr($assign_value, 0, 1) == '/' || $protocol_content == 'https://') { $this->context->smarty->assign($assign_key, $protocol_content . Tools::getMediaServer($assign_value) . $assign_value); } else { $this->context->smarty->assign($assign_key, $assign_value); } } /* * These shortcuts are DEPRECATED as of version 1.5. * Use the Context to access objects instead. * Example: $this->context->cart */ self::$cookie = $this->context->cookie; self::$cart = $cart; self::$smarty = $this->context->smarty; self::$link = $link; $defaultCountry = $this->context->country; $this->displayMaintenancePage(); if ($this->restrictedCountry) { $this->displayRestrictedCountryPage(); } if (Tools::isSubmit('live_edit') && !$this->checkLiveEditAccess()) { Tools::redirect('index.php?controller=404'); } $this->iso = $iso; $this->context->cart = $cart; $this->context->currency = $currency; }
public function init() { global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files; if (self::$initialized) { return; } self::$initialized = true; // If current URL use SSL, set it true (used a lot for module redirect) if (Tools::usingSecureMode()) { $useSSL = $this->ssl = true; } $css_files = array(); $js_files = array(); if ($this->ssl && !Tools::usingSecureMode() && _PS_SSL_ENABLED_) { header('HTTP/1.1 301 Moved Permanently'); header('Cache-Control: no-cache'); header('Location: ' . Tools::getShopDomainSsl(true) . $_SERVER['REQUEST_URI']); exit; } elseif (_PS_SSL_ENABLED_ && Tools::usingSecureMode() && !$this->ssl) { header('HTTP/1.1 301 Moved Permanently'); header('Cache-Control: no-cache'); header('Location: ' . Tools::getShopDomain(true) . $_SERVER['REQUEST_URI']); exit; } ob_start(); /* Loading default country */ $defaultCountry = new Country((int) _PS_COUNTRY_DEFAULT_, (int) _PS_LANG_DEFAULT_); $cookie = new Cookie('ps', '', time() + ((int) Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int) Configuration::get('PS_COOKIE_LIFETIME_FO') : 1) * 3600); $link = new Link(); if ($this->auth && !$cookie->isLogged($this->guestAllowed)) { Tools::redirect('authentication.php' . ($this->authRedirection ? '?back=' . $this->authRedirection : '')); } /* Theme is missing or maintenance */ if (!file_exists(_PS_THEME_DIR_)) { die(Tools::displayError('Current theme unavailable. Please check your theme directory name and permissions.')); } elseif (basename($_SERVER['PHP_SELF']) != 'disabled.php' && !(int) Configuration::get('PS_SHOP_ENABLE')) { $this->maintenance = true; } elseif (_PS_GEOLOCATION_ENABLED_) { $this->geolocationManagement(); } // Switch language if needed and init cookie language $iso = Tools::getValue('isolang'); if ($iso && Validate::isLanguageIsoCode($iso)) { $id_lang = (int) Language::getIdByIso($iso); if ($id_lang) { $_GET['id_lang'] = $id_lang; } } Tools::switchLanguage(); Tools::setCookieLanguage(); /* attribute id_lang is often needed, so we create a constant for performance reasons */ if (!defined('_USER_ID_LANG_')) { define('_USER_ID_LANG_', (int) $cookie->id_lang); } if (isset($_GET['logout']) || $cookie->logged && Customer::isBanned((int) $cookie->id_customer)) { $cookie->logout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } elseif (isset($_GET['mylogout'])) { $cookie->mylogout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } global $currency; $currency = Tools::setCurrency(); /* Cart already exists */ if ((int) $cookie->id_cart) { $cart = new Cart((int) $cookie->id_cart); if ($cart->OrderExists()) { unset($cookie->id_cart, $cart, $cookie->checkedTOS); } elseif (_PS_GEOLOCATION_ENABLED_ && !in_array(strtoupper($cookie->iso_code_country), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES'))) && $cart->nbProducts() && (int) Configuration::get('PS_GEOLOCATION_NA_BEHAVIOR') != -1 && !self::isInWhitelistForGeolocation()) { unset($cookie->id_cart, $cart); } elseif ($cookie->id_customer != $cart->id_customer || $cookie->id_lang != $cart->id_lang || $cookie->id_currency != $cart->id_currency) { if ($cookie->id_customer) { $cart->id_customer = (int) $cookie->id_customer; } $cart->id_lang = (int) $cookie->id_lang; $cart->id_currency = (int) $cookie->id_currency; $cart->update(); } /* Select an address if not set */ if (isset($cart) && (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0 || !isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) && $cookie->id_customer) { $to_update = false; if (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0) { $to_update = true; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if (!isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) { $to_update = true; $cart->id_address_invoice = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if ($to_update) { $cart->update(); } } } if (!isset($cart) || !$cart->id) { $cart = new Cart(); $cart->id_lang = (int) $cookie->id_lang; $cart->id_currency = (int) $cookie->id_currency; $cart->id_guest = (int) $cookie->id_guest; if ($cookie->id_customer) { $cart->id_customer = (int) $cookie->id_customer; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); $cart->id_address_invoice = $cart->id_address_delivery; } else { $cart->id_address_delivery = 0; $cart->id_address_invoice = 0; } } if (!$cart->nbProducts()) { $cart->id_carrier = null; } $locale = strtolower(Configuration::get('PS_LOCALE_LANGUAGE')) . '_' . strtoupper(Configuration::get('PS_LOCALE_COUNTRY') . '.UTF-8'); setlocale(LC_COLLATE, $locale); setlocale(LC_CTYPE, $locale); setlocale(LC_TIME, $locale); setlocale(LC_NUMERIC, 'en_US.UTF-8'); if (Validate::isLoadedObject($currency)) { $smarty->ps_currency = $currency; } if (Validate::isLoadedObject($ps_language = new Language((int) $cookie->id_lang))) { $smarty->ps_language = $ps_language; } /* get page name to display it in body id */ $page_name = isset($this->php_self) ? preg_replace('/\\.php$/', '', $this->php_self) : ''; if (preg_match('#^' . __PS_BASE_URI__ . '(|' . ((int) Configuration::get('PS_REWRITING_SETTINGS') && isset($smarty->ps_language) && !empty($smarty->ps_language) ? $smarty->ps_language->iso_code . '/' : '') . ')modules/([a-zA-Z0-9_-]+?)/(.*)$#', $_SERVER['REQUEST_URI'], $m)) { $page_name = 'module-' . $m[2] . '-' . str_replace(array('.php', '/'), array('', '-'), $m[3]); } $smarty->assign(Tools::getMetaTags($cookie->id_lang, $page_name)); $protocol_link = _PS_SSL_ENABLED_ || Tools::usingSecureMode() ? 'https://' : 'http://'; $useSSL = isset($this->ssl) && $this->ssl && _PS_SSL_ENABLED_ || Tools::usingSecureMode(); $protocol_content = $useSSL ? 'https://' : 'http://'; if (!defined('_PS_BASE_URL_')) { define('_PS_BASE_URL_', Tools::getShopDomain(true)); } if (!defined('_PS_BASE_URL_SSL_')) { define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); } $link->preloadPageLinks(); $this->canonicalRedirection(); Product::initPricesComputation(); $display_tax_label = $defaultCountry->display_tax_label; if (Validate::isLoadedObject($cart) && ($tmp = (int) $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')})) { $infos = Address::getCountryAndState($tmp); $country = new Country((int) $infos['id_country']); if (Validate::isLoadedObject($country)) { $display_tax_label = $country->display_tax_label; } } $smarty->assign(array('request_uri' => Tools::safeOutput(urldecode($_SERVER['REQUEST_URI'])), 'navigationPipe' => Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>', 'link' => $link, 'cart' => $cart, 'currency' => $currency, 'cookie' => $cookie, 'page_name' => $page_name, 'base_dir' => _PS_BASE_URL_ . __PS_BASE_URI__, 'base_dir_ssl' => $protocol_link . Tools::getShopDomainSsl() . __PS_BASE_URI__, 'content_dir' => $protocol_content . Tools::getHttpHost() . __PS_BASE_URI__, 'tpl_dir' => _PS_THEME_DIR_, 'modules_dir' => _MODULE_DIR_, 'mail_dir' => _MAIL_DIR_, 'lang_iso' => $ps_language->iso_code, 'come_from' => Tools::getHttpHost(true, true) . Tools::htmlentitiesUTF8(str_replace('\'', '', urldecode($_SERVER['REQUEST_URI']))), 'cart_qties' => (int) $cart->nbProducts(), 'currencies' => Currency::getCurrencies(), 'languages' => Language::getLanguages(), 'priceDisplay' => Product::getTaxCalculationMethod(), 'add_prod_display' => (int) Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'shop_name' => Configuration::get('PS_SHOP_NAME'), 'roundMode' => (int) Configuration::get('PS_PRICE_ROUND_MODE'), 'use_taxes' => (int) Configuration::get('PS_TAX'), 'display_tax_label' => (bool) $display_tax_label, 'vat_management' => (int) Configuration::get('VATNUMBER_MANAGEMENT'), 'opc' => (bool) Configuration::get('PS_ORDER_PROCESS_TYPE'), 'PS_CATALOG_MODE' => (bool) Configuration::get('PS_CATALOG_MODE'), 'id_currency_cookie' => (int) $currency->id, 'logged' => $cookie->isLogged(), 'customerName' => $cookie->logged ? $cookie->customer_firstname . ' ' . $cookie->customer_lastname : false)); // TODO for better performances (cache usage), remove these assign and use a smarty function to get the right media server in relation to the full ressource name $assignArray = array('img_ps_dir' => _PS_IMG_, 'img_cat_dir' => _THEME_CAT_DIR_, 'img_lang_dir' => _THEME_LANG_DIR_, 'img_prod_dir' => _THEME_PROD_DIR_, 'img_manu_dir' => _THEME_MANU_DIR_, 'img_sup_dir' => _THEME_SUP_DIR_, 'img_ship_dir' => _THEME_SHIP_DIR_, 'img_store_dir' => _THEME_STORE_DIR_, 'img_col_dir' => _THEME_COL_DIR_, 'img_dir' => _THEME_IMG_DIR_, 'css_dir' => _THEME_CSS_DIR_, 'js_dir' => _THEME_JS_DIR_, 'pic_dir' => _THEME_PROD_PIC_DIR_); foreach ($assignArray as $assignKey => $assignValue) { if (substr($assignValue, 0, 1) == '/' || $protocol_content == 'https://') { $smarty->assign($assignKey, $protocol_content . Tools::getMediaServer($assignValue) . $assignValue); } else { $smarty->assign($assignKey, $assignValue); } } // setting properties from global var self::$cookie = $cookie; self::$cart = $cart; self::$smarty = $smarty; self::$link = $link; if ($this->maintenance) { $this->displayMaintenancePage(); } if ($this->restrictedCountry) { $this->displayRestrictedCountryPage(); } /* Check Live Edit parameters */ if (Tools::isSubmit('live_edit')) { $ad = Tools::getValue('ad'); if (!$ad || Tools::getValue('liveToken') != sha1($ad . _COOKIE_KEY_) || !is_dir(_PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . $ad)) { die(Tools::displayError()); } } $this->iso = $iso; $this->setMedia(); }
public function init() { global $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files; if (self::$initialized) { return; } self::$initialized = true; $css_files = array(); $js_files = array(); if ($this->ssl and (empty($_SERVER['HTTPS']) or strtolower($_SERVER['HTTPS']) == 'off') and Configuration::get('PS_SSL_ENABLED')) { header('HTTP/1.1 301 Moved Permanently'); header('Location: ' . Tools::getShopDomainSsl(true) . $_SERVER['REQUEST_URI']); exit; } ob_start(); /* Loading default country */ $defaultCountry = new Country((int) Configuration::get('PS_COUNTRY_DEFAULT'), Configuration::get('PS_LANG_DEFAULT')); $cookie = new Cookie('ps'); $link = new Link(); if ($this->auth and !$cookie->isLogged($this->guestAllowed)) { Tools::redirect('authentication.php' . ($this->authRedirection ? '?back=' . $this->authRedirection : '')); } /* Theme is missing or maintenance */ if (!is_dir(_PS_THEME_DIR_)) { die(Tools::displayError('Current theme unavailable. Please check your theme directory name and permissions.')); } elseif (basename($_SERVER['PHP_SELF']) != 'disabled.php' and !(int) Configuration::get('PS_SHOP_ENABLE')) { $this->maintenance = true; } elseif (Configuration::get('PS_GEOLOCATION_ENABLED')) { if (!isset($cookie->iso_code_country)) { if ($cookie->logged) { $id_country = Customer::getCurrentCountry((int) $cookie->id_customer); $cookie->iso_code_country = Country::getIsoById($id_country); } else { $this->geolocationManagement(); } } if (!isset($cookie->iso_code_country)) { $current_country_id = Customer::getCurrentCountry((int) $cookie->id_customer); } else { $current_country_id = Country::getByIso($cookie->iso_code_country); } $current_country = new Country($current_country_id, 1); $cookie->id_country = $current_country->id; $smarty->assign('current_country', $current_country->name); $smarty->assign('current_country_id', $current_country->id); if ($cookie->id_country == 110 && !isset($cookie->id_currency)) { $cookie->id_currency = 4; } } //set imagesize if not set if (!isset($cookie->image_size)) { $cookie->image_size = IMAGE_SIZE_LARGE; $cookie->write(); } if (!isset($cookie->greetings) && !$cookie->logged) { $cookie->greetings = 1; $cookie->write(); $smarty->assign('show_greetings', 1); } //echo $cookie->image_size; if ($image_size = Tools::getValue("is")) { if ($image_size == "s" && $cookie->image_size == IMAGE_SIZE_LARGE) { $cookie->image_size = IMAGE_SIZE_SMALL; $cookie->write(); } else { if ($image_size == "l" && $cookie->image_size == IMAGE_SIZE_SMALL) { $cookie->image_size = IMAGE_SIZE_LARGE; $cookie->write(); } } } // Switch language if needed and init cookie language if ($iso = Tools::getValue('isolang') and Validate::isLanguageIsoCode($iso) and $id_lang = (int) Language::getIdByIso($iso)) { $_GET['id_lang'] = $id_lang; } Tools::switchLanguage(); Tools::setCookieLanguage(); /* attribute id_lang is often needed, so we create a constant for performance reasons */ if (!defined('_USER_ID_LANG_')) { define('_USER_ID_LANG_', (int) $cookie->id_lang); } if (isset($_GET['logout']) or $cookie->logged and Customer::isBanned((int) $cookie->id_customer)) { $cookie->logout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : NULL); } elseif (isset($_GET['mylogout'])) { $this->logoutFacebook(); $cookie->mylogout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : NULL); } if ($source = Tools::getValue('utm_source')) { $cookie->last_source = $source; $cookie->write(); } if ($ref_source = Tools::getValue('vbref')) { $cookie->last_ref_source = $ref_source; $cookie->write(); } /*else { if(!isset($cookie->last_ref_source)) { $cookie->last_ref_source = 0; $cookie->write(); } }*/ global $currency; $currency = Tools::setCurrency(); $_MODULES = array(); /* Cart already exists */ if ((int) $cookie->id_cart) { $cart = new Cart((int) $cookie->id_cart); if ($cart->OrderExists()) { unset($cookie->id_cart, $cart, $cookie->checkedTOS); } elseif (intval(Configuration::get('PS_GEOLOCATION_ENABLED')) and !in_array(strtoupper($cookie->iso_code_country), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES'))) and $cart->nbProducts() and intval(Configuration::get('PS_GEOLOCATION_NA_BEHAVIOR')) != -1 and !self::isInWhitelistForGeolocation()) { unset($cookie->id_cart, $cart); } elseif ($cookie->id_customer != $cart->id_customer or $cookie->id_lang != $cart->id_lang or $cookie->id_currency != $cart->id_currency) { if ($cookie->id_customer) { $cart->id_customer = (int) $cookie->id_customer; } $cart->id_lang = (int) $cookie->id_lang; $cart->id_currency = (int) $cookie->id_currency; $cart->update(); } /* Select an address if not set */ if (isset($cart) && (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0 || !isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) && $cookie->id_customer) { $to_update = false; if (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0) { $to_update = true; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if (!isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) { $to_update = true; $cart->id_address_invoice = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if ($to_update) { $cart->update(); } } } if (!isset($cart) or !$cart->id) { $this->checkIDS(); $cart = new Cart(); $cart->id_lang = (int) $cookie->id_lang; $cart->id_currency = (int) $cookie->id_currency; $cart->id_guest = (int) $cookie->id_guest; if ($cookie->id_customer) { $cart->id_customer = (int) $cookie->id_customer; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); $cart->id_address_invoice = $cart->id_address_delivery; } else { $cart->id_address_delivery = 0; $cart->id_address_invoice = 0; } } if (!$cart->nbProducts()) { $cart->id_carrier = NULL; } $locale = strtolower(Configuration::get('PS_LOCALE_LANGUAGE')) . '_' . strtoupper(Configuration::get('PS_LOCALE_COUNTRY') . '.UTF-8'); setlocale(LC_COLLATE, $locale); setlocale(LC_CTYPE, $locale); setlocale(LC_TIME, $locale); setlocale(LC_NUMERIC, 'en_US.UTF-8'); if (Validate::isLoadedObject($currency)) { $smarty->ps_currency = $currency; } if (Validate::isLoadedObject($ps_language = new Language((int) $cookie->id_lang))) { $smarty->ps_language = $ps_language; } /* get page name to display it in body id */ $pathinfo = pathinfo(__FILE__); $page_name = basename($_SERVER['PHP_SELF'], '.' . $pathinfo['extension']); $page_name = preg_match('/^[0-9]/', $page_name) ? 'page_' . $page_name : $page_name; $smarty->assign(Tools::getMetaTags($cookie->id_lang, $page_name)); $smarty->assign('request_uri', Tools::safeOutput(urldecode($_SERVER['REQUEST_URI']))); /* Breadcrumb */ $navigationPipe = Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>'; $smarty->assign('navigationPipe', $navigationPipe); $protocol_link = (Configuration::get('PS_SSL_ENABLED') or !empty($_SERVER['HTTPS']) and strtolower($_SERVER['HTTPS']) != 'off') ? 'https://' : 'http://'; $protocol_content = (isset($useSSL) and $useSSL and Configuration::get('PS_SSL_ENABLED') or !empty($_SERVER['HTTPS']) and strtolower($_SERVER['HTTPS']) != 'off') ? 'https://' : 'http://'; if (!defined('_PS_BASE_URL_')) { define('_PS_BASE_URL_', Tools::getShopDomain(true)); } if (!defined('_PS_BASE_URL_SSL_')) { define('_PS_BASE_URL_SSL_', Tools::getShopDomainSsl(true)); } $link->preloadPageLinks(); $this->canonicalRedirection(); Product::initPricesComputation(); $display_tax_label = $defaultCountry->display_tax_label; if ($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) { $infos = Address::getCountryAndState((int) $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $country = new Country((int) $infos['id_country']); if (Validate::isLoadedObject($country)) { $display_tax_label = $country->display_tax_label; } } global $isBetaUser, $conversion_rate_inr; $conversion_rate_inr = 55; if (!$cookie->isLogged()) { $this->initFacebook(); } else { $customer_groups = Customer::getGroupsStatic((int) $cookie->id_customer); if (in_array(2, $customer_groups)) { $smarty->assign('internal_vb_user', 1); } if (in_array(3, $customer_groups)) { $isBetaUser = true; } else { $isBetaUser = false; } /*$reward_points = VBRewards::getCustomerPoints($cookie->id_customer); $can_redeem = VBRewards::checkPointsValidity($cookie->id_customer, 0); if($can_redeem) $smarty->assign('can_redeem_points', 1); $smarty->assign('balance_points', $reward_points);*/ } $smarty->assign('img_version', IMG_VERSION); $this->setRecaptchaHTML(); if ($page_name === "index") { $sql = "select title,image_path,url from ps_banner where is_active = 1 order by display_order asc"; $home_banners = Db::getInstance()->ExecuteS($sql); $smarty->assign("home_banners", $home_banners); } $smarty->assign(array('lazy' => 1, 'link' => $link, 'cart' => $cart, 'currency' => $currency, 'cookie' => $cookie, 'page_name' => $page_name, 'base_dir' => _PS_BASE_URL_ . __PS_BASE_URI__, 'base_dir_ssl' => $protocol_link . Tools::getShopDomainSsl() . __PS_BASE_URI__, 'content_dir' => $protocol_content . Tools::getShopDomain() . __PS_BASE_URI__, 'tpl_dir' => _PS_THEME_DIR_, 'modules_dir' => _MODULE_DIR_, 'mail_dir' => _MAIL_DIR_, 'lang_iso' => $ps_language->iso_code, 'come_from' => Tools::getHttpHost(true, true) . Tools::htmlentitiesUTF8(str_replace('\'', '', urldecode($_SERVER['REQUEST_URI']))), 'cart_qties' => (int) $cart->nbProducts(), 'currencies' => Currency::getCurrencies(), 'languages' => Language::getLanguages(), 'priceDisplay' => Product::getTaxCalculationMethod(), 'add_prod_display' => (int) Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'), 'shop_name' => Configuration::get('PS_SHOP_NAME'), 'roundMode' => (int) Configuration::get('PS_PRICE_ROUND_MODE'), 'use_taxes' => (int) Configuration::get('PS_TAX'), 'display_tax_label' => (bool) $display_tax_label, 'vat_management' => (int) Configuration::get('VATNUMBER_MANAGEMENT'), 'opc' => (bool) Configuration::get('PS_ORDER_PROCESS_TYPE'), 'PS_CATALOG_MODE' => (bool) Configuration::get('PS_CATALOG_MODE'), 'conversion_rate' => $conversion_rate_inr)); // Deprecated $smarty->assign(array('id_currency_cookie' => (int) $currency->id, 'logged' => $cookie->isLogged(), 'customerName' => $cookie->logged ? $cookie->customer_firstname . ' ' . $cookie->customer_lastname : false)); // TODO for better performances (cache usage), remove these assign and use a smarty function to get the right media server in relation to the full ressource name $assignArray = array('img_ps_dir' => _PS_IMG_, 'img_cat_dir' => _THEME_CAT_DIR_, 'img_lang_dir' => _THEME_LANG_DIR_, 'img_prod_dir' => _THEME_PROD_DIR_, 'img_manu_dir' => _THEME_MANU_DIR_, 'img_sup_dir' => _THEME_SUP_DIR_, 'img_ship_dir' => _THEME_SHIP_DIR_, 'img_store_dir' => _THEME_STORE_DIR_, 'img_col_dir' => _THEME_COL_DIR_, 'img_dir' => _THEME_IMG_DIR_, 'css_dir' => _THEME_CSS_DIR_, 'js_dir' => _THEME_JS_DIR_, 'pic_dir' => _THEME_PROD_PIC_DIR_); foreach ($assignArray as $assignKey => $assignValue) { if (substr($assignValue, 0, 1) == '/' or $protocol_content == 'https://') { $smarty->assign($assignKey, $protocol_content . Tools::getMediaServer($assignValue) . $assignValue); } else { $smarty->assign($assignKey, $assignValue); } } // setting properties from global var self::$cookie = $cookie; self::$cart = $cart; self::$smarty = $smarty; self::$link = $link; if ($this->maintenance) { $this->displayMaintenancePage(); } if ($this->restrictedCountry) { $this->displayRestrictedCountryPage(); } //live edit if (Tools::isSubmit('live_edit') and $ad = Tools::getValue('ad') and Tools::getValue('liveToken') == sha1(Tools::getValue('ad') . _COOKIE_KEY_)) { if (!is_dir(_PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . $ad)) { die(Tools::displayError()); } } $this->iso = $iso; $this->setMedia(); //For sokrati pixel self::$smarty->assign("new_customer_regd", false); if ((int) self::$cookie->new_reg === 1) { self::$smarty->assign("new_customer_regd", true); unset(self::$cookie->new_reg); } if (self::$cookie->id_customer) { self::$smarty->assign("balance_points", VBRewards::getCustomerPoints(self::$cookie->id_customer)); } }
/** * Initializes front controller: sets smarty variables, * class properties, redirects depending on context, etc. * * @global bool $useSSL SSL connection flag * @global Cookie $cookie Visitor's cookie * @global Smarty $smarty * @global Cart $cart Visitor's cart * @global string $iso Language ISO * @global Country $defaultCountry Visitor's country object * @global string $protocol_link * @global string $protocol_content * @global Link $link * @global array $css_files * @global array $js_files * @global Currency $currency Visitor's selected currency * * @throws PrestaShopException */ public function init() { /* * Globals are DEPRECATED as of version 1.5.0.1 * Use the Context object to access objects instead. * Example: $this->context->cart */ global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency; if (self::$initialized) { return; } self::$initialized = true; parent::init(); // enable Symfony error handler if debug mode enabled $this->initDebugguer(); // If current URL use SSL, set it true (used a lot for module redirect) if (Tools::usingSecureMode()) { $useSSL = true; } // For compatibility with globals, DEPRECATED as of version 1.5.0.1 $css_files = $this->css_files; $js_files = $this->js_files; $this->sslRedirection(); if ($this->ajax) { $this->display_header = false; $this->display_footer = false; } // If account created with the 2 steps register process, remove 'account_created' from cookie if (isset($this->context->cookie->account_created)) { unset($this->context->cookie->account_created); } ob_start(); // Init cookie language // @TODO This method must be moved into switchLanguage Tools::setCookieLanguage($this->context->cookie); $protocol_link = Configuration::get('PS_SSL_ENABLED') || Tools::usingSecureMode() ? 'https://' : 'http://'; $useSSL = isset($this->ssl) && $this->ssl && Configuration::get('PS_SSL_ENABLED') || Tools::usingSecureMode() ? true : false; $protocol_content = $useSSL ? 'https://' : 'http://'; $link = new Link($protocol_link, $protocol_content); $this->context->link = $link; if ($id_cart = (int) $this->recoverCart()) { $this->context->cookie->id_cart = (int) $id_cart; } if ($this->auth && !$this->context->customer->isLogged()) { Tools::redirect('index.php?controller=authentication' . ($this->authRedirection ? '&back=' . $this->authRedirection : '')); } /* Theme is missing */ if (!is_dir(_PS_THEME_DIR_)) { throw new PrestaShopException(sprintf(Tools::displayError('Current theme unavailable "%s". Please check your theme directory name and permissions.'), basename(rtrim(_PS_THEME_DIR_, '/\\')))); } if (Configuration::get('PS_GEOLOCATION_ENABLED')) { if (($new_default = $this->geolocationManagement($this->context->country)) && Validate::isLoadedObject($new_default)) { $this->context->country = $new_default; } } elseif (Configuration::get('PS_DETECT_COUNTRY')) { $has_currency = isset($this->context->cookie->id_currency) && (int) $this->context->cookie->id_currency; $has_country = isset($this->context->cookie->iso_code_country) && $this->context->cookie->iso_code_country; $has_address_type = false; if ((int) $this->context->cookie->id_cart && ($cart = new Cart($this->context->cookie->id_cart)) && Validate::isLoadedObject($cart)) { $has_address_type = isset($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) && $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}; } if ((!$has_currency || $has_country) && !$has_address_type) { $id_country = $has_country && !Validate::isLanguageIsoCode($this->context->cookie->iso_code_country) ? (int) Country::getByIso(strtoupper($this->context->cookie->iso_code_country)) : (int) Tools::getCountry(); $country = new Country($id_country, (int) $this->context->cookie->id_lang); if (!$has_currency && validate::isLoadedObject($country) && $this->context->country->id !== $country->id) { $this->context->country = $country; $this->context->cookie->id_currency = (int) Currency::getCurrencyInstance($country->id_currency ? (int) $country->id_currency : (int) Configuration::get('PS_CURRENCY_DEFAULT'))->id; $this->context->cookie->iso_code_country = strtoupper($country->iso_code); } } } $currency = Tools::setCurrency($this->context->cookie); if (isset($_GET['logout']) || $this->context->customer->logged && Customer::isBanned($this->context->customer->id)) { $this->context->customer->logout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } elseif (isset($_GET['mylogout'])) { $this->context->customer->mylogout(); Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null); } /* Cart already exists */ if ((int) $this->context->cookie->id_cart) { if (!isset($cart)) { $cart = new Cart($this->context->cookie->id_cart); } if (Validate::isLoadedObject($cart) && $cart->OrderExists()) { PrestaShopLogger::addLog('Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart', 1, null, 'Cart', (int) $this->context->cookie->id_cart, true); unset($this->context->cookie->id_cart, $cart, $this->context->cookie->checkedTOS); $this->context->cookie->check_cgv = false; } elseif (intval(Configuration::get('PS_GEOLOCATION_ENABLED')) && !in_array(strtoupper($this->context->cookie->iso_code_country), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES'))) && $cart->nbProducts() && intval(Configuration::get('PS_GEOLOCATION_NA_BEHAVIOR')) != -1 && !FrontController::isInWhitelistForGeolocation() && !in_array($_SERVER['SERVER_NAME'], array('localhost', '127.0.0.1'))) { /* Delete product of cart, if user can't make an order from his country */ PrestaShopLogger::addLog('Frontcontroller::init - GEOLOCATION is deleting a cart', 1, null, 'Cart', (int) $this->context->cookie->id_cart, true); unset($this->context->cookie->id_cart, $cart); } elseif ($this->context->cookie->id_customer != $cart->id_customer || $this->context->cookie->id_lang != $cart->id_lang || $currency->id != $cart->id_currency) { // update cart values if ($this->context->cookie->id_customer) { $cart->id_customer = (int) $this->context->cookie->id_customer; } $cart->id_lang = (int) $this->context->cookie->id_lang; $cart->id_currency = (int) $currency->id; $cart->update(); } /* Select an address if not set */ if (isset($cart) && (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0 || !isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) && $this->context->cookie->id_customer) { $to_update = false; if (!isset($cart->id_address_delivery) || $cart->id_address_delivery == 0) { $to_update = true; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if (!isset($cart->id_address_invoice) || $cart->id_address_invoice == 0) { $to_update = true; $cart->id_address_invoice = (int) Address::getFirstCustomerAddressId($cart->id_customer); } if ($to_update) { $cart->update(); } } } if (!isset($cart) || !$cart->id) { $cart = new Cart(); $cart->id_lang = (int) $this->context->cookie->id_lang; $cart->id_currency = (int) $this->context->cookie->id_currency; $cart->id_guest = (int) $this->context->cookie->id_guest; $cart->id_shop_group = (int) $this->context->shop->id_shop_group; $cart->id_shop = $this->context->shop->id; if ($this->context->cookie->id_customer) { $cart->id_customer = (int) $this->context->cookie->id_customer; $cart->id_address_delivery = (int) Address::getFirstCustomerAddressId($cart->id_customer); $cart->id_address_invoice = (int) $cart->id_address_delivery; } else { $cart->id_address_delivery = 0; $cart->id_address_invoice = 0; } // Needed if the merchant want to give a free product to every visitors $this->context->cart = $cart; CartRule::autoAddToCart($this->context); } else { $this->context->cart = $cart; } $this->context->cart->checkAndUpdateAddresses(); $this->context->smarty->assign('request_uri', Tools::safeOutput(urldecode($_SERVER['REQUEST_URI']))); // Automatically redirect to the canonical URL if needed if (!empty($this->php_self) && !Tools::getValue('ajax')) { $this->canonicalRedirection($this->context->link->getPageLink($this->php_self, $this->ssl, $this->context->language->id)); } Product::initPricesComputation(); $display_tax_label = $this->context->country->display_tax_label; if (isset($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) && $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}) { $infos = Address::getCountryAndState((int) $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $country = new Country((int) $infos['id_country']); $this->context->country = $country; if (Validate::isLoadedObject($country)) { $display_tax_label = $country->display_tax_label; } } $languages = Language::getLanguages(true, $this->context->shop->id); $meta_language = array(); foreach ($languages as $lang) { $meta_language[] = $lang['iso_code']; } /* * These shortcuts are DEPRECATED as of version 1.5.0.1 * Use the Context to access objects instead. * Example: $this->context->cart */ self::$cookie = $this->context->cookie; self::$cart = $cart; self::$smarty = $this->context->smarty; self::$link = $link; $defaultCountry = $this->context->country; $this->displayMaintenancePage(); if (Country::GEOLOC_FORBIDDEN == $this->restrictedCountry) { $this->displayRestrictedCountryPage(); } $this->iso = $iso; $this->context->cart = $cart; $this->context->currency = $currency; }