/** * Updates customization mode (design/translation/css editor) * @param array $modes list of modes with statuses * @return bool true if mode updated, false - otherwise */ function fn_update_customization_mode($modes) { if (!empty($modes)) { $available_modes = fn_get_customization_modes(); $enabled_modes = fn_array_combine(explode(',', Registry::get('settings.customization_mode')), true); foreach ($modes as $c_mode => $c_status) { if (empty($available_modes[$c_mode])) { // skip enable/disable for non-existent modes continue; } if ($c_status == 'enable') { $enabled_modes[$c_mode] = true; } elseif ($c_status == 'disable') { unset($enabled_modes[$c_mode]); } } Settings::instance()->updateValue('customization_mode', implode(',', array_keys($enabled_modes))); return true; } return false; }
function fn_companies_apply_cart_shipping_rates(&$cart, $cart_products, $auth, $shipping_rates) { $cart['use_suppliers'] = false; $cart['shipping_failed'] = false; // Get suppliers products $supplier_products = array(); $total_freight = 0; foreach ($cart_products as $k => $v) { $s_id = !empty($v['company_id']) ? $v['company_id'] : 0; if (($v['is_edp'] != 'Y' || $v['is_edp'] == 'Y' && $v['edp_shipping'] == 'Y') && $v['free_shipping'] != 'Y') { $supplier_products[$s_id][] = $k; } } if (!empty($supplier_products) && !defined('CACHED_SHIPPING_RATES')) { $supplier_rates = array(); foreach ($supplier_products as $rate_id => $products) { foreach ($products as $cart_id) { $rate = $cart_products[$cart_id]['shipping_freight'] * $cart_products[$cart_id]['amount']; empty($supplier_rates[$rate_id]) ? $supplier_rates[$rate_id] = $rate : ($supplier_rates[$rate_id] += $rate); $total_freight += $rate; } } if (!empty($supplier_rates)) { foreach ($shipping_rates as $shipping_id => $shipping) { if (!empty($shipping['rates'])) { foreach ($shipping['rates'] as $rate_id => $rate) { if (isset($supplier_rates[$rate_id])) { $shipping_rates[$shipping_id]['rates'][$rate_id] = $rate - $total_freight + $supplier_rates[$rate_id]; } else { unset($shipping_rates[$shipping_id]['rates'][$rate_id]); } } } } } } // Add zero rates to free shipping foreach ($shipping_rates as $sh_id => $v) { if (!empty($v['added_manually'])) { $shipping_rates[$sh_id]['rates'] = fn_array_combine(array_keys($supplier_products), 0); } } // If all suppliers should be displayed in one box, filter them if (PRODUCT_TYPE != 'MULTIVENDOR' && Registry::get('settings.Suppliers.display_shipping_methods_separately') !== 'Y') { $s_ids = array_keys($supplier_products); foreach ($shipping_rates as $sh_id => $v) { if (sizeof(array_intersect($s_ids, array_keys($v['rates']))) != sizeof($s_ids)) { unset($shipping_rates[$sh_id]); } } } // Get suppliers and determine what shipping methods applicable to them $suppliers = array(); foreach ($supplier_products as $s_id => $p_ids) { if (!empty($s_id)) { $s_data = fn_get_company_data($s_id); $cart['use_suppliers'] = true; } else { $s_data = array('company' => Registry::get('settings.Company.company_name')); } $suppliers[$s_id] = array('company' => $s_data['company'], 'products' => $p_ids, 'rates' => array()); // Get shipping methods foreach ($shipping_rates as $sh_id => $shipping) { if (isset($shipping['rates'][$s_id])) { $shipping['rate'] = $shipping['rates'][$s_id]; unset($shipping['rates']); $suppliers[$s_id]['rates'][$sh_id] = $shipping; } } } // Select shipping for each supplier $cart_shipping = !empty($cart['shipping']) ? $cart['shipping'] : array(); $cart['shipping'] = array(); foreach ($suppliers as $s_id => $supplier) { if (!empty($supplier['products']) && is_array($supplier['products']) && $s_id === 0) { $all_edp_no_shipping = true; foreach ($supplier['products'] as $pcart_id) { $all_edp_no_shipping = $all_edp_no_shipping && ($cart_products[$pcart_id]['is_edp'] == "Y" && $cart_products[$pcart_id]['edp_shipping'] == "N"); } $suppliers[$s_id]['all_edp_no_shipping'] = $all_edp_no_shipping; } if (empty($supplier['rates'])) { if (!empty($supplier['products']) && is_array($supplier['products'])) { foreach ((array) $supplier['products'] as $pcart_id) { if ($cart_products[$pcart_id]['free_shipping'] != "Y" && ($cart_products[$pcart_id]['is_edp'] != "Y" || $cart_products[$pcart_id]['is_edp'] == "Y" && $cart_products[$pcart_id]['edp_shipping'] == "Y")) { $cart['shipping_failed'] = true; break; } } } else { $cart['shipping_failed'] = true; } continue; } $sh_ids = array_keys($supplier['rates']); $shipping_selected = false; // Check if shipping method from this supplier is selected foreach ($sh_ids as $sh_id) { if (isset($cart_shipping[$sh_id]) && isset($cart_shipping[$sh_id]['rates'][$s_id])) { if ($shipping_selected == false) { if (!isset($cart['shipping'][$sh_id])) { $cart['shipping'][$sh_id] = $cart_shipping[$sh_id]; } $cart['shipping'][$sh_id]['rates'][$s_id] = $supplier['rates'][$sh_id]['rate']; // set new rate $shipping_selected = true; } else { //unset($cart['shipping'][$sh_id]['rates'][$s_id]); } } } if ($shipping_selected == false) { $sh_id = reset($sh_ids); if (empty($cart['shipping'][$sh_id])) { if (empty($cart_shipping[$sh_id])) { $cart['shipping'][$sh_id] = array('shipping' => $supplier['rates'][$sh_id]['name']); } else { $cart['shipping'][$sh_id] = $cart_shipping[$sh_id]; } } $cart['shipping'][$sh_id]['rates'][$s_id] = $supplier['rates'][$sh_id]['rate']; } } // Calculate total shipping cost $cart['shipping_cost'] = 0; foreach ($cart['shipping'] as $sh_id => $shipping) { $cart['shipping_cost'] += array_sum($shipping['rates']); } ksort($suppliers); Registry::get('view')->assign('suppliers', $suppliers); // FIXME: That's bad... Registry::get('view')->assign('supplier_ids', array_keys($suppliers)); // FIXME: That's bad... return true; }
/** * Gets s3 object * * @param boolean $debug return error message instead of script stop * @return \AmazonS3 s3 object */ public function s3($debug = false) { // This is workaround to composer autoloader if (!class_exists('CFLoader')) { throw new ClassNotFoundException('Amazon: autoload failed'); } if (empty($this->_s3)) { \CFCredentials::set(array('@default' => array('key' => $this->getOption('key'), 'secret' => $this->getOption('secret')))); $this->_s3 = new \AmazonS3(); $this->_s3->use_ssl = false; $this->_buckets = fn_array_combine($this->_s3->get_bucket_list(), true); } $message = ''; $bucket = $this->getOption('bucket'); if (empty($this->_buckets[$bucket])) { $res = $this->_s3->create_bucket($bucket, $this->getOption('region')); if ($res->isOK()) { $res = $this->_s3->create_cors_config($bucket, array('cors_rule' => array(array('allowed_origin' => '*', 'allowed_method' => 'GET')))); if ($res->isOK()) { $this->_buckets[$bucket] = true; } else { $message = (string) $res->body->Message; } } else { $message = (string) $res->body->Message; } } if (!empty($message)) { if ($debug == true) { return $message; } throw new ExternalException('Amazon: ' . $message); } return $this->_s3; }
function fn_checkout_update_shipping(&$cart, $shipping_ids) { $cart['shipping'] = array(); $parsed_data = array(); foreach ($shipping_ids as $k => $shipping_id) { if (strpos($k, ',') !== false) { $parsed_data = fn_array_merge($parsed_data, fn_array_combine(fn_explode(',', $k), $shipping_id)); } else { $parsed_data[$k] = $shipping_id; } } foreach ($parsed_data as $k => $shipping_id) { if (empty($cart['shipping'][$shipping_id])) { $cart['shipping'][$shipping_id] = array('shipping' => $_SESSION['shipping_rates'][$shipping_id]['name']); } if (!isset($cart['shipping'][$shipping_id]['rates'])) { $cart['shipping'][$shipping_id]['rates'] = array(); } if (isset($_SESSION['shipping_rates'][$shipping_id]['rates'][$k])) { $cart['shipping'][$shipping_id]['rates'][$k] = $_SESSION['shipping_rates'][$shipping_id]['rates'][$k]; } } return true; }
/** * Init user * * @return boolean always true */ function fn_init_user($area = AREA) { $user_info = array(); if (!empty(Tygh::$app['session']['auth']['user_id'])) { $user_info = fn_get_user_short_info(Tygh::$app['session']['auth']['user_id']); if (empty($user_info)) { // user does not exist in the database, but exists in session Tygh::$app['session']['auth'] = array(); } else { Tygh::$app['session']['auth']['usergroup_ids'] = fn_define_usergroups(array('user_id' => Tygh::$app['session']['auth']['user_id'], 'user_type' => $user_info['user_type'])); } } $first_init = false; if (empty(Tygh::$app['session']['auth'])) { $udata = array(); $user_id = fn_get_session_data($area . '_user_id'); if ($area == 'A' && defined('CONSOLE')) { $user_id = 1; } if ($user_id) { fn_define('LOGGED_VIA_COOKIE', true); } fn_login_user($user_id); if (!defined('NO_SESSION')) { Tygh::$app['session']['cart'] = isset(Tygh::$app['session']['cart']) ? Tygh::$app['session']['cart'] : array(); } if (defined('LOGGED_VIA_COOKIE') && !empty(Tygh::$app['session']['auth']['user_id']) || ($cu_id = fn_get_session_data('cu_id'))) { $first_init = true; if (!empty($cu_id)) { fn_define('COOKIE_CART', true); } // Cleanup cached shipping rates unset(Tygh::$app['session']['shipping_rates']); $_utype = empty(Tygh::$app['session']['auth']['user_id']) ? 'U' : 'R'; $_uid = empty(Tygh::$app['session']['auth']['user_id']) ? $cu_id : Tygh::$app['session']['auth']['user_id']; fn_extract_cart_content(Tygh::$app['session']['cart'], $_uid, 'C', $_utype); fn_save_cart_content(Tygh::$app['session']['cart'], $_uid, 'C', $_utype); if (!empty(Tygh::$app['session']['auth']['user_id'])) { Tygh::$app['session']['cart']['user_data'] = fn_get_user_info(Tygh::$app['session']['auth']['user_id']); $user_info = fn_get_user_short_info(Tygh::$app['session']['auth']['user_id']); } } } if (fn_is_expired_storage_data('cart_products_next_check', SECONDS_IN_HOUR * 12)) { db_query("DELETE FROM ?:user_session_products WHERE user_type = 'U' AND timestamp < ?i", TIME - SECONDS_IN_DAY * 30); } if (!fn_allowed_for('ULTIMATE:FREE')) { // If administrative account has usergroup, it means the access restrictions are in action if ($area == 'A' && !empty(Tygh::$app['session']['auth']['usergroup_ids'])) { fn_define('RESTRICTED_ADMIN', true); } } if (!empty($user_info) && $user_info['user_type'] == 'A' && (empty($user_info['company_id']) || fn_allowed_for('ULTIMATE') && $user_info['company_id'] == Registry::get('runtime.company_id'))) { $customization_mode = fn_array_combine(explode(',', Registry::get('settings.customization_mode')), true); if (!empty($customization_mode)) { Registry::set('runtime.customization_mode', $customization_mode); if ($area == 'A' || Embedded::isEnabled()) { Registry::set('runtime.customization_mode.live_editor', false); } } } fn_set_hook('user_init', Tygh::$app['session']['auth'], $user_info, $first_init); Registry::set('user_info', $user_info); return array(INIT_STATUS_OK); }
/** * Updates customization mode (design/translation/css editor) * @param array $modes list of modes with statuses * @return bool true if mode updated, false - otherwise */ function fn_update_customization_mode($modes) { if (empty($modes)) { return false; } $available_modes = fn_get_customization_modes(); $enabled_modes = fn_array_combine(explode(',', Registry::get('settings.customization_mode')), true); foreach ($modes as $c_mode => $c_status) { if (empty($available_modes[$c_mode])) { // skip enable/disable for non-existent modes continue; } if ($c_status == 'enable') { $enabled_modes[$c_mode] = true; } elseif ($c_status == 'disable') { unset($enabled_modes[$c_mode]); } } /** * Hook is executed before saving enabled customization modes to DB. * * @param array $modes List of modes to be changed passed to function * @param array $enabled_modes Modes that will be enabled * @param array $available_modes All available modes */ fn_set_hook('update_customization_mode', $modes, $enabled_modes, $available_modes); Settings::instance()->updateValue('customization_mode', implode(',', array_keys($enabled_modes))); return true; }
/** * Get all block settings * * @return array block settings */ function fn_get_all_blocks($selected_section = '') { // Get core blocks $base_dir = DIR_SKINS . Registry::get('settings.skin_name_customer') . '/customer/'; $blocks = fn_get_dir_contents($base_dir . 'blocks', false, true, '.tpl', 'blocks/'); $wrappers = fn_get_dir_contents($base_dir . 'blocks/wrappers', false, true, '.tpl', 'blocks/wrappers/'); // Now get blocks from addons foreach (Registry::get('addons') as $addon => $v) { if ($v['status'] == 'A') { $_blocks = fn_get_dir_contents($base_dir . 'addons/' . $addon . '/blocks', false, true, '.tpl', 'addons/' . $addon . '/blocks/'); if (!empty($_blocks)) { $blocks = fn_array_merge($blocks, $_blocks, false); } $_wrappers = fn_get_dir_contents($base_dir . 'addons/' . $addon . '/blocks/wrappers', false, true, '.tpl', 'addons/' . $addon . '/blocks/wrappers/'); if (!empty($_wrappers)) { $wrappers = fn_array_merge($wrappers, $_wrappers, false); } } } // Convert array with blocks to key=>value form $blocks = fn_array_combine($blocks, true); // Get block options $_structure = fn_get_block_properties(); foreach ($_structure as $object => $data) { if (!empty($data['appearances'])) { foreach ($data['appearances'] as $tpl => $_data) { if (!empty($blocks[$tpl])) { unset($blocks[$tpl]); } if (isset($_data['conditions']['locations'])) { if (!in_array($selected_section, $_data['conditions']['locations'])) { unset($_structure[$object]['appearances'][$tpl]); } } } } } // Get blocks with the "settings" $specific_settings = fn_get_block_specific_settings(); $additional_sections = array(); if (!empty($specific_settings['list_object'])) { foreach ($specific_settings['list_object'] as $template => $block) { if (isset($block['settings'])) { if (!empty($blocks[$template])) { unset($blocks[$template]); } if (!empty($block['settings']['section'])) { if (isset($block['settings']['locations'])) { if (!in_array($selected_section, $block['settings']['locations'])) { continue; } } $additional_sections[$block['settings']['section']]['items'][] = array('name' => fn_get_block_template_description($template), 'template' => $template); } } } } $_blocks = array(); foreach ($blocks as $k => $v) { $_blocks[] = array('name' => fn_get_block_template_description($k), 'template' => $k); } $result = array('dynamic' => $_structure, 'static' => $_blocks, 'wrappers' => $wrappers); foreach ($additional_sections as $section => $data) { $result['additional'][$section]['items'] = $data['items']; } return $result; }