public function updatePrices() { if ($this->updateType == 'excel') { $lastRow = $this->excel->getActiveSheet()->getHighestRow(); for ($row = 2; $row <= $lastRow; $row++) { $itemId = $this->excel->getActiveSheet()->getCell('A' . $row)->getValue(); $finalPrice = 0; $qty = 0; foreach ($this->config['vendors'] as $vendor) { $price = $this->excel->getActiveSheet()->getCell($vendor["master-file-price-column"] . $row)->getValue(); if ($finalPrice < $price) { $finalPrice = $price; } $qty += $this->excel->getActiveSheet()->getCell($vendor["master-file-qty-column"] . $row)->getValue(); } db_query("UPDATE ?:products, vendor_items SET temp_price= ?i * (vendor_items.interest/100 + 1), temp_qty = ?i WHERE product_code= ?s AND vendor_items.item_id= '" . $itemId . "'", $finalPrice, $qty, $itemId); } } elseif ($this->updateType == 'db') { foreach ($this->config['vendors'] as $vendor) { $id_columns[] = $vendor['master-file-item-column-name']; $price_columns[] = $vendor['master-file-price-column-name']; $qty_columns[] = $vendor['master-file-qty-column-name']; } db_get_array("UPDATE cscart_products, vendor_prices, vendor_items SET temp_price=GREATEST(0, " . implode(",", $price_columns) . ") * (vendor_items.interest/100 + 1), temp_qty=" . implode("+", $qty_columns) . " WHERE product_code= vendor_prices.item_id AND vendor_items.item_id=product_code"); } }
function fn_get_seo_rules($params = array(), $items_per_page = 0, $lang_code = DESCR_SL) { $lang_code = fn_get_corrected_seo_lang_code($lang_code); $global_total = db_get_fields("SELECT dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' GROUP BY dispatch"); $local_total = db_get_fields("SELECT dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s", $lang_code); if ($diff = array_diff($global_total, $local_total)) { foreach ($diff as $disp) { fn_create_seo_name(0, 's', str_replace('.', '-', $disp), 0, $disp, DESCR_SL); } } // Init filter $params = fn_init_view('seo_rules', $params); // Set default values to input params $params['page'] = empty($params['page']) ? 1 : $params['page']; // default page is 1 $condition = ''; if (isset($params['name']) && fn_string_no_empty($params['name'])) { $condition .= db_quote(" AND name LIKE ?l", "%" . trim($params['name']) . "%"); } if (isset($params['controller']) && fn_string_no_empty($params['controller'])) { $condition .= db_quote(" AND dispatch LIKE ?l", "%" . trim($params['controller']) . "%"); } $limit = ''; if (!empty($items_per_page)) { $total = db_get_field("SELECT COUNT(*) FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s ?p", $lang_code, $condition); $limit = fn_paginate($params['page'], $total, $items_per_page); } $seo_data = db_get_array("SELECT name, dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s ?p ORDER BY dispatch {$limit}", $lang_code, $condition); return array($seo_data, $params); }
/** * Reverse IP filter */ function fn_settings_actions_addons_access_restrictions_admin_reverse_ip_access(&$new_value, $old_value) { $ip = fn_get_ip(true); if ($new_value == 'Y') { $ip_data = db_get_row("SELECT item_id, status FROM ?:access_restriction WHERE ip_from = ?i AND ip_to = ?i AND type IN ('aas', 'aab', 'aar')", $ip['host'], $ip['host']); if (empty($ip_data) || empty($ip_data['item_id'])) { // Add IP $restrict_ip = array('ip_from' => $ip['host'], 'ip_to' => $ip['host'], 'type' => 'aas', 'timestamp' => TIME, 'expires' => '0', 'status' => 'A'); $__data = array(); $__data['item_id'] = db_query("REPLACE INTO ?:access_restriction ?e", $restrict_ip); $__data['type'] = 'aas'; foreach (fn_get_translation_languages() as $__data['lang_code'] => $_v) { $__data['reason'] = __('store_admin', '', $__data['lang_code']); db_query("REPLACE INTO ?:access_restriction_reason_descriptions ?e", $__data); } fn_set_notification('W', __('warning'), __('your_ip_added', array('[ip]' => long2ip($ip['host'])))); } elseif (empty($ip_data['status']) || $ip_data['status'] != 'A') { // Change IP status to available db_query("UPDATE ?:access_restriction SET ?u WHERE item_id = ?i", array('status' => 'A'), $ip_data['item_id']); fn_set_notification('W', __('warning'), __('your_ip_enabled', array('[ip]' => long2ip($ip['host'])))); } } else { // Delete IP $ips_data = db_get_array("SELECT item_id, type FROM ?:access_restriction WHERE ip_from <= ?i AND ip_to >= ?i AND type IN ('aas', 'aab', 'aar')", $ip['host'], $ip['host']); if (!empty($ips_data)) { foreach ($ips_data as $ip_data) { db_query("DELETE FROM ?:access_restriction WHERE item_id = ?i", $ip_data['item_id']); db_query("DELETE FROM ?:access_restriction_reason_descriptions WHERE item_id = ?i AND type = ?s", $ip_data['item_id'], $ip_data['type']); } fn_set_notification('W', __('warning'), __('your_ip_removed', array('[ip]' => long2ip($ip['host'])))); } } return true; }
public function import($db_already_cloned) { General::setProgressTitle(__CLASS__); if (!$db_already_cloned) { if (!General::cloneImportedDB($this->store_data)) { return false; } } else { General::setEmptyProgressBar(__('importing_data')); General::setEmptyProgressBar(__('importing_data')); } $main_sql = Registry::get('config.dir.addons') . 'store_import/database/' . $this->main_sql_filename; General::backupSettings(); if (is_file($main_sql)) { //Process main sql if (!db_import_sql_file($main_sql)) { return false; } } //Find all quick menu linked to the template_editor and change it to file_editor $quick_menus = db_get_array("SELECT * FROM ?:quick_menu WHERE url LIKE '%template_editor%'"); foreach ($quick_menus as $quick_menu) { $quick_menu['url'] = str_replace('template_editor', 'file_editor', $quick_menu['url']); db_query("REPLACE INTO ?:quick_menu ?e", $quick_menu); } General::setEmptyProgressBar(); General::setEmptyProgressBar(); General::setEmptyProgressBar(); General::setEmptyProgressBar(); return true; }
function fn_get_seo_rules($params = array(), $items_per_page = 0, $lang_code = DESCR_SL) { $condition = fn_get_seo_company_condition('?:seo_names.company_id'); $lang_code = fn_get_corrected_seo_lang_code($lang_code); $global_total = db_get_fields("SELECT dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' ?p GROUP BY dispatch", $condition); $local_total = db_get_fields("SELECT dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s ?p", $lang_code, $condition); if ($diff = array_diff($global_total, $local_total)) { foreach ($diff as $disp) { fn_create_seo_name(0, 's', str_replace('.', '-', $disp), 0, $disp, '', DESCR_SL); } } // Init filter $params = LastView::instance()->update('seo_rules', $params); // Set default values to input params $default_params = array('page' => 1, 'items_per_page' => $items_per_page); $params = array_merge($default_params, $params); if (isset($params['name']) && fn_string_not_empty($params['name'])) { $condition .= db_quote(" AND name LIKE ?l", "%" . trim($params['name']) . "%"); } if (isset($params['rule_params']) && fn_string_not_empty($params['rule_params'])) { $condition .= db_quote(" AND dispatch LIKE ?l", "%" . trim($params['rule_params']) . "%"); } $limit = ''; if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s ?p", $lang_code, $condition); $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']); } $seo_data = db_get_array("SELECT name, dispatch FROM ?:seo_names WHERE object_id = '0' AND type = 's' AND lang_code = ?s ?p ORDER BY dispatch {$limit}", $lang_code, $condition); return array($seo_data, $params); }
function fn_get_required_products_linked_to_options_by_product_id($product_id) { $finalResults = array(); $fieldsOptionsVariantsLinksToProducts = " d.product_id AS linked_prodict_id"; $conditionOptionsVariantsLinksToProducts = db_quote(' (?:product_options.product_id = ?i OR (?:product_options.product_id=0 AND n.product_id = ?i))', $product_id, $product_id); $joinOptionsVariantsLinksToProducts = db_quote(' LEFT JOIN ?:product_global_option_links n ON ?:product_options.option_id = n.option_id '); $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants c ON ?:product_options.option_id = c.option_id'); $joinOptionsVariantsLinksToProducts .= db_quote(' JOIN ?:product_option_variants_link d ON c.variant_id = d.option_variant_id'); $optsVariantsLinksToProducts = db_get_array("SELECT " . $fieldsOptionsVariantsLinksToProducts . " FROM ?:product_options " . $joinOptionsVariantsLinksToProducts . " WHERE " . $conditionOptionsVariantsLinksToProducts . " GROUP BY c.variant_id, ?:product_options.option_id" . " ORDER BY ?:product_options.position, c.position"); }
function fn_get_store_locations($params, $items_per_page = 0, $lang_code = CART_LANGUAGE) { $default_params = array('page' => 1, 'q' => '', 'match' => 'any'); $params = array_merge($default_params, $params); $fields = array('?:store_locations.*', '?:store_location_descriptions.*', '?:country_descriptions.country as country_title'); $join = db_quote(" LEFT JOIN ?:store_location_descriptions ON ?:store_locations.store_location_id = ?:store_location_descriptions.store_location_id AND ?:store_location_descriptions.lang_code = ?s", $lang_code); $join .= db_quote(" LEFT JOIN ?:country_descriptions ON ?:store_locations.country = ?:country_descriptions.code AND ?:country_descriptions.lang_code = ?s", $lang_code); $condition = 1; if (AREA == 'C') { $condition .= " AND status = 'A'"; } // Search string condition for SQL query if (!empty($params['q'])) { if ($params['match'] == 'any') { $pieces = explode(' ', $params['q']); $search_type = ' OR '; } elseif ($params['match'] == 'all') { $pieces = explode(' ', $params['q']); $search_type = ' AND '; } else { $pieces = array($params['q']); $search_type = ''; } $_condition = array(); foreach ($pieces as $piece) { $tmp = db_quote("?:store_location_descriptions.name LIKE ?l", "%{$piece}%"); // check search words $tmp .= db_quote(" OR ?:store_location_descriptions.description LIKE ?l", "%{$piece}%"); $tmp .= db_quote(" OR ?:store_location_descriptions.city LIKE ?l", "%{$piece}%"); $tmp .= db_quote(" OR ?:country_descriptions.country LIKE ?l", "%{$piece}%"); $_condition[] = '(' . $tmp . ')'; } $_cond = implode($search_type, $_condition); if (!empty($_condition)) { $condition .= ' AND (' . $_cond . ') '; } unset($_condition); } $condition .= AREA == 'C' && defined('CART_LOCALIZATION') ? fn_get_localizations_condition('?:store_locations.localization') : ''; $sorting = "?:store_locations.position, ?:store_location_descriptions.name"; $limit = ''; $total = 0; if (!empty($items_per_page)) { $total = db_get_field("SELECT COUNT(?:store_locations.store_location_id) FROM ?:store_locations ?p WHERE ?p", $join, $condition); $limit = fn_paginate($params['page'], $total, $items_per_page); } $data = db_get_array('SELECT ?p FROM ?:store_locations ?p WHERE ?p GROUP BY ?:store_locations.store_location_id ORDER BY ?p ?p', implode(', ', $fields), $join, $condition, $sorting, $limit); if (!$total) { $total = count($data); } return array($data, $params, $total); }
function fn_exim_get_usergroups($user_id) { $pair_delimiter = ':'; $set_delimiter = '; '; $result = array(); $usergroups = db_get_array("SELECT usergroup_id, status FROM ?:usergroup_links WHERE user_id = ?i", $user_id); if (!empty($usergroups)) { foreach ($usergroups as $ug) { $result[] = $ug['usergroup_id'] . $pair_delimiter . $ug['status']; } } return !empty($result) ? implode($set_delimiter, $result) : ''; }
function fn_get_features_list() { $features_list = array('-'); $_fl = db_get_array("SELECT a.feature_id, b.description FROM ?:product_features as a LEFT JOIN ?:product_features_descriptions as b ON a.feature_id=b.feature_id WHERE b.lang_code = ?s AND (a.feature_type = 'S' OR a.feature_type = 'E') ORDER BY b.description", CART_LANGUAGE); if (!empty($_fl)) { foreach ($_fl as $v) { if (!empty($v['description'])) { $features_list[$v['feature_id']] = $v['description']; } } } return $features_list; }
function fn_gift_registry_get_userlog($params, $items_per_page = 0) { // Set default values to input params $default_params = array('page' => 1, 'items_per_page' => $items_per_page); $params = array_merge($default_params, $params); $sortings = array('timestamp' => 'timestamp', 'amount' => 'amount'); $sorting = db_sort($params, $sortings, 'timestamp', 'desc'); $limit = ''; if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:reward_point_changes WHERE user_id = ?i", $params['user_id']); $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']); } $userlog = db_get_array("SELECT change_id, action, timestamp, amount, reason FROM ?:reward_point_changes WHERE user_id = ?i {$sorting} {$limit}", $params['user_id']); return array($userlog, $params); }
public static function sendUaStat() { $access_id = TwigmoConnector::getAccessID('A'); if (!$access_id) { return; } $query = db_quote('FROM ?:twigmo_ua_stat WHERE month<?s LIMIT ?i', date('Y-m-1'), 100); $needToSend = db_get_array('SELECT *, ?s as access_id ' . $query, $access_id); if (!count($needToSend)) { return; } $responce = Http::post(TWG_UA_RULES_STAT, array('stat' => serialize($needToSend))); if ($responce == 'ok') { db_query('DELETE ' . $query); } }
/** * Returns an array of staff members with image_pairs * * @return array $data */ function fn_staff_block_manager_get_staff_members_for_block($arg, $settings, $block) { $properties = $settings['properties']; if (isset($properties['staff_sort_by_position']) && in_array($properties['staff_sort_by_position'], array('asc', 'desc'))) { $order = " ORDER BY s.position {$properties['staff_sort_by_position']}"; } $fields = "s.*, u.firstname as linked_firstname, u.lastname as linked_lastname, u.email as linked_email"; $join = db_quote(" LEFT JOIN ?:users as u ON s.linked_user_id = u.user_id"); $query = "SELECT " . $fields . " FROM ?:staff as s" . $join; if (isset($order)) { $query .= db_quote($order); } $data = db_get_array($query); for ($i = 0; $i < count($data); $i++) { $data[$i]['main_pair'] = fn_get_image_pairs($data[$i]['user_id'], 'staff', 'M', true, true, CART_LANGUAGE); } return $data; }
function fn_age_verification_update_parent_data($category_id, $age_verification, $age_limit) { $data = db_get_array("SELECT category_id, age_verification, age_limit, parent_age_verification, parent_age_limit FROM ?:categories WHERE parent_id = ?i", $category_id); db_query("UPDATE ?:categories SET parent_age_verification = ?s, parent_age_limit = ?i WHERE parent_id = ?i", $age_verification, $age_limit, $category_id); foreach ($data as $key => $entry) { $update = false; if ($entry['age_verification'] == 'N' && $age_verification == 'Y') { $update = true; } if ($entry['age_limit'] < $age_limit || $entry['age_verification'] == 'N' && $age_verification == 'N' && ($age_limit = 0)) { $update = true; } if ($update) { fn_age_verification_update_parent_data($entry['category_id'], $age_verification, $age_limit); } elseif ($entry['age_verification'] == 'Y' && $entry['age_limit'] > $age_limit) { fn_age_verification_update_parent_data($entry['category_id'], $entry['age_verification'], $entry['age_limit']); } } }
function fn_seo_settings_update($type, $option, $new_value, $redirect_only) { $i = 0; $items_per_pass = 100; $old_value = Registry::get('addons.seo.' . $option); $company_condition = fn_get_seo_company_condition('?:seo_names.company_id', $type); while ($update_data = db_get_array("SELECT * FROM ?:seo_names WHERE type = ?s ?p LIMIT {$i}, {$items_per_pass}", $type, $company_condition)) { foreach ($update_data as $data) { Registry::set('addons.seo.' . $option, $old_value); $url = fn_generate_seo_url_from_schema(array('type' => $data['type'], 'object_id' => $data['object_id'], 'lang_code' => $data['lang_code']), false); fn_seo_update_redirect(array('src' => $url, 'type' => $data['type'], 'object_id' => $data['object_id'], 'company_id' => $data['company_id'], 'lang_code' => $data['lang_code']), 0, false); if (!$redirect_only) { Registry::set('addons.seo.' . $option, $new_value); fn_create_seo_name($data['object_id'], $data['type'], $data['name'], 0, '', $data['company_id'], $data['lang_code'], true); } } $i += $items_per_pass; } }
function fn_get_feedbacks($params, $items_per_page, $lang_code = CART_LANGUAGE) { $params = LastView::instance()->update('feedbacks', $params); $default_params = array('page' => 1, 'items_per_page' => $items_per_page); $params = array_merge($default_params, $params); $fields = array("?:orders_feedback.feedback_id", "?:orders_feedback.statuses", "?:orders_feedback.subject", "?:orders_feedback.remind_in", "?:orders_feedback.status", "?:orders_feedback.lang_code"); $sortings = array('feedback_id' => "?:orders_feedback.feedback_id", 'subject' => "?:orders_feedback.subject", 'statuses' => "?:orders_feedback.statuses", 'remind_in' => "?:orders_feedback.remind_in"); $condition = $_condition = $join = $group = ''; /*conditions*/ $condition .= db_quote(' AND lang_code = ?s', $lang_code); /*conditions*/ $sorting = db_sort($params, $sortings, 'feedback_id', 'desc'); $limit = ''; if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(?:orders_feedback.feedback_id) FROM ?:orders_feedback {$join} WHERE 1 {$condition}"); $limit = db_paginate($params['page'], $params['items_per_page']); } $feedbacks = db_get_array('SELECT ' . implode(', ', $fields) . " FROM ?:orders_feedback {$join} WHERE 1 {$condition} {$group} {$sorting} {$limit}"); LastView::instance()->processResults('feedbacks', $feedbacks, $params); return array($feedbacks, $params); }
function fn_exim_orders_get_extra_fields($order_id, $lang_code = CART_LANGUAGE) { $fields = array(); $_user = db_get_array("SELECT d.description, f.value, a.section FROM ?:profile_fields_data as f LEFT JOIN ?:profile_field_descriptions as d ON d.object_id = f.field_id AND d.object_type = 'F' AND d.lang_code = ?s LEFT JOIN ?:profile_fields as a ON a.field_id = f.field_id WHERE f.object_id = ?i AND f.object_type = 'O'", $lang_code, $order_id); if (!empty($_user)) { foreach ($_user as $field) { if ($field['section'] == 'B') { $type = 'billing'; } elseif ($field['section'] == 'S') { $type = 'shipping'; } else { $type = 'user'; } $fields[$type][$field['description']] = $field['value']; } } if (!empty($fields)) { return YAML_Parser::serialize($fields); } return ''; }
function fn_ulogin_syncpanel($user_id = 0) { $auth = $_SESSION['auth']; $current_user = $auth['user_id']; $current_user = isset($current_user) ? $current_user : 0; $user_id = empty($user_id) ? $current_user : $user_id; if (empty($user_id)) { return ''; } $networks = array(); $res = db_get_array("SELECT * FROM ?:ulogin WHERE user_id = ?i", $user_id); if ($res) { foreach ($res as $network) { $networks[] = $network; } } else { return '<h3 class="ty-subheader">' . __('ulogin_sync_title') . '</h3>' . fn_ulogin_authpanel(1) . '<p>' . __('ulogin_sync_help') . '</p>'; } $output = ' <style> .big_provider { display: inline-block; margin-right: 10px; } </style> <h3 class="ty-subheader">' . __('ulogin_sync_title') . '</h3>' . fn_ulogin_authpanel(1) . '<p>' . __('ulogin_sync_help') . '</p> <h3 class="ty-subheader">' . __('ulogin_sync_accounts') . '</h3>'; if ($networks) { $output .= '<div id="ulogin_accounts">'; foreach ($networks as $network) { if ($network['user_id'] = $user_id) { $output .= "<div data-ulogin-network='{$network['network']}' data-ulogin-identity='{$network['identity']}' class='ulogin_network big_provider {$network['network']}_big'></div>"; } } $output .= '</div> <p>' . __('ulogin_sync_accounts_delete') . '</p>'; return $output; } return ''; }
function fn_get_companies($params, &$auth, $items_per_page = 0) { // Init filter $_view = 'companies'; $params = fn_init_view($_view, $params); // Set default values to input params $params['page'] = empty($params['page']) ? 1 : $params['page']; // Define fields that should be retrieved $fields = array("?:companies.company_id", "?:companies.email", "?:companies.company", "?:companies.timestamp", "?:companies.status"); // Define sort fields $sortings = array('id' => "?:users.user_id", 'company' => "?:companies.company", 'email' => "?:companies.email", 'date' => "?:companies.timestamp", 'status' => "?:companies.status"); $directions = array('asc' => 'asc', 'desc' => 'desc'); $condition = $join = $group = ''; $condition .= fn_get_company_condition('?:companies.company_id'); $group .= " GROUP BY ?:companies.company_id"; /* * TODO search if (!empty($params['company'])) { $condition .= db_quote(" AND ?:users.company LIKE ?l", "%$params[company]%"); } */ fn_set_hook('get_companies', $params, $fields, $sortings, $condition, $join); if (empty($params['sort_order']) || empty($directions[$params['sort_order']])) { $params['sort_order'] = 'asc'; } if (empty($params['sort_by']) || empty($sortings[$params['sort_by']])) { $params['sort_by'] = 'company'; } $sorting = (is_array($sortings[$params['sort_by']]) ? implode(' ' . $directions[$params['sort_order']] . ', ', $sortings[$params['sort_by']]) : $sortings[$params['sort_by']]) . " " . $directions[$params['sort_order']]; // Reverse sorting (for usage in view) $params['sort_order'] = $params['sort_order'] == 'asc' ? 'desc' : 'asc'; // Paginate search results $limit = ''; if (!empty($items_per_page)) { $total = db_get_field("SELECT COUNT(DISTINCT(?:companies.company_id)) FROM ?:companies {$join} WHERE 1 {$condition}"); $limit = fn_paginate($params['page'], $total, $items_per_page); } $companies = db_get_array("SELECT " . implode(', ', $fields) . " FROM ?:companies {$join} WHERE 1 {$condition} {$group} ORDER BY {$sorting} {$limit}"); return array($companies, $params); }
function fn_delete_corresponding_subscription($order_ids, $not_confirmed = true) { $subscriptions = db_get_hash_single_array("SELECT subscription_id, order_id FROM ?:recurring_subscriptions WHERE order_id IN (?n)", array('subscription_id', 'order_id'), $order_ids); if (!empty($subscriptions)) { if ($not_confirmed) { $_SESSION['subscriptions'] = $subscriptions; $_SESSION['order_ids'] = $order_ids; return false; } else { fn_delete_recurring_subscriptions(array_keys($subscriptions)); } } foreach ($order_ids as $v) { $subs = db_get_array("SELECT subscription_id, order_ids FROM ?:recurring_subscriptions WHERE FIND_IN_SET(?i, order_ids)", $v); if (!empty($subs)) { foreach ($subs as $val) { $new_order_ids = explode(',', $val['order_ids']); $new_order_ids = array_diff($new_order_ids, $order_ids); db_query("UPDATE ?:recurring_subscriptions SET order_ids = ?s WHERE subscription_id = ?i", implode(',', $new_order_ids), $val['subscription_id']); } } } return true; }
/** * Deletes product tab with reliated descriptions * @static * @param integer $menu_id ID of tab for delete * @return bool */ public static function delete($menu_id) { if (!empty($menu_id) && fn_check_company_id('menus', 'menu_id', $menu_id)) { /** * Before delete product tab * @param int $menu_id Id of product tab for delete */ fn_set_hook('delete_menu_pre', $menu_id); db_query("DELETE FROM ?:menus WHERE menu_id = ?i", $menu_id); db_query("DELETE FROM ?:menus_descriptions WHERE menu_id = ?i", $menu_id); // Remove data from static data $static_datas = db_get_array("SELECT param_id FROM ?:static_data WHERE param_5 = ?i AND section = 'A'", $menu_id); foreach ($static_datas as $static_data) { fn_delete_static_data($static_data['param_id']); } /** * After delete product tab * @param int $menu_id Id of product tab for delete */ fn_set_hook('delete_menu_post', $menu_id); return true; } return false; }
function fn_get_banners($params, $lang_code = CART_LANGUAGE) { $default_params = array('items_per_page' => 0, 'sort_by' => 'name'); $params = array_merge($default_params, $params); $sortings = array('timestamp' => '?:banners.timestamp', 'name' => '?:banner_descriptions.banner'); $directions = array('asc' => 'asc', 'desc' => 'desc'); $condition = $limit = ''; if (!empty($params['limit'])) { $limit = db_quote(' LIMIT 0, ?i', $params['limit']); } if (empty($params['sort_order']) || empty($directions[$params['sort_order']])) { $params['sort_order'] = 'asc'; } if (empty($params['sort_by']) || empty($sortings[$params['sort_by']])) { $params['sort_by'] = 'name'; } $sorting = $sortings[$params['sort_by']] . ' ' . $directions[$params['sort_order']]; $condition = AREA == 'A' ? '' : " AND ?:banners.status = 'A' "; $condition .= fn_get_localizations_condition('?:banners.localization'); if (!empty($params['item_ids'])) { $condition .= db_quote(' AND ?:banners.banner_id IN (?n)', explode(',', $params['item_ids'])); } if (!empty($params['period']) && $params['period'] != 'A') { list($params['time_from'], $params['time_to']) = fn_create_periods($params); $condition .= db_quote(" AND (?:banners.timestamp >= ?i AND ?:banners.timestamp <= ?i)", $params['time_from'], $params['time_to']); } $banners = db_get_array("SELECT ?:banners.banner_id, ?:banners.type, ?:banners.target, ?:banners.status, ?:banners.url, ?:banner_descriptions.banner, ?:banner_descriptions.description FROM ?:banners LEFT JOIN ?:banner_descriptions ON ?:banner_descriptions.banner_id = ?:banners.banner_id AND ?:banner_descriptions.lang_code = ?s WHERE 1 ?p ORDER BY ?p ?p", $lang_code, $condition, $sorting, $limit); foreach ($banners as $k => $v) { $banners[$k]['main_pair'] = fn_get_image_pairs($v['banner_id'], 'banner', 'M', true, false, $lang_code); } if (!empty($params['item_ids'])) { $banners = fn_sort_by_ids($banners, explode(',', $params['item_ids']), 'banner_id'); } fn_set_hook('get_banners', $banners); return array($banners, $params); }
function fn_get_discussions($params, $items_per_page) { // Init filter $params = LastView::instance()->update('discussion', $params); // Set default values to input params $default_params = array('page' => 1, 'items_per_page' => $items_per_page); $params = array_merge($default_params, $params); // Define fields that should be retrieved $fields = array('?:discussion_posts.*', '?:discussion_messages.message', '?:discussion_rating.rating_value', '?:discussion.*'); // Define sort fields $sortings = array('object' => "?:discussion.object_type", 'name' => "?:discussion_posts.name", 'ip_address' => "?:discussion_posts.ip_address", 'timestamp' => "?:discussion_posts.timestamp", 'status' => "?:discussion_posts.status", 'date' => "?:orders.timestamp", 'total' => "?:orders.total"); $sorting = db_sort($params, $sortings, 'timestamp', 'desc'); $condition = $join = ''; if (isset($params['name']) && fn_string_not_empty($params['name'])) { $condition .= db_quote(" AND ?:discussion_posts.name LIKE ?l", "%" . trim($params['name']) . "%"); } if (isset($params['message']) && fn_string_not_empty($params['message'])) { $condition .= db_quote(" AND ?:discussion_messages.message LIKE ?l", "%" . trim($params['message']) . "%"); } if (!empty($params['type'])) { $condition .= db_quote(" AND ?:discussion.type = ?s", $params['type']); } if (!empty($params['status'])) { $condition .= db_quote(" AND ?:discussion_posts.status = ?s", $params['status']); } if (!empty($params['post_id'])) { $condition .= db_quote(" AND ?:discussion_posts.post_id = ?i", $params['post_id']); } if (isset($params['ip_address']) && fn_string_not_empty($params['ip_address'])) { $condition .= db_quote(" AND ?:discussion_posts.ip_address = ?s", fn_ip_to_db(trim($params['ip_address']))); } if (!empty($params['rating_value'])) { $condition .= db_quote(" AND ?:discussion_rating.rating_value = ?i", $params['rating_value']); } if (!empty($params['object_type'])) { $condition .= db_quote(" AND ?:discussion.object_type = ?s", $params['object_type']); } $condition .= fn_get_discussion_company_condition('?:discussion.company_id'); if (!empty($params['period']) && $params['period'] != 'A') { list($params['time_from'], $params['time_to']) = fn_create_periods($params); $condition .= db_quote(" AND (?:discussion_posts.timestamp >= ?i AND ?:discussion_posts.timestamp <= ?i)", $params['time_from'], $params['time_to']); } $join .= " INNER JOIN ?:discussion ON ?:discussion.thread_id = ?:discussion_posts.thread_id"; $join .= " INNER JOIN ?:discussion_messages ON ?:discussion_messages.post_id = ?:discussion_posts.post_id"; $join .= " INNER JOIN ?:discussion_rating ON ?:discussion_rating.post_id = ?:discussion_posts.post_id"; $limit = ''; if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT COUNT(*) FROM ?:discussion_posts {$join} WHERE 1 {$condition}"); $limit = db_paginate($params['page'], $params['items_per_page'], $params['total_items']); } $posts = db_get_array("SELECT " . implode(',', $fields) . " FROM ?:discussion_posts {$join} WHERE 1 {$condition} {$sorting} {$limit}"); foreach ($posts as $k => $post) { if (isset($post['ip_address'])) { $posts[$k]['ip_address'] = fn_ip_from_db($post['ip_address']); } } return array($posts, $params); }
function fn_delete_return($return_id) { $items = db_get_array("SELECT item_id, ?:order_details.extra, ?:order_details.order_id FROM ?:order_details LEFT JOIN ?:rma_returns ON ?:order_details.order_id = ?:rma_returns.order_id WHERE return_id = ?i", $return_id); foreach ($items as $item) { $extra = unserialize($item['extra']); if (isset($extra['returns'])) { unset($extra['returns']); } db_query('UPDATE ?:order_details SET ?u WHERE item_id = ?i AND order_id = ?i', array('extra' => serialize($extra)), $item['item_id'], $item['order_id']); } db_query("DELETE FROM ?:rma_returns WHERE return_id = ?i", $return_id); db_query("DELETE FROM ?:rma_return_products WHERE return_id = ?i", $return_id); }
/** * Get order data */ public static function getOrderInfo($order_id) { $object = fn_get_order_info($order_id, false, true, true); $object['date'] = fn_twg_format_time($object['timestamp']); $status_data = fn_get_status_data($object['status'], STATUSES_ORDER); if (AREA == 'C') { $object['status'] = empty($status_data['description']) ? '' : $status_data['description']; } $object['shipping'] = array_values(isset($object['shipping']) ? $object['shipping'] : array()); $object['taxes'] = array_values($object['taxes']); $object['items'] = self::setProductsPointsInfo(array('products' => array_values($object['products']))); unset($object['products']); foreach ($object['items'] as &$product) { if (!empty($product['extra']['points_info']) && Registry::get('addons.reward_points.status') != 'A') { unset($product['extra']['points_info']); } } if (Registry::get('settings.General.use_shipments') == 'Y') { $shipments = db_get_array('SELECT ?:shipments.shipment_id, ?:shipments.comments, ?:shipments.tracking_number, ?:shipping_descriptions.shipping AS shipping, ?:shipments.carrier FROM ?:shipments LEFT JOIN ?:shipment_items ON (?:shipments.shipment_id = ?:shipment_items.shipment_id) LEFT JOIN ?:shipping_descriptions ON (?:shipments.shipping_id = ?:shipping_descriptions.shipping_id) WHERE ?:shipment_items.order_id = ?i AND ?:shipping_descriptions.lang_code = ?s GROUP BY ?:shipments.shipment_id', $order_id, DESCR_SL); if (!empty($shipments)) { foreach ($shipments as $id => $shipment) { $shipments[$id]['items'] = db_get_array('SELECT item_id, amount FROM ?:shipment_items WHERE shipment_id = ?i', $shipment['shipment_id']); } } $object['shipments'] = $shipments; } return $object; }
/** * Gets image pairs (icon, detailed) * * @param array/int $object_ids List of Object IDs or Object ID * @param string $object_type Type: product, category, banner, etc. * @param string $pair_type (M)ain or (A)dditional * @param bool $get_icon * @param bool $get_detailed * @param string $lang_code 2-letters code * @return array Pair data */ function fn_get_image_pairs($object_ids, $object_type, $pair_type, $get_icon = true, $get_detailed = true, $lang_code = CART_LANGUAGE) { /** * Changes input params for fn_get_image_pairs function * * @param array/int $object_ids List of Object IDs or Object ID * @param string $object_type Type: product, category, banner, etc. * @param string $pair_type (M)ain or (A)dditional * @param bool $get_icon * @param bool $get_detailed * @param string $lang_code 2-letters code * @return array Pair data */ fn_set_hook('get_image_pairs_pre', $object_ids, $object_type, $pair_type, $get_icon, $get_detailed, $lang_code); $icon_pairs = $detailed_pairs = $pairs_data = array(); $cond = is_array($object_ids) ? db_quote("AND ?:images_links.object_id IN (?n)", $object_ids) : db_quote("AND ?:images_links.object_id = ?i", $object_ids); if ($get_icon == true || $get_detailed == true) { if ($get_icon == true) { $join_cond = "?:images_links.image_id = ?:images.image_id"; $icon_pairs = db_get_array("SELECT ?:images_links.*, ?:images.image_path, ?:common_descriptions.description AS alt, ?:images.image_x, ?:images.image_y, ?:images.image_id as images_image_id" . " FROM ?:images_links" . " LEFT JOIN ?:images ON {$join_cond}" . " LEFT JOIN ?:common_descriptions ON ?:common_descriptions.object_id = ?:images.image_id AND ?:common_descriptions.object_holder = 'images' AND ?:common_descriptions.lang_code = ?s" . " WHERE ?:images_links.object_type = ?s AND ?:images_links.type = ?s {$cond}" . " ORDER BY ?:images_links.position, ?:images_links.pair_id", $lang_code, $object_type, $pair_type); } if ($get_detailed == true) { $join_cond = db_quote("?:images_links.detailed_id = ?:images.image_id"); $detailed_pairs = db_get_array("SELECT ?:images_links.*, ?:images.image_path, ?:common_descriptions.description AS alt, ?:images.image_x, ?:images.image_y, ?:images.image_id as images_image_id" . " FROM ?:images_links" . " LEFT JOIN ?:images ON {$join_cond}" . " LEFT JOIN ?:common_descriptions ON ?:common_descriptions.object_id = ?:images.image_id AND ?:common_descriptions.object_holder = 'images' AND ?:common_descriptions.lang_code = ?s" . " WHERE ?:images_links.object_type = ?s AND ?:images_links.type = ?s {$cond}" . " ORDER BY ?:images_links.position, ?:images_links.pair_id", $lang_code, $object_type, $pair_type); } foreach ((array) $object_ids as $object_id) { $pairs_data[$object_id] = array(); } // Convert the received data to the standard format in order to keep the backward compatibility foreach ($icon_pairs as $pair) { $_pair = array('pair_id' => $pair['pair_id'], 'image_id' => $pair['image_id'], 'detailed_id' => $pair['detailed_id'], 'position' => $pair['position']); if (!empty($pair['images_image_id'])) { //get icon data if exist $icon = fn_attach_absolute_image_paths($pair, $object_type); $_pair['icon'] = array('image_path' => $icon['image_path'], 'alt' => $icon['alt'], 'image_x' => $icon['image_x'], 'image_y' => $icon['image_y'], 'http_image_path' => $icon['http_image_path'], 'https_image_path' => $icon['https_image_path'], 'absolute_path' => $icon['absolute_path'], 'relative_path' => $icon['relative_path']); } $pairs_data[$pair['object_id']][$pair['pair_id']] = $_pair; } // -foreach icon_pairs foreach ($detailed_pairs as $pair) { $pair_id = $pair['pair_id']; $object_id = $pair['object_id']; if (!empty($pairs_data[$object_id][$pair_id]['detailed_id'])) { $detailed = fn_attach_absolute_image_paths($pair, 'detailed'); $pairs_data[$object_id][$pair_id]['detailed'] = array('image_path' => $detailed['image_path'], 'alt' => $detailed['alt'], 'image_x' => $detailed['image_x'], 'image_y' => $detailed['image_y'], 'http_image_path' => $detailed['http_image_path'], 'https_image_path' => $detailed['https_image_path'], 'absolute_path' => $detailed['absolute_path'], 'relative_path' => $detailed['relative_path']); } elseif (empty($pairs_data[$object_id][$pair_id]['pair_id'])) { $pairs_data[$object_id][$pair_id] = array('pair_id' => $pair['pair_id'], 'image_id' => $pair['image_id'], 'detailed_id' => $pair['detailed_id'], 'position' => $pair['position']); if (!empty($pair['images_image_id'])) { //get detailed data if exist $detailed = fn_attach_absolute_image_paths($pair, 'detailed'); $pairs_data[$object_id][$pair_id]['detailed'] = array('image_path' => $detailed['image_path'], 'alt' => $detailed['alt'], 'image_x' => $detailed['image_x'], 'image_y' => $detailed['image_y'], 'http_image_path' => $detailed['http_image_path'], 'https_image_path' => $detailed['https_image_path'], 'absolute_path' => $detailed['absolute_path'], 'relative_path' => $detailed['relative_path']); } } } // -foreach detailed_pairs } else { $pairs_data = db_get_hash_multi_array("SELECT pair_id, image_id, detailed_id, object_id FROM ?:images_links WHERE object_type = ?s AND type = ?s {$cond}", array('object_id', 'pair_id'), $object_type, $pair_type); } /** * Changes pair data informatin * * @param array/int $object_ids List of Object IDs or Object ID * @param string $object_type Type: product, category, banner, etc. * @param string $pair_type (M)ain or (A)dditional * @param bool $get_icon * @param bool $get_detailed * @param string $lang_code 2-letters code * @param array $pairs_data Pairs data */ fn_set_hook('get_image_pairs_post', $object_ids, $object_type, $pair_type, $get_icon, $get_detailed, $lang_code, $pairs_data); if (is_array($object_ids)) { return $pairs_data; } else { if ($pair_type == 'A') { return $pairs_data[$object_ids]; } else { return !empty($pairs_data[$object_ids]) ? reset($pairs_data[$object_ids]) : array(); } } }
/** * Creates database and imports dump there * @param string $db_name db name * @return boolean true on success, false - otherwise */ public static function createDb($db_name = '') { $snapshot_dir = Registry::get('config.dir.snapshots'); $dbdump_filename = empty($db_name) ? 'cmp_current.sql' : 'cmp_release.sql'; if (!fn_mkdir($snapshot_dir)) { fn_set_notification('E', __('error'), __('text_cannot_create_directory', array('[directory]' => fn_get_rel_dir($snapshot_dir)))); return false; } $dump_file = $snapshot_dir . $dbdump_filename; if (is_file($dump_file)) { if (!is_writable($dump_file)) { fn_set_notification('E', __('error'), __('dump_file_not_writable')); return false; } } $fd = @fopen($snapshot_dir . $dbdump_filename, 'w'); if (!$fd) { fn_set_notification('E', __('error'), __('dump_cant_create_file')); return false; } if (!empty($db_name)) { Database::changeDb($db_name); } // set export format db_query("SET @SQL_MODE = 'MYSQL323'"); fn_start_scroller(); $create_statements = array(); $insert_statements = array(); $status_data = db_get_array("SHOW TABLE STATUS"); $dbdump_tables = array(); foreach ($status_data as $k => $v) { $dbdump_tables[] = $v['Name']; } // get status data $t_status = db_get_hash_array("SHOW TABLE STATUS", 'Name'); foreach ($dbdump_tables as $k => $table) { fn_echo('<br />' . __('backupping_data') . ': <b>' . $table . '</b> '); $total_rows = db_get_field("SELECT COUNT(*) FROM {$table}"); $index = db_get_array("SHOW INDEX FROM {$table}"); $order_by = array(); foreach ($index as $kk => $vv) { if ($vv['Key_name'] == 'PRIMARY') { $order_by[] = '`' . $vv['Column_name'] . '`'; } } if (!empty($order_by)) { $order_by = 'ORDER BY ' . implode(',', $order_by); } else { $order_by = ''; } // Define iterator if (!empty($t_status[$table]) && $t_status[$table]['Avg_row_length'] < DB_MAX_ROW_SIZE) { $it = DB_ROWS_PER_PASS; } else { $it = 1; } for ($i = 0; $i < $total_rows; $i = $i + $it) { $table_data = db_get_array("SELECT * FROM {$table} {$order_by} LIMIT {$i}, {$it}"); foreach ($table_data as $_tdata) { $_tdata = fn_add_slashes($_tdata, true); $values = array(); foreach ($_tdata as $v) { $values[] = $v !== null ? "'{$v}'" : 'NULL'; } fwrite($fd, "INSERT INTO {$table} (`" . implode('`, `', array_keys($_tdata)) . "`) VALUES (" . implode(', ', $values) . ");\n"); } fn_echo(' .'); } } fn_stop_scroller(); if (!empty($db_name)) { Settings::instance()->reloadSections(); } if (fn_allowed_for('ULTIMATE')) { $companies = fn_get_short_companies(); asort($companies); $settings['company_root'] = Settings::instance()->getList(); foreach ($companies as $k => $v) { $settings['company_' . $k] = Settings::instance()->getList(0, 0, false, $k); } } else { $settings['company_root'] = Settings::instance()->getList(); } if (!empty($db_name)) { Database::changeDb(Registry::get('config.db_name')); } $settings = self::processSettings($settings, ''); $settings = self::formatSettings($settings['data']); ksort($settings); $data = print_r($settings, true); fwrite($fd, $data); fclose($fd); @chmod($snapshot_dir . $dbdump_filename, DEFAULT_FILE_PERMISSIONS); return true; }
function fn_product_configurator_clone_product($product_id, $pid) { $configuration = db_get_array("SELECT * FROM ?:conf_product_groups WHERE product_id = ?i", $product_id); if (empty($configuration)) { return false; } if (is_array($configuration)) { foreach ($configuration as $k => $v) { $v['product_id'] = $pid; db_query("INSERT INTO ?:conf_product_groups ?e", $v); } } return true; }
/** * Copy style * @param string $from style ID to copy from * @param string $to style ID to copy to * @return boolean true on success, false otherwise */ public function copy($from, $to) { $from = fn_basename($from); $to = fn_basename($to); $style_file_from = $this->getStyleFile($from); $style_file_to = $this->getStyleFile($to, 'less'); if (is_file($style_file_from)) { if (fn_copy($style_file_from, $style_file_to)) { $types = array('css'); foreach ($types as $type) { $style_file_from = $this->getStyleFile($from, $type); if (file_exists($style_file_from)) { fn_copy($style_file_from, $this->getStyleFile($to, $type)); } } fn_copy(Patterns::instance($this->params)->getPath($from), Patterns::instance($this->params)->getPath($to)); $content = fn_get_contents($style_file_to); $content = str_replace('/patterns/' . $from . '/', '/patterns/' . $to . '/', $content); fn_put_contents($style_file_to, $content); // Clone logos for new style $logos = db_get_array('SELECT * FROM ?:logos WHERE style_id = ?s AND company_id = ?i', $from, $this->company_id); foreach ($logos as $logo) { $object_id = fn_update_logo(array('type' => $logo['type'], 'layout_id' => $logo['layout_id'], 'style_id' => $to), $this->company_id); fn_clone_image_pairs($object_id, $logo['logo_id'], 'logos'); } return true; } } return false; }
} fn_set_notification('N', __('notice'), __('done')); } if ($mode == 'delete') { if (!empty($_REQUEST['backup_file'])) { fn_rm(Registry::get('config.dir.backups') . fn_basename($_REQUEST['backup_file'])); } } return array(CONTROLLER_STATUS_OK, 'datakeeper.manage'); } if ($mode == 'getfile' && !empty($_REQUEST['file'])) { fn_get_file(Registry::get('config.dir.backups') . fn_basename($_REQUEST['file'])); } elseif ($mode == 'manage') { $view = Tygh::$app['view']; // Calculate database size and fill tables array $status_data = db_get_array("SHOW TABLE STATUS"); $database_size = 0; $all_tables = array(); foreach ($status_data as $k => $v) { $database_size += $v['Data_length'] + $v['Index_length']; $all_tables[] = $v['Name']; } $view->assign('database_size', $database_size); $view->assign('all_tables', $all_tables); $files = fn_get_dir_contents(Registry::get('config.dir.backups'), false, true, array('.sql', '.tgz', '.zip'), '', true); sort($files, SORT_STRING); $backup_files = array(); $date_format = Registry::get('settings.Appearance.date_format') . ' ' . Registry::get('settings.Appearance.time_format'); if (is_array($files)) { $backup_dir = Registry::get('config.dir.backups'); foreach ($files as $file) {
function fn_get_cities($params = array(), $items_per_page = 0, $lang_code = CART_LANGUAGE) { // Set default values to input params $default_params = array('page' => 1, 'items_per_page' => $items_per_page); $params = array_merge($default_params, $params); $fields = array('c.city_id', 'c.country_code', 'c.state_code', 'c.city_code', 'c.status', 'cd.city'); $condition = ''; if (!empty($params['only_avail'])) { $condition .= db_quote(" AND c.status = ?s", 'A'); } if (!empty($params['q'])) { $condition .= db_quote(" AND cd.city LIKE ?l", '%' . $params['q'] . '%'); } if (!empty($params['state_code'])) { $condition .= db_quote(" AND c.state_code = ?s", $params['state_code']); } if (!empty($params['country_code'])) { $condition .= db_quote(" AND c.country_code = ?s", $params['country_code']); } $join = "LEFT JOIN ?:rus_city_descriptions as cd ON cd.city_id = c.city_id AND cd.lang_code = ?s "; $limit = ''; if (!empty($params['items_per_page'])) { $params['total_items'] = db_get_field("SELECT count(*) FROM ?:rus_cities as c {$join} WHERE 1 ?p", $lang_code, $condition); $limit = db_paginate($params['page'], $params['items_per_page']); } $cities = db_get_array("SELECT " . implode(', ', $fields) . " FROM ?:rus_cities as c {$join} WHERE 1 ?p ORDER BY cd.city {$limit}", $lang_code, $condition); foreach ($cities as &$city) { if (empty($city['city'])) { $city['city'] = db_get_field("SELECT city FROM ?:rus_city_descriptions WHERE city_id = ?i AND lang_code = 'ru'", $city['city_id']); } } return array($cities, $params); }