public function up() { fn_print_r('Hello world!'); $addons = array('ak_union_web'); $updater = array(); foreach (fn_get_translation_languages() as $lang_code => $_data) { foreach ($addons as $addon) { $addon_scheme = @simplexml_load_file('app/addons/' . $addon . '/addon.xml', '\\Tygh\\ExSimpleXmlElement', LIBXML_NOCDATA); $current_langvars = $addon_scheme->xpath("//language_variables/item[@lang='{$lang_code}']"); foreach ($current_langvars as $key => $value) { if (!empty($value) && !empty($value['id']) && !empty($value['lang'])) { $updater[] = array('value' => (string) $value, 'name' => (string) $value['id'], 'lang_code' => (string) $value['lang']); fn_print_r((string) $value['lang'] . ' --> ' . (string) $value['id'] . ' --> ' . (string) $value); } } } } db_query('REPLACE INTO ?:language_values ?m', $updater); die; }
$options['ignore_user_abort'] = ini_get('ignore_user_abort'); @ignore_user_abort(1); $options['ignore_user_abort_after'] = ini_get('ignore_user_abort_after'); $options['memory_limit'] = ini_get('memory_limit'); if (defined('SE_MEMORY_LIMIT')) { if (substr(ini_get('memory_limit'), 0, -1) < SE_MEMORY_LIMIT) { @ini_set('memory_limit', SE_MEMORY_LIMIT . 'M'); } } $options['memory_limit_after'] = ini_get('memory_limit'); } } if (isset($_REQUEST['output'])) { fn_echo(json_encode($options)); } else { fn_print_r($options); } die; } function fn_se_get_total_items_queue() { $total_items = 0; if (fn_allowed_for('ULTIMATE') && Registry::get('runtime.company_id')) { $total_items = db_get_field('SELECT COUNT(queue_id) FROM ?:se_queue WHERE company_id = ?i', Registry::get('runtime.company_id')); } elseif (!fn_allowed_for('ULTIMATE')) { $total_items = db_get_field('SELECT COUNT(queue_id) FROM ?:se_queue WHERE 1'); } return $total_items; } function fn_se_get_next_queue($queue_id = 0) {
public static function convertPresets401To402() { $theme_name = Registry::get('config.base_theme'); $schema_path = fn_get_theme_path('[themes]/' . $theme_name . '/styles/schema.json', 'C'); $schema = file_get_contents($schema_path); if (!empty($schema)) { $schema = json_decode($schema, true); } db_query('ALTER TABLE ?:bm_layouts CHANGE `preset_id` `preset_id` varchar(64) NOT NULL default ""'); $presets = db_get_array('SELECT * FROM ?:theme_presets'); foreach ($presets as $preset) { $preset['name'] = self::_formPresetName($preset['name']); //We should rename default preset to satori in order to prevent default preset creation. if ($preset['name'] == 'default') { $preset['name'] = 'satori'; } db_query('UPDATE ?:bm_layouts SET preset_id = ?s WHERE preset_id = ?i', $preset['name'], $preset['preset_id']); $preset_path = fn_get_theme_path('[themes]/' . $theme_name . '/styles/data/', 'C'); if (file_exists($preset_path . $preset['name'] . '.less')) { continue; } $preset_data = unserialize($preset['data']); $less = array(); foreach ($preset_data as $section => $fields) { foreach ($fields as $field_id => $value) { switch ($section) { case 'general': $less[$field_id] = empty($value) ? $schema[$section]['fields'][$field_id]['off'] : $schema[$section]['fields'][$field_id]['on']; break; case 'colors': $less[$field_id] = $value; break; case 'fonts': $less[$field_id] = $value['family']; if (!empty($value['size'])) { $field_name = $schema[$section]['fields'][$field_id]['properties']['size']['match']; $field_value = $value['size'] . $schema[$section]['fields'][$field_id]['properties']['size']['unit']; $less[$field_name] = $field_value; } if (!empty($value['style'])) { foreach ($value['style'] as $style_type => $style_value) { $field_name = $schema[$section]['fields'][$field_id]['properties']['style'][$style_type]['match']; $field_value = $schema[$section]['fields'][$field_id]['properties']['style'][$style_type]['property']; $less[$field_name] = $field_value; } } break; case 'backgrounds': $value['transparent'] = isset($value['transparent']) ? $value['transparent'] : false; $value['full_width'] = isset($value['full_width']) ? $value['full_width'] : false; foreach ($value as $bg_name => $bg_value) { switch ($bg_name) { case 'color': $field_name = $schema[$section]['fields'][$field_id]['properties']['color']['match']; $less[$field_name] = $bg_value; break; case 'gradient': $field_name = $schema[$section]['fields'][$field_id]['gradient']['match']; $less[$field_name] = $bg_value; break; case 'image_data': $less[$schema[$section]['fields'][$field_id]['properties']['pattern']] = !empty($bg_value) ? 'url("' . $bg_value . '")' : 'transparent'; break; case 'repeat': $field_name = $schema[$section]['fields'][$field_id]['properties']['repeat']; if (!empty($field_name)) { $less[$field_name] = $bg_value; } break; case 'attachment': $field_name = $schema[$section]['fields'][$field_id]['properties']['attachment']; if (!empty($field_name)) { $less[$field_name] = $bg_value; } break; case 'full_width': if (!isset($schema[$section]['fields'][$field_id]['copies'])) { break; } foreach ($schema[$section]['fields'][$field_id]['copies']['full_width'] as $copies) { if (!empty($value['full_width'])) { if (!empty($copies['inverse'])) { $less[$copies['match']] = $copies['default']; } elseif (isset($less[$copies['source']])) { $less[$copies['match']] = $less[$copies['source']]; } } else { if (empty($copies['inverse'])) { $less[$copies['match']] = $copies['default']; } } } break; case 'transparent': if (!isset($schema[$section]['fields'][$field_id]['copies'])) { break; } foreach ($schema[$section]['fields'][$field_id]['copies']['transparent'] as $copies) { if (!empty($value['transparent'])) { if (!empty($copies['inverse'])) { $less[$copies['match']] = $copies['default']; } elseif (isset($less[$copies['source']])) { $less[$copies['match']] = $less[$copies['source']]; } } else { if (empty($copies['inverse'])) { $less[$copies['match']] = $copies['default']; } } } break; case 'image_name': break; default: fn_print_r('Unprocessed background property: ' . $bg_name); } } break; default: fn_print_r('Error: Section ' . $section . ' was not processed'); } } } $less = Less::arrayToLessVars($less); file_put_contents(fn_get_theme_path('[themes]/' . $theme_name . '/styles/data/' . $preset['name'] . '.less', 'C'), $less); } db_query('DROP TABLE IF EXISTS ?:theme_presets'); return true; }
function fn_seo_link_test() { $options = array('seo_product_type' => array('product_file', 'product_file_nohtml', 'product_category', 'product_category_nohtml'), 'seo_category_type' => array('file', 'category', 'root_category'), 'seo_page_type' => array('file', 'page', 'root_page'), 'seo_other_type' => array('file', 'directory')); $urls = array('seo_product_type' => 'products.view?product_id=12', 'seo_category_type' => 'categories.view?category_id=168&page=2', 'seo_page_type' => 'pages.view?page_id=4&page=1', 'seo_other_type' => 'profiles.update'); foreach ($options as $option_name => $option_values) { $url = $urls[$option_name]; $result = array(); foreach ($option_values as $value) { Registry::set('addons.seo.' . $option_name, $value); $result[$value] = fn_url($url); } fn_print_r($result); } }
function fn_searchanise_send_search_request($params, $lang_code = CART_LANGUAGE) { $company_id = fn_se_get_company_id(); $api_key = fn_se_get_api_key($company_id, $lang_code); if (empty($api_key)) { return; } $default_params = array('items' => 'true', 'facets' => 'true', 'output' => 'json'); $params = array_merge($default_params, $params); if (empty($params['restrictBy'])) { unset($params['restrictBy']); } if (empty($params['union'])) { unset($params['union']); } $query = http_build_query($params); if (fn_se_check_debug()) { fn_print_r($params); } Registry::set('log_cut', true); if (strlen($query) > SE_MAX_SEARCH_REQUEST_LENGTH && fn_check_curl()) { $received = Http::post(SE_SERVICE_URL . '/search?api_key=' . $api_key, $params, array('timeout' => SE_SEARCH_TIMEOUT)); } else { $params['api_key'] = $api_key; $received = Http::get(SE_SERVICE_URL . '/search', $params, array('timeout' => SE_SEARCH_TIMEOUT)); } if (empty($received)) { return false; } $result = json_decode(trim($received), true); if (fn_se_check_debug()) { fn_print_r($result); } if (isset($result['error'])) { if ($result['error'] == 'NEED_RESYNC_YOUR_CATALOG') { fn_se_queue_import($company_id, $lang_code, false); return false; } elseif ($result['error'] == 'NAVIGATION_DISABLED') { fn_se_set_simple_setting('use_navigation', 'N'); } } if (empty($result) || !is_array($result) || !isset($result['totalItems'])) { return false; } return $result; }
/** * Dispathes the execution control to correct controller * * @return nothing */ function fn_dispatch() { Profiler::checkpoint('After init'); fn_set_hook('before_dispatch'); $regexp = "/^[a-zA-Z0-9_\\+]+\$/"; $view =& Registry::get('view'); $run_controllers = true; $external = false; $status = CONTROLLER_STATUS_NO_PAGE; // Security if (Registry::get('config.tweaks.anti_csfr') == true) { if ($_SERVER['REQUEST_METHOD'] == 'POST' && (empty($_SESSION['security_hash']) || empty($_REQUEST['security_hash']) || $_REQUEST['security_hash'] != $_SESSION['security_hash'])) { die('Access denied: CSRF attack'); } } //If $config['http_host'] was different from the domain name, there was redirection to $config['http_host'] value. if ((defined('HTTPS') ? Registry::get('config.https_host') : Registry::get('config.http_host')) != REAL_HOST && $_SERVER['REQUEST_METHOD'] == 'GET' && !defined('CONSOLE')) { fn_redirect((defined('HTTPS') ? Registry::get('config.https_location') : Registry::get('config.http_location')) . '/' . Registry::get('config.current_url')); } if (isset($_SERVER['CONTENT_LENGTH']) && ($_SERVER['CONTENT_LENGTH'] > fn_return_bytes(ini_get('upload_max_filesize')) || $_SERVER['CONTENT_LENGTH'] > fn_return_bytes(ini_get('post_max_size')))) { $max_size = fn_return_bytes(ini_get('upload_max_filesize')) < fn_return_bytes(ini_get('post_max_size')) ? ini_get('upload_max_filesize') : ini_get('post_max_size'); $msg = fn_get_lang_var('text_forbidden_uploaded_file_size'); $msg = str_replace('[size]', $max_size, $msg); fn_set_notification('E', fn_get_lang_var('error'), $msg); fn_redirect($_SERVER['HTTP_REFERER'], false); } // If URL contains session ID, remove it if (!empty($_REQUEST[SESS_NAME]) && $_SERVER['REQUEST_METHOD'] == 'GET') { fn_redirect(fn_query_remove(Registry::get('config.current_url'), SESS_NAME)); } if (!preg_match($regexp, CONTROLLER) || !preg_match($regexp, MODE)) { $status = CONTROLLER_STATUS_NO_PAGE; $run_controllers = false; } // 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', fn_get_lang_var('demo_mode'), fn_get_lang_var('demo_mode_content_text')); if (defined('AJAX_REQUEST')) { exit; } $status = CONTROLLER_STATUS_REDIRECT; $_REQUEST['redirect_url'] = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : INDEX_SCRIPT; } } elseif (!empty($_SESSION['auth']['usergroup_ids']) || defined('COMPANY_ID')) { $run_controllers = fn_check_permissions(CONTROLLER, MODE, 'admin', '', $_REQUEST); if ($run_controllers == false) { if (defined('AJAX_REQUEST')) { $ajax =& Registry::get('ajax'); $force_redirection = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; //$ajax->assign('force_redirection', $force_redirection); $_info = defined('DEVELOPMENT') ? ' ' . CONTROLLER . '.' . MODE : ''; fn_set_notification('W', fn_get_lang_var('warning'), fn_get_lang_var('access_denied') . $_info, true); exit; } $status = CONTROLLER_STATUS_DENIED; } } } // Check if request was rewritten and not handled // In this case this means that request was incorrect if (isset($_REQUEST['sef_rewrite'])) { $status = CONTROLLER_STATUS_NO_PAGE; $run_controllers = false; } if (AREA == 'A' && Registry::get('settings.General.secure_admin') == 'Y' && !defined('HTTPS') && $_SERVER['REQUEST_METHOD'] != 'POST' && !defined('AJAX_REQUEST') && empty($_REQUEST['keep_location']) && !defined('CONSOLE')) { fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url')); } elseif (AREA == 'C' && $_SERVER['REQUEST_METHOD'] != 'POST' && !defined('AJAX_REQUEST')) { $secure_controllers = fn_get_secure_controllers(); // if we are not on https but controller is secure, redirect to https if (isset($secure_controllers[CONTROLLER]) && $secure_controllers[CONTROLLER] == 'active' && !defined('HTTPS')) { fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url')); } // if we are on https and the controller is insecure, redirect to http if (!isset($secure_controllers[CONTROLLER]) && defined('HTTPS') && Registry::get('settings.General.keep_https') != 'Y') { fn_redirect(Registry::get('config.http_location') . '/' . Registry::get('config.current_url')); } } if (AREA == 'A') { fn_init_last_view($_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(); $status = CONTROLLER_STATUS_NO_PAGE; break; } if (count($core_controllers) + count($addon_controllers) > 1) { die('Duplicate controller ' . CONTROLLER . fn_print_r(array_merge($core_controllers, $addon_controllers), 1)); } $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)) { die("No controllers for: {$controller}"); } } 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->template_exists('views/' . CONTROLLER . '/' . $tpl)) { // try to find template in base views $view->assign('content_tpl', 'views/' . CONTROLLER . '/' . $tpl); } elseif (defined('LOADED_ADDON_PATH') && $view->template_exists('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->template_exists('addons/' . $addon . '/views/' . CONTROLLER . '/' . $tpl)) { $view->assign('content_tpl', 'addons/' . $addon . '/views/' . CONTROLLER . '/' . $tpl); break; } } } foreach ($controllers_cascade as $item) { $_res = fn_run_controller($item); // 0 - status, 1 - url $external = !empty($_res[2]) ? $_res[2] : false; $url = !empty($_res[1]) ? $_res[1] : ''; // 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; } } if (AREA == 'A') { fn_init_view_tools($_REQUEST); } // In console mode, just stop here if (defined('CONSOLE')) { exit; } // 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; } // Attach params and redirect if needed if (in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT)) && !empty($redirect_url)) { $params = array('page', 'selected_section'); $url_params = array(); foreach ($params as $param) { if (!empty($_REQUEST[$param])) { $url_params[] = "{$param}=" . $_REQUEST[$param]; } } if (!empty($url_params)) { $redirect_url .= (strpos($redirect_url, '?') === false ? '?' : '&') . implode('&', $url_params); } if (!isset($external)) { $external = false; } fn_redirect($redirect_url, false, $external); } if (!$view->get_var('content_tpl') && $status == CONTROLLER_STATUS_OK) { // FIXME $status = CONTROLLER_STATUS_NO_PAGE; } if ($status != CONTROLLER_STATUS_OK) { if ($status == CONTROLLER_STATUS_NO_PAGE) { header(' ', true, 404); } $view->assign('exception_status', $status); $view->assign('content_tpl', 'exception.tpl'); if ($status == CONTROLLER_STATUS_DENIED) { $view->assign('page_title', fn_get_lang_var('access_denied')); } elseif ($status == CONTROLLER_STATUS_NO_PAGE) { $view->assign('page_title', fn_get_lang_var('page_not_found')); } if (AREA != 'A') { Registry::set('root_template', 'exception.tpl'); } } Profiler::checkpoint('Before TPL'); Registry::get('view')->display(Registry::get('root_template')); Profiler::checkpoint('After TPL'); Profiler::display(); fn_set_hook('complete'); exit; // stop execution }
/** * Execute query * * @param string $query unparsed query * @param mixed ... unlimited number of variables for placeholders * @return boolean always true, dies if problem occured */ function db_query($query) { Registry::set('runtime.database.long_query', false); $args = func_get_args(); $query = db_process($query, array_slice($args, 1)); if (empty($query)) { return false; } if (defined('DEBUG_QUERIES')) { fn_print_r($query); } $time_start = microtime(true); file_put_contents("D:/query.txt", $query . "\r\n", FILE_APPEND); $result = driver_db_query($query); $time_exec = microtime(true) - $time_start; if (defined('PROFILER')) { Profiler::set_query($query, $time_exec); } // Check if query updates data in the database if ($time_exec > 30.003) { Registry::set('runtime.database.long_query', true); Registry::set('runtime.database.last_query', $query); } if ($result === true) { // true returns for success insert/update/delete query // Check if it was insert statement with auto_increment value if (Registry::is_exist('revisions') && ($i_id = Registry::get('revisions.db_insert_id')) && !Registry::get('revisions.working')) { Registry::set('revisions.db_insert_id', null); return $i_id; } elseif ($i_id = driver_db_insert_id()) { return $i_id; } } db_error($result, $query); return $result; }
function fnr() { $args = func_get_args(); return fn_print_r($args); }
/** * Execute query * * @param string $query unparsed query * @param mixed ... unlimited number of variables for placeholders * @return mixed result set for "SELECT" statement / generated ID for an AUTO_INCREMENT field for insert statement / Affected rows count for DELETE/UPDATE statements */ public function query($query) { $this->raw = $this->raw ?: Database::$raw; // Backward compatibility if (!$this->raw) { fn_set_hook('db_query', $query); } $args = func_get_args(); $query = $this->process($query, array_slice($args, 1), true); $result = false; if (!empty($query)) { if (!$this->raw) { fn_set_hook('db_query_process', $query); } if (defined('DEBUG_QUERIES')) { fn_print_r($query); } $time_start = microtime(true); $result = $this->db->query($query); if (!$this->error($result, $query)) { $insert_id = $this->db->insertId(); Debugger::set_query($query, microtime(true) - $time_start); if (!$this->raw) { fn_set_hook('db_query_executed', $query, $result); } // "true" will be returned for Update/Delete/Insert/Replace statements. "SELECT" returns MySQLi/PDO object if ($result === true) { $cmd = substr($query, 0, 6); // Check if it was insert statement with auto_increment value and return it if (!empty($insert_id)) { $result = $insert_id; } elseif ($cmd == 'UPDATE' || $cmd == 'DELETE' || $cmd == 'INSERT') { $result = $this->db->affectedRows($result); } // Check if query updated data in the database and run cache handlers if (!empty($result) && preg_match("/^(UPDATE|INSERT INTO|REPLACE INTO|DELETE FROM) " . $this->table_prefix . "(\\w+) /", $query, $m)) { Registry::setChangedTables($m[2]); } // Clear table fields cache if table structure was changed if (!empty($result) && preg_match("/^(ALTER( IGNORE)? TABLE) " . $this->table_prefix . "(\\w+) /", $query, $m)) { $this->clearTableFieldsCache($m[3]); } } } else { // Lost connection, try to reconnect if ($this->tryReconnect()) { return $this->query($query); // Assume that the table is broken // Try to repair } elseif (preg_match("/'(\\S+)\\.(MYI|MYD)/", $this->db->error(), $matches)) { $this->db->query("REPAIR TABLE {$matches['1']}"); return $this->query($query); } } } $this->raw = false; Database::$raw = false; // Backward compatibility return $result; }