/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
function smarty_function_render_location($params, &$smarty)
{
    if (!empty($params['dispatch'])) {
        $dispatch = $params['dispatch'];
    } elseif ($smarty->getTemplateVars('exception_status')) {
        $dispatch = 'no_page';
    } else {
        $dispatch = !empty($_REQUEST['dispatch']) ? $_REQUEST['dispatch'] : 'index.index';
    }
    $location_id = 0;
    if (!empty($params['location_id'])) {
        $location_id = $params['location_id'];
    }
    $area = !empty($params['area']) ? $params['area'] : AREA;
    if (!empty($params['dynamic_object'])) {
        $dynamic_object = $params['dynamic_object'];
    } elseif (!empty($_REQUEST['dynamic_object']) && $area != 'C') {
        $dynamic_object = $_REQUEST['dynamic_object'];
    } else {
        $dynamic_object_scheme = SchemesManager::getDynamicObject($dispatch, $area);
        if (!empty($dynamic_object_scheme) && !empty($_REQUEST[$dynamic_object_scheme['key']])) {
            $dynamic_object['object_type'] = $dynamic_object_scheme['object_type'];
            $dynamic_object['object_id'] = $_REQUEST[$dynamic_object_scheme['key']];
        } else {
            $dynamic_object = array();
        }
    }
    $lang_code = !empty($params['lang_code']) ? $params['lang_code'] : DESCR_SL;
    $br = new RenderManager($dispatch, $area, $dynamic_object, $location_id, $lang_code);
    return $br->render();
}
function smarty_function_render_block($params, &$smarty)
{
    if (!empty($params['block_id'])) {
        $block_id = $params['block_id'];
        $snapping_id = !empty($params['snapping_id']) ? $params['snapping_id'] : 0;
        if (!empty($params['dispatch'])) {
            $dispatch = $params['dispatch'];
        } else {
            $dispatch = !empty($_REQUEST['dispatch']) ? $_REQUEST['dispatch'] : 'index.index';
        }
        $area = !empty($params['area']) ? $params['area'] : AREA;
        if (!empty($params['dynamic_object'])) {
            $dynamic_object = $params['dynamic_object'];
        } elseif (!empty($_REQUEST['dynamic_object']) && $area != 'C') {
            $dynamic_object = $_REQUEST['dynamic_object'];
        } else {
            $dynamic_object_scheme = SchemesManager::getDynamicObject($dispatch, $area);
            if (!empty($dynamic_object_scheme) && !empty($_REQUEST[$dynamic_object_scheme['key']])) {
                $dynamic_object['object_type'] = $dynamic_object_scheme['object_type'];
                $dynamic_object['object_id'] = $_REQUEST[$dynamic_object_scheme['key']];
            } else {
                $dynamic_object = array();
            }
        }
        $block = Block::instance()->getById($block_id, $snapping_id, $dynamic_object, DESCR_SL);
        return RenderManager::renderBlock($block);
    }
}
Beispiel #3
0
 /**
  * Gets list of locations
  *
  * @param  array  $params    input params
  * @param  string $lang_code 2 letter language code
  * @return array  Array of locations data
  */
 public function getList($params = array(), $lang_code = CART_LANGUAGE)
 {
     /**
      * Prepares params for SQL query before getting locations
      * @param array $params input params
      * @param string $lang_code 2 letter language code
      */
     fn_set_hook('get_locations_pre', $params, $lang_code);
     $sortings = array('location_id' => 'l.location_id', 'dispatch' => 'l.dispatch', 'is_default' => 'l.is_default', 'layout_id' => 'l.layout_id', 'location' => array('l.is_default', 'd.name'), 'object_ids' => 'l.object_ids', 'position' => 'l.position');
     $sorting = db_sort($params, $sortings, 'is_default', 'desc');
     $join = $condition = '';
     if (!empty($params['dispatch'])) {
         $condition .= db_quote(" AND l.dispatch = ?s", $params['dispatch']);
     }
     if (!empty($params['location_id'])) {
         $condition .= db_quote(" AND l.location_id = ?i", $params['location_id']);
     }
     if (!empty($params['is_default'])) {
         $condition .= db_quote(" AND l.is_default = 1");
     }
     if (!empty($params['dynamic_object']) && !empty($params['dispatch'])) {
         if (!empty($params['dynamic_object']['object_id'])) {
             $dynamic_object_scheme = SchemesManager::getDynamicObject($params['dispatch'], 'C');
             if (!empty($dynamic_object_scheme)) {
                 $condition .= db_quote(" AND (FIND_IN_SET(?i, l.object_ids) OR l.object_ids = '')", $params['dynamic_object']['object_id']);
             }
         }
     }
     $limit = '';
     if (!empty($params['limit'])) {
         $limit = db_quote(" LIMIT ?i", $params['limit']);
     }
     // Try to get location for this dispatch
     $locations = db_get_hash_array("SELECT * FROM ?:bm_locations as l " . "LEFT JOIN ?:bm_locations_descriptions as d ON d.location_id = l.location_id AND d.lang_code = ?s ?p" . "WHERE l.layout_id = ?i ?p {$sorting} {$limit}", 'location_id', $lang_code, $join, $this->_layout_id, $condition);
     /**
      * Processes locations list after getting it
      * @param array $locations Array of locations data
      * @param string $lang_code 2 letter language code
      */
     fn_set_hook('get_locations_post', $locations, $lang_code);
     return $locations;
 }
Beispiel #4
0
/**
 * Dispathes the execution control to correct controller
 *
 * @return nothing
 */
