+my $branch = $query->param('branch' );
+my $printer = $query->param('printer');
+# fallbacks for $branch and $printer after possible session updates
+
+my $userenv_branch = C4::Context->userenv->{'branch'} || '';
+my $userenv_printer = C4::Context->userenv->{'branchprinter'} || '';
+my @updated;
+
+# $session lddines here are doing the updating
+if ($branch and $branches->{$branch}) {
+ if (! $userenv_branch or $userenv_branch ne $branch ) {
+ my $branchname = GetBranchName($branch);
+ $template->param(LoginBranchname => $branchname); # update template for new branch
+ $template->param(LoginBranchcode => $branch); # update template for new branch
+ $session->param('branchname', $branchname); # update sesssion in DB
+ $session->param('branch', $branch); # update sesssion in DB
+ push @updated, {
+ updated_branch => 1,
+ old_branch => $userenv_branch,
+ };
+ } # else branch the same, no update
+} else {
+ $branch = $userenv_branch; # fallback value
+}
+
+# FIXME: branchprinter is not retained by session. This feature was not adequately
+# ported from Koha 2.2.3 where it had been a separate cookie.
+# So this needs to be fixed for Koha 3 or removed outright.
+# --atz (w/ info from chris cormack)
+
+if ($printer) {
+ if (! $userenv_printer or $userenv_printer ne $printer ) {
+ $session->param('branchprinter', $printer); # update sesssion in DB
+ $template->param('new_printer', $printer); # update template
+ push @updated, {
+ updated_printer => 1,
+ old_printer => $userenv_printer,
+ };
+ } # else printer is the same, no update
+} else {
+ $printer = $userenv_printer; # fallback value
+}
+
+$template->param(updated => \@updated) if (scalar @updated);