diff --git a/main/inc/lib/tablesort.lib.php b/main/inc/lib/tablesort.lib.php
index eab11babb0..e388399c18 100755
--- a/main/inc/lib/tablesort.lib.php
+++ b/main/inc/lib/tablesort.lib.php
@@ -23,7 +23,7 @@ class TableSort {
* @author bart.mollet@hogent.be
*/
public function sort_table($data, $column = 0, $direction = SORT_ASC, $type = SORT_REGULAR) {
- if (!is_array($data) or count($data) == 0) {
+ if (!is_array($data) || empty($data)) {
return array();
}
if ($column != strval(intval($column))) {
@@ -35,7 +35,6 @@ class TableSort {
return $data;
}
- $compare_function = '';
if ($type == SORT_REGULAR) {
if (TableSort::is_image_column($data, $column)) {
$type = SORT_IMAGE;
@@ -48,26 +47,25 @@ class TableSort {
}
}
+ $compare_operator = $direction == SORT_ASC ? '>' : '<=';
switch ($type) {
case SORT_NUMERIC:
- $compare_function = 'strip_tags($el1) > strip_tags($el2)';
+ $compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
break;
case SORT_IMAGE:
- $compare_function = 'api_strnatcmp(api_strtolower(strip_tags($el1,"
")),api_strtolower(strip_tags($el2,"
"))) > 0';
+ $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "
")), api_strtolower(strip_tags($b['.$column.'], "
"))) '.$compare_operator.' 0;';
break;
case SORT_DATE:
- $compare_function = 'strtotime(strip_tags($el1)) > strtotime(strip_tags($el2))';
+ $compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
break;
case SORT_STRING:
default:
- $compare_function = 'api_strnatcmp(api_strtolower(strip_tags($el1)),api_strtolower(strip_tags($el2))) > 0';
+ $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
break;
}
- $function_body = '$el1 = $a['.$column.']; $el2 = $b['.$column.']; return '.($direction == SORT_ASC ? ' ' : ' !').'('.$compare_function.');';
-
// Sort the content
- usort($data, create_function('$a,$b', $function_body));
+ usort($data, create_function('$a, $b', $compare_function));
return $data;
}
@@ -85,7 +83,7 @@ class TableSort {
*/
public function sort_table_config($data, $column = 0, $direction = SORT_ASC, $column_show = null, $column_order = null, $type = SORT_REGULAR) {
- if (!is_array($data) or count($data) == 0) {
+ if (!is_array($data) || empty($data)) {
return array();
}
if ($column != strval(intval($column))) {
@@ -97,7 +95,6 @@ class TableSort {
return $data;
}
- $compare_function = '';
// Change columns sort
// Here we say that the real way of how the columns are going to be order is manage by the $column_order array
if (is_array($column_order)) {
@@ -108,34 +105,33 @@ class TableSort {
if (TableSort::is_image_column($data, $column)) {
$type = SORT_IMAGE;
} elseif (TableSort::is_date_column($data, $column)) {
- $type = SORT_DATE;
+ $type = SORT_DATE;
} elseif (TableSort::is_numeric_column($data, $column)) {
- $type = SORT_NUMERIC;
+ $type = SORT_NUMERIC;
} else {
$type = SORT_STRING;
}
}
- switch ($type) {
- case SORT_NUMERIC:
- $compare_function = 'strip_tags($el1) > strip_tags($el2)';
+ $compare_operator = $direction == SORT_ASC ? '>' : '<=';
+ switch ($type) {
+ case SORT_NUMERIC:
+ $compare_function = 'return strip_tags($a['.$column.']) '.$compare_operator.' strip_tags($b['.$column.']);';
break;
case SORT_IMAGE:
- $compare_function = 'api_strnatcmp(api_strtolower(strip_tags($el1,"
")),api_strtolower(strip_tags($el2,"
"))) > 0';
+ $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'], "
")), api_strtolower(strip_tags($b['.$column.'], "
"))) '.$compare_operator.' 0;';
break;
case SORT_DATE:
- $compare_function = 'strtotime(strip_tags($el1)) > strtotime(strip_tags($el2))';
+ $compare_function = 'return strtotime(strip_tags($a['.$column.'])) '.$compare_operator.' strtotime(strip_tags($b['.$column.']));';
break;
case SORT_STRING:
default:
- $compare_function = 'api_strnatcmp(api_strtolower(strip_tags($el1)),api_strtolower(strip_tags($el2))) > 0';
+ $compare_function = 'return api_strnatcmp(api_strtolower(strip_tags($a['.$column.'])), api_strtolower(strip_tags($b['.$column.']))) '.$compare_operator.' 0;';
break;
}
- $function_body = '$el1 = $a['.$column.']; $el2 = $b['.$column.']; return '.($direction == SORT_ASC ? ' ' : ' !').'('.$compare_function.');';
-
// Sort the content
- usort($data, create_function('$a,$b', $function_body));
+ usort($data, create_function('$a, $b', $compare_function));
if (is_array($column_show)) {
// We show only the columns data that were set up on the $column_show array