summaryrefslogtreecommitdiff
path: root/includes/tablesort.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/tablesort.inc')
-rw-r--r--includes/tablesort.inc81
1 files changed, 23 insertions, 58 deletions
diff --git a/includes/tablesort.inc b/includes/tablesort.inc
index 55a3f4cec..121a1b909 100644
--- a/includes/tablesort.inc
+++ b/includes/tablesort.inc
@@ -73,18 +73,7 @@ class TableSort extends SelectQueryExtender {
* The current sort direction ("asc" or "desc").
*/
protected function getSort() {
- if (isset($_GET['sort'])) {
- return ($_GET['sort'] == 'desc') ? 'desc' : 'asc';
- }
- // User has not specified a sort. Use default if specified; otherwise use "asc".
- else {
- foreach ($this->header as $header) {
- if (is_array($header) && isset($header['sort'])) {
- return $header['sort'];
- }
- }
- }
- return 'asc';
+ return tablesort_get_sort($this->header);
}
/**
@@ -111,32 +100,7 @@ class TableSort extends SelectQueryExtender {
* - "sql": The name of the database field to sort on.
*/
protected function order() {
- $order = isset($_GET['order']) ? $_GET['order'] : '';
- foreach ($this->header as $header) {
- if (isset($header['data']) && $order == $header['data']) {
- return array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : '');
- }
-
- if (isset($header['sort']) && ($header['sort'] == 'asc' || $header['sort'] == 'desc')) {
- $default = array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : '');
- }
- }
-
- if (isset($default)) {
- return $default;
- }
- else {
- // The first column specified is initial 'order by' field unless otherwise specified
- $headers = array_values($this->header);
- $header = $headers[0];
- if (is_array($header)) {
- $header += array('data' => NULL, 'field' => NULL);
- return array('name' => $header['data'], 'sql' => $header['field']);
- }
- else {
- return array('name' => $header);
- }
- }
+ return tablesort_get_order($this->header);
}
}
@@ -238,29 +202,27 @@ function tablesort_get_query_parameters() {
function tablesort_get_order($headers) {
$order = isset($_GET['order']) ? $_GET['order'] : '';
foreach ($headers as $header) {
- if (isset($header['data']) && $order == $header['data']) {
- return array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : '');
- }
+ if (is_array($header)) {
+ if (isset($header['data']) && $order == $header['data']) {
+ $default = $header;
+ break;
+ }
- if (isset($header['sort']) && ($header['sort'] == 'asc' || $header['sort'] == 'desc')) {
- $default = array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : '');
+ if (empty($default) && isset($header['sort']) && ($header['sort'] == 'asc' || $header['sort'] == 'desc')) {
+ $default = $header;
+ }
}
}
- if (isset($default)) {
- return $default;
- }
- else {
- // The first column specified is the initial 'order by' field unless otherwise specified.
- $first = current($headers);
- if (is_array($first)) {
- $first += array('data' => NULL, 'field' => NULL);
- return array('name' => $first['data'], 'sql' => $first['field']);
- }
- else {
- return array('name' => $first, 'sql' => '');
+ if (!isset($default)) {
+ $default = reset($headers);
+ if (!is_array($default)) {
+ $default = array('data' => $default);
}
}
+
+ $default += array('data' => NULL, 'field' => NULL);
+ return array('name' => $default['data'], 'sql' => $default['field']);
}
/**
@@ -273,12 +235,15 @@ function tablesort_get_order($headers) {
*/
function tablesort_get_sort($headers) {
if (isset($_GET['sort'])) {
- return ($_GET['sort'] == 'desc') ? 'desc' : 'asc';
+ return (strtolower($_GET['sort']) == 'desc') ? 'desc' : 'asc';
}
- // User has not specified a sort. Use default if specified; otherwise use "asc".
+ // The user has not specified a sort. Use the default for the currently sorted
+ // header if specified; otherwise use "asc".
else {
+ // Find out which header is currently being sorted.
+ $ts = tablesort_get_order($headers);
foreach ($headers as $header) {
- if (isset($header['sort'])) {
+ if (is_array($header) && isset($header['data']) && $header['data'] == $ts['name'] && isset($header['sort'])) {
return $header['sort'];
}
}