diff --git a/index.php b/index.php index b17dd82..aab4cb6 100644 --- a/index.php +++ b/index.php @@ -563,6 +563,7 @@ $(document).ready(function () { noDataAvailable: 'No records for ' + zone.record.name }, paging: true, + sorting: true, pageSize: 20, openChildAsAccordion: true, actions: { @@ -592,6 +593,7 @@ $(document).ready(function () { name: { title: 'Label', width: '7%', + sorting: true, create: true, display: displayContent('name', zone.record.name), inputClass: 'name', @@ -648,6 +650,7 @@ $(document).ready(function () { title: 'Content', width: '30%', create: true, + sorting: true, display: displayContent('content'), inputClass: 'content', listClass: 'content' @@ -656,6 +659,7 @@ $(document).ready(function () { title: 'TTL', width: '2%', create: true, + sorting: false, display: displayContent('ttl'), defaultValue: '', inputClass: 'ttl', @@ -680,6 +684,7 @@ $(document).ready(function () { title: 'Disabled', width: '2%', create: true, + sorting: false, display: displayContent('disabled'), defaultValue: '', inputClass: 'disabled', diff --git a/zones.php b/zones.php index 753f1cb..20d5abf 100644 --- a/zones.php +++ b/zones.php @@ -70,13 +70,31 @@ function rrtype_compare($a, $b) { } } -function record_compare($a, $b) { +function record_compare_default($a, $b) { if ($cmp = compareName($a['name'], $b['name'])) return $cmp; if ($cmp = rrtype_compare($a['type'], $b['type'])) return $cmp; if ($cmp = strnatcasecmp($a['content'], $b['content'])) return $cmp; return 0; } +function record_compare_name($a, $b) { + return record_compare_default($a, $b); +} + +function record_compare_type($a, $b) { + if ($cmp = rrtype_compare($a['type'], $b['type'])) return $cmp; + if ($cmp = compareName($a['name'], $b['name'])) return $cmp; + if ($cmp = strnatcasecmp($a['content'], $b['content'])) return $cmp; + return 0; +} + +function record_compare_content($a, $b) { + if ($cmp = strnatcasecmp($a['content'], $b['content'])) return $cmp; + if ($cmp = compareName($a['name'], $b['name'])) return $cmp; + if ($cmp = rrtype_compare($a['type'], $b['type'])) return $cmp; + return 0; +} + function add_db_zone($zonename, $accountname) { if (valid_user($accountname) === false) { jtable_respond(null, 'error', "$accountname is not a valid username"); @@ -173,7 +191,25 @@ case "listrecords": foreach ($records as &$record) { $record['id'] = json_encode($record); } - usort($records, "record_compare"); + if (isset($_GET['jtSorting'])) { + list($scolumn, $sorder) = preg_split("/ /", $_GET['jtSorting']); + switch ($scolumn) { + case "type": + usort($records, "record_compare_type"); + break; + case "content": + usort($records, "record_compare_content"); + break; + default: + usort($records, "record_compare_name"); + break; + } + if ($sorder == "DESC") { + $records = array_reverse($records); + } + } else { + usort($records, "record_compare_name"); + } jtable_respond($records); break;