Покопался в include/functions2.php и вот написал такую функцию. Она не является полноценной обёрткой для popup_event и работает для вызова вычислений, которые привязаны к изменению поля. Есть некоторые моменты, о которых хочу предупредить. Эта функция при подготовке данных для запуска popup_event - записывает не настоящие данные в информацию об обновляемом поле. По идее, функция popup_event должна получить (помимо всего прочего) данные, которые были записаны в поле до редактирования и данные, которые оказались там после редактирования. Я не знаю, насколько это важно, чтобы при запуске вычисления была верная информация о старых и новых данных поля, но поскольку мне понадобилось запускать вычисление вообще без реального редактирования поля - я просто указал в качестве старых данных - пустую строку. Новые данные можно указать любые, передав их в качестве аргумента. Опять-таки не знаю, на сколько это важно - передавать верные новые данные. Функция не обновляет значение поля, только запускает вычисление, и эта информация, возможно, нужна для каких-то внутренних нужд popup_event - может сохранение в лог какой-нибудь. Есть ещё один момент, на который, наверно, следует обратить внимание: я вижу, что в той копии "Клиентской базы", с которой я работаю, внутренние названия полей выглядят как fXXX, где XXX - числовой id поля. Т.е. внутреннее название поля - это префикс в виде буквы f, после которого идёт число - идентификатор поля. Не исключаю, что в какой-то другой конфигурации, вместо буквы f префиксом может быть какая-то другая строка текста.
Получилась вот такая функция:
function run_update_event($table_id, $line_id, $field_id, $new_data) {
$table = get_table($table_id);
$table_fields = get_table_fields($table);
$event = array(
'type' => 'update_query',
'table_id' => $table_id,
'line_id' => $line_id,
'changed' => array(
$field_id => array(
'field_id' => $field_id,
'int_name' => 'f' . $field_id,
'old' => '',
'new' => $new_data
)
)
);
$sqlQuery = "SELECT * FROM `" . DATA_TABLE . $table_id . "` WHERE `id` = {$line_id}";
$res = sql_query($sqlQuery);
if($res and mysql_num_rows($res)) {
$line = mysql_fetch_array($res);
popup_event($table, $line, $event);
}
}
Аргументы функции:
$table_id - это числовой id таблицы, с которой связано вычисление, которое нужно запустить. Это число можно узнать, например, открыв в браузере эту таблицу и посмотрев в строку адреса текущей страницы.
$line_id - это id той строки в таблице, для которой нужно запустить вычисление. Т.е. как будто строка с этим id была отредактирована.
$field_id - это числовой id столбца, для которого нужно запустить вычисление. Т.е. как будто поле с этим id (в строке $line_id таблицы $table_id) было отредактировано. Это id можно узнать, открыв в браузере нужную таблицу и щёлкнув на сортировку таблицы по интересуещему нас полю, после чего этот id также буден виден в адресной строке браузера (это значение переменной sort_by). Здесь нужно указать id того поля, к изменению которого привязан запуск вычисления.
$new_data - это новые данные, которые записаны в поле после его редактирования. Поскольку эта функция может быть полезна скорее в ситуации, когда данные в поле реально не менялись, но нужно запустить вычисление, как будто они поменялись - то в качестве $new_data я указываю текущее значение поля.
Вот подумал, что кому-то ещё может когда-нибудь пригодится такая функция и решил опубликовать свой вариант.