Example #1
0
/**
 * 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;
}
Example #2
0
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;
}
Example #3
0
 /**
  * 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;
 }
Example #4
0
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;
}
Example #5
0
/**
 * 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);
}
Example #6
0
/**
 * 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;
}
Example #7
0
/**
 * 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;
}