aboutsummaryrefslogtreecommitdiffstats
path: root/public/catalog/controller/startup/startup.php
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
committerJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
commit2eed7b082f83630301e51f57ca8394de228a8605 (patch)
tree1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/catalog/controller/startup/startup.php
downloadlibrecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip
first commit
Diffstat (limited to 'public/catalog/controller/startup/startup.php')
-rw-r--r--public/catalog/controller/startup/startup.php194
1 files changed, 194 insertions, 0 deletions
diff --git a/public/catalog/controller/startup/startup.php b/public/catalog/controller/startup/startup.php
new file mode 100644
index 0000000..41b6ec4
--- /dev/null
+++ b/public/catalog/controller/startup/startup.php
@@ -0,0 +1,194 @@
+<?php
+class ControllerStartupStartup extends Controller {
+ public function index() {
+ // Store
+ if ($this->request->server['HTTPS']) {
+ $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $this->db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
+ } else {
+ $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $this->db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
+ }
+
+ if (isset($this->request->get['store_id'])) {
+ $this->config->set('config_store_id', (int)$this->request->get['store_id']);
+ } else if ($query->num_rows) {
+ $this->config->set('config_store_id', $query->row['store_id']);
+ } else {
+ $this->config->set('config_store_id', 0);
+ }
+
+ if (!$query->num_rows) {
+ $this->config->set('config_url', HTTP_SERVER);
+ $this->config->set('config_ssl', HTTPS_SERVER);
+ }
+
+ // Settings
+ $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "setting` WHERE store_id = '0' OR store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY store_id ASC");
+
+ foreach ($query->rows as $result) {
+ if (!$result['serialized']) {
+ $this->config->set($result['key'], $result['value']);
+ } else {
+ $this->config->set($result['key'], json_decode($result['value'], true));
+ }
+ }
+
+ // Theme
+ $this->config->set('template_cache', $this->config->get('developer_theme'));
+
+ // Url
+ $this->registry->set('url', new Url($this->config->get('config_url'), $this->config->get('config_ssl')));
+
+ // Language
+ $code = '';
+
+ $this->load->model('localisation/language');
+
+ $languages = $this->model_localisation_language->getLanguages();
+
+ if (isset($this->session->data['language'])) {
+ $code = $this->session->data['language'];
+ }
+
+ if (isset($this->request->cookie['language']) && !array_key_exists($code, $languages)) {
+ $code = $this->request->cookie['language'];
+ }
+
+ // Language Detection
+ if (!empty($this->request->server['HTTP_ACCEPT_LANGUAGE']) && !array_key_exists($code, $languages)) {
+ $detect = '';
+
+ $browser_languages = explode(',', $this->request->server['HTTP_ACCEPT_LANGUAGE']);
+
+ // Try using local to detect the language
+ foreach ($browser_languages as $browser_language) {
+ foreach ($languages as $key => $value) {
+ if ($value['status']) {
+ $locale = explode(',', $value['locale']);
+
+ if (in_array($browser_language, $locale)) {
+ $detect = $key;
+ break 2;
+ }
+ }
+ }
+ }
+
+ if (!$detect) {
+ // Try using language folder to detect the language
+ foreach ($browser_languages as $browser_language) {
+ if (array_key_exists(strtolower($browser_language), $languages)) {
+ $detect = strtolower($browser_language);
+
+ break;
+ }
+ }
+ }
+
+ $code = $detect ? $detect : '';
+ }
+
+ if (!array_key_exists($code, $languages)) {
+ $code = $this->config->get('config_language');
+ }
+
+ if (!isset($this->session->data['language']) || $this->session->data['language'] != $code) {
+ $this->session->data['language'] = $code;
+ }
+
+ if (!isset($this->request->cookie['language']) || $this->request->cookie['language'] != $code) {
+ setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
+ }
+
+ // Overwrite the default language object
+ $language = new Language($code);
+ $language->load($code);
+
+ $this->registry->set('language', $language);
+
+ // Set the config language_id
+ $this->config->set('config_language_id', $languages[$code]['language_id']);
+
+ // Customer
+ $customer = new Cart\Customer($this->registry);
+ $this->registry->set('customer', $customer);
+
+ // Customer Group
+ if (isset($this->session->data['customer']) && isset($this->session->data['customer']['customer_group_id'])) {
+ // For API calls
+ $this->config->set('config_customer_group_id', $this->session->data['customer']['customer_group_id']);
+ } elseif ($this->customer->isLogged()) {
+ // Logged in customers
+ $this->config->set('config_customer_group_id', $this->customer->getGroupId());
+ } elseif (isset($this->session->data['guest']) && isset($this->session->data['guest']['customer_group_id'])) {
+ $this->config->set('config_customer_group_id', $this->session->data['guest']['customer_group_id']);
+ }
+
+ // Tracking Code
+ if (isset($this->request->get['tracking'])) {
+ setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/');
+
+ $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'");
+ }
+
+ // Currency
+ $code = '';
+
+ $this->load->model('localisation/currency');
+
+ $currencies = $this->model_localisation_currency->getCurrencies();
+
+ if (isset($this->session->data['currency'])) {
+ $code = $this->session->data['currency'];
+ }
+
+ if (isset($this->request->cookie['currency']) && !array_key_exists($code, $currencies)) {
+ $code = $this->request->cookie['currency'];
+ }
+
+ if (!array_key_exists($code, $currencies)) {
+ $code = $this->config->get('config_currency');
+ }
+
+ if (!isset($this->session->data['currency']) || $this->session->data['currency'] != $code) {
+ $this->session->data['currency'] = $code;
+ }
+
+ if (!isset($this->request->cookie['currency']) || $this->request->cookie['currency'] != $code) {
+ setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
+ }
+
+ $this->registry->set('currency', new Cart\Currency($this->registry));
+
+ // Tax
+ $this->registry->set('tax', new Cart\Tax($this->registry));
+
+ if (isset($this->session->data['shipping_address'])) {
+ $this->tax->setShippingAddress($this->session->data['shipping_address']['country_id'], $this->session->data['shipping_address']['zone_id']);
+ } elseif ($this->config->get('config_tax_default') == 'shipping') {
+ $this->tax->setShippingAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
+ }
+
+ if (isset($this->session->data['payment_address'])) {
+ $this->tax->setPaymentAddress($this->session->data['payment_address']['country_id'], $this->session->data['payment_address']['zone_id']);
+ } elseif ($this->config->get('config_tax_default') == 'payment') {
+ $this->tax->setPaymentAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
+ }
+
+ $this->tax->setStoreAddress($this->config->get('config_country_id'), $this->config->get('config_zone_id'));
+
+ // Weight
+ $this->registry->set('weight', new Cart\Weight($this->registry));
+
+ // Length
+ $this->registry->set('length', new Cart\Length($this->registry));
+
+ // Cart
+ $this->registry->set('cart', new Cart\Cart($this->registry));
+
+ // Encryption
+ $this->registry->set('encryption', new Encryption($this->config->get('config_encryption')));
+
+ // OpenBay Pro
+ $this->registry->set('openbay', new Openbay($this->registry));
+ }
+}