=cut
@ISA = qw(Exporter);
-@EXPORT = qw(&logaction &logstatus);
+@EXPORT = qw(&logaction &logstatus &displaylog);
=item logaction
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){
}
}
}
- } 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)
--- /dev/null
+#!/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;
+}
--- /dev/null
+<!-- 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" -->