diff options
Diffstat (limited to 'includes/tablesort.inc')
-rw-r--r-- | includes/tablesort.inc | 81 |
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']; } } |