summaryrefslogtreecommitdiff
path: root/includes/tablesort.inc
diff options
context:
space:
mode:
Diffstat (limited to 'includes/tablesort.inc')
-rw-r--r--includes/tablesort.inc41
1 files changed, 27 insertions, 14 deletions
diff --git a/includes/tablesort.inc b/includes/tablesort.inc
index eb1415615..fc612c9cd 100644
--- a/includes/tablesort.inc
+++ b/includes/tablesort.inc
@@ -12,10 +12,14 @@
/**
* Initialize the table sort context.
*/
-function tablesort_init($header) {
- $ts = tablesort_get_order($header);
- $ts['sort'] = tablesort_get_sort($header);
- $ts['query_string'] = tablesort_get_querystring();
+function tablesort_init($header, $id) {
+ if (strlen($id) > 0) {
+ $id = '-'. $id;
+ }
+ $ts = tablesort_get_order($header, $id);
+ $ts['sort'] = tablesort_get_sort($header, $id);
+ $ts['query_string'] = tablesort_get_querystring($id);
+ $ts['id'] = $id;
return $ts;
}
@@ -31,13 +35,16 @@ function tablesort_init($header) {
* @param $before
* An SQL string to insert after ORDER BY and before the table sorting code.
* Useful for sorting by important attributes like "sticky" first.
+ * @param $id
+ * A unique id used to identify the table. Use this in the case where
+ * multiple tables appear on one page.
* @return
* An SQL string to append to the end of a query.
*
* @ingroup database
*/
-function tablesort_sql($header, $before = '') {
- $ts = tablesort_init($header);
+function tablesort_sql($header, $before = '', $id = '') {
+ $ts = tablesort_init($header, $id);
if ($ts['sql']) {
$sql = db_escape_string($ts['sql']);
$sort = drupal_strtoupper(db_escape_string($ts['sort']));
@@ -78,7 +85,7 @@ function tablesort_header($cell, $header, $ts) {
if (!empty($ts['query_string'])) {
$ts['query_string'] = '&'. $ts['query_string'];
}
- $cell['data'] = l($cell['data'] . $image, $_GET['q'], array('title' => $title), 'sort='. $ts['sort'] .'&order='. urlencode($cell['data']) . $ts['query_string'], NULL, FALSE, TRUE);
+ $cell['data'] = l($cell['data'] . $image, $_GET['q'], array('title' => $title), 'sort'. $ts['id'] .'='. $ts['sort'] .'&order'. $ts['id'] .'='. urlencode($cell['data']) . $ts['query_string'], NULL, FALSE, TRUE);
unset($cell['field'], $cell['sort']);
}
@@ -121,12 +128,14 @@ function tablesort_cell($cell, $header, $ts, $i) {
/**
* Compose a query string to append to table sorting requests.
*
+ * @param $id
+ * A unique id used to identify the table.
* @return
* A query string that consists of all components of the current page request
* except for those pertaining to table sorting.
*/
-function tablesort_get_querystring() {
- return drupal_query_string_encode($_REQUEST, array_merge(array('q', 'sort', 'order'), array_keys($_COOKIE)));
+function tablesort_get_querystring($id) {
+ return drupal_query_string_encode($_REQUEST, array_merge(array('q', 'sort'. $id, 'order'. $id), array_keys($_COOKIE)));
}
/**
@@ -134,13 +143,15 @@ function tablesort_get_querystring() {
*
* @param $headers
* An array of column headers in the format described in theme_table().
+ * @param $id
+ * A unique id used to identify the table.
* @return
* An associative array describing the criterion, containing the keys:
* - "name": The localized title of the table column.
* - "sql": The name of the database field to sort on.
*/
-function tablesort_get_order($headers) {
- $order = isset($_GET['order']) ? $_GET['order'] : '';
+function tablesort_get_order($headers, $id) {
+ $order = isset($_GET['order'. $id]) ? $_GET['order'. $id] : '';
foreach ($headers as $header) {
if (isset($header['data']) && $order == $header['data']) {
return array('name' => $header['data'], 'sql' => $header['field']);
@@ -170,12 +181,14 @@ function tablesort_get_order($headers) {
*
* @param $headers
* An array of column headers in the format described in theme_table().
+ * @param $id
+ * A unique id used to identify the table.
* @return
* The current sort direction ("asc" or "desc").
*/
-function tablesort_get_sort($headers) {
- if (isset($_GET['sort'])) {
- return ($_GET['sort'] == 'desc') ? 'desc' : 'asc';
+function tablesort_get_sort($headers, $id) {
+ if (isset($_GET['sort'. $id])) {
+ return ($_GET['sort'. $id] == 'desc') ? 'desc' : 'asc';
}
// User has not specified a sort. Use default if specified; otherwise use "asc".
else {