Нашел крутой баг:
В админке во вкладке
Управление заказами, если выделить все заказы и нажать
Удалить отмеченные, то выпадет ошибка запроса MySQL на тему того, что выполнить запрос "DELETE FROM `shop_order` WHERE `numorder` = on" в принципе не возможно, ибо "on" - это строка, а ожидается число.
Проблема находится в файле [tt]/assets/snippets/shop/include/delete_clear.inc.php[/tt] в районе строки #42
foreach($_GET as $val){
if ($val<>"check_del") {
if ($modx->db->query( "
DELETE FROM `".$shop_order."` WHERE `numorder` = ".$val.";
")) {$output_sales_notice.=$shop_lang['sale_check_del_ok'];} else {$output_sales_error.=$shop_lang['sale_check_del_error'];};
if ($modx->db->query( "
DELETE FROM `".$shop_order_detail."` WHERE `numorder` = ".$val.";
")) {$output_sales_notice.=$shop_lang['sale_check_del_ok'];} else {$output_sales_error.=$shop_lang['sale_check_del_error'];};
}
}
Должно работать типа так: вычленяем все элементы массива $_GET где ключи вида check# (где # - id заказа). Как видно из кода, этот алгоритм не работает. Вместо этого он берет все елементы $_GET (кроме, блин, check_del, которого впринципе нет
и втыкает их в запрос к базе. Идиотизм короче.
Исправленный рабочий кусок выглядит так:
foreach($_GET as $key => $val){
if ($key<>"checked" && substr($key, 0, 5) == 'check') {
if ($modx->db->query( "
DELETE FROM `".$shop_order."` WHERE `numorder` = ".$val.";
")) {$output_sales_notice.=$shop_lang['sale_check_del_ok'];} else {$output_sales_error.=$shop_lang['sale_check_del_error'];};
if ($modx->db->query( "
DELETE FROM `".$shop_order_detail."` WHERE `numorder` = ".$val.";
")) {$output_sales_notice.=$shop_lang['sale_check_del_ok'];} else {$output_sales_error.=$shop_lang['sale_check_del_error'];};
}
}
PS.: В аттаче исправленный файл.