Merge branch 'master' of /usr/local/git/koha_base.git/
[koha.git] / C4 / Auth.pm
index c086619..14ae8da 100644 (file)
@@ -22,13 +22,15 @@ package C4::Auth;
 
 use strict;
 use Digest::MD5 qw(md5_base64);
+use CGI::Session;
+
 
 require Exporter;
 use C4::Context;
 use C4::Output;    # to get the template
-use C4::Interface::CGI::Output;
-use C4::Circulation::Circ2;    # getpatroninformation
+use C4::Members;
 use C4::Koha;
+use C4::Branch; # GetBranches
 
 # use Net::LDAP;
 # use Net::LDAP qw(:all);
@@ -36,7 +38,9 @@ use C4::Koha;
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
 # set the version for version checking
-$VERSION = 0.01;
+$VERSION = do { my @v = '$Revision$' =~ /\d+/g;
+    shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v );
+};
 
 =head1 NAME
 
@@ -50,15 +54,18 @@ C4::Auth - Authenticates Koha users
   my $query = new CGI;
 
   my ($template, $borrowernumber, $cookie) 
-    = get_template_and_user({template_name   => "opac-main.tmpl",
-                             query           => $query,
-                            type            => "opac",
-                            authnotrequired => 1,
-                            flagsrequired   => {borrow => 1},
-                         });
+    = get_template_and_user(
+        {
+            template_name   => "opac-main.tmpl",
+            query           => $query,
+           type            => "opac",
+           authnotrequired => 1,
+           flagsrequired   => {borrow => 1},
+       }
+    );
 
   print $query->header(
-    -type => guesstype($template->output),
+    -type => 'utf-8',
     -cookie => $cookie
   ), $template->output;
 
@@ -85,12 +92,15 @@ C4::Auth - Authenticates Koha users
 =item get_template_and_user
 
   my ($template, $borrowernumber, $cookie)
-    = get_template_and_user({template_name   => "opac-main.tmpl",
-                             query           => $query,
-                            type            => "opac",
-                            authnotrequired => 1,
-                            flagsrequired   => {borrow => 1},
-                         });
+    = get_template_and_user(
+        {
+           template_name   => "opac-main.tmpl",
+           query           => $query,
+          type            => "opac",
+          authnotrequired => 1,
+          flagsrequired   => {borrow => 1},
+       }
+    );
 
     This call passes the C<query>, C<flagsrequired> and C<authnotrequired>
     to C<&checkauth> (in this module) to perform authentification.
@@ -117,24 +127,25 @@ sub get_template_and_user {
         $in->{'authnotrequired'},
         $in->{'flagsrequired'},
         $in->{'type'}
-    );
+    ) unless ($in->{'template_name'}=~/maintenance/);
 
     my $borrowernumber;
-    if ($user) {
+    my $insecure = C4::Context->preference('insecure');
+    if ($user or $insecure) {
         $template->param( loggedinusername => $user );
         $template->param( sessionID        => $sessionID );
 
         $borrowernumber = getborrowernumber($user);
         my ( $borr, $alternativeflags ) =
-          getpatroninformation( undef, $borrowernumber );
+          GetMemberDetails( $borrowernumber );
         my @bordat;
         $bordat[0] = $borr;
-        $template->param( USER_INFO => \@bordat, );
+        $template->param( "USER_INFO" => \@bordat );
 
         # We are going to use the $flags returned by checkauth
         # to create the template's parameters that will indicate
         # which menus the user can access.
-        if ( $flags && $flags->{superlibrarian} == 1 ) {
+        if (( $flags && $flags->{superlibrarian}==1) or $insecure==1) {
             $template->param( CAN_user_circulate        => 1 );
             $template->param( CAN_user_catalogue        => 1 );
             $template->param( CAN_user_parameters       => 1 );
@@ -142,12 +153,14 @@ sub get_template_and_user {
             $template->param( CAN_user_permission       => 1 );
             $template->param( CAN_user_reserveforothers => 1 );
             $template->param( CAN_user_borrow           => 1 );
-            $template->param( CAN_user_reserveforself   => 1 );
             $template->param( CAN_user_editcatalogue    => 1 );
             $template->param( CAN_user_updatecharge     => 1 );
             $template->param( CAN_user_acquisition      => 1 );
             $template->param( CAN_user_management       => 1 );
-            $template->param( CAN_user_tools            => 1 );
+            $template->param( CAN_user_tools            => 1 );        
+            $template->param( CAN_user_editauthorities  => 1 );
+            $template->param( CAN_user_serials          => 1 );
+            $template->param( CAN_user_reports          => 1 );
         }
 
         if ( $flags && $flags->{circulate} == 1 ) {
@@ -161,7 +174,6 @@ sub get_template_and_user {
         if ( $flags && $flags->{parameters} == 1 ) {
             $template->param( CAN_user_parameters => 1 );
             $template->param( CAN_user_management => 1 );
-            $template->param( CAN_user_tools      => 1 );
         }
 
         if ( $flags && $flags->{borrowers} == 1 ) {
@@ -180,10 +192,6 @@ sub get_template_and_user {
             $template->param( CAN_user_borrow => 1 );
         }
 
-        if ( $flags && $flags->{reserveforself} == 1 ) {
-            $template->param( CAN_user_reserveforself => 1 );
-        }
-
         if ( $flags && $flags->{editcatalogue} == 1 ) {
             $template->param( CAN_user_editcatalogue => 1 );
         }
@@ -196,41 +204,85 @@ sub get_template_and_user {
             $template->param( CAN_user_acquisition => 1 );
         }
 
-        if ( $flags && $flags->{management} == 1 ) {
-            $template->param( CAN_user_management => 1 );
-            $template->param( CAN_user_tools      => 1 );
-        }
-
         if ( $flags && $flags->{tools} == 1 ) {
             $template->param( CAN_user_tools => 1 );
         }
+       
+        if ( $flags && $flags->{editauthorities} == 1 ) {
+            $template->param( CAN_user_editauthorities => 1 );
+        }
+               
+        if ( $flags && $flags->{serials} == 1 ) {
+            $template->param( CAN_user_serials => 1 );
+        }
 
+        if ( $flags && $flags->{reports} == 1 ) {
+            $template->param( CAN_user_reports => 1 );
+        }
     }
-    unless ( $in->{'type'} eq "intranet" ) {
+    if ( $in->{'type'} eq "intranet" ) {
         $template->param(
-            suggestion           => C4::Context->preference("suggestion"),
-            virtualshelves       => C4::Context->preference("virtualshelves"),
-            OpacNav              => C4::Context->preference("OpacNav"),
-            opacheader           => C4::Context->preference("opacheader"),
-            opaccredits          => C4::Context->preference("opaccredits"),
-            opacsmallimage       => C4::Context->preference("opacsmallimage"),
-            opaclayoutstylesheet =>
-              C4::Context->preference("opaclayoutstylesheet"),
-            opaccolorstylesheet =>
-              C4::Context->preference("opaccolorstylesheet"),
-            opaclanguagesdisplay =>
-              C4::Context->preference("opaclanguagesdisplay"),
-            TemplateEncoding => C4::Context->preference("TemplateEncoding"),
-            opacuserlogin    => C4::Context->preference("opacuserlogin"),
-            opacbookbag      => C4::Context->preference("opacbookbag"),
+            intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
+            intranetstylesheet      => C4::Context->preference("intranetstylesheet"),
+            IntranetNav             => C4::Context->preference("IntranetNav"),
+            intranetuserjs          => C4::Context->preference("intranetuserjs"),
+            TemplateEncoding        => C4::Context->preference("TemplateEncoding"),
+            AmazonContent           => C4::Context->preference("AmazonContent"),
+            LibraryName             => C4::Context->preference("LibraryName"),
+            LoginBranchcode         => (C4::Context->userenv?C4::Context->userenv->{"branch"}:"insecure"),
+            LoginBranchname         => (C4::Context->userenv?C4::Context->userenv->{"branchname"}:"insecure"),
+            LoginBranchnameShort    => substr((C4::Context->userenv?C4::Context->userenv->{"branchname"}:"insecure"),0,10),
+            AutoLocation            => C4::Context->preference("AutoLocation"),
+            hide_marc               => C4::Context->preference("hide_marc"),
+            patronimages            => C4::Context->preference("patronimages"),
+            "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
+            advancedMARCEditor      => C4::Context->preference("advancedMARCEditor"),
+            suggestion              => C4::Context->preference("suggestion"),
+            virtualshelves          => C4::Context->preference("virtualshelves"),
+            LibraryName             => C4::Context->preference("LibraryName"),
+            KohaAdminEmailAddress   => "" . C4::Context->preference("KohaAdminEmailAddress"),
+        );
+    }
+    else {
+        warn "template type should be OPAC, here it is=[" . $in->{'type'} . "]"
+          unless ( $in->{'type'} eq 'opac' );
+        my $LibraryNameTitle = C4::Context->preference("LibraryName");
+        $LibraryNameTitle =~ s/<(?:\/?)(?:br|p)\s*(?:\/?)>/ /sgi;
+        $LibraryNameTitle =~ s/<(?:[^<>'"]|'(?:[^']*)'|"(?:[^"]*)")*>//sg;
+       $template->param(
+            KohaAdminEmailAddress  => "" . C4::Context->preference("KohaAdminEmailAddress"),
+            suggestion             => "" . C4::Context->preference("suggestion"),
+            virtualshelves         => "" . C4::Context->preference("virtualshelves"),
+            OpacNav                => "" . C4::Context->preference("OpacNav"),
+            opacheader             => "" . C4::Context->preference("opacheader"),
+            opaccredits            => "" . C4::Context->preference("opaccredits"),
+            opacsmallimage         => "" . C4::Context->preference("opacsmallimage"),
+            opaclargeimage         => "" . C4::Context->preference("opaclargeimage"),
+            opaclayoutstylesheet   => "". C4::Context->preference("opaclayoutstylesheet"),
+            opaccolorstylesheet    => "". C4::Context->preference("opaccolorstylesheet"),
+            opaclanguagesdisplay   => "". C4::Context->preference("opaclanguagesdisplay"),
+            opacuserlogin          => "" . C4::Context->preference("opacuserlogin"),
+            opacbookbag            => "" . C4::Context->preference("opacbookbag"),
+            TemplateEncoding       => "". C4::Context->preference("TemplateEncoding"),
+            AmazonContent          => "" . C4::Context->preference("AmazonContent"),
+            LibraryName            => "" . C4::Context->preference("LibraryName"),
+            LibraryNameTitle       => "" . $LibraryNameTitle,
+            LoginBranchcode        => (C4::Context->userenv?C4::Context->userenv->{"branch"}:"insecure"),
+            LoginBranchname        => C4::Context->userenv?C4::Context->userenv->{"branchname"}:"", 
+            OpacPasswordChange     => C4::Context->preference("OpacPasswordChange"),
+            opacreadinghistory     => C4::Context->preference("opacreadinghistory"),
+            opacuserjs             => C4::Context->preference("opacuserjs"),
+            OpacCloud              => C4::Context->preference("OpacCloud"),
+            OpacTopissue           => C4::Context->preference("OpacTopissue"),
+            OpacAuthorities        => C4::Context->preference("OpacAuthorities"),
+            OpacBrowser            => C4::Context->preference("OpacBrowser"),
+            RequestOnOpac          => C4::Context->preference("RequestOnOpac"),
+            reviewson              => C4::Context->preference("reviewson"),
+            hide_marc              => C4::Context->preference("hide_marc"),
+            patronimages           => C4::Context->preference("patronimages"),
+            "BiblioDefaultView".C4::Context->preference("BiblioDefaultView") => 1,
         );
     }
-    $template->param(
-        TemplateEncoding => C4::Context->preference('TemplateEncoding'),
-        AmazonContent    => C4::Context->preference('AmazonContent'),
-        LibraryName      => C4::Context->preference('LibraryName'),
-        branchname       => C4::Context->userenv->{'branchname'},
-    );
     return ( $template, $borrowernumber, $cookie );
 }
 
@@ -302,6 +354,27 @@ sub checkauth {
     $type = 'opac' unless $type;
 
     my $dbh     = C4::Context->dbh;
+    # check that database and koha version are the same
+    unless (C4::Context->preference('Version')){
+      if ($type ne 'opac'){
+        warn "Install required, redirecting to Installer";
+        print $query->redirect("/cgi-bin/koha/installer/install.pl");
+      } else {
+        warn "OPAC Install required, redirecting to maintenance";
+        print $query->redirect("/cgi-bin/koha/maintenance.pl");
+      }       
+      exit;
+    }
+    if (C4::Context->preference('Version') < C4::Context->config("kohaversion")){
+      if ($type ne 'opac'){
+      warn "Database update needed, redirecting to Installer. Database is ".C4::Context->preference('Version')." and Koha is : ".C4::Context->config("kohaversion");
+        print $query->redirect("/cgi-bin/koha/installer/install.pl?step=3");
+      } else {
+      warn "OPAC :Database update needed, redirecting to maintenance. Database is ".C4::Context->preference('Version')." and Koha is : ".C4::Context->config("kohaversion");
+        print $query->redirect("/cgi-bin/koha/maintenance.pl");
+      }       
+      exit;
+    }
     my $timeout = C4::Context->preference('timeout');
     $timeout = 600 unless $timeout;
 
@@ -322,34 +395,32 @@ sub checkauth {
 
         # Using Basic Authentication, no cookies required
         $cookie = $query->cookie(
-            -name    => 'sessionID',
+            -name    => 'CGISESSID',
             -value   => '',
             -expires => ''
         );
         $loggedin = 1;
     }
-    elsif ( $sessionID = $query->cookie('sessionID') ) {
+    elsif ( $sessionID = $query->cookie("CGISESSID")) {
+               my $session = new CGI::Session("driver:MySQL", $sessionID, {Handle=>$dbh});
+           
         C4::Context->_new_userenv($sessionID);
-        if ( my %hash = $query->cookie('userenv') ) {
-            C4::Context::set_userenv(
-                $hash{number},       $hash{id},
-                $hash{cardnumber},   $hash{firstname},
-                $hash{surname},      $hash{branch},
-                $hash{branchname},   $hash{flags},
-                $hash{emailaddress}, $hash{branchprinter}
+               if ($session){
+                       C4::Context::set_userenv(
+                $session->param('number'),       $session->param('id'),
+                $session->param('cardnumber'),   $session->param('firstname'),
+                $session->param('surname'),      $session->param('branch'),
+                $session->param('branchname'),   $session->param('flags'),
+                $session->param('emailaddress'), $session->param('branchprinter')
             );
         }
-        my ( $ip, $lasttime );
-
-        ( $userid, $ip, $lasttime ) =
-          $dbh->selectrow_array(
-            "SELECT userid,ip,lasttime FROM sessions WHERE sessionid=?",
-            undef, $sessionID );
+        my $ip=$session->param('ip');
+        $userid = $session->param('id');
+               my $lasttime = $session->param('lasttime');
         if ($logout) {
 
             # voluntary logout the user
-            $dbh->do( "DELETE FROM sessions WHERE sessionID=?",
-                undef, $sessionID );
+                       $session->delete;
             C4::Context->_unset_userenv($sessionID);
             $sessionID = undef;
             $userid    = undef;
@@ -360,12 +431,12 @@ sub checkauth {
             close L;
         }
         if ($userid) {
+                       warn "here $userid";
             if ( $lasttime < time() - $timeout ) {
 
                 # timed logout
                 $info{'timed_out'} = 1;
-                $dbh->do( "DELETE FROM sessions WHERE sessionID=?",
-                    undef, $sessionID );
+                               $session->delete();
                 C4::Context->_unset_userenv($sessionID);
                 $userid    = undef;
                 $sessionID = undef;
@@ -381,8 +452,7 @@ sub checkauth {
                 $info{'oldip'}        = $ip;
                 $info{'newip'}        = $ENV{'REMOTE_ADDR'};
                 $info{'different_ip'} = 1;
-                $dbh->do( "DELETE FROM sessions WHERE sessionID=?",
-                    undef, $sessionID );
+                               $session->delete();
                 C4::Context->_unset_userenv($sessionID);
                 $sessionID = undef;
                 $userid    = undef;
@@ -394,13 +464,9 @@ sub checkauth {
                 close L;
             }
             else {
-                $cookie = $query->cookie(
-                    -name    => 'sessionID',
-                    -value   => $sessionID,
-                    -expires => ''
+                $cookie = $query->cookie(CGISESSID => $session->id
                 );
-                $dbh->do( "UPDATE sessions SET lasttime=? WHERE sessionID=?",
-                    undef, ( time(), $sessionID ) );
+                               $session->param('lasttime',time());
                 $flags = haspermission( $dbh, $userid, $flagsrequired );
                 if ($flags) {
                     $loggedin = 1;
@@ -412,30 +478,20 @@ sub checkauth {
         }
     }
     unless ($userid) {
-        $sessionID = int( rand() * 100000 ) . '-' . time();
+               my $session = new CGI::Session("driver:MySQL", undef, {Handle=>$dbh});          
+               my $sessionID = $session->id;
         $userid    = $query->param('userid');
         C4::Context->_new_userenv($sessionID);
         my $password = $query->param('password');
         C4::Context->_new_userenv($sessionID);
         my ( $return, $cardnumber ) = checkpw( $dbh, $userid, $password );
         if ($return) {
-            $dbh->do( "DELETE FROM sessions WHERE sessionID=? AND userid=?",
-                undef, ( $sessionID, $userid ) );
-            $dbh->do(
-"INSERT INTO sessions (sessionID, userid, ip,lasttime) VALUES (?, ?, ?, ?)",
-                undef,
-                ( $sessionID, $userid, $ENV{'REMOTE_ADDR'}, time() )
-            );
             open L, ">>/tmp/sessionlog";
             my $time = localtime( time() );
             printf L "%20s from %16s logged in  at %30s.\n", $userid,
               $ENV{'REMOTE_ADDR'}, $time;
             close L;
-            $cookie = $query->cookie(
-                -name    => 'sessionID',
-                -value   => $sessionID,
-                -expires => ''
-            );
+            $cookie = $query->cookie(CGISESSID => $sessionID);
             if ( $flags = haspermission( $dbh, $userid, $flagsrequired ) ) {
                 $loggedin = 1;
             }
@@ -444,21 +500,25 @@ sub checkauth {
                 C4::Context->_unset_userenv($sessionID);
             }
             if ( $return == 1 ) {
-                my ( $bornum, $firstname, $surname, $userflags, $branchcode,
-                    $branchname, $branchprinter, $emailaddress );
+                my (
+                    $borrowernumber, $firstname,  $surname,
+                    $userflags,      $branchcode, $branchname,
+                    $branchprinter,  $emailaddress
+                );
                 my $sth =
                   $dbh->prepare(
 "select borrowernumber, firstname, surname, flags, borrowers.branchcode, branches.branchname as branchname,branches.branchprinter as branchprinter, email from borrowers left join branches on borrowers.branchcode=branches.branchcode where userid=?"
                   );
                 $sth->execute($userid);
                 (
-                    $bornum, $firstname, $surname, $userflags, $branchcode,
-                    $branchname, $branchprinter, $emailaddress
+                    $borrowernumber, $firstname,  $surname,
+                    $userflags,      $branchcode, $branchname,
+                    $branchprinter,  $emailaddress
                   )
                   = $sth->fetchrow
                   if ( $sth->rows );
 
-#                              warn "$cardnumber,$bornum,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
+#                              warn "$cardnumber,$borrowernumber,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
                 unless ( $sth->rows ) {
                     my $sth =
                       $dbh->prepare(
@@ -466,78 +526,73 @@ sub checkauth {
                       );
                     $sth->execute($cardnumber);
                     (
-                        $bornum, $firstname, $surname, $userflags, $branchcode,
-                        $branchcode, $branchprinter, $emailaddress
+                        $borrowernumber, $firstname,  $surname,
+                        $userflags,      $branchcode, $branchname,
+                        $branchprinter,  $emailaddress
                       )
                       = $sth->fetchrow
                       if ( $sth->rows );
 
-#                                      warn "$cardnumber,$bornum,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
+#                                      warn "$cardnumber,$borrowernumber,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
                     unless ( $sth->rows ) {
                         $sth->execute($userid);
                         (
-                            $bornum, $firstname, $surname, $userflags,
-                            $branchcode, $branchprinter, $emailaddress
+                            $borrowernumber, $firstname, $surname, $userflags,
+                            $branchcode, $branchname, $branchprinter, $emailaddress
                           )
                           = $sth->fetchrow
                           if ( $sth->rows );
                     }
 
-#                                      warn "$cardnumber,$bornum,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
+#                                      warn "$cardnumber,$borrowernumber,$userid,$firstname,$surname,$userflags,$branchcode,$emailaddress";
                 }
 
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 #  new op dev :
 # launch a sequence to check if we have a ip for the branch, if we have one we replace the branchcode of the userenv by the branch bound in the ip.
                 my $ip       = $ENV{'REMOTE_ADDR'};
-                my $branches = getbranches('IS');
+                my $branches = GetBranches();
                 my @branchesloop;
-                my $branchprinter;
                 foreach my $br ( keys %$branches ) {
 
                     #          now we work with the treatment of ip
-                    my $domain = $branches->{$br}->{branchip};
+                    my $domain = $branches->{$br}->{'branchip'};
                     if ( $domain && $ip =~ /^$domain/ ) {
                         $branchcode = $branches->{$br}->{'branchcode'};
 
-            #                  new op dev : add the branchprinter and branchname in the cookie
+                        # new op dev : add the branchprinter and branchname in the cookie
                         $branchprinter = $branches->{$br}->{'branchprinter'};
                         $branchname    = $branches->{$br}->{'branchname'};
                     }
                 }
-
-                my $hash = C4::Context::set_userenv(
-                    $bornum,     $userid,    $cardnumber,
-                    $firstname,  $surname,   $branchcode,
-                    $branchname, $userflags, $emailaddress,
-                    $branchprinter,
-                );
-
-                $envcookie = $query->cookie(
-                    -name    => 'userenv',
-                    -value   => $hash,
-                    -expires => ''
-                );
+                               
+                               $session->param('number',$borrowernumber);
+                               $session->param('id',$userid);
+                               $session->param('cardnumber',$cardnumber);
+                               $session->param('firstname',$firstname);
+                               $session->param('surname',$surname);
+                               $session->param('branch',$branchcode);
+                               $session->param('branchname',$branchname);
+                               $session->param('flags',$userflags);
+                               $session->param('emailaddress',$emailaddress);
+                $session->param('ip',$session->remote_addr());
+                               $session->param('lasttime',time());
             }
             elsif ( $return == 2 ) {
 
                 #We suppose the user is the superlibrarian
-                my $hash = C4::Context::set_userenv(
-                    0,
-                    0,
-                    C4::Context->config('user'),
-                    C4::Context->config('user'),
-                    C4::Context->config('user'),
-                    "",
-                    1,
-                    C4::Context->preference('KohaAdminEmailAddress')
-                );
-                $envcookie = $query->cookie(
-                    -name    => 'userenv',
-                    -value   => $hash,
-                    -expires => ''
-                );
-            }
+                               $session->param('number',0);
+                               $session->param('id',C4::Context->config('user'));
+                               $session->param('cardnumber',C4::Context->config('user'));
+                               $session->param('firstname',C4::Context->config('user'));
+                               $session->param('surname',C4::Context->config('user'),);
+                               $session->param('branch','NO_LIBRARY_SET');
+                               $session->param('branchname','NO_LIBRARY_SET');
+                               $session->param('flags',1);
+                               $session->param('emailaddress', C4::Context->preference('KohaAdminEmailAddress'));
+                $session->param('ip',$session->remote_addr());
+                               $session->param('lasttime',time());
+                       }
         }
         else {
             if ($userid) {
@@ -551,21 +606,13 @@ sub checkauth {
     # finished authentification, now respond
     if ( $loggedin || $authnotrequired || ( defined($insecure) && $insecure ) )
     {
-
         # successful login
         unless ($cookie) {
-            $cookie = $query->cookie(
-                -name    => 'sessionID',
-                -value   => '',
-                -expires => ''
+            $cookie = $query->cookie( CGISESSID => ''
             );
         }
-        if ($envcookie) {
-            return ( $userid, [ $cookie, $envcookie ], $sessionID, $flags );
-        }
-        else {
-            return ( $userid, $cookie, $sessionID, $flags );
-        }
+               return ( $userid, $cookie, $sessionID, $flags );
+
     }
 
     # else we have a problem...
@@ -579,11 +626,25 @@ sub checkauth {
 
     my $template = gettemplate( $template_name, $type, $query );
     $template->param(
-        INPUTS                  => \@inputs,
+        INPUTS               => \@inputs,
+        suggestion           => C4::Context->preference("suggestion"),
+        virtualshelves       => C4::Context->preference("virtualshelves"),
+        opaclargeimage       => C4::Context->preference("opaclargeimage"),
+        LibraryName          => C4::Context->preference("LibraryName"),
+        OpacNav              => C4::Context->preference("OpacNav"),
+        opaccredits          => C4::Context->preference("opaccredits"),
+        opacreadinghistory   => C4::Context->preference("opacreadinghistory"),
+        opacsmallimage       => C4::Context->preference("opacsmallimage"),
+        opaclayoutstylesheet => C4::Context->preference("opaclayoutstylesheet"),
+        opaccolorstylesheet  => C4::Context->preference("opaccolorstylesheet"),
+        opaclanguagesdisplay => C4::Context->preference("opaclanguagesdisplay"),
+        opacuserjs           => C4::Context->preference("opacuserjs"),
+
         intranetcolorstylesheet =>
           C4::Context->preference("intranetcolorstylesheet"),
         intranetstylesheet => C4::Context->preference("intranetstylesheet"),
         IntranetNav        => C4::Context->preference("IntranetNav"),
+        intranetuserjs     => C4::Context->preference("intranetuserjs"),
         TemplateEncoding   => C4::Context->preference("TemplateEncoding"),
 
     );
@@ -595,13 +656,10 @@ sub checkauth {
         LibraryName => => C4::Context->preference("LibraryName"),
     );
     $template->param( \%info );
-    $cookie = $query->cookie(
-        -name    => 'sessionID',
-        -value   => $sessionID,
-        -expires => ''
-    );
+#    $cookie = $query->cookie(CGISESSID => $session->id
+#   );
     print $query->header(
-        -type   => guesstype( $template->output ),
+        -type   => 'utf-8',
         -cookie => $cookie
       ),
       $template->output;
@@ -614,36 +672,47 @@ sub checkpw {
 
     # INTERNAL AUTH
     my $sth =
-      $dbh->prepare("select password,cardnumber from borrowers where userid=?");
+      $dbh->prepare(
+"select password,cardnumber,borrowernumber,userid,firstname,surname,branchcode,flags from borrowers where userid=?"
+      );
     $sth->execute($userid);
     if ( $sth->rows ) {
-        my ( $md5password, $cardnumber ) = $sth->fetchrow;
+        my ( $md5password, $cardnumber, $borrowernumber, $userid, $firstname,
+            $surname, $branchcode, $flags )
+          = $sth->fetchrow;
         if ( md5_base64($password) eq $md5password ) {
 
-#                      C4::Context->set_userenv("$bornum",$userid,$cardnumber,$firstname,$surname,$branchcode,$userflags);
+            C4::Context->set_userenv( "$borrowernumber", $userid, $cardnumber,
+                $firstname, $surname, $branchcode, $flags );
             return 1, $cardnumber;
         }
     }
-    $sth = $dbh->prepare("select password from borrowers where cardnumber=?");
+    $sth =
+      $dbh->prepare(
+"select password,cardnumber,borrowernumber,userid, firstname,surname,branchcode,flags from borrowers where cardnumber=?"
+      );
     $sth->execute($userid);
     if ( $sth->rows ) {
-        my ($md5password) = $sth->fetchrow;
+        my ( $md5password, $cardnumber, $borrowernumber, $userid, $firstname,
+            $surname, $branchcode, $flags )
+          = $sth->fetchrow;
         if ( md5_base64($password) eq $md5password ) {
 
-#                      C4::Context->set_userenv($bornum,$userid,$cardnumber,$firstname,$surname,$branchcode,$userflags);
+            C4::Context->set_userenv( $borrowernumber, $userid, $cardnumber,
+                $firstname, $surname, $branchcode, $flags );
             return 1, $userid;
         }
     }
-    if (   $userid eq C4::Context->config('user')
-        && $password eq C4::Context->config('pass') )
+    if (   $userid && $userid eq C4::Context->config('user')
+        && "$password" eq C4::Context->config('pass') )
     {
 
 # Koha superuser account
 #              C4::Context->set_userenv(0,0,C4::Context->config('user'),C4::Context->config('user'),C4::Context->config('user'),"",1);
         return 2;
     }
-    if (   $userid eq 'demo'
-        && $password eq 'demo'
+    if (   $userid && $userid eq 'demo'
+        && "$password" eq 'demo'
         && C4::Context->config('demo') )
     {