История изменений не отслеживает items::update_by_id

Все вопросы/проблемы по установке и использовании.
Ответить
soadap
Сообщения: 7
Зарегистрирован: 11 янв 2025, 00:24
Имя: Andrew
Откуда: Chicago

История изменений не отслеживает items::update_by_id

Сообщение soadap »

Здравствуйте.
Столкнулся с проблемой, есть несколько кастомных форм/плагинов, которые работают с базой через items::update_by_id($entity_id,$item_id,$data); , но в таком случае изменения не попадают в отчёт "Истории изменений". До этого форма работала через API, изменения попадали в отчёт, но решил переписать форму на более нативный PHP и столкнулся с такой проблемой.
Собственно вопрос, есть ли возможность обновлять значения через php функцию чтобы они трекались в "Истории изменений"?
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1077
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: История изменений не отслеживает items::update_by_id

Сообщение Fait »

Да, есть такое.
По смыслу то должно обновляться, конечно.
Но этого не происходит.
Как вариант, можно добавить код, который будет напрямую в базу записывать в историю изменений все изменения
Аватара пользователя
Antonyous99
Сообщения: 703
Зарегистрирован: 18 авг 2019, 09:22
Имя: Антон Владимирович
Откуда: Санкт-Петербург
Организация: ООО "РИКОМ-Сервис"
Контактная информация:

Re: История изменений не отслеживает items::update_by_id

Сообщение Antonyous99 »

А помоему это перебор каждый инсерт и апдейт в историю писать.
Хотя есть же к функции items::update_by_id опцинальный параметр

Код: Выделить всё

['run_email_rules'=>false,'run_process'=>false]
что снижает нагрузку на сервер.
Можно было бы тут про запись в исторю добавить.
ПУЛЬТ УПРАВЛЕНИЯ БИЗНЕСОМ
ERP/CRM "под ключ"
soadap
Сообщения: 7
Зарегистрирован: 11 янв 2025, 00:24
Имя: Andrew
Откуда: Chicago

Re: История изменений не отслеживает items::update_by_id

Сообщение soadap »

Fait писал(а): 11 янв 2025, 11:47 Да, есть такое.
По смыслу то должно обновляться, конечно.
Но этого не происходит.
Как вариант, можно добавить код, который будет напрямую в базу записывать в историю изменений все изменения
А не подскажете код? Я вчера игрался с подсмотренным в модуле API и других модулях кодом типа:

Код: Выделить всё

if(isset($_POST['update_fix_price'])) {
    $entity_id = 40;
    $item_id = $_POST['id'];
    
    // Get current item info before update for track changes
    $item_info_query = db_query("select * from app_entity_" . $entity_id . " where id='" . $item_id . "'");
    $item_info = db_fetch_array($item_info_query);
    
    $data = [
        'field_578' => $_POST['price'],
        'field_783' => time()
    ];
    
    // Perform the update
    items::update_by_id($entity_id, $item_id, $data);
    
    // Log changes
    $log = new track_changes($entity_id, $item_id);
    $log->log_update($item_info);
    
    exit;
}
Но оно не отрабатывало, т.е. изменения переменной вносились, но в историю изменений не попадало.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1077
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: История изменений не отслеживает items::update_by_id

Сообщение Fait »

Да не, вы напрямую в БД запрос посылайте.
Типа

Код: Выделить всё

db_query('insert into app_track_changes (поля из бд) values (значения полей)');
И так же записать изменённые поля в другую таблицу, в которой поля указаны (не помню, как называется).
Так-то интересно, я наверное скоро тоже поиграюсь с этим функционалом)
soadap
Сообщения: 7
Зарегистрирован: 11 янв 2025, 00:24
Имя: Andrew
Откуда: Chicago

Re: История изменений не отслеживает items::update_by_id

Сообщение soadap »

В общем работает вот так (там захардкожен report_id = 1, ну и обновляемые поля):

Код: Выделить всё

if(isset($_POST['update_fix_price'])) {
    global $app_user;
    
    $entity_id = 40;
    $item_id = $_POST['id'];
        
    // Get current item info before update
    $item_info_query = db_query("select e.* from app_entity_" . $entity_id . " e where e.id='" . $item_id . "'");
    $item_info = db_fetch_array($item_info_query);
    
    // Do the update
    db_perform('app_entity_' . $entity_id, array(
        'field_578' => $_POST['price'],
        'field_783' => time(),
        'date_updated' => time()
    ), 'update', "id='" . db_input($item_id) . "'");
        
    // Log change and field
    db_perform('app_ext_track_changes_log', array(
        'reports_id' => 1,
        'type' => 'update',
        'entities_id' => $entity_id,
        'items_id' => $item_id,
        'date_added' => time(),
        'created_by' => $app_user['id']
    ));
    
    db_perform('app_ext_track_changes_log_fields', array(
        'log_id' => db_insert_id(),
        'fields_id' => 578,
        'value' => $_POST['price'],
        'previous_value' => $item_info['field_578']
    ));
    
    exit;
}
Хотя только что увидел что оно нормально не трекает юзера, вместо имени пишет "Public Form" и в базе значение created_by = 0, так что ещё нужно подправить.
soadap
Сообщения: 7
Зарегистрирован: 11 янв 2025, 00:24
Имя: Andrew
Откуда: Chicago

Re: История изменений не отслеживает items::update_by_id

Сообщение soadap »

В общем понял, в Custom PHP (я туда эту функцию запихнул, чтобы использовать sitewide) переменная $app_user не работает, потому нужно либо вызывать эту функцию из плагина, либо передавать переменную юзера из формы.

////

Перенёс фукнцию в плагин вместо кастоминого php, переменнар $app_user работает нормально, история изменения заносится корректно.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1077
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: История изменений не отслеживает items::update_by_id

Сообщение Fait »

Главное, чтобы работало)
Хотя, код можно и попроще сделать, без db_perform и пр.
soadap
Сообщения: 7
Зарегистрирован: 11 янв 2025, 00:24
Имя: Andrew
Откуда: Chicago

Re: История изменений не отслеживает items::update_by_id

Сообщение soadap »

Fait писал(а): 13 янв 2025, 08:31 Главное, чтобы работало)
Хотя, код можно и попроще сделать, без db_perform и пр.
Код Claude писал, я JS'сник и PHP вообще не знаю, но как вы сказали главное чтобы работало.))
Ответить