function fn_dispatch($controller = '', $mode = '', $action = '', $dispatch_extra = '', $area = AREA)
{
    Debugger::checkpoint('After init');
    $auth = $_SESSION['auth'];
    $controller = empty($controller) ? Registry::get('runtime.controller') : $controller;
    $mode = empty($mode) ? Registry::get('runtime.mode') : $mode;
    $action = empty($action) ? Registry::get('runtime.action') : $action;
    $dispatch_extra = empty($dispatch_extra) ? Registry::get('runtime.dispatch_extra') : $dispatch_extra;
    fn_set_hook('before_dispatch', $controller, $mode, $action, $dispatch_extra, $area);
    $view = Registry::get('view');
    $run_controllers = true;
    $external = false;
    $status = CONTROLLER_STATUS_NO_PAGE;
    // CSRF protection
    if (fn_is_csrf_protection_enabled($auth) && !fn_csrf_validate_request(array('server' => $_SERVER, 'request' => $_REQUEST, 'session' => $_SESSION, 'controller' => $controller, 'mode' => $mode, 'action' => $action, 'dispatch_extra' => $dispatch_extra, 'area' => $area, 'auth' => $auth))) {
        fn_set_notification('E', __('error'), __('text_csrf_attack'));
        fn_redirect(fn_url());
    }
    // If $config['http_host'] was different from the domain name, there was redirection to $config['http_host'] value.
    if (strtolower(Registry::get('config.current_host')) != strtolower(REAL_HOST) && $_SERVER['REQUEST_METHOD'] == 'GET' && !defined('CONSOLE')) {
        if (!empty($_SERVER['REDIRECT_URL'])) {
            $qstring = $_SERVER['REDIRECT_URL'];
        } else {
            if (!empty($_SERVER['REQUEST_URI'])) {
                $qstring = $_SERVER['REQUEST_URI'];
            } else {
                $qstring = Registry::get('config.current_url');
            }
        }
        $curent_path = Registry::get('config.current_path');
        if (!empty($curent_path) && strpos($qstring, $curent_path) === 0) {
            $qstring = substr_replace($qstring, '', 0, fn_strlen($curent_path));
        }
        fn_redirect(Registry::get('config.current_location') . $qstring, false, true);
    }
    $upload_max_filesize = Bootstrap::getIniParam('upload_max_filesize');
    $post_max_size = Bootstrap::getIniParam('post_max_size');
    if (!defined('AJAX_REQUEST') && isset($_SERVER['CONTENT_LENGTH']) && ($_SERVER['CONTENT_LENGTH'] > fn_return_bytes($upload_max_filesize) || $_SERVER['CONTENT_LENGTH'] > fn_return_bytes($post_max_size))) {
        $max_size = fn_return_bytes($upload_max_filesize) < fn_return_bytes($post_max_size) ? $upload_max_filesize : $post_max_size;
        fn_set_notification('E', __('error'), __('text_forbidden_uploaded_file_size', array('[size]' => $max_size)));
        fn_redirect($_SERVER['HTTP_REFERER']);
    }
    // If URL contains session ID, remove it
    if (!defined('AJAX_REQUEST') && !empty($_REQUEST[Session::getName()]) && $_SERVER['REQUEST_METHOD'] == 'GET') {
        fn_redirect(fn_query_remove(Registry::get('config.current_url'), Session::getName()));
    }
    // If demo mode is enabled, check permissions FIX ME - why did we need one more user login check?
    if ($area == 'A') {
        if (Registry::get('config.demo_mode') == true) {
            $run_controllers = fn_check_permissions($controller, $mode, 'demo');
            if ($run_controllers == false) {
                fn_set_notification('W', __('demo_mode'), __('demo_mode_content_text'), 'K', 'demo_mode');
                if (defined('AJAX_REQUEST')) {
                    exit;
                }
                fn_delete_notification('changes_saved');
                $status = CONTROLLER_STATUS_REDIRECT;
                $_REQUEST['redirect_url'] = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : fn_url('');
            }
        } else {
            $run_controllers = fn_check_permissions($controller, $mode, 'admin', '', $_REQUEST);
            if ($run_controllers == false) {
                if (defined('AJAX_REQUEST')) {
                    $_info = Debugger::isActive() || fn_is_development() ? ' ' . $controller . '.' . $mode : '';
                    fn_set_notification('W', __('warning'), __('access_denied') . $_info);
                    exit;
                }
                $status = CONTROLLER_STATUS_DENIED;
            }
        }
    }
    if ($_SERVER['REQUEST_METHOD'] != 'POST' && !defined('AJAX_REQUEST')) {
        if ($area == 'A' && empty($_REQUEST['keep_location']) && !defined('CONSOLE')) {
            if (!defined('HTTPS') && Registry::get('settings.Security.secure_admin') == 'Y') {
                fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url'));
            } elseif (defined('HTTPS') && Registry::get('settings.Security.secure_admin') != 'Y') {
                fn_redirect(Registry::get('config.http_location') . '/' . Registry::get('config.current_url'));
            }
        } elseif ($area == 'C') {
            $secure_controllers = fn_get_secure_controllers();
            // if we are not on https but controller is secure, redirect to https
            if (!defined('HTTPS') && (Registry::get('settings.Security.secure_storefront') == 'full' || isset($secure_controllers[$controller]) && $secure_controllers[$controller] == 'active')) {
                fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url'), false, true);
            }
            // if we are on https and the controller is insecure, redirect to http
            if (defined('HTTPS') && Registry::get('settings.Security.secure_storefront') != 'full' && !isset($secure_controllers[$controller]) && Registry::get('settings.Security.keep_https') != 'Y') {
                fn_redirect(Registry::get('config.http_location') . '/' . Registry::get('config.current_url'), false, true);
            }
        }
    }
    LastView::instance()->prepare($_REQUEST);
    $controllers_cascade = array();
    $controllers_list = array('init');
    if ($run_controllers == true) {
        $controllers_list[] = $controller;
        $controllers_list = array_unique($controllers_list);
    }
    foreach ($controllers_list as $ctrl) {
        $core_controllers = fn_init_core_controllers($ctrl);
        list($addon_controllers) = fn_init_addon_controllers($ctrl);
        if (empty($core_controllers) && empty($addon_controllers)) {
            //$controllers_cascade = array(); // FIXME: controllers_cascade contains INIT. We should not clear initiation code.
            $status = CONTROLLER_STATUS_NO_PAGE;
            $run_controllers = false;
            break;
        }
        if (count($core_controllers) + count($addon_controllers) > 1) {
            throw new DeveloperException('Duplicate controller ' . $controller . var_export(array_merge($core_controllers, $addon_controllers), true));
        }
        $core_pre_controllers = fn_init_core_controllers($ctrl, GET_PRE_CONTROLLERS);
        $core_post_controllers = fn_init_core_controllers($ctrl, GET_POST_CONTROLLERS);
        list($addon_pre_controllers) = fn_init_addon_controllers($ctrl, GET_PRE_CONTROLLERS);
        list($addon_post_controllers, $addons) = fn_init_addon_controllers($ctrl, GET_POST_CONTROLLERS);
        // we put addon post-controller to the top of post-controller cascade if current addon serves this request
        if (count($addon_controllers)) {
            $addon_post_controllers = fn_reorder_post_controllers($addon_post_controllers, $addon_controllers[0]);
        }
        $controllers_cascade = array_merge($controllers_cascade, $addon_pre_controllers, $core_pre_controllers, $core_controllers, $addon_controllers, $core_post_controllers, $addon_post_controllers);
        if (empty($controllers_cascade)) {
            throw new DeveloperException("No controllers for: {$ctrl}");
        }
    }
    if ($mode == 'add') {
        $tpl = 'update.tpl';
    } elseif (strpos($mode, 'add_') === 0) {
        $tpl = str_replace('add_', 'update_', $mode) . '.tpl';
    } else {
        $tpl = $mode . '.tpl';
    }
    $view = Registry::get('view');
    if ($view->templateExists('views/' . $controller . '/' . $tpl)) {
        // try to find template in base views
        $view->assign('content_tpl', 'views/' . $controller . '/' . $tpl);
    } elseif (defined('LOADED_ADDON_PATH') && $view->templateExists('addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl)) {
        // try to find template in addon views
        $view->assign('content_tpl', 'addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl);
    } elseif (!empty($addons)) {
        // try to find template in addon views that extend base views
        foreach ($addons as $addon => $_v) {
            if ($view->templateExists('addons/' . $addon . '/views/' . $controller . '/' . $tpl)) {
                $view->assign('content_tpl', 'addons/' . $addon . '/views/' . $controller . '/' . $tpl);
                break;
            }
        }
    }
    /**
     * Performs actions after template assignment and before controller run
     *
     * @param string $controller          controller name
     * @param string $mode                controller mode name
     * @param string $area                current working area
     * @param array  $controllers_cascade list of controllers to run
     */
    fn_set_hook('dispatch_assign_template', $controller, $mode, $area, $controllers_cascade);
    foreach ($controllers_cascade as $item) {
        $_res = fn_run_controller($item, $controller, $mode, $action, $dispatch_extra);
        // 0 - status, 1 - url
        $url = !empty($_res[1]) ? $_res[1] : '';
        $external = !empty($_res[2]) ? $_res[2] : false;
        $permanent = !empty($_res[3]) ? $_res[3] : false;
        // Status could be changed only if we allow to run controllers despite of init controller
        if ($run_controllers == true) {
            $status = !empty($_res[0]) ? $_res[0] : CONTROLLER_STATUS_OK;
        }
        if ($status == CONTROLLER_STATUS_OK && !empty($url)) {
            $redirect_url = $url;
        } elseif ($status == CONTROLLER_STATUS_REDIRECT && !empty($url)) {
            $redirect_url = $url;
            break;
        } elseif ($status == CONTROLLER_STATUS_DENIED || $status == CONTROLLER_STATUS_NO_PAGE) {
            break;
        }
    }
    LastView::instance()->init($_REQUEST);
    // In console mode, just stop here
    if (defined('CONSOLE')) {
        $notifications = fn_get_notifications();
        $exit_code = 0;
        foreach ($notifications as $n) {
            fn_echo('[' . $n['title'] . '] ' . $n['message'] . "\n");
            if ($n['type'] == 'E') {
                $exit_code = 1;
            }
        }
        exit($exit_code);
    }
    if (!empty($auth['this_login']) && Registry::ifGet($auth['this_login'], 'N') === 'Y') {
        fn_set_notification('E', __('error'), __(ACCOUNT_TYPE . LOGIN_STATUS_USER_DISABLED));
        $status = CONTROLLER_STATUS_DENIED;
    }
    // [Block manager]
    // block manager is disabled for vendors.
    if (!(fn_allowed_for('MULTIVENDOR') && Registry::get('runtime.company_id') || fn_allowed_for('ULTIMATE') && !Registry::get('runtime.company_id'))) {
        if (fn_check_permissions('block_manager', 'manage', 'admin')) {
            $dynamic_object = SchemesManager::getDynamicObject($_REQUEST['dispatch'], $area, $_REQUEST);
            if (!empty($dynamic_object)) {
                if ($area == 'A' && Registry::get('runtime.mode') != 'add' && !empty($_REQUEST[$dynamic_object['key']])) {
                    $object_id = $_REQUEST[$dynamic_object['key']];
                    $location = Location::instance()->get($dynamic_object['customer_dispatch'], $dynamic_object, CART_LANGUAGE);
                    if (!empty($location) && $location['is_default'] != 1) {
                        $params = array('dynamic_object' => array('object_type' => $dynamic_object['object_type'], 'object_id' => $object_id), $dynamic_object['key'] => $object_id, 'manage_url' => Registry::get('config.current_url'));
                        Registry::set('navigation.tabs.blocks', array('title' => __('layouts'), 'href' => 'block_manager.manage_in_tab?' . http_build_query($params), 'ajax' => true));
                    }
                }
            }
        }
    }
    // [/Block manager]
    // Redirect if controller returned successful/redirect status only
    if (in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT)) && !empty($_REQUEST['redirect_url']) && !$external) {
        $redirect_url = $_REQUEST['redirect_url'];
    }
    // If controller returns "Redirect" status, check if redirect url exists
    if ($status == CONTROLLER_STATUS_REDIRECT && empty($redirect_url)) {
        $status = CONTROLLER_STATUS_NO_PAGE;
    }
    // In backend show "changes saved" notification
    if ($area == 'A' && $_SERVER['REQUEST_METHOD'] == 'POST' && in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT))) {
        if (strpos($mode, 'update') !== false && $mode != 'update_status' && $mode != 'update_mode' && !fn_notification_exists('extra', 'demo_mode') && !fn_notification_exists('type', 'E')) {
            fn_set_notification('N', __('notice'), __('text_changes_saved'), 'I', 'changes_saved');
        }
    }
    // Attach params and redirect if needed
    if (in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT)) && !empty($redirect_url)) {
        if (!isset($_REQUEST['return_to_list'])) {
            $params = array('page', 'selected_section', 'active_tab');
            $url_params = array();
            foreach ($params as $param) {
                if (!empty($_REQUEST[$param])) {
                    $url_params[$param] = $_REQUEST[$param];
                }
            }
            if (!empty($url_params)) {
                $redirect_url = fn_link_attach($redirect_url, http_build_query($url_params));
            }
        }
        if (!isset($external)) {
            $external = false;
        }
        if (!isset($permanent)) {
            $permanent = false;
        }
        fn_redirect($redirect_url, $external, $permanent);
    }
    if (!$view->getTemplateVars('content_tpl') && $status == CONTROLLER_STATUS_OK) {
        // FIXME
        $status = CONTROLLER_STATUS_NO_PAGE;
    }
    if ($status != CONTROLLER_STATUS_OK) {
        if ($status == CONTROLLER_STATUS_NO_PAGE) {
            if ($area == 'A' && empty($auth['user_id'])) {
                // If admin is not logged in redirect to login page from not found page
                fn_set_notification('W', __('page_not_found'), __('page_not_found_text'));
                fn_redirect("auth.login_form");
            }
            header(' ', true, 404);
        }
        $view->assign('exception_status', $status);
        if ($area == 'A') {
            $view->assign('content_tpl', 'exception.tpl');
            // for backend only
        }
        if ($status == CONTROLLER_STATUS_DENIED) {
            $view->assign('page_title', __('access_denied'));
        } elseif ($status == CONTROLLER_STATUS_NO_PAGE) {
            $view->assign('page_title', __('page_not_found'));
        }
    }
    fn_set_hook('dispatch_before_display');
    Debugger::checkpoint('Before TPL');
    // Pass current URL to ajax response only if we render whole page
    if (defined('AJAX_REQUEST') && Registry::get('runtime.root_template') == 'index.tpl') {
        Registry::get('ajax')->assign('current_url', fn_url(Registry::get('config.current_url'), $area, 'current'));
    }
    Registry::get('view')->display(Registry::get('runtime.root_template'));
    Debugger::checkpoint('After TPL');
    Debugger::display();
    fn_set_hook('complete');
    if (defined('AJAX_REQUEST')) {
        // HHVM workaround. Destroy Ajax object manually if it has been created.
        $ajax = Registry::get('ajax');
        $ajax = null;
    }
    exit;
    // stop execution
}
Beispiel #5
0
        $file = Registry::get('runtime.company_id') . '/' . $file;
    }
    if (!empty($_REQUEST['to_screen'])) {
        header("Content-type: text/xml");
        readfile(Registry::get('config.dir.layouts') . $file);
        exit;
    } else {
        fn_get_file(Registry::get('config.dir.layouts') . $file);
    }
} elseif ($mode == 'show_objects') {
    if (!empty($_REQUEST['object_type']) && !empty($_REQUEST['block_id'])) {
        Tygh::$app['view']->assign('object_type', $_REQUEST['object_type']);
        Tygh::$app['view']->assign('block_id', $_REQUEST['block_id']);
        Tygh::$app['view']->assign('object_ids', Block::instance()->getChangedContentsIds($_REQUEST['object_type'], $_REQUEST['block_id']));
        Tygh::$app['view']->assign('params', array('type' => 'links'));
        Tygh::$app['view']->assign('dynamic_object_scheme', SchemesManager::getDynamicObjectByType($_REQUEST['object_type'], $_REQUEST));
    }
}
function fn_get_selected_location($params)
{
    if (isset($params['selected_location']) && !empty($params['selected_location'])) {
        $selected_location = Location::instance()->getById($params['selected_location'], DESCR_SL);
    } else {
        $selected_location = Location::instance()->getDefault(DESCR_SL);
    }
    return $selected_location;
}
function fn_get_default_layouts_sources($theme_name = '', $themes_path = '')
{
    $layouts_sources = array();
    if (empty($themes_path)) {
Beispiel #6
0
 /**
  * Renders block content
  *
  * @static
  *
  * @param array $block Block data for rendering content
  * @param array $params Parameters of rendering:
  *                       * use_cache - Whether to use cache
  *                       * parse_js - Whether to move inline JS of the block to the bottom of the page
  *
  * @return string HTML code of rendered block content
  */
 public static function renderBlockContent($block, $params = array())
 {
     $default_params = array('use_cache' => true, 'parse_js' => true);
     $params = array_merge($default_params, $params);
     // Do not render block if it disabled in the frontend
     if (isset($block['is_disabled']) && $block['is_disabled']) {
         return '';
     }
     $smarty = \Tygh::$app['view'];
     $smarty_original_vars = $smarty->getTemplateVars();
     $display_this_block = true;
     self::_assignBlockSettingsToTemplate($block);
     // Assign block data from DB
     $smarty->assign('block', $block);
     $theme_path = self::getCustomerThemePath();
     $block_schema = SchemesManager::getBlockScheme($block['type'], array());
     $grid_id = empty($block['grid_id']) ? 0 : $block['grid_id'];
     $cache_key = "block_content_{$block['block_id']}_{$block['snapping_id']}_{$block['type']}_{$grid_id}";
     if (!empty($block['object_id']) && !empty($block['object_type'])) {
         $cache_key .= "_{$block['object_id']}_{$block['object_type']}";
     }
     $cache_this_block = $params['use_cache'] && self::allowCache();
     if ($cache_this_block && isset($block['content']['items']['filling']) && isset($block_schema['content']['items']['fillings'][$block['content']['items']['filling']]['disable_cache'])) {
         $cache_this_block = !$block_schema['content']['items']['fillings'][$block['content']['items']['filling']]['disable_cache'];
     }
     /**
      * Determines flags for Cache
      *
      * @param array  $block              Block data
      * @param string $cache_key          Generated name of cache
      * @param array  $block_schema       Block schema
      * @param bool   $cache_this_block   Flag to register cache
      * @param bool   $display_this_block Flag to display block
      */
     fn_set_hook('render_block_register_cache', $block, $cache_key, $block_schema, $cache_this_block, $display_this_block);
     if ($cache_this_block) {
         // We need an extra data to cache Inline JavaScript
         $smarty->assign('block_cache_name', $cache_key);
         // Check whether cache was registered successfully
         $cache_this_block = self::registerBlockCacheIfNeeded($cache_key, $block_schema, $block);
     } else {
         $smarty->clearAssign('block_cache_name');
     }
     $smarty->assign('block_rendering', true);
     $smarty->assign('block_parse_js', $params['parse_js']);
     // We should load only when cache record exists
     $load_block_from_cache = $cache_this_block && Registry::isExist($cache_key);
     $block_content = '';
     // Block content is found at cache and should be loaded out of there
     if ($load_block_from_cache) {
         $cached_content = Registry::get($cache_key);
         $block_content = $cached_content['content'];
         if (!empty($cached_content['javascript'])) {
             $repeat = false;
             $smarty->loadPlugin('smarty_block_inline_script');
             smarty_block_inline_script(array(), $cached_content['javascript'], $smarty, $repeat);
         }
         Debugger::blockFoundAtCache($block['block_id']);
     } else {
         if ($block['type'] == Block::TYPE_MAIN) {
             $block_content = self::_renderMainContent();
         } else {
             $title = $block['name'];
             if (Registry::get('runtime.customization_mode.live_editor')) {
                 $le_block_types = fn_get_schema('customization', 'live_editor_block_types');
                 if (!empty($le_block_types[$block['type']]) && !empty($le_block_types[$block['type']]['name'])) {
                     $title = sprintf('<span data-ca-live-editor-obj="block:name:%s">%s</span>', $block['block_id'], $title);
                 }
             }
             $smarty->assign('title', $title);
             if (!empty($block_schema['content'])) {
                 $all_values_are_empty = true;
                 foreach ($block_schema['content'] as $template_variable => $field) {
                     /**
                      * Actions before render any variable of block content
                      *
                      * @param string $template_variable name of current block content variable
                      * @param array  $field             Scheme of this content variable from block scheme content section
                      * @param array  $block_schema      block scheme
                      * @param array  $block             Block data
                      */
                     fn_set_hook('render_block_content_pre', $template_variable, $field, $block_schema, $block);
                     $value = self::getValue($template_variable, $field, $block_schema, $block);
                     if ($all_values_are_empty && !empty($value)) {
                         $all_values_are_empty = false;
                     }
                     $smarty->assign($template_variable, $value);
                 }
                 // We shouldn't display block which content variables are all empty
                 $display_this_block = $display_this_block && !$all_values_are_empty;
             }
             // Assign block data from scheme
             $smarty->assign('block_scheme', $block_schema);
             if ($display_this_block && file_exists($theme_path . $block['properties']['template'])) {
                 $block_content = $smarty->fetch($block['properties']['template']);
             }
         }
         if (!empty($block['wrapper']) && file_exists($theme_path . $block['wrapper']) && $display_this_block) {
             $smarty->assign('content', $block_content);
             if ($block['type'] == Block::TYPE_MAIN) {
                 $smarty->assign('title', !empty(\Smarty::$_smarty_vars['capture']['mainbox_title']) ? \Smarty::$_smarty_vars['capture']['mainbox_title'] : '', false);
             }
             $block_content = $smarty->fetch($block['wrapper']);
         } else {
             $smarty->assign('content', $block_content);
             $block_content = $smarty->fetch('views/block_manager/render/block.tpl');
         }
         fn_set_hook('render_block_content_after', $block_schema, $block, $block_content);
         // Save block contents to cache
         if ($cache_this_block && $display_this_block) {
             $cached_content = Registry::get($cache_key);
             $cached_content['content'] = $block_content;
             Registry::set($cache_key, $cached_content);
         }
     }
     $wrap_id = $smarty->getTemplateVars('block_wrap');
     $smarty->clearAllAssign();
     $smarty->assign($smarty_original_vars);
     // restore original vars
     \Smarty::$_smarty_vars['capture']['title'] = null;
     if ($display_this_block == true) {
         if (!empty($wrap_id)) {
             $block_content = '<div id="' . $wrap_id . '">' . $block_content . '<!--' . $wrap_id . '--></div>';
         }
         return trim($block_content);
     } else {
         return '';
     }
 }
Beispiel #7
0
function fn_twg_get_product_tabs($params)
{
    $allowed_page_types = array('T', 'L', 'F');
    $allowed_templates = array('blocks/product_tabs/features.tpl', 'blocks/product_tabs/description.tpl');
    $allowed_block_types = array('html_block', 'pages', 'products', 'categories', 'banners');
    $tabs = ProductTabs::instance()->getList('', $params['product_id'], $params['descr_sl']);
    foreach ($tabs as $k => $tab) {
        $isAllowedType = $tab['tab_type'] == 'B';
        $isAllowedType = ($isAllowedType or $tab['tab_type'] == 'T' and in_array($tab['template'], $allowed_templates));
        if (empty($params['all_tabs']) && $tab['status'] != 'A' || !$isAllowedType) {
            unset($tabs[$k]);
            continue;
        }
        if ($tab['tab_type'] == 'B') {
            $block = TwigmoBlock::getBlock(array('block_id' => $tab['block_id'], 'area' => 'C'));
            if (empty($block['type']) || !in_array($block['type'], $allowed_block_types)) {
                unset($tabs[$k]);
                continue;
            }
            $block_scheme = SchemesManager::getBlockScheme($block['type'], array());
            if ($block['type'] == 'html_block') {
                $tabs[$k]['html'] = $block['content']['content'];
            } elseif (!empty($block_scheme['content']) && !empty($block_scheme['content']['items'])) {
                // Products and categories: get items
                $template_variable = 'items';
                $field = $block_scheme['content']['items'];
                $items = RenderManager::getValue($template_variable, $field, $block_scheme, $block);
                // Filter pages - only texts, links and forms posible
                if ($block['type'] == 'pages') {
                    foreach ($items as $item_id => $item) {
                        if (!in_array($item['page_type'], $allowed_page_types)) {
                            unset($items[$item_id]);
                        }
                    }
                }
                if (fn_is_empty($items)) {
                    unset($tabs[$k]);
                    continue;
                }
                $block_data = array('total_items' => count($items));
                // Images
                $image_params = TwigmoSettings::get('images.cart');
                if ($block['type'] == 'products' or $block['type'] == 'categories') {
                    $object_type = $block['type'] == 'products' ? 'product' : 'category';
                    foreach ($items as $items_id => $item) {
                        $main_pair = fn_get_image_pairs($item[$object_type . '_id'], $object_type, 'M', true, true);
                        if (!empty($main_pair)) {
                            $items[$items_id]['icon'] = TwigmoImage::getApiImageData($main_pair, $object_type, 'icon', $image_params);
                        }
                    }
                }
                // Banners properties
                if ($block['type'] == 'banners') {
                    $rotation = $block['properties']['template'] == 'addons/banners/blocks/carousel.tpl' ? 'Y' : 'N';
                    $block_data['delay'] = $rotation == 'Y' ? $block['properties']['delay'] : 0;
                    $object_type = 'banner';
                }
                $block_data[$block['type']] = Api::getAsList($block['type'], $items);
                $tabs[$k] = array_merge($tab, $block_data);
            }
        } else {
            if ($tab['template'] == 'blocks/product_tabs/features.tpl') {
                $tabs[$k]['type'] = 'features';
            }
            if ($tab['template'] == 'blocks/product_tabs/description.tpl') {
                $tabs[$k]['type'] = 'description';
            }
        }
    }
    return array_values($tabs);
    // reindex
}
Beispiel #8
0
                fn_set_notification('E', __('notice'), __('text_store_closed'));
                exit;
            }
            Development::showStub();
        }
    }
}
if (empty($_REQUEST['product_id']) && empty($_REQUEST['category_id'])) {
    unset(Tygh::$app['session']['current_category_id']);
}
$dispatch = $_REQUEST['dispatch'];
$dynamic_object = array();
if (!empty($_REQUEST['dynamic_object'])) {
    $dynamic_object = $_REQUEST['dynamic_object'];
}
$dynamic_object_scheme = SchemesManager::getDynamicObject($dispatch, AREA, $_REQUEST);
if (!empty($dynamic_object_scheme)) {
    $dispatch = $dynamic_object_scheme['customer_dispatch'];
}
Tygh::$app['view']->assign('location_data', Location::instance()->get($dispatch, $dynamic_object, CART_LANGUAGE));
Tygh::$app['view']->assign('layout_data', Registry::get('runtime.layout'));
Tygh::$app['view']->assign('current_mode', fn_get_current_mode($_REQUEST));
// Init cart if not set
if (empty(Tygh::$app['session']['cart'])) {
    fn_clear_cart(Tygh::$app['session']['cart']);
}
if (!empty(Tygh::$app['session']['continue_url'])) {
    Tygh::$app['session']['continue_url'] = fn_url_remove_service_params(Tygh::$app['session']['continue_url']);
}
if (Registry::get('config.demo_mode') && (!empty($_REQUEST['demo_customize_theme']) && $_REQUEST['demo_customize_theme'] == 'Y' || !empty(Tygh::$app['session']['demo_customize_theme']))) {
    Tygh::$app['session']['demo_customize_theme'] = true;
Beispiel #9
0
        $file = Registry::get('runtime.company_id') . '/' . $file;
    }
    if (!empty($_REQUEST['to_screen'])) {
        header("Content-type: text/xml");
        readfile(Registry::get('config.dir.layouts') . $file);
        exit;
    } else {
        fn_get_file(Registry::get('config.dir.layouts') . $file);
    }
} elseif ($mode == 'show_objects') {
    if (!empty($_REQUEST['object_type']) && !empty($_REQUEST['block_id'])) {
        Registry::get('view')->assign('object_type', $_REQUEST['object_type']);
        Registry::get('view')->assign('block_id', $_REQUEST['block_id']);
        Registry::get('view')->assign('object_ids', Block::instance()->getChangedContentsIds($_REQUEST['object_type'], $_REQUEST['block_id']));
        Registry::get('view')->assign('params', array('type' => 'links'));
        Registry::get('view')->assign('dynamic_object_scheme', SchemesManager::getDynamicObjectByType($_REQUEST['object_type'], $_REQUEST));
    }
}
function fn_get_selected_location($params)
{
    if (isset($params['selected_location']) && !empty($params['selected_location'])) {
        $selected_location = Location::instance()->getById($params['selected_location'], DESCR_SL);
    } else {
        $selected_location = Location::instance()->getDefault(DESCR_SL);
    }
    return $selected_location;
}
function fn_get_default_layouts_sources($theme_name = '', $themes_path = '')
{
    $layouts_sources = array();
    if (empty($themes_path)) {
Beispiel #10
0
    if ($mode == 'manage_in_tab') {
        Registry::get('view')->display('views/tabs/manage_in_tab.tpl');
        exit;
    }
} elseif ($mode == 'delete') {
    if (!empty($_REQUEST['tab_id'])) {
        ProductTabs::instance()->delete($_REQUEST['tab_id']);
    }
    return array(CONTROLLER_STATUS_OK, "tabs.manage");
} elseif ($mode == 'update') {
    $tab_id = isset($_REQUEST['tab_data']['tab_id']) ? $_REQUEST['tab_data']['tab_id'] : 0;
    $tab_type = isset($_REQUEST['tab_data']['tab_type']) ? $_REQUEST['tab_data']['tab_type'] : 'T';
    if (!empty($_REQUEST['dynamic_object'])) {
        Registry::get('view')->assign('dynamic_object', $_REQUEST['dynamic_object']);
    }
    $dynamic_object_scheme = SchemesManager::getDynamicObjectByType('products');
    $selected_location = Location::instance()->get('products.view', array(), DESCR_SL);
    Registry::get('view')->assign('location', $selected_location);
    Registry::get('view')->assign('dynamic_object_scheme', $dynamic_object_scheme);
    if (!empty($_REQUEST['tab_data'])) {
        $tab_data = $_REQUEST['tab_data'];
    } else {
        $tab_data = array();
    }
    // If edit block
    if ($tab_id > 0 && empty($_REQUEST['tab_data']['content'])) {
        $tab_data = current(ProductTabs::instance()->getList(db_quote(' AND ?:product_tabs.tab_id=?i', $tab_id), 0, DESCR_SL));
    }
    if (isset($tab_data['block_id']) && $tab_data['block_id'] > 0) {
        if (!empty($_REQUEST['dynamic_object'])) {
            $dynamic_object = $_REQUEST['dynamic_object'];
Beispiel #11
0
 /**
  * Get block by id
  * @param  array $params
  * @return array $block
  */
 public static final function getBlock($params)
 {
     if (!empty($params['block_id'])) {
         $block_id = $params['block_id'];
         $snapping_id = !empty($params['snapping_id']) ? $params['snapping_id'] : 0;
         $dispatch = isset($_REQUEST['object']) ? $_REQUEST['object'] . '.view' : 'index.index';
         $area = !empty($params['area']) ? $params['area'] : AREA;
         if (!empty($params['dynamic_object'])) {
             $dynamic_object = $params['dynamic_object'];
         } elseif (!empty($_REQUEST['dynamic_object']) && $area != 'C') {
             $dynamic_object = $_REQUEST['dynamic_object'];
         } else {
             $dynamic_obj_schema = SchemesManager::getDynamicObject($dispatch, $area);
             $twg_request = array('dispatch' => $dispatch, $dynamic_obj_schema['key'] => $_REQUEST['id']);
             if (!empty($dynamic_obj_schema) && !empty($twg_request[$dynamic_obj_schema['key']])) {
                 $dynamic_object['object_type'] = $dynamic_obj_schema['object_type'];
                 $dynamic_object['object_id'] = $twg_request[$dynamic_obj_schema['key']];
             } else {
                 $dynamic_object = array();
             }
         }
         $block = Block::instance()->getById($block_id, $snapping_id, $dynamic_object, DESCR_SL);
         return $block;
     }
 }
Beispiel #12
0
    Tygh::$app['view']->assign('product_subscribers_search', $search);
    // [Page sections]
    $tabs = array('detailed' => array('title' => __('general'), 'js' => true), 'images' => array('title' => __('images'), 'js' => true), 'seo' => array('title' => __('seo'), 'js' => true), 'options' => array('title' => __('options'), 'js' => true), 'shippings' => array('title' => __('shipping_properties'), 'js' => true), 'qty_discounts' => array('title' => __('qty_discounts'), 'js' => true));
    if (Registry::get('settings.General.enable_edp') == 'Y') {
        $tabs['files'] = array('title' => __('sell_files'), 'js' => true);
    }
    $tabs['subscribers'] = array('title' => __('subscribers'), 'js' => true);
    $tabs['addons'] = array('title' => __('addons'), 'js' => true);
    // If we have some additional product fields, lets add a tab for them
    if (!empty($product_features)) {
        $tabs['features'] = array('title' => __('features'), 'js' => true);
    }
    // [Product tabs]
    // block manager is disabled for vendors.
    if (!(fn_allowed_for('MULTIVENDOR') && Registry::get('runtime.company_id') || fn_allowed_for('ULTIMATE') && !Registry::get('runtime.company_id'))) {
        $dynamic_object = SchemesManager::getDynamicObject($_REQUEST['dispatch'], AREA);
        if (!empty($dynamic_object)) {
            if (AREA == 'A' && Registry::get('runtime.mode') != 'add' && !empty($_REQUEST[$dynamic_object['key']])) {
                $params = array('dynamic_object' => array('object_type' => $dynamic_object['object_type'], 'object_id' => $_REQUEST[$dynamic_object['key']]), $dynamic_object['key'] => $_REQUEST[$dynamic_object['key']]);
                $tabs['product_tabs'] = array('title' => __('product_tabs'), 'href' => 'tabs.manage_in_tab?' . http_build_query($params), 'ajax' => true);
            }
        }
    }
    // [/Product tabs]
    Registry::set('navigation.tabs', $tabs);
    // [/Page sections]
    //
    // 'Mulitple products updating' page
    //
} elseif ($mode == 'm_update') {
    if (empty($_SESSION['product_ids']) || empty($_SESSION['selected_fields']) || empty($_SESSION['selected_fields']['object']) || $_SESSION['selected_fields']['object'] != 'product') {
Beispiel #13
0
 /**
  * Checks is there are at least one active block of given type on current location
  *
  * @param  string $block_type Type of block
  * @return bool   True, if block of given type is active, false otherwise.
  */
 public function isBlockTypeActiveOnCurrentLocation($block_type)
 {
     $dispatch = !empty($_REQUEST['dispatch']) ? $_REQUEST['dispatch'] : 'index.index';
     $dynamic_object = array();
     $dynamic_object_scheme = SchemesManager::getDynamicObject($dispatch, AREA);
     if (!empty($dynamic_object_scheme) && !empty($_REQUEST[$dynamic_object_scheme['key']])) {
         $dynamic_object['object_type'] = $dynamic_object_scheme['object_type'];
         $dynamic_object['object_id'] = $_REQUEST[$dynamic_object_scheme['key']];
     }
     $current_location = Location::instance()->get($dispatch, $dynamic_object);
     if (!empty($current_location['location_id'])) {
         $blocks = $this->getBlocksByTypeForLocation($block_type, $current_location['location_id']);
         if (!empty($blocks)) {
             if (!empty($dynamic_object['object_id']) && !empty($dynamic_object['object_type'])) {
                 $dynamic_object_statuses = db_get_hash_array('SELECT * FROM ?:bm_block_statuses WHERE object_type = ?s AND FIND_IN_SET(?i, object_ids)', 'snapping_id', $dynamic_object['object_type'], $dynamic_object['object_id']);
                 foreach (array_keys($dynamic_object_statuses) as $snapping_id) {
                     if (isset($blocks[$snapping_id])) {
                         // reverse block status
                         $blocks[$snapping_id] = $blocks[$snapping_id] == 'A' ? 'D' : 'A';
                     }
                 }
             }
             foreach ($blocks as $status) {
                 if ($status == 'A') {
                     return true;
                 }
             }
         }
     }
     return false;
 }
Beispiel #14
0
 /**
  * Return list with all product tab templates
  *
  * @param  bool  $from_themes_repository get templates from themes repository or from installed theme folder
  * @param  bool  $with_addons            If true addons templates will be added to result list
  * @return array Array of templates of product tabs
  */
 public function getTemplates($from_themes_repository = false, $with_addons = true)
 {
     if ($from_themes_repository) {
         $base_dir = fn_get_theme_path('[repo]/[theme]/templates/', 'C');
     } else {
         $base_dir = fn_get_theme_path('[themes]/[theme]/templates/', 'C');
     }
     $tabs_blocks = fn_get_dir_contents($base_dir . 'blocks/product_tabs', false, true, '.tpl', 'blocks/product_tabs/');
     if ($with_addons) {
         // Now get tabs blocks from addons
         foreach (Registry::get('addons') as $addon => $v) {
             if ($v['status'] == 'A') {
                 $_tabs_blocks = fn_get_dir_contents($base_dir . 'addons/' . $addon . '/blocks/product_tabs', false, true, '.tpl', 'addons/' . $addon . '/blocks/product_tabs/');
                 if (!empty($_tabs_blocks)) {
                     $tabs_blocks = fn_array_merge($tabs_blocks, $_tabs_blocks, false);
                 }
             }
         }
     }
     $templates = array();
     foreach ($tabs_blocks as $template) {
         $name = SchemesManager::generateTemplateName($template, $base_dir);
         $templates[$template] = $name;
     }
     return $templates;
 }
 /**
  * Renders block content
  * @static
  * @param  array  $block Block data for rendering content
  * @return string HTML code of rendered block content
  */
 public static function renderBlockContent($block)
 {
     // Do not render block if it disabled in the frontend
     if (isset($block['is_disabled']) && $block['is_disabled'] == 1) {
         return '';
     }
     $smarty = Registry::get('view');
     $_tpl_vars = $smarty->getTemplateVars();
     // save state of original variables
     // By default block is displayed
     $display_block = true;
     self::_assignBlockSettings($block);
     // Assign block data from DB
     Registry::get('view')->assign('block', $block);
     $theme_path = self::getCustomerThemePath();
     $block_scheme = SchemesManager::getBlockScheme($block['type'], array());
     $cache_name = 'block_content_' . $block['block_id'] . '_' . $block['snapping_id'] . '_' . $block['type'] . '_' . $block['grid_id'] . '_' . $block['object_id'] . '_' . $block['object_type'];
     $register_cache = true;
     if (isset($block['content']['items']['filling']) && isset($block_scheme['content']['items']['fillings'][$block['content']['items']['filling']]['disable_cache'])) {
         $register_cache = !$block_scheme['content']['items']['fillings'][$block['content']['items']['filling']]['disable_cache'];
     }
     /**
      * Determines flags for Cache
      *
      * @param array  $block          Block data
      * @param string $cache_name     Generated name of cache
      * @param array  $block_scheme   Block scheme
      * @param bool   $register_cache Flag to register cache
      * @param bool   $display_block  Flag to display block
      */
     fn_set_hook('render_block_register_cache', $block, $cache_name, $block_scheme, $register_cache, $display_block);
     if ($register_cache) {
         self::_registerBlockCache($cache_name, $block_scheme);
     }
     $block_content = '';
     if (isset($block_scheme['cache']) && Registry::isExist($cache_name) == true && self::allowCache()) {
         $block_content = Registry::get($cache_name);
     } else {
         if ($block['type'] == 'main') {
             $block_content = self::_renderMainContent();
         } else {
             Registry::get('view')->assign('title', $block['name']);
             if (!empty($block_scheme['content'])) {
                 foreach ($block_scheme['content'] as $template_variable => $field) {
                     /**
                      * Actions before render any variable of block content
                      * @param string $template_variable name of current block content variable
                      * @param array $field Scheme of this content variable from block scheme content section
                      * @param array $block_scheme block scheme
                      * @param array $block Block data
                      */
                     fn_set_hook('render_block_content_pre', $template_variable, $field, $block_scheme, $block);
                     $value = self::getValue($template_variable, $field, $block_scheme, $block);
                     // If block have not empty content - display it
                     if (empty($value)) {
                         $display_block = false;
                     }
                     Registry::get('view')->assign($template_variable, $value);
                 }
             }
             // Assign block data from scheme
             Registry::get('view')->assign('block_scheme', $block_scheme);
             if ($display_block && file_exists($theme_path . $block['properties']['template'])) {
                 $block_content = Registry::get('view')->fetch($block['properties']['template']);
             }
         }
         if (!empty($block['wrapper']) && file_exists($theme_path . $block['wrapper']) && $display_block) {
             Registry::get('view')->assign('content', $block_content);
             if ($block['type'] == 'main') {
                 Registry::get('view')->assign('title', !empty(\Smarty::$_smarty_vars['capture']['mainbox_title']) ? \Smarty::$_smarty_vars['capture']['mainbox_title'] : '', false);
             }
             $block_content = Registry::get('view')->fetch($block['wrapper']);
         } else {
             Registry::get('view')->assign('content', $block_content);
             $block_content = Registry::get('view')->fetch('views/block_manager/render/block.tpl');
         }
         fn_set_hook('render_block_content_after', $block_scheme, $block, $block_content);
         if (isset($block_scheme['cache']) && $display_block == true && self::allowCache()) {
             Registry::set($cache_name, $block_content);
         }
     }
     $wrap_id = $smarty->getTemplateVars('block_wrap');
     $smarty->clearAllAssign();
     $smarty->assign($_tpl_vars);
     // restore original vars
     \Smarty::$_smarty_vars['capture']['title'] = null;
     if ($display_block == true) {
         if (!empty($wrap_id)) {
             $block_content = '<div id="' . $wrap_id . '">' . $block_content . '<!--' . $wrap_id . '--></div>';
         }
         return trim($block_content);
     } else {
         return '';
     }
 }