Bugzilla – Attachment 60158 Details for
Bug 8010
Search history can be added to the wrong patron
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Added a new syspref to Load history to the next user
Added-a-new-syspref-to-Load-history-to-the-next-us.patch (text/plain), 11.75 KB, created by
Baptiste Wojtkowski (bwoj)
on 2017-02-13 15:30:35 UTC
(
hide
)
Description:
Added a new syspref to Load history to the next user
Filename:
MIME Type:
Creator:
Baptiste Wojtkowski (bwoj)
Created:
2017-02-13 15:30:35 UTC
Size:
11.75 KB
patch
obsolete
>From 4ccf49872e700f2f199f6fbdfc1c3ffaf6641a6c Mon Sep 17 00:00:00 2001 >From: Baptiste Wojtkowski <baptiste.wojtkowski@biblibre.com> >Date: Mon, 13 Feb 2017 15:21:57 +0000 >Subject: [PATCH] Added a new syspref to Load history to the next user > >Added a syspref LoadHistory addSearchHistoryToTheFirstLoggedUser to select if you want the system to add the history of searches performed without session when you log in as registered user. >TEST PLAN >1 - Search in the catalogue, check you are not logged >2 - Log in : your last history should appear >4 - Log out >5 - Apply the patch >6 - Repeat 1 and 2 >7 - Desactivate the syspref addSearchHistoryToTheFirstLoggedUser >8 - Repeat 1 and 2 : your last history shouldn't appear > >The Unit test doesn't rollback but delete the added lines : the function get_template_and_user allway sets the autocommit to 1. > >https://bugs.koha-community.org/show_bug.cgi?id=8010 >--- > 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 > >diff --git a/C4/Auth.pm b/C4/Auth.pm >index 20d64a5..5b418a6 100644 >--- a/C4/Auth.pm >+++ b/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 ); > } >diff --git a/installer/data/mysql/atomicupdate/bug_8010-add_LoadSearchHistoryToTheFirstLoggedUser_syspref.sql b/installer/data/mysql/atomicupdate/bug_8010-add_LoadSearchHistoryToTheFirstLoggedUser_syspref.sql >new file mode 100644 >index 0000000..58e3dd2 >--- /dev/null >+++ b/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'); >+ >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index 8329720..9993523 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/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'), >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref >index f996ad6..33a18aa 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref >+++ b/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 >diff --git a/t/db_dependent/Auth2.t b/t/db_dependent/Auth2.t >new file mode 100644 >index 0000000..460cb6d >--- /dev/null >+++ b/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}"; >+ >-- >2.7.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 8010
:
60158
|
60183
|
60187
|
61223
|
61251
|
61256
|
61257
|
61258
|
61288
|
61289
|
61290