@@ -, +, @@ --- C4/Auth.pm | 50 +++--- ...adSearchHistoryToTheFirstLoggedUser_syspref.sql | 3 + installer/data/mysql/sysprefs.sql | 1 + .../en/modules/admin/preferences/searching.pref | 8 + t/db_dependent/Auth2.t | 167 +++++++++++++++++++++ 5 files changed, 205 insertions(+), 24 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_8010-add_LoadSearchHistoryToTheFirstLoggedUser_syspref.sql create mode 100644 t/db_dependent/Auth2.t --- a/C4/Auth.pm +++ a/C4/Auth.pm @@ -330,31 +330,33 @@ sub get_template_and_user { # We show the link in opac $template->param( EnableOpacSearchHistory => 1 ); } + if (C4::Context->preference('addSearchHistoryToTheFirstLoggedUser')) + { + # And if there are searches performed when the user was not logged in, + # we add them to the logged-in search history + my @recentSearches = C4::Search::History::get_from_session( { cgi => $in->{'query'} } ); + if (@recentSearches) { + my $dbh = C4::Context->dbh; + my $query = q{ + INSERT INTO search_history(userid, sessionid, query_desc, query_cgi, type, total, time ) + VALUES (?, ?, ?, ?, ?, ?, ?) + }; + my $sth = $dbh->prepare($query); + $sth->execute( $borrowernumber, + $in->{query}->cookie("CGISESSID"), + $_->{query_desc}, + $_->{query_cgi}, + $_->{type} || 'biblio', + $_->{total}, + $_->{time}, + ) foreach @recentSearches; + + # clear out the search history from the session now that + # we've saved it to the database + } + } + C4::Search::History::set_to_session( { cgi => $in->{'query'}, search_history => [] } ); - # And if there are searches performed when the user was not logged in, - # we add them to the logged-in search history - my @recentSearches = C4::Search::History::get_from_session( { cgi => $in->{'query'} } ); - if (@recentSearches) { - my $dbh = C4::Context->dbh; - my $query = q{ - INSERT INTO search_history(userid, sessionid, query_desc, query_cgi, type, total, time ) - VALUES (?, ?, ?, ?, ?, ?, ?) - }; - - my $sth = $dbh->prepare($query); - $sth->execute( $borrowernumber, - $in->{query}->cookie("CGISESSID"), - $_->{query_desc}, - $_->{query_cgi}, - $_->{type} || 'biblio', - $_->{total}, - $_->{time}, - ) foreach @recentSearches; - - # clear out the search history from the session now that - # we've saved it to the database - C4::Search::History::set_to_session( { cgi => $in->{'query'}, search_history => [] } ); - } } elsif ( $in->{type} eq 'intranet' and C4::Context->preference('EnableSearchHistory') ) { $template->param( EnableSearchHistory => 1 ); } --- a/installer/data/mysql/atomicupdate/bug_8010-add_LoadSearchHistoryToTheFirstLoggedUser_syspref.sql +++ a/installer/data/mysql/atomicupdate/bug_8010-add_LoadSearchHistoryToTheFirstLoggedUser_syspref.sql @@ -0,0 +1,3 @@ +INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, `type` ) VALUES +('addSearchHistoryToTheFirstLoggedUser', '1', NULL, 'If ON, the next user will automatically get the last seaches in his history', 'YesNo'); + --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -234,6 +234,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('LinkerModule','Default','Default|FirstMatch|LastMatch','Chooses which linker module to use (see documentation).','Choice'), ('LinkerOptions','','','A pipe-separated list of options for the linker.','free'), ('LinkerRelink','1',NULL,'If ON the authority linker will relink headings that have previously been linked every time it runs.','YesNo'), +('LoadSearchHistoryToTheFirstLoggedUser', '1', NULL, 'If ON, the next user will automatically get the last seaches in his history', 'YesNo'), ('LocalCoverImages','0','1','Display local cover images on intranet details pages.','YesNo'), ('LocalHoldsPriority', '0', NULL, 'Enables the LocalHoldsPriority feature', 'YesNo'), ('LocalHoldsPriorityItemControl', 'holdingbranch', 'holdingbranch|homebranch', 'decides if the feature operates using the item''s home or holding library.', 'Choice'), --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref @@ -80,6 +80,14 @@ Searching: - patron search history in the staff client. Search Form: - + - Load the unlogged history to the next user. + - pref : LoadSearchHistoryToTheFirstLoggedUser + default: 0 + choices: + yes: "Load" + no : "Don't load" + - history to the next client. + - - Show tabs in OPAC and staff-side advanced search for limiting searches on the - pref: AdvancedSearchTypes class: long --- a/t/db_dependent/Auth2.t +++ a/t/db_dependent/Auth2.t @@ -0,0 +1,167 @@ +#!/usr/bin/perl +# +# This Koha test module is a stub! +# Add more tests here!!! +t::lib::Mocks::mock_preference( 'HoldsLog', 1 ); + +use Modern::Perl; + +use CGI qw ( -utf8 ); +use Test::MockModule; +use List::MoreUtils qw/all any none/; +use Test::More tests => 2; + +use t::lib::Mocks; +use t::lib::TestBuilder; + + +use C4::Auth; +use Koha::AuthUtils qw/hash_password/; +use Koha::Database; + + + +my $query = new CGI; + +my $schema = Koha::Database->schema; +$schema->storage->txn_begin; +my $builder = t::lib::TestBuilder->new; +my $dbh1 = C4::Context->dbh({AutoCommit => 0}); +$dbh1->{RaiseError} = 1; + +warn "Dumper : ".$dbh1->{AutoCommit}; +warn Data::Dumper::Dumper($dbh1); + +my $hash1 = hash_password('password'); + +my $patron = $builder->build( { source => 'Borrower' } ); +Koha::Patrons->find( $patron->{borrowernumber} )->update_password( $patron->{userid}, $hash1 ); + +my $session = C4::Auth::get_session(""); +$session->flush; + +sub myMockedget_from_session { + my $expected_recent_searches = [ + { + 'time' => 1374978877, + 'query_cgi' => 'cgi_test', + 'total' => 2, + 'query_desc' => 'kw,wrdl: history, ' + } + ]; + return @{$expected_recent_searches}; + +} + +my $getfrom = new Test::MockModule( 'C4::Search::History' ); +$getfrom->mock( 'get_from_session', \&myMockedget_from_session ); + +my $cgi = new Test::MockModule( 'CGI'); +$cgi->mock('cookie', sub { + my ($self, $key2) = @_; + if (!ref($key2) && $key2 eq 'CGISESSID'){ + return 'ID'; + } +}); + + + + +sub MockedCheckauth { + my ($query,$authnotrequired,$flagsrequired,$type) = @_; + # return vars + my $userid = $patron->{userid}; + my $sessionID = 234; + # we don't need to bother about permissions for this test + my $flags = { + superlibrarian => 1, acquisition => 0, + borrowers => 0, + catalogue => 1, circulate => 0, + coursereserves => 0, editauthorities => 0, + editcatalogue => 0, management => 0, + parameters => 0, permissions => 0, + plugins => 0, reports => 0, + reserveforothers => 0, serials => 0, + staffaccess => 0, tools => 0, + updatecharges => 0 + }; + + my $session_cookie = $query->cookie( + -name => 'CGISESSID', + -value => '9884013ae2c441d12e0bc9376242d2a8', + -HttpOnly => 1 + ); + return ( $userid, $session_cookie, $sessionID, $flags ); +} +# Mock checkauth, build the scenario +my $auth = new Test::MockModule( 'C4::Auth' ); +$auth->mock( 'checkauth', \&MockedCheckauth ); + + +warn "Dumper : ".$dbh1->{AutoCommit}; + +$query->param('koha_login_context', 'opac'); +$query->param('userid', $patron->{userid}); +$query->param('password', 'password'); + +warn "Dumper : $dbh1->{AutoCommit}"; + +t::lib::Mocks::mock_preference('addSearchHistoryToTheFirstLoggedUser', 0); +$query->cookie( + -name => 'CGISESSID', + -value => $session->id, + -HttpOnly => 1 +); +my $result = $schema->resultset('SearchHistory')->search()->count; + +my ( $template, $loggedinuser, $cookies ) = get_template_and_user( + { + template_name => "opac-user.tt", + query => $query, + type => "opac", + authnotrequired => 0, + debug => 1 + } +); + +warn "Dumper : $dbh1->{AutoCommit}"; +my $result2 = $schema->resultset('SearchHistory')->search()->count; +is($result2, $result, 'no new search added to borrower'); + + + + + +t::lib::Mocks::mock_preference('addSearchHistoryToTheFirstLoggedUser', 1); + +$query->param('koha_login_context', 'opac'); +$query->param('userid', $patron->{userid}); +$query->param('password', 'password'); +$query->cookie( + -name => 'CGISESSID', + -value => $session->id, + -HttpOnly => 1 +); + + +warn "Dumper : $dbh1->{AutoCommit}"; +$result = $schema->resultset('SearchHistory')->search()->count; + +( $template, $loggedinuser, $cookies ) = get_template_and_user( + { + template_name => "opac-user.tt", + query => $query, + type => "opac", + authnotrequired => 0, + debug => 1 + } +); +$result2 = $schema->resultset('SearchHistory')->search()->count; +is($result2, $result+1, 'new search added to borrower'); +$result = $schema->resultset('SearchHistory')->search(undef, { query_cgi => 'cgi_test'}); +warn "count : ".Data::Dumper::Dumper($result->count); +$result->delete_all(); +warn "count : ".Data::Dumper::Dumper($result->count); + +warn "Dumper : $dbh1->{AutoCommit}"; + --