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)
C4/Accounts.pm
C4/Auth.pm
about.pl
help.pl
installer/kohastructure.sql
koha-tmpl/intranet-tmpl/prog/en/includes/action-catalogue.inc
mainpage.pl
opac/opac-ics.pl [new file with mode: 0755]
opac/opac-logout.pl
opac/opac-main.pl
opac/opac-rss.pl

index 82262f2..d47c438 100755 (executable)
@@ -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
 
@@ -49,10 +51,9 @@ patron.
 
 =cut
 
-@ISA = qw(Exporter);
+@ISA    = qw(Exporter);
 @EXPORT = qw(&recordpayment &fixaccounts &makepayment &manualinvoice
-&getnextacctno &reconcileaccount);
-
+  &getnextacctno &reconcileaccount);
 
 =head2 recordpayment
 
@@ -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
@@ -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
@@ -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
@@ -217,41 +243,48 @@ sub getnextacctno {
 #'
 # 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
@@ -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, $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
@@ -332,82 +378,103 @@ sub manualinvoice{
 
 =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);
 
 }
 
@@ -417,49 +484,60 @@ sub fixcredit{
 
 =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__
index ca99f81..14ae8da 100644 (file)
@@ -22,6 +22,8 @@ package C4::Auth;
 
 use strict;
 use Digest::MD5 qw(md5_base64);
+use CGI::Session;
+
 
 require Exporter;
 use C4::Context;
@@ -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;
@@ -431,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;
@@ -452,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;
@@ -465,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;
@@ -483,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;
             }
@@ -580,39 +565,34 @@ sub checkauth {
                         $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) {
@@ -626,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...
@@ -684,11 +656,8 @@ 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   => 'utf-8',
         -cookie => $cookie
index 6e411c0..99b9fd5 100755 (executable)
--- a/about.pl
+++ b/about.pl
@@ -1,5 +1,5 @@
-#!/usr/bin/perl
-
+ö#!/usr/bin/perl
 # This file is part of Koha.
 #
 # Koha is free software; you can redistribute it and/or modify it under the
 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307 USA
 
-
 use strict;
 require Exporter;
 
-use C4::Output;  # contains gettemplate
+use C4::Output;    # contains gettemplate
 use C4::Auth;
 use C4::Context;
 use CGI;
@@ -27,50 +26,52 @@ use LWP::Simple;
 use XML::Simple;
 
 my $query = new CGI;
-my ($template, $loggedinuser, $cookie)
-    = get_template_and_user({template_name => "about.tmpl",
-                            query => $query,
-                            type => "intranet",
-                            authnotrequired => 0,
-                            flagsrequired => {parameters => 1},
-                            debug => 1,
-                            });
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {
+        template_name   => "about.tmpl",
+        query           => $query,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired   => { parameters => 1 },
+        debug           => 1,
+    }
+);
 
-my $kohaVersion = C4::Context->config("kohaversion");
-my $osVersion = `uname -a`;
-my $perlVersion = $];
-my $mysqlVersion = `mysql -V`;
-my $apacheVersion =  `httpd -v`;
-$apacheVersion =  `httpd2 -v` unless $apacheVersion;
+my $kohaVersion   = C4::Context->config("kohaversion");
+my $osVersion     = `uname -a`;
+my $perlVersion   = $];
+my $mysqlVersion  = `mysql -V`;
+my $apacheVersion = `httpd -v`;
+$apacheVersion = `httpd2 -v` unless $apacheVersion;
 my $zebraVersion = `zebraidx -V`;
+
 # $apacheVersion =  (`/usr/sbin/apache2 -V`)[0];
 
 $template->param(
-                                       kohaVersion => $kohaVersion,
-                                       osVersion          => $osVersion,
-                                       perlVersion        => $perlVersion,
-                                       mysqlVersion       => $mysqlVersion,
-                                       apacheVersion      => $apacheVersion,
-                                        zebraVersion       => $zebraVersion,
-               );
-
+    kohaVersion   => $kohaVersion,
+    osVersion     => $osVersion,
+    perlVersion   => $perlVersion,
+    mysqlVersion  => $mysqlVersion,
+    apacheVersion => $apacheVersion,
+    zebraVersion  => $zebraVersion,
+);
 my @component_names =
     qw/MARC::File::XML   MARC::Charset     Class::Accessor
        LWP::Simple       XML::Simple       Net::Z3950
        Event             Net::LDAP         PDF::API2
        Mail::Sendmail    MARC::Record      Digest::MD5
        HTML::Template    DBD::mysql        Date::Manip
-       DBI               Smart::Comments   Net::Z3950::ZOOM
+       DBI               Net::Z3950::ZOOM
        Date::Calc
       /;
 
 my @components = ();
 
