Баг сортировки числовых значений
Баг заключается в не корректном сравнении двух числовых значений в функциях сортировки файла /usr/system/common_extfunctions.inc.php. Т.е., например, мы сортируем по ID, у нас есть в хранилище записи с ID: 1,2,3,4,5,6,7,8,9,10,11. После выполнения сортировки _ORDER(INDEX, ID, ASC)_ в приложении get_infochannel(или любом другом аналогичном) результат будет следующим: 1,10,11,2,3,4,5,6,7,8,9.
Привожу пример того, что было и то, на что я это поменял, объяснять не буду, кто разбирается - тот сам все легко поймет:
// То, что было
if(!defined("cmp_indexasc")) {
function cmp_indexasc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexasc", 1);
}
if(!defined("cmp_indexdesc")) {
function cmp_indexdesc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexdesc", 1);
}
// То, на что надо заменитьТак же я предлагаю скачать уже исправленный файл, если вдруг кому-то лень переделывать самому ;)
if(!defined("cmp_indexasc")) {
function cmp_indexasc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
if(is_numeric($a[$index]))
return ($a[$index] > $b[$index]) ? -1 : 1;
else
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexasc", 1);
}
if(!defined("cmp_indexdesc")) {
function cmp_indexdesc($a, $b) {
global $sapi_obj;
$index = $sapi_obj->env["index"];
if(is_numeric($a[$index]))
return ($a[$index] > $b[$index]) ? 1 : -1;
else
return strcmp($a[$index], $b[$index]);
}
define("cmp_indexdesc", 1);
}
Скачать: common_extfunctions.inc.zip
Для версии: Sapid 1.2.3 RC3

