Adding page to display log views.
authorhdl <hdl>
Wed, 20 Jul 2005 16:09:03 +0000 (16:09 +0000)
committerhdl <hdl>
Wed, 20 Jul 2005 16:09:03 +0000 (16:09 +0000)
can be called by admin/viewlog.pl
Works with C4/Log.pm
uses action_logs table

C4/Log.pm
admin/viewlog.pl [new file with mode: 0755]
koha-tmpl/intranet-tmpl/default/en/parameters/viewlog.tmpl [new file with mode: 0644]

index 825aa14..5d9ba93 100644 (file)
--- a/C4/Log.pm
+++ b/C4/Log.pm
@@ -49,7 +49,7 @@ The functions in this module perform various functions in order to log all the o
 =cut
 
 @ISA = qw(Exporter);
-@EXPORT = qw(&logaction &logstatus);
+@EXPORT = qw(&logaction &logstatus &displaylog);
 
 =item logaction
 
@@ -95,13 +95,35 @@ sub displaylog{
   my ($modulename, @filters)=@_;
        my $dbh = C4::Context->dbh;
        my $strsth;
-       if ($modulename eq "acqui.simple"){
-               $strsth="select action_logs.timestamp, action_logs.action, borrowers.cardnumber, borrowers.surname, borrowers.firstname, borrowers.userid,";
+       if ($modulename eq "catalogue"){
+               $strsth="select action_logs.timestamp, action_logs.action, action_logs.info, borrowers.cardnumber, borrowers.surname, borrowers.firstname, borrowers.userid,";
+               $strsth .= "biblio.biblionumber, biblio.title, biblio.author" ;#if ($modulename eq "acqui.simple");
+               $strsth .= " FROM borrowers,action_logs ";
+               $strsth .= ",biblio " ;#if ($modulename eq "acqui.simple");
+       
+               $strsth .=" WHERE borrowers.borrowernumber=action_logs.user";
+               $strsth .=" AND action_logs.module = 'acqui.simple' AND action_logs.object=biblio.biblionumber ";# if ($modulename eq "acqui.simple");
+               if (@filters){
+                       foreach my $filter (@filters){
+                               if ($filter->{name} =~ /user/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND borrowers.surname like ".$filter->{value};
+                               }elsif ($filter->{name} =~ /title/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND biblio.title like ".$filter->{value};
+                               }elsif ($filter->{name} =~ /author/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND biblio.author like ".$filter->{value};
+                               }
+                       }
+               }
+       } elsif ($modulename eq "acqui")  {
+               $strsth="select action_logs.timestamp, action_logs.action, action_logs.info, borrowers.cardnumber, borrowers.surname, borrowers.firstname, borrowers.userid,";
                $strsth .= "biblio.biblionumber, biblio.title, biblio.author" ;#if ($modulename eq "acqui.simple");
                $strsth .= "FROM borrowers,action_logs ";
-               $strsth .= ",biblio" ;#if ($modulename eq "acqui.simple");
+               $strsth .= ",biblio " ;#if ($modulename eq "acqui.simple");
        
-               $strsth .="WHERE borrowers.borrowernumber=action_logs.user";
+               $strsth .=" WHERE borrowers.borrowernumber=action_logs.user";
                $strsth .= "AND action_logs.module = 'acqui.simple' AND action_logs.object=biblio.biblionumber ";# if ($modulename eq "acqui.simple");
                if (@filters){
                        foreach my $filter (@filters){
@@ -117,20 +139,46 @@ sub displaylog{
                                }
                        }
                }
-       } elsif ($modulename eq "acqui")  {
-       } elsif ($modulename eq "circ")   {
        } elsif ($modulename eq "members"){
+               $strsth="select action_logs.timestamp, action_logs.action, action_logs.info, borrowers.cardnumber, borrowers.surname, borrowers.firstname, borrowers.userid,";
+               $strsth .= "bor2.cardnumber, bor2.surname, bor2.firstname, bor2.userid,";
+               $strsth .= "FROM borrowers,action_logs,borrowers as bor2 ";
+       
+               $strsth .=" WHERE borrowers.borrowernumber=action_logs.user";
+               $strsth .= "AND action_logs.module = 'members' AND action_logs.object=bor2.borrowernumber ";# if ($modulename eq "acqui.simple");
+               if (@filters){
+                       foreach my $filter (@filters){
+                               if ($filter->{name} =~ /user/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND borrowers.surname like ".$filter->{value};
+                               }elsif ($filter->{name} =~ /surname/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND bor2.surname like ".$filter->{value};
+                               }elsif ($filter->{name} =~ /firstname/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND bor2.firsntame like ".$filter->{value};
+                               }elsif ($filter->{name} =~ /cardnumber/){
+                                       $filter->{value}=~s/\*/%/g;
+                                       $strsth .= " AND bor2.cardnumber like ".$filter->{value};
+                               }
+                       }
+               }
        }
        warn "displaylog :".$strsth;
-       my $sth=$dbh->prepare($strsth);
-       $sth->execute;
-       my @results;
-       my $count;
-       while (my $data = $sth->fetchrow_hashref){
-               push @results, $data;
-               $count++;
-       }
-       return ($count, \@results);
+       if ($strsth){
+               my $sth=$dbh->prepare($strsth);
+               $sth->execute;
+               my @results;
+               my $count;
+               my $hilighted=1;
+               while (my $data = $sth->fetchrow_hashref){
+                       $data->{hilighted} = ($hilighted>0);
+                       push @results, $data;
+                       $count++;
+                       $hilighted = -$hilighted;
+               }
+               return ($count, \@results);
+       } else {return 0;}
 }
 END { }       # module clean-up code here (global destructor)
 
diff --git a/admin/viewlog.pl b/admin/viewlog.pl
new file mode 100755 (executable)
index 0000000..e3c4992
--- /dev/null
@@ -0,0 +1,149 @@
+#!/usr/bin/perl
+
+# $Id$
+
+# Copyright 2000-2002 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,
+# Suite 330, Boston, MA  02111-1307 USA
+
+use strict;
+use C4::Auth;
+use CGI;
+use C4::Context;
+use HTML::Template;
+use C4::Koha;
+use C4::Interface::CGI::Output;
+use C4::Log;
+use Date::Manip;
+
+=head1 NAME
+
+plugin that shows a stats on borrowers
+
+=head1 DESCRIPTION
+
+
+=over2
+
+=cut
+
+my $input = new CGI;
+my $do_it=$input->param('do_it');
+my $fullreportname = "parameters/viewlog.tmpl";
+my $modulename = $input->param("module");
+my $userfilter = $input->param("user");
+my $actionfilter = $input->param("action");
+my $fromfilter = $input->param("from");
+my $tofilter = $input->param("to");
+my $basename = $input->param("basename");
+my $mime = $input->param("MIME");
+my $del = $input->param("sep");
+my $output = $input->param("output");
+
+#warn "module : ".$modulename;
+my ($template, $borrowernumber, $cookie)
+       = get_template_and_user({template_name => $fullreportname,
+                               query => $input,
+                               type => "intranet",
+                               authnotrequired => 0,
+                               flagsrequired => {editcatalogue => 1},
+                               debug => 1,
+                               });
+$template->param(do_it => $do_it);
+if ($do_it) {
+# Displaying results
+       #building filters
+       my @filters;
+       push @filters, {name=> 'user', value=> $userfilter} if ($userfilter);
+       push @filters, {name=> 'action', value=> $actionfilter} if ($actionfilter);
+       push @filters, {name=> 'from', value=> $fromfilter} if ($fromfilter);
+       push @filters, {name=> 'to', value=> $tofilter} if ($tofilter);
+       if ($modulename eq "catalogue"){
+               my $titlefilter = $input->param("title");
+               my $authorfilter = $input->param("author");
+               my $publisherfilter = $input->param("publisher");
+               my $callnumberfilter = $input->param("itemcallnumber");
+               
+               push @filters, {name=> 'title', value=> $titlefilter} if ($titlefilter);
+               push @filters, {name=> 'author', value=> $authorfilter} if ($authorfilter);
+               push @filters, {name=> 'publisher', value=> $publisherfilter} if ($publisherfilter);
+               push @filters, {name=> 'callnumber', value=> $callnumberfilter} if ($callnumberfilter);
+       }
+       
+       my ($count, $results) = displaylog( $modulename, @filters);
+       if ($output eq "screen"){
+# Printing results to screen
+               $template->param(modulename =>$modulename, $modulename => 1, looprow => $results);
+               output_html_with_http_headers $input, $cookie, $template->output;
+               exit(1);
+       } else {
+# Printing to a csv file
+               print $input->header(-type => 'application/vnd.sun.xml.calc',
+                       -attachment=>"$basename.csv",
+                       -filename=>"$basename.csv" );
+               my $sep;
+               $sep =C4::Context->preference("delimiter");
+# header top-right
+# Other header
+# Table
+               foreach my $line ( @$results ) {
+                       if ($modulename eq "catalogue"){
+                               print $line->{timestamp}.$sep;
+                               print $line->{firstname}.$sep;
+                               print $line->{surname}.$sep;
+                               print $line->{action}.$sep;
+                               print $line->{info}.$sep;
+                               print $line->{title}.$sep;
+                               print $line->{author}.$sep;
+                       }
+                       print "\n";
+               }
+# footer
+               exit(1);
+       }
+} else {
+       my $dbh = C4::Context->dbh;
+       my @values;
+       my %labels;
+       my %select;
+       my $req;
+       
+       my @mime = ( C4::Context->preference("MIME") );
+#      foreach my $mime (@mime){
+#              warn "".$mime;
+#      }
+       
+       my $CGIextChoice=CGI::scrolling_list(
+                               -name     => 'MIME',
+                               -id       => 'MIME',
+                               -values   => \@mime,
+                               -size     => 1,
+                               -multiple => 0 );
+       
+       my @dels = ( C4::Context->preference("delimiter") );
+       my $CGIsepChoice=CGI::scrolling_list(
+                               -name     => 'sep',
+                               -id       => 'sep',
+                               -values   => \@dels,
+                               -size     => 1,
+                               -multiple => 0 );
+       
+       $template->param(
+                                       CGIextChoice => $CGIextChoice,
+                                       CGIsepChoice => $CGIsepChoice
+                                       );
+output_html_with_http_headers $input, $cookie, $template->output;
+}
diff --git a/koha-tmpl/intranet-tmpl/default/en/parameters/viewlog.tmpl b/koha-tmpl/intranet-tmpl/default/en/parameters/viewlog.tmpl
new file mode 100644 (file)
index 0000000..1bd00a8
--- /dev/null
@@ -0,0 +1,238 @@
+<!-- TMPL_INCLUDE NAME="reportswcal-top.inc" -->
+<div id="mainbloc" >
+
+<!-- TMPL_IF NAME="do_it" -->
+<script language="JavaScript" type="text/javascript">
+function Dopop(link) {
+       newin=window.open(link,'width=500,height=400,toolbar=false,scrollbars=yes');
+}
+</script>
+               <h1 class="parameters">Koha : LogView for <!-- TMPL_VAR NAME="modulename"--> </h1>
+               <!-- TMPL_IF NAME="loopfilter"-->
+                       <p>Filtered on</p>
+                       <!-- TMPL_LOOP NAME="loopfilter" -->
+                                       <p><!-- TMPL_IF NAME="err" --> <font color="red"> <b><!--/TMPL_IF --><label class="label100"> <!-- TMPL_VAR NAME="name"--> =</label><!-- TMPL_VAR NAME="value"--><!-- TMPL_IF NAME="err" --> </font> </b><!--/TMPL_IF --></p>
+                       <!-- /TMPL_LOOP -->
+               <!-- /TMPL_IF NAME="loopfilter"-->
+               <br>
+               <table border="1">
+                       <!-- TMPL_IF NAME="catalogue" -->
+                               <tr >
+                                                       <th class="parameters">Timestamp
+                                                       </th>
+                                                       <th class="parameters">Firstname
+                                                       </th>
+                                                       <th class="parameters">Surname
+                                                       </th>
+                                                       <th class="parameters">Action
+                                                       </th>
+                                                       <th class="parameters">Info
+                                                       </th>
+                                                       <th class="parameters">Title
+                                                       </th>
+                                                       <th class="parameters">Author
+                                                       </th>
+                               </tr>
+                               <!-- TMPL_LOOP NAME="looprow" -->
+                                       <!-- TMPL_IF NAME="hilighted" --><tr class="higlighted"><!-- TMPL_ELSE --><tr><!-- /TMPL_IF -->
+                                               <td><!-- TMPL_IF NAME="timestamp" --><!-- TMPL_VAR NAME="timestamp" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="firstname" --><!-- TMPL_VAR NAME="firstname" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="surname" --><!-- TMPL_VAR NAME="surname" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="action" --><!-- TMPL_VAR NAME="action" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="info" --><!-- TMPL_VAR NAME="info" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="title" --><!-- TMPL_VAR NAME="title" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="author" --><!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF -->
+                                               </td>
+                                       </tr>
+                               <!-- /TMPL_LOOP -->
+                               <!-- /TMPL_IF -->
+                               <!-- TMPL_IF NAME="acqui" -->
+                               <tr >
+                                                       <th class="parameters">Timestamp
+                                                       </th>
+                                                       <th class="parameters">Firstname
+                                                       </th>
+                                                       <th class="parameters">Surname
+                                                       </th>
+                                                       <th class="parameters">Action
+                                                       </th>
+                                                       <th class="parameters">Info
+                                                       </th>
+                                                       <th class="parameters">Title
+                                                       </th>
+                                                       <th class="parameters">Author
+                                                       </th>
+                               </tr>
+                               <!-- TMPL_LOOP NAME="looprow" -->
+                                       <!-- TMPL_IF NAME="hilighted" --><tr class="higlighted"><!-- TMPL_ELSE --><tr><!-- /TMPL_IF -->
+                                               <!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td><!-- /TMPL_IF -->
+                                               <!-- TMPL_VAR NAME="rowtitle" --></td>
+                                               <!-- TMPL_LOOP NAME="loopcell" -->
+                                                       <!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td ><!-- /TMPL_IF -->
+                                                               <!-- TMPL_IF NAME="reference" --><a href="javascript:Dopop('../members/moremember.pl?bornum=<!-- TMPL_VAR NAME="reference" -->')" ><!-- /TMPL_IF -->
+                                                               <!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                                               <!-- TMPL_IF NAME="reference" --></a><!-- /TMPL_IF -->
+                                                       </td>
+                                                       <!-- TMPL_IF NAME="hilighted" --><td class="hilighted"><!-- TMPL_ELSE --><td ><!-- /TMPL_IF -->
+                                                               <!-- TMPL_IF NAME="count" --><!-- TMPL_VAR NAME="count" --><!-- /TMPL_IF -->
+                                                       </td>
+                                               <!-- /TMPL_LOOP -->
+                                       </tr>
+                               <!-- /TMPL_LOOP NAME="looprow" -->
+                               <!-- /TMPL_IF -->
+                               <!-- TMPL_IF NAME="members" -->
+                               <tr >
+                                                       <th class="parameters">Timestamp
+                                                       </th>
+                                                       <th class="parameters">Firstname
+                                                       </th>
+                                                       <th class="parameters">Surname
+                                                       </th>
+                                                       <th class="parameters">Action
+                                                       </th>
+                                                       <th class="parameters">Info
+                                                       </th>
+                                                       <th class="parameters">Title
+                                                       </th>
+                                                       <th class="parameters">Author
+                                                       </th>
+                               </tr>
+                               <!-- TMPL_LOOP NAME="looprow" -->
+                                       <!-- TMPL_IF NAME="hilighted" --><tr class="higlighted"><!-- TMPL_ELSE --><tr><!-- /TMPL_IF -->
+                                               <td><!-- TMPL_IF NAME="timestamp" --><!-- TMPL_VAR NAME="timestamp" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                               <td><!-- TMPL_IF NAME="value" --><!-- TMPL_VAR NAME="value" --><!-- /TMPL_IF -->
+                                               </td>
+                                       </tr>
+                               <!-- /TMPL_LOOP NAME="looprow" -->
+                               <!-- /TMPL_IF -->
+               </table>
+<!-- TMPL_ELSE -->
+       <h1 class = "parameters">Koha : Display Logs </h1>
+       <form method="post">
+       
+       <table>
+               <thead>
+                       <tr>
+                       <th class="parameters">On Module</th>
+                       <th class="parameters">User/Action Filters</th>
+                       <th class="parameters">Object Filter</th>
+                       </tr>
+               </thead>
+               <tbody>
+                       <tr>
+                               <td>
+                                       <select name="module">
+                                               <option value ="catalogue" checked>Catalogue</option>
+                                               <option value ="members">Borrowers</option>
+                                               <option value ="acqui">Acquisitions</option>
+                                       </select>
+                               </td>
+                               <td>
+                               <p>
+                                       Koha User : <input type="text" name="user" value="">
+                               </p>
+                               <p>     Action type : <select name="action">
+                                               <option value ="">All</option>
+                                               <option value ="add">Add</option>
+                                               <option value ="del">Delete</option>
+                                               <option value ="mod">Modify</option>
+                                       </select>
+                               </p>
+                               <p> From <input type="text" readonly="readonly" size="10" id="from" name="from" >
+                                                       <img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" border="0" hspace="0" vspace="0" id="openCalendarFrom" style="cursor: pointer;" valign="top">
+                                                               <script language="JavaScript" type="text/javascript">
+                                                                       function validate1(date) {
+                                                                               var day = date.getDate();
+                                                                               var month = date.getMonth() + 1;
+                                                                               var year = date.getFullYear();
+                                                                               var weekDay = date.getDay();
+                                                                               var dayMonth = month + '-' + day;
+                                                                               var dateString = year + '-' + month + '-' + day;
+                                                                               var dateTo = document.getElementById('to').value.split("-");
+                                                                               var limitDate = new Date(dateTo[0], (dateTo[1] - 1), dateTo[2]);
+                                                                               if (date > limitDate) {
+                                                                                       return true;
+                                                                               } else {
+                                                                                       return false;
+                                                                               }
+                                                                       }
+                                       
+                                                                       Calendar.setup(
+                                                                               {
+                                                                                       inputField : "from",
+                                                                                       ifFormat : "%Y-%m-%d",
+                                                                                       button : "openCalendarFrom",
+                                                                                       disableFunc : validate1,
+                                                                                       dateStatusFunc : validate1
+                                                                               }
+                                                                       );
+                                                               </script>
+                                       To <input readonly="readonly" size="10" id="to" name="Filter" value="" type="to">
+                                               <img src="<!-- TMPL_VAR Name="themelang" -->/includes/calendar/cal.gif" id="openCalendarTo" style="cursor: pointer;" valign="top" border="0" hspace="0" vspace="0">
+                                                       <script type="text/javascript">
+                                                               function validate2(date) {
+                                                                       var day = date.getDate();
+                                                                       var month = date.getMonth() + 1;
+                                                                       var year = date.getFullYear();
+                                                                       var weekDay = date.getDay();
+                                                                       var dayMonth = month + '-' + day;
+                                                                       var dateString = year + '-' + month + '-' + day;
+                                                                       var dateFrom = document.getElementById('from').value.split("-");
+                                                                       var limitDate = new Date(dateFrom[0], (dateFrom[1] - 1), dateFrom[2]);
+                                                                       if (limitDate > date) {
+                                                                               return true;
+                                                                       } else {
+                                                                               return false;
+                                                                       }
+                                                               }
+               
+                                                               Calendar.setup(
+                                                                       {
+                                                                               inputField : "to",
+                                                                               ifFormat : "%Y-%m-%d",
+                                                                               button : "openCalendarTo",
+                                                                               disableFunc : validate2,
+                                                                               dateStatusFunc : validate2
+                                                                       }
+                                                               );
+                                                       </script>
+                               </td>
+                       </tr>
+       </table>
+       
+       <div id="bloc25">
+               <h3 class="parameters"> Output </h3>
+               <input type="radio" checked name="output" value="screen" > To screen into the browser
+               <br>
+               <input type="radio" name="output" value="file"> To file <input type="text" name="basename" value="Export"> into an application  
+               <!-- TMPL_VAR NAME="CGIextChoice" -->
+               <!-- TMPL_VAR NAME="CGIsepChoice" -->
+       </p>
+       </div>
+       <p>
+       <input TYPE="submit" value="OK" class="button parameters">
+       <input type="hidden" name="report_name" value="<!--TMPL_VAR NAME="report_name" -->">
+       <input type="hidden" name="do_it" value="1">
+       </form>
+<!-- /TMPL_IF -->
+</div>
+<!-- TMPL_INCLUDE NAME="parameters-bottom.inc" -->