-foreach my $component (sort @component_names) {
+foreach my $component ( sort @component_names ) {
     my $version;
-    if (eval "require $component") {
+    if ( eval "require $component" ) {
         $version = $component->VERSION;
-        if ($version eq '' ) {
+        if ( $version eq '' ) {
             $version = 'unknown';
         }
     }
@@ -78,7 +79,7 @@ foreach my $component (sort @component_names) {
         $version = 'module is missing';
     }
 
-    push (
+    push(
         @components,
         {
             name    => $component,
@@ -87,8 +88,6 @@ foreach my $component (sort @component_names) {
     );
 }
 
-$template->param(
-    components => \@components
-);
+$template->param( components => \@components );
 
 output_html_with_http_headers $query, $cookie, $template->output;
diff --git a/help.pl b/help.pl
index 0917f9b..0a76f6e 100755 (executable)
--- a/help.pl
+++ b/help.pl
@@ -2,26 +2,26 @@
 
 # Copyright 2006 Katipo Communications
 #
-# This file is part of Koha.                                                    
-#                                                                               
-# Koha is free software; you can redistribute it and/or modify it under the     
-# terms of the GNU General Public License as published by the Free Software     
-# Foundation; either version 2 of the License, or (at your option) any later    
-# version.                                                                      
-#                                                                               
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY       
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.   
-#                                                                               
-# You should have received a copy of the GNU General Public License along with  
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,   
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307 USA
 
-
 use strict;
 require Exporter;
-use C4::Output;  # contains gettemplate
+use C4::Output;    # contains gettemplate
 use C4::Output;
+
 # use C4::Auth;
 use C4::Context;
 use CGI;
@@ -30,40 +30,45 @@ my $query = new CGI;
 
 # find the script that called the online help using the CGI referer()
 
-my $refer  = $query->referer();
+my $refer = $query->referer();
+
 # workaround for popup not functioning correctly in IE
 my $referurl = $query->param('url');
-if($referurl){
+if ($referurl) {
     $refer = $query->param('url');
 }
 
 $refer =~ /.*koha\/(.*)\.pl.*/;
 my $from = "help/$1.tmpl";
 
-my $template = gethelptemplate($from,"intranet");
+my $template = gethelptemplate( $from, "intranet" );
+
 # my $template
 output_html_with_http_headers $query, "", $template->output;
 
-
 sub gethelptemplate {
-       my ($tmplbase) = @_;
+    my ($tmplbase) = @_;
 
-       my $htdocs;
-               $htdocs = C4::Context->config('intrahtdocs');
-       my ($theme, $lang) = themelanguage($htdocs, $tmplbase, "intranet");
-       unless (-e "$htdocs/$theme/$lang/$tmplbase") {
-               $tmplbase="help/nohelp.tmpl";
-               ($theme, $lang) = themelanguage($htdocs, $tmplbase, "intranet");
-       }
-       my $template = HTML::Template->new(filename      => "$htdocs/$theme/$lang/$tmplbase",
-                                  die_on_bad_params => 0,
-                                  global_vars       => 1,
-                                  path              => ["$htdocs/$theme/$lang/includes"]);
+    my $htdocs;
+    $htdocs = C4::Context->config('intrahtdocs');
+    my ( $theme, $lang ) = themelanguage( $htdocs, $tmplbase, "intranet" );
+    unless ( -e "$htdocs/$theme/$lang/$tmplbase" ) {
+        $tmplbase = "help/nohelp.tmpl";
+        ( $theme, $lang ) = themelanguage( $htdocs, $tmplbase, "intranet" );
+    }
+    my $template = HTML::Template->new(
+        filename          => "$htdocs/$theme/$lang/$tmplbase",
+        die_on_bad_params => 0,
+        global_vars       => 1,
+        path              => ["$htdocs/$theme/$lang/includes"]
+    );
 
-       # XXX temporary patch for Bug 182 for themelang
-       $template->param(themelang => '/intranet-tmpl' . "/$theme/$lang",
-                                                       interface => '/intranet-tmpl',
-                                                       theme => $theme,
-                                                       lang => $lang);
-       return $template;
+    # XXX temporary patch for Bug 182 for themelang
+    $template->param(
+        themelang => '/intranet-tmpl' . "/$theme/$lang",
+        interface => '/intranet-tmpl',
+        theme     => $theme,
+        lang      => $lang
+    );
+    return $template;
 }
index 561a6e2..144e7d5 100644 (file)
@@ -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;
 
 --
index 781514d..33791aa 100644 (file)
@@ -47,7 +47,7 @@
                 <!-- /TMPL_IF -->
                 
                 <a href="/cgi-bin/koha/catalogue/issuehistory.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&title=<!-- TMPL_VAR NAME="title"-->&author=<!-- TMPL_VAR NAME="author"-->" >
-                    Issue history
+                    Circulation history
                 </a>
   
                 <!-- TMPL_IF NAME="CAN_user_parameters"-->
index 057cc7b..cdd6a9a 100755 (executable)
@@ -29,8 +29,10 @@ my $query     = new CGI;
 my $authtypes = getauthtypes;
 my @authtypesloop;
 
-foreach my $thisauthtype ( sort { $authtypes->{$a} <=> $authtypes->{$b} }
-    keys %$authtypes )
+foreach my $thisauthtype (
+    sort { $authtypes->{$a} <=> $authtypes->{$b} }
+    keys %$authtypes
+  )
 {
     my %row = (
         value        => $thisauthtype,
@@ -46,9 +48,9 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
         type            => "intranet",
         authnotrequired => 0,
         flagsrequired   => {
-        catalogue        => 1,
-        circulate        => 1,
-        borrowers        => 1,
+            catalogue => 1,
+            circulate => 1,
+            borrowers => 1,
         },
     }
 );
@@ -60,7 +62,7 @@ $template->param(
     authtypesloop => \@authtypesloop
 );
 
-my $all_koha_news = &GetNewsToDisplay("koha");
+my $all_koha_news   = &GetNewsToDisplay("koha");
 my $koha_news_count = scalar @$all_koha_news;
 
 $template->param(
diff --git a/opac/opac-ics.pl b/opac/opac-ics.pl
new file mode 100755 (executable)
index 0000000..ec03b70
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/perl
+
+# Copyright 2007 Liblime Ltd
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA  02111-1307 USA
+
+# This script builds an ICalendar file (rfc 2445) for use in programs such as Ical
+
+use strict;
+use CGI;
+use Data::ICal;
+use Data::ICal::Entry::Event;
+use Date::ICal;
+use Date::Calc qw (Parse_Date);
+
+use C4::Auth;
+use C4::Koha;
+use C4::Circulation::Circ2;
+use C4::Date;
+
+my $query = new CGI;
+my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
+    {
+        template_name   => "opac-user.tmpl",
+        query           => $query,
+        type            => "opac",
+        authnotrequired => 0,
+        flagsrequired   => { borrow => 1 },
+        debug           => 1,
+    }
+);
+
+# get borrower information ....
+my ( $borr, $flags ) = getpatroninformation( undef, $borrowernumber );
+
+# Create Calendar
+my $calendar = Data::ICal->new();
+
+# get issued items ....
+my $issues = getissues($borr);
+
+foreach my $key ( keys %$issues ) {
+    my $issue  = $issues->{$key};
+    my $vevent = Data::ICal::Entry::Event->new();
+    my ($year,$month,$day)=Parse_Date($issue->{'date_due'});
+    ($year,$month,$day)=split /-|\/|\.|:/,$issue->{'date_due'} unless ($year && $month);
+#    Decode_Date_EU2($string))
+    my $datestart = Date::ICal->new( 
+       day => $day, 
+       month => $month, 
+       year => $year,
+       hour => 9,
+       min => 0,
+       sec => 0
+    )->ical;
+    my $dateend = Date::ICal->new( 
+       day => $day, 
+       month => $month, 
+       year => $year,
+       hour => 10,
+       min => 0,
+       sec => 0
+    )->ical;
+    $vevent->add_properties(
+        summary => "$issue->{'title'} Due",
+        description =>
+"Your copy of $issue->{'title'} barcode $issue->{'barcode'} is due back at the library today",
+        dtstart => $datestart,
+       dtend => $dateend,
+    );
+    $calendar->add_entry($vevent);
+}
+
+print $query->header(
+    -type        => 'application/octet-stream',
+    -attachment => 'koha.ics'
+);
+
+
+print $calendar->as_string;
index b73ea3c..1a877e6 100755 (executable)
@@ -19,9 +19,9 @@ use CGI;
 use C4::Context;
 use C4::Output;
 
-my $query = new CGI;
+my $query     = new CGI;
 my $sessionID = $query->cookie('sessionID');
-my $dbh = C4::Context->dbh;
+my $dbh       = C4::Context->dbh;
 
 # Check that this is the ip that created the session before deleting it
 my $sth = $dbh->prepare("select userid,ip from sessions where sessionID=?");
index e878d0f..cc42d1e 100755 (executable)
@@ -23,11 +23,11 @@ use CGI;
 use C4::Auth;    # get_template_and_user
 use C4::Output;
 use C4::BookShelves;
-use C4::Languages;           # getTranslatedLanguages
-use C4::Branch;         # GetBranches
-use C4::Members;        # GetMember
-use C4::NewsChannels;   # get_opac_news
-use C4::Acquisition;    # GetRecentAcqui
+use C4::Languages;       # getTranslatedLanguages
+use C4::Branch;          # GetBranches
+use C4::Members;         # GetMember
+use C4::NewsChannels;    # get_opac_news
+use C4::Acquisition;     # GetRecentAcqui
 
 my $input = new CGI;
 my $dbh   = C4::Context->dbh;
@@ -44,52 +44,59 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
     }
 );
 
-if($limit) {
+if ($limit) {
     my $recentacquiloop = GetRecentAcqui($limit);
-#     warn Data::Dumper::Dumper($recentacquiloop);
-    $template->param(
-        recentacquiloop => $recentacquiloop,
-    );
+
+    #     warn Data::Dumper::Dumper($recentacquiloop);
+    $template->param( recentacquiloop => $recentacquiloop, );
 }
 
 # SearchMyLibraryFirst
-if (C4::Context->preference("SearchMyLibraryFirst")){
-  if (C4::Context->userenv){
-  my $branches = GetBranches();
-  my @branchloop;  
-  
-  foreach my $thisbranch (keys %$branches) {
-        my $selected = 1 if (C4::Context->userenv && ($thisbranch eq C4::Context->userenv->{branch}));
+if ( C4::Context->preference("SearchMyLibraryFirst") ) {
+    if ( C4::Context->userenv ) {
+        my $branches = GetBranches();
+        my @branchloop;
+
+        foreach my $thisbranch ( keys %$branches ) {
+            my $selected = 1
+              if ( C4::Context->userenv
+                && ( $thisbranch eq C4::Context->userenv->{branch} ) );
+
 #         warn $thisbranch;
 #         warn C4::Context->userenv;
 #         warn C4::Context->userenv->{branch};
 #         warn " => ".C4::Context->userenv && ($thisbranch eq C4::Context->userenv->{branch});
-        my %row =(value => $thisbranch,
-                                selected => $selected,
-                                branchname => $branches->{$thisbranch}->{'branchname'},
-                        );
-        push @branchloop, \%row;
-  }
-    $template->param("mylibraryfirst"=>1,branchloop=>\@branchloop);
-  } else {
-    $template->param("mylibraryfirst"=>0)
-   }
+            my %row = (
+                value      => $thisbranch,
+                selected   => $selected,
+                branchname => $branches->{$thisbranch}->{'branchname'},
+            );
+            push @branchloop, \%row;
+        }
+        $template->param( "mylibraryfirst" => 1, branchloop => \@branchloop );
+    }
+    else {
+        $template->param( "mylibraryfirst" => 0 );
+    }
 }
 
-    my $borrower = GetMember( $borrowernumber,'borrowernumber' );
+my $borrower = GetMember( $borrowernumber, 'borrowernumber' );
 my @languages;
-my $counter = 0;
+my $counter   = 0;
 my $langavail = getTranslatedLanguages('opac');
-foreach my $language ( @$langavail ) {
-    #   next if $currently_selected_languages->{$language};
-       #   FIXME: could incorporate language_name and language_locale_name for better display
-    push @languages, { language => $language->{'language_code'}, counter => $counter };
+foreach my $language (@$langavail) {
+
+#   next if $currently_selected_languages->{$language};
+#   FIXME: could incorporate language_name and language_locale_name for better display
+    push @languages,
+      { language => $language->{'language_code'}, counter => $counter };
     $counter++;
 }
 
 # Template params
 if ( $counter > 1 ) {
-    $template->param(languages => \@languages) if C4::Context->preference('opaclanguagesdisplay');
+    $template->param( languages => \@languages )
+      if C4::Context->preference('opaclanguagesdisplay');
 }
 
 $template->param(
@@ -99,11 +106,11 @@ $template->param(
 
 # display news
 # use cookie setting for language, bug default to syspref if it's not set
-my $news_lang = $input->cookie('KohaOpacLanguage') || C4::Context->preference('opaclanguages');
-my  $all_koha_news  = &GetNewsToDisplay( $news_lang );
+my $news_lang = $input->cookie('KohaOpacLanguage')
+  || C4::Context->preference('opaclanguages');
+my $all_koha_news   = &GetNewsToDisplay($news_lang);
 my $koha_news_count = scalar @$all_koha_news;
 
-
 $template->param(
     koha_news       => $all_koha_news,
     koha_news_count => $koha_news_count
index fc625d3..c7b463e 100755 (executable)
@@ -154,6 +154,5 @@ if ($RDF_update_needed) {
     # save the rss feed.
     $rss->save("rss/$filename");
 }
-
 print $cgi->header( -type => "application/rss+xml" );
 print $rss->as_string;