Merge branch 'master' of /usr/local/git/koha_base.git/
authorJoshua Ferraro <jmf@liblime.com>
Wed, 8 Aug 2007 12:27:26 +0000 (07:27 -0500)
committerJoshua Ferraro <jmf@liblime.com>
Wed, 8 Aug 2007 12:27:26 +0000 (07:27 -0500)
1  2 
C4/Accounts.pm
C4/Auth.pm
installer/kohastructure.sql
opac/opac-rss.pl

diff --combined C4/Accounts.pm
@@@ -24,14 -24,12 +24,14 @@@ require Exporter
  use C4::Context;
  use C4::Stats;
  use C4::Members;
 +
  #use C4::Circulation;
  use vars qw($VERSION @ISA @EXPORT);
  
  # set the version for version checking
 -$VERSION = do { my @v = '$Revision$' =~ /\d+/g; 
 -shift(@v) . "." . join("_", map {sprintf "%03d", $_ } @v); };
 +$VERSION = do { my @v = '$Revision$' =~ /\d+/g;
 +    shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v );
 +};
  
  =head1 NAME
  
@@@ -51,9 -49,10 +51,9 @@@ patron
  
  =cut
  
 -@ISA = qw(Exporter);
 +@ISA    = qw(Exporter);
  @EXPORT = qw(&recordpayment &fixaccounts &makepayment &manualinvoice
 -&getnextacctno &reconcileaccount);
 -
 +  &getnextacctno &reconcileaccount);
  
  =head2 recordpayment
  
@@@ -71,64 -70,49 +71,64 @@@ will be credited to the next one
  =cut
  
  #'
 -sub recordpayment{
 -  #here we update both the accountoffsets and the account lines
 -  my ($borrowernumber,$data)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $newamtos = 0;
 -  my $accdata = "";
 -  my $branch=C4::Context->userenv->{'branch'};
 -  my $amountleft = $data;
 -  # begin transaction
 -  my $nextaccntno = getnextacctno($borrowernumber);
 -  # get lines with outstanding amounts to offset
 -  my $sth = $dbh->prepare("SELECT * FROM accountlines
 +sub recordpayment {
 +
 +    #here we update both the accountoffsets and the account lines
 +    my ( $borrowernumber, $data ) = @_;
 +    my $dbh        = C4::Context->dbh;
 +    my $newamtos   = 0;
 +    my $accdata    = "";
 +    my $branch     = C4::Context->userenv->{'branch'};
 +    my $amountleft = $data;
 +
 +    # begin transaction
 +    my $nextaccntno = getnextacctno($borrowernumber);
 +
 +    # get lines with outstanding amounts to offset
 +    my $sth = $dbh->prepare(
 +        "SELECT * FROM accountlines
    WHERE (borrowernumber = ?) AND (amountoutstanding<>0)
 -  ORDER BY date");
 -  $sth->execute($borrowernumber);
 -  # offset transactions
 -  while (($accdata=$sth->fetchrow_hashref) and ($amountleft>0)){
 -     if ($accdata->{'amountoutstanding'} < $amountleft) {
 -        $newamtos = 0;
 -        $amountleft -= $accdata->{'amountoutstanding'};
 -     }  else {
 -        $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
 -        $amountleft = 0;
 -     }
 -     my $thisacct = $accdata->{accountno};
 -     my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
 -     WHERE (borrowernumber = ?) AND (accountno=?)");
 -     $usth->execute($newamtos,$borrowernumber,$thisacct);
 -     $usth->finish;
 -     $usth = $dbh->prepare("INSERT INTO accountoffsets
 +  ORDER BY date"
 +    );
 +    $sth->execute($borrowernumber);
 +
 +    # offset transactions
 +    while ( ( $accdata = $sth->fetchrow_hashref ) and ( $amountleft > 0 ) ) {
 +        if ( $accdata->{'amountoutstanding'} < $amountleft ) {
 +            $newamtos = 0;
 +            $amountleft -= $accdata->{'amountoutstanding'};
 +        }
 +        else {
 +            $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
 +            $amountleft = 0;
 +        }
 +        my $thisacct = $accdata->{accountno};
 +        my $usth     = $dbh->prepare(
 +            "UPDATE accountlines SET amountoutstanding= ?
 +     WHERE (borrowernumber = ?) AND (accountno=?)"
 +        );
 +        $usth->execute( $newamtos, $borrowernumber, $thisacct );
 +        $usth->finish;
 +        $usth = $dbh->prepare(
 +            "INSERT INTO accountoffsets
       (borrowernumber, accountno, offsetaccount,  offsetamount)
 -     VALUES (?,?,?,?)");
 -     $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos);
 -     $usth->finish;
 -  }
 -  # create new line
 -  my $usth = $dbh->prepare("INSERT INTO accountlines
 +     VALUES (?,?,?,?)"
 +        );
 +        $usth->execute( $borrowernumber, $accdata->{'accountno'},
 +            $nextaccntno, $newamtos );
 +        $usth->finish;
 +    }
 +
 +    # create new line
 +    my $usth = $dbh->prepare(
 +        "INSERT INTO accountlines
    (borrowernumber, accountno,date,amount,description,accounttype,amountoutstanding)
 -  VALUES (?,?,now(),?,'Payment,thanks','Pay',?)");
 -  $usth->execute($borrowernumber,$nextaccntno,0-$data,0-$amountleft);
 -  $usth->finish;
 -  UpdateStats($branch,'payment',$data,'','','',$borrowernumber);
 -  $sth->finish;
 +  VALUES (?,?,now(),?,'Payment,thanks','Pay',?)"
 +    );
 +    $usth->execute( $borrowernumber, $nextaccntno, 0 - $data, 0 - $amountleft );
 +    $usth->finish;
 +    UpdateStats( $branch, 'payment', $data, '', '', '', $borrowernumber );
 +    $sth->finish;
  }
  
  =head2 makepayment
@@@ -149,61 -133,53 +149,61 @@@ was made
  #'
  # FIXME - I'm not at all sure about the above, because I don't
  # understand what the acct* tables in the Koha database are for.
 -sub makepayment{
 -  #here we update both the accountoffsets and the account lines
 -  #updated to check, if they are paying off a lost item, we return the item
 -  # from their card, and put a note on the item record
 -  my ($borrowernumber,$accountno,$amount,$user,$branch)=@_;
 -  my $dbh = C4::Context->dbh;
 -  # begin transaction
 -  my $nextaccntno = getnextacctno($borrowernumber);
 -  my $newamtos=0;
 -  my $sth=$dbh->prepare("SELECT * FROM accountlines WHERE  borrowernumber=? AND accountno=?");
 -  $sth->execute($borrowernumber,$accountno);
 -  my $data=$sth->fetchrow_hashref;
 -  $sth->finish;
 -
 -  $dbh->do("UPDATE  accountlines
 +sub makepayment {
 +
 +    #here we update both the accountoffsets and the account lines
 +    #updated to check, if they are paying off a lost item, we return the item
 +    # from their card, and put a note on the item record
 +    my ( $borrowernumber, $accountno, $amount, $user, $branch ) = @_;
 +    my $dbh = C4::Context->dbh;
 +
 +    # begin transaction
 +    my $nextaccntno = getnextacctno($borrowernumber);
 +    my $newamtos    = 0;
 +    my $sth =
 +      $dbh->prepare(
 +        "SELECT * FROM accountlines WHERE  borrowernumber=? AND accountno=?");
 +    $sth->execute( $borrowernumber, $accountno );
 +    my $data = $sth->fetchrow_hashref;
 +    $sth->finish;
 +
 +    $dbh->do(
 +        "UPDATE  accountlines
          SET     amountoutstanding = 0
          WHERE   borrowernumber = $borrowernumber
            AND   accountno = $accountno
 -        ");
 +        "
 +    );
  
 -#  print $updquery;
 -  $dbh->do("
 +    #  print $updquery;
 +    $dbh->do( "
          INSERT INTO     accountoffsets
                          (borrowernumber, accountno, offsetaccount,
                           offsetamount)
          VALUES          ($borrowernumber, $accountno, $nextaccntno, $newamtos)
 -        ");
 +        " );
  
 -  # create new line
 -  my $payment=0-$amount;
 -  $dbh->do("
 +    # create new line
 +    my $payment = 0 - $amount;
 +    $dbh->do( "
          INSERT INTO     accountlines
                          (borrowernumber, accountno, date, amount,
                           description, accounttype, amountoutstanding)
          VALUES          ($borrowernumber, $nextaccntno, now(), $payment,
                          'Payment,thanks - $user', 'Pay', 0)
 -        ");
 -
 -  # FIXME - The second argument to &UpdateStats is supposed to be the
 -  # branch code.
 -  # UpdateStats is now being passed $accountno too. MTJ
 -  UpdateStats($user,'payment',$amount,'','','',$borrowernumber,$accountno);
 -  $sth->finish;
 -  #check to see what accounttype
 -  if ($data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L'){
 -    returnlost($borrowernumber,$data->{'itemnumber'});
 -  }
 +        " );
 +
 +    # FIXME - The second argument to &UpdateStats is supposed to be the
 +    # branch code.
 +    # UpdateStats is now being passed $accountno too. MTJ
 +    UpdateStats( $user, 'payment', $amount, '', '', '', $borrowernumber,
 +        $accountno );
 +    $sth->finish;
 +
 +    #check to see what accounttype
 +    if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) {
 +        returnlost( $borrowernumber, $data->{'itemnumber'} );
 +    }
  }
  
  =head2 getnextacctno
@@@ -218,20 -194,18 +218,20 @@@ borrower number
  #'
  # FIXME - Okay, so what does the above actually _mean_?
  sub getnextacctno {
 -  my ($borrowernumber)=@_;
 -  my $nextaccntno = 1;
 -  my $dbh = C4::Context->dbh;
 -  my $sth = $dbh->prepare("SELECT * FROM accountlines
 +    my ($borrowernumber) = @_;
 +    my $nextaccntno      = 1;
 +    my $dbh              = C4::Context->dbh;
 +    my $sth              = $dbh->prepare(
 +        "SELECT * FROM accountlines
                                  WHERE (borrowernumber = ?)
 -                                ORDER BY accountno DESC");
 -  $sth->execute($borrowernumber);
 -  if (my $accdata=$sth->fetchrow_hashref){
 -    $nextaccntno = $accdata->{'accountno'} + 1;
 -  }
 -  $sth->finish;
 -  return($nextaccntno);
 +                                ORDER BY accountno DESC"
 +    );
 +    $sth->execute($borrowernumber);
 +    if ( my $accdata = $sth->fetchrow_hashref ) {
 +        $nextaccntno = $accdata->{'accountno'} + 1;
 +    }
 +    $sth->finish;
 +    return ($nextaccntno);
  }
  
  =head2 fixaccounts
  #'
  # FIXME - I don't understand what this function does.
  sub fixaccounts {
 -  my ($borrowernumber,$accountno,$amount)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $sth=$dbh->prepare("SELECT * FROM accountlines WHERE borrowernumber=?
 -     AND accountno=?");
 -  $sth->execute($borrowernumber,$accountno);
 -  my $data=$sth->fetchrow_hashref;
 -        # FIXME - Error-checking
 -  my $diff=$amount-$data->{'amount'};
 -  my $outstanding=$data->{'amountoutstanding'}+$diff;
 -  $sth->finish;
 -
 -  $dbh->do(<<EOT);
 +    my ( $borrowernumber, $accountno, $amount ) = @_;
 +    my $dbh = C4::Context->dbh;
 +    my $sth = $dbh->prepare(
 +        "SELECT * FROM accountlines WHERE borrowernumber=?
 +     AND accountno=?"
 +    );
 +    $sth->execute( $borrowernumber, $accountno );
 +    my $data = $sth->fetchrow_hashref;
 +
 +    # FIXME - Error-checking
 +    my $diff        = $amount - $data->{'amount'};
 +    my $outstanding = $data->{'amountoutstanding'} + $diff;
 +    $sth->finish;
 +
 +    $dbh->do(<<EOT);
          UPDATE  accountlines
          SET     amount = '$amount',
                  amountoutstanding = '$outstanding'
          WHERE   borrowernumber = $borrowernumber
            AND   accountno = $accountno
  EOT
 - }
 +}
  
  # FIXME - Never used, but not exported, either.
 -sub returnlost{
 -  my ($borrowernumber,$itemnum)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $borrower=GetMember($borrowernumber,'borrowernumber');
 -  my $sth=$dbh->prepare("UPDATE issues SET returndate=now() WHERE
 -  borrowernumber=? AND itemnumber=? AND returndate IS NULL");
 -  $sth->execute($borrowernumber,$itemnum);
 -  $sth->finish;
 -  my @datearr = localtime(time);
 -  my $date = (1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
 -  my $bor="$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}";
 -  $sth=$dbh->prepare("UPDATE items SET paidfor=? WHERE itemnumber=?");
 -  $sth->execute("Paid for by $bor $date",$itemnum);
 -  $sth->finish;
 +sub returnlost {
 +    my ( $borrowernumber, $itemnum ) = @_;
 +    my $dbh      = C4::Context->dbh;
 +    my $borrower = GetMember( $borrowernumber, 'borrowernumber' );
 +    my $sth      = $dbh->prepare(
 +        "UPDATE issues SET returndate=now() WHERE
 +  borrowernumber=? AND itemnumber=? AND returndate IS NULL"
 +    );
 +    $sth->execute( $borrowernumber, $itemnum );
 +    $sth->finish;
 +    my @datearr = localtime(time);
 +    my $date =
 +      ( 1900 + $datearr[5] ) . "-" . ( $datearr[4] + 1 ) . "-" . $datearr[3];
 +    my $bor =
 +"$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}";
 +    $sth = $dbh->prepare("UPDATE items SET paidfor=? WHERE itemnumber=?");
 +    $sth->execute( "Paid for by $bor $date", $itemnum );
 +    $sth->finish;
  }
  
  =head2 manualinvoice
@@@ -303,76 -270,57 +303,70 @@@ should be the empty string
  
  #'
  # FIXME - Okay, so what does this function do, really?
 -sub manualinvoice{
 -  my ($borrowernumber,$itemnum,$desc,$type,$amount,$user)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $notifyid=0;
 -  my $insert;
 -  $itemnum=~ s/ //g;
 -  my $accountno=getnextacctno($borrowernumber);
 -  my $amountleft=$amount;
 -
 -  if ($type eq 'CS' || $type eq 'CB' || $type eq 'CW'
 -  || $type eq 'CF' || $type eq 'CL'){
 -    my $amount2=$amount*-1;     # FIXME - $amount2 = -$amount
 -    $amountleft=fixcredit($borrowernumber,$amount2,$itemnum,$type,$user);
 -  }
 -  if ($type eq 'N'){
 -    $desc.="New Card";
 -  }
 -  if ($type eq 'F'){
 -    $desc.="Fine";
 -  }
 -  if ($type eq 'A'){
 -    $desc.="Account Management fee";
 -  }
 -  if ($type eq 'M'){
 -    $desc.="Sundry";
 -  }     
 -        
 -  if ($type eq 'L' && $desc eq ''){
 -    
 -    $desc="Lost Item";
 -  }
 -  if ($type eq 'REF'){
 -    $desc.="Cash Refund";    
 -    $amountleft=refund('',$borrowernumber,$amount);
 -  }
 -  if(($type eq 'L') or ($type eq 'F') or ($type eq 'A') or ($type eq 'N') or ($type eq 'M') ){
 -  $notifyid=1;  
 -  }
 -    
 -  if ($itemnum ne ''){
 -    $desc.=" ".$itemnum;
 -    my $sth=$dbh->prepare("INSERT INTO  accountlines
 +sub manualinvoice {
 +    my ( $borrowernumber, $itemnum, $desc, $type, $amount, $user ) = @_;
 +    my $dbh      = C4::Context->dbh;
 +    my $notifyid = 0;
 +    my $insert;
 +    $itemnum =~ s/ //g;
 +    my $accountno  = getnextacctno($borrowernumber);
 +    my $amountleft = $amount;
 +
 +    if (   $type eq 'CS'
 +        || $type eq 'CB'
 +        || $type eq 'CW'
 +        || $type eq 'CF'
 +        || $type eq 'CL' )
 +    {
 +        my $amount2 = $amount * -1;    # FIXME - $amount2 = -$amount
 +        $amountleft =
 +          fixcredit( $borrowernumber, $amount2, $itemnum, $type, $user );
 +    }
 +    if ( $type eq 'N' ) {
 +        $desc .= "New Card";
 +    }
 +    if ( $type eq 'F' ) {
 +        $desc .= "Fine";
 +    }
 +    if ( $type eq 'A' ) {
 +        $desc .= "Account Management fee";
 +    }
 +    if ( $type eq 'M' ) {
 +        $desc .= "Sundry";
 +    }
 +
 +    if ( $type eq 'L' && $desc eq '' ) {
 +
 +        $desc = "Lost Item";
 +    }
 +    if ( $type eq 'REF' ) {
 +        $desc .= "Cash Refund";
 +        $amountleft = refund( '', $borrowernumber, $amount );
 +    }
 +    if (   ( $type eq 'L' )
 +        or ( $type eq 'F' )
 +        or ( $type eq 'A' )
 +        or ( $type eq 'N' )
 +        or ( $type eq 'M' ) )
 +    {
 +        $notifyid = 1;
 +    }
 +
 +    if ( $itemnum ne '' ) {
 +        $desc .= " " . $itemnum;
 +        my $sth = $dbh->prepare(
 +            "INSERT INTO  accountlines
                          (borrowernumber, accountno, date, amount, description, accounttype, amountoutstanding, itemnumber,notify_id)
-         VALUES (?, ?, now(), ?,?, ?,?,?,?)"
-         );
- #     $sth->execute($borrowernumber, $accountno, $amount, $desc, $type, $amountleft, $data->{'itemnumber'});
-         $sth->execute( $borrowernumber, $accountno, $amount, $desc, $type,
-             $amountleft, $itemnum, $notifyid );
-     }
-     else {
-         my $sth = $dbh->prepare(
-             "INSERT INTO  accountlines
+         VALUES (?, ?, now(), ?,?, ?,?,?,?)");
+      $sth->execute($borrowernumber, $accountno, $amount, $desc, $type, $amountleft, $itemnum,$notifyid) || return $sth->errstr;
+   } else {
+     my $sth=$dbh->prepare("INSERT INTO  accountlines
              (borrowernumber, accountno, date, amount, description, accounttype, amountoutstanding,notify_id)
 -            VALUES (?, ?, now(), ?, ?, ?, ?,?)");
 -    $sth->execute($borrowernumber, $accountno, $amount, $desc, $type, $amountleft,$notifyid);
 -  }
 +            VALUES (?, ?, now(), ?, ?, ?, ?,?)"
 +        );
 +        $sth->execute( $borrowernumber, $accountno, $amount, $desc, $type,
 +            $amountleft, $notifyid );
 +    }
  }
  
  =head2 fixcredit
  
  =cut
  
 -sub fixcredit{
 -  #here we update both the accountoffsets and the account lines
 -  my ($borrowernumber,$data,$barcode,$type,$user)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $newamtos = 0;
 -  my $accdata = "";
 -  my $amountleft = $data;
 -  if ($barcode ne ''){
 -    my $item=GetBiblioFromItemNumber('',$barcode);
 -    my $nextaccntno = getnextacctno($borrowernumber);
 -    my $query="SELECT * FROM accountlines WHERE (borrowernumber=?
 +sub fixcredit {
 +
 +    #here we update both the accountoffsets and the account lines
 +    my ( $borrowernumber, $data, $barcode, $type, $user ) = @_;
 +    my $dbh        = C4::Context->dbh;
 +    my $newamtos   = 0;
 +    my $accdata    = "";
 +    my $amountleft = $data;
 +    if ( $barcode ne '' ) {
 +        my $item        = GetBiblioFromItemNumber( '', $barcode );
 +        my $nextaccntno = getnextacctno($borrowernumber);
 +        my $query       = "SELECT * FROM accountlines WHERE (borrowernumber=?
      AND itemnumber=? AND amountoutstanding > 0)";
 -    if ($type eq 'CL'){
 -      $query.=" AND (accounttype = 'L' OR accounttype = 'Rep')";
 -    } elsif ($type eq 'CF'){
 -      $query.=" AND (accounttype = 'F' OR accounttype = 'FU' OR
 +        if ( $type eq 'CL' ) {
 +            $query .= " AND (accounttype = 'L' OR accounttype = 'Rep')";
 +        }
 +        elsif ( $type eq 'CF' ) {
 +            $query .= " AND (accounttype = 'F' OR accounttype = 'FU' OR
        accounttype='Res' OR accounttype='Rent')";
 -    } elsif ($type eq 'CB'){
 -      $query.=" and accounttype='A'";
 -    }
 -#    print $query;
 -    my $sth=$dbh->prepare($query);
 -    $sth->execute($borrowernumber,$item->{'itemnumber'});
 -    $accdata=$sth->fetchrow_hashref;
 -    $sth->finish;
 -    if ($accdata->{'amountoutstanding'} < $amountleft) {
 -        $newamtos = 0;
 -        $amountleft -= $accdata->{'amountoutstanding'};
 -     }  else {
 -        $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
 -        $amountleft = 0;
 -     }
 -          my $thisacct = $accdata->{accountno};
 -     my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
 -     WHERE (borrowernumber = ?) AND (accountno=?)");
 -     $usth->execute($newamtos,$borrowernumber,$thisacct);
 -     $usth->finish;
 -     $usth = $dbh->prepare("INSERT INTO accountoffsets
 +        }
 +        elsif ( $type eq 'CB' ) {
 +            $query .= " and accounttype='A'";
 +        }
 +
 +        #    print $query;
 +        my $sth = $dbh->prepare($query);
 +        $sth->execute( $borrowernumber, $item->{'itemnumber'} );
 +        $accdata = $sth->fetchrow_hashref;
 +        $sth->finish;
 +        if ( $accdata->{'amountoutstanding'} < $amountleft ) {
 +            $newamtos = 0;
 +            $amountleft -= $accdata->{'amountoutstanding'};
 +        }
 +        else {
 +            $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
 +            $amountleft = 0;
 +        }
 +        my $thisacct = $accdata->{accountno};
 +        my $usth     = $dbh->prepare(
 +            "UPDATE accountlines SET amountoutstanding= ?
 +     WHERE (borrowernumber = ?) AND (accountno=?)"
 +        );
 +        $usth->execute( $newamtos, $borrowernumber, $thisacct );
 +        $usth->finish;
 +        $usth = $dbh->prepare(
 +            "INSERT INTO accountoffsets
       (borrowernumber, accountno, offsetaccount,  offsetamount)
 -     VALUES (?,?,?,?)");
 -     $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos);
 -     $usth->finish;
 -  }
 -  # begin transaction
 -  my $nextaccntno = getnextacctno($borrowernumber);
 -  # get lines with outstanding amounts to offset
 -  my $sth = $dbh->prepare("SELECT * FROM accountlines
 +     VALUES (?,?,?,?)"
 +        );
 +        $usth->execute( $borrowernumber, $accdata->{'accountno'},
 +            $nextaccntno, $newamtos );
 +        $usth->finish;
 +    }
 +
 +    # begin transaction
 +    my $nextaccntno = getnextacctno($borrowernumber);
 +
 +    # get lines with outstanding amounts to offset
 +    my $sth = $dbh->prepare(
 +        "SELECT * FROM accountlines
    WHERE (borrowernumber = ?) AND (amountoutstanding >0)
 -  ORDER BY date");
 -  $sth->execute($borrowernumber);
 -#  print $query;
 -  # offset transactions
 -  while (($accdata=$sth->fetchrow_hashref) and ($amountleft>0)){
 -     if ($accdata->{'amountoutstanding'} < $amountleft) {
 -        $newamtos = 0;
 -        $amountleft -= $accdata->{'amountoutstanding'};
 -     }  else {
 -        $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
 -        $amountleft = 0;
 -     }
 -     my $thisacct = $accdata->{accountno};
 -     my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
 -     WHERE (borrowernumber = ?) AND (accountno=?)");
 -     $usth->execute($newamtos,$borrowernumber,$thisacct);
 -     $usth->finish;
 -     $usth = $dbh->prepare("INSERT INTO accountoffsets
 +  ORDER BY date"
 +    );
 +    $sth->execute($borrowernumber);
 +
 +    #  print $query;
 +    # offset transactions
 +    while ( ( $accdata = $sth->fetchrow_hashref ) and ( $amountleft > 0 ) ) {
 +        if ( $accdata->{'amountoutstanding'} < $amountleft ) {
 +            $newamtos = 0;
 +            $amountleft -= $accdata->{'amountoutstanding'};
 +        }
 +        else {
 +            $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
 +            $amountleft = 0;
 +        }
 +        my $thisacct = $accdata->{accountno};
 +        my $usth     = $dbh->prepare(
 +            "UPDATE accountlines SET amountoutstanding= ?
 +     WHERE (borrowernumber = ?) AND (accountno=?)"
 +        );
 +        $usth->execute( $newamtos, $borrowernumber, $thisacct );
 +        $usth->finish;
 +        $usth = $dbh->prepare(
 +            "INSERT INTO accountoffsets
       (borrowernumber, accountno, offsetaccount,  offsetamount)
 -     VALUE (?,?,?,?)");
 -     $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos);
 -     $usth->finish;
 -  }
 -  $sth->finish;
 -  $type="Credit ".$type;
 -  UpdateStats($user,$type,$data,$user,'','',$borrowernumber);
 -  $amountleft*=-1;
 -  return($amountleft);
 +     VALUE (?,?,?,?)"
 +        );
 +        $usth->execute( $borrowernumber, $accdata->{'accountno'},
 +            $nextaccntno, $newamtos );
 +        $usth->finish;
 +    }
 +    $sth->finish;
 +    $type = "Credit " . $type;
 +    UpdateStats( $user, $type, $data, $user, '', '', $borrowernumber );
 +    $amountleft *= -1;
 +    return ($amountleft);
  
  }
  
  
  =cut 
  
 -sub refund{
 -  #here we update both the accountoffsets and the account lines
 -  my ($borrowernumber,$data)=@_;
 -  my $dbh = C4::Context->dbh;
 -  my $newamtos = 0;
 -  my $accdata = "";
 -  my $amountleft = $data *-1;
 -
 -  # begin transaction
 -  my $nextaccntno = getnextacctno($borrowernumber);
 -  # get lines with outstanding amounts to offset
 -  my $sth = $dbh->prepare("SELECT * FROM accountlines
 +sub refund {
 +
 +    #here we update both the accountoffsets and the account lines
 +    my ( $borrowernumber, $data ) = @_;
 +    my $dbh        = C4::Context->dbh;
 +    my $newamtos   = 0;
 +    my $accdata    = "";
 +    my $amountleft = $data * -1;
 +
 +    # begin transaction
 +    my $nextaccntno = getnextacctno($borrowernumber);
 +
 +    # get lines with outstanding amounts to offset
 +    my $sth = $dbh->prepare(
 +        "SELECT * FROM accountlines
    WHERE (borrowernumber = ?) AND (amountoutstanding<0)
 -  ORDER BY date");
 -  $sth->execute($borrowernumber);
 -#  print $amountleft;
 -  # offset transactions
 -  while (($accdata=$sth->fetchrow_hashref) and ($amountleft<0)){
 -     if ($accdata->{'amountoutstanding'} > $amountleft) {
 -        $newamtos = 0;
 -        $amountleft -= $accdata->{'amountoutstanding'};
 -     }  else {
 -        $newamtos = $accdata->{'amountoutstanding'} - $amountleft;
 -        $amountleft = 0;
 -     }
 -#     print $amountleft;
 -     my $thisacct = $accdata->{accountno};
 -     my $usth = $dbh->prepare("UPDATE accountlines SET amountoutstanding= ?
 -     WHERE (borrowernumber = ?) AND (accountno=?)");
 -     $usth->execute($newamtos,$borrowernumber,$thisacct);
 -     $usth->finish;
 -     $usth = $dbh->prepare("INSERT INTO accountoffsets
 +  ORDER BY date"
 +    );
 +    $sth->execute($borrowernumber);
 +
 +    #  print $amountleft;
 +    # offset transactions
 +    while ( ( $accdata = $sth->fetchrow_hashref ) and ( $amountleft < 0 ) ) {
 +        if ( $accdata->{'amountoutstanding'} > $amountleft ) {
 +            $newamtos = 0;
 +            $amountleft -= $accdata->{'amountoutstanding'};
 +        }
 +        else {
 +            $newamtos   = $accdata->{'amountoutstanding'} - $amountleft;
 +            $amountleft = 0;
 +        }
 +
 +        #     print $amountleft;
 +        my $thisacct = $accdata->{accountno};
 +        my $usth     = $dbh->prepare(
 +            "UPDATE accountlines SET amountoutstanding= ?
 +     WHERE (borrowernumber = ?) AND (accountno=?)"
 +        );
 +        $usth->execute( $newamtos, $borrowernumber, $thisacct );
 +        $usth->finish;
 +        $usth = $dbh->prepare(
 +            "INSERT INTO accountoffsets
       (borrowernumber, accountno, offsetaccount,  offsetamount)
 -     VALUES (?,?,?,?)");
 -     $usth->execute($borrowernumber,$accdata->{'accountno'},$nextaccntno,$newamtos);
 -     $usth->finish;
 -  }
 -  $sth->finish;
 -  return($amountleft);
 +     VALUES (?,?,?,?)"
 +        );
 +        $usth->execute( $borrowernumber, $accdata->{'accountno'},
 +            $nextaccntno, $newamtos );
 +        $usth->finish;
 +    }
 +    $sth->finish;
 +    return ($amountleft);
  }
  
 -
 -END { }       # module clean-up code here (global destructor)
 +END { }    # module clean-up code here (global destructor)
  
  1;
  __END__
diff --combined C4/Auth.pm
@@@ -22,8 -22,6 +22,8 @@@ package C4::Auth
  
  use strict;
  use Digest::MD5 qw(md5_base64);
 +use CGI::Session;
 +
  
  require Exporter;
  use C4::Context;
@@@ -54,12 -52,15 +54,15 @@@ C4::Auth - Authenticates Koha user
    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 => 'utf-8',
  =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.
@@@ -216,25 -220,25 +222,25 @@@ sub get_template_and_user 
      }
      if ( $in->{'type'} eq "intranet" ) {
          $template->param(
-             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"),
-             AutoLocation       => C4::Context->preference("AutoLocation"),
-             hide_marc          => C4::Context->preference("hide_marc"),
-             patronimages       => C4::Context->preference("patronimages"),
+             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"),
+             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 {
          $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"),
+             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,
          );
      }
@@@ -389,32 -393,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;
              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;
                  $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;
                  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;
          }
      }
      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;
              }
                          $branchname    = $branches->{$br}->{'branchname'};
                      }
                  }
 -                my $hash = C4::Context::set_userenv(
 -                    $borrowernumber, $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'),
 -                    "",
 -                    "NO_LIBRARY_SET",
 -                    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) {
      # 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...
          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   => 'utf-8',
          -cookie => $cookie
@@@ -1117,7 -1117,7 +1117,7 @@@ CREATE TABLE `marc_subfield_structure` 
    `frameworkcode` varchar(4) NOT NULL default '',
    `seealso` varchar(255) default NULL,
    `link` varchar(80) default NULL,
-   `defaultvalue` text,
+   `defaultvalue` text default NULL,
    PRIMARY KEY  (`frameworkcode`,`tagfield`,`tagsubfield`),
    KEY `kohafield_2` (`kohafield`),
    KEY `tab` (`frameworkcode`,`tab`),
@@@ -1374,11 -1374,13 +1374,11 @@@ CREATE TABLE `sessionqueries` 
  -- Table structure for table `sessions`
  --
  
 -DROP TABLE IF EXISTS `sessions`;
 -CREATE TABLE `sessions` (
 -  `sessionID` varchar(255) NOT NULL default '',
 -  `userid` varchar(255) default NULL,
 -  `ip` varchar(16) default NULL,
 -  `lasttime` int(11) default NULL,
 -  PRIMARY KEY  (`sessionID`)
 +DROP TABLE IF EXISTS sessions;                         
 +CREATE TABLE sessions (
 +  `id` char(32) NOT NULL,
 +  `a_session` text NOT NULL,
 +  UNIQUE KEY id (id)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  
  --
diff --combined opac/opac-rss.pl
@@@ -1,16 -1,5 +1,5 @@@
  #!/usr/bin/perl
  
- use strict;    # always use
- use XML::RSS;
- use Digest::MD5 qw(md5_base64);
- use POSIX qw(ceil floor);
- use Date::Calc qw(Today_and_Now Delta_YMDHMS);
- use C4::Context;
- use C4::Search;
- use C4::Koha;
- use C4::Biblio;
  # Copyright 2007 Paul POULAIN
  #
  # This file is part of Koha
  # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
  # Suite 330, Boston, MA  02111-1307 USA
  
+ use strict;    # always use
+ use XML::RSS;
+ use Digest::MD5 qw(md5_base64);
+ use POSIX qw(ceil floor);
+ use Date::Calc qw(Today_and_Now Delta_YMDHMS);
+ use C4::Context;
+ use C4::Search;
+ use C4::Koha;
+ use C4::Biblio;
  =head1 NAME
  
- opac-search.pl : script to have RSS feeds automatically on each OPAC search
+ opac-rss.pl : script to have RSS feeds automatically on each OPAC search
  
  =head1 SYNOPSIS
  
@@@ -154,9 -154,6 +154,5 @@@ if ($RDF_update_needed) 
      # save the rss feed.
      $rss->save("rss/$filename");
  }
- else {
--
-     #     warn "RDF CACHE used"
- }
  print $cgi->header( -type => "application/rss+xml" );
  print $rss->as_string;