[Koha-patches] [PATCH] Audio feedback for member status, issuing, and returning.

Michael Hafen mdhafen at washk12.org
Tue May 27 20:15:10 CEST 2008


These two swf files are created by an open source tool from .wav files in the ubuntu-sounds package.
---
 circ/circulation.pl                                |   54 ++++++++++++++++++++
 circ/returns.pl                                    |   12 ++++
 .../prog/en/modules/circ/circulation.tmpl          |    3 +
 .../prog/en/modules/circ/returns.tmpl              |    2 +
 .../prog/en/modules/members/moremember.tmpl        |    1 +
 koha-tmpl/intranet-tmpl/prog/img/error.swf         |  Bin 0 -> 3191 bytes
 koha-tmpl/intranet-tmpl/prog/img/ok.swf            |  Bin 0 -> 1101 bytes
 members/member.pl                                  |    4 ++
 members/moremember.pl                              |   39 ++++++++++++++
 9 files changed, 115 insertions(+), 0 deletions(-)
 create mode 100644 koha-tmpl/intranet-tmpl/prog/img/error.swf
 create mode 100644 koha-tmpl/intranet-tmpl/prog/img/ok.swf

diff --git a/circ/circulation.pl b/circ/circulation.pl
index 0b660de..52fea3f 100755
--- a/circ/circulation.pl
+++ b/circ/circulation.pl
@@ -101,6 +101,13 @@ my @failedrenews = $query->param('failedrenew');
 my @renew_failed;
 for (@failedrenews) { $renew_failed[$_] = 1; } 
 
+my $sessionID = $query->cookie("CGISESSID") ;
+my $session = get_session($sessionID);
+my $sounderror;
+my @soundederrors = @{ $session->param( 'soundederrors' ) } if ( $session->param( 'soundederrors' ) );
+my %soundederrors;
+for ( @soundederrors ) { $soundederrors{ $_ } = 1; }
+
 my $findborrower = $query->param('findborrower');
 $findborrower =~ s|,| |g;
 #$findborrower =~ s|'| |g;
@@ -182,12 +189,16 @@ if ( $print eq 'yes' && $borrowernumber ne '' ) {
 my $borrowerslist;
 my $message;
 if ($findborrower) {
+    $session->clear( 'soundederrors' );
+    @soundederrors = ();
+    %soundederrors = ();
     my ( $count, $borrowers ) =
       SearchMember($findborrower, 'cardnumber', 'web' );
     my @borrowers = @$borrowers;
     if ( $#borrowers == -1 ) {
         $query->param( 'findborrower', '' );
         $message = "'$findborrower'";
+	$sounderror = 1;
     }
     elsif ( $#borrowers == 0 ) {
         $query->param( 'borrowernumber', $borrowers[0]->{'borrowernumber'} );
@@ -206,6 +217,15 @@ if ($borrowernumber) {
     $borrower = GetMemberDetails( $borrowernumber, 0 );
     my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber );
 
+    if ( $od && ! $soundederrors{ ODUES } ) {
+	$sounderror = 1;
+	$soundederrors{ ODUES } = 1;
+    }
+    if ( $fines > 0 && ! $soundederrors{ CHARGES } ) {
+	$sounderror = 1;
+	$soundederrors{ CHARGES } = 1;
+    }
+
     # Warningdate is the date that the warning starts appearing
     my ( $today_year,   $today_month,   $today_day )   = Today();
     my ( $warning_year, $warning_month, $warning_day ) = split /-/,
@@ -228,6 +248,10 @@ if ($borrowernumber) {
             expired => format_date($borrower->{dateexpiry}),
             renewaldate   => format_date("$renew_year-$renew_month-$renew_day")
         );
+	unless ( $soundederrors{ EXPIRED } ) {
+	    $sounderror = 1;
+	    $soundederrors{ EXPIRED } = 1;
+	}
     }
     # check for NotifyBorrowerDeparture
   elsif ( C4::Context->preference('NotifyBorrowerDeparture') &&
@@ -263,6 +287,7 @@ if ($barcode) {
                 IMPOSSIBLE  => 1
             );
             $noerror = 0;
+	    $sounderror = 1;
         }
     
   if ($issueconfirmed && $noerror) {
@@ -285,6 +310,7 @@ if ($barcode) {
         	        NEEDSCONFIRMATION  => 1
         	    );
         	    $noquestion = 0;
+		    $sounderror = 1;
         	}
         }
 		# only pass needsconfirmation to template if issuing is possible 
@@ -557,18 +583,34 @@ foreach $flag ( sort keys %$flags ) {
         );
         if ( $flag eq 'GNA' ) {
             $template->param( gna => 'true' );
+	    unless ( $soundederrors{ GNA } ) {
+		$sounderror = 1;
+		$soundederrors{ GNA } = 1;
+	    }
         }
         if ( $flag eq 'LOST' ) {
             $template->param( lost => 'true' );
+	    unless ( $soundederrors{ LOST } ) {
+		$sounderror = 1;
+		$soundederrors{ LOST } = 1;
+	    }
         }
         if ( $flag eq 'DBARRED' ) {
             $template->param( dbarred => 'true' );
+	    unless ( $soundederrors{ DBARRED } ) {
+		$sounderror = 1;
+		$soundederrors{ DBARRED } = 1;
+	    }
         }
         if ( $flag eq 'CHARGES' ) {
             $template->param(
                 charges    => 'true',
                 chargesmsg => $flags->{'CHARGES'}->{'message'}
             );
+	    unless ( $soundederrors{ CHARGES } ) {
+		$sounderror = 1;
+		$soundederrors{ CHARGES } = 1;
+	    }
         }
         if ( $flag eq 'CREDITS' ) {
             $template->param(
@@ -584,6 +626,10 @@ foreach $flag ( sort keys %$flags ) {
                 flagged    => 1,
                 chargesmsg => $flags->{'CHARGES'}->{'message'}
             );
+	    unless ( $soundederrors{ CHARGES } ) {
+		$sounderror = 1;
+		$soundederrors{ CHARGES } = 1;
+	    }
         }
         if ( $flag eq 'CREDITS' ) {
             $template->param(
@@ -597,6 +643,10 @@ foreach $flag ( sort keys %$flags ) {
                 flagged  => 1,
                 oduesmsg => $flags->{'ODUES'}->{'message'}
             );
+	    unless ( $soundederrors{ ODUES } ) {
+		$sounderror = 1;
+		$soundederrors{ ODUES } = 1;
+	    }
 
             my $items = $flags->{$flag}->{'itemlist'};
 # useless ???
@@ -699,6 +749,10 @@ if ($stickyduedate) {
 my ($picture, $dberror) = GetPatronImage($borrower->{'cardnumber'});
 $template->param( picture => 1 ) if $picture;
 
+$session->param('soundederrors', [ keys %soundederrors ] );
+$template->param(
+    sounderror => $sounderror,
+    );
 
 $template->param(
     SpecifyDueDate           => C4::Context->preference("SpecifyDueDate"),
diff --git a/circ/returns.pl b/circ/returns.pl
index 9228674..7b1133e 100755
--- a/circ/returns.pl
+++ b/circ/returns.pl
@@ -73,6 +73,8 @@ my $printers = GetPrinters();
 #my $branch  = C4::Context->userenv?C4::Context->userenv->{'branch'}:"";
 my $printer = C4::Context->userenv?C4::Context->userenv->{'branchprinter'}:"";
 my $overduecharges = (C4::Context->preference('finesMode') && C4::Context->preference('finesMode') ne 'off');
+my $sounderror;
+my $soundok;
 #
 # Some code to handle the error if there is no branch or printer setting.....
 #
@@ -148,6 +150,7 @@ if ( $query->param('resbarcode') ) {
 
 
     if ( $messages->{'transfert'} ) {
+	$sounderror = 1;
         $template->param(
             itemtitle      => $iteminfo->{'title'},
 			itembiblionumber => $iteminfo->{'biblionumber'},
@@ -206,6 +209,7 @@ if ($barcode) {
         itembiblionumber => $biblio->{'biblionumber'},    
     );
     if ($returned) {
+	$soundok = 1;
         $returneditems{0}    = $barcode;
         $riborrowernumber{0} = $borrower->{'borrowernumber'};
         $riduedate{0}        = $issueinformation->{'date_due'};
@@ -243,6 +247,9 @@ if ($barcode) {
         }
         push( @inputloop, \%input );
     }
+    if ( ! $returned ) {
+	$sounderror = 1;
+    }
 }
 $template->param( inputloop => \@inputloop );
 
@@ -310,6 +317,7 @@ if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) {
 # reserve found and item arrived at the expected branch
 #
 if ( $messages->{'ResFound'}) {
+    $sounderror = 1;
     my $reserve        = $messages->{'ResFound'};
     my $branchname = $branches->{ $reserve->{'branchcode'} }->{'branchname'};
     my ($borr) = GetMemberDetails( $reserve->{'borrowernumber'}, 0 );
@@ -454,6 +462,7 @@ if ($borrower) {
         $flaginfo{redfont} = ( $flags->{$flag}->{'noissues'} );
         $flaginfo{flag}    = $flag;
         if ( $flag eq 'CHARGES' ) {
+	    $sounderror = 1;
             $flaginfo{msg}            = $flag;
             $flaginfo{charges}        = 1;
             $flaginfo{borrowernumber} = $borrower->{borrowernumber};
@@ -478,6 +487,7 @@ if ($borrower) {
             $flaginfo{itemloop} = \@waitingitemloop;
         }
         elsif ( $flag eq 'ODUES' ) {
+	    $sounderror = 1;
             my $items = $flags->{$flag}->{'itemlist'};
             my @itemloop;
             foreach my $item ( sort { $a->{'date_due'} cmp $b->{'date_due'} }
@@ -579,6 +589,8 @@ $template->param(
     dropboxmode              => $dropboxmode,
     dropboxdate				=> $dropboxdate->output(),
 	overduecharges          => $overduecharges,
+    sounderror              => $sounderror,
+    soundok                 => $soundok,
 );
 
 # actually print the page!
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
index 8922db4..92f1e2e 100755
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl
@@ -60,6 +60,9 @@ $.tablesorter.addParser({
 <!-- /TMPL_IF -->
 
 <!--  INITIAL BLOC : PARAMETERS & BORROWER INFO -->
+<!-- TMPL_IF NAME="sounderror" --><EMBED src="/intranet-tmpl/prog/img/error.swf" quality="high"  WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED><!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="inprocess" --><!-- Sound on successful issueing --><EMBED src="/intranet-tmpl/prog/img/ok.swf" quality="high"  WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED><!-- /TMPL_IF -->
+
 <!-- TMPL_IF NAME="dateexpiry" --><div class="dialog message">Patron's account has been renewed until <!-- TMPL_VAR NAME="dateexpiry" --></div><!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="NEEDSCONFIRMATION" -->
 <div class="yui-g">
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl
index d71a36c..e692e7f 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl
@@ -311,6 +311,8 @@ function Dopop(link) {
         </form>
 </div>
 
+<!-- TMPL_IF NAME="sounderror" --><EMBED src="/intranet-tmpl/prog/img/error.swf" quality="high"  WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED><!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="soundok" --><EMBED src="/intranet-tmpl/prog/img/ok.swf" quality="high"  WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED><!-- /TMPL_IF -->
 <!-- TMPL_IF Name="returned" -->
 <div class="yui-g">    <table>
         <tr><th>Item Information</th><th>Patron Information</th></tr>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl
index 29c0b55..de65b80 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl
@@ -81,6 +81,7 @@ if (nodename =="barcodes[]"){
 	<div id="yui-main">
 	<div class="yui-b">
 <!-- TMPL_INCLUDE NAME="members-toolbar.inc" -->
+<!-- TMPL_IF NAME="sounderror" --><EMBED src="/intranet-tmpl/prog/img/error.swf" quality="high"  WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED><!-- <!-- TMPL_VAR NAME="sounderror" --> --><!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="error" -->
 <div class="dialog alert">
 <!-- TMPL_IF NAME="AUTH_UPDATE_FAILED" -->
diff --git a/koha-tmpl/intranet-tmpl/prog/img/error.swf b/koha-tmpl/intranet-tmpl/prog/img/error.swf
new file mode 100644
index 0000000000000000000000000000000000000000..2126177338fdf7d47cdf4c4478b41c159789df4c
GIT binary patch
literal 3191
zcmdVddpOkD9|!R7%&<x>p%A7<m<lOlU1OLut=oihALTM;5JH9-)gp at IlDi$Z<kp7e
z7s(||VJPDgAsU<9SId^hrE&ZI?Ci78 at 5$4%zxMaEfBeor=lP!V&v|{`=bZ2Nd(!p{
zFGT<V{D2)b0PrYGUJL>lHeDo94WS?i(qTrMbCLk^u`ICJ!13cPn;pyuVgLYU7#vnj
zMOzbb(3MDbIb{9+*tnp5_2T~Ya1SVec${m1*vZcegM^K&eV5BO7P6a69~{jKT~9U#
zXCJi59vlH_N%LXYrezSkZJ<3K8=MvowQ$)i)Kk*6+AG6mZM7=idV<@9H%Ho@*Cr8!
z&X^@Dw7XJ|!h{S}L^nr4Z~_x16nsB7hxbkHQMab6cOu{#GGQ!9|E?|dEdHMw7o at a?
zeh#B0K#W6s8Ix974T2>fn~I6bs63>zl4X at kA@Cp(76<V<fZ?aEilh7}kqNf`E1iiL
zro^_I_BT;6qv?^(`5c4+lenMke=F~xo at gtfnj>L099@*Cs}tQ^pp{Jyole0!#3iUm
zOPIsm)iF45HXkN7>3XNO`E+f|E4N=y2PlD{ZaxX;sa)qx?Hh`-ba;D4v7`7l2zHnD
zaq<rki!zF4XHeEkARZ5P-zT8mC%069yP>!s<sHoJlo&f`0)XJh&)&54s!UZKdHn+D
z<>3u?o43zjlz!hndo8Md<!4fP5rJ9MKeo;wlyNl27P8eJ)w??C>{8Nou}OJYzxYyy
zR4 at -72zMUbe*N`aF`jaaXs-UjVcQsxU<Z5r-tJCsuqyN3mD(O3a(BziMJHr#yo?GQ
zFwhFI(P>TK+esi~O;<5XC?-1SUw at 4GShrj`8w|_~L~5ZS^L((1Yk)#Hb?IEIFmcr}
zlWDBDMf7{5ToBSURLY5I2TP4Cu+%)v@)7IMfA<ls8Eb8XNurrsjYAV8d^yun at uMOY
z=aCeBrJMk3^~v-cO8@&r_Fb*e%cn}t7z at qVi2DR^OnMrV0^asqUpOyfqNHI-^}%>0
zU$4;{PF5d&syh at Q8_+>eJXa`{-;wp=e7_32s)10Vyx{4Xrhb=1KU>+dBHH=FalNjv
z-KYM<S%sj~>esRCW<R<9Ei3<v!_5WlbrW9?k!q#>0+FAn4k5pyd1A4rqH^zh3>*55
zSgI8?&z^f!*XMP!FM}5C7ipi<VqiLjOJ$VYphP8`T(@|aI26E|*;_HWD2&pL2f=`)
zz_{S|Glq9dj|Gk1Q!TCd-q2~<n|&mE0KTL?piv=>O7?1sG6@}iw-=--FBQj~V0`(4
z|HAU0Er-Z>A#~28^Hdxl=5MUBx)B&%_)5bz at YZ;KY5X&*!VCdFJ87T33ZvkC$Y^GW
z9hv8CVv4W5K0nmuy5GiIOl(FuugdvH&^$(Bvk|8&aKn=tEq<*;wQC~DozXd771WkC
zhhGmW4h0uiy`cH at w+F<v!+PwB9wmgAixIEpKk2t<>SfrSvfjaN-y-|__X0N|#4+St
zqX#oy3u>6|LkH)X6^&#W*=BqG^tPT|BeSQ?TzMD{rGdt_uKmwM4q2xqWy_l%6pB1?
zNfCpadTivZZ#uq5((=dKglt90spnP#xsOd3tH06MWmKXgt=ho*Ab`(Ai+A at S2Za{X
z(|I8gCN^rco|F^cLUeAV^5zJ_%tn;Fi+`qGSva(X^WW0=+&mWqA76U95yl8IfM at zV
z1T!z$-g^Q)T#7b6GE5f4<fVT|)QwIU3r)u}+c+6X(SVHEZW=8 at v}81^oYv$)Ry<GK
zGiBzKg6ekSajR7DE%r(A{h;E+_O#6W*l*_DdbHqWT_I{^e)591Hg4d~P1NgW##U+#
zBF~f5Wnwj?Wc at ySTYYY^Uoyr8?Xwc9YK(3ZmIr`zpCuMszG_uoPE at hQ6Tc{A!JkyV
z;v$K_uE3_}&9yQXPNI>!B;K5ss|$}P!?M-Zw_%g6?b0cBMz7J!aC1msBl8?{A>lNC
z#u|01{vt|y02S>^FN`v)pX9I<DpGTP*^nReSqU-7%@whNIQk()&t6nXj&G_@{R;7H
zin$<}6XI2k9t;}+H`r!Gtc at b`UPR)cxjDE$l4IQ9VBc%aTT&B|>@qNO+;KFd*Kn=l
zT?Ls?OIe#asQD27nmC1ZkDK`rbR at 9eOTm5{=v8eycp<(OUs;JMpxG2>OFf*poYzjr
zRjH+X6s>{DP+Zy%SxQAJ9xeDfhEIayg7%;?qWAuQh4TP%tk7j}qY`NNPQQ<Y$mMy{
zSUy#`4t52LNV{VKQKG6F6UQTmL<Azu+D<;h#jfqYuxwaiA?H$_El%OnjU7i*>3lI$
zxXv8@`tC%|eQh~bzty{Pyc&{p)x%qWH4 at eQ6)&_;Ab&n^L6W^iP3J854gh?HJAeOZ
z0T;JB2eLR}!?O7GU at AqgtN?dc5KcO&rz^S=(=K^yUYj(1Wd6xa4z^=Mqi$(_u+-UR
z;ptMNNxs&4CYzmheD5;l*m8p at E6ws7+ltk=tNPu-)#y3m at R4Bae;|}UE!_SOP?Abv
zqXkX^_!lgkRrL_u;I-7FkG)5O%WL$t!YOC%f<R at DWJn!#$(dfvj`2DSZ6uM#yBZE_
zDmg8n-(=k>CG(};kKm|^O;`WchFbjrzU-E@<0fWe@~7dTayG@*Yk8zB=6PAh%I<&K
z^T!$5LqKkVuo8fCOdji}O^^Z{w5Z{6`q0!t6A7K$Q>mEc)FYjl7vI^c<m~P;m^Ty&
z<+C`c2x-WOeHwp at ICI&t>jlnw=~CitB56Q<L`jfjgZ+L{w5n`*2yrTVdU|d+>jw7l
d$ckRTipSr0>wi-EFMMFYBmo`>u=(!*{2LlRk<0)9

literal 0
HcmV?d00001

diff --git a/koha-tmpl/intranet-tmpl/prog/img/ok.swf b/koha-tmpl/intranet-tmpl/prog/img/ok.swf
new file mode 100644
index 0000000000000000000000000000000000000000..68624749c0d38db905eb8d190b761fffb2583126
GIT binary patch
literal 1101
zcmZ<@4`%gcVPGg=;NHQ&u)9G;n32KxP*GZiGt>Y7|MxS?0p%nZ)Eu}OfZ+dQrz1d$
z*@Mx6fx*Yo*VS0h(p*6!DYYa~Gju2du!nS5$|_i!Rxoe~*c^~MRKx#sqs9E6oiRHC
z{-0|3$**$q{C{Omrkc|J6yg6LPe`-K)b`9QNZtSc!&jaoi+CSvu&FUDaFk<ckpKVv
zADcCIV*>+2(&7!0oO<ls-i=o;E2Jtvuvo=#(!tPTikU)0Jup;%NJwy)I394wo$*CV
zB7t#%_y)rr^A8<AJVCf2`Z!Sj|BubbE9M+CDB$>ze$2=H at q#k0fPSUqo(+Bi&O$%~
zl%5 at VC}L`kEdn4Ol8)QJ-?)N-DNKTaNq)gk{!3BvGiFN8uAebOYNq7>r;mjmmMro8
z|FdGI8t0^mb`Jah%O^KDE&Aa1u%r2(bOH;*tLrIK|1+^T7-_QbyjsPql<9Ei?Ewqx
z4j!pkW=$4`V=V?UN(_oWBtmTbxn9&A(6MH=lyDH>lMg(n)}3;)@5#xPlmF=7NNC7k
zWFWXB_2Fr0C8559g<Kw)-7QXG;Xn`0l9rU$n=xy8Pj8Qpzlu_Z_y7L~Tn>4m`Dhgo
zfIY;Y%(O?o!Gei_amRh2ZWy@#X14a8|Nqxd*SgT+s`EYU->>&x_4m{NJiGrtu1#d&
znm(0(@3u!|ZJlNFRQ0yVDlDdhY at jm$dq_NZ+Kl=G0?Z7#+ivG>f3c`h=*0H&D$UBZ
zGqbhhx;D-1Nq97CZEED^S8Eif+U}gt)i)*ft4s9n#l9x8lAE3-y!xaRc0bJS)asJG
wVb2%a#a=tI@{6a}ru|Bj*+0fPXFDz0TeIa>suq1be3V&&frXI)SRyb0054nnZU6uP

literal 0
HcmV?d00001

diff --git a/members/member.pl b/members/member.pl
index 6d42b45..5a71380 100755
--- a/members/member.pl
+++ b/members/member.pl
@@ -78,6 +78,10 @@ $orderby = "surname,firstname" unless $orderby;
 $member =~ s/,//g;   #remove any commas from search string
 $member =~ s/\*/%/g;
 
+my $sessionID = $input->cookie("CGISESSID") ;
+my $session = C4::Auth::get_session($sessionID);
+$session->clear( 'soundederrors' );
+
 my ($count,$results);
 
 if(length($member) == 1)
diff --git a/members/moremember.pl b/members/moremember.pl
index 723bb74..58f2676 100755
--- a/members/moremember.pl
+++ b/members/moremember.pl
@@ -97,6 +97,30 @@ if ( not defined $data ) {
     exit;
 }
 
+my $sessionID = $input->cookie("CGISESSID") ;
+my $session = C4::Auth::get_session($sessionID);
+my $sounderror;
+my @soundederrors = @{ $session->param( 'soundederrors' ) } if ( $session->param( 'soundederrors' ) );
+my %soundederrors;
+for ( @soundederrors ) { $soundederrors{ $_ } = 1; }
+
+if ( $$data{ debarred } && !$soundederrors{ DBARRED } ) {
+    $sounderror = 1;
+    $soundederrors{ DBARRED } = 1;
+}
+if ( $$data{ gonenoaddress } && !$soundederrors{ GNA } ) {
+    $sounderror = 1;
+    $soundederrors{ GNA } = 1;
+}
+if ( $$data{ lost } && !$soundederrors{ LOST } ) {
+    $sounderror = 1;
+    $soundederrors{ LOST } = 1;
+}
+if ( $$data{ dateexpiry } lt POSIX::strftime( "%Y-%m-%d", localtime ) && !$soundederrors{ EXPIRED } ) {
+    $sounderror = 1;
+    $soundederrors{ EXPIRED } = 1;
+}
+
 # re-reregistration function to automatic calcul of date expiry
 if ( $reregistration eq 'y' ) {
 	$data->{'dateexpiry'} = ExtendMemberSubscriptionTo( $borrowernumber );
@@ -213,6 +237,11 @@ my $lib2 = &GetSortDetails( "Bsort2", $data->{'sort2'} );
 ( $template->param( lib1 => $lib1 ) ) if ($lib1);
 ( $template->param( lib2 => $lib2 ) ) if ($lib2);
 
+if ( $total > 0 && ! $soundederrors{ CHARGES } ) {
+    $sounderror = 1;
+    $soundederrors{ CHARGES } = 1;
+}
+
 # current issues
 #
 my ( $count, $issue ) = GetPendingIssues($borrowernumber);
@@ -230,6 +259,11 @@ for ( my $i = 0 ; $i < $count ; $i++ ) {
     $row{'replacementprice'} = $issue->[$i]{'replacementprice'};
     if ( $datedue lt $today ) {
         $row{'red'} = 1;    #print "<font color=red>";
+
+	unless ( $soundederrors{ ODUES } ) {
+	    $sounderror = 1;
+	    $soundederrors{ ODUES } = 1;
+	}
 	}
     $row{toggle} = $toggle++ % 2;
 
@@ -360,4 +394,9 @@ $template->param(
 	dateformat    => C4::Context->preference("dateformat"),
 );
 
+$session->param('soundederrors', [ keys %soundederrors ] );
+$template->param(
+    sounderror => $sounderror,
+    );
+
 output_html_with_http_headers $input, $cookie, $template->output;
-- 
1.5.4.3




More information about the Koha-patches mailing list