Bug 11430: delete search history by id - API changes

Bug 10807 adds a search history for authorities and bug 10862 adds the
search history on the staff interface.

This one allows the user to select the search history lines he wants to
delete.

This change is done for the OPAC and intranet interface. The user is now
allow to delete one or more lines of his/her search history.

Test plan (for intranet, opac: bootstrap and prog themes):
1/ launch some search (catalogue and authority)
2/ verify the lines is added to your search history
3/ delete one or more lines of the history and verify they have been
deleted
4/ at the OPAC: logout and do again steps 1-3.
5/ prove t/db_dependent/Search/History.t

Signed-off-by: sonia BOUIS <sonia.bouis@univ-lyon3.fr>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
Jonathan Druart 2013-12-20 15:06:08 +01:00 committed by Tomas Cohen Arazi
parent fdca44709e
commit 380e8d53f0

View file

@ -42,15 +42,18 @@ sub add_to_session {
my $total = $params->{total};
my $type = $params->{type} || 'biblio';
# To a cookie (the user is not logged in)
my $now = dt_from_string;
my $id = $now->year . $now->month . $now->day . $now->hour . $now->minute . $now->second . int(rand(100));
my @recent_searches = get_from_session( { cgi => $cgi } );
push @recent_searches,
{
push @recent_searches, {
query_desc => $query_desc,
query_cgi => $query_cgi,
total => "$total",
type => $type,
time => output_pref( { dt => dt_from_string(), dateformat => 'iso', timeformat => '24hr' } ),
};
time => output_pref( { dt => $now, dateformat => 'iso', timeformat => '24hr' } ),
id => $id,
};
shift @recent_searches if ( @recent_searches > 15 );
set_to_session( { cgi => $cgi, search_history => \@recent_searches } );
@ -58,22 +61,34 @@ sub add_to_session {
sub delete {
my ($params) = @_;
my $id = $params->{id};
my $userid = $params->{userid};
my $sessionid = $params->{sessionid};
my $type = $params->{type} || q{};
my $previous = $params->{previous} || 0;
unless ($userid) {
warn "ERROR: userid is required for history search";
unless ( ref( $id ) ) {
$id = $id ? [ $id ] : [];
}
unless ( $userid or @$id ) {
warn "ERROR: userid or id is required for history deletion";
return;
}
my $dbh = C4::Context->dbh;
my $query = q{
DELETE FROM search_history
WHERE userid = ?
WHERE 1
};
$query .= q{ AND id IN ( } . join( q{,}, (q{?}) x @$id ) . q{ )}
if @$id;
$query .= q{
AND userid = ?
} if $userid;
if ($sessionid) {
$query .=
$previous
@ -85,20 +100,56 @@ sub delete {
if $type;
$dbh->do(
$query, {}, $userid,
$query, {},
( @$id ? ( @$id ) : () ),
( $userid ? $userid : () ),
( $sessionid ? $sessionid : () ),
( $type ? $type : () )
);
}
sub delete_from_cookie {
my ($params) = @_;
my $cookie = $params->{cookie};
my $id = $params->{id};
return unless $cookie;
unless ( ref( $id ) ) {
$id = $id ? [ $id ] : [];
}
return unless @$id;
my @searches;
if ( $cookie ){
$cookie = uri_unescape( $cookie );
if (decode_json( $cookie )) {
@searches = @{decode_json( $cookie )}
}
}
@searches = map {
my $search = $_;
( grep { $_ != $search->{id} } @$id ) ? $search : ()
} @searches;
return uri_escape( encode_json( \@searches ) );
}
sub get {
my ($params) = @_;
my $id = $params->{id};
my $userid = $params->{userid};
my $sessionid = $params->{sessionid};
my $type = $params->{type};
my $previous = $params->{previous};
unless ($userid) {
unless ( ref( $id ) ) {
$id = $id ? [ $id ] : [];
}
unless ( $userid or @$id ) {
warn "ERROR: userid is required for history search";
return;
}
@ -106,9 +157,16 @@ sub get {
my $query = q{
SELECT *
FROM search_history
WHERE userid = ?
WHERE 1
};
$query .= q{ AND id IN ( } . join( q{,}, (q{?}) x @$id ) . q{ )}
if @$id;
$query .= q{
AND userid = ?
} if $userid;
if ($sessionid) {
$query .=
$previous
@ -122,7 +180,8 @@ sub get {
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
$sth->execute(
$userid,
( @$id ? ( @$id ) : () ),
( $userid ? $userid : () ),
( $sessionid ? $sessionid : () ),
( $type ? $type : () )
);