/** * Gets all available patterns for the section * * @param string $section section to get patterns for * @param string $get_for get import or export patterns * @return array */ function fn_get_patterns($section, $get_for) { // Get core patterns $files = fn_get_dir_contents(Registry::get('config.dir.schemas') . 'exim', false, true, '.php'); foreach (Registry::get('addons') as $addon_name => $addon_data) { if ($addon_data['status'] != 'A') { continue; } $schema_dir = Registry::get('config.dir.addons') . $addon_name . '/schemas/exim'; if (is_dir($schema_dir)) { $_files = fn_get_dir_contents($schema_dir, false, true, '.php'); foreach ($_files as $key => $filename) { if (strpos($filename, '.post.php') !== false) { unset($_files[$key]); } } if (!empty($_files)) { $files = fn_array_merge($files, $_files, false); } } } $patterns = array(); $sections = array(); foreach ($files as $schema_file) { if (strpos($schema_file, '.functions.') !== false) { // skip functions schema definition continue; } $pattern_id = str_replace('.php', '', $schema_file); $pattern = fn_get_pattern_definition($pattern_id, $get_for); if (empty($pattern) || !fn_check_pattern_permissions($pattern, $get_for, $_SESSION['auth']['user_id'])) { continue; } $sections[$pattern['section']] = array('title' => __($pattern['section']), 'href' => 'exim.' . Registry::get('runtime.mode') . '?section=' . $pattern['section']); if ($pattern['section'] == $section) { $patterns[$pattern_id] = $pattern; } } if (Registry::get('runtime.company_id')) { $schema = fn_get_permissions_schema('vendor'); // Check if the selected section is available if (isset($schema[$get_for]['sections'][$section]['permission']) && !$schema[$get_for]['sections'][$section]['permission']) { return array('', ''); } if (!empty($schema[$get_for]['sections'])) { foreach ($schema[$get_for]['sections'] as $section_id => $data) { if (isset($data['permission']) && !$data['permission']) { unset($sections[$section_id]); } } } if (!empty($schema[$get_for]['patterns'])) { foreach ($schema[$get_for]['patterns'] as $pattern_id => $data) { if (isset($data['permission']) && !$data['permission']) { unset($patterns[$pattern_id]); } } } } ksort($sections, SORT_STRING); uasort($patterns, 'fn_sort_patterns'); return array($sections, $patterns); }
function fn_get_patterns($section, $get_for) { // Get core patterns $files = fn_get_dir_contents(DIR_SCHEMAS . 'exim', false, true, '.php'); foreach (Registry::get('addons') as $k => $v) { if ($v['status'] != 'A') { continue; } if (is_dir(DIR_ADDONS . $k . '/schemas/exim')) { $_files = fn_get_dir_contents(DIR_ADDONS . $k . '/schemas/exim', false, true, '.php'); foreach ($_files as $k => $v) { if (strpos($v, '.post.php') !== false) { unset($_files[$k]); } } if (!empty($_files)) { $files = fn_array_merge($files, $_files, false); } } } $patterns = array(); $sections = array(); foreach ($files as $k => $v) { $pattern_id = str_replace('.php', '', $v); $pattern = fn_get_pattern_definition($pattern_id); if (!empty($pattern['export_only']) && $get_for == 'import' || !empty($pattern['import_only']) && $get_for == 'export') { continue; } $sections[$pattern['section']] = array('title' => fn_get_lang_var($pattern['section']), 'href' => 'exim.' . MODE . '?section=' . $pattern['section']); if ($pattern['section'] == $section) { $patterns[$pattern_id] = $pattern; } } ksort($sections, SORT_STRING); ksort($patterns, SORT_STRING); return array($sections, $patterns); }
function fn_data_feeds_export($datafeed_id, $options = array(), $pattern = '') { static $pattern; if (empty($pattern)) { $pattern = fn_get_pattern_definition('products'); } $params['datafeed_id'] = $datafeed_id; $params['single'] = true; $params['available_fields'] = 'Y'; $params = array_merge($params, $options); $datafeed_data = fn_data_feeds_get_data($params, DESCR_SL); if (empty($pattern) || empty($params['datafeed_id'])) { fn_set_notification('E', __('error'), __('error_exim_no_data_exported')); return false; } if ($datafeed_data['exclude_disabled_products'] == 'Y') { $params['status'] = 'A'; } if (empty($datafeed_data['products']) && empty($datafeed_data['categories'])) { $params['cid'] = 0; $params['subcats'] = 'Y'; $params['skip_view'] = 'Y'; $params['extend'] = array('categories'); list($products, $search) = fn_get_products($params); $pids = array_map(create_function('$product', '$pid = $product["product_id"]; return $pid;'), $products); } else { $pids = array(); if (!empty($datafeed_data['products'])) { $pids = explode(',', $datafeed_data['products']); } if (!empty($datafeed_data['categories'])) { $params['cid'] = explode(',', $datafeed_data['categories']); $params['subcats'] = 'Y'; $params['skip_view'] = 'Y'; $params['extend'] = array('categories'); list($products, $search) = fn_get_products($params); $_pids = array_map(create_function('$product', '$pid = $product["product_id"]; return $pid;'), $products); $pids = array_merge($pids, $_pids); unset($_pids); } $pids = array_unique($pids); } if (empty($pids)) { fn_set_notification('E', __('error'), __('error_exim_no_data_exported')); return false; } $pattern['condition']['conditions']['product_id'] = $pids; $fields = array(); if (!empty($datafeed_data['fields'])) { foreach ($datafeed_data['fields'] as $field) { $fields[$field['field']] = $field['export_field_name']; } } $features = db_get_array('SELECT feature_id, description FROM ?:product_features_descriptions WHERE lang_code = ?s', DESCR_SL); $features_fields = array(); if (!empty($features)) { foreach ($features as $feature) { $features_fields[$feature['description']] = array('process_get' => array('fn_data_feeds_get_product_features', '#key', '#field', '#lang_code'), 'linked' => false); } } $pattern['export_fields'] = array_merge($pattern['export_fields'], $features_fields); $options = $datafeed_data['export_options']; $options['delimiter'] = $datafeed_data['csv_delimiter']; $options['filename'] = $datafeed_data['file_name']; $options['fields_names'] = true; $options['force_header'] = true; $pattern['enclosure'] = !empty($datafeed_data['enclosure']) ? $datafeed_data['enclosure'] : ''; if (!empty($fields)) { if (fn_export($pattern, $fields, $options) == true) { $errors = false; $export_location = empty($params['location']) ? $datafeed_data['export_location'] : $params['location']; if ($export_location == 'S') { if (file_exists(fn_get_files_dir_path() . $datafeed_data['file_name']) && is_dir($datafeed_data['save_dir'])) { fn_rename(fn_get_files_dir_path() . $datafeed_data['file_name'], $datafeed_data['save_dir'] . '/' . $datafeed_data['file_name']); } else { $errors = true; fn_set_notification('E', __('error'), __('check_server_export_settings')); } } elseif ($export_location == 'F') { if (empty($datafeed_data['ftp_url'])) { $errors = true; fn_set_notification('E', __('error'), __('ftp_connection_problem')); } else { preg_match("/[^\\/^\\^:]+/", $datafeed_data['ftp_url'], $matches); $host = $matches[0]; preg_match("/.*:([0-9]+)/", $datafeed_data['ftp_url'], $matches); $port = empty($matches[1]) ? 21 : $matches[1]; preg_match("/[^\\/]+(.*)/", $datafeed_data['ftp_url'], $matches); $url = empty($matches[1]) ? '' : $matches[1]; $conn_id = @ftp_connect($host, $port); $result = @ftp_login($conn_id, $datafeed_data['ftp_user'], $datafeed_data['ftp_pass']); if (!empty($url)) { @ftp_chdir($conn_id, $url); } $filename = fn_get_files_dir_path() . $datafeed_data['file_name']; if ($result) { if (@ftp_put($conn_id, $datafeed_data['file_name'], $filename, FTP_ASCII)) { unlink($filename); } else { $errors = true; fn_set_notification('E', __('error'), __('ftp_connection_problem')); } } else { $errors = true; fn_set_notification('E', __('error'), __('ftp_connection_problem')); } @ftp_close($conn_id); } } if (!$errors) { fn_set_notification('N', __('notice'), __('text_exim_data_exported')); return true; } else { unlink(fn_get_files_dir_path() . $datafeed_data['file_name']); return false; } } else { fn_set_notification('E', __('error'), __('error_exim_no_data_exported')); return false; } } else { fn_set_notification('E', __('error'), __('error_exim_fields_not_selected')); return false; } }
**************************************************************************** * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE * * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. * ****************************************************************************/ // rus_build_mailru dbazhenov use Tygh\Registry; ini_set('auto_detect_line_endings', true); set_time_limit(3600); fn_define('DB_LIMIT_SELECT_ROW', 30); if (!defined('BOOTSTRAP')) { die('Access denied'); } if ($mode == 'mailru_cron_export') { $addon_settings = Registry::get('addons.rus_tovary_mailru'); $params = $_REQUEST; if ($params['cron_key'] != $addon_settings['cron_key']) { fn_set_notification('E', __('error'), __('yml_export_error_cron_key')); fn_echo(__('yml_export_error_cron_key')); exit; } $layout_data_cols = array('product_id', 'product_code', 'Language', 'product_name', 'category', 'category_descriptions', 'price', 'status', 'amount', 'shipping_freight', 'free_shipping', 'product', 'full_description', 'product_features', 'product_url', 'image_url', 'is_edp'); $options = array('lang_code' => array(DEFAULT_LANGUAGE), 'price_dec_sign_delimiter' => '.', 'delimiter' => 'T', 'output' => 'S'); $pattern = fn_get_pattern_definition('tovary_mailru', 'export'); $options['filename'] = Registry::get('addons.rus_tovary_mailru.cron_filename'); if (fn_export($pattern, $layout_data_cols, $options)) { fn_echo("<br/>Экспорт выполнен успешно"); } else { fn_set_notification('E', __('error'), __('mailru_export_error_cron')); } exit; }