+my $sort_def = {
+ search => {
+ default => 'date_a',
+ sql => {
+ share_d => 'shares.name DESC',
+ share_a => 'shares.name ASC',
+ path_d => 'files.path DESC',
+ path_a => 'files.path ASC',
+ num_d => 'files.backupnum DESC',
+ num_a => 'files.backupnum ASC',
+ size_d => 'files.size DESC',
+ size_a => 'files.size ASC',
+ date_d => 'files.date DESC',
+ date_a => 'files.date ASC',
+ },
+ est => {
+ share_d => 'sname STRD',
+ share_a => 'sname STRA',
+ path_d => 'filepath STRD',
+ path_a => 'filepath STRA',
+ num_d => 'backupnum NUMD',
+ num_a => 'backupnum NUMA',
+ size_d => 'size NUMD',
+ size_a => 'size NUMA',
+ date_d => 'date NUMD',
+ date_a => 'date NUMA',
+ }
+ }, burn => {
+ default => 'date_a',
+ sql => {
+ share_d => 'host DESC, share DESC',
+ share_a => 'host ASC, share ASC',
+ num_d => 'backupnum DESC',
+ num_a => 'backupnum ASC',
+ date_d => 'date DESC',
+ date_a => 'date ASC',
+ age_d => 'age DESC',
+ age_a => 'age ASC',
+ size_d => 'size DESC',
+ size_a => 'size ASC',
+ incsize_d => 'inc_size DESC',
+ incsize_a => 'inc_size ASC',
+ }
+ }
+};
+
+sub getSort($$$) {
+ my ($part,$type, $sort_order) = @_;
+
+ die "unknown part: $part" unless ($sort_def->{$part});
+ die "unknown type: $type" unless ($sort_def->{$part}->{$type});
+
+ $sort_order ||= $sort_def->{$part}->{'default'};
+
+ if (my $ret = $sort_def->{$part}->{$type}->{$sort_order}) {
+ return $ret;
+ } else {
+ # fallback to default sort order
+ return $sort_def->{$part}->{$type}->{ $sort_def->{$part}->{'default'} };
+ }
+}