Implement record sorting. Closes #83

This commit is contained in:
Mark Schouten 2016-08-05 09:15:19 +02:00
parent d103c7b04f
commit 749478c36a
2 changed files with 43 additions and 2 deletions

View file

@ -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: '<?php echo $defaults['ttl']; ?>',
inputClass: 'ttl',
@ -680,6 +684,7 @@ $(document).ready(function () {
title: 'Disabled',
width: '2%',
create: true,
sorting: false,
display: displayContent('disabled'),
defaultValue: '<?php echo $defaults['disabled'] ? 'No' : 'Yes'; ?>',
inputClass: 'disabled',

View file

@ -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;