webmaster@1: $cell['data'])); webmaster@1: if ($cell['data'] == $ts['name']) { webmaster@1: $ts['sort'] = (($ts['sort'] == 'asc') ? 'desc' : 'asc'); webmaster@1: if (isset($cell['class'])) { webmaster@1: $cell['class'] .= ' active'; webmaster@1: } webmaster@1: else { webmaster@1: $cell['class'] = 'active'; webmaster@1: } webmaster@1: $image = theme('tablesort_indicator', $ts['sort']); webmaster@1: } webmaster@1: else { webmaster@1: // If the user clicks a different header, we want to sort ascending initially. webmaster@1: $ts['sort'] = 'asc'; webmaster@1: $image = ''; webmaster@1: } webmaster@1: webmaster@1: if (!empty($ts['query_string'])) { webmaster@1: $ts['query_string'] = '&'. $ts['query_string']; webmaster@1: } webmaster@1: $cell['data'] = l($cell['data'] . $image, $_GET['q'], array('attributes' => array('title' => $title), 'query' => 'sort='. $ts['sort'] .'&order='. urlencode($cell['data']) . $ts['query_string'], 'html' => TRUE)); webmaster@1: webmaster@1: unset($cell['field'], $cell['sort']); webmaster@1: } webmaster@1: return $cell; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Format a table cell. webmaster@1: * webmaster@1: * Adds a class attribute to all cells in the currently active column. webmaster@1: * webmaster@1: * @param $cell webmaster@1: * The cell to format. webmaster@1: * @param $header webmaster@1: * An array of column headers in the format described in theme_table(). webmaster@1: * @param $ts webmaster@1: * The current table sort context as returned from tablesort_init(). webmaster@1: * @param $i webmaster@1: * The index of the cell's table column. webmaster@1: * @return webmaster@1: * A properly formatted cell, ready for _theme_table_cell(). webmaster@1: */ webmaster@1: function tablesort_cell($cell, $header, $ts, $i) { webmaster@1: if (isset($header[$i]['data']) && $header[$i]['data'] == $ts['name'] && !empty($header[$i]['field'])) { webmaster@1: if (is_array($cell)) { webmaster@1: if (isset($cell['class'])) { webmaster@1: $cell['class'] .= ' active'; webmaster@1: } webmaster@1: else { webmaster@1: $cell['class'] = 'active'; webmaster@1: } webmaster@1: } webmaster@1: else { webmaster@1: $cell = array('data' => $cell, 'class' => 'active'); webmaster@1: } webmaster@1: } webmaster@1: return $cell; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Compose a query string to append to table sorting requests. webmaster@1: * webmaster@1: * @return webmaster@1: * A query string that consists of all components of the current page request webmaster@1: * except for those pertaining to table sorting. webmaster@1: */ webmaster@1: function tablesort_get_querystring() { webmaster@1: return drupal_query_string_encode($_REQUEST, array_merge(array('q', 'sort', 'order'), array_keys($_COOKIE))); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Determine the current sort criterion. webmaster@1: * webmaster@1: * @param $headers webmaster@1: * An array of column headers in the format described in theme_table(). webmaster@1: * @return webmaster@1: * An associative array describing the criterion, containing the keys: webmaster@1: * - "name": The localized title of the table column. webmaster@1: * - "sql": The name of the database field to sort on. webmaster@1: */ webmaster@1: function tablesort_get_order($headers) { webmaster@1: $order = isset($_GET['order']) ? $_GET['order'] : ''; webmaster@1: foreach ($headers as $header) { webmaster@1: if (isset($header['data']) && $order == $header['data']) { webmaster@1: return array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : ''); webmaster@1: } webmaster@1: webmaster@1: if (isset($header['sort']) && ($header['sort'] == 'asc' || $header['sort'] == 'desc')) { webmaster@1: $default = array('name' => $header['data'], 'sql' => isset($header['field']) ? $header['field'] : ''); webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: if (isset($default)) { webmaster@1: return $default; webmaster@1: } webmaster@1: else { webmaster@1: // The first column specified is initial 'order by' field unless otherwise specified webmaster@1: if (is_array($headers[0])) { webmaster@1: $headers[0] += array('data' => NULL, 'field' => NULL); webmaster@1: return array('name' => $headers[0]['data'], 'sql' => $headers[0]['field']); webmaster@1: } webmaster@1: else { webmaster@1: return array('name' => $headers[0]); webmaster@1: } webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Determine the current sort direction. webmaster@1: * webmaster@1: * @param $headers webmaster@1: * An array of column headers in the format described in theme_table(). webmaster@1: * @return webmaster@1: * The current sort direction ("asc" or "desc"). webmaster@1: */ webmaster@1: function tablesort_get_sort($headers) { webmaster@1: if (isset($_GET['sort'])) { webmaster@1: return ($_GET['sort'] == 'desc') ? 'desc' : 'asc'; webmaster@1: } webmaster@1: // User has not specified a sort. Use default if specified; otherwise use "asc". webmaster@1: else { webmaster@1: foreach ($headers as $header) { webmaster@1: if (is_array($header) && array_key_exists('sort', $header)) { webmaster@1: return $header['sort']; webmaster@1: } webmaster@1: } webmaster@1: } webmaster@1: return 'asc'; webmaster@1: }