--- trunk/lib/BackupPC/SearchLib.pm 2005/10/16 10:57:53 210 +++ trunk/lib/BackupPC/SearchLib.pm 2005/10/16 10:57:55 211 @@ -120,6 +120,48 @@ 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 @@ 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 @@ # $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 @@ } 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 @@ - - - - - + }; + + 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 @@ 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 .= '
';
ShareType and Name#SizeDate{'sort'} = $name . '_' . $dir; + $html .= ' style="border: 1px solid #808080;"'; + } else { + $param->{'sort'} = $name . '_a'; + } + $html .= '' . $display . 'Media