From bb105b8adc843b0e23295ef3bd0531bccb6e6870 Mon Sep 17 00:00:00 2001 From: dpavlin Date: Sun, 16 Oct 2005 10:57:55 +0000 Subject: [PATCH] r8603@llin: dpavlin | 2005-10-15 22:44:32 +0200 implemented sort in search results git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@211 8392b6e1-25fa-0310-8288-cc32f8e212ea --- BUGS | 2 +- lib/BackupPC/SearchLib.pm | 103 ++++++++++++++++++++++++++++++++------ 2 files changed, 89 insertions(+), 16 deletions(-) diff --git a/BUGS b/BUGS index b430fbe..07cd3c1 100644 --- a/BUGS +++ b/BUGS @@ -18,7 +18,7 @@ - automatic switch to full text search depending on query, remove checkbox - add checkbox in search for files which are not burned + from/to date same no results -- sort burn archive DVDs by share and other columns ++ sort burn archive DVDs by share and other columns Site-specific: diff --git a/lib/BackupPC/SearchLib.pm b/lib/BackupPC/SearchLib.pm index 217be98..d2e0abd 100644 --- a/lib/BackupPC/SearchLib.pm +++ b/lib/BackupPC/SearchLib.pm @@ -120,6 +120,48 @@ sub getWhere($) { return join(" and ", @conditions); } +my $sort_def = { + 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', + } +}; + +sub getSort($$) { + my ($type, $sort_order) = @_; + + $sort_order ||= $sort_def->{'default'}; + + die "unknown type: $type" unless ($sort_def->{$type}); + + if (my $ret = $sort_def->{$type}->{$sort_order}) { + return $ret; + } else { + # fallback to default sort order + return $sort_def->{$type}->{ $sort_def->{'default'} }; + } +} sub getFiles($) { my ($param) = @_; @@ -151,8 +193,10 @@ sub getFiles($) { my $where = getWhere($param); $sql_where = " WHERE ". $where if ($where); + my $order = getSort('sql', $param->{'sort'}); + my $sql_order = qq{ - ORDER BY files.date + ORDER BY $order LIMIT $on_page OFFSET ? }; @@ -251,7 +295,7 @@ sub getFilesHyperEstraier($) { # $cond->set_max( $offset + $on_page ); $cond->set_options( $HyperEstraier::Condition::SURE ); - $cond->set_order( 'date NUMA' ); + $cond->set_order( getSort('est', $param->{'sort'} ) ); # get the result of search my @res; @@ -282,7 +326,7 @@ sub getFilesHyperEstraier($) { } my $row; - foreach my $c (qw/fid hname sname backupnum fiilename filepath date type size/) { + foreach my $c (qw/fid hname sname backupnum filepath date type size/) { $row->{$c} = $doc->attr($c); } push @res, $row; @@ -838,11 +882,34 @@ sub displayGrid($) { - - - - - + }; + + my ($sort_what, $sort_dir) = split(/_/,$param->{'sort'},2); + + sub sort_header($$$) { + my ($param, $display, $name) = @_; + + my $html = ''; + return $html; + } + + $retHTML .= + sort_header($param, 'Share', 'share') . + sort_header($param, 'Type and Name', 'path') . + sort_header($param, '#', 'num') . + sort_header($param, 'Size', 'size') . + sort_header($param, 'Date', 'date'); + + $retHTML .= qq{ }; @@ -933,20 +1000,26 @@ sub displayGrid($) { my $max_page = int( $results / $on_page ); my $page = 0; - sub page_link($$$) { - my ($param,$page,$display) = @_; + sub page_uri($) { + my $param = shift || die "no param?"; - $param->{'offset'} = $page; - - my $html = '' . $display . ''; + return $uri; + } + + sub page_link($$$) { + my ($param,$page,$display) = @_; + + $param->{'offset'} = $page if (defined($page)); + + my $html = '' . $display . ''; } $retHTML .= '
'; -- 2.20.1
ShareType and Name#SizeDate{'sort'} = $name . '_' . $dir; + $html .= ' style="border: 1px solid #808080;"'; + } else { + $param->{'sort'} = $name . '_a'; + } + $html .= '' . $display . 'Media