public function index($id = 0, $params = array()) { if (!empty($id)) { $data = fn_get_order_info($id, false, false); if (empty($data)) { $status = Response::STATUS_NOT_FOUND; } else { $status = Response::STATUS_OK; } } else { $items_per_page = $this->safeGet($params, 'items_per_page', Registry::get('settings.Appearance.admin_orders_per_page')); list($data, $params) = fn_get_orders($params, $items_per_page); $data = array('orders' => $data, 'params' => $params); $status = Response::STATUS_OK; } return array('status' => $status, 'data' => $data); }
/** * Return order/orders info after the order placing * @param int $order_id * @param array $response */ public static function returnPlacedOrders($order_id, &$response, $items_per_page, $lang_code) { $order = self::getOrderInfo($order_id); $_error = false; $status = db_get_field('SELECT status FROM ?:orders WHERE order_id=?i', $order_id); if ($status == STATUS_PARENT_ORDER) { $child_orders = db_get_hash_single_array("SELECT order_id, status FROM ?:orders WHERE parent_order_id = ?i", array('order_id', 'status'), $order_id); $status = reset($child_orders); $order['child_orders'] = array_keys($child_orders); } if (!in_array($status, fn_get_order_paid_statuses())) { $_error = true; if ($status != 'B') { if (!empty($child_orders)) { array_unshift($child_orders, $order_id); } else { $child_orders = array(); $child_orders[] = $order_id; } $order_id_field = $status == 'N' ? 'processed_order_id' : 'failed_order_id'; $_SESSION['cart'][$order_id_field] = $child_orders; $cart =& $_SESSION['cart']; if (!empty($cart['failed_order_id'])) { $_ids = !empty($cart['failed_order_id']) ? $cart['failed_order_id'] : $cart['processed_order_id']; $_order_id = reset($_ids); $_payment_info = db_get_field("SELECT data\n FROM ?:order_data\n WHERE order_id = ?i AND type = 'P'", $_order_id); if (!empty($_payment_info)) { $_payment_info = unserialize(fn_decrypt_text($_payment_info)); } $_msg = !empty($_payment_info['reason_text']) ? $_payment_info['reason_text'] : ''; $_msg .= empty($_msg) ? __('text_order_placed_error') : ''; $response->addError('ERROR_FAIL_POST_ORDER', $_msg); $cart['processed_order_id'] = $cart['failed_order_id']; unset($cart['failed_order_id']); } elseif (!fn_twg_set_internal_errors($response, 'ERROR_FAIL_POST_ORDER')) { $response->addError('ERROR_FAIL_POST_ORDER', __('fail_post_order', $lang_code)); } } else { if (!fn_twg_set_internal_errors($response, 'ERROR_ORDER_BACKORDERED')) { $response->addError('ERROR_ORDER_BACKORDERED', __('text_order_backordered', $lang_code)); } } $response->returnResponse(); } $auth =& $_SESSION['auth']; $user = fn_get_user_info($auth['user_id']); $profile_points = !empty($user['points']) ? $user['points'] : 0; if (empty($order['child_orders'])) { $response->setData(array('order' => $order, 'profile_points' => $profile_points)); } else { $params = array(); if (empty($auth['user_id'])) { $params['order_id'] = $auth['order_ids']; } else { $params['user_id'] = $auth['user_id']; } list($orders, , $totals) = fn_get_orders($params, $items_per_page, true); $response->setMeta(!empty($totals['gross_total']) ? $totals['gross_total'] : 0, 'gross_total'); $response->setMeta(!empty($totals['totally_paid']) ? $totals['totally_paid'] : 0, 'totally_paid'); $response->setMeta($order, 'order'); $response->setResponseList(TwigmoOrder::getOrdersAsApiList($orders, $lang_code)); $response->setData($profile_points, 'profile_points'); $pagination_params = array('items_per_page' => !empty($items_per_page) ? $items_per_page : TWG_RESPONSE_ITEMS_LIMIT, 'page' => !empty($_REQUEST['page']) ? $_REQUEST['page'] : 1); fn_twg_set_response_pagination($response, $pagination_params); } }
} } /* Pages */ if (fn_check_view_permissions('pages.manage', 'GET')) { $general_stats['pages'] = array(); list($fields, $join, $condition) = fn_get_pages(array('get_conditions' => true)); $general_stats['pages']['total_pages'] = db_get_field('SELECT COUNT(*) FROM ?:pages ' . $join . ' WHERE ' . $condition); } /* Order */ $orders_stat = array(); if (fn_check_view_permissions('orders.manage', 'GET') || fn_check_view_permissions('sales_reports.view', 'GET') || fn_check_view_permissions('taxes.manage', 'GET')) { $params = array('period' => 'C', 'time_from' => $time_from, 'time_to' => $time_to); list($orders_stat['orders'], $search_params, $orders_stat['orders_total']) = fn_get_orders($params, 0, true); $time_difference = $time_to - $time_from; $params = array('period' => 'C', 'time_from' => $time_from - $time_difference, 'time_to' => $time_to - $time_difference); list($orders_stat['prev_orders'], $search_params, $orders_stat['prev_orders_total']) = fn_get_orders($params, 0, true); $orders_stat['diff']['orders_count'] = count($orders_stat['orders']) - count($orders_stat['prev_orders']); $orders_stat['diff']['sales'] = fn_calculate_differences($orders_stat['orders_total']['totally_paid'], $orders_stat['prev_orders_total']['totally_paid']); } /* Abandoned carts */ $company_condition = ''; if (fn_allowed_for('ULTIMATE')) { $company_condition = fn_get_company_condition('?:user_session_products.company_id'); } if (fn_check_view_permissions('cart.cart_list', 'GET')) { $orders_stat['abandoned_cart_total'] = array_sum(db_get_fields('SELECT COUNT(*) FROM ?:user_session_products WHERE `timestamp` BETWEEN ?i AND ?i ?p GROUP BY user_id', $time_from, $time_to, $company_condition)); $orders_stat['prev_abandoned_cart_total'] = array_sum(db_get_fields('SELECT COUNT(*) FROM ?:user_session_products WHERE `timestamp` BETWEEN ?i AND ?i ?p GROUP BY user_id', $time_from - $time_difference, $time_to - $time_difference, $company_condition)); $orders_stat['diff']['abandoned_carts'] = fn_calculate_differences($orders_stat['abandoned_cart_total'], $orders_stat['prev_abandoned_cart_total']); } // Calculate orders taxes. if (fn_check_view_permissions('taxes.manage', 'GET')) {
$order_amount = empty($totals['order_amount']) ? 0 : $totals['order_amount']; $period_total_paid = empty($totals['total_paid']) ? 0 : $totals['total_paid']; $total_change = empty($prev_totals['total_paid']) ? 0 : $prev_totals['total_paid']; $order_amount_change = empty($prev_totals['order_amount']) ? 0 : $prev_totals['order_amount']; $total_paid_change = empty($prev_totals['total_paid']) ? 0 : $prev_totals['total_paid']; $item_amount_change = $prev_item_amount; $stat = array('title' => $title, 'time_from' => $time_from, 'total_paid' => $period_total_paid, 'total_paid_change' => $total_paid_change, 'total' => $period_total, 'total_change' => $total_change, 'order_amount' => $order_amount, 'order_amount_change' => $order_amount_change, 'item_amount' => $item_amount); if (!empty($status_orders)) { $stat['status_stats'] = array('status_stat' => $status_orders); } $period_stats[] = $stat; } $response->setData(array('period' => $period_stats), 'periods'); // Get latest orders $search_params = array('sort_by' => 'date', 'sort_order' => 'desc'); list($orders) = fn_get_orders($search_params, $items_per_page, true); $orders = TwigmoOrder::getOrdersAsApiList($orders, $lang_code); $response->setData($orders, 'latest_orders'); $response->returnResponse('orders_statistics'); } else { if (!empty($search) && !empty($search['sort_by'])) { $sortings = array('sort_by' => $search['sort_by'], 'sort_order' => !empty($search['sort_order']) && $search['sort_order'] == 'desc' ? 'desc' : 'asc'); } $response->setResponseList(Api::getApiSchemaData($object, $condition, array(), $options, $sortings)); } $pagination_params = array('items_per_page' => !empty($items_per_page) ? $items_per_page : TWG_RESPONSE_ITEMS_LIMIT, 'page' => !empty($_REQUEST['page']) ? $_REQUEST['page'] : 1, 'total_items' => !empty($total_items) ? $total_items : 0); if ($is_paginate) { fn_twg_set_response_pagination($response, $pagination_params); } $response->returnResponse($object); }
$_REQUEST['subcats'] = 'Y'; } fn_twg_set_response_catalog($response, $_REQUEST, $items_per_page, $lang_code); } elseif ($meta['object'] == 'orders') { $_auth =& $_SESSION['auth']; $params = $_REQUEST; if (!empty($_auth['user_id'])) { $params['user_id'] = $_auth['user_id']; } elseif (!empty($_auth['order_ids'])) { $params['order_id'] = $_auth['order_ids']; } else { $response->addError('ERROR_ACCESS_DENIED', __('access_denied')); $response->returnResponse(); } $params['page'] = !empty($params['page']) ? $params['page'] : 1; list($orders, $params, $totals) = fn_get_orders($params, $items_per_page, true); $response->setMeta(!empty($totals['gross_total']) ? $totals['gross_total'] : 0, 'gross_total'); $response->setMeta(!empty($totals['totally_paid']) ? $totals['totally_paid'] : 0, 'totally_paid'); $response->setResponseList(TwigmoOrder::getOrdersAsApiList($orders, $lang_code)); $pagination_params = array('total_items' => $params['total_items'], 'items_per_page' => !empty($items_per_page) ? $items_per_page : TWG_RESPONSE_ITEMS_LIMIT, 'page' => !empty($params['page']) ? $params['page'] : 1); fn_twg_set_response_pagination($response, $pagination_params); } elseif ($meta['object'] == 'placed_order') { TwigmoOrder::checkIfOrderAllowed($_REQUEST['order_id'], $_SESSION['auth'], $response); TwigmoOrder::returnPlacedOrders($_REQUEST['order_id'], $response, $items_per_page, $lang_code); } elseif ($meta['object'] == 'homepage') { fn_twg_set_response_homepage($response); } elseif ($meta['object'] == 'payment_methods') { $cart =& $_SESSION['cart']; $auth =& $_SESSION['auth']; // Update shipping info if (!empty($_REQUEST['shipping_ids'])) {
function fn_exim_1c_export_orders($company_id, $lang_code) { $cml = fn_get_cml_tag_names(); $params = array('company_name' => true, 'place' => 'exim_1c', 'company_id' => $company_id); $statuses = Registry::get('addons.rus_exim_1c.exim_1c_order_statuses'); if (!empty($statuses)) { foreach ($statuses as $key => $status) { if (!empty($status)) { $params['status'][] = $key; } } } list($orders, $search) = fn_get_orders($params); header("Content-type: text/xml; charset=utf-8"); fn_echo(""); $xml = new XMLWriter(); $xml->openMemory(); $xml->startDocument(); $xml->startElement($cml['commerce_information']); foreach ($orders as $k => $data) { $order_data = fn_get_order_info($data['order_id']); $xml = fn_exim_1c_echo_order_xml($xml, $order_data, $lang_code); } $xml->endElement(); fn_echo($xml->outputMemory()); }
// } elseif ($mode == 'search') { $params = $_REQUEST; if (!empty($auth['user_id'])) { $params['user_id'] = $auth['user_id']; } elseif (!empty($auth['order_ids'])) { if (empty($params['order_id'])) { $params['order_id'] = $auth['order_ids']; } else { $ord_ids = is_array($params['order_id']) ? $params['order_id'] : explode(',', $params['order_id']); $params['order_id'] = array_intersect($ord_ids, $auth['order_ids']); } } else { return array(CONTROLLER_STATUS_REDIRECT, 'auth.login_form?return_url=' . urlencode(Registry::get('config.current_url'))); } list($orders, $search) = fn_get_orders($params, Registry::get('settings.Appearance.orders_per_page')); Registry::get('view')->assign('orders', $orders); Registry::get('view')->assign('search', $search); // // Reorder order // } elseif ($mode == 'reorder') { fn_reorder($_REQUEST['order_id'], $_SESSION['cart'], $auth); return array(CONTROLLER_STATUS_REDIRECT, 'checkout.cart'); } elseif ($mode == 'downloads') { if (empty($auth['user_id']) && empty($auth['order_ids'])) { return array(CONTROLLER_STATUS_REDIRECT, fn_url()); } fn_add_breadcrumb(__('downloads')); $params = $_REQUEST; $params['user_id'] = $auth['user_id'];
function fn_twg_get_latest_orders($lang_code) { list($orders, $search) = fn_get_orders(array('sort_by' => 'date', 'sort_order' => 'desc'), 7); $orders = TwigmoOrder::getOrdersAsApiList($orders, $lang_code); return array('orders' => $orders, 'total' => $search['total_items']); }
} } elseif ($mode == 'picker') { $_REQUEST['skip_view'] = 'Y'; list($orders, $search) = fn_get_orders($_REQUEST, Registry::get('settings.Appearance.admin_orders_per_page')); Registry::get('view')->assign('orders', $orders); Registry::get('view')->assign('search', $search); Registry::get('view')->display('pickers/orders/picker_contents.tpl'); exit; } elseif ($mode == 'manage') { if (!empty($params['status']) && $params['status'] == STATUS_INCOMPLETED_ORDER) { $params['include_incompleted'] = true; } if (fn_allowed_for('MULTIVENDOR')) { $params['company_name'] = true; } list($orders, $search, $totals) = fn_get_orders($params, Registry::get('settings.Appearance.admin_orders_per_page'), true); if (!empty($params['include_incompleted']) || !empty($search['include_incompleted'])) { Registry::get('view')->assign('incompleted_view', true); } if (!empty($_REQUEST['redirect_if_one']) && count($orders) == 1) { return array(CONTROLLER_STATUS_REDIRECT, 'orders.details?order_id=' . $orders[0]['order_id']); } $shippings = fn_get_shippings(true, CART_LANGUAGE); if (Registry::get('runtime.company_id')) { $company_shippings = fn_get_companies_shipping_ids(Registry::get('runtime.company_id')); if (fn_allowed_for('ULTIMATE')) { $company_shippings = db_get_fields('SELECT shipping_id FROM ?:shippings'); } foreach ($shippings as $shipping_id => $shipping) { if (!in_array($shipping_id, $company_shippings)) { unset($shippings[$shipping_id]);
public static function exportDataOrders($lang_code) { $params = array('company_id' => self::$company_id, 'company_name' => true, 'place' => 'exim_1c'); $statuses = self::$s_commerceml['exim_1c_order_statuses']; if (!empty($statuses)) { foreach ($statuses as $key => $status) { if (!empty($status)) { $params['status'][] = $key; } } } list($orders, $search) = fn_get_orders($params); header("Content-type: text/xml; charset=utf-8"); fn_echo(""); $xml = new \XMLWriter(); $xml->openMemory(); $xml->startDocument(); $xml->startElement(self::$cml['commerce_information']); foreach ($orders as $k => $data) { $order_data = fn_get_order_info($data['order_id']); $xml = self::dataOrderToFile($xml, $order_data, $lang_code); } $xml->endElement(); fn_echo($xml->outputMemory()); }
/** * Creates condition for order search * * @param array $params List of search parameters * @param string $lang_code 2-letter language code * @return array Prepared data */ function fn_create_orders_condition($params, $lang_code = CART_LANGUAGE) { /** * Modify search parameters defined in fn_search_register_object * * @param array $params List of search parameters * @param string $lang_code 2-letter language code */ fn_set_hook('create_orders_condition_pre', $params, $lang_code); $params['get_conditions'] = true; if (!empty($params['q'])) { $params['order_id'] = $params['q']; $params['email'] = $params['q']; $params['cname'] = $params['q']; } list($fields, $join, $condition) = fn_get_orders($params, 0, $lang_code); $data = array('fields' => $fields, 'join' => $join, 'condition' => '1 ' . $condition, 'table' => '?:orders', 'key' => 'order_id', 'sort' => '?:orders.order_id', 'sort_table' => 'order_id'); /** * Modify prepared data * * @param array $params List of search parameters * @param string $lang_code 2-letter language code * @param array $data Result search scheme */ fn_set_hook('create_orders_condition_post', $params, $lang_code, $data); return $data; }
function smarty_template_function_get_orders($_smarty_tpl, $params) { $saved_tpl_vars = $_smarty_tpl->tpl_vars; foreach ($_smarty_tpl->smarty->template_functions['get_orders']['parameter'] as $key => $value) { $_smarty_tpl->tpl_vars[$key] = new Smarty_variable($value); } foreach ($params as $key => $value) { $_smarty_tpl->tpl_vars[$key] = new Smarty_variable($value); } ?> <?php $_smarty_tpl->tpl_vars['params'] = new Smarty_variable(array('status' => $_smarty_tpl->tpl_vars['status']->value, 'time_from' => $_smarty_tpl->tpl_vars['time_from']->value, 'time_to' => $_smarty_tpl->tpl_vars['time_to']->value, 'period' => 'C'), null, 0); ?> <?php $_smarty_tpl->tpl_vars['orders'] = new Smarty_variable(fn_get_orders($_smarty_tpl->tpl_vars['params']->value, $_smarty_tpl->tpl_vars['limit']->value), null, 0); ?> <table class="table table-middle table-last-td-align-right"> <tbody> <?php $_smarty_tpl->tpl_vars["order"] = new Smarty_Variable(); $_smarty_tpl->tpl_vars["order"]->_loop = false; $_from = $_smarty_tpl->tpl_vars['orders']->value[0]; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); } foreach ($_from as $_smarty_tpl->tpl_vars["order"]->key => $_smarty_tpl->tpl_vars["order"]->value) { $_smarty_tpl->tpl_vars["order"]->_loop = true; ?> <tr> <td> <span class="label btn-info o-status-<?php echo htmlspecialchars(mb_strtolower($_smarty_tpl->tpl_vars['order']->value['status'], 'UTF-8'), ENT_QUOTES, 'UTF-8'); ?> "><?php echo htmlspecialchars($_smarty_tpl->tpl_vars['order_statuses']->value[$_smarty_tpl->tpl_vars['order']->value['status']]['description'], ENT_QUOTES, 'UTF-8'); ?> </span> </td> <td><a href="<?php echo htmlspecialchars(fn_url("orders.details?order_id=" . (string) $_smarty_tpl->tpl_vars['order']->value['order_id']), ENT_QUOTES, 'UTF-8'); ?> "><?php echo $_smarty_tpl->__("order"); ?> #<?php echo htmlspecialchars($_smarty_tpl->tpl_vars['order']->value['order_id'], ENT_QUOTES, 'UTF-8'); ?> </a> <?php echo $_smarty_tpl->__("by"); ?> <?php if ($_smarty_tpl->tpl_vars['order']->value['user_id']) { ?> <a href="<?php echo htmlspecialchars(fn_url("profiles.update?user_id=" . (string) $_smarty_tpl->tpl_vars['order']->value['user_id']), ENT_QUOTES, 'UTF-8'); ?> "><?php } echo htmlspecialchars($_smarty_tpl->tpl_vars['order']->value['lastname'], ENT_QUOTES, 'UTF-8'); ?> <?php echo htmlspecialchars($_smarty_tpl->tpl_vars['order']->value['firstname'], ENT_QUOTES, 'UTF-8'); if ($_smarty_tpl->tpl_vars['order']->value['user_id']) { ?> </a><?php } ?> </td> <td><span class="date"><?php echo htmlspecialchars(smarty_modifier_date_format($_smarty_tpl->tpl_vars['order']->value['timestamp'], (string) $_smarty_tpl->tpl_vars['settings']->value['Appearance']['date_format'] . ", " . (string) $_smarty_tpl->tpl_vars['settings']->value['Appearance']['time_format']), ENT_QUOTES, 'UTF-8'); ?> </span></td> <td><h4><?php echo $_smarty_tpl->getSubTemplate("common/price.tpl", $_smarty_tpl->cache_id, $_smarty_tpl->compile_id, 0, null, array('value' => $_smarty_tpl->tpl_vars['order']->value['total']), 0); ?> </h4></td> </tr> <?php } if (!$_smarty_tpl->tpl_vars["order"]->_loop) { ?> <tr><td><?php echo $_smarty_tpl->__("no_data"); ?> </td></tr> <?php } ?> </tbody> </table> <?php $_smarty_tpl->tpl_vars = $saved_tpl_vars; foreach (Smarty::$global_tpl_vars as $key => $value) { if (!isset($_smarty_tpl->tpl_vars[$key])) { $_smarty_tpl->tpl_vars[$key] = $value; } } }
<?php use Tygh\Registry; use Tygh\Rees46\Config; use Tygh\Http; if (!defined('BOOTSTRAP')) { die('Access denied'); } if ($mode == 'export_orders') { $shop_id = Config::getShopID(); $shop_secret = Config::getShopSecret(); if ($shop_id == '' || $shop_secret == '') { fn_set_notification('E', __('error'), __('rees46_error_export_order'), 'I'); } else { $params = array('timestamp > ' . strtotime('-6 months'), 'items_per_page' => 500); $orders = fn_get_orders($params); $processed_orders = array(); foreach (reset($orders) as $order) { $order_info = fn_get_order_info($order['order_id']); $items_formatted_info = array(); foreach ($order_info['products'] as $product) { $product_formatted = array('id' => $product['product_id'], 'price' => $product['price'], 'amount' => $product['amount']); array_push($items_formatted_info, $product_formatted); } $order_formatted_info = array('id' => $order_info['order_id'], 'user_id' => $order_info['user_id'], 'user_email' => $order_info['email'], 'date' => $order_info['timestamp'], 'items' => $items_formatted_info); array_push($processed_orders, $order_formatted_info); } $result = array('shop_id' => $shop_id, 'shop_secret' => $shop_secret, 'orders' => $processed_orders); $respond = Http::post('http://api.rees46.com/import/orders.json', json_encode($result), array('headers' => array('Content-Type: application/json'))); if (strtoupper($respond) == 'OK') { fn_set_notification('N', __('rees46_export_success'), '', 'I');