/** * 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); } }
/** * 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; }
/** * 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 }
if (!empty($_REQUEST['container_id'])) { // Update existing container $container = Container::getById($_REQUEST['container_id']); Tygh::$app['view']->assign('container', $container); } } elseif ($mode == 'update_location') { $location_data = array('dispatch' => ''); if (!empty($_REQUEST['location'])) { $location_data = Location::instance()->getById($_REQUEST['location'], DESCR_SL); } if (isset($_REQUEST['location_data']['dispatch'])) { $location_data['dispatch'] = $_REQUEST['location_data']['dispatch']; $location_data['object_ids'] = ""; } Tygh::$app['view']->assign('location', $location_data); Tygh::$app['view']->assign('dynamic_object_scheme', SchemesManager::getDynamicObject($location_data['dispatch'], 'C')); Tygh::$app['view']->assign('dispatch_descriptions', SchemesManager::getDispatchDescriptions()); if (defined('AJAX_REQUEST')) { Tygh::$app['view']->display('views/block_manager/update_location.tpl'); exit; } } elseif ($mode == 'block_selection') { $selected_location = fn_get_selected_location($_REQUEST); if (!empty($_REQUEST['on_product_tabs'])) { $selected_location['dispatch'] = 'product_tabs'; } $unique_blocks = SchemesManager::filterByLocation(Block::instance()->getAllUnique(DESCR_SL), $selected_location); $block_types = SchemesManager::filterByLocation(SchemesManager::getBlockTypes(DESCR_SL), $selected_location); if (!empty($_REQUEST['grid_id'])) { Tygh::$app['view']->assign('grid_id', $_REQUEST['grid_id']); }
/** * Loads location data, containers, grids and blocks * * @param string $dispatch URL dispatch (controller.mode.action) * @param string $area Area ('A' for admin or 'C' for custom * @param array $dynamic_object * @param int $location_id * @param string $lang_code 2 letters language code */ public function __construct($dispatch, $area, $dynamic_object = array(), $location_id = 0, $lang_code = DESCR_SL) { Debugger::checkpoint('Start render location'); // Try to get location for this dispatch if ($location_id > 0) { $this->_location = Location::instance()->getById($location_id, $lang_code); } else { $this->_location = Location::instance()->get($dispatch, $dynamic_object, $lang_code); } $this->_area = $area; if (!empty($this->_location)) { if (isset($dynamic_object['object_id']) && $dynamic_object['object_id'] > 0) { $this->_containers = Container::getListByArea($this->_location['location_id'], 'C'); } else { $this->_containers = Container::getListByArea($this->_location['location_id'], $this->_area); } $this->_grids = Grid::getList(array('container_ids' => Container::getIds($this->_containers))); $blocks = Block::instance()->getList(array('?:bm_snapping.*', '?:bm_blocks.*', '?:bm_blocks_descriptions.*'), Grid::getIds($this->_grids), $dynamic_object, null, null, $lang_code); $this->_blocks = $blocks; $this->_view = \Tygh::$app['view']; $this->_theme = self::_getThemePath($this->_area); $this->_dynamic_object_scheme = SchemesManager::getDynamicObject($this->_location['dispatch'], 'C'); } }
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;
if (!empty($_REQUEST['container_id'])) { // Update existing container $container = Container::getById($_REQUEST['container_id']); Registry::get('view')->assign('container', $container); } } elseif ($mode == 'update_location') { $location_data = array('dispatch' => ''); if (!empty($_REQUEST['location'])) { $location_data = Location::instance()->getById($_REQUEST['location'], DESCR_SL); } if (isset($_REQUEST['location_data']['dispatch'])) { $location_data['dispatch'] = $_REQUEST['location_data']['dispatch']; $location_data['object_ids'] = ""; } Registry::get('view')->assign('location', $location_data); Registry::get('view')->assign('dynamic_object_scheme', SchemesManager::getDynamicObject($location_data['dispatch'], 'C')); Registry::get('view')->assign('dispatch_descriptions', SchemesManager::getDispatchDescriptions()); if (defined('AJAX_REQUEST')) { Registry::get('view')->display('views/block_manager/update_location.tpl'); exit; } } elseif ($mode == 'block_selection') { $selected_location = fn_get_selected_location($_REQUEST); if (!empty($_REQUEST['on_product_tabs'])) { $selected_location['dispatch'] = 'product_tabs'; } $unique_blocks = SchemesManager::filterByLocation(Block::instance()->getAllUnique(DESCR_SL), $selected_location); $block_types = SchemesManager::filterByLocation(SchemesManager::getBlockTypes(DESCR_SL), $selected_location); if (!empty($_REQUEST['grid_id'])) { Registry::get('view')->assign('grid_id', $_REQUEST['grid_id']); }
/** * 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; } }
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') {
/** * 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; }