Незавершенные покупки при отсутствии сессии


#1

Если создавать заказы через fn_place_order из своего модуля, работающего в кроне через php cli - у такого запуска нет сессии, и в результате вызываемая из fn_place_order
fn_user_session_products_condition

       if (!empty($order_id)) {

            if (empty($parent_order_id)) {
                // Update stored cart
                $condition = fn_user_session_products_condition();
                db_query('UPDATE ?:user_session_products SET order_id = ?i WHERE ' . $condition, $order_id);
            }

пишет в таблицу user_session_products для всех записей с типом С номер только что созданного заказа. Еще раз повторюсь это происходит именно потому, что у скрипта запускаемого через cli нет сессии и условие condition остается только именно по типу

function fn_user_session_products_condition($params = array())
{
    $params = array_merge(array(
        'user_id' => null,
        'session_id' => Tygh::$app['session']->getID(),
        'type' => 'C',
        'user_type' => '',
        'get_session_user_id' => true,
    ), $params);


#2

если в скрипте перед созданием заказа ставлю
Tygh::$app[‘session’]->start();
то заказ не создается
что-то я упускаю…


#3

пока решил в лоб закомментировав условие в fn,cart.php функция fn_user_session_products_condition

//    if (!empty($params['session_id'])) {
        $conditions['session_id'] = db_quote("session_id = ?s", $params['session_id']);
//    }


#4

Решено.
перед созданием заказа определяю константу
fn_define(‘ORDER_MARKETPLACE’, 1);
регистрирую хук
user_session_products_condition
и в нем

    if(defined('ORDER_MARKETPLACE')) {
    $conditions['session_id'] = db_quote("session_id = ?s", $params['session_id']);
    }

#5

Если session_id пуст, подставлять будет нечего, возможны нотайсы? Добавьте 1=0 и будет пустая выборка


#6

Нет, нотисов нет. Однако да, такая проверка

по идее должна работать чуточку быстрее