From savitra.sirohi at osslabs.biz Wed Dec 1 07:07:30 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Wed, 1 Dec 2010 11:37:30 +0530 Subject: [Koha-patches] [PATCH] Suggestions - adding more acq fields in staff interface - price, quantity, currency and totals Message-ID: <1291183650-19326-1-git-send-email-savitra.sirohi@osslabs.biz> From: Amit Gupta --- installer/data/mysql/kohastructure.sql | 4 ++++ installer/data/mysql/updatedatabase.pl | 12 ++++++++++++ koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 18 ++++++++++++++++++ .../prog/en/modules/suggestion/suggestion.tmpl | 19 +++++++++++++++++-- kohaversion.pl | 2 +- suggestion/suggestion.pl | 20 ++++++++++++++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 9148970..a2281cb 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1835,6 +1835,10 @@ CREATE TABLE `suggestions` ( branchcode VARCHAR(10) default NULL, collectiontitle text default NULL, itemtype VARCHAR(30) default NULL, + quantity SMALLINT(6) default NULL, + currency VARCHAR(3) default NULL, + price DECIMAL(28,6) default NULL, + total DECIMAL(28,6) default NULL, PRIMARY KEY (`suggestionid`), KEY `suggestedby` (`suggestedby`), KEY `managedby` (`managedby`) diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index d093946..415632e 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3876,6 +3876,18 @@ VALUES SetVersion ($DBversion); }; +$DBversion = '3.03.00.005'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER table suggestions ADD quantity SMALLINT(6) default NULL, + ADD currency VARCHAR(3) default NULL, + ADD price DECIMAL(28,6) default NULL, + ADD total DECIMAL(28,6) default NULL; + "); + print "Upgrade to $DBversion done (Added acq related columns to suggestions)\n"; + SetVersion ($DBversion); +} + + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js index 4b65f82..537aa26 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js @@ -679,6 +679,24 @@ function calcNeworderTotal(){ return true; } +// Calculates total amount in a suggestion + +function calcNewsuggTotal(){ + //collect values + var quantity = new Number(document.getElementById('quantity').value); +// var currency = f.currency.value; + var currcode = new String(document.getElementById('currency').value); + var price = new Number(document.getElementById('price').value); + var exchangerate = new Number(document.getElementById(currcode).value); + + var total = new Number(quantity*price*exchangerate); + + document.getElementById('total').value = total.toFixed(2); + document.getElementById('price').value = listprice.toFixed(2); + return true; +} + + // ---------------------------------------- //USED BY NEWORDEREMPTY.PL /* diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl index 7489cb6..bb80b0f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl @@ -81,8 +81,9 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di .overlay { top: 180px; left: 50%; position: absolute; margin-left: -100px; width: 200px; text-align: center; display: none; margin-top: -10px; background: #eeffd4; padding: .5em; color: #000; } + - + @@ -160,7 +161,21 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di - +
  • + " onchange="calcNewsuggTotal();" /> +
  • + + " name="" value="" /> + + +
  • + " onchange="calcNewsuggTotal();" /> +
  • + "/> +
  • " /> ">Cancel Cancel
    diff --git a/kohaversion.pl b/kohaversion.pl index 53c1724..ec6c2b3 100644 --- a/kohaversion.pl +++ b/kohaversion.pl @@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts : use strict; sub kohaversion { - our $VERSION = '3.03.00.004'; + our $VERSION = '3.03.00.005'; # version needs to be set this way # so that it can be picked up by Makefile.PL # during install diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl index 57a1ba7..deda252 100755 --- a/suggestion/suggestion.pl +++ b/suggestion/suggestion.pl @@ -269,6 +269,26 @@ foreach my $budget (@$budgets){ $template->param( budgetsloop => $budgets); +# get currencies and rates +my @rates = GetCurrencies(); +my $count = scalar @rates; + +my @loop_currency = (); +for ( my $i = 0 ; $i < $count ; $i++ ) { + my %line; + $line{currcode} = $rates[$i]->{'currency'}; + $line{rate} = $rates[$i]->{'rate'}; + $line{selected} = 1 if ($$suggestion_ref{'currency'} && $line{'currcode'} eq $$suggestion_ref{'currency'}); + push @loop_currency, \%line; +} + +$template->param(loop_currency => \@loop_currency); + +$template->param( + price => sprintf("%.2f", $$suggestion_ref{'price'}||0), + total => sprintf("%.2f", $$suggestion_ref{'total'}||0), +); + my %hashlists; foreach my $field qw(managedby acceptedby suggestedby budgetid STATUS) { my $values_list; -- 1.5.4.5 From fridolyn.somers at gmail.com Wed Dec 1 16:45:46 2010 From: fridolyn.somers at gmail.com (Fridolyn SOMERS) Date: Wed, 1 Dec 2010 16:45:46 +0100 Subject: [Koha-patches] Bug 3624 reopened Message-ID: Bug 3624 reopened : Patch for SQL structure : Index: acqui/basketgroup.pl =================================================================== --- acqui/basketgroup.pl +++ acqui/basketgroup.pl @@ -431,6 +453,7 @@ name => $basketgroupname, booksellerid => $booksellerid, basketlist => \@baskets, + billingplace => $billingplace, deliveryplace => $deliveryplace, deliverycomment => $deliverycomment, closed => $close, Index: installer/data/mysql/kohastructure.sql =================================================================== --- installer/data/mysql/kohastructure.sql +++ installer/data/mysql/kohastructure.sql @@ -2342,6 +2342,9 @@ `name` varchar(50) default NULL, `closed` tinyint(1) default NULL, `booksellerid` int(11) NOT NULL, + `deliveryplace` varchar(10) default NULL, + `deliverycomment` varchar(255) default NULL, + `billingplace` varchar(10) default NULL, PRIMARY KEY (`id`), KEY `booksellerid` (`booksellerid`), CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE Patch for a few XHTML errors in template : Index: koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl =================================================================== --- koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl (revision 468) +++ koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl (working copy) @@ -222,14 +222,14 @@

    @@ -253,7 +253,7 @@ -
    Close
    +
    Close
    " /> " /> -- Fridolyn SOMERS ICT engineer PROGILONE - Lyon - France fridolyn.somers at gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: bug3624_kohastructure.patch Type: text/x-patch Size: 1159 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: bug3624_xhtml.patch Type: text/x-patch Size: 1998 bytes Desc: not available URL: From savitra.sirohi at osslabs.biz Wed Dec 1 11:46:03 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Wed, 1 Dec 2010 16:16:03 +0530 Subject: [Koha-patches] [PATCH] Acquisitions - ability to set currency in order screens Message-ID: <1291200363-28361-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi --- acqui/basket.pl | 9 +++++++-- acqui/neworderempty.pl | 7 ++++--- koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 7 +++++-- .../prog/en/modules/acqui/neworderempty.tmpl | 19 +++++++++++++++---- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/acqui/basket.pl b/acqui/basket.pl index 005fcb9..928d150 100755 --- a/acqui/basket.pl +++ b/acqui/basket.pl @@ -217,8 +217,12 @@ if ( $op eq 'delete_confirm' ) { "loggedinuser: $loggedinuser; creationdate: %s; authorisedby: %s", $basket->{creationdate}, $basket->{authorisedby}; + #to get active currency + my $cur = GetCurrency(); + + my @results = GetOrders( $basketno ); - + my $gist = $bookseller->{gstrate} || C4::Context->preference("gist") || 0; my $discount = $bookseller->{'discount'} / 100; my $total_rrp; # RRP Total, its value will be assigned to $total_rrp_gsti or $total_rrp_gste depending of $bookseller->{'listincgst'} @@ -310,7 +314,8 @@ if ( $op eq 'delete_confirm' ) { gist_rrp => sprintf( "%.2f", $gist_rrp ), total_rrp_gsti => sprintf( "%.2f", $total_rrp_gsti ), total_est_gsti => sprintf( "%.2f", $total_est_gsti ), - currency => $bookseller->{'listprice'}, +# currency => $bookseller->{'listprice'}, + currency => $cur->{'currency'}, qty_total => $qty_total, GST => $gist, basketgroups => $basketgroups, diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl index 61f0962..3883c46 100755 --- a/acqui/neworderempty.pl +++ b/acqui/neworderempty.pl @@ -203,8 +203,9 @@ my $count = scalar @rates; my @loop_currency = (); for ( my $i = 0 ; $i < $count ; $i++ ) { my %line; - $line{currency} = $rates[$i]->{'currency'}; + $line{currcode} = $rates[$i]->{'currency'}; $line{rate} = $rates[$i]->{'rate'}; + $line{selected} = 1 if ($line{currcode} eq $data->{currency}); push @loop_currency, \%line; } @@ -336,7 +337,7 @@ $template->param( name => $bookseller->{'name'}, cur_active_sym => $cur->{'symbol'}, cur_active => $cur->{'currency'}, - currency => $bookseller->{'listprice'} || $cur->{'currency'}, # eg: 'EUR' +# currency => $bookseller->{'listprice'} || $cur->{'currency'}, # eg: 'EUR' loop_currencies => \@loop_currency, orderexists => ( $new eq 'yes' ) ? 0 : 1, title => $data->{'title'}, @@ -348,7 +349,7 @@ $template->param( quantity => $data->{'quantity'}, quantityrec => $data->{'quantity'}, rrp => $data->{'rrp'}, - listprice => sprintf("%.2f", $data->{'listprice'}||$listprice), + listprice => sprintf("%.2f", $data->{'listprice'}||$data->{'price'}||$listprice), total => sprintf("%.2f", ($data->{'ecost'}||0)*($data->{'quantity'}||0) ), ecost => $data->{'ecost'}, notes => $data->{'notes'}, diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js index 537aa26..705bc24 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js @@ -645,11 +645,14 @@ function calcNeworderTotal(){ var quantity = new Number(f.quantity.value); var discount = new Number(f.discount.value); var listinc = new Number (f.listinc.value); - var currency = f.currency.value; + //var currency = f.currency.value; var applygst = new Number (f.applygst.value); var listprice = new Number(f.listprice.value); var invoiceingst = new Number (f.invoiceincgst.value); - var exchangerate = new Number(f.elements[currency].value); //get exchange rate +// var exchangerate = new Number(f.elements[currency].value); //get exchange rate + var currcode = new String(document.getElementById('currency').value); + var exchangerate = new Number(document.getElementById(currcode).value); + var gst_on=(!listinc && invoiceingst); //do real stuff diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl index e53c7da..a82029d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl @@ -127,7 +127,7 @@ ff.submit(); " /> " /> " /> - " /> +" />--> " /> " /> " /> @@ -135,7 +135,7 @@ ff.submit(); " /> - " value="" /> + " name="" value="" />
    1. @@ -263,14 +263,25 @@ ff.submit();
    2. +
    3. + + Currency: + " /> + + + + +
    4. Vendor price: " /> - " onchange="calcNeworderTotal()" /> (entered as ) - + " onchange="calcNeworderTotal()" />
    5. -- 1.5.4.5 From chrisc at catalyst.net.nz Wed Dec 1 20:20:21 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Thu, 2 Dec 2010 08:20:21 +1300 Subject: [Koha-patches] [PATCH] Suggestions - adding more acq fields in staff interface - price, quantity, currency and totals In-Reply-To: <1291183650-19326-1-git-send-email-savitra.sirohi@osslabs.biz> References: <1291183650-19326-1-git-send-email-savitra.sirohi@osslabs.biz> Message-ID: <20101201192021.GM3810@rorohiko> Hi Guys Patch looks good at a quick first glance .. do you have a bug number for it? Chris -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From chrisc at catalyst.net.nz Wed Dec 1 20:27:57 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Thu, 2 Dec 2010 08:27:57 +1300 Subject: [Koha-patches] Bug 3624 reopened In-Reply-To: References: Message-ID: <20101201192757.GN3810@rorohiko> Hi Fridolyn How are you making your patches? You might want to have a look at http://wiki.koha-community.org/wiki/Version_Control_Using_Git#Share_with_the_rest_of_the_world using git format-patch will make it easier for others to test and signoff on them :) Chris * Fridolyn SOMERS (fridolyn.somers at gmail.com) wrote: > Bug 3624 reopened : > > Patch for SQL structure : > > Index: acqui/basketgroup.pl > =================================================================== > --- acqui/basketgroup.pl > +++ acqui/basketgroup.pl > @@ -431,6 +453,7 @@ > name => $basketgroupname, > booksellerid => $booksellerid, > basketlist => \@baskets, > + billingplace => $billingplace, > deliveryplace => $deliveryplace, > deliverycomment => $deliverycomment, > closed => $close, > Index: installer/data/mysql/kohastructure.sql > =================================================================== > --- installer/data/mysql/kohastructure.sql > +++ installer/data/mysql/kohastructure.sql > @@ -2342,6 +2342,9 @@ > `name` varchar(50) default NULL, > `closed` tinyint(1) default NULL, > `booksellerid` int(11) NOT NULL, > + `deliveryplace` varchar(10) default NULL, > + `deliverycomment` varchar(255) default NULL, > + `billingplace` varchar(10) default NULL, > PRIMARY KEY (`id`), > KEY `booksellerid` (`booksellerid`), > CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) > REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE > > Patch for a few XHTML errors in template : > > Index: koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > =================================================================== > --- koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > (revision 468) > +++ koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > (working copy) > @@ -222,14 +222,14 @@ >

      > >

      > >

      > @@ -253,7 +253,7 @@ > > > > -
      > Close
      > +
      value="yes"> Close
      > value="" /> > > value="" /> > > -- > Fridolyn SOMERS > ICT engineer > PROGILONE - Lyon - France > fridolyn.somers at gmail.com > Index: acqui/basketgroup.pl > =================================================================== > --- acqui/basketgroup.pl > +++ acqui/basketgroup.pl > @@ -431,6 +453,7 @@ > name => $basketgroupname, > booksellerid => $booksellerid, > basketlist => \@baskets, > + billingplace => $billingplace, > deliveryplace => $deliveryplace, > deliverycomment => $deliverycomment, > closed => $close, > Index: installer/data/mysql/kohastructure.sql > =================================================================== > --- installer/data/mysql/kohastructure.sql > +++ installer/data/mysql/kohastructure.sql > @@ -2342,6 +2342,9 @@ > `name` varchar(50) default NULL, > `closed` tinyint(1) default NULL, > `booksellerid` int(11) NOT NULL, > + `deliveryplace` varchar(10) default NULL, > + `deliverycomment` varchar(255) default NULL, > + `billingplace` varchar(10) default NULL, > PRIMARY KEY (`id`), > KEY `booksellerid` (`booksellerid`), > CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE > Index: koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > =================================================================== > --- koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl (revision 468) > +++ koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl (working copy) > @@ -222,14 +222,14 @@ >

      > >

      > >

      > @@ -253,7 +253,7 @@ > > > > -
      Close
      > +
      Close
      > " /> > > " /> > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From savitra.sirohi at osslabs.biz Wed Dec 1 20:39:37 2010 From: savitra.sirohi at osslabs.biz (savitra sirohi) Date: Thu, 2 Dec 2010 01:09:37 +0530 Subject: [Koha-patches] [PATCH] Suggestions - adding more acq fields in staff interface - price, quantity, currency and totals In-Reply-To: <20101201192021.GM3810@rorohiko> References: <1291183650-19326-1-git-send-email-savitra.sirohi@osslabs.biz> <20101201192021.GM3810@rorohiko> Message-ID: Chris, I just created bug 5464 for this. Thanks, Savitra On Thu, Dec 2, 2010 at 12:50 AM, Chris Cormack wrote: > Hi Guys > > Patch looks good at a quick first glance .. do you have a bug number for > it? > > Chris > -- > Chris Cormack > Catalyst IT Ltd. > +64 4 803 2238 > PO Box 11-053, Manners St, Wellington 6142, New Zealand > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (GNU/Linux) > > iEYEARECAAYFAkz2n/UACgkQZgbcHEvgMLNlxQCfSSUHKI+fuKIjume0Q4fzAioo > HLcAn1buHnhjloENHXseMWRF8TeupFDc > =pqY6 > -----END PGP SIGNATURE----- > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From f.demians at tamil.fr Wed Dec 1 22:38:21 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Wed, 1 Dec 2010 22:38:21 +0100 Subject: [Koha-patches] [PATCH 1/2] Bug 3154: Improving facets perfomance Message-ID: <1291239502-21852-1-git-send-email-f.demians@tamil.fr> From: Fridolyn SOMERS Reformated as a git patch, bug chrisc at catalyst.net.nz Signed-off-by: Fr?d?ric Demians --- C4/Search.pm | 74 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 49 insertions(+), 25 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 93999bb..86d403c 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -418,7 +418,6 @@ sub getRecords { for ( my $j = $offset ; $j < $times ; $j++ ) { my $records_hash; my $record; - my $facet_record; ## Check if it's an index scan if ($scan) { @@ -451,33 +450,58 @@ sub getRecords { # warn "RECORD $j:".$record; $results_hash->{'RECORDS'}[$j] = $record; - - # Fill the facets while we're looping, but only for the biblioserver - $facet_record = MARC::Record->new_from_usmarc($record) - if $servers[ $i - 1 ] =~ /biblioserver/; - - #warn $servers[$i-1]."\n".$record; #.$facet_record->title(); - if ($facet_record) { - for ( my $k = 0 ; $k <= @$facets ; $k++ ) { - ($facets->[$k]) or next; - my @fields = map {$facet_record->field($_)} @{$facets->[$k]->{'tags'}} ; - for my $field (@fields) { - my @subfields = $field->subfields(); - for my $subfield (@subfields) { - my ( $code, $data ) = @$subfield; - ($code eq $facets->[$k]->{'subfield'}) or next; - $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++; - } - } - $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = - $facets->[$k]->{'label_value'}; - $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = - $facets->[$k]->{'expanded'}; - } - } } + } $results_hashref->{ $servers[ $i - 1 ] } = $results_hash; + + # Fill the facets while we're looping, but only for the biblioserver and not for a scan + if ( !$scan && $servers[ $i - 1 ] =~ /biblioserver/ ) { + + my $jmax = $size; + if ( $jmax > 500 ) { + $jmax = 500; # limit to 500 first records + } + + for ( my $k = 0 ; $k <= @$facets ; $k++ ) { + ($facets->[$k]) or next; + my @fcodes = @{$facets->[$k]->{'tags'}}; + my $sfcode = $facets->[$k]->{'subfield'}; + + for ( my $j = 0 ; $j < $jmax ; $j++ ) { + my $render_record = $results[ $i - 1 ]->record($j)->render(); + my @used_datas = (); + + foreach my $fcode (@fcodes) { + + # avoid first line + my $field_pattern = '\n'.$fcode.' ([^\n]+)'; + my @field_tokens = ( $render_record =~ /$field_pattern/g ) ; + + foreach my $field_token (@field_tokens) { + my $subfield_pattern = '\$'.$sfcode.' ([^\$]+)'; + my @subfield_values = ( $field_token =~ /$subfield_pattern/g ); + + foreach my $subfield_value (@subfield_values) { + + my $data = $subfield_value; + $data =~ s/^\s+//; # trim left + $data =~ s/\s+$//; # trim right + + unless ( $data ~~ @used_datas ) { + $facets_counter->{ $facets->[$k]->{'link_value'} }->{$data}++; + push @used_datas, $data; + } + } # subfields + } # fields + } # field codes + } # records + + $facets_info->{ $facets->[$k]->{'link_value'} }->{'label_value'} = $facets->[$k]->{'label_value'}; + $facets_info->{ $facets->[$k]->{'link_value'} }->{'expanded'} = $facets->[$k]->{'expanded'}; + } # facets + } + # End PROGILONE } # warn "connection ", $i-1, ": $size hits"; -- 1.7.3.2 From f.demians at tamil.fr Wed Dec 1 22:38:22 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Wed, 1 Dec 2010 22:38:22 +0100 Subject: [Koha-patches] [PATCH 2/2] Bug 3154 Re-activate facet count In-Reply-To: <1291239502-21852-1-git-send-email-f.demians@tamil.fr> References: <1291239502-21852-1-git-send-email-f.demians@tamil.fr> Message-ID: <1291239502-21852-2-git-send-email-f.demians@tamil.fr> This patch complements and comments Fridolyn proposed patch. Facet count was disabled to hide that the count is wrong since it was calculated based on the first result displayed page. This patch reactivate facets count. I can confirm that Fridolyn trick is efficient and quick but: - Facets count are still wrong. The count are better (ie bigger) but still wrong as soon as result set is larger than examined set used to build facets. - Libraries facet remains misleading. If a biblio record contains a 'foo' library but is at the end of the resultset, 'foo' Library isn't displayed. A patron can conclude that the ressource he's not available at his library. - It reports a huge charge load on Zebra server which has to return a LOT of records to build facets. It should be tested with simultaneous requests in order to see if it impacts Zebra overall performances. Signed-off-by: Fr?d?ric Demians --- .../opac-tmpl/prog/en/includes/opac-facets.inc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc index 85719f3..8563d8b 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/opac-facets.inc @@ -18,7 +18,7 @@ Libraries -- 1.7.3.2 From fridolyn.somers at gmail.com Thu Dec 2 09:14:43 2010 From: fridolyn.somers at gmail.com (Fridolyn SOMERS) Date: Thu, 2 Dec 2010 09:14:43 +0100 Subject: [Koha-patches] Bug 3624 reopened In-Reply-To: <20101201192757.GN3810@rorohiko> References: <20101201192757.GN3810@rorohiko> Message-ID: Hie, I'm sorry, I had only a few time for this bugs and I'm a beginner in GIT. I've created them with SVN. I will look at WIKI. Thanks. On Wed, Dec 1, 2010 at 8:27 PM, Chris Cormack wrote: > Hi Fridolyn > > How are you making your patches? > > You might want to have a look at > > http://wiki.koha-community.org/wiki/Version_Control_Using_Git#Share_with_the_rest_of_the_world > > using git format-patch will make it easier for others to test and > signoff on them :) > > Chris > > * Fridolyn SOMERS (fridolyn.somers at gmail.com) wrote: > > Bug 3624 reopened : > > > > Patch for SQL structure : > > > > Index: acqui/basketgroup.pl > > =================================================================== > > --- acqui/basketgroup.pl > > +++ acqui/basketgroup.pl > > @@ -431,6 +453,7 @@ > > name => $basketgroupname, > > booksellerid => $booksellerid, > > basketlist => \@baskets, > > + billingplace => $billingplace, > > deliveryplace => $deliveryplace, > > deliverycomment => $deliverycomment, > > closed => $close, > > Index: installer/data/mysql/kohastructure.sql > > =================================================================== > > --- installer/data/mysql/kohastructure.sql > > +++ installer/data/mysql/kohastructure.sql > > @@ -2342,6 +2342,9 @@ > > `name` varchar(50) default NULL, > > `closed` tinyint(1) default NULL, > > `booksellerid` int(11) NOT NULL, > > + `deliveryplace` varchar(10) default NULL, > > + `deliverycomment` varchar(255) default NULL, > > + `billingplace` varchar(10) default NULL, > > PRIMARY KEY (`id`), > > KEY `booksellerid` (`booksellerid`), > > CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) > > REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE > > > > Patch for a few XHTML errors in template : > > > > Index: koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > > =================================================================== > > --- koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > > (revision 468) > > +++ koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > > (working copy) > > @@ -222,14 +222,14 @@ > >

      > > > >

      > > > >

      > > @@ -253,7 +253,7 @@ > > > > > > > > -
      > > Close
      > > +
      > value="yes"> Close
      > > > value="" /> > > > > > value="" /> > > > > -- > > Fridolyn SOMERS > > ICT engineer > > PROGILONE - Lyon - France > > fridolyn.somers at gmail.com > > > Index: acqui/basketgroup.pl > > =================================================================== > > --- acqui/basketgroup.pl > > +++ acqui/basketgroup.pl > > @@ -431,6 +453,7 @@ > > name => $basketgroupname, > > booksellerid => $booksellerid, > > basketlist => \@baskets, > > + billingplace => $billingplace, > > deliveryplace => $deliveryplace, > > deliverycomment => $deliverycomment, > > closed => $close, > > Index: installer/data/mysql/kohastructure.sql > > =================================================================== > > --- installer/data/mysql/kohastructure.sql > > +++ installer/data/mysql/kohastructure.sql > > @@ -2342,6 +2342,9 @@ > > `name` varchar(50) default NULL, > > `closed` tinyint(1) default NULL, > > `booksellerid` int(11) NOT NULL, > > + `deliveryplace` varchar(10) default NULL, > > + `deliverycomment` varchar(255) default NULL, > > + `billingplace` varchar(10) default NULL, > > PRIMARY KEY (`id`), > > KEY `booksellerid` (`booksellerid`), > > CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) > REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE > > > Index: koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > > =================================================================== > > --- koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > (revision 468) > > +++ koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basketgroup.tmpl > (working copy) > > @@ -222,14 +222,14 @@ > >

      > > > >

      > > > >

      > > @@ -253,7 +253,7 @@ > > > > > > > > -
      name="close"> Close
      > > +
      name="close" value="yes"> Close
      > > value="" /> > > > > name="basketgroupid" value="" /> > > > _______________________________________________ > > Koha-patches mailing list > > Koha-patches at lists.koha-community.org > > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > > website : http://www.koha-community.org/ > > git : http://git.koha-community.org/ > > bugs : http://bugs.koha-community.org/ > > > -- > Chris Cormack > Catalyst IT Ltd. > +64 4 803 2238 > PO Box 11-053, Manners St, Wellington 6142, New Zealand > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (GNU/Linux) > > iEYEARECAAYFAkz2ob0ACgkQZgbcHEvgMLMhAQCgkbhonN4i0cCygBKUFxrns7QU > DKQAnjyhEaaZGaNA/vgdc4MCRz5RlCvd > =AOn+ > -----END PGP SIGNATURE----- > > -- Fridolyn SOMERS ICT engineer PROGILONE - Lyon - France fridolyn.somers at gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From M.de.Rooy at rijksmuseum.nl Thu Dec 2 13:45:13 2010 From: M.de.Rooy at rijksmuseum.nl (Marcel de Rooy) Date: Thu, 2 Dec 2010 12:45:13 +0000 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5104: Add control number as search option to acq z39.50 search Message-ID: <809BE39CD64BFD4EB9036172EBCCFA311A59F0@S-MAIL-1B.rijksmuseum.intra> From: Katrin Fischer Adds control number as search option to z39.50 search in acquisitions. Signed-off-by: Marcel de Rooy --- acqui/z3950_search.pl | 6 ++++++ .../prog/en/modules/acqui/z3950_search.tmpl | 4 +++- 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/acqui/z3950_search.pl b/acqui/z3950_search.pl index 182e121..b0a8b92 100755 --- a/acqui/z3950_search.pl +++ b/acqui/z3950_search.pl @@ -57,6 +57,7 @@ my $lccn = $input->param('lccn'); my $lccall = $input->param('lccall'); my $subject= $input->param('subject'); my $dewey = $input->param('dewey'); +my $controlnumber = $input->param('controlnumber'); my $op = $input->param('op'); my $booksellerid = $input->param('booksellerid'); my $basketno = $input->param('basketno'); @@ -118,6 +119,7 @@ if ( $op ne "do_search" ) { lccall => $lccall, title => $title, author => $author, + controlnumber=> $controlnumber, serverloop => $serverloop, opsearch => "search", biblionumber => $biblionumber, @@ -164,6 +166,10 @@ else { $query .= " \@attr 1=16 \@attr 2=3 \@attr 3=1 \@attr 4=1 \@attr 5=1 \@attr 6=1 \"$lccall\" "; $nterms++; } + if ($controlnumber) { + $query .= " \@attr 1=12 \"$controlnumber\" "; + $nterms++; + } for my $i (1..$nterms-1) { $query = "\@and " . $query; } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl index 2219dfa..063520c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl @@ -75,7 +75,9 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color :
      1. " />
      2. " />
      3. -
      +
    6. +
    7. +
    -- 1.6.0.6 From M.de.Rooy at rijksmuseum.nl Thu Dec 2 15:35:32 2010 From: M.de.Rooy at rijksmuseum.nl (Marcel de Rooy) Date: Thu, 2 Dec 2010 14:35:32 +0000 Subject: [Koha-patches] [PATCH] Enhancement 5320 (Estimate optionally next planned date for serials without periodicity) WHITESPACE FIX Message-ID: <809BE39CD64BFD4EB9036172EBCCFA311A5A80@S-MAIL-1B.rijksmuseum.intra> For periodicity Irregular, Unknown or "Without periodicity", it would be helpful if Koha could suggest a next planned date when receiving an issue based on the time interval between the last two receivals of this serial. This option is triggered by new local-use preference SerialEstimatePlannedDate. If this option exists and contains uppercase W for without periodicity, I for irregular or U for unknown, or a combination of those characters, the option is enabled for these particular periodicities. Behavior does not change for other periodicities. --- C4/Serials.pm | 36 +++++++++++++++++++++++++++++++++++- 1 files changed, 35 insertions(+), 1 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index 32e46be..3835e2e 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -2178,7 +2178,12 @@ sub GetNextDate(@) { # warn "DOW $dayofweek"; if ( $subscription->{periodicity} % 16 == 0 ) { # 'without regularity' || 'irregular' - return 0; + return 0 unless _estimate_option_enabled($subscription->{periodicity}); + my $estimate_days=_get_estimate_for_no_periodicity($subscription); + if(!$estimate_days) { #return today + ($year, $month, $day)= (localtime)[5,4,3]; $year+=1900; $month++; + } + @resultdate = Add_Delta_Days($year,$month,$day,$estimate_days); } # daily : n / week @@ -2305,6 +2310,35 @@ sub GetNextDate(@) { return "$resultdate"; } +sub _estimate_option_enabled { #check preference + my $periodicity= shift; + my $pref=C4::Context->preference('SerialEstimatePlannedDate'); + my $period_char= substr("WIU",-1+$periodicity/16,1); + #16=Without,32=Irreg,48=Unknwn + return $pref=~ /$period_char/; +} +sub _get_estimate_for_no_periodicity { + my ($subscription) = @_; + + my $dbh= C4::Context->dbh; + my $sth= $dbh->prepare('SELECT + YEAR(COALESCE(publisheddate,planneddate)), + MONTH(COALESCE(publisheddate,planneddate)), + DAY(COALESCE(publisheddate,planneddate)) + FROM serial + WHERE subscriptionid = ? AND + (planneddate IS NOT NULL OR publisheddate IS NOT NULL) + ORDER BY serialid DESC LIMIT 2'); + $sth->execute($subscription->{subscriptionid}); + my $dates= $sth->fetchall_arrayref; #last two non-null dates + $sth->finish; + return if @$dates<2 || + !check_date(@{$dates->[1]}) || !check_date(@{$dates->[0]}); + + #pass args in chronological order to Delta_Days, return difference in days + #check on positive result + my $d; return ($d=Delta_Days(@{$dates->[1]}, @{$dates->[0]}))>0? $d: 1; +} =head2 itemdata -- 1.6.0.6 From lrea at nekls.org Thu Dec 2 15:48:15 2010 From: lrea at nekls.org (Liz Rea) Date: Thu, 2 Dec 2010 08:48:15 -0600 Subject: [Koha-patches] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN Message-ID: <1291301295-5097-1-git-send-email-lrea@nekls.org> Backing down the version to 2.0301 to match the Lenny available package. --- C4/Installer/PerlDependencies.pm | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/C4/Installer/PerlDependencies.pm b/C4/Installer/PerlDependencies.pm index eadc569..aec83b8 100644 --- a/C4/Installer/PerlDependencies.pm +++ b/C4/Installer/PerlDependencies.pm @@ -467,7 +467,7 @@ our $PERL_DEPS = { 'Business::ISBN' => { 'usage' => 'Core', 'required' => '1', - 'min_ver' => '2.05', + 'min_ver' => '2.0301', }, }; -- 1.5.6.5 From savitra.sirohi at osslabs.biz Thu Dec 2 16:14:57 2010 From: savitra.sirohi at osslabs.biz (savitra sirohi) Date: Thu, 2 Dec 2010 20:44:57 +0530 Subject: [Koha-patches] [PATCH] Acquisitions - ability to set currency in order screens - Bug 5466 Message-ID: Hi Chris, the bug for this patch is 5466. Thanks. On Wed, Dec 1, 2010 at 4:16 PM, wrote: > From: Savitra Sirohi > > --- > acqui/basket.pl | 9 +++++++-- > acqui/neworderempty.pl | 7 ++++--- > koha-tmpl/intranet-tmpl/prog/en/js/acq.js | 7 +++++-- > .../prog/en/modules/acqui/neworderempty.tmpl | 19 > +++++++++++++++---- > 4 files changed, 31 insertions(+), 11 deletions(-) > > diff --git a/acqui/basket.pl b/acqui/basket.pl > index 005fcb9..928d150 100755 > --- a/acqui/basket.pl > +++ b/acqui/basket.pl > @@ -217,8 +217,12 @@ if ( $op eq 'delete_confirm' ) { > "loggedinuser: $loggedinuser; creationdate: %s; authorisedby: %s", > $basket->{creationdate}, $basket->{authorisedby}; > > + #to get active currency > + my $cur = GetCurrency(); > + > + > my @results = GetOrders( $basketno ); > - > + > my $gist = $bookseller->{gstrate} || C4::Context->preference("gist") > || 0; > my $discount = $bookseller->{'discount'} / 100; > my $total_rrp; # RRP Total, its value will be assigned to > $total_rrp_gsti or $total_rrp_gste depending of $bookseller->{'listincgst'} > @@ -310,7 +314,8 @@ if ( $op eq 'delete_confirm' ) { > gist_rrp => sprintf( "%.2f", $gist_rrp ), > total_rrp_gsti => sprintf( "%.2f", $total_rrp_gsti ), > total_est_gsti => sprintf( "%.2f", $total_est_gsti ), > - currency => $bookseller->{'listprice'}, > +# currency => $bookseller->{'listprice'}, > + currency => $cur->{'currency'}, > qty_total => $qty_total, > GST => $gist, > basketgroups => $basketgroups, > diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl > index 61f0962..3883c46 100755 > --- a/acqui/neworderempty.pl > +++ b/acqui/neworderempty.pl > @@ -203,8 +203,9 @@ my $count = scalar @rates; > my @loop_currency = (); > for ( my $i = 0 ; $i < $count ; $i++ ) { > my %line; > - $line{currency} = $rates[$i]->{'currency'}; > + $line{currcode} = $rates[$i]->{'currency'}; > $line{rate} = $rates[$i]->{'rate'}; > + $line{selected} = 1 if ($line{currcode} eq $data->{currency}); > push @loop_currency, \%line; > } > > @@ -336,7 +337,7 @@ $template->param( > name => $bookseller->{'name'}, > cur_active_sym => $cur->{'symbol'}, > cur_active => $cur->{'currency'}, > - currency => $bookseller->{'listprice'} || $cur->{'currency'}, > # eg: 'EUR' > +# currency => $bookseller->{'listprice'} || $cur->{'currency'}, > # eg: 'EUR' > loop_currencies => \@loop_currency, > orderexists => ( $new eq 'yes' ) ? 0 : 1, > title => $data->{'title'}, > @@ -348,7 +349,7 @@ $template->param( > quantity => $data->{'quantity'}, > quantityrec => $data->{'quantity'}, > rrp => $data->{'rrp'}, > - listprice => sprintf("%.2f", $data->{'listprice'}||$listprice), > + listprice => sprintf("%.2f", > $data->{'listprice'}||$data->{'price'}||$listprice), > total => sprintf("%.2f", > ($data->{'ecost'}||0)*($data->{'quantity'}||0) ), > ecost => $data->{'ecost'}, > notes => $data->{'notes'}, > diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js > b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js > index 537aa26..705bc24 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/js/acq.js > +++ b/koha-tmpl/intranet-tmpl/prog/en/js/acq.js > @@ -645,11 +645,14 @@ function calcNeworderTotal(){ > var quantity = new Number(f.quantity.value); > var discount = new Number(f.discount.value); > var listinc = new Number (f.listinc.value); > - var currency = f.currency.value; > + //var currency = f.currency.value; > var applygst = new Number (f.applygst.value); > var listprice = new Number(f.listprice.value); > var invoiceingst = new Number (f.invoiceincgst.value); > - var exchangerate = new Number(f.elements[currency].value); //get > exchange rate > +// var exchangerate = new Number(f.elements[currency].value); > //get exchange rate > + var currcode = new > String(document.getElementById('currency').value); > + var exchangerate = new > Number(document.getElementById(currcode).value); > + > var gst_on=(!listinc && invoiceingst); > > //do real stuff > diff --git > a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > index e53c7da..a82029d 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > @@ -127,7 +127,7 @@ ff.submit(); > " /> > " /> > " /> > - " /> > +" />--> > " /> > " /> > " /> > @@ -135,7 +135,7 @@ ff.submit(); > " /> > > > - " > value="" /> > + " > name="" value="" /> > >
    1. > > @@ -263,14 +263,25 @@ ff.submit(); > > >
    2. > +
    3. > + > + Currency: > + id="currency" value="" /> > + > + > + > + > +
    4. >
    5. > > Vendor price: > id="listprice" value="" /> > > > - id="listprice" value="" > onchange="calcNeworderTotal()" /> (entered as ) > - > + id="listprice" value="" > onchange="calcNeworderTotal()" /> > >
    6. > > -- > 1.5.4.5 > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From cnighswonger at foundations.edu Thu Dec 2 16:39:46 2010 From: cnighswonger at foundations.edu (Chris Nighswonger) Date: Thu, 2 Dec 2010 10:39:46 -0500 Subject: [Koha-patches] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: <1291301295-5097-1-git-send-email-lrea@nekls.org> References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: On Thu, Dec 2, 2010 at 9:48 AM, Liz Rea wrote: > Backing down the version to 2.0301 to match the Lenny available package. > Hmm... 2.05 is the newest version of this module in cpan. I think Makefile.PL should always ask for what is truly the newest version rather than being tied to a particular distribution. my $0.02 worth Kind Regards, Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From lrea at nekls.org Thu Dec 2 17:16:47 2010 From: lrea at nekls.org (Liz Rea) Date: Thu, 2 Dec 2010 10:16:47 -0600 Subject: [Koha-patches] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: I did actually think about this before I did it. :) I asked around if it would be better to update the documentation to take the package out of the install script and add it to the CPAN list, or do what I did, and the general consensus was that backing down the required version was a better option (since the newer version doesn't add any functionality that we actually use), so I did that. The reason is that a lot of people use Lenny (and or Ubuntu, which would cause this same issue), and Squeeze/Sid aren't stable yet (even though they work fine, I know that). Every indication I've gotten is that "we" prefer packaged versions of things instead of pulling direct from CPAN. I chose to eliminate the error message when installing on Lenny/Ubuntu from Makefile.PL, and allow a required version that was lower than the current version to help eliminate a bad user experience (An error!!! OMG! What do I do!). I truly don't care which way it's done: we can remove it from the package script and add it to the modules requiring installation through CPAN, no problem. I'll do those patches too, if necessary. That said, I don't think the reasoning behind this particular patch is unsound, based on past precedent. Liz Rea NEKLS On Thu, Dec 2, 2010 at 9:39 AM, Chris Nighswonger < cnighswonger at foundations.edu> wrote: > On Thu, Dec 2, 2010 at 9:48 AM, Liz Rea wrote: > >> Backing down the version to 2.0301 to match the Lenny available package. >> > > Hmm... 2.05 is the newest version of this module in cpan. I think > Makefile.PL should always ask for what is truly the newest version rather > than being tied to a particular distribution. > > my $0.02 worth > > Kind Regards, > Chris > -------------- next part -------------- An HTML attachment was scrubbed... URL: From cnighswonger at foundations.edu Thu Dec 2 17:25:10 2010 From: cnighswonger at foundations.edu (Chris Nighswonger) Date: Thu, 2 Dec 2010 11:25:10 -0500 Subject: [Koha-patches] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: CC'ing the dev list.... On Thu, Dec 2, 2010 at 11:16 AM, Liz Rea wrote: On Thu, Dec 2, 2010 at 9:39 AM, Chris Nighswonger < cnighswonger at foundations.edu> wrote: > On Thu, Dec 2, 2010 at 9:48 AM, Liz Rea wrote: > >> Backing down the version to 2.0301 to match the Lenny available package. >> > > Hmm... 2.05 is the newest version of this module in cpan. I think > Makefile.PL should always ask for what is truly the newest version rather > than being tied to a particular distribution. > > my $0.02 worth > > Kind Regards, > Chris > > I did actually think about this before I did it. :) > > I asked around if it would be better to update the documentation to take > the package out of the install script and add it to the CPAN list, or do > what I did, and the general consensus was that backing down the required > version was a better option (since the newer version doesn't add any > functionality that we actually use), so I did that. > > The reason is that a lot of people use Lenny (and or Ubuntu, which would > cause this same issue), and Squeeze/Sid aren't stable yet (even though they > work fine, I know that). Every indication I've gotten is that "we" prefer > packaged versions of things instead of pulling direct from CPAN. I chose to > eliminate the error message when installing on Lenny/Ubuntu from > Makefile.PL, and allow a required version that was lower than the current > version to help eliminate a bad user experience (An error!!! OMG! What do I > do!). > > I truly don't care which way it's done: we can remove it from the package > script and add it to the modules requiring installation through CPAN, no > problem. I'll do those patches too, if necessary. > > That said, I don't think the reasoning behind this particular patch is > unsound, based on past precedent. > I'm not familiar with what has been the rule in the past. However, it is my opinion we should establish one standard rather than attempting to work around two different ones. If we are going to take the Debian/Ubuntu repo version as the standard, we should set all modules available in those repos to the max current version available in those repos, and be sure that policy is clear in the docs. We should also develop only over those currently available versions. (I realize in this particular case there is no programmatically compelling reason to use the latest version, but that is not always the case.) FWIW, I favor Debian/Ubuntu personally, but am concerned about this from a policy standpoint. If we indeed see this as the best direction to go, I recommend we add something like this to our coding guidelines: When/Where available, Koha Perl dependencies should be sourced from the current stable Debian/Ubuntu repository. Perl dependencies not available in the repository should be sourced from CPAN. Code development should be limited to the most current version available from the proper source. Exceptions to this policy may be made by gaining consensus from the developer section of the community. or some such language... Kind Regards, Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From paul.poulain at biblibre.com Thu Dec 2 17:28:09 2010 From: paul.poulain at biblibre.com (Paul Poulain) Date: Thu, 02 Dec 2010 17:28:09 +0100 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: <4CF7C919.1060706@biblibre.com> Le 02/12/2010 17:25, Chris Nighswonger a ?crit : >> I did actually think about this before I did it. :) >> >> I asked around if it would be better to update the documentation to take >> the package out of the install script and add it to the CPAN list, or do >> what I did, and the general consensus was that backing down the required >> version was a better option (since the newer version doesn't add any >> functionality that we actually use), so I did that. >> >> The reason is that a lot of people use Lenny (and or Ubuntu, which would >> cause this same issue), and Squeeze/Sid aren't stable yet (even though they >> work fine, I know that). Every indication I've gotten is that "we" prefer >> packaged versions of things instead of pulling direct from CPAN. I chose to >> eliminate the error message when installing on Lenny/Ubuntu from >> Makefile.PL, and allow a required version that was lower than the current >> version to help eliminate a bad user experience (An error!!! OMG! What do I >> do!). >> you can count BibLibre in "we" : we prefer packaged versions, no doubts ! So ++ to your proposition to have the oldest version that works fine required ! -- Paul POULAIN http://www.biblibre.com Expert en Logiciels Libres pour l'info-doc Tel : (33) 4 91 81 35 08 From cfouts at liblime.com Thu Dec 2 17:48:31 2010 From: cfouts at liblime.com (Clay Fouts) Date: Thu, 2 Dec 2010 08:48:31 -0800 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: Typically they're called "requirements" because they establish a minimum. If a particular version is known to work and passes the tests, why require a system to have a higher version installed? Why instruct users to install from apt at all if they're just going to have to update all the modules from CPAN anyway? Why warn them they *need* to upgrade if in reality they don't? Issuing a warning during the build process should indicate something potentially dire, not making noise about a preference. Regards, Clay 2010/12/2 Chris Nighswonger > CC'ing the dev list.... > > > On Thu, Dec 2, 2010 at 11:16 AM, Liz Rea wrote: > On Thu, Dec 2, 2010 at 9:39 AM, Chris Nighswonger < > cnighswonger at foundations.edu> wrote: > >> On Thu, Dec 2, 2010 at 9:48 AM, Liz Rea wrote: >> >>> Backing down the version to 2.0301 to match the Lenny available package. >>> >> >> Hmm... 2.05 is the newest version of this module in cpan. I think >> Makefile.PL should always ask for what is truly the newest version rather >> than being tied to a particular distribution. >> >> my $0.02 worth >> >> Kind Regards, >> Chris >> > > > >> I did actually think about this before I did it. :) >> >> I asked around if it would be better to update the documentation to take >> the package out of the install script and add it to the CPAN list, or do >> what I did, and the general consensus was that backing down the required >> version was a better option (since the newer version doesn't add any >> functionality that we actually use), so I did that. >> >> The reason is that a lot of people use Lenny (and or Ubuntu, which would >> cause this same issue), and Squeeze/Sid aren't stable yet (even though they >> work fine, I know that). Every indication I've gotten is that "we" prefer >> packaged versions of things instead of pulling direct from CPAN. I chose to >> eliminate the error message when installing on Lenny/Ubuntu from >> Makefile.PL, and allow a required version that was lower than the current >> version to help eliminate a bad user experience (An error!!! OMG! What do I >> do!). >> >> I truly don't care which way it's done: we can remove it from the package >> script and add it to the modules requiring installation through CPAN, no >> problem. I'll do those patches too, if necessary. >> >> That said, I don't think the reasoning behind this particular patch is >> unsound, based on past precedent. >> > > I'm not familiar with what has been the rule in the past. However, it is my > opinion we should establish one standard rather than attempting to work > around two different ones. > > If we are going to take the Debian/Ubuntu repo version as the standard, we > should set all modules available in those repos to the max current version > available in those repos, and be sure that policy is clear in the docs. We > should also develop only over those currently available versions. (I realize > in this particular case there is no programmatically compelling reason to > use the latest version, but that is not always the case.) > > FWIW, I favor Debian/Ubuntu personally, but am concerned about this from a > policy standpoint. > > If we indeed see this as the best direction to go, I recommend we add > something like this to our coding guidelines: When/Where available, Koha > Perl dependencies should be sourced from the current stable Debian/Ubuntu > repository. Perl dependencies not available in the repository should be > sourced from CPAN. Code development should be limited to the most current > version available from the proper source. Exceptions to this policy may be > made by gaining consensus from the developer section of the community. > > or some such language... > > Kind Regards, > Chris > > _______________________________________________ > Koha-devel mailing list > Koha-devel at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-devel > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -------------- next part -------------- An HTML attachment was scrubbed... URL: From savitra.sirohi at osslabs.biz Thu Dec 2 12:31:49 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Thu, 2 Dec 2010 17:01:49 +0530 Subject: [Koha-patches] [PATCH] Analytical records: storing bibnumber and itemnumber in subfields 0 and 9, plus other mapping changes Message-ID: <1291289509-8589-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi --- C4/Biblio.pm | 51 +++++++++++++++++++++++++++++++++++++++++------ C4/Items.pm | 8 +++--- cataloguing/additem.pl | 10 ++++---- 3 files changed, 53 insertions(+), 16 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index eb6ea42..ae51609 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -1569,9 +1569,9 @@ sub GetMarcHosts { $marcflavour ||="MARC21"; if ( $marcflavour eq "MARC21" ) { $tag = "773"; - $title_subf = "a"; - $bibnumber_subf ="w"; - $itemnumber_subf='o'; + $title_subf = "t"; + $bibnumber_subf ="0"; + $itemnumber_subf='9'; } elsif ($marcflavour eq "UNIMARC") { $tag = "461"; @@ -1675,13 +1675,50 @@ This function returns a host field populated with data from the host record, the sub PrepHostMarcField { my ($hostbiblionumber,$hostitemnumber) = @_; my $hostrecord = GetMarcBiblio($hostbiblionumber); + my $item = C4::Items::GetItem($hostitemnumber); + + #main entry + my $mainentry; + if ($hostrecord->subfield('100','a')){ + $mainentry = $hostrecord->subfield('100','a'); + } elsif ($hostrecord->subfield('110','a')){ + $mainentry = $hostrecord->subfield('110','a'); + } else { + $mainentry = $hostrecord->subfield('111','a'); + } + + #other fields + my $ed = $hostrecord->subfield('250','a'); + my $qualinfo = $hostrecord->subfield('260','a').(", ".$hostrecord->subfield('260','a')).(", ".$hostrecord->subfield('260','c')); + my $barcode = $item->{'barcode'}; + my $title = $hostrecord->subfield('245','a'); + + # record control number, 001 with 003 and prefix + my $recctrlno; + if ($hostrecord->field('001')){ + $recctrlno = $hostrecord->field('001')->data(); + if ($hostrecord->field('003')){ + $recctrlno = '('.$hostrecord->field('003')->data().')'.$recctrlno; + } + } + + # issn/isbn + my $issn = $hostrecord->subfield('022','a'); + my $isbn = $hostrecord->subfield('020','a'); + my $hostmarcfield = MARC::Field->new( 773, '', '', - 'w' => $hostbiblionumber, - 'o' => $hostitemnumber, - 'a' => $hostrecord->subfield('245','a'), - 'x' => $hostrecord->subfield('245','x') + '0' => $hostbiblionumber, + '9' => $hostitemnumber, + 'a' => $mainentry, + 'b' => $ed, + 'd' => $qualinfo, + 'o' => $barcode, + 't' => $title, + 'w' => $recctrlno, + 'x' => $issn, + 'z' => $isbn ); return $hostmarcfield; diff --git a/C4/Items.pm b/C4/Items.pm index 1f82db1..a908356 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1334,8 +1334,8 @@ sub GetHostItemsInfo { #MARC21 mapping, UNIMARC to be added foreach my $hostfield ( $record->field('773') ) { - my $hostbiblionumber = $hostfield->subfield("w"); - my $linkeditemnumber = $hostfield->subfield("o"); + my $hostbiblionumber = $hostfield->subfield("0"); + my $linkeditemnumber = $hostfield->subfield("9"); my @hostitemInfos = GetItemsInfo($hostbiblionumber); foreach my $hostitemInfo (@hostitemInfos){ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){ @@ -1453,8 +1453,8 @@ sub get_hostitemnumbers_of { #MARC21 mapping, UNIMARC to be added foreach my $hostfield ( $marcrecord->field('773') ) { - my $hostbiblionumber = $hostfield->subfield("w"); - my $linkeditemnumber = $hostfield->subfield("o"); + my $hostbiblionumber = $hostfield->subfield("0"); + my $linkeditemnumber = $hostfield->subfield("9"); my @itemnumbers; if (my $itemnumbers = get_itemnumbers_of($hostbiblionumber)->{$hostbiblionumber}) { diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 32c7a4f..816e884 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -303,7 +303,7 @@ if ($op eq "additem") { $nextop="additem"; } elsif ($op eq "delinkitem"){ foreach my $field ($record->field('773')){ - if ($field->subfield('o') eq $hostitemnumber){ + if ($field->subfield('9') eq $hostitemnumber){ $record->delete_field($field); last; } @@ -323,12 +323,12 @@ my @fields = $temp->fields(); my @hostitemnumbers; foreach my $hostfield ($temp->field('773')){ - if ($hostfield->subfield('w')){ - my $hostrecord = GetMarcBiblio($hostfield->subfield('w')); + if ($hostfield->subfield('0')){ + my $hostrecord = GetMarcBiblio($hostfield->subfield('0')); foreach my $hostitem ($hostrecord->field('952')){ - if ($hostitem->subfield('9') eq $hostfield->subfield('o')){ + if ($hostitem->subfield('9') eq $hostfield->subfield('9')){ push (@fields, $hostitem); - push (@hostitemnumbers, $hostfield->subfield('o')); + push (@hostitemnumbers, $hostfield->subfield('9')); } } } -- 1.5.4.5 From savitra.sirohi at osslabs.biz Thu Dec 2 12:32:25 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Thu, 2 Dec 2010 17:02:25 +0530 Subject: [Koha-patches] [PATCH] Analytical records: new command line script that establishes relationships between analytical records and host items and bibs Message-ID: <1291289545-8654-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi The script looks for host field (MARC21 773) in records, and based on barcode in subfield o populates host bibnumber in subfield 0 and host itemnumber in subfield 9. The script can be run after an import of analytical records, it can also be run in the crontab to maintain the relationships --- misc/migration_tools/create_analytical_rel.pl | 149 +++++++++++++++++++++++++ 1 files changed, 149 insertions(+), 0 deletions(-) create mode 100755 misc/migration_tools/create_analytical_rel.pl diff --git a/misc/migration_tools/create_analytical_rel.pl b/misc/migration_tools/create_analytical_rel.pl new file mode 100755 index 0000000..80355eb --- /dev/null +++ b/misc/migration_tools/create_analytical_rel.pl @@ -0,0 +1,149 @@ +#!/usr/bin/perl + +use strict; +#use warnings; FIXME - Bug 2505 +BEGIN { + # find Koha's Perl modules + # test carefully before changing this + use FindBin; + eval { require "$FindBin::Bin/../kohalib.pl" }; +} + +use C4::Context; +use C4::Biblio; +use C4::Items; +use Getopt::Long; + +$| = 1; + +# command-line parameters +my $want_help = 0; +my $do_update = 0; +my $wherestrings; + +my $result = GetOptions( + 'run-update' => \$do_update, + 'where=s@' => \$wherestrings, + 'h|help' => \$want_help, +); + +if (not $result or $want_help or not $do_update) { + print_usage(); + exit 0; +} + +my $num_bibs_processed = 0; +my $num_bibs_modified = 0; +my $num_nobib_foritemnumber = 0; +my $num_noitem_forbarcode = 0; +my $num_nobarcode_inhostfield =0; +my $num_hostfields_unabletomodify =0; +my $num_bad_bibs = 0; +my $dbh = C4::Context->dbh; +$dbh->{AutoCommit} = 0; + +process_bibs(); +$dbh->commit(); + +exit 0; + +sub process_bibs { + my $sql = "SELECT biblionumber FROM biblio JOIN biblioitems USING (biblionumber)"; + $sql.="WHERE ". join(" AND ",@$wherestrings) if ($wherestrings); + $sql.="ORDER BY biblionumber ASC"; + my $sth = $dbh->prepare($sql); + eval{$sth->execute();}; + if ($@){ die "error $@";}; + while (my ($biblionumber) = $sth->fetchrow_array()) { + $num_bibs_processed++; + process_bib($biblionumber); + + if (($num_bibs_processed % 100) == 0) { + print_progress_and_commit($num_bibs_processed); + } + } + + $dbh->commit; + + print <<_SUMMARY_; + +Create Analytical records relationships report +----------------------------------------------- +Number of bibs checked: $num_bibs_processed +Number of bibs modified: $num_bibs_modified +Number of hostfields with no barcodes: $num_nobarcode_inhostfield +Number of barcodes not found: $num_noitem_forbarcode +Number of hostfields unable to modify: $num_hostfields_unabletomodify +Number of bibs with errors: $num_bad_bibs +_SUMMARY_ +} + +sub process_bib { + my $biblionumber = shift; + + my $bib = GetMarcBiblio($biblionumber); + unless (defined $bib) { + print "\nCould not retrieve bib $biblionumber from the database - record is corrupt.\n"; + $num_bad_bibs++; + return; + } + #loop through each host field and populate subfield 0 and 9 + foreach my $hostfield ( $bib->field('773') ) { + if(my $barcode = $hostfield->subfield('o')){ + my $itemnumber = GetItemnumberFromBarcode($barcode); + if ($itemnumber ne undef){ + my $bibnumber = GetBiblionumberFromItemnumber($itemnumber); + if ($bibnumber ne undef){ + my $modif; + if ($hostfield->subfield('0') ne $bibnumber){ + $hostfield->update('0', $bibnumber); + $modif = 1; + } + if ($hostfield->subfield('9') ne $itemnumber){ + $hostfield->update('9', $itemnumber); + $modif=1; + } + if ($modif){ + $num_bibs_modified++; + my $modresult = ModBiblio($bib, $biblionumber, ''); + warn "Modifying biblio $biblionumber"; + if (!$modresult){ + warn "Unable to modify biblio $biblionumber with update host field"; + $num_hostfields_unabletomodify++; + } + } + } else { + warn "No biblio record found corressponding to itemnumber $itemnumber"; + $num_nobib_foritemnumber++; + } + } else { + warn "No item record found for barcode $barcode"; + $num_noitem_forbarcode++; + } + } else{ + warn "No barcode in host field for biblionumber $biblionumber"; + $num_nobarcode_inhostfield++; + } + } +} + +sub print_progress_and_commit { + my $recs = shift; + $dbh->commit(); + print "... processed $recs records\n"; +} + +sub print_usage { + print <<_USAGE_; +$0: establish relationship to host items + +Based on barcode in host field populates subfield 0 with host biblionumber and subfield 9 with host itemnumber. + +Subfield 0 and 9 are used in Koha screns to display relationships between analytical records and host bibs and items + +Parameters: + --run-update run the synchronization + --where condition selects the biblios on a criterium (Repeatable) + --help or -h show this message. +_USAGE_ +} -- 1.5.4.5 From henridamien.laurent at biblibre.com Thu Dec 2 21:09:40 2010 From: henridamien.laurent at biblibre.com (LAURENT Henri-Damien) Date: Thu, 02 Dec 2010 21:09:40 +0100 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: <4CF7C919.1060706@biblibre.com> References: <1291301295-5097-1-git-send-email-lrea@nekls.org> <4CF7C919.1060706@biblibre.com> Message-ID: <4CF7FD04.8020001@biblibre.com> Le 02/12/2010 17:28, Paul Poulain a ?crit : > Le 02/12/2010 17:25, Chris Nighswonger a ?crit : >>> I did actually think about this before I did it. :) >>> >>> I asked around if it would be better to update the documentation to take >>> the package out of the install script and add it to the CPAN list, or do >>> what I did, and the general consensus was that backing down the required >>> version was a better option (since the newer version doesn't add any >>> functionality that we actually use), so I did that. >>> >>> The reason is that a lot of people use Lenny (and or Ubuntu, which would >>> cause this same issue), and Squeeze/Sid aren't stable yet (even though they >>> work fine, I know that). Every indication I've gotten is that "we" prefer >>> packaged versions of things instead of pulling direct from CPAN. I chose to >>> eliminate the error message when installing on Lenny/Ubuntu from >>> Makefile.PL, and allow a required version that was lower than the current >>> version to help eliminate a bad user experience (An error!!! OMG! What do I >>> do!). >>> > you can count BibLibre in "we" : we prefer packaged versions, no doubts ! > So ++ to your proposition to have the oldest version that works fine > required ! > I agree with that. But then we have to be quite specific then about the OS we support Redhat Fedora, CentOS, debian, ubuntu donot have the same standard as of perl module packaging. Or should we try and maintain packages for all the versions ? -- Henri-Damien LAURENT From cnighswonger at foundations.edu Thu Dec 2 21:51:37 2010 From: cnighswonger at foundations.edu (Chris Nighswonger) Date: Thu, 2 Dec 2010 15:51:37 -0500 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: <4CF7FD04.8020001@biblibre.com> References: <1291301295-5097-1-git-send-email-lrea@nekls.org> <4CF7C919.1060706@biblibre.com> <4CF7FD04.8020001@biblibre.com> Message-ID: On Thu, Dec 2, 2010 at 3:09 PM, LAURENT Henri-Damien < henridamien.laurent at biblibre.com> wrote: > Le 02/12/2010 17:28, Paul Poulain a ?crit : > > Le 02/12/2010 17:25, Chris Nighswonger a ?crit : > >>> I did actually think about this before I did it. :) > >>> > >>> I asked around if it would be better to update the documentation to > take > >>> the package out of the install script and add it to the CPAN list, or > do > >>> what I did, and the general consensus was that backing down the > required > >>> version was a better option (since the newer version doesn't add any > >>> functionality that we actually use), so I did that. > >>> > >>> The reason is that a lot of people use Lenny (and or Ubuntu, which > would > >>> cause this same issue), and Squeeze/Sid aren't stable yet (even though > they > >>> work fine, I know that). Every indication I've gotten is that "we" > prefer > >>> packaged versions of things instead of pulling direct from CPAN. I > chose to > >>> eliminate the error message when installing on Lenny/Ubuntu from > >>> Makefile.PL, and allow a required version that was lower than the > current > >>> version to help eliminate a bad user experience (An error!!! OMG! What > do I > >>> do!). > >>> > > you can count BibLibre in "we" : we prefer packaged versions, no doubts ! > > So ++ to your proposition to have the oldest version that works fine > > required ! > > > I agree with that. > But then we have to be quite specific then about the OS we support > Redhat Fedora, CentOS, debian, ubuntu donot have the same standard as of > perl module packaging. > This is my only fear. If we stray too far into specifying *which* OS we will support, unforeseen problems could arise. And we begin introducing restrictions. However, regardless of the direction we take, we should standardize and state it so that we have a consistent understanding among developers. > Or should we try and maintain packages for all the versions ? > > Ich... I think this would be a pit into which we would not want to fall. Kind Regards, Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From cnighswonger at foundations.edu Thu Dec 2 22:11:32 2010 From: cnighswonger at foundations.edu (Chris Nighswonger) Date: Thu, 2 Dec 2010 16:11:32 -0500 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: On Thu, Dec 2, 2010 at 11:48 AM, Clay Fouts wrote: > Typically they're called "requirements" because they establish a minimum. > If a particular version is known to work and passes the tests, why require a > system to have a higher version installed? This most likely occurs because the developer adding the module develops over the latest module from CPAN rather than from xyz repository which may be behind CPAN. I think it would be poor practice to expect developers to hunt for the oldest package which contained the desired functionality. It would be better to adopt a sensible standard and adhere to it, which is what I was proposing we do. > Why instruct users to install from apt at all if they're just going to have > to update all the modules from CPAN anyway? > Users are only instructed to install from apt on platforms which support apt. Others should use their distro's package management system or CPAN... which is what gives rise to the "problem" under discussion. > Why warn them they *need* to upgrade if in reality they don't? "Needing" to upgrade is relative. In this case relative to the version required by the developer incorporating the module and thus Koha. If the user's system has a version older than that required by the developer, there is certainly the "need" to upgrade. > Issuing a warning during the build process should indicate something > potentially dire, not making noise about a preference. > Given that it is the developer who writes the code involving a selected module, I think that this is not a mere "preference" of the developer. The one developing knows better than anyone else which version is "needed." Using a module version other than that spec'd by the developer is, indeed, setting up for something potentially dire. There are two points involved here: 1. We need to establish acceptable guidelines for developers to follow when choosing packages. 2. We then need to communicate the clear message to the user that they need *at least* the version chosen by the developer. Then the warnings thrown will be unambiguous. (And I'm assuming here that "we" feel they are ambiguous as they stand at present.) Kind Regards, Chris -------------- next part -------------- An HTML attachment was scrubbed... URL: From gmcharlt at gmail.com Thu Dec 2 22:28:49 2010 From: gmcharlt at gmail.com (Galen Charlton) Date: Thu, 2 Dec 2010 16:28:49 -0500 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: Hi, On Thu, Dec 2, 2010 at 4:11 PM, Chris Nighswonger wrote: > I think it would be poor practice to expect developers to > hunt for the oldest package which contained the desired functionality. It > would be better to adopt a sensible standard and adhere to it, which is what > I was proposing we do. There's no harm if a developer who adds a new Perl module dependency had simply used the latest and greatest, but there's also no harm if somebody points out that an earlier version of the module can serve the needs of Koha just as well. Ideally, Koha's test cases will help bolster a decision to change a version requirement with evidence. Since it's a fact of life that different distributions are more or less conservative about how frequently they update packaged Perl modules, I think we ought to be a bit more flexible and accept that sometimes a minimum required version can be decreased. At least we can be grateful that, as far as I know, we don't have a situation where we need to specify a *maximum* required version for any of Koha's dependencies. Regards, Galen -- Galen Charlton gmcharlt at gmail.com From henridamien.laurent at biblibre.com Fri Dec 3 04:43:57 2010 From: henridamien.laurent at biblibre.com (LAURENT Henri-Damien) Date: Fri, 03 Dec 2010 04:43:57 +0100 Subject: [Koha-patches] [Koha-devel] [PATCH] [Bug 5465] Makefile.PL asks for too high version of Business::ISBN In-Reply-To: References: <1291301295-5097-1-git-send-email-lrea@nekls.org> Message-ID: <4CF8677D.4040109@biblibre.com> Le 02/12/2010 22:28, Galen Charlton a ?crit : > Hi, > > On Thu, Dec 2, 2010 at 4:11 PM, Chris Nighswonger > wrote: >> I think it would be poor practice to expect developers to >> hunt for the oldest package which contained the desired functionality. It >> would be better to adopt a sensible standard and adhere to it, which is what >> I was proposing we do. > > There's no harm if a developer who adds a new Perl module dependency > had simply used the latest and greatest, but there's also no harm if > somebody points out that an earlier version of the module can serve > the needs of Koha just as well. Ideally, Koha's test cases will help > bolster a decision to change a version requirement with evidence. > > Since it's a fact of life that different distributions are more or > less conservative about how frequently they update packaged Perl > modules, I think we ought to be a bit more flexible and accept that > sometimes a minimum required version can be decreased. > > At least we can be grateful that, as far as I know, we don't have a > situation where we need to specify a *maximum* required version for > any of Koha's dependencies. iirc, we had that case for PDF::API2. -- Henri-Damien LAURENT From katrin.fischer at bsz-bw.de Fri Dec 3 09:54:46 2010 From: katrin.fischer at bsz-bw.de (Katrin Fischer) Date: Fri, 03 Dec 2010 08:54:46 -0000 Subject: [Koha-patches] [PATCH] Add BSZ to Koha's About page Message-ID: <1284554875-22165-1-git-send-email-katrin.fischer@bsz-bw.de> --- koha-tmpl/intranet-tmpl/prog/en/modules/about.tmpl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tmpl index bef9e20..a836290 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/about.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/about.tmpl @@ -220,6 +220,7 @@

      Contributing Companies

      • BibLibre, France
      • +
      • Bibliotheksservice-Zentrum Baden-W?rttemberg (BSZ), Germany
      • ByWater Solutions, USA
      • Calyx, Australia
      • Catalyst IT, New Zealand
      • -- 1.6.3.3 From kmkale at anantcorp.com Fri Dec 3 12:52:00 2010 From: kmkale at anantcorp.com (Koustubha Kale) Date: Fri, 3 Dec 2010 17:22:00 +0530 Subject: [Koha-patches] [PATCH] Bug 5418: Rev-4 patch new itemBarcodeInputFilter for libsuite8 style barcodes Message-ID: This revision adds conversion support for some libsuite8 barcodes which are only numbers. i.e. these barcodes dont start with item type. e.g. 0002245 or 472. In libsuite8 such barcodes are assumed to be of type book with associated item type code 'b'. Tests for same have also been added to t/Circulation_barcodedecode.t Regards, Koustubha Kale Anant Corporation Contact Details : Address? : 103, Armaan Residency, R. W Sawant Road, Nr. Golden Dyes Naka, Thane (w), ? ? ? ? ??? ? ? Maharashtra, India, Pin : 400601. TeleFax? : +91-22-21720108, +91-22-21720109 Mobile? ?? : +919820715876 Website? : http://www.anantcorp.com Blog : http://www.anantcorp.com/blog/?author=2 -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Bug-5418-Rev-4-patch-new-itemBarcodeInputFilter-for-.patch Type: application/octet-stream Size: 10647 bytes Desc: not available URL: From henridamien.laurent at biblibre.com Fri Dec 3 17:31:35 2010 From: henridamien.laurent at biblibre.com (LAURENT Henri-Damien) Date: Fri, 03 Dec 2010 17:31:35 +0100 Subject: [Koha-patches] [PATCH 2/2] Further fixes for Bug 3652 - XSS vulnerabilities In-Reply-To: <1290628774-5425-1-git-send-email-oleonard@myacpl.org> References: <1290628774-5425-1-git-send-email-oleonard@myacpl.org> Message-ID: <4CF91B67.4080904@biblibre.com> Just to remind : we have many branches waiting for inclusion. And those to patches would make it a hell to rebase those. So I would like to ask if you could hold those patches until those branches are qa-ed. Thanks. -- Henri-Damien LAURENT Le 24/11/2010 20:59, Owen Leonard a ?crit : > Applying "ESCAPE='0'" where necessary in the staff client > --- > .../prog/en/includes/auth-finder-search.inc | 6 ++-- > .../prog/en/includes/doc-head-close.inc | 2 +- > .../prog/en/includes/doc-head-open.inc | 6 ++++- > .../intranet-tmpl/prog/en/includes/header.inc | 2 +- > .../prog/en/includes/intranet-bottom.inc | 10 ++++---- > .../prog/en/modules/acqui/neworderbiblio.tmpl | 2 +- > .../prog/en/modules/acqui/neworderempty.tmpl | 12 +++++----- > .../prog/en/modules/acqui/newordersuggestion.tmpl | 2 +- > .../prog/en/modules/acqui/z3950_search.tmpl | 4 +- > .../prog/en/modules/admin/aqbudgetperiods.tmpl | 2 +- > .../prog/en/modules/admin/aqbudgets.tmpl | 1 + > .../prog/en/modules/admin/aqplan.tmpl | 8 +++--- > .../en/modules/admin/auth_subfields_structure.tmpl | 18 ++++++++-------- > .../prog/en/modules/admin/authorised_values.tmpl | 2 +- > .../prog/en/modules/admin/classsources.tmpl | 5 +-- > .../en/modules/admin/item_circulation_alerts.tmpl | 4 +- > .../prog/en/modules/admin/koha2marclinks.tmpl | 22 ++++++++++---------- > .../en/modules/admin/marc_subfields_structure.tmpl | 16 +++++++------- > .../prog/en/modules/admin/matching-rules.tmpl | 2 +- > .../prog/en/modules/admin/patron-attr-types.tmpl | 2 +- > koha-tmpl/intranet-tmpl/prog/en/modules/auth.tmpl | 2 +- > .../prog/en/modules/authorities/authorities.tmpl | 2 +- > .../modules/authorities/searchresultlist-auth.tmpl | 2 +- > .../en/modules/authorities/searchresultlist.tmpl | 2 +- > .../prog/en/modules/basket/basket.tmpl | 6 ++-- > .../prog/en/modules/basket/sendbasket.tmpl | 2 +- > .../prog/en/modules/catalogue/ISBDdetail.tmpl | 2 +- > .../prog/en/modules/catalogue/MARCdetail.tmpl | 2 +- > .../prog/en/modules/catalogue/detail.tmpl | 20 +++++++++--------- > .../en/modules/catalogue/labeledMARCdetail.tmpl | 2 +- > .../prog/en/modules/cataloguing/addbiblio.tmpl | 2 +- > .../prog/en/modules/cataloguing/additem.tmpl | 4 +- > .../prog/en/modules/circ/circulation.tmpl | 10 ++++---- > .../prog/en/modules/intranet-main.tmpl | 4 +- > .../prog/en/modules/labels/label-edit-batch.tmpl | 2 +- > .../prog/en/modules/labels/label-home.tmpl | 4 +- > .../prog/en/modules/labels/spinelabel-print.tmpl | 2 +- > .../prog/en/modules/members/borrowers_details.tmpl | 4 ++- > .../prog/en/modules/members/member.tmpl | 2 +- > .../prog/en/modules/members/memberentrygen.tmpl | 6 ++-- > .../en/modules/reports/acquisitions_stats.tmpl | 14 ++++++------ > .../prog/en/modules/reports/bor_issues_top.tmpl | 2 +- > .../prog/en/modules/reports/borrowers_out.tmpl | 4 +- > .../prog/en/modules/reports/borrowers_stats.tmpl | 4 +- > .../prog/en/modules/reports/cat_issues_top.tmpl | 4 +- > .../prog/en/modules/reports/catalogue_out.tmpl | 4 +- > .../prog/en/modules/reports/catalogue_stats.tmpl | 4 +- > .../prog/en/modules/reports/issues_avg_stats.tmpl | 16 +++++++------- > .../reports/issues_by_borrower_category.tmpl | 2 +- > .../prog/en/modules/reports/issues_stats.tmpl | 4 +- > .../prog/en/modules/reports/itemtypes.tmpl | 2 +- > .../prog/en/modules/reports/serials_stats.tmpl | 4 +- > .../prog/en/modules/reserve/request.tmpl | 4 +- > 53 files changed, 142 insertions(+), 136 deletions(-) > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc > index 437b313..fe4f612 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/auth-finder-search.inc > @@ -17,7 +17,7 @@ > > > > - " /> > + " /> > >
      • > > @@ -29,7 +29,7 @@ > > > > - " /> > + " /> >
      • >
      • > > @@ -41,7 +41,7 @@ > > > > - " /> > + " /> >
      • >
      • > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc > index 1970440..f17bc29 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc > @@ -75,7 +75,7 @@ > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc > index df2dc01..d7b838d 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-open.inc > @@ -1,4 +1,8 @@ > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> > -" xml:lang="" dir="" xmlns="http://www.w3.org/1999/xhtml"> > + > +" xml:lang="" dir="" xmlns="http://www.w3.org/1999/xhtml"> > + > +" xml:lang="" xmlns="http://www.w3.org/1999/xhtml"> > + > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > index 95ce8dd..3e3ab36 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > @@ -9,7 +9,7 @@ > >
      • Cart
      • > > - > + >
      • > More >
        > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc > index 78334b2..71eff05 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet-bottom.inc > @@ -7,14 +7,14 @@ > > > > -
      • ()
        > +
      • ()
        >
          > > > > -
        • ()
        • > +
        • ()
        • > > -
        • "> ()
        • > +
        • "> ()
        • > > > > @@ -24,9 +24,9 @@ > > > > -
        • > +
        • > > -
        • ">
        • > +
        • ">
        • > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderbiblio.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderbiblio.tmpl > index f09f474..dbbf8f4 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderbiblio.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderbiblio.tmpl > @@ -48,7 +48,7 @@ > > > > -

          > +

          > by ,

          >

          > - > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > index e53c7da..21f5044 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl > @@ -140,10 +140,10 @@ ff.submit(); >

          1. > > Title > - " /> > + " /> > > > - " /> > + " /> > >
          2. >
          3. > @@ -206,8 +206,8 @@ ff.submit(); >
            1. >
              "> > > - > - > + > + > > " /> > " /> > @@ -340,7 +340,7 @@ ff.submit(); > > > > - > + > > > " /> > @@ -350,7 +350,7 @@ ff.submit(); > > > > - > + > > " /> > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersuggestion.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersuggestion.tmpl > index 630d9ba..e9c0495 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersuggestion.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/newordersuggestion.tmpl > @@ -27,7 +27,7 @@ > > > > -

              -

              > +

              -

              >

              > copy. year: > volume: > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl > index 2219dfa..fbf6565 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/z3950_search.tmpl > @@ -73,7 +73,7 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color : >

              >
              >
              > -
              1. " />
              2. > +
                1. " />
                2. >
                3. " />
                4. >
                >
              > @@ -141,7 +141,7 @@ tr.selected { background-color : #FFFFCC; } tr.selected td { background-color : > > > > - > + > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tmpl > index 523fd13..8f1f06b 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgetperiods.tmpl > @@ -294,7 +294,7 @@ > > > > -
              > +
              > > >
              > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tmpl > index 80d9156..925cb7e 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqbudgets.tmpl > @@ -241,6 +241,7 @@ > > > > +

              Currency =

              >
              > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl > index 2192178..fc39f8a 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl > @@ -104,7 +104,7 @@ YAHOO.util.Event.onAvailable("popmenu", function () { > > > > - > + > > > > @@ -176,7 +176,7 @@ YAHOO.util.Event.onAvailable("popmenu", function () { > > > > - > + >   > > > @@ -279,8 +279,8 @@ YAHOO.util.Event.onAvailable("popmenu", function () { >
                >
              1. > > -     > + > +     > > " /> > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tmpl > index 1b431ec..64d2a29 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/auth_subfields_structure.tmpl > @@ -75,34 +75,34 @@ function displayMoreConstraint(numlayer){ >
                  > > > -
                1.  
                2. > +
                3.  
                4. > >
                5. > " /> >
                6. > > -
                7.  
                8. > -
                9.  
                10. > +
                11.  
                12. > +
                13.  
                14. >
                15. " type="text" name="liblibrarian" value="" size="40" maxlength="80" />
                16. >
                17. " name="libopac" value="" size="40" maxlength="80" />
                18. > -
                19. (ignore means that the subfield does not display in the record editor)
                20. > +
                21. (ignore means that the subfield does not display in the record editor)
                22. >
                23. >
                  > Display >
                    > -
                  1. > +
                  2. > ">Intranet: --> > ">Editor: (see online help) --> >
                  >
                  >
                24. > -
                25. (if checked, it means that the subfield is a URL and can be clicked)
                26. > +
                27. (if checked, it means that the subfield is a URL and can be clicked)
                28. >
                29. >
                  Help input >
                    > -
                  1. > -
                  2. > -
                  3. > +
                  4. > +
                  5. > +
                  6. >
                  >
                  >
                30. > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/authorised_values.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/authorised_values.tmpl > index bef0cae..7264db1 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/authorised_values.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/authorised_values.tmpl > @@ -174,7 +174,7 @@ > >
              > > -
              > +
              > >

              An authorized value attached to patrons, that can be used for stats purposes

              > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/classsources.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/classsources.tmpl > index 569d875..a5f81b5 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/classsources.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/classsources.tmpl > @@ -274,9 +274,8 @@ $(document).ready(function() { > > > > -
              > +
              > > -
              >

              Classification Filing Rules

              > >
              Added filing rule
              > @@ -310,7 +309,7 @@ $(document).ready(function() { > > > > -
              > +
              > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl > index 48dd3ad..d2ffbaf 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/item_circulation_alerts.tmpl > @@ -157,7 +157,7 @@ $(function(){ > >   > > - > + > > > > @@ -181,7 +181,7 @@ $(function(){ > >   > > - > + > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/koha2marclinks.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/koha2marclinks.tmpl > index b8f664a..c1e3103 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/koha2marclinks.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/koha2marclinks.tmpl > @@ -33,7 +33,7 @@ > " /> > " /> > > - > + > >
            2. >
            3. > @@ -42,7 +42,7 @@ > > " /> > > - > + > " /> > >
            4. > @@ -53,7 +53,7 @@ > " /> > " /> > > - > + > > >
            5. > @@ -63,7 +63,7 @@ > " /> > " /> > > - > + > >
            6. >
            7. > @@ -73,7 +73,7 @@ > " /> > " /> > > - > + > >
            8. >
            9. > @@ -83,7 +83,7 @@ > " /> > " /> > > - > + > >
            10. >
            11. > @@ -93,7 +93,7 @@ > " /> > " /> > > - > + > >
            12. >
            13. > @@ -103,7 +103,7 @@ > " /> > " /> > > - > + > >
            14. >
            15. > @@ -113,7 +113,7 @@ > " /> > " /> > > - > + > >
            16. >
            17. > @@ -123,7 +123,7 @@ > " /> > " /> > > - > + > >
            18. >
            > @@ -144,7 +144,7 @@ > >

            Koha to MARC Mapping

            >
            " method="post"> > -

            > +

            >
            > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tmpl > index 7873296..b432d72 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tmpl > @@ -98,9 +98,9 @@ > >
          4. " type="text" name="liblibrarian" value="" size="40" maxlength="80" />
          5. >
          6. " name="libopac" value="" size="40" maxlength="80" />
          7. > -
          8. > -
          9. > -
          10. (ignore means that the subfield does not display in the record editor)
          11. > +
          12. > +
          13. > +
          14. (ignore means that the subfield does not display in the record editor)
          15. > > > > @@ -111,17 +111,17 @@ >
            1. > " value="" />
            2. >
            3. " name="hidden" value="" size="2" /> (see online help)
            4. > -
            5. (if checked, it means that the subfield is a URL and can be clicked)
            6. > +
            7. (if checked, it means that the subfield is a URL and can be clicked)
            8. >
            9. " name="link" value="" size="10" maxlength="80" /> (e.g., Title or Local-Number) Warning: This value should not change after data has been added to your catalog
            10. > -
            11. > +
            12. >
            > >
            > Other Options: (choose one) >
              > -
            1. > -
            2. > -
            3. > +
            4. > +
            5. > +
            6. >
            >
            >
            > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/matching-rules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/matching-rules.tmpl > index bfa2ed9..df77592 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/matching-rules.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/matching-rules.tmpl > @@ -572,7 +572,7 @@ function CheckRuleForm(f) { > >

            There are no saved matching rules.

            > > -
            > +
            > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl > index b445c41..8e1c7ea 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl > @@ -221,7 +221,7 @@ function CheckAttributeTypeForm(f) { > >

            There are no saved patron attribute types.

            > > -
            > +
            > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/auth.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/auth.tmpl > index fe2cd96..5d8b767 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/auth.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/auth.tmpl > @@ -39,7 +39,7 @@ >
            " method="post" name="loginform" id="loginform"> > > > - " value="" /> > + " value="" /> > >

            > " size="20" tabindex="1" /> > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl > index cadea08..877de7b 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/authorities.tmpl > @@ -705,7 +705,7 @@ function searchauthority() { > > > > - > + > > > Clone > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl > index e327451..80c7657 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl > @@ -93,7 +93,7 @@ function jumpfull(page) > > > > - &authtypecode=&=&op=do_search&type=intranet&index=&tagid=&orderby="> > + &authtypecode=&=&op=do_search&type=intranet&index=&tagid=&orderby="> > >> > >

        > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl > index 01667e5..6c7ccf6 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist.tmpl > @@ -79,7 +79,7 @@ function searchauthority() { > >
        > > -
        > +
        > > > No results found > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl > index d3d83ac..4057166 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl > @@ -133,12 +133,12 @@ function placeHold () { > >

        > > - > + > > > > " name="bib" id="bib" onclick="selRecord(value,checked)" /> > - > + > > > > @@ -318,7 +318,7 @@ function placeHold () { > > > ',)"> > - > + > > >

        - > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tmpl > index e5cc60d..f4bcde0 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/sendbasket.tmpl > @@ -15,7 +15,7 @@ Reference Manager or ProCite. > > --------------------------------------------- > > - > + > > > Author(s): ; ; > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tmpl > index 1516268..1fc87dc 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/ISBDdetail.tmpl > @@ -17,7 +17,7 @@ > > >

        > - > + >
        > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tmpl > index 8880f8b..736e09e 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tmpl > @@ -391,7 +391,7 @@ function Changefwk(FwkList) { > > > > - > + > > > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl > index e3391ac..2f15388 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl > @@ -1,5 +1,5 @@ > > -Koha › Catalog › Details for <!-- TMPL_VAR NAME="title" escape="html" --> <!-- TMPL_LOOP NAME="subtitle" --> <!-- TMPL_VAR NAME="subfield" --><!-- /TMPL_LOOP --> > +Koha › Catalog › Details for <!-- TMPL_VAR NAME="title" --> <!-- TMPL_LOOP NAME="subtitle" --> <!-- TMPL_VAR NAME="subfield" --><!-- /TMPL_LOOP --> > + - + @@ -86,60 +86,26 @@ YAHOO.util.Event.onAvailable("popmenu", function () { -
        - - - -"/> -
        -Planning for by - - - - - - - - - - - - -
        - - - - - - - - - - -
        - - - - - - -
        - - - - - - -
        -
        - -
        + +

        Planning for by

        - +

        Currency = . + + Each cell contain both actual and estimated values. + + Cells contain estimated values only. + +

        No active currency is defined

        Please specify an active currency.

        + +

        Each cell contain both actual and estimated values.

        + +

        Cells contain estimated values only.

        + + @@ -149,38 +115,43 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - - + - - - + + + + + + + + + + + - - - - - + + + + - + @@ -191,15 +162,15 @@ YAHOO.util.Event.onAvailable("popmenu", function () {
        " style="text-align: center;" - class="" > + " class=""> - " style="text-align: center; - display:none;" - class="" > + " styl="display:none;" class=""> -  ', '')" > -   Fund remaining - + Fund remaining 
          "> + + [ show a column ] 
        class="locked" title="Fund locked">&budget_period_id=">">  -   -
        - + - @@ -212,32 +183,32 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - -
        +   - " /> + " value="" /> - " id='budget_' class='plan_entry_' onchange="calcTotalRow(this);" /> + " value="" id="budget_" class="plan_entry_" onchange="calcTotalRow(this);" />
        + - + - + - + + "> - + "> - + "> -   +  
        - + ')" value="Auto-fill row"/> @@ -249,19 +220,14 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - - Each cell contain both actual and estimated values.
        - - Cells contain estimated values only.
        - - + - +
        -
        +
        @@ -274,28 +240,73 @@ YAHOO.util.Event.onAvailable("popmenu", function () { + +
        No funds to display for this search criteria
        + + + +
        +
        +
        +
        -
        +
        +

        Filter

        + +
          +
        1. + + +
        2. +
        3. + + + + + + +
        4. + +
        5. + + + + + + +
        6. + + +
        7. + + + + + + +
        8. +
        +
        +
        +
        + + +
        +

        Export

        +
          -
        1. -
        2. +
        3. -     - +
        4. +
        +
        " /> - -
    + + - -No funds to display for this search criteria - - - -
    - -
    -- 1.7.1 From katrin.fischer at bsz-bw.de Mon Dec 6 16:41:17 2010 From: katrin.fischer at bsz-bw.de (Katrin Fischer) Date: Mon, 6 Dec 2010 16:41:17 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for 4832 - Re-editing a suggestion changes the item type Message-ID: <1291650077-25515-1-git-send-email-katrin.fischer@bsz-bw.de> From: Owen Leonard Signed-off-by: Katrin Fischer --- .../prog/en/modules/suggestion/suggestion.tmpl | 2 +- suggestion/suggestion.pl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl index 7489cb6..6696b92 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl @@ -110,7 +110,7 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di
  • " size="10" maxlength="15" /> - " size="10" maxlength="15" /> + " size="10" maxlength="15" /> - " onchange="if (this.value==2 || this.value==7){changeDate2('')} else {changeDate2('')}" > diff --git a/serials/serials-edit.pl b/serials/serials-edit.pl index dee624c..6357fc7 100755 --- a/serials/serials-edit.pl +++ b/serials/serials-edit.pl @@ -19,7 +19,7 @@ =head1 NAME -serials-recieve.pl +serials-edit.pl =head1 Parameters @@ -133,8 +133,14 @@ foreach my $tmpserialid (@serialids) { && !$processedserialid{$tmpserialid} ) { my $data = GetSerialInformation($tmpserialid); - $data->{publisheddate} = format_date( $data->{publisheddate} ); - $data->{planneddate} = format_date( $data->{planneddate} ); + for my $datefield ( qw( publisheddate planneddate) ) { + if ($data->{$datefield} && $data->{$datefield}!~m/^00/) { + $data->{$datefield} = format_date( $data->{$datefield} ); + } + else { + $data->{$datefield} = q{}; + } + } $data->{arriveddate}=$today->output('syspref'); $data->{'editdisable'} = ( ( @@ -173,6 +179,8 @@ foreach my $subscriptionid (@subscriptionids) { $cell->{'itemid'} = "NNEW"; $cell->{'serialid'} = "NEW"; $cell->{'issuesatonce'} = 1; + $cell->{arriveddate}=$today->output('syspref'); + push @newserialloop, $cell; push @subscriptionloop, { @@ -198,7 +206,7 @@ if ( $op and $op eq 'serialchangestatus' ) { ### FIXME if NewIssue is modified to use subscription biblionumber, then biblionumber would not be useful. $newserial = NewIssue( $serialseqs[$i], - $subscriptionids[$i], + $subscriptionids[0], $serialdatalist[0]->{'biblionumber'}, $status[$i], format_date_in_iso( $planneddates[$i] ), -- 1.6.3.3 From katrin.fischer at bsz-bw.de Mon Dec 6 16:58:04 2010 From: katrin.fischer at bsz-bw.de (Katrin Fischer) Date: Mon, 6 Dec 2010 16:58:04 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 4500 - remove commas from price formatting Message-ID: <1291651084-25845-1-git-send-email-katrin.fischer@bsz-bw.de> From: Robin Sheat Signed-off-by: Katrin Fischer --- admin/aqbudgetperiods.pl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/admin/aqbudgetperiods.pl b/admin/aqbudgetperiods.pl index 39f3cd0..724c7e5 100755 --- a/admin/aqbudgetperiods.pl +++ b/admin/aqbudgetperiods.pl @@ -120,6 +120,7 @@ if ( $op eq 'add_form' ) { my $editnum = new Number::Format( 'int_curr_symbol' => '', 'thousands_sep' => '', + 'mon_thousands_sep' => '', 'mon_decimal_point' => '.' ); -- 1.6.3.3 From oleonard at myacpl.org Mon Dec 6 17:49:02 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 6 Dec 2010 11:49:02 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 1883, authorised list of reasons why patron requesting book Message-ID: <1291654142-4452-1-git-send-email-oleonard@myacpl.org> - Adding form controls to opac submission form and staf client edit form. - Adding display of patron reason for suggestion on opac list - Adding function for pulling an authorized value description using the category and value TODO: Add some default authorised values --- C4/Koha.pm | 22 ++++++++++++++++++++ .../prog/en/modules/suggestion/suggestion.tmpl | 3 ++ .../prog/en/modules/opac-suggestions.tmpl | 3 ++ opac/opac-suggestions.pl | 7 +++++- suggestion/suggestion.pl | 3 ++ 5 files changed, 37 insertions(+), 1 deletions(-) diff --git a/C4/Koha.pm b/C4/Koha.pm index a63a3a5..d10c52e 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -57,6 +57,7 @@ BEGIN { &GetAuthorisedValueCategories &GetKohaAuthorisedValues &GetKohaAuthorisedValuesFromField + &GetKohaAuthorisedValueLib &GetAuthValCode &GetNormalizedUPC &GetNormalizedISBN @@ -1214,6 +1215,27 @@ sub xml_escape { return $str; } +=head2 GetKohaAuthorisedValueLib + +Takes $category, $authorised_value as parameters. + +If $opac parameter is set to a true value, displays OPAC descriptions rather than normal ones when they exist. + +Returns authorised value description + +=cut + +sub GetKohaAuthorisedValueLib { + my ($category,$authorised_value,$opac) = @_; + my $value; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("select lib, lib_opac from authorised_values where category=? and authorised_value=?"); + $sth->execute($category,$authorised_value); + my $data = $sth->fetchrow_hashref; + $value = ($opac && $$data{'lib_opac'}) ? $$data{'lib_opac'} : $$data{'lib'}; + return $value; +} + =head2 display_marc_indicators my $display_form = C4::Koha::display_marc_indicators($field); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl index 7489cb6..4cd86ce 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl @@ -116,6 +116,9 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di
  • +
  • diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl index ab5b753..483551b 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl @@ -91,6 +91,9 @@ $.tablesorter.addParser({ +
  • " /> Cancel
    diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index fc9ce51..75d0791 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -115,17 +115,22 @@ foreach my $suggestion(@$suggestions_loop) { } else { $suggestion->{'showcheckbox'} = 0; } + if($suggestion->{'patronreason'}){ + $suggestion->{'patronreason'} = GetKohaAuthorisedValueLib("OPAC_SUG",$suggestion->{'patronreason'},1); + } } +my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG"); + $template->param( %$suggestion, itemtypeloop=> $supportlist, suggestions_loop => $suggestions_loop, + patron_reason_loop => $patron_reason_loop, showall => $allsuggestions, "op_$op" => 1, suggestionsview => 1, ); - output_html_with_http_headers $input, $cookie, $template->output; diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl index 57a1ba7..73f5ff5 100755 --- a/suggestion/suggestion.pl +++ b/suggestion/suggestion.pl @@ -259,6 +259,9 @@ foreach my $support(@$supportlist){ } $template->param(itemtypeloop=>$supportlist); +my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG",$$suggestion_ref{'patronreason'}); +$template->param(patron_reason_loop=>$patron_reason_loop); + #Budgets management my $searchbudgets={ budget_branchcode=>$branchfilter} if $branchfilter; my $budgets = GetBudgets($searchbudgets); -- 1.7.1 From oleonard at myacpl.org Mon Dec 6 18:25:21 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 6 Dec 2010 12:25:21 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 4173 - Statuses not appearing in the OPAC Message-ID: <1291656321-2214-1-git-send-email-oleonard@myacpl.org> This adds display of "Use restrictions" authorized values to the OPAC and the staff client for available and not-for-loan items. --- C4/Items.pm | 25 ++++++++++++++++++++ .../prog/en/modules/catalogue/detail.tmpl | 2 + .../opac-tmpl/prog/en/includes/item-status.inc | 8 +++--- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 264fa5b..5eda6dd 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1270,6 +1270,31 @@ sub GetItemsInfo { $data->{notforloanvalue} = $lib; } + # get restricted status and description if applicable + my $restrictedstatus = $dbh->prepare( + 'SELECT authorised_value + FROM marc_subfield_structure + WHERE kohafield="items.restricted" + ' + ); + + $restrictedstatus->execute; + my ($authorised_valuecode) = $restrictedstatus->fetchrow; + if ($authorised_valuecode) { + $restrictedstatus = $dbh->prepare( + "SELECT lib,lib_opac FROM authorised_values + WHERE category=? + AND authorised_value=?" + ); + $restrictedstatus->execute( $authorised_valuecode, + $data->{restricted} ); + + if ( my $rstdata = $restrictedstatus->fetchrow_hashref ) { + $data->{restricted} = $rstdata->{'lib'}; + $data->{restrictedopac} = $rstdata->{'lib_opac'}; + } + } + # my stack procedures my $stackstatus = $dbh->prepare( 'SELECT authorised_value diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl index e3391ac..8dde1b5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl @@ -326,6 +326,8 @@ function verify_images() { Available + + () diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc index 5e881fe..6369bba 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc @@ -19,14 +19,14 @@ - + () - Not for loan + Not for loan () - Not for loan + Not for loan () Item damaged - Available + Available () -- 1.7.1 From colin.campbell at ptfs-europe.com Mon Dec 6 19:00:21 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 6 Dec 2010 18:00:21 +0000 Subject: [Koha-patches] [SIGNED OFF] Ergonomy improvement in smart rule management Message-ID: <1291658421-32588-1-git-send-email-colin.campbell@ptfs-europe.com> From: Jean-Andr? Santoni Added a jQuery table filter, usefull when you have a lot of rows. This filter works on the entire row and allows you for exemple to type "Adul Perio 5". Indentation cleaning. Added tabs to filter colums on 4 axes: All, Issues, Fines and Reserves. Moved the table filter to the right of the tabs. Signed-off-by: Colin Campbell --- .../en/lib/jquery/plugins/jquery.uitablefilter.js | 90 +++++++++++++ .../prog/en/modules/admin/smart-rules.tmpl | 141 ++++++++++++++------ 2 files changed, 190 insertions(+), 41 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js diff --git a/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js b/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js new file mode 100644 index 0000000..d80c8dd --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/lib/jquery/plugins/jquery.uitablefilter.js @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2008 Greg Weber greg at gregweber.info + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * documentation at http://gregweber.info/projects/uitablefilter + * + * allows table rows to be filtered (made invisible) + * + * t = $('table') + * $.uiTableFilter( t, phrase ) + * + * arguments: + * jQuery object containing table rows + * phrase to search for + * optional arguments: + * column to limit search too (the column title in the table header) + * ifHidden - callback to execute if one or more elements was hidden + */ +jQuery.uiTableFilter = function(jq, phrase, column, ifHidden){ + var new_hidden = false; + if( this.last_phrase === phrase ) return false; + + var phrase_length = phrase.length; + var words = phrase.toLowerCase().split(" "); + + // these function pointers may change + var matches = function(elem) { elem.show() } + var noMatch = function(elem) { elem.hide(); new_hidden = true } + var getText = function(elem) { return elem.text() } + + if( column ) { + var index = null; + jq.find("thead > tr:last > th").each( function(i){ + if( $.trim($(this).text()) == column ){ + index = i; return false; + } + }); + if( index == null ) throw("given column: " + column + " not found") + + getText = function(elem){ return jQuery(elem.find( + ("td:eq(" + index + ")") )).text() + } + } + + // if added one letter to last time, + // just check newest word and only need to hide + if( (words.size > 1) && (phrase.substr(0, phrase_length - 1) === + this.last_phrase) ) { + + if( phrase[-1] === " " ) + { this.last_phrase = phrase; return false; } + + var words = words[-1]; // just search for the newest word + + // only hide visible rows + matches = function(elem) {;} + var elems = jq.find("tbody > tr:visible") + } + else { + new_hidden = true; + var elems = jq.find("tbody > tr") + } + + elems.each(function(){ + var elem = jQuery(this); + jQuery.uiTableFilter.has_words( getText(elem), words, false ) ? + matches(elem) : noMatch(elem); + }); + + last_phrase = phrase; + if( ifHidden && new_hidden ) ifHidden(); + return jq; +}; + +// caching for speedup +jQuery.uiTableFilter.last_phrase = "" + +// not jQuery dependent +// "" [""] -> Boolean +// "" [""] Boolean -> Boolean +jQuery.uiTableFilter.has_words = function( str, words, caseSensitive ) +{ + var text = caseSensitive ? str : str.toLowerCase(); + for (var i=0; i < words.length; i++) { + if (text.indexOf(words[i]) === -1) return false; + } + return true; +} diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl index 4e65c59..6cba8f3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl @@ -2,6 +2,9 @@ Koha › Administration › Issuing Rules + + + @@ -46,36 +88,48 @@ $(document).ready(function() {

    To modify a rule, create a new one with the same patron type and item type.

    -
    +
    Select a library :
    " />
    -
    +
    + +
    + - - - - - - - - - - - - - - - +
    Patron CategoryItem TypeCurrent Checkouts AllowedLoan Period (day)Fine AmountFine Charging IntervalFine Grace period (day)Suspension in Days (day)Renewals Allowed (count)Holds Allowed (count)Rental Discount (%) 
    + + + + + + + + + + + + + + + + + @@ -94,25 +148,27 @@ $(document).ready(function() { - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + + +
    Patron CategoryItem TypeCurrent Checkouts AllowedLoan Period (day)Fine AmountFine Charging IntervalFine Grace period (day)Suspension in Days (day)Renewals Allowed (count)Holds Allowed (count)Rental Discount (%) 
    - Unlimited - - - - + Unlimited + + + + &categorycode=&branch=">Delete
    "/>
    +
    +

    Defaults for this library

    -- 1.7.3.2 From f.demians at tamil.fr Mon Dec 6 19:35:32 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Mon, 6 Dec 2010 19:35:32 +0100 Subject: [Koha-patches] [PATCH] Bug 5475 Wrong messages date formating on Check Out page Message-ID: <1291660532-8645-1-git-send-email-f.demians@tamil.fr> On the Check Out page, messages related to the borrower are displayed on the right side. Message text is preceded by a date and library code. The date is displayed in US format (mm/dd/YYY). Is should be displayed formated depending on 'dateformat' syspref. --- C4/Members.pm | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 4c1d37c..00716cd 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -2073,7 +2073,7 @@ sub GetMessages { my $query = "SELECT branches.branchname, messages.*, - DATE_FORMAT( message_date, '%m/%d/%Y' ) AS message_date_formatted, + message_date, messages.branchcode LIKE '$branchcode' AS can_delete FROM messages, branches WHERE borrowernumber = ? @@ -2085,6 +2085,8 @@ sub GetMessages { my @results; while ( my $data = $sth->fetchrow_hashref ) { + my $d = C4::Dates->new( $data->{message_date}, 'iso' ); + $data->{message_date_formatted} = $d->output; push @results, $data; } return \@results; -- 1.7.3.2 From mdhafen at tech.washk12.org Mon Dec 6 19:35:23 2010 From: mdhafen at tech.washk12.org (Mike Hafen) Date: Mon, 6 Dec 2010 11:35:23 -0700 Subject: [Koha-patches] [PATCH] Bug 5418: Rev-4 patch new itemBarcodeInputFilter for libsuite8 style barcodes In-Reply-To: References: <4CFC941C.2080505@tamil.fr> Message-ID: Changes to both files are necessary, but there is a problem with the way you are changing updatedatabase.pl. I thing to know is that sysprefs have to exist in the database, unless I'm mistaken since the new syspref editor. The data/mysql/en/mandatory/sysprefs.sql change is necessary to add the libsuite8 option to the syspref when it is created during web-install. The sys pref as it is in the database now ( on other installations ) also needs to be changed to add the libsuite8 option. However this should be done as a new version number, rather than changing a previous revision. Hope that makes sense. 2010/12/6 Koustubha Kale > Thanks for looking into this patch. > > > > > But: > > > > Your patch modify installer/data/mysql/updatedatabase.pl. It souldn't. > > You're modifying an old DB update which will never been called again on > > new installation. > > Suggested by chris while he was guiding me on irc on how to properly > implement a new syspref option. But I'll be happy to remove any > changes to installer/data/mysql/updatedatabase.pl if same is not > required.. > > > > > > You also modify itemBarcodeInputFilter syspref in > > data/mysql/en/mandatory/sysprefs.sql. I'm not sure it's required > > anymore. You add your new syspref in circulation.pref. It's enough. > > Others can correct me if I'm wrong. > > The reason to do this chris gave was, this file is translatable while > a db entry is not. Be happy to get rid of the changes if its not > required. > > Should I remove changes to these two files, retest and resubmit? > > > Regards, > Koustubha Kale > Anant Corporation > > Contact Details : > Address : 103, Armaan Residency, R. W Sawant Road, Nr. Golden Dyes > Naka, Thane (w), > Maharashtra, India, Pin : 400601. > TeleFax : +91-22-21720108, +91-22-21720109 > Mobile : +919820715876 > Website : http://www.anantcorp.com > Blog : http://www.anantcorp.com/blog/?author=2 > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -------------- next part -------------- An HTML attachment was scrubbed... URL: From oleonard at myacpl.org Mon Dec 6 20:52:06 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 6 Dec 2010 14:52:06 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5475 Wrong messages date formating on Check Out page Message-ID: <1291665126-4319-1-git-send-email-oleonard@myacpl.org> From: Fr?d?ric Demians On the Check Out page, messages related to the borrower are displayed on the right side. Message text is preceded by a date and library code. The date is displayed in US format (mm/dd/YYY). Is should be displayed formated depending on 'dateformat' syspref. Signed-off-by: Owen Leonard --- C4/Members.pm | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 4c1d37c..00716cd 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -2073,7 +2073,7 @@ sub GetMessages { my $query = "SELECT branches.branchname, messages.*, - DATE_FORMAT( message_date, '%m/%d/%Y' ) AS message_date_formatted, + message_date, messages.branchcode LIKE '$branchcode' AS can_delete FROM messages, branches WHERE borrowernumber = ? @@ -2085,6 +2085,8 @@ sub GetMessages { my @results; while ( my $data = $sth->fetchrow_hashref ) { + my $d = C4::Dates->new( $data->{message_date}, 'iso' ); + $data->{message_date_formatted} = $d->output; push @results, $data; } return \@results; -- 1.7.1 From oleonard at myacpl.org Mon Dec 6 20:56:42 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 6 Dec 2010 14:56:42 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 2808, Hold queue not alphabetizing Message-ID: <1291665402-4590-1-git-send-email-oleonard@myacpl.org> White space in the biblio-default-view include and in the page template caused sorting on title or patron to be incorrect. --- .../prog/en/includes/biblio-default-view.inc | 10 +------- .../prog/en/modules/circ/waitingreserves.tmpl | 24 +++++--------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc index deb5dd3..328471b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc @@ -1,9 +1 @@ - - "> - - "> - - "> - - "> - \ No newline at end of file +">">">"> \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl index 63b9e26..6587457 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl @@ -14,7 +14,7 @@ $.tablesorter.addParser({ $('#resultlist > ul').tabs(); $("th a").hide(); $.tablesorter.defaults.widgets = ['zebra']; - $("#holdst").tablesorter({ + $("#holdst,#holdso").tablesorter({ dateFormat: 'uk', sortList: [[3,0]], headers: { 1:{sorter:'articles'},3: { sorter: 'articles' },4:{sorter:false}} @@ -84,15 +84,13 @@ $.tablesorter.addParser({

    - - +
      ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> @@ -130,27 +128,17 @@ $.tablesorter.addParser({

    - - - "> - - "> - - "> - - +   ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> - -
    + " /> " /> " /> -- 1.7.1 From f.demians at tamil.fr Mon Dec 6 22:07:02 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Mon, 6 Dec 2010 22:07:02 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 2808, Hold queue not alphabetizing Message-ID: <1291669622-4385-1-git-send-email-f.demians@tamil.fr> From: Owen Leonard White space in the biblio-default-view include and in the page template caused sorting on title or patron to be incorrect. Signed-off-by: Fr?d?ric Demians --- .../prog/en/includes/biblio-default-view.inc | 10 +------- .../prog/en/modules/circ/waitingreserves.tmpl | 24 +++++--------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc index deb5dd3..328471b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc @@ -1,9 +1 @@ - - "> - - "> - - "> - - "> - \ No newline at end of file +">">">"> \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl index 63b9e26..6587457 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl @@ -14,7 +14,7 @@ $.tablesorter.addParser({ $('#resultlist > ul').tabs(); $("th a").hide(); $.tablesorter.defaults.widgets = ['zebra']; - $("#holdst").tablesorter({ + $("#holdst,#holdso").tablesorter({ dateFormat: 'uk', sortList: [[3,0]], headers: { 1:{sorter:'articles'},3: { sorter: 'articles' },4:{sorter:false}} @@ -84,15 +84,13 @@ $.tablesorter.addParser({

    - - +
      ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> @@ -130,27 +128,17 @@ $.tablesorter.addParser({

    - - - "> - - "> - - "> - - +   ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> - - + " /> " /> " /> -- 1.7.3.2 From Katrin.Fischer.83 at web.de Mon Dec 6 23:02:50 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 6 Dec 2010 23:02:50 +0100 (CET) Subject: [Koha-patches] Bug 5422: Pull request Message-ID: <549229844.5310060.1291672970326.JavaMail.fmail@mwmweb075> An HTML attachment was scrubbed... URL: From Katrin.Fischer.83 at web.de Mon Dec 6 23:03:46 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 6 Dec 2010 23:03:46 +0100 (CET) Subject: [Koha-patches] Bug 5422: Pull request Message-ID: <147057985.5310910.1291673026569.JavaMail.fmail@mwmweb075> An HTML attachment was scrubbed... URL: From Katrin.Fischer.83 at web.de Mon Dec 6 23:04:46 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 6 Dec 2010 23:04:46 +0100 (CET) Subject: [Koha-patches] Bug 5422: Pull request Message-ID: <1008045063.5311495.1291673086502.JavaMail.fmail@mwmweb075> Patches for bug 5422 can be pulled from: https://github.com/kfischer/Koha/tree/5422_state The patches add a state field to all addresses in borrowers. ___________________________________________________________ Neu: WEB.DE De-Mail - Einfach wie E-Mail, sicher wie ein Brief! Jetzt De-Mail-Adresse reservieren: https://produkte.web.de/go/demail02 From kmkale at anantcorp.com Tue Dec 7 05:39:02 2010 From: kmkale at anantcorp.com (Koustubha Kale) Date: Tue, 7 Dec 2010 10:09:02 +0530 Subject: [Koha-patches] [PATCH] Bug 5418: Rev-4 patch new itemBarcodeInputFilter for libsuite8 style barcodes In-Reply-To: <028B1A54D03E7B4482CDCA4EC8F06BFDE156EC@Bodensee.bsz-bw.de> References: <4CFC941C.2080505@tamil.fr> <028B1A54D03E7B4482CDCA4EC8F06BFDE156EC@Bodensee.bsz-bw.de> Message-ID: On Mon, Dec 6, 2010 at 8:46 PM, Fischer, Katrin wrote: > Hi, > > I have not applied the patch yet, but want to try and clarify some things about the database update, because we talked about adding new system preferences on IRC some minutes ago. > > As I understand it: > > Fredericd is (in parts) right - your changes to updatedatabase.pl will not work. You have to add a new paragraph with a new version number at the end of the file. You can look at my patch to see how I did add the new columns to deletedborrowers. > > But the point is - you do have to change the database. And add your new system preference to various files to make it work. At the moment it's really a bit complicated. :( > > Please add the new option not only to the en files, but also to the other languages, like de-DE :) > data/mysql/en/mandatory/sysprefs.sql > data/mysql/de-DE/mandatory/sysprefs.sql > ... > > I discovered today, that those files are missing a lot of things... (Bug 5474) > > You can also add kohaversion.pl to your patch. > > It's recommended to make the version number XXX in kohaversion.pl and updatedatabase.pl so that the release manager can fill in the correct version number. > > Hope that helps a little, > > Katrin > Thanks Katrin, Frederic and Mike I will make the changes and resubmit.. Regards, Koustubha Kale Anant Corporation Contact Details : Address : 103, Armaan Residency, R. W Sawant Road, Nr. Golden Dyes Naka, Thane (w), Maharashtra, India, Pin : 400601. TeleFax : +91-22-21720108, +91-22-21720109 Mobile : +919820715876 Website : http://www.anantcorp.com Blog : http://www.anantcorp.com/blog/?author=2 From katrin.fischer at bsz-bw.de Mon Dec 6 18:43:01 2010 From: katrin.fischer at bsz-bw.de (Katrin Fischer) Date: Mon, 6 Dec 2010 18:43:01 +0100 Subject: [Koha-patches] [PATCH 2/2] Bug 5226: Follow up to new/awaiting_qa/bug_5226 Message-ID: <1291657381-27225-1-git-send-email-katrin.fischer@bsz-bw.de> This patch adds the field definition to - it-IT (default and sample frameworks) - de-DE, en, fr-FR, pl-PL (sample frameworks) I am not sure about the database update. If we want to do that, it should perhaps update all frameworks and languages. At the moment only en and de-DE default frameworks are updated. --- .../optional/marc21_simple_bib_frameworks.sql | 8 ++++++++ .../optional/marc21_simple_bib_frameworks.sql | 8 ++++++++ .../Optionnel/marc21_simple_bib_frameworks.sql | 8 ++++++++ .../marc21/mandatory/marc21_framework_DEFAULT.sql | 1 + .../optional/marc21_simple_bib_frameworks.sql | 8 ++++++++ .../optional/marc21_simple_bib_frameworks.sql | 8 ++++++++ 6 files changed, 41 insertions(+), 0 deletions(-) diff --git a/installer/data/mysql/de-DE/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql b/installer/data/mysql/de-DE/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql index 9f7387b..ff4babc 100644 --- a/installer/data/mysql/de-DE/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql +++ b/installer/data/mysql/de-DE/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql @@ -372,6 +372,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'BKS'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'BKS'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'BKS'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'BKS'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'BKS'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'BKS'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'BKS'), @@ -4293,6 +4294,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'CF'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'CF'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'CF'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'CF'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'CF'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'CF'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'CF'), @@ -8213,6 +8215,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'SR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SR'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'SR'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'SR'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'SR'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'SR'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'SR'), @@ -12133,6 +12136,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'VR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'VR'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'VR'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'VR'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'VR'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'VR'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'VR'), @@ -16051,6 +16055,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'AR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'AR'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'AR'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'AR'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'AR'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'AR'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'AR'), @@ -19969,6 +19974,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'KT'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'KT'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'KT'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'KT'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'KT'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'KT'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'KT'), @@ -23889,6 +23895,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'IR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'IR'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'IR'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'IR'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'IR'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'IR'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'IR'), @@ -27804,6 +27811,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'Fu?note zur Herkunft', 'Fu?note zur Herkunft', 1, 0, NULL, 'SER'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SER'), ('544', 'Fu?note zum Standort anderer Archivmaterialien', 'Fu?note zum Standort anderer Archivmaterialien', 1, 0, NULL, 'SER'), + ('545', 'Fu?note zu biografischen oder historischen Daten', 'Fu?note zu biografischen oder historischen Daten', 1, 0, NULL, 'SER'), ('546', 'Fu?note zur Sprache', 'Sprache', 1, 0, NULL, 'SER'), ('547', 'Fu?note zu fr?heren Titeln', 'Fu?note zu fr?heren Titeln', 1, 0, NULL, 'SER'), ('550', 'Fu?note zur herausgebenden K?rperschaft', 'Fu?note zur herausgebenden K?rperschaft', 1, 0, NULL, 'SER'), diff --git a/installer/data/mysql/en/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql b/installer/data/mysql/en/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql index 78a18d6..bd5b175 100644 --- a/installer/data/mysql/en/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql +++ b/installer/data/mysql/en/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql @@ -372,6 +372,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'BKS'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'BKS'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'BKS'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'BKS'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'BKS'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'BKS'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'BKS'), @@ -4293,6 +4294,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'CF'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'CF'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'CF'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'CF'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'CF'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'CF'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'CF'), @@ -8213,6 +8215,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SR'), @@ -12133,6 +12136,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'VR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'VR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'VR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'VR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'VR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'VR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'VR'), @@ -16051,6 +16055,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'AR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'AR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'AR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'AR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'AR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'AR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'AR'), @@ -19969,6 +19974,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'KT'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'KT'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'KT'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'KT'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'KT'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'KT'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'KT'), @@ -23889,6 +23895,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'IR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'IR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'IR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'IR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'IR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'IR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'IR'), @@ -27804,6 +27811,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SER'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SER'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SER'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SER'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SER'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SER'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SER'), diff --git a/installer/data/mysql/fr-FR/marcflavour/marc21/Optionnel/marc21_simple_bib_frameworks.sql b/installer/data/mysql/fr-FR/marcflavour/marc21/Optionnel/marc21_simple_bib_frameworks.sql index 024e2db..e1bba64 100644 --- a/installer/data/mysql/fr-FR/marcflavour/marc21/Optionnel/marc21_simple_bib_frameworks.sql +++ b/installer/data/mysql/fr-FR/marcflavour/marc21/Optionnel/marc21_simple_bib_frameworks.sql @@ -372,6 +372,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'BKS'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'BKS'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'BKS'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'BKS'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'BKS'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'BKS'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'BKS'), @@ -4293,6 +4294,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'CF'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'CF'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'CF'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'CF'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'CF'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'CF'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'CF'), @@ -8213,6 +8215,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SR'), @@ -12133,6 +12136,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'VR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'VR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'VR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'VR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'VR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'VR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'VR'), @@ -16051,6 +16055,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'AR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'AR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'AR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'AR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'AR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'AR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'AR'), @@ -19969,6 +19974,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'KT'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'KT'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'KT'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'KT'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'KT'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'KT'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'KT'), @@ -23889,6 +23895,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'IR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'IR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'IR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'IR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'IR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'IR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'IR'), @@ -27804,6 +27811,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SER'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SER'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SER'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SER'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SER'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SER'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SER'), diff --git a/installer/data/mysql/it-IT/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql b/installer/data/mysql/it-IT/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql index a5e7d77..adfcd1f 100644 --- a/installer/data/mysql/it-IT/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql +++ b/installer/data/mysql/it-IT/marcflavour/marc21/mandatory/marc21_framework_DEFAULT.sql @@ -346,6 +346,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, ''), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, ''), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, ''), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, ''), ('546', 'LANGUAGE NOTE', 'LANGUAGE NOTE', 1, 0, NULL, ''), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, ''), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, ''), diff --git a/installer/data/mysql/it-IT/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql b/installer/data/mysql/it-IT/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql index 8821aa2..b061f8f 100644 --- a/installer/data/mysql/it-IT/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql +++ b/installer/data/mysql/it-IT/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql @@ -372,6 +372,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'BKS'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'BKS'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'BKS'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'BKS'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'BKS'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'BKS'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'BKS'), @@ -4293,6 +4294,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'CF'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'CF'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'CF'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'CF'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'CF'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'CF'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'CF'), @@ -8213,6 +8215,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SR'), @@ -12133,6 +12136,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'VR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'VR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'VR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'VR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'VR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'VR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'VR'), @@ -16051,6 +16055,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'AR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'AR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'AR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'AR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'AR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'AR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'AR'), @@ -19969,6 +19974,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'KT'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'KT'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'KT'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'KT'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'KT'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'KT'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'KT'), @@ -23889,6 +23895,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'IR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'IR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'IR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'IR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'IR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'IR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'IR'), @@ -27804,6 +27811,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SER'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SER'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SER'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SER'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SER'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SER'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SER'), diff --git a/installer/data/mysql/pl-PL/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql b/installer/data/mysql/pl-PL/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql index 6b3a0dc..1f2fc55 100644 --- a/installer/data/mysql/pl-PL/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql +++ b/installer/data/mysql/pl-PL/marcflavour/marc21/optional/marc21_simple_bib_frameworks.sql @@ -372,6 +372,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'BKS'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'BKS'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'BKS'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'BKS'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'BKS'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'BKS'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'BKS'), @@ -4293,6 +4294,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'CF'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'CF'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'CF'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'CF'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'CF'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'CF'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'CF'), @@ -8213,6 +8215,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SR'), @@ -12133,6 +12136,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'VR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'VR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'VR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'VR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'VR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'VR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'VR'), @@ -16051,6 +16055,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'AR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'AR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'AR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'AR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'AR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'AR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'AR'), @@ -19969,6 +19974,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'KT'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'KT'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'KT'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'KT'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'KT'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'KT'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'KT'), @@ -23889,6 +23895,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'IR'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'IR'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'IR'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'IR'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'IR'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'IR'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'IR'), @@ -27804,6 +27811,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat ('541', 'ACQUISITION INFO--IMMEDIATE SOURCE OF ACQUISITION NOTE', 'IMMEDIATE SOURCE OF ACQUISITION NOTE', 1, 0, NULL, 'SER'), ('543', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 'SOLICITATION INFORMATION NOTE (AM) [OBSOLETE]', 1, 0, NULL, 'SER'), ('544', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 'LOCATION OF OTHER ARCHIVAL MATERIALS NOTE', 1, 0, NULL, 'SER'), + ('545', 'BIOGRAPHICAL OR HISTORICAL DATA', 'BIOGRAPHICAL OR HISTORICAL DATA', 1, 0, NULL, 'SER'), ('546', 'LANGUAGE/TRANSLATION INFO', 'LANGUAGE NOTE', 1, 0, NULL, 'SER'), ('547', 'FORMER TITLE COMPLEXITY NOTE', 'FORMER TITLE COMPLEXITY NOTE', 1, 0, NULL, 'SER'), ('550', 'ISSUING BODY NOTE', 'ISSUING BODY NOTE', 1, 0, NULL, 'SER'), -- 1.6.3.3 From mason at kohaaloha.com Tue Dec 7 14:44:02 2010 From: mason at kohaaloha.com (Mason James) Date: Wed, 08 Dec 2010 02:44:02 +1300 Subject: [Koha-patches] [PATCH] Bug 4289: 'OpacPublic' feature Message-ID: <1291729442-23627-1-git-send-email-mason@kohaaloha.com> applied to git tag 'v3.02.00-rc' --- C4/Auth.pm | 6 +++++- installer/data/mysql/updatedatabase.pl | 6 ++++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 4 ++++ opac/opac-ISBDdetail.pl | 2 +- opac/opac-MARCdetail.pl | 2 +- opac/opac-addbybiblionumber.pl | 2 +- opac/opac-alert-subscribe.pl | 2 +- opac/opac-authorities-home.pl | 2 +- opac/opac-authoritiesdetail.pl | 2 +- opac/opac-basket.pl | 2 +- opac/opac-browser.pl | 2 +- opac/opac-detail.pl | 2 +- opac/opac-main.pl | 2 +- opac/opac-review.pl | 2 +- opac/opac-search.pl | 2 +- opac/opac-sendbasket.pl | 2 +- opac/opac-shelves.pl | 2 +- opac/opac-showmarc.pl | 2 +- opac/opac-showreviews.pl | 2 +- opac/opac-suggestions.pl | 2 +- opac/opac-tags_subject.pl | 2 +- opac/opac-topissues.pl | 2 +- opac/opac-user.pl | 2 +- opac/opac-userupdate.pl | 2 +- 24 files changed, 36 insertions(+), 22 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 593f36e..e3efa26 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -456,6 +456,8 @@ sub get_template_and_user { SyndeticsSeries => C4::Context->preference("SyndeticsSeries"), SyndeticsCoverImageSize => C4::Context->preference("SyndeticsCoverImageSize"), ); + + $template->param(OpacPublic => '1') if ($template->param( 'loggedinusername') || C4::Context->preference("OpacPublic")); } $template->param(listloop=>[{shelfname=>"Freelist", shelfnumber=>110}]); return ( $template, $borrowernumber, $cookie, $flags); @@ -943,8 +945,10 @@ sub checkauth { TemplateEncoding => C4::Context->preference("TemplateEncoding"), IndependantBranches=> C4::Context->preference("IndependantBranches"), AutoLocation => C4::Context->preference("AutoLocation"), - wrongip => $info{'wrongip'} + wrongip => $info{'wrongip'}, ); + + $template->param( OpacPublic => C4::Context->preference("OpacPublic")); $template->param( loginprompt => 1 ) unless $info{'nopermission'}; if ($cas) { diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 2bd4e21..bb9737a 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3744,6 +3744,12 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } +$DBversion = "3.00.xx.xxx"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacPublic','1','If set to OFF and user is not logged in, all OPAC pages require authentication, and OPAC searchbar is removed)','','YesNo')"); + print "Upgrade to $DBversion done (added 'OpacPublic' syspref)\n"; + SetVersion ($DBversion); +} =item DropAllForeignKeys($table) diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 878a412..80ff667 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -25,6 +25,8 @@ Koha Online Catalog
    + +
    + +
    Your cart is empty.
    diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl index 4883e89..03efd74 100755 --- a/opac/opac-ISBDdetail.pl +++ b/opac/opac-ISBDdetail.pl @@ -64,7 +64,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-ISBDdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index fae749c..2f9e99e 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -70,7 +70,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-MARCdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-addbybiblionumber.pl b/opac/opac-addbybiblionumber.pl index 8cbd239..b1bf224 100755 --- a/opac/opac-addbybiblionumber.pl +++ b/opac/opac-addbybiblionumber.pl @@ -59,7 +59,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-addbybiblionumber.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired =>( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-alert-subscribe.pl b/opac/opac-alert-subscribe.pl index c899b4b..7a95750 100755 --- a/opac/opac-alert-subscribe.pl +++ b/opac/opac-alert-subscribe.pl @@ -46,7 +46,7 @@ my $biblionumber = $query->param('biblionumber'); template_name => "opac-alert-subscribe.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index 104dff2..b8d91d5 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -151,7 +151,7 @@ else { template_name => "opac-authorities-home.tmpl", query => $query, type => 'opac', - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-authoritiesdetail.pl b/opac/opac-authoritiesdetail.pl index be4beca..9a8504c 100755 --- a/opac/opac-authoritiesdetail.pl +++ b/opac/opac-authoritiesdetail.pl @@ -63,7 +63,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-authoritiesdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl index c453c87..2ec664d 100755 --- a/opac/opac-basket.pl +++ b/opac/opac-basket.pl @@ -32,7 +32,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( template_name => "opac-basket.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-browser.pl b/opac/opac-browser.pl index 4fe5f50..0e9a632 100755 --- a/opac/opac-browser.pl +++ b/opac/opac-browser.pl @@ -44,7 +44,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-browser.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 629ebd2..6d6305e 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -55,7 +55,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-detail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-main.pl b/opac/opac-main.pl index e0a65a9..177d812 100755 --- a/opac/opac-main.pl +++ b/opac/opac-main.pl @@ -36,7 +36,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-main.tmpl", type => "opac", query => $input, - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-review.pl b/opac/opac-review.pl index 7b43c21..16ed56a 100755 --- a/opac/opac-review.pl +++ b/opac/opac-review.pl @@ -36,7 +36,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-review.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 30bc34a..e9b92d7 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -80,7 +80,7 @@ else { template_name => $template_name, query => $cgi, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl index 76400a5..6213965 100755 --- a/opac/opac-sendbasket.pl +++ b/opac/opac-sendbasket.pl @@ -38,7 +38,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( template_name => "opac-sendbasketform.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index abfcc8b..f1b7f96 100755 --- a/opac/opac-shelves.pl +++ b/opac/opac-shelves.pl @@ -29,7 +29,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ template_name => "opac-shelves.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), }); $template->param(listsview => 1); # if $loggedinuser is not defined, set it to -1, which should diff --git a/opac/opac-showmarc.pl b/opac/opac-showmarc.pl index 7eb934e..ac2fbf5 100755 --- a/opac/opac-showmarc.pl +++ b/opac/opac-showmarc.pl @@ -48,7 +48,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ template_name => "opac-showmarc.tmpl", query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, }); diff --git a/opac/opac-showreviews.pl b/opac/opac-showreviews.pl index ac8343a..19f5e1f 100755 --- a/opac/opac-showreviews.pl +++ b/opac/opac-showreviews.pl @@ -34,7 +34,7 @@ my ( $template, $borrowernumber, $cookie ) = &get_template_and_user( template_name => "opac-showreviews.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index fc9ce51..b2ed340 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -44,7 +44,7 @@ if ( C4::Context->preference("AnonSuggestions") ) { template_name => "opac-suggestions.tmpl", query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); if ( !$$suggestion{suggestedby} ) { diff --git a/opac/opac-tags_subject.pl b/opac/opac-tags_subject.pl index 0e3c264..a19f406 100755 --- a/opac/opac-tags_subject.pl +++ b/opac/opac-tags_subject.pl @@ -44,7 +44,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-tags_subject.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-topissues.pl b/opac/opac-topissues.pl index 1d88850..26776d4 100755 --- a/opac/opac-topissues.pl +++ b/opac/opac-topissues.pl @@ -48,7 +48,7 @@ my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => 'opac-topissues.tmpl', query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, }); my $dbh = C4::Context->dbh; diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 634b77a..e1e50cf 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -47,7 +47,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-user.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, debug => 1, } diff --git a/opac/opac-userupdate.pl b/opac/opac-userupdate.pl index b38a477..2a209ec 100755 --- a/opac/opac-userupdate.pl +++ b/opac/opac-userupdate.pl @@ -40,7 +40,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-userupdate.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, debug => 1, } -- 1.7.1 From gcollum at gmail.com Sun Dec 5 23:07:44 2010 From: gcollum at gmail.com (Garry Collum) Date: Sun, 5 Dec 2010 17:07:44 -0500 Subject: [Koha-patches] [PATCH] Bug 5373: Adds cardnumber to the field list of the Import Patrons NOTES. Message-ID: <1291586864-10023-1-git-send-email-gcollum@gmail.com> Adds 'cardnumber' as an option to the list of possible fields in the NOTES section of the patron import tool. --- .../prog/en/modules/tools/import_borrowers.tmpl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl index 0e409b6..2bec508 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl @@ -144,8 +144,8 @@
    • The first line in the file must be a header row defining which columns you are supplying in the import file.
    • Download a starter CSV file with all the columns here. Values are comma-separated.
    • -
    • OR choose which fields you want to supply from the following list:
      • - '', +
      • OR choose which fields you want to supply from the following list:
          +
        • 'cardnumber', ''
      • If loading patron attributes, the 'patron_attributes' field should contain a comma-separated list of attribute types and values. The attribute type code and a colon should precede each value. For example: INSTID:12345,LANG:fr or STARTDATE:January 1 2010,TRACK:Day. If an input record has more than one attribute, the fields should either be entered as an unquoted string (previous examples), or with each field wrapped in separate double quotes and delimited by a comma: "STARTDATE:January 1, 2010","TRACK:Day". The second syntax would be required if the data might have a comma in it, like a date string. -- 1.5.6.5 From f.demians at tamil.fr Tue Dec 7 17:33:13 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Tue, 7 Dec 2010 17:33:13 +0100 Subject: [Koha-patches] [PATCH 2/2] Bug 4289 Followup: Add syspref default value and in opac.pref In-Reply-To: <1291739593-30970-1-git-send-email-f.demians@tamil.fr> References: <1291739593-30970-1-git-send-email-f.demians@tamil.fr> Message-ID: <1291739593-30970-2-git-send-email-f.demians@tamil.fr> Signed-off-by: Fr?d?ric Demians --- installer/data/mysql/en/mandatory/sysprefs.sql | 1 + .../prog/en/modules/admin/preferences/opac.pref | 6 ++++++ 2 files changed, 7 insertions(+), 0 deletions(-) diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql index d4fb9a2..d1f3256 100644 --- a/installer/data/mysql/en/mandatory/sysprefs.sql +++ b/installer/data/mysql/en/mandatory/sysprefs.sql @@ -81,6 +81,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacstylesheet','','Enter a complete URL to use an alternate layout stylesheet in OPAC','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacthemes','prog','Define the current theme for the OPAC interface.','','Themes'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacTopissue',0,'If ON, enables the \'most popular items\' link on OPAC. Warning, this is an EXPERIMENTAL feature, turning ON may overload your server',NULL,'YesNo'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacPublic',1,'Turn on/off public OPAC',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacuserjs','','Define custom javascript for inclusion in OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacuserlogin',1,'Enable or disable display of user login features',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('patronimages',0,'Enable patron images for the Staff Client',NULL,'YesNo'); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 55560d3..0bbcdf1 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -16,6 +16,12 @@ OPAC: class: long - as the name of the library on the OPAC. - + - pref: OpacPublic + choices: + yes: Enable + no: Disable + - "Koha OPAC as public. Private OPAC requires authentification before accessing the OPAC." + - - pref: OpacMaintenance choices: yes: Show -- 1.7.3.2 From f.demians at tamil.fr Tue Dec 7 17:33:12 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Tue, 7 Dec 2010 17:33:12 +0100 Subject: [Koha-patches] [PATCH 1/2] [SIGNED-OFF] Bug 4289: 'OpacPublic' feature Message-ID: <1291739593-30970-1-git-send-email-f.demians@tamil.fr> From: Mason James applied to git tag 'v3.02.00-rc' Fr?d?ric Demians: - Rebased this patch to HEAD - Solved a merge conflict - The patch works as described here: http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=4289 Signed-off-by: Fr?d?ric Demians --- C4/Auth.pm | 6 +++++- installer/data/mysql/updatedatabase.pl | 7 +++++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 4 ++++ opac/opac-ISBDdetail.pl | 2 +- opac/opac-MARCdetail.pl | 2 +- opac/opac-addbybiblionumber.pl | 2 +- opac/opac-alert-subscribe.pl | 2 +- opac/opac-authorities-home.pl | 2 +- opac/opac-authoritiesdetail.pl | 2 +- opac/opac-basket.pl | 2 +- opac/opac-browser.pl | 2 +- opac/opac-detail.pl | 2 +- opac/opac-main.pl | 2 +- opac/opac-review.pl | 2 +- opac/opac-search.pl | 2 +- opac/opac-sendbasket.pl | 2 +- opac/opac-shelves.pl | 2 +- opac/opac-showmarc.pl | 2 +- opac/opac-showreviews.pl | 2 +- opac/opac-suggestions.pl | 2 +- opac/opac-tags_subject.pl | 2 +- opac/opac-topissues.pl | 2 +- opac/opac-user.pl | 2 +- opac/opac-userupdate.pl | 2 +- 24 files changed, 37 insertions(+), 22 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 7404f96..66f2038 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -454,6 +454,8 @@ sub get_template_and_user { SyndeticsSeries => C4::Context->preference("SyndeticsSeries"), SyndeticsCoverImageSize => C4::Context->preference("SyndeticsCoverImageSize"), ); + + $template->param(OpacPublic => '1') if ($template->param( 'loggedinusername') || C4::Context->preference("OpacPublic")); } $template->param(listloop=>[{shelfname=>"Freelist", shelfnumber=>110}]); return ( $template, $borrowernumber, $cookie, $flags); @@ -940,8 +942,10 @@ sub checkauth { intranetuserjs => C4::Context->preference("intranetuserjs"), IndependantBranches=> C4::Context->preference("IndependantBranches"), AutoLocation => C4::Context->preference("AutoLocation"), - wrongip => $info{'wrongip'} + wrongip => $info{'wrongip'}, ); + + $template->param( OpacPublic => C4::Context->preference("OpacPublic")); $template->param( loginprompt => 1 ) unless $info{'nopermission'}; if ($cas) { diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index d093946..b96139b 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3876,6 +3876,13 @@ VALUES SetVersion ($DBversion); }; +$DBversion = "3.00.xx.xxx"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OpacPublic','1','If set to OFF and user is not logged in, all OPAC pages require authentication, and OPAC searchbar is removed)','','YesNo')"); + print "Upgrade to $DBversion done (added 'OpacPublic' syspref)\n"; + SetVersion ($DBversion); +} + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 878a412..80ff667 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -25,6 +25,8 @@ Koha Online Catalog
        + +
        + +
        Your cart is empty.
        diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl index 88904da..80c45a6 100755 --- a/opac/opac-ISBDdetail.pl +++ b/opac/opac-ISBDdetail.pl @@ -61,7 +61,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-ISBDdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index d127202..8813fd4 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -71,7 +71,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-MARCdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-addbybiblionumber.pl b/opac/opac-addbybiblionumber.pl index 8cbd239..b1bf224 100755 --- a/opac/opac-addbybiblionumber.pl +++ b/opac/opac-addbybiblionumber.pl @@ -59,7 +59,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-addbybiblionumber.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired =>( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-alert-subscribe.pl b/opac/opac-alert-subscribe.pl index c899b4b..7a95750 100755 --- a/opac/opac-alert-subscribe.pl +++ b/opac/opac-alert-subscribe.pl @@ -46,7 +46,7 @@ my $biblionumber = $query->param('biblionumber'); template_name => "opac-alert-subscribe.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index 104dff2..b8d91d5 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -151,7 +151,7 @@ else { template_name => "opac-authorities-home.tmpl", query => $query, type => 'opac', - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-authoritiesdetail.pl b/opac/opac-authoritiesdetail.pl index 71f746e..7e06310 100755 --- a/opac/opac-authoritiesdetail.pl +++ b/opac/opac-authoritiesdetail.pl @@ -62,7 +62,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-authoritiesdetail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl index c453c87..2ec664d 100755 --- a/opac/opac-basket.pl +++ b/opac/opac-basket.pl @@ -32,7 +32,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( template_name => "opac-basket.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-browser.pl b/opac/opac-browser.pl index 4fe5f50..0e9a632 100755 --- a/opac/opac-browser.pl +++ b/opac/opac-browser.pl @@ -44,7 +44,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-browser.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 2de8ec8..6ef93a3 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -54,7 +54,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-detail.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-main.pl b/opac/opac-main.pl index e0a65a9..177d812 100755 --- a/opac/opac-main.pl +++ b/opac/opac-main.pl @@ -36,7 +36,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-main.tmpl", type => "opac", query => $input, - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-review.pl b/opac/opac-review.pl index 7b43c21..16ed56a 100755 --- a/opac/opac-review.pl +++ b/opac/opac-review.pl @@ -36,7 +36,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-review.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 2bfcb6d..f474f61 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -80,7 +80,7 @@ else { template_name => $template_name, query => $cgi, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl index 76400a5..6213965 100755 --- a/opac/opac-sendbasket.pl +++ b/opac/opac-sendbasket.pl @@ -38,7 +38,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( template_name => "opac-sendbasketform.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, } ); diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl index abfcc8b..f1b7f96 100755 --- a/opac/opac-shelves.pl +++ b/opac/opac-shelves.pl @@ -29,7 +29,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ template_name => "opac-shelves.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), }); $template->param(listsview => 1); # if $loggedinuser is not defined, set it to -1, which should diff --git a/opac/opac-showmarc.pl b/opac/opac-showmarc.pl index b379917..ea2c65d 100755 --- a/opac/opac-showmarc.pl +++ b/opac/opac-showmarc.pl @@ -48,7 +48,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ template_name => "opac-showmarc.tmpl", query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, }); diff --git a/opac/opac-showreviews.pl b/opac/opac-showreviews.pl index ac8343a..19f5e1f 100755 --- a/opac/opac-showreviews.pl +++ b/opac/opac-showreviews.pl @@ -34,7 +34,7 @@ my ( $template, $borrowernumber, $cookie ) = &get_template_and_user( template_name => "opac-showreviews.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index fc9ce51..b2ed340 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -44,7 +44,7 @@ if ( C4::Context->preference("AnonSuggestions") ) { template_name => "opac-suggestions.tmpl", query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), } ); if ( !$$suggestion{suggestedby} ) { diff --git a/opac/opac-tags_subject.pl b/opac/opac-tags_subject.pl index 0e3c264..a19f406 100755 --- a/opac/opac-tags_subject.pl +++ b/opac/opac-tags_subject.pl @@ -44,7 +44,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( template_name => "opac-tags_subject.tmpl", query => $query, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, } ); diff --git a/opac/opac-topissues.pl b/opac/opac-topissues.pl index 70b712e..9869d28 100755 --- a/opac/opac-topissues.pl +++ b/opac/opac-topissues.pl @@ -46,7 +46,7 @@ my ($template, $borrowernumber, $cookie) = get_template_and_user({template_name => 'opac-topissues.tmpl', query => $input, type => "opac", - authnotrequired => 1, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), debug => 1, }); my $dbh = C4::Context->dbh; diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 634b77a..e1e50cf 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -47,7 +47,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-user.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, debug => 1, } diff --git a/opac/opac-userupdate.pl b/opac/opac-userupdate.pl index ab2e15d..72a194a 100755 --- a/opac/opac-userupdate.pl +++ b/opac/opac-userupdate.pl @@ -40,7 +40,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( template_name => "opac-userupdate.tmpl", query => $query, type => "opac", - authnotrequired => 0, + authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), flagsrequired => { borrow => 1 }, debug => 1, } -- 1.7.3.2 From oleonard at myacpl.org Tue Dec 7 18:21:43 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Tue, 7 Dec 2010 12:21:43 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 5285, Show/hide columns in the output of items in batch operations Message-ID: <1291742503-7647-1-git-send-email-oleonard@myacpl.org> Also adds title/author information to output of batch deletions --- .../prog/en/includes/doc-head-close.inc | 2 +- .../intranet-tmpl/prog/en/js/pages/batchMod.js | 139 ++++++++++++++++++++ .../prog/en/modules/tools/batchMod-del.tmpl | 50 ++++---- .../prog/en/modules/tools/batchMod-edit.tmpl | 54 ++++---- tools/batchMod.pl | 13 ++- 5 files changed, 201 insertions(+), 57 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/js/pages/batchMod.js diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc index 1970440..bbbd648 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/doc-head-close.inc @@ -62,7 +62,7 @@ - + diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/pages/batchMod.js b/koha-tmpl/intranet-tmpl/prog/en/js/pages/batchMod.js new file mode 100644 index 0000000..3b9b7ec --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/js/pages/batchMod.js @@ -0,0 +1,139 @@ +// Set expiration date for cookies + var date = new Date(); + date.setTime(date.getTime()+(365*24*60*60*1000)); + var expiration = date.toGMTString(); + + +function hideColumns(){ + valCookie = YAHOO.util.Cookie.get("showColumns", function(stringValue){ + return stringValue.split("/"); + }); + if(valCookie){ + $("#showall").attr("checked","").parent().removeClass("selected"); + for( i=0; i
      • +
      • " /> " />
      • + @@ -362,6 +364,7 @@ function checkMultiHold() { + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tmpl index ee99c0d..bcbf42f 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tmpl @@ -131,6 +131,12 @@ biblionumbers += biblioNum + "/"; selections += biblioNum + "/"; + // + if ($("#reqnone_" + biblioNum + ":checked").size()>0){ + badBib = biblioNum; + return false; + } + // If the 'specific copy' radio button is checked if ($("#reqspecific_" + biblioNum + ":checked").size() > 0) { // Find the selected copy @@ -404,7 +410,7 @@ " - id="reqany_" + id="reqnone_" class="hidecopies" checked="checked" /> diff --git a/reserve/request.pl b/reserve/request.pl index e5a4d03..21091fb 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -292,6 +292,7 @@ foreach my $biblionumber (@biblionumbers) { } my @hostitems = get_hostitemnumbers_of($biblionumber); if (@hostitems){ + $template->param('hostitemsflag' => 1); push(@itemnumbers, @hostitems); } -- 1.5.4.5 From savitra.sirohi at osslabs.biz Thu Dec 9 15:45:28 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Thu, 9 Dec 2010 20:15:28 +0530 Subject: [Koha-patches] [PATCH] Analytical records: ability to create analytical records from items, to view linked analytics, and prevent deletion of items that have linked analytics Message-ID: <1291905928-11102-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi --- C4/Items.pm | 26 ++++++++++++++++++++ catalogue/detail.pl | 18 ++++++++++++- cataloguing/additem.pl | 7 +++++ .../prog/en/includes/biblio-view-menu.inc | 2 + .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 1 + .../prog/en/modules/cataloguing/additem.tmpl | 2 +- 6 files changed, 53 insertions(+), 3 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index a908356..937762f 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -74,6 +74,8 @@ BEGIN { MoveItemFromBiblio GetLatestAcquisitions CartToShelf + + GetAnalyticsCount ); } @@ -2357,4 +2359,28 @@ sub _parse_unlinked_item_subfields_from_xml { return $unlinked_subfields; } +=head2 GetAnalyticsCount + + $count= &GetAnalyticsCount($itemnumber) + +counts Usage of itemnumber in Analytical bibliorecords. + +=cut + +sub GetAnalyticsCount { + my ($itemnumber) = @_; + if (C4::Context->preference('NoZebra')) { + # Read the index Koha-Auth-Number for this authid and count the lines + my $result = C4::Search::NZanalyse("hi=$itemnumber"); + my @tab = split /;/,$result; + return scalar @tab; + } else { + ### ZOOM search here + my $query; + $query= "hi=".$itemnumber; + my ($err,$res,$result) = C4::Search::SimpleSearch($query,0,10); + return ($result); + } +} + 1; diff --git a/catalogue/detail.pl b/catalogue/detail.pl index 272e32e..3e84ed9 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -41,9 +41,13 @@ use C4::XSLT; # use Smart::Comments; my $query = CGI->new(); + +my $analyze = $query->param('analyze'); + my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { - template_name => "catalogue/detail.tmpl", + template_name => ($analyze? 'catalogue/analyze.tmpl': + 'catalogue/detail.tmpl'), query => $query, type => "intranet", authnotrequired => 0, @@ -145,6 +149,8 @@ my (@itemloop, %itemfields); my $norequests = 1; my $authvalcode_items_itemlost = GetAuthValCode('items.itemlost',$fw); my $authvalcode_items_damaged = GetAuthValCode('items.damaged', $fw); + +my $analytics_flag; foreach my $item (@items) { # can place holds defaults to yes @@ -212,6 +218,13 @@ foreach my $item (@items) { if ($item->{biblionumber} ne $biblionumber){ $item->{hostbiblionumber} = $item->{biblionumber}; } + + #count if item is used in analytical bibliorecords + my $countanalytics= GetAnalyticsCount($item->{itemnumber}); + if ($countanalytics > 0){ + $analytics_flag=1; + $item->{countanalytics} = $countanalytics; + } push @itemloop, $item; } @@ -233,6 +246,7 @@ $template->param( itemdata_itemnotes => $itemfields{itemnotes}, z3950_search_params => C4::Search::z3950_search_args($dat), hostrecords => $hostrecords, + analytics_flag => $analytics_flag, C4::Search::enabled_staff_search_views, ); @@ -247,7 +261,7 @@ foreach ( keys %{$dat} ) { $template->param( itemloop => \@itemloop, biblionumber => $biblionumber, - detailview => 1, + ($analyze? 'analyze':'detailview') =>1, subscriptions => \@subs, subscriptionsnumber => $subscriptionsnumber, subscriptiontitle => $dat->{title}, diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index 816e884..13b59d1 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -372,6 +372,12 @@ foreach my $field (@fields) { last; } } + + my $countanalytics=GetAnalyticsCount($this_row{itemnumber}); + if ($countanalytics > 0){ + $this_row{countanalytics} = $countanalytics; + } + } if (%this_row) { push(@big_array, \%this_row); @@ -394,6 +400,7 @@ for my $row ( @big_array ) { $row_data{'nomod'} = $row->{'nomod'}; $row_data{'hostitemflag'} = $row->{'hostitemflag'}; $row_data{'hostbiblionumber'} = $row->{'hostbiblionumber'}; + $row_data{'countanalytics'} = $row->{'countanalytics'}; push(@item_value_loop,\%row_data); } foreach my $subfield_code (sort keys(%witness)) { diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-view-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-view-menu.inc index 7a9ed64..4fc22db 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-view-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-view-menu.inc @@ -23,6 +23,8 @@
      • ">Holds
      • +
      • &analyze=1&analyze=1">Analytics
      • +
      • ">Subscription(s)
      diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index f3776a6..a4388c9 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -79,6 +79,7 @@ function confirm_items_deletion() { {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=#additema" }, {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription="}, + {text: _("Analyze items"), url: "/cgi-bin/koha/catalogue/detail.pl?biblionumber=&analyze=1" }, ]; var editmenu = [ diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl index 2145ddb..68bd084 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl @@ -207,7 +207,7 @@ function set_to_today(id, force) { ">  &itemnumber=#edititem">Edit in Host&hostitemnumber=">Delink&itemnumber=#edititem">Edit - &itemnumber=" onclick="confirm_deletion(,); return false;">Delete + ">view analytics&itemnumber=" onclick="confirm_deletion(,); return false;">Delete -- 1.5.4.5 From savitra.sirohi at osslabs.biz Thu Dec 9 15:46:10 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Thu, 9 Dec 2010 20:16:10 +0530 Subject: [Koha-patches] [PATCH] Analytical records: new template for catalogue/detail.pl, template displays linked analytics and allows creation of analytical records Message-ID: <1291905970-11152-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi --- .../prog/en/modules/catalogue/analyze.tmpl | 497 ++++++++++++++++++++ 1 files changed, 497 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/analyze.tmpl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/analyze.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/analyze.tmpl new file mode 100644 index 0000000..3a2a037 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/analyze.tmpl @@ -0,0 +1,497 @@ + +Koha › Catalog › Details for <!-- TMPL_VAR NAME="title" escape="html" --> <!-- TMPL_LOOP NAME="subtitle" --> <!-- TMPL_VAR NAME="subfield" --><!-- /TMPL_LOOP --> + + + + + + + + + + +
      + +
      +
      +
      + + + + +
      +
      + +
      +
      + + + +
      +
      + +
      +
      + + + + + + + + Lists that include this title: + + "> + | + + + + +
      + /gp/reader//ref=sib_dp_pt/002-7879865-0184864#reader-link">.01.MZZZZZZZ.jpg" alt="" /> + + +

      + +

      + + " alt="" title=""> +

      +

      By ">

      + +
      + + + +
      +
        + +
      • ISBN:
      • + + +
      • ISSN:
      • + + +
      • Collection: + , (ISSN: ) +
      • + + +
      • Subjects: + +
      • + + +
      • Copyright:
      • + + + +
      • Classification:
      • + + +
      • Dewey:
      • + + +
      • URL: + + "> + +
      • + + + +
      • Lists that include this title: +
          + +
        • ">
        • + +
        +
      • + +
      + +
      +
      + +
      +#holdings">Holdings
    • +
    • #subscriptions">Subscriptions
    • +
    • #editions">Editions
    • +
    • #related">Related Titles
    • +
    +--> +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Item typeLocationCollectionCall NumberStatusLast seenBarcodePublication DetailsURLCopy No.Public notesSpine LabelHost RecordUsed in
    + + + + + " alt="" title="" /> + + + + + + + Checked out + + to "> + + + + + + + + : due + + + In transit from , + to , since + + + + + + + + + + + + Unavailable (lost or missing) + + + + + Withdrawn + + + + + + + + + + + Damaged + + + + + Not for loan + + () + + + + + + + Waiting + + On hold + + for "> + + + + + + + + atexpected at + + since + + + + + + + Available + + + &itemnumber=&biblionumber=&bi=#item + + + -- + + + () + ">
    &item=">Fix Itemtype" >Print Label" >Host Record"> analytics&hostitemnumber=">Analyze
    + +

    + + + + +
    itemdata_enumchron
    itemdata_copynumber
    serial
    + + +

    No physical items for this record

    + +
    + + + +
    +
    +
    +

    This is a serial subscription

    +

    (There are subscriptions associated with this title).

    + +

    At library:

    +

    At branch:

    +

    + +

    The latest issues related to this subscription:

    + + + + + + + + + + + + + + + +
    Issue #DateStatusNote
    Expected + + Arrived + + Late + + Missing + + Not Issued + + + + +
    + + ">Subscription Details + +
    +
    +
    + + + +

    Editions

    + + + + +
    /ref=sib_dp_pt/002-7879865-0184864#reader-link">.01._AA75_PU_PU-5_.jpg" />" alt="" title=""> +"> by © + + () , + + + , +
    + + + + + + +
    + +
    + + + + + + +
    Save Record
    Select Download Format: +
    + " /> +
    + +
    + + + +
    + +
    + +
    + + -- 1.5.4.5 From savitra.sirohi at osslabs.biz Thu Dec 9 15:46:43 2010 From: savitra.sirohi at osslabs.biz (savitra.sirohi at osslabs.biz) Date: Thu, 9 Dec 2010 20:16:43 +0530 Subject: [Koha-patches] [PATCH] Analytical records: new zebra index for item number in host fields. This index will be used to display links to analytical records from host records Message-ID: <1291906003-11193-1-git-send-email-savitra.sirohi@osslabs.biz> From: Savitra Sirohi --- etc/zebradb/biblios/etc/bib1.att | 4 +--- etc/zebradb/ccl.properties | 4 ++-- etc/zebradb/marc_defs/marc21/biblios/record.abs | 6 ++---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/etc/zebradb/biblios/etc/bib1.att b/etc/zebradb/biblios/etc/bib1.att index 97c3d68..f88df2c 100644 --- a/etc/zebradb/biblios/etc/bib1.att +++ b/etc/zebradb/biblios/etc/bib1.att @@ -158,6 +158,7 @@ att 8031 itype ## Fixed Fields and other special indexes att 9901 Extent att 8910 Koha-Auth-Number +att 8911 Host-Item-Number # record length according to the leader att 9905 llength att 9902 Summary @@ -189,6 +190,3 @@ att 9903 lex att 9904 arl att 9013 arp att 9520 Item -# Curriculum -att 9658 curriculum - diff --git a/etc/zebradb/ccl.properties b/etc/zebradb/ccl.properties index 4bca55e..ed18be2 100644 --- a/etc/zebradb/ccl.properties +++ b/etc/zebradb/ccl.properties @@ -1052,8 +1052,6 @@ arl 1=9904 r=r #Accelerated Reader Point arp 1=9013 r=r -# Curriculum -curriculum 1=9658 ## Statuses popularity 1=issues @@ -1156,3 +1154,5 @@ ElementSetName exp1,1=12 Item 1=9520 item Item +Host-Item-Number 1=8911 +hi Host-Item-Number diff --git a/etc/zebradb/marc_defs/marc21/biblios/record.abs b/etc/zebradb/marc_defs/marc21/biblios/record.abs index ed71a93..7a875ab 100755 --- a/etc/zebradb/marc_defs/marc21/biblios/record.abs +++ b/etc/zebradb/marc_defs/marc21/biblios/record.abs @@ -44,7 +44,7 @@ melm 001 Control-number melm 005 Date/time-last-modified melm 007 Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2) -melm 008 date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:w:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) +melm 008 date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) melm 010 LC-card-number,Identifier-standard melm 011 LC-card-number,Identifier-standard @@ -188,9 +188,6 @@ melm 656$9 Koha-Auth-Number melm 656 Subject melm 657$9 Koha-Auth-Number melm 657 Subject -melm 658$a curriculum:w,curriculum:p -melm 658$b curriculum:w,curriculum:p -melm 658$c curriculum:w,curriculum:p melm 690$9 Koha-Auth-Number melm 690 Subject,Subject:p @@ -220,6 +217,7 @@ melm 730$r Music-key melm 730$9 Koha-Auth-Number melm 730 Title,Title-uniform melm 740 Title,Title-other-variant +melm 773$9 Host-Item-Number melm 773$t Host-item melm 780$t Title melm 780 Title,Title-former,Related-periodical -- 1.5.4.5 From f.demians at tamil.fr Thu Dec 9 21:46:51 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Thu, 9 Dec 2010 21:46:51 +0100 Subject: [Koha-patches] [PATCH] Bug 4838 Allow to choose which authority heading to copy into biblio record Message-ID: <1291927611-13709-1-git-send-email-f.demians@tamil.fr> With this patch, in biblio record data entry form, when ... is clicked for an authority controlled field, it's possible to select which heading repetion to copy if the authority has repeated headings. When there is just one authority repetition, the first one is displayed to choose, as previously. This patch is REQUIRED by French libraries following SUDOC UNIMARC format, and cataloguing multilingual materials ie all Higher Educational and Research libraries. --- authorities/auth_finder.pl | 14 ++++++ authorities/blinddetail-biblio-search.pl | 47 ++++++-------------- .../authorities/blinddetail-biblio-search.tmpl | 15 +++--- .../modules/authorities/searchresultlist-auth.tmpl | 6 +++ 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index 89f632f..99ac2c1 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -70,6 +70,20 @@ if ( $op eq "do_search" ) { SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value, $startfrom * $resultsperpage, $resultsperpage, $authtypecode, $orderby); + + # If an authority heading is repeated, add an arrayref to those repetions + # First heading -- Second heading + for my $heading ( @$results ) { + my @repets = split / -- /, $heading->{summary}; + if ( @repets > 1 ) { + my @repets_loop; + for (my $i = 0; $i < @repets; $i++) { + push @repets_loop, + { index => $index, repet => $i+1, value => $repets[$i] }; + } + $heading->{repets} = \@repets_loop; + } + } # multi page display gestion my $displaynext = 0; my $displayprev = $startfrom; diff --git a/authorities/blinddetail-biblio-search.pl b/authorities/blinddetail-biblio-search.pl index 1495348..0f734b2 100755 --- a/authorities/blinddetail-biblio-search.pl +++ b/authorities/blinddetail-biblio-search.pl @@ -75,46 +75,27 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( ); # fill arrays -my @loop_data = (); +my @subfield_loop; if ($authid) { - foreach my $field ( $record->field( $auth_type->{auth_tag_to_report} ) ) { - my @subfields_data; - my @subf = $field->subfields; - - # loop through each subfield - my %result; - for my $i ( 0 .. $#subf ) { - $subf[$i][0] = "@" unless $subf[$i][0]; - $result{ $subf[$i][0] } .= $subf[$i][1] . "|"; - } - foreach ( keys %result ) { - my %subfield_data; - chop $result{$_}; - $subfield_data{marc_value} = $result{$_}; - $subfield_data{marc_subfield} = $_; - - # $subfield_data{marc_tag}=$field->tag(); - push( @subfields_data, \%subfield_data ); - } - if ( $#subfields_data >= 0 ) { - my %tag_data; - $tag_data{tag} = $field->tag() . ' -' . $tagslib->{ $field->tag() }->{lib}; - $tag_data{subfield} = \@subfields_data; - push( @loop_data, \%tag_data ); - } + my @fields = $record->field( $auth_type->{auth_tag_to_report} ); + my $repet = ($query->param('repet') || 1) - 1; + my $field = $fields[$repet]; + for ( $field->subfields ) { + my ($letter, $value) = @$_; + $letter = '@' unless $letter; + push @subfield_loop, { marc_subfield => $letter, marc_value => $value }; } -} else { +} +else { # authid is empty => the user want to empty the entry. $template->param( "clear" => 1 ); -# warn Data::Dumper::Dumper(\@loop_data); } -$template->param( "0XX" => \@loop_data ); - $template->param( - authid => $authid ? $authid : "", - index => $index, - tagid => $tagid, + authid => $authid ? $authid : "", + index => $index, + tagid => $tagid, + SUBFIELD_LOOP => \@subfield_loop, ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl index a6e4723..a9753b3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl @@ -19,19 +19,18 @@ if(subfields[i].getAttribute('name').match(re)){ // it s a subfield var code = subfields[i]; // code is the first input var subfield = subfields[i+1]; // subfield the second + if (subfield){subfield.value="" ;} - - - if (code.value == ""){ + + if (code.value == ""){ subfield.value = ""; - } - - - if(code.value=='9'){ - subfield.value = ""; } + + if(code.value=='9'){ + subfield.value = ""; + } } } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl index e327451..5d1f9a4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl @@ -70,7 +70,13 @@ function jumpfull(page) times + + + &index=&repet=')" title=""> + + &index=')">choose + ">Edit authority -- 1.5.6.5 From Katrin.Fischer.83 at web.de Fri Dec 10 08:03:08 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Fri, 10 Dec 2010 08:03:08 +0100 Subject: [Koha-patches] [PATCH] Bug 4160: Currency conversion doesn't handle rates other than 100 Message-ID: <1291964588-30734-1-git-send-email-Katrin.Fischer.83@web.de> Changes data type for currency.rate to accomodate bigger currency conversion rates. FLOAT( 15, 5 ) --- installer/data/mysql/kohastructure.sql | 2 +- installer/data/mysql/updatedatabase.pl | 8 ++++++++ kohaversion.pl | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 9148970..bf992be 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -563,7 +563,7 @@ CREATE TABLE `currency` ( `currency` varchar(10) NOT NULL default '', `symbol` varchar(5) default NULL, `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, - `rate` float(7,5) default NULL, + `rate` float(15,5) default NULL, `active` tinyint(1) default NULL, PRIMARY KEY (`currency`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index d093946..bd0a588 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3876,6 +3876,14 @@ VALUES SetVersion ($DBversion); }; +$DBversion = '3.03.00.00X'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE `currency` CHANGE `rate` `rate` FLOAT( 15, 5 ) NULL DEFAULT NULL;"); + print "Upgrade to $DBversion done (Enable currency rates >= 100)\n"; + SetVersion ($DBversion); +} + + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/kohaversion.pl b/kohaversion.pl index 53c1724..3ece202 100644 --- a/kohaversion.pl +++ b/kohaversion.pl @@ -16,7 +16,7 @@ the kohaversion is divided in 4 parts : use strict; sub kohaversion { - our $VERSION = '3.03.00.004'; + our $VERSION = '3.0X.XX.XXX'; # version needs to be set this way # so that it can be picked up by Makefile.PL # during install -- 1.7.1 From colin.campbell at ptfs-europe.com Fri Dec 10 15:28:09 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 10 Dec 2010 14:28:09 +0000 Subject: [Koha-patches] [SIGNED OFF] Fix for Bug 2808, Hold queue not alphabetizing Message-ID: <1291991289-27455-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard White space in the biblio-default-view include and in the page template caused sorting on title or patron to be incorrect. Signed-off-by: Colin Campbell --- .../prog/en/includes/biblio-default-view.inc | 10 +------- .../prog/en/modules/circ/waitingreserves.tmpl | 24 +++++--------------- 2 files changed, 7 insertions(+), 27 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc index deb5dd3..328471b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/biblio-default-view.inc @@ -1,9 +1 @@ - - "> - - "> - - "> - - "> - \ No newline at end of file +">">">"> \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl index 63b9e26..6587457 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/waitingreserves.tmpl @@ -14,7 +14,7 @@ $.tablesorter.addParser({ $('#resultlist > ul').tabs(); $("th a").hide(); $.tablesorter.defaults.widgets = ['zebra']; - $("#holdst").tablesorter({ + $("#holdst,#holdso").tablesorter({ dateFormat: 'uk', sortList: [[3,0]], headers: { 1:{sorter:'articles'},3: { sorter: 'articles' },4:{sorter:false}} @@ -84,15 +84,13 @@ $.tablesorter.addParser({

    - - +
      ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> @@ -130,27 +128,17 @@ $.tablesorter.addParser({

    - - - "> - - "> - - "> - - +   ()
    Barcode: - - ">,

    + ">,

    ?subject=Reservation: "> - -
    + " /> " /> " /> -- 1.7.3.2 From colin.campbell at ptfs-europe.com Fri Dec 10 15:33:36 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 10 Dec 2010 14:33:36 +0000 Subject: [Koha-patches] [SIGNED OFF] Fix for Bug 4173 - Statuses not appearing in the OPAC Message-ID: <1291991616-27564-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard This adds display of "Use restrictions" authorized values to the OPAC and the staff client for available and not-for-loan items. Signed-off-by: Colin Campbell --- C4/Items.pm | 25 ++++++++++++++++++++ .../prog/en/modules/catalogue/detail.tmpl | 2 + .../opac-tmpl/prog/en/includes/item-status.inc | 8 +++--- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 264fa5b..5eda6dd 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1270,6 +1270,31 @@ sub GetItemsInfo { $data->{notforloanvalue} = $lib; } + # get restricted status and description if applicable + my $restrictedstatus = $dbh->prepare( + 'SELECT authorised_value + FROM marc_subfield_structure + WHERE kohafield="items.restricted" + ' + ); + + $restrictedstatus->execute; + my ($authorised_valuecode) = $restrictedstatus->fetchrow; + if ($authorised_valuecode) { + $restrictedstatus = $dbh->prepare( + "SELECT lib,lib_opac FROM authorised_values + WHERE category=? + AND authorised_value=?" + ); + $restrictedstatus->execute( $authorised_valuecode, + $data->{restricted} ); + + if ( my $rstdata = $restrictedstatus->fetchrow_hashref ) { + $data->{restricted} = $rstdata->{'lib'}; + $data->{restrictedopac} = $rstdata->{'lib_opac'}; + } + } + # my stack procedures my $stackstatus = $dbh->prepare( 'SELECT authorised_value diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl index e3391ac..8dde1b5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl @@ -326,6 +326,8 @@ function verify_images() { Available + + () diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc index 5e881fe..6369bba 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/item-status.inc @@ -19,14 +19,14 @@ - + () - Not for loan + Not for loan () - Not for loan + Not for loan () Item damaged - Available + Available () -- 1.7.3.2 From colin.campbell at ptfs-europe.com Fri Dec 10 16:03:33 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 10 Dec 2010 15:03:33 +0000 Subject: [Koha-patches] [SIGNED OFF] Fix for Bug 1883, authorised list of reasons why patron requesting book Message-ID: <1291993413-27955-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard - Adding form controls to opac submission form and staf client edit form. - Adding display of patron reason for suggestion on opac list - Adding function for pulling an authorized value description using the category and value TODO: Add some default authorised values Signed-off-by: Colin Campbell --- .../prog/en/modules/suggestion/suggestion.tmpl | 3 +++ .../prog/en/modules/opac-suggestions.tmpl | 3 +++ opac/opac-suggestions.pl | 7 ++++++- suggestion/suggestion.pl | 3 +++ 4 files changed, 15 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl index 7489cb6..4cd86ce 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/suggestion/suggestion.tmpl @@ -116,6 +116,9 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di +
  • diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl index ab5b753..483551b 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-suggestions.tmpl @@ -91,6 +91,9 @@ $.tablesorter.addParser({ +
  • " /> Cancel
    diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl index fc9ce51..75d0791 100755 --- a/opac/opac-suggestions.pl +++ b/opac/opac-suggestions.pl @@ -115,17 +115,22 @@ foreach my $suggestion(@$suggestions_loop) { } else { $suggestion->{'showcheckbox'} = 0; } + if($suggestion->{'patronreason'}){ + $suggestion->{'patronreason'} = GetKohaAuthorisedValueLib("OPAC_SUG",$suggestion->{'patronreason'},1); + } } +my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG"); + $template->param( %$suggestion, itemtypeloop=> $supportlist, suggestions_loop => $suggestions_loop, + patron_reason_loop => $patron_reason_loop, showall => $allsuggestions, "op_$op" => 1, suggestionsview => 1, ); - output_html_with_http_headers $input, $cookie, $template->output; diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl index 57a1ba7..73f5ff5 100755 --- a/suggestion/suggestion.pl +++ b/suggestion/suggestion.pl @@ -259,6 +259,9 @@ foreach my $support(@$supportlist){ } $template->param(itemtypeloop=>$supportlist); +my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG",$$suggestion_ref{'patronreason'}); +$template->param(patron_reason_loop=>$patron_reason_loop); + #Budgets management my $searchbudgets={ budget_branchcode=>$branchfilter} if $branchfilter; my $budgets = GetBudgets($searchbudgets); -- 1.7.3.2 From colin.campbell at ptfs-europe.com Fri Dec 10 16:18:54 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 10 Dec 2010 15:18:54 +0000 Subject: [Koha-patches] [SIGNED OFF] Revised fix for Bug 3850 - Budget Planning Pages Need Design Work Message-ID: <1291994334-28100-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard - Filter moved to left-hand sidebar consistent with other pages - Export option moved to left-hand sidebar to improve visibility - Show/hide column controls moved to their own role with clear labels - "Locked" icon added to replace indicating locked status by row color Signed-off-by: Colin Campbell --- .../prog/en/modules/admin/aqplan.tmpl | 225 ++++++++++--------- 1 files changed, 118 insertions(+), 107 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl index 2192178..5e30fa8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/aqplan.tmpl @@ -1,8 +1,8 @@ -Koha › Administration › Budgets › Budget planning +Koha › Administration › Budgets › Funds › Planning for <!-- TMPL_VAR NAME="budget_period_description" --> by <!-- TMPL_VAR NAME="authcat" --> - + - + @@ -86,60 +86,26 @@ YAHOO.util.Event.onAvailable("popmenu", function () { -
    - - - -"/> -
    -Planning for by - - - - - - - - - - - - -
    - - - - - - - - - - -
    - - - - - - -
    - - - - - - -
    -
    - -
    + +

    Planning for by

    - +

    Currency = . + + Each cell contain both actual and estimated values. + + Cells contain estimated values only. + +

    No active currency is defined

    Please specify an active currency.

    + +

    Each cell contain both actual and estimated values.

    + +

    Cells contain estimated values only.

    + + @@ -149,38 +115,43 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - - + - - - + + + + + + + + + + + - - - - - + + + + - + @@ -191,15 +162,15 @@ YAHOO.util.Event.onAvailable("popmenu", function () {
    " style="text-align: center;" - class="" > + " class=""> - " style="text-align: center; - display:none;" - class="" > + " styl="display:none;" class=""> -  ', '')" > -   Fund remaining - + Fund remaining 
      "> + + [ show a column ] 
    class="locked" title="Fund locked">&budget_period_id=">">  -   -
    - + - @@ -212,32 +183,32 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - -
    +   - " /> + " value="" /> - " id='budget_' class='plan_entry_' onchange="calcTotalRow(this);" /> + " value="" id="budget_" class="plan_entry_" onchange="calcTotalRow(this);" />
    + - + - + - + + "> - + "> - + "> -   +  
    - + ')" value="Auto-fill row"/> @@ -249,19 +220,14 @@ YAHOO.util.Event.onAvailable("popmenu", function () { - - Each cell contain both actual and estimated values.
    - - Cells contain estimated values only.
    - - + - +
    -
    +
    @@ -274,28 +240,73 @@ YAHOO.util.Event.onAvailable("popmenu", function () { + +
    No funds to display for this search criteria
    + + + +
    +
    +
    +
    -
    +
    +

    Filter

    + +
      +
    1. + + +
    2. +
    3. + + + + + + +
    4. + +
    5. + + + + + + +
    6. + + +
    7. + + + + + + +
    8. +
    +
    +
    +
    + + +
    +

    Export

    +
      -
    1. -
    2. +
    3. -     - +
    4. +
    +
    " /> - - +
    + - -No funds to display for this search criteria - - - -
    - -
    -- 1.7.3.2 From colin.campbell at ptfs-europe.com Fri Dec 10 16:32:20 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 10 Dec 2010 15:32:20 +0000 Subject: [Koha-patches] [SIGNED OFF] Fix for Bug 5443, Inaccurate highlighting of fields in patron update email Message-ID: <1291995140-28247-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard - email was incorrectly named emailaddress - string processing was being done to address and B_address which didn't seem to be serving a purpose Signed-off-by: Colin Campbell --- .../opac-tmpl/prog/en/modules/opac-userupdate.tmpl | 2 +- opac/opac-userupdate.pl | 14 ++------------ 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 73f5c21..24c3068 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -37,7 +37,7 @@
  • " name="mobile" />
  • " name="phonepro" />
  • " name="fax" />
  • -
  • " name="emailaddress" />
  • +
  • " name="email" />
  • " name="emailpro" />
  • diff --git a/opac/opac-userupdate.pl b/opac/opac-userupdate.pl index ab2e15d..18cafdb 100755 --- a/opac/opac-userupdate.pl +++ b/opac/opac-userupdate.pl @@ -53,7 +53,7 @@ my $lib = GetBranchDetail($borr->{'branchcode'}); # handle the new information.... # collect the form values and send an email. my @fields = ( - 'surname','firstname','othernames','streetnumber','address','address2','city','zipcode','country','phone','mobile','fax','phonepro', 'emailaddress','emailpro','B_streetnumber','B_address','B_address2','B_city','B_zipcode','B_country','B_phone','B_email','dateofbirth','sex' + 'surname','firstname','othernames','streetnumber','address','address2','city','zipcode','country','phone','mobile','fax','phonepro', 'email','emailpro','B_streetnumber','B_address','B_address2','B_city','B_zipcode','B_country','B_phone','B_email','dateofbirth','sex' ); my $update; my $updateemailaddress = $lib->{'branchemail'}; @@ -84,7 +84,7 @@ if ( $query->param('modify') ) { # get all the fields: my $message = <<"EOF"; -Borrower $borr->{'cardnumber'} +Patron $borr->{'cardnumber'} has requested to change her/his personal details. Please check these new details and make the changes: @@ -104,16 +104,6 @@ EOF $borrowerfield = $borr->{$field}; } - # reconstruct the address - if($field eq "address") { - $borrowerfield = "$streetnumber $address, $address2"; - } - - # reconstruct the alternate address - if($field eq "B_address") { - $borrowerfield = "$B_streetnumber $B_address, $B_address2"; - } - if($field eq "dateofbirth") { $borrowerfield = format_date( $borr->{'dateofbirth'} ) || ''; } -- 1.7.3.2 From mdhafen at tech.washk12.org Fri Dec 10 16:58:06 2010 From: mdhafen at tech.washk12.org (Mike Hafen) Date: Fri, 10 Dec 2010 08:58:06 -0700 Subject: [Koha-patches] [PATCH] Analytical records: new zebra index for item number in host fields. This index will be used to display links to analytical records from host records In-Reply-To: <1291906003-11193-1-git-send-email-savitra.sirohi@osslabs.biz> References: <1291906003-11193-1-git-send-email-savitra.sirohi@osslabs.biz> Message-ID: Did you mean to remove the Curriculum index which was recently added by someone at PTFS? On Thu, Dec 9, 2010 at 7:46 AM, wrote: > From: Savitra Sirohi > > --- > etc/zebradb/biblios/etc/bib1.att | 4 +--- > etc/zebradb/ccl.properties | 4 ++-- > etc/zebradb/marc_defs/marc21/biblios/record.abs | 6 ++---- > 3 files changed, 5 insertions(+), 9 deletions(-) > > diff --git a/etc/zebradb/biblios/etc/bib1.att > b/etc/zebradb/biblios/etc/bib1.att > index 97c3d68..f88df2c 100644 > --- a/etc/zebradb/biblios/etc/bib1.att > +++ b/etc/zebradb/biblios/etc/bib1.att > @@ -158,6 +158,7 @@ att 8031 itype > ## Fixed Fields and other special indexes > att 9901 Extent > att 8910 Koha-Auth-Number > +att 8911 Host-Item-Number > # record length according to the leader > att 9905 llength > att 9902 Summary > @@ -189,6 +190,3 @@ att 9903 lex > att 9904 arl > att 9013 arp > att 9520 Item > -# Curriculum > -att 9658 curriculum > - > diff --git a/etc/zebradb/ccl.properties b/etc/zebradb/ccl.properties > index 4bca55e..ed18be2 100644 > --- a/etc/zebradb/ccl.properties > +++ b/etc/zebradb/ccl.properties > @@ -1052,8 +1052,6 @@ arl 1=9904 r=r > > #Accelerated Reader Point > arp 1=9013 r=r > -# Curriculum > -curriculum 1=9658 > > ## Statuses > popularity 1=issues > @@ -1156,3 +1154,5 @@ ElementSetName exp1,1=12 > Item 1=9520 > item Item > > +Host-Item-Number 1=8911 > +hi Host-Item-Number > diff --git a/etc/zebradb/marc_defs/marc21/biblios/record.abs > b/etc/zebradb/marc_defs/marc21/biblios/record.abs > index ed71a93..7a875ab 100755 > --- a/etc/zebradb/marc_defs/marc21/biblios/record.abs > +++ b/etc/zebradb/marc_defs/marc21/biblios/record.abs > @@ -44,7 +44,7 @@ melm 001 Control-number > melm 005 Date/time-last-modified > melm 007 > Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2) > > -melm 008 > date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:w:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) > +melm 008 > date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) > > melm 010 LC-card-number,Identifier-standard > melm 011 LC-card-number,Identifier-standard > @@ -188,9 +188,6 @@ melm 656$9 Koha-Auth-Number > melm 656 Subject > melm 657$9 Koha-Auth-Number > melm 657 Subject > -melm 658$a curriculum:w,curriculum:p > -melm 658$b curriculum:w,curriculum:p > -melm 658$c curriculum:w,curriculum:p > melm 690$9 Koha-Auth-Number > melm 690 Subject,Subject:p > > @@ -220,6 +217,7 @@ melm 730$r Music-key > melm 730$9 Koha-Auth-Number > melm 730 Title,Title-uniform > melm 740 Title,Title-other-variant > +melm 773$9 Host-Item-Number > melm 773$t Host-item > melm 780$t Title > melm 780 Title,Title-former,Related-periodical > -- > 1.5.4.5 > > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -------------- next part -------------- An HTML attachment was scrubbed... URL: From savitra.sirohi at osslabs.biz Fri Dec 10 17:31:24 2010 From: savitra.sirohi at osslabs.biz (savitra sirohi) Date: Fri, 10 Dec 2010 22:01:24 +0530 Subject: [Koha-patches] [PATCH] Analytical records: new zebra index for item number in host fields. This index will be used to display links to analytical records from host records In-Reply-To: References: <1291906003-11193-1-git-send-email-savitra.sirohi@osslabs.biz> Message-ID: Mike, no, I did not. And at this time I can't explain how those deletes got into the patch! Thanks for pointing this out. Chris C, please ignore this patch, I will resend after corrections. - Savitra On Fri, Dec 10, 2010 at 9:28 PM, Mike Hafen wrote: > Did you mean to remove the Curriculum index which was recently added by > someone at PTFS? > > On Thu, Dec 9, 2010 at 7:46 AM, wrote: > >> From: Savitra Sirohi >> >> --- >> etc/zebradb/biblios/etc/bib1.att | 4 +--- >> etc/zebradb/ccl.properties | 4 ++-- >> etc/zebradb/marc_defs/marc21/biblios/record.abs | 6 ++---- >> 3 files changed, 5 insertions(+), 9 deletions(-) >> >> diff --git a/etc/zebradb/biblios/etc/bib1.att >> b/etc/zebradb/biblios/etc/bib1.att >> index 97c3d68..f88df2c 100644 >> --- a/etc/zebradb/biblios/etc/bib1.att >> +++ b/etc/zebradb/biblios/etc/bib1.att >> @@ -158,6 +158,7 @@ att 8031 itype >> ## Fixed Fields and other special indexes >> att 9901 Extent >> att 8910 Koha-Auth-Number >> +att 8911 Host-Item-Number >> # record length according to the leader >> att 9905 llength >> att 9902 Summary >> @@ -189,6 +190,3 @@ att 9903 lex >> att 9904 arl >> att 9013 arp >> att 9520 Item >> -# Curriculum >> -att 9658 curriculum >> - >> diff --git a/etc/zebradb/ccl.properties b/etc/zebradb/ccl.properties >> index 4bca55e..ed18be2 100644 >> --- a/etc/zebradb/ccl.properties >> +++ b/etc/zebradb/ccl.properties >> @@ -1052,8 +1052,6 @@ arl 1=9904 r=r >> >> #Accelerated Reader Point >> arp 1=9013 r=r >> -# Curriculum >> -curriculum 1=9658 >> >> ## Statuses >> popularity 1=issues >> @@ -1156,3 +1154,5 @@ ElementSetName exp1,1=12 >> Item 1=9520 >> item Item >> >> +Host-Item-Number 1=8911 >> +hi Host-Item-Number >> diff --git a/etc/zebradb/marc_defs/marc21/biblios/record.abs >> b/etc/zebradb/marc_defs/marc21/biblios/record.abs >> index ed71a93..7a875ab 100755 >> --- a/etc/zebradb/marc_defs/marc21/biblios/record.abs >> +++ b/etc/zebradb/marc_defs/marc21/biblios/record.abs >> @@ -44,7 +44,7 @@ melm 001 Control-number >> melm 005 Date/time-last-modified >> melm 007 >> Microform-generation:n:range(data,11,1),Material-type,ff7-00:w:range(data,0,1),ff7-01:w:range(data,1,1),ff7-02:w:range(data,2,1),ff7-01-02:w:range(data,0,2) >> >> -melm 008 >> date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:w:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) >> +melm 008 >> date-entered-on-file:n:range(data,0,5),date-entered-on-file:s:range(data,0,5),pubdate:w:range(data,7,4),pubdate:n:range(data,7,4),pubdate:y:range(data,7,4),pubdate:s:range(data,7,4),pl:w:range(data,15,3),ta:w:range(data,22,1),ff8-23:w:range(data,23,1),ff8-29:w:range(data,29,1),lf:w:range(data,33,1),bio:w:range(data,34,1),ln:n:range(data,35,3),ctype:w:range(data,24,4),Record-source:w:range(data,39,0) >> >> melm 010 LC-card-number,Identifier-standard >> melm 011 LC-card-number,Identifier-standard >> @@ -188,9 +188,6 @@ melm 656$9 Koha-Auth-Number >> melm 656 Subject >> melm 657$9 Koha-Auth-Number >> melm 657 Subject >> -melm 658$a curriculum:w,curriculum:p >> -melm 658$b curriculum:w,curriculum:p >> -melm 658$c curriculum:w,curriculum:p >> melm 690$9 Koha-Auth-Number >> melm 690 Subject,Subject:p >> >> @@ -220,6 +217,7 @@ melm 730$r Music-key >> melm 730$9 Koha-Auth-Number >> melm 730 Title,Title-uniform >> melm 740 Title,Title-other-variant >> +melm 773$9 Host-Item-Number >> melm 773$t Host-item >> melm 780$t Title >> melm 780 Title,Title-former,Related-periodical >> -- >> 1.5.4.5 >> >> _______________________________________________ >> Koha-patches mailing list >> Koha-patches at lists.koha-community.org >> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches >> website : http://www.koha-community.org/ >> git : http://git.koha-community.org/ >> bugs : http://bugs.koha-community.org/ >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From ian.walls at bywatersolutions.com Sat Dec 11 15:43:30 2010 From: ian.walls at bywatersolutions.com (Ian Walls) Date: Sat, 11 Dec 2010 09:43:30 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5483 New Icon Set Message-ID: <1292078610-18603-1-git-send-email-ian.walls@bywatersolutions.com> From: Nicole Engard Icon set sponsored by the Allen Ginsberg Library at Naropa University sponsored this icon set named Seshat, after the Egyptian goddess of libraries, and designed by Jen Tobias. Signed-off-by: Ian Walls --- .../prog/img/itemtypeimg/Seshat/AV.jpg | Bin 0 -> 4513 bytes .../prog/img/itemtypeimg/Seshat/DVD.gif | Bin 0 -> 3188 bytes .../prog/img/itemtypeimg/Seshat/DVDreserve.gif | Bin 0 -> 3153 bytes .../prog/img/itemtypeimg/Seshat/ILL.jpg | Bin 0 -> 4349 bytes .../prog/img/itemtypeimg/Seshat/archival lDVD.gif | Bin 0 -> 3126 bytes .../prog/img/itemtypeimg/Seshat/archivalCD.gif | Bin 0 -> 3081 bytes .../prog/img/itemtypeimg/Seshat/archivalVHS.jpg | Bin 0 -> 4541 bytes .../prog/img/itemtypeimg/Seshat/archivaltape.gif | Bin 0 -> 3852 bytes .../prog/img/itemtypeimg/Seshat/book.gif | Bin 0 -> 3137 bytes .../prog/img/itemtypeimg/Seshat/cd.gif | Bin 0 -> 3170 bytes .../prog/img/itemtypeimg/Seshat/download.gif | Bin 0 -> 3405 bytes .../prog/img/itemtypeimg/Seshat/ebook.gif | Bin 0 -> 3117 bytes .../prog/img/itemtypeimg/Seshat/key.jpg | Bin 0 -> 3926 bytes .../prog/img/itemtypeimg/Seshat/newbook.gif | Bin 0 -> 3334 bytes .../prog/img/itemtypeimg/Seshat/referencebook.gif | Bin 0 -> 3097 bytes .../prog/img/itemtypeimg/Seshat/reservebook.gif | Bin 0 -> 3066 bytes .../prog/img/itemtypeimg/Seshat/reservecd.gif | Bin 0 -> 3104 bytes .../prog/img/itemtypeimg/Seshat/reservetape.gif | Bin 0 -> 3856 bytes .../prog/img/itemtypeimg/Seshat/reservevhs.gif | Bin 0 -> 3642 bytes .../prog/img/itemtypeimg/Seshat/tape.gif | Bin 0 -> 3805 bytes .../prog/img/itemtypeimg/Seshat/vhs.gif | Bin 0 -> 3627 bytes koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/AV.jpg | Bin 0 -> 4513 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/DVD.gif | Bin 0 -> 3188 bytes .../prog/itemtypeimg/Seshat/DVDreserve.gif | Bin 0 -> 3153 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/ILL.jpg | Bin 0 -> 4349 bytes .../prog/itemtypeimg/Seshat/archival lDVD.gif | Bin 0 -> 3126 bytes .../prog/itemtypeimg/Seshat/archivalCD.gif | Bin 0 -> 3081 bytes .../prog/itemtypeimg/Seshat/archivalVHS.jpg | Bin 0 -> 4541 bytes .../prog/itemtypeimg/Seshat/archivaltape.gif | Bin 0 -> 3852 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/book.gif | Bin 0 -> 3137 bytes koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/cd.gif | Bin 0 -> 3170 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/download.gif | Bin 0 -> 3405 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/ebook.gif | Bin 0 -> 3117 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/key.jpg | Bin 0 -> 3926 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/newbook.gif | Bin 0 -> 3334 bytes .../prog/itemtypeimg/Seshat/referencebook.gif | Bin 0 -> 3097 bytes .../prog/itemtypeimg/Seshat/reservebook.gif | Bin 0 -> 3066 bytes .../prog/itemtypeimg/Seshat/reservecd.gif | Bin 0 -> 3104 bytes .../prog/itemtypeimg/Seshat/reservetape.gif | Bin 0 -> 3856 bytes .../prog/itemtypeimg/Seshat/reservevhs.gif | Bin 0 -> 3642 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/tape.gif | Bin 0 -> 3805 bytes .../opac-tmpl/prog/itemtypeimg/Seshat/vhs.gif | Bin 0 -> 3627 bytes 42 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/AV.jpg create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVD.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVDreserve.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/ILL.jpg create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archival lDVD.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalCD.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalVHS.jpg create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivaltape.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/book.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/cd.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/download.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/ebook.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/key.jpg create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/newbook.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/referencebook.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservebook.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservecd.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservetape.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservevhs.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/tape.gif create mode 100644 koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/vhs.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/AV.jpg create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVD.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVDreserve.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/ILL.jpg create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archival lDVD.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalCD.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalVHS.jpg create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivaltape.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/book.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/cd.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/download.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/ebook.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/key.jpg create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/newbook.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/referencebook.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservebook.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservecd.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservetape.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservevhs.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/tape.gif create mode 100644 koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/vhs.gif diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/AV.jpg b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/AV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cca52278a2883ed1b6c99c9e148dfc27cfa4773 GIT binary patch literal 4513 zcmbW0XE+;-*TxgOR-4$f5|q|f)Ygh3s8Ph;G>Fk4R!eKNHEXm+t1(1P&7k~=@AR{9O0{%}lS7_+~l++Y|%^TPL z#{^Q4|Hb?>LP1GR1tg=UxdLEfW}yYMf*{a;Ai)0*p{60D0FYBs{WWib{+j>lFXrDh zKr(U)N)Qzozyy(EhTap9zHKCf4!fKM(EmMz3`7nBr~#bYZrDj)d-_DVr{|vS>Kk1c%-8j6m`U-%RK95KA5f35Smn~Q(W|TuUI*U1^E^S zlv}xvNw!b3eeaGVV6ncahtndPB=>ID?=@A-el_gghf;ShU7WDGvGhBm3nG1c)h+_zWMKIl2d66b?*RN~(Uj4c^SAsr0bxXB4dlniZ;C6@ zH%SOF#Um7Oj=lYirudv$14b>)Pd3=I&o*DkN{)uxB|F~ z1UTw*BKyHFqkfSFv1ggjL at Hs!)JyeP)GxXNJv?V&%HS)<#ii0lQ|dL7#xCf`RRaZY z!Qg=cdb;IuOJ7AHHt=Ei*mD*UHIdyC at d!FY}_hle7wxC)9VmZ*=rrlzN>F zRpc9fzDMJ+IvlA)sX4$+5wB2>SFgVci%dcaK7IU#YR?R5c)U%rZT&7P+JdrD(eHL` zwysompUW at tlWs8yA#)&82?ygM36fh+KCt9nPvf1y87l6fyn*!dSKkE&9gVflUa01b zQMFt1qXb#|lL9`D*P=&#u-ZPkL$eAW7W6)wM2TbOX>v at 4{a6F)s3S=>br=)BK>vt> zN})bqzhnC at PobU9dUInUGe8x$>a%B1a(oG>|FbsGqSj$|3CLZ^ zcCS?llX>GPoKc_z7bI(cSWC@}TWy*!4CTKyA0LV{V6PysG+1KB z?ki9tZ?}Fz+!$(4NjukMb9n&g^?tj_YR% z`Eo#TQxlELfhc*mo+z^G60iHZ)^$RDd at t}=X at 4_C>){$AwI at WwF?TnfD40DZA35~M zl;RTb1Wh8aY)qwO2Y??GkxP10 at sBDnRP_s+7Ilm4LBRDhw^M5hIv`0Rh+eY>+S~lh zN%@&JhZd&yj8--oHJ4xOsseNd;b at jxD!CvE3FRYFWk^kVR4ud at FbgUahk;d<7elPD z`>kdb~1kjULK}P|E?XB z(7kTmI1eP4MjAfVvebwYVL at 7D2poYXHfOpv~&wd#$Pz>zz#T{*b zVg+qGNzm;hTy3B+y+7}(aM&vF%Fue6G;$A4%DoNkDt$X at vz4=3Ww~ctG<@w_tdGzg zsP$^;$it7-VOIK{k48VFt(o9Ktx1&?H3Iph)mY8sSeEDLWe97}y}|{Dz^8bd=5wNQ z-edjh(*-!*SZ%qs?y&f`FEnqU6)5NKk?JyNT_CR6DSbDkfb$Wblr!aXw#PpuCc`~| z6OJt-(@$+W%x8A8HgbNI&EsC|PWt38_eo8{mSyn_3oP5Om(Q*B`X#~fqh6I_Rx)n` z4wZ!}2T0on#p$tWr$PfZ)Yy_bEt}se*coFCt*~`!jmE1?%is8^gqxQDSryL+x-kw1 zOGCp+g_E1{xD;tO4Auq01u~a*>p|@`Ph>6!ZZ*jrZ!5~=qzL46;WUXw6+XiB{u_?- z5pcn1@`0B$OMle+)J1x at Mbn3cy3n828#YLl_;#Y~9~N}f4+ za1$y*{Vyo*7pBvYY~%{WTqiFz6{T*z{_?`P^+ZE*jVp-QkD!YF9&Ic%5lv(n+6q5D zxYn~TO16_|rqdVYEO(cDSmSC?t^CQ5)Ec%z=Q<*2b|agz3bXC+YZ&@RPlTcT9zhJ4 z!FP657;LtQzgbO-T=wSNi+>K1N`7C(JvL7AawicJ_vq+9lC3oHu~86#MBe}QJ& z`1GVjFL2(dhSUI*{I(}?;VsSd2w7Wu(sMth9gt%Z2(;CZ?4)3EJPecY_edPzV9Ax$ zFw!+gNIl`~MH7i!Z%&~(=daU_1-2rVn0GP!xzoEGOjm}IwH(T+*N%S}cso6p8SX4L ze8S at m)7l9^AbXz;v$^n2a`&${lZXL9drx-<*`}AyEi#eC at 3ydiE~*FncTh7Z*37NK znPI0`&%ALJe|N4EuCb{VqQc2kRgAKk%VtPfxyfwx8jp0gu*j2V8aWq+6EMTvJFng3 zSQVRke74V%JDe(Bs!I`>jV5 at zF99jY?vU8`J=i7hc)p|>mRqH>1_eo_TzXtQXvQA5 z2OB;sQc=QTrg8Sa2R}7!Wxs`(>A6&20*VpGzra;JZG9MX%j_q^q0j$*OpWPJ)|O%M z*YUg*;-L0;2LnUD;Ro+QN^j92DVV*OS;~0u=TElUQ at M*?n?E}Fex7`rb4ru={cu)+ z-nwuo#ZfP|qh2t^4U~d;^zj~BUDR3k#3Q&9FZGFERxF5^gnoHFjm1G1!d{sw7)&RH zW3K)nBKcd-dT at jC+{gbC!0i)M{pql^V0gzs!A_&>SHlqT8iPAD8M9+PPr|j1NuSZx z5XH($N*j4>WHBkA1YT{j^>t!}tO>B(cV22p|{#KDe zsomL^VY#o{v$vuic~`lvv*D7bV5vQJrz|nT2Pgpoi at JoDU#;n(!Ec|#Ru!j@{%Ij2 znP!TDrIE53LoZ}|-VI6c!0Eo|*yGQ~bHhkwnbtKIP9-ojJDp?cd;#Rxv7Jt@)I7O% zX7$CYnrg7l at j^1 at Jh0cVgdl82!#di(TE8eyuTue?j;X~?i!&%zSWh0f+imF?k;!nm z8Y5yvsBnRf#^!LgQJ*cnM-rLNC0e#0JI4m*tGE;Od01O?eY9x87arI43xJC1-eJA@ zBR1&9Xy1A)`8?IS?ogCn8z5CjO6G8Kd4y95%zry*tkKJDjAQ@&%3h0u=ZwmY{bVO; zF=Cg|riZFp`;2=w<9*euw#tr{nau{_-*Y>}3#;p01bE}uK+XPr59Q!RYnB^l-G#Fw z+J`1N0Y5`Ta4KJ!?&(#sKK`uR_;s-H%?iZOtoIUt at 6C3>IP|G|t2QA64^!2b7OuxO zoE-Y-m&Q!=M&On4g!DB_u=6?Do`^|?k#4Pt+IrcGB+B$F`K7pGDGx}T;WVq%jNE`W zm-Kg-2E-oSdBSz*l;Di9EJ{;eO*;RU%}^%;M-UO*sNw#}49`;*H4 at 8R<#;-Pg}MIw zrncQBsa>JOQ2tDc$~dH%$`IQ6NerU#b$;VX1EDVrDD^{NjT zjQW+xVC1z#4asmC8OsjI_wkHP>hg=7g-Q1)EZvxm+{)1#l}(H6 z#&)!JT!W!f%@VMm9^V;ld;O$st5&JWwiPUyCPg<=)ulCM0VH->4{tH?w7G9O!{ z7G%e1zZ^XIG1YK>b14}vkgVUYCh+DEegWUj1^{zqs6UghUOgbi$1HCVvkIyqbta?I zX}8V0Tp4V;gQ~rxo at a3=>PR`H%G5F%c4-MPwcps)E!^E{_!K at ebP3pfT}EKST(v$H zA5BesVK3_0s3vV?zWGTrE(*)urK~tZ2$YYH_n7-1`Sa(0#k`h0wiT8QB8Y9-2LcgY>c;wPxjxsCE`x5Bj zvnoe;7+#Tdg%nAF!27KgwpaH;?1+!kWQFrI*k5+S7=Jk~wvNDxN1KC)LG?Ve>nYG8 z5^uCo84<*AO&4`AWj!-ck78wrzZ1g_pk>dC;M%z1d$?QI7T~dy9fpk4N8*iXG?erVNRUPyO!9JFKfu{d|0 zWKX2lul+y4^3Qq}pDP`i`Q!1y8}F~9 z3&Fd4b(nR8o$0Mzlgg_u;q2qWW0}hxx(G#w>8CcI7S3;145agsX7JE7KAC&i4 AEC2ui literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVD.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVD.gif new file mode 100644 index 0000000000000000000000000000000000000000..e72e4cd3465b0c365d6dad29e1b0749aaaa941f3 GIT binary patch literal 3188 zcmV-)42$zeNk%w1VLSjd0O$Vz00RIC0ssXE0|E&Q2nq%d2nP at n4-OI)77-8>5*8d1 z6CD*585bHG7Zw;97a|)G9~&AO93mbZ6(t=GB^(?b9~~bbCmbOrA|xR!A|oawCod%u zDJ3KzCoLr=E-fY;C?_E%C?y{$G$bfAF()T4Djz2+H!CbEEG#cMDJ(B7CoC>2D=sxP zEG#83J1#FRF)}bNGdedjF)TGeD>X+zF*7qYGCnghL^3c#H5foOAv-oJL^L)xI6Eyn zOE@|=Mm9J|HZwaqGc-FxGdoO3I66u=HAFf)OgcD7Jt<2&JwHG`PCPnIKOsFqL`^+E zG(%HSK0HrCC^$q~P(VUEMp08lAWKCzKu1nRM?_af9Xd%_OGZURNJ>{kLOw}gR!A*6 zO=46^HAqZZUQH=ZPfcP at A4^bDP)}4;PfkEnXhKqLL{no`R#Zt>ZfjI1Mp|`gST=N7 zB~4v)by^@`TuohGTuEVkU0z{vUNm50UwmLDRAYdEV29+gfwc4vWbX*XN|gtiH2>CwseiKql!z1jE}I4HI0so zagw>Oj6iLZz>$)VcbC6&nZ}rxk9wQKx|K$Kn#q@#m6VyBcb&_0pwxSz&zzl_fuhQt zpQ6K^Mti5)p`xFGr`3k1(8QutgsRwqt>LGrr-!ZFtF5YrvgXsPRE at IX)2v&Ix9ixj zS+cXRvb49_vtf|C at Rq#mx4E{Hzx0;D_MF1;yuQ1b!}yxT`=Q46oyh&c#K)h?|HQ__ zrONuD%>T*D$kNWx&(Y4+*3;J5+t}LI-Qe8Y;N#-t;p6D*=IG_=>*(z6>hJOH@$>NX z_w)Gs_x=C;A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grwt z(TnG9ojZE_5K5d#aU#84c7DKsVdDji7b}+h+2t-`#ghp8{aZP3A2~fRR;&OyQ|3&N zFJ6>6W)G#$e*RYe^EYsv9-1|8uE5~HK!OM&W=QRD=GHu)5`hXGDlncQn>2A^FmQp* zCuir*sZ*;?-MCp>&Va*8Fz8m6`clO_VN>Rd5C_yCJ7*4^I>U$CDn`dEjFWX(?cV*z z51*bDe8HYLVStFNaOeypR!mx*Ib+6T%>bpZqSnd(`q?XEbF)kpO+IXD7Ok3E#G^wi z_GXM2FCB2F56aJn+kC-c+OE ze{F>p4l%#Ta!qKViL=FA1T{DiJT_#u0t#TX(#Qsk_y=4#8iw;9V%PA3i!p_jXihjo zEGLj;D-lJI9WJgQ1~89k0mV0)u)@}1*=RT#c<4-n3oj!UcAz=pK!e6WlNGeh3oh>P z3?`2lFv9=<03ZT89qu=cH;FA~8ZiTkGp3;E6y^st4&FtOK5a}_3NTvKu?;wB2mn9; zzZ_O#G|?2+VO#qR=*@xXh*PL(=zQZuqCzPt5IFu3p725mO%#v?IYQxcO9)Vqh)y}) zM3YTuL7FyAFa43~E3tem=o~@uVdj7U0a#jR1(U$@k2`okVOlo%Y1d3R-te*tF4KgA z3ofIQ7^H{UG;@Y~Te*tQ3m8=JhcIOjP-nFP1Teq_a7-f{x!HJAt`8mHamXP~jNk at - zL5_J~HPAEz%@F!L%MUz%2w(#}Lg^z+76k|}fC-84mawwkK;wr8$>6gOKKbO6P8VN< zQ;xggWZcZq&8R^RlJ at NK!=;xNz{N2g?{mxTD1*3~BsLXLobMEM|#QrhDEKxw6mj+P44;xGn$uz}v0tXQz8~{KB z(0J1f3-!=rIX(E`qfh4bpztGVKFZ>XE32&X2_%0=4MPFDY(-BjFx2@#9*y)d!5nJ1 z(8DCmfD$kOUChD at 9K+0mIXHDl5y(7a>od$0xUeGqDW6EP$tICV@<|s4{2KrVvEZ{3 zKCv*sKpbS~z=aL}lKf8#b!KtQ9H`JBk3IUhlSeL%&>_a=_^3w&JfR6nSi%yHU<4$r zw+U1 at Aq%^3Kmh(FfF-nn04ci^HG;xE0JLEx)Bqecz!8RCj36KQdqp?2VGTlB&0Eq69lXUD_IBA+_4fF1kM2nV1X(upbvZC zLxtMV#wg^#3;?3w6Q?)@E at VMQT(|-juyDl?^x}XYOb`HEScy9(7yx0cqz#vn!8THn zh5|Hz0xbXn4>X{P5!54d;Gl&zut5kb%wu!)umCGQ!3tdH!WFXE;VMjliY`zi3;a;x zrKGVEJ4}!O`gq4N0#*P8WFU|@2m%mf83YJ?;tMsy2R(c-h&O2B1*aHUt_(Po#pptj|?NSI(00~mSgCYRIn?L{p4r&n2Cy;;-!RWy~aHcuT zwa!VsrG+$3Dh}xmrwN6^W39B`)CzNLa!XkT?Y at 0FjD+lz{^U zKqv_wsstYNGzdmeLJ+)3PC+sO2|?h&H-Yd3A5Z(yVi{B>%<`y4u&6~nkg#m50R^?-Mmo3= z3KsC88rLvQG*|%%O4Lvij-W&(UO*3jq=N!f at B$T-fCRgWbCy0WLJ*L^gQ3>Ir$7)Y z51zn;1zf{G=J@`_;)pPXL{!6P;n0yfvZ0GlP=XQJvqUIj|PqXATS0u^N0(;65- zv_ci+ERi72(o*-cO2_~%V2chMeZv^HwOBdY5{_a>ViAnkgeL at H2!ZsY1$M=O5;!|l z&H{l6MtDL`pTL6}2$iR^1ZoQsp`Q|EBOKF!hJj3#+n*Jx8LL=?BRmlU$Or at t_bq~c zdBB69A|a>{?P*(QInHrDfwbZL!hybN&i*RZ2qqxafedsFW3;Qr;i&Ow%+U-NAZj4VpnzP-8HA)J zIh;zKul^G3%48gb)6GJKz&G?WF`qTtr~k~WrQ7Bv&*%Y-5rp}w26ni`I`rX>_UPj)d_js3M1c)!SVI}D$OI`G z at rE4i00uD_0t+sX00&e+^N-|1qITlB>?Cs08gMDYx4D8m++h&`O-AO#hmzBXB) zI_VG64{$6YLYQ$;2vl%|D~KTpI at m!7Y*QPX{DB_3x5!uIBcCQwe+j}cN%SX8LXJi? zUna5wzxey|0z(*S`xV&-IF7=X_5&X&HnG7ZbdP?4Xn!K{5QZUs4}R41WeJ8r4Z&7_ a(YFur01nc?49sv0%s>s~01?p_5CA)GqDL_R literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVDreserve.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/DVDreserve.gif new file mode 100644 index 0000000000000000000000000000000000000000..29834b0e2ff13bb3974a4a793fe4ea23d4bc0d77 GIT binary patch literal 3153 zcmV-X46gG>Nk%w1VLSjd0O$Vz00ICC0|5XF1P2NT5E2g#5)}&+5Ec;-6cQF06ATs? z6&e;59u^876%`s99~m1N9~&Aa932 at SBpx6hA0Hp3}EG{r6 zFFGzSEi*ACFfuPaF&Qm1FfKDXJ25gqFfuDOKq)mwGc_|bH8?^w7eq2JIW;sqHZVjq zHaIypGdnXuI4LbVOENl3NH#PyJ3>b{IY~J at OgcA9J3Tc)Qa(XBK0!V`K}1bGKTkb7 zPCz0!Ls~gRPfkKCQ9(maL^MT5L_QN>5W_ zO(s84XiiW~Nl;x%Qb<%!PDE2fUGK!j&3 zZD?m at Z)In1c3N_cVQ`IZaBX99gI;o!ZgF&yZZ3{+E{$+CS$3Ccbb(`bjbV3`g>zGM zb#rcZeQtPdXm^Q|bTe#wjbVMBaC?YxesgMllxKdLdVG0$e1DI8R-Ju4V}z at Oe|~I( zpm~IIXoRMCg?WL4fOLhLXNRtAh^lIfvYdxnriMp=je>)Xe5Qv{ZH~5djj)M}h=+`i zagw=hlfaLWj)#?riK5Q+{UJ8tF5YrvgXaIWuda4jk4jdv98dr zZ;Q9TdAzRb?c$lAl!*xT3H*3IC|(BQ`1-`v~aNY z_w)Jt_x=C;A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grb4 zK{NL2m$7j24oaLzv7*3z)a<~R;K2oqk1jl1aAC*TJ&PzO_WQ?j;5}6^N~lobVrEU7 zHEVj{6E3CCe*Reg^C$47%$YQCs<`lg00IXcY)F;B!d66|5`hXGDo~e-qc?M2ATZ&~ zr)TKUty8;hZ7nQddSV?IbZbj_Rz!S7YSTjjG04!FOSg`2;kJm=^}^DG9oD*b|M7c= zV=vO0A_xqjB`zId!-zw#Ggqt_EgPWrS=1W&Uq5y*kd`<~0?LO?&7xIPYZ$a=#NLV# zBi3uvm8)4J*L{7IZwV-SJRlplEt;}#qC@{)SFJR$X62gx6(N`0Za;o3>&0%aq6eNq zFP at nzXRdlRbJ<0wE9Q$>F>&UY^NkYO92D7k==C$kOdcpO+Z2xsVgfRtc~i}W`L*Sl zIK%`)3pSp4HVziu6m%d#x`-gc1cl5|LKUMp62m9>^(M}R;^b!-Hof3d%wQs#BTf;> zLB7>oXxgPC4KBTaI9Pz at jMK~)14TwqKe}AN z3_W*ra!nkW43dBi1poj*2W+KNpETYame^>-^fwNfhx(aLAJhn>ra=C5(*``?R3LyG z?yRta8QFAW#sB~W5KLhrMib3o8n#tmf8GR`&N%*lj+V|hO*pz0lKy~l3O=a_;42XL z46p_{b?IY^2ug&QPC4F0vyEp!jwX#S_qnPpw0#t4mp}dNvj#Zyl;Nwd58!iwo(NR( z&Oh(ep~Pt0%tu`_;&{^wE4WA_4lcN~8X}MzZqp1H=-uj%9qzaz!?@$lvxJ at j=qUjk z()?EMHs07PL`;y{u^ zJp0tcjy(75vrj%>s4))N(&Sd!FuBlzO8y$Utn?2%b}+GwF4x>)wE(H`q5~Pd__9bE zLxhm01kLP>f<5(QUXRd0>thcHK9<%aEv~r23M-#T!UsRbz!1PMEcNs4;eK3`Kn5MK zPzf}k1Q78Rwe-TqG4gC4jviep18{*V^{8^r z!ZB-cPR;eOM1r1HETaZ0H^kHSJ8-}fAsU_A~d?)|_{_FY&4?-0H1snhctDwL>?xBwlTEiN!*aI{=$AV9o z!W6img%)w)ioCg^2ry9q3~FYDzsbT4R#TW2s8I?t1YiLX7=aOd0D at J7z#c;D#w)Bb zjYoK4d7h&{D?ZT*T;#$Pw16QiNP&tgK*I|BU<2;@|~pFpnE8(8LPy#R}7%juox=!aZQ{4?gJW0Ott at 4yYD0UKD}` zNg#p`JXr%H7{Li6=)*9IkPn~%ZF54~+!e at hh)5Vh5(T71D^P(7T5N(3|F{4 at xCej< z;2;18SO7D`#js1rVgyP4aArP1=}a2rp&VkkMbPTuHht8CiMNOXD;6;cOh`fzlE8!~ zB=HGU{6Q7}7y}028OLQN!3TwiMa=HNj171c3CeWlGlfu%Xbd3~2HhMgLotMJcq12^ zkc1{MVF^oMA`+G`#1*LV4^?cy2>CPu67uPT9-O0m*N8w3YT$z>AmOS>SSklFwhcD0 z;1=9a2RA~2f<9CO8>5LvDLxL9mDZuE^}Otxg at Xp1k&f%N5m2fpeX!5jrT`N35z#ipQ8xg=s|`XIGCsDTrZuuLOlAwcCQ$2h!E4rwT(Rh1pbH~_SkbZo;HllTJ* z2oj1;(v}E2SgH{$a1IZQ%K-fiWq_NR+GQdk1g;7YfUr>ve at R#z5(bSqn$ZGK5abvU zNJ4-^Nn0nRKo*7 at S74o>%o^C%lSm!qH|Qhd01=~FWumfW3j>J(yn`U|Xh10WNra at f zffpyZ!~QPLv1HnQbdH22LIl8rG%~HD7|ICH+$ziG!l0r6V<^Zz7T|=#c2}t-z=u0{ zaS1#8AO%iP>Q(3HgB>h00wYr}mDkaXVo;fE^~#txHc@~Jl&By)*n)_oiv&w=;0GI^ z!3Zp{fhQCB!!;Pe0)((wSP6+c#Ms7-C!Dcuq at e&RSe-%mAl)a}_oGM{0S|1k3}Y;V z5S=uFtRt|14CKKT;JLA$b0iH~G=tcpCPoV$pn at Nq#2~+bG^?K=T_2d?7cdimD&(Mn zDa7GDdsqP-s^JX at 8+^jsxU4IBkuicx)ToJcq1Lob0k=s2165e<7YYdZ6M->`OgthC zCXhlau;C4i-KQM2_(L9UP=E={rUV}Ng+(fX0T|dp7mn%WFRZ2utM`Bs(+DBaGf}57 z!~g~?m_ZRxkO2fJU;=tUiU*c47fAhM8NXn{iFJ{enUufs~1L3lyL*>jWzR5iLPpB5|2m-!eDhiwD{&2mQI| r0~&mQ!3A1Bo60Nc2bGXZ_hbJKW2hn#eBgr}?7#05CfIuKBTPj-sI9~v`Z#_hK0f2#l z3_uV3hjTKZ_wUtz#lMpOO7L&_yaQmP2UGz~YLF;E#Rj5g1D$sR0sufo4N!yrvljs9 z82~y)S}+sM-xS6QfM}=zfR>7en&E#>XsM`az#uw$fPsyJi=C7E5 at d%_bQG$jt8WpM zT3GkDBMAE2`Rn|D=%}b^=>af^hT(54%LY(UfvEpN3;MsWpub95FdGD*W9Q&hq8HWW z;)Yoi21TBK1}^*^M#Vj_wPJ_q;Q!XB?bvksVyy>RF;RAY_d+;tb zrN(Z{mo;X=_hyV*&74n&b1o+*b1IW{mrXTs>zLk--sZj&%+G?Gn$~e2%P(iy#E5TW z;vl^7!iuHJD!-ivZ;V#uO1?5Bts;%flv={?s{|(*GS*Oz=O0ONH9A(V88yjpZq at jd2^jOlv{!U|WQIUbMqItJ%u`A~MV~Mqb_Wmjd+d{V#mt>bzNWo1==`?{OZGy`i_k+@`_x9Qj z3{M>Ir)_GEgxB{kg~wgwSMfoL?e;n7OL(d_PUi^cfXLXa0#vg1#^(+OE^hJ6($D0| z2!CfvZ?RDn;YS{Tb>)}yZh6ZC7fhQrY*qCO4>{6xi7_;ai&fs at 7|);doK|CuL|-hz z+8?%ecXQ at IE6TgEyf|`1CHBtHNkfPB;cd?`IHD_4B)a?wCobCx=g;E095%*<3}c{Q zNJ?(wcFjG!q;KQ}d8rvqt1;JjuQ|?Tfnr8#bq{Z+; zzd)gbrFVRCQxPb}&kv`WOqbbMTE%wYQ1NZh~hzO{FJX~$u)wBsRO zr%vcYxk_)pe&?b zcMW~zEYYgIK}65;de?kAI~(80_kGjRxU-=KKc995rd-onw~;$5W!@9lChk}0Y4nqA zf5xiP?@K+bJ(|zl4QL$?P!VM>-nS=*p49z0>&qMZn%)IhrkR z3d at qHjG{De9t$ytZn9RfW;FJ+Bs;bh9qn0C>Q;tR?tQ5m*HiY9V>H-aTaEfDQDf3O!A}jr~=oAD9us)K(A#Sck#)eVB-T>>j2-8x-5$) z2pzm};kxP-?<(3y(GqzPp>N*a%_s&Le+zB0e%9H&X8uMalB00pk at 4v-g3~#$La#S; zJnP%-;5}p2RCo0VEnQrYu9Vsu{@vp8a8fqB??MdQGF~+;h6WpWcoOKu=V(}#R3U;k zS?(1*IW&2Z+HkniI?JW=2?8cg>NtXxvRT~+ebhUY2GxYzEf!s+^3`GEjG2Un}h`@f`T- z9WBg#w_FEzb5F|Yw`^BERay0OrB98AC^V0w(q`^u)cn(b;+rbt zTe~C=E=-Gz`MVB-WxK?ScxNiAo2`@%F|g+My*OeeU*dasBPFIr*hulttMvqf}%$*IPBn9s;^^ch+%$NDu%~&RAWx|c0ltf at l zuQf5Xw%(VFo@&lgdN4=IyhAh-smQ at oY$-sp1S_Q^Y{AeFmx{3sf!* zzyAKPH>2??xP!avS+@$T?6odWFt4jG*QcQ-h>H)t1YrsrwDq+8HNE})aP?|uLmDOi z8zYHjZLfiSa75&fcPx{|KGgD?f#=$N znijq4q{eSLGM&}tMmel92UjD at A?eJS(fSm5VL~69*cWmA4%n#oLAr^|g(IOzt$(a} zIE^tc!!@A+eurmyd|{U_1x%Bcm0DVSZGNIeG4FMB-FP(@YnS0^^wC#zzB_D!uZW&J z9DP;svGnZQqRLV6mg*&bUu#5_YfhG^DPwHqBRO&MIDFem99!Km;+wV4RexD_Dr7-m z5x>o8`Qw4BgoNre>(x`Qsk87W?K7B?YSGJM1+U&a+AAeI90)G1xTaWi;SVf$*^7*Q zh3wKNw`|H*~-I>Wrvew(qkTuF$zWbjiX2xglITLGO*A<(>Ws_yX zD at s~x)HG_~N4yT=Fk%H#adt_)sn1_3^mQN at FN@QF2P4_MGX3<@*hN|2R4c$e)VSCk zw>2sLA6$jewT5GlF|Py?Ha!`E-$$)=<0kz*M%f3ntP{Omc?o3 zXkiqzMkz+49+zTt%`kpIoz00CC8c-U7MsnSjV^Q3LR||~MhhAGK?{OsaHz{!O5I?i=Q07o0~3lW4Dr zW42jCN0<9WG!-NaUGw?C#qtHrU4I44ygnIM**nW8BnpkzpAdPUEG*H!V$qiwHR^I9 zxU9MHmgy8{gDiJM9ik#>41^CO18WJ0j&40pq0LI(;MG8I&oHD;McN{p~uxp_UI&mdxMmBe?uI`~IMB_Ph0kYkHSPUMS zM;lS%D_*)?oDd36k0>@oRDsWaq^Rm7?vNIF&6zErW|8qJ%xq`3-Ub#Eh1u_BS(C5Z z;hG%V18^wX;Q+E=aZIXzy#{4 at VLA(wZ<%W4Bh4;$x7F_#Cpl&IxO~q;MLa6K5bO6k zhCMX1rw|RAR?0<44TK*@%H$UE at Bi>*8gY0;;w-ze1skv&SoXxA z&w@QoJ51%eFSTDAgvq9O1%-i4m zqJ)z^TFpi)m2nxbJ|&^1K556(O$!LysXR5#cqIMDma*B*Zj(b4g4EZU3Diwf!%O+&NzWg?kTmq3iwe$^ zcwaOss}ecmC>6&;w=d|LUDsBJ=M9-)Q*El5s6kD zJKscWnA;sL>1U|@8(lHNv;O?+EzxAJU;3MW7xVzr| zs5tDq(H)=glyHT2Mf4ux_IQTGT1^k|9fHm2i2UpoNt29&C|bjm2n#)0 at gW&&kIpON zhNzC6Kmb(B59*-)c9BvcW+0YkAhu<&oEBlAofd8$;rY@;lei+UmEQb3J{lk1Wu6DR zKZ&Mx=8okE_q5G`byo138{3c~+x$V6L?6fNCxcT!Q-ml-KoQC zWvD9S918eNO{i-6JCo_^c%ej?|;HRC1{V={(i!sao at B}QY zpAF_CM`z*~-b*|f3hRMbG|wYMVT9h_QAPW8)b1@}m!Mvtr<#J10z&*@0k1X$iCcY%KDd z=Em97M=vsc8^T}?BN-mrov=d=F<2s7_f literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archival lDVD.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archival lDVD.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b278cb4aad324760ccd336bccfe8ad79f79e73c GIT binary patch literal 3126 zcmV-649W9HNk%w1VLSjd0O$Vz00RIC0ssyN1qKQS3lI|&5DyR%4;2;^85j{97#1KI z4WnzV6F??n)d}u06 zaFK{-I%{oei)l7$ZgEs}j+JXIkZd%Fa4nH;JB4#HQhAw`a50o|H*_e$ zl{k}_o0gcBz?nS5n>U=DpuU|zyP!axpqe$o%%V2Tqdv)|K&Ggs&8a)bt3=ML zMA5B2(ym9h0+3=k4$7@$>NZ z`1Sew`2GL_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grte z!Ap1T+BbOj4oaLzv7*3z=|)NM-~ok47br at 2AoD7n#gi2K{aZOu-!LR4N}ND(V&;jM z9%q(7(rX^dpZ)x;{O3=g%N#Os%FHQp0)qnv4j at 2aK+d;)KPLtqN>pI995-#+3^@To zj60@`Wi!XFtvP6)vP6oPm7q|rEb9%58M9_h6dnu^fn`oz+rx<4s%r&Bj=ZdQ@&4l{ zPYU0fB|>H}V51ec#GntC`}ONoi(x1u^9jTbLn#L7K80&k+^e*9Mc>g&>%?~FHiJU~-Nt{gSn z<)$Cj6-yVdZR*g0%ku5ucY#EWa?@)`K!QgG#u(O?HqA&QjeP8QL*FS68m3M;T)0!v ze*;~ETnRH&f=36GD0rAR)JWrveAdKr3NP`sg$_F7_~4U3s&zHcJ+Ae&0w{uDK?FFT zn8KD~)Ff#lXw00F$~2;_vrakC$T5&)1-%kdSRrU42p$B$FaQ7o_<&eB*f4_)ZtCPx zUySUOV<9_-m=xY>JBCzV9+mV!$2Zrw0000Mz=D`Kwk_FKIW6jfO^oBPV_1CPi~%55 zMGZ7ec_>7%0s%Yftx{qVUYQC6(+M6hFhBsn z1^~bl*QgYa3#T$#PC4UPL(Dkf;9?3c(|B{rDcr<2>7m#pGsvAoEM zK(Ol`utXZh9L5bc*l4rOEihQnM<$s(u>l&#EW7B1%Sw~XG0Y6H53T~qBgX(a%rlfe zy=X8f01X^+OfuDM6K7j#Dq?{%_w1w3$?s?Z1vqe);|(*%YI?t_T2SCXCt&9iO8y)#G$4QkTQH-|Gak at W&*4^=e2+f%h=2<) zq{&hWDV%VE2_}yaatS}z44k128DzJ0H6TE3IG{| z@&sU^U?r$n7a8^u4K(E90#eh*E^1K=RUiTn-vHhU;J^n*@b3{Qw8Z5wL4z(xFM@*# zz$Magk4VG~9{+$xu$JLH1O`9?{tKu;3M?Ukeca<78{{A)1aXa%=|cql!$c`UAqr81 zf)ksl+!3OI1S!Y?d_NS*Jp=%(C#*yc!Ro^kBme;r{6Ggh;K2qgae=7a;~bjcAR at 3} zM|(to6PDmaC`w_)6-vT?^~k|L>=6Jmq5^`!x`Zp*P=EwfKm~Brfe at HL1s)Wk1`m)# z6i9ZDdMKj|SnxtP_F=VfkU)8u5M(SZhY3%3LJa;W!9QHFE&(WH83t%%5LqAt9 at Kyb zRG>l;co2jd{NM*dC_)8bQH&el!- at Hr$Ks at R4=qGt4u0^%@-RWU%ZY*$a`1-~VOG4SU at nCW*BcwLmR(nhG*lXjz~pF z7mwfrA0FWdIE(^EAZP+`Ls|sIMiZb#utGnXzylUswU{RT=MM%dusB(R8_Xa^H_#Cu zag4*c>Hr2O3IWs!iQXA>UlNq@?Km^C1;Jb4g?Wi<^Q+ZacD z=PM5TqJwFNX;C5OpaO!d0tEQP>NDfW;vh&knxCuzV{0G-d~!fw%MyonXhDtojzh=J zUDPpNaNQ0q0Hut at sx!qJ$B`CztK}tT9C at pQ2QbaTSEfZX=*z5f%xFc2>BIr(G7xzb zpr0p=qy7-Az|taoccec!tbya$Pm at 9b8aS2{JFqjOWpzUw-UxJCV8Jtk{57gfsHYXC z99b(ky3OiEsWZFEg9;?5%d;W|E#ySs4sT-{^fHA3JfNY1Om!kQaQTNPAb z0R>P%7(P*qA9pxDyJp5FlJVI zBw*nSY;b at YsOr2R z3}^*;P{k}*(R4fL!3;fczyvVBfe~;310kPySWa+_x*X&lWcW}_LNJ9yu!8PRx4RvJ zw1W_o=QTOlx#0_%nL%dqS6sC}b8O-1V8Mw at V2GoVeY`G5cbJ5h`fN&o-= literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalCD.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalCD.gif new file mode 100644 index 0000000000000000000000000000000000000000..632fe76e68d12f8e91581716ae2235622976d26f GIT binary patch literal 3081 zcmV+k4EFO!Nk%w1VLSjd0O$Vz1P1~P1q22O4G{|p4G#+$4i6F$6%G>`84?#66b%#= z5)Bq09up1~85l*DJ3K_BPA#&AulB+J|Z78Clxp)94aU)C at LpaA009(9X2WwFDoo8 zEh|ANC at n55FD@rGEG;ZBGA=MJODHEHGDt5lI6E*GQ79>8BO^XB6frX}NG~rbH%CJ< zF*-FgJT at yqHzO@NL0K;?Bs^4bDkv&DRYy4)MmZs2FfTbfIX*f$UNSCTG&OKBFe*f1 zMnXD4LqJkO9Z^CgUp+l>Iyz`QK7=+kFH34hNJ~9RQc_1XM at dF_KR;(hMLtkkUrs1g zPflV`AX-pBPf}GnReCd5dr?zRfksAXR32hfI%icba!*fsO-)={SX*6Mkxx=#U0qvW zVnSk$c3&l6VqbM(I*nLbd15l9Qcq`RWJqkAe`zyIaH48%acypFift*QVPbf0V^Vji zOL?(%bZmcfVuW*5gK=||bR~6nb&zyLi*-$|X=<8yDYt2AiF#mqe0h_4PrqtxmU>E$ zdsbG2wONC_nS4fke}cAfa+ZEaoPIoifqrL(l~ahnihqAjipN%n#-xEOpMXTAe?!1? zce{0VpMp%Ef>EP{JA{XXriMhOhDxr7M#Fr4tcpmGjE#(rjINA4ag?dAj6<}GM6- at J zw~#BijzPPSJGYZVo0gQnls}c2mcExVy_Z45mOH+fI>wka$(k_4oj=Q*I-{PRouHk@ zo;l8+G|Hhg&YwNYqCL~1Fw>(s(55=3sHM`UGp(nl*{C+vsy^MSFxRX%tgfrttuWiK zJK?T0w6Cw-ur%PaH?Xz1<+d^7wmP=BwY;~s=eRWHxIF2)HNL*Q!^FYB#mLCY$Ir>g z&d|-*($Lh_)7RF`)Y;qG+}YvV+S%UW-r(Kc;^pGx;p6D)=IG_{>gnq2>Fw|A@$>Ne z_4N1o_Wl3-A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grwb zp~HsE7cz155K5d#aU!}%Q9gWVv13L at 6dIK1L58oQ$&&){tx|%b#fup)UcPA2Vg}3^ zH1(iE$hsPfY{P{W1|86xQ2%XhDU0AhZjU8|N{VZ!Brt%;(JCo(Q?=$^PF zN)+W#mOp*Eq}kG?8b at Y%TT9w-Y0}}ECA)>B)4r2`?1?*r at 5CTNxCsr~y*u|F4T+## z%a%6n>C at hpB~zUU%G8Q_ at S#I at rcRWM1hQ)0^+>et-l at 80C6;3zZWD`zlhZR;1G|4Oj&1mFkBLy}T>9LOl609?u zeqg}_LK9t3 at XKM|WRuM`<`G6ta>W31je_Aw5uZeL>@z?B61XFd0z%ouf)!m at 0LWo$ zg|kgJ5E4n6HpK|z%z;Ic(@hZ19aQ6u0gNCIHayYwXamJ-1j!&u4g3U<&p((3py?`K z(Beq~C>9ATYKCfq7-7{EqYYZ4o)-=vaS;^71OoUIfIgk*!^@2$T{hx-v-c5Bs2t|N;SJ)9Dewbg$ipFbCz1ro^=hw&>Rs_L2u-mPZS!Q;m@enGty9lwt&&kr)wFhwn}v@(k^#!%x- zH`fRV$P)1ALytP{*rU%r_mHuMfYm at l4gNF57}JX`uq+bC)cg#vvP%lk^FuqG2+43T zz|2BQF0cgiOw+=&Fb_SP(?hgY^_*}^GSD<*b1k{#Vv8-Qpu&YX(L{sI>{0kLz&>kU%9W z0SN{k0uzg%1S?7bi}76|6lSPF7UWR1evkn(Pk0B{Ist%ZFoPN>bcQudm<(nZ0~jK( ziaw_Ch)GPM2q`!R^=u%BLqI|j{*~w+D_Y?SSJ(mwTxh at t#Nm&B_#++xV4wRk5RWCu zuNKA-hBAm at jAa-j7`wzuwWBo>_snfp^G^N<8M&FM-=R_ zjyPZdPXXu$7c`&&0#tDwnFs(USiuTaNNy9PP=zWMfeA^#U>;g=#~o}~1RUVwfc4-2 zEK&iBUIfDys#{&yprD9z6bz67 at CO$V=MF12&JL8=1SceU3tzaWM)oH2}H z1S1%_Fr55vcfsb9ABx8=%85bfJq`2m?Yrlb9G}APa7!;~R>A0Ufka zjde+*7Ls6uN+lr)NVLEn{J at 3*gwO*blz}pp>BAE;pg3`Kq7Q`Vz%1;FuO%S~TDK6x z5s)wiKuF_2;eh^-HiCf)Ml6C9RfWV7QgVPY_|^=+?SUfLG1euFqZ4!J!v;9f9!E(j z8{Pm1V!Uw;enB@%Zh8g;7vTz2*r5&r*@rA-v5NApq7FNthd-tf2Nn$AxFoQE1#ZBq z(vSzQsF_$bq#<3>B+W48c*aQ?(Fzqr$|rlA#vk!C0B&?55OC;%3jjeVX=J0n$4T0F zr0b}&n1&k0;Dj9 at Kr4gDLUveUu!95f2sBiI0s#t#G at 4N?^BhPU&cN at woJ)>pbU+aj z(Stkggrxz103UT|gee-)1&R8s8PKS&jn}e_Z4{})rAY$>8iSBXs6!7$c0)eU at c>Pn z;uL}C0{#x9&>{l;H%dHPi!`ip8UaCx4iJcwL?WSwevISK`0&Rn1RwwdIN$*eKmY;+ z0ETKrS3rgFFlp4|+yO;Q8(KyIml5&?BV at rB(eQ;FdN7B|n7T5TxC9Z7AdS($7Bx$g zk~E&hv)Cp_2O5~cA1LyMJzQcAbMSR2hAj%rm>M&mFvA6Kku+rq2vwtzhA`-5Yj1cX z5fwne43uy(iM)X?3kY|(4?yk%7}^1eM!*0VK!;Y_SwP*0RWBoUjkc at +0yo(SMf8!C zPYR?HF4;jxUI2nSyy6v_h;SE}U;;YCctx?ThO1_=i}3)W1Q4i63s6ukx%@#UHX*nd z;ZAYzM!*3L3%7t296=rey(k>Du!9s5pn;dTgyV7{$R9WYmY1+#rwfYW0#aGtjy3hZe6LD(_NuXG3|9Z7ppKz=K*@|2H>P`<)*sM`buTJ&72}Srm5}ojcI3O#RfB*nHQydnI literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalVHS.jpg b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivalVHS.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6663a7e5eb1e4a8923046db9916442fb0c395c3a GIT binary patch literal 4541 zcmbuDXEYmN`^H1;7Bz~9+A~3oimhVAruJ59kJOA7HHt=SkBU;W_J|pKm8w;v_J~od z6rpI9)_B|hIqy0D at 9%Za^Xa;t-*umJKcAlK`Rgx$TiOUM1b~Q$h}eSI0sy#P12CyS zb$0;(w6q`q3c!DLjR&ayOZ`v!2l<}>|1Mv at 2hdRfWB>|4B5nXN9TAX@=(-O81^|eG zf8GDi3jk130mv!HNN at Z#1#ba}NPqz1zlp!8e-RR5ASoFUIRzyHfS!tu at ir4P7dP)e z3=x2c^#4-;q{KiHGIGGb4k+DU1QCz~K>8QXiL;kPAxQ&b!Z zt``9}|8>y;=>YcuPxTh2+2%&|O!IcCBPX*!aXs7W#+pm*h_tGhM$LY)AtSi?YU^lk zqo}UWX6zAxxcN0$ExulCg~Rng_#)y;SxND!ry*h`{|Q<5Zf8`0ZrSev6aTKUcXlsp zbC`-~baT2kY%zI}a{>9ZK`G9{sn|hH>{G$uQI82hI`M?agOB^w<+vd7mA93qZo_l> zvxTUy8(YH%Rkc&uEpT_FbLsEkpB4Ho1Fh^!SvegC$jZXQ)7Doc at DUkxc&vzSt*W|$ ztQOZVp|Ga?1rY2om$w4;O5C!yc$pc#L}8&@gtqikjyxF}{U9dE3r;#ng}9e2(A^bm zB}Idic$nroSL%u+zORY3K?SfiI3!=zS at ufqfMvyPwdZ;^AAe(nB at w!@_8RfrsgpvS zU^5O~wj8r&M?P~9Eoa%OW0ty~rtP_MHNyhXb-gd8kG;;^Jm~m1e3NQaz#?wZ?DDQM z#uupKR&ApDlWRjI=&*$4bt^pk6yL#ec7=AfgbdG^{4$M+E>XLw#pTMZc at pEda5)QV zOFYU8C5F`xHCgid+8cv(J|++M=e at O=Wm++*7wdn}EOAuKSGU4td5ICUyn8$GRp7YF zcmKt}0Xn;@iZ2rZ5D_*1YA#_Z>YG|87+Z^H49>9)H;nsLNlKU5oCJGb`U7Rnn?QX(Zwqk zkdN-K-2e3?cF`P?o?@tnnV#^#t>uGV&G5GgX=S==h+SlnUE`vYl)Vn`>_DDrYjZefIPV1(1vQoL#toQpwG8UqkXJki zt(c{Cq(6F8l-2jzuD+SOCbH1r<`7w|a|xv|rB7~v at 4|!qcN+zNX7C4VTfDvBs?cV- zIFq75Ee)X(6g!P+Ib*UqZ$Se~+k<9G;of3;Gym~qqx{@x=YTFpY8$I|YG2!83$7BtMG}SeA<&*$*gAlvz{bb=`EINyik&P$if`$|2u|lo{&%5^k9o zRzA5nB>hiOC{Li9T3eU|acP~(Jj zJ%)}Z#T5cWd{KJ4;KSdrtl}JMm_TtXLBhlK>!OS7F=&jPt!Mk2f#Bk(d>tW>@NCz# zj6naj|9#n95MFyWr2rL&)`De(V;_{&*B=E at m`Fqdk$UApD6Q!R)HQ(j1|Rq8Gx+DjqxJF; z#!U^~9c$G?p_^+Sml~tWG=B&!!;3%SyDL^c+})D(MMCHN&UmNN<`VAXnR43Ipw0x> zcBMdO`%g2CrGJ-IDQwFRF`J4hY<}jJAo(zC$VH*`g25_yY zCb(n4R2mHn8CW|ZuO~v$o$=cuikY2s;aKznwX5vdLoj7;Mm83NxNmWe-c=eu)$a1< z(idHQRK|Kt(b2N^JBjHcmWK(B{$y-{-{sPL0Ox3-wFO0)?IsbUKj}%daOk~sAEUrW z+;ojZ at Vo@#!&fl56B^(j at 0tXjFTYpF%5rF+DcT|M)!jilIYJGNwC9Fn_#T={X5*S_ z at drHD09VF2f{d9=%F-1K-9G9W63+KizhvQ-USfHUA0OC$Ms(r^r{;P10t#tfzmgj7 zJlN`%2{W_Tz4^ndj6~pcC at O^Qw4r#NBl~%j)ZqNtIp}Hf5>w_#7yNw5RO}nJsY(5f z=aUrcsD~3X;qu22HJ at rBgUoBdSd3pfs0xFUKE8SQhrJ=U4gs#{U-X(Ym6nvRt&<@b z5^h(|n71rdLmMo}(5b_kM1Ccs at m?HdV!&jP{LJc+&f-5D`2CroqqB<)KQT{I?<{iA zlC2##6 at Q{QE59+{Gf3{k=6(v`sr?CgYXis#YC8y at tbeoJpA6_bvde|4KI z73Ia&*Wv at M4NP|nRzk}zQtCc@>sjyP+ApLW9_s9|{i30|XGNky`xBQTR*LzcS1ejt zHeV~VrSt3sG;MzZGRrKp+w_?i`&?xPjMhesyOg~j$l;;$k~Hr`?;+Hbd*ta at A+<1u zjAEreItVf2ssnT>*Hc$4#g842hsfif z=LDE5?f+qF!lS0`*0OB2GHmuMqGzHQs&TtG!2p6jd+!?0%CDdZVQZJ7*oxexZ z8=R|HW&fd(7feFRu<?&zO1qPf{S^h}JoiTNm%-%NR4Vw|VvWu(CAKbW zK0LwDpDGjNx$ySR6Xw!}Gf!qNEGZ(FrC#=CmGTbC7uxSJB&9EG4n_RihtsZUD58*U1r4i9g5F!r2!~baXwbIW|_q_hjF` z3uLr^yDySbE8>=|PF0|i7RK-7=E0~b$jutVe%_V;8OK;ZdjtUsB6HkUlWVwU$j#o8 zzgqFhcqUazdw)EK!C|Vx$Uog-1pVcg6JxJgUYB*hSe3vvKxjDZT*Zw3-s)>)Lv!Pq zTxxdzZfXC3zPQXCH}+Z=mz98s4{egARA!&&Dqzz*SS9Tf_JI9r$)9YG5b=o#Xtofi zu+*KGQek81goxBdpCTS=U&RZlwNi=3wI5?&8x^!URO76@?;SW9zjiJP?M6Cokqvl< z2|tExi7$qz?)GH at SDRh6b|G+r=n%KsZ(~EJSIQs z*rj5)%v3*2nBBi`B=RPT07UNn@>+twt~@Vac`d~6>dnp*qN$Rv3!3w_JVfGgYxQR? z8`OV<_^VyW>}0)RRZ2oU9PDmdc9g35&f$$`)0gBR=FRYm;P#TBlj_~YPX*Za$oaNA z^7`|(Bn95duDc_JkBoQ~+YT5%!^A*IB5YRk-;^!~65AOu8JondhM+l(W+dGg zscS{=2rLI~eifm{4UX0DmaU$0LOJB}`0O)o}Xrl(&ee at HHO>f*VlzTh%=>Zq&r zsE?h=qg5m%UWCz$BbMLMU=<8f40fKc$0)%0{5F0#4^C}Kk$wjr^t#pgRU89-SZ^2} zd)NJH#{QbWjD694OtWo)bZy+T;<5T+Q+=LIrcBL&^;$#>3YkH3qJ6pTRm5--C%#_> zK9y@|@;Xa%yOqhlSyJ$fYRnb*V19R5P+<$_VP2#qAC|N_puI}}GnLDObd#d zk%38W^oE?L&Yq@#h)9Ov3kfQZ-oU2JMrq5`1e(WGOnz)&7ICwCI%*obie0nI(=%2% zmAlo;GZVpn7^dm^B|SKqN62|Oazfj5QmRJfqb5(81bqvp at SJ5}*e&+u7G-+>+Riks z0c7EZ(O7KCMT2tPoN4ml{?ZoW(G{o6pdv$kN-KHX7xZ!ZT6o$;$qYikDdMVe74>Fh z;IkZSIxBE?C&kLQSFL*K9o2&`URLrha%(I#y7X+>MlTgnU_Og-S?;(zfzg4AZB5Sw zj>OV5Q8k#&AW|jVV2|a6(;M5g(cU`&m{5#aDKPM%aqQ|PmQr*|Urw!rr!tUg#AC84 zvw09VrM^u}i3>T=qIpB?8my8$m52lTf~nf=6;))PPj0}8Veg|;eb|~Lvdu^wKj-PI zKLNHR6}ILH4599>4yBPY{N_;eV|{jcIwcKU+ZoA;7xP4vc$_oVXj(Ppnf^OeyPMjw!jx-$?`P~1qnqyo)Q%t=loS*5B90QHl8_Kb5=fFn bfv{wQXCg6RRX1(l!;3tDez}A0>xKUS-u*b_ literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivaltape.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/archivaltape.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d5382482afcc5ff5c9562635e5e2558adb4d67 GIT binary patch literal 3852 zcmWmD`6JVhGSzM|A5DD&wwC*wu`_Wa0ljo0&tu*8i&-vg1R^i zsH;r`QM$SY2D&;#(1=VT8k5LI#)js`pqVkljB08 at F{M!~Y^Yjx78nalb1QSZ_2%YQ zmUOzM#X7o`leMl5-F5vse`gylCmUlMhPB;#26MfOtsR49yKW=HmhE8Z=-}kw$mFny z&Q7+h4UQWe!`Lh at HY>nugQYXu&4X?0?6T3zg|)?l;_8;-=eEVu%VUd|m5*0+p!deD zKKees{yv-?p+3wAKguS5-{?Tg*dS`qmh7ky_w6Bef>2Uih|{m3mb~Cyf-p)#m`zwn zCXW{y7aGe8-^L58-yLa{6z#D)#y&lkm>9chU#w+HtZV%CxcInJ`vvTs2}SY09^aSb zBix~roSc-Bn4g>Mv{O*~pJcmzDO^#C*@4u}X=!`%)BN`CsTJ+ at DBkO|KVx at w2I*kt z_Kdwv<(c+5`;!Z at q7Gyq%s!B{|G=TTgBy+?wmEj#;dCA;FYmB8FQqO&usolie^@RN zdNhfgYl|Z4inkXDdrOWKoh|kF<0!jKJla-fUtIk3Tt(3DVzp;g zWzU(~ls{_Y&ekP$)?0Kpkgp$iJ0>}HNs at Z&1nc^VfImpV zfB6lyh4lWF)Av{2^GoagzUcDzCFY$=`4g92x-W~zFLUJWmtJ3H%yw8j>iD(mO7qke zyH_2a&#w8aud#bOOJ8(yCcC0vcJZ#?xc=q_>-~-O(>LA6Zj`CJgC}ks8NV%>Q*549 z at Dz&Mqsp3DWz6fo#3%igg9CSl2X8#Rf8zdwftd%nUxq{9jFx?U7_*>CeXWu_9_t%_ zG&1+(+=t1EcawFWp4Klvsed!sG5@#p#q-IJFE4y~`TLT(eqrjw+v$<%nW>do$=BJ_ zt21Z5zia;YUF)}Z9Y5Zm`u9WskB=?y=ijYH20S3$l`T zP!H_RN}&b>g>V4|@W1|l5CFXf{KSw0z%Cs1x9 at FI3krkrp~PE<&PkiY5GtHMTNu!7&&fg`!

    nD6{j%Sv0JhZE=^#WQV`EQ8RLM~pokk7xG? zQ=;>`9o87Cp=Bis+(j^reYnPzefxZJ$;J1F-HRTp?P4zXeqwJt07b(9BAKK2n?5Kn zG>j2Wsf)mklDlI4LrOpBRRKqDH;oMnsSqe#%ZCI9gaExcw;2Ggq5%k!l&+|7G6P>% zvhJmvtw4bs1(ajc0 at Pp$LFb at A)j#<*$|$Pl-w8!E9e$B%=^Lz<*m0gP#fkg`qn+IYppipTmHH- z`e4t+o at HpTDSK78sik7&iWVbFH5Fi5v at AGcn!hqOa3!mY*Jd*G%sYTGva|dmrO3$< zO{)aWFLh1nB at W)0HV!YNG>CcDW*^8bBw;){>GG}d;QAn|rupuDmQCr4gBCyh_3kUs z>zXv?c#EFFUdNugitdb_u at HwWpsw0|S*0H~usl<*Ilu3e$oH#zT*V7vmY8-};9`-MGFNJKPrflRDgZ*Y(5P zX1F7Z_aeLZhj~VKZ+!?})A(#^x#M?sm|7rDs&We+NOGEp^U}&*8(xeUIp9{1q{a3K zx3Faoe3B=91(ozGIpj0=vv`_tc-+||Bq`1Lapb<2q4y)dUA*=(k5zf~<&tII!}r at L z7Z*Ktq3VZUr%pCkP#X7{=D1r|yE}R;Nw!~kpezbr(kw>bb{hCbzV&7L8nEQoaz>r$ zMqLCFHo9HU3LF0Ra?X5hWv2e8$I8niVZ%;e8ce_ceOcxBgPclW-MA+>39B-S5Q~aI zwggICjViWDgvV(lJ$rMf>pyy_#Zsz5o}e=!MRSu0K|W9coPMb8HwxuQv9X zzL9J)PH-qCX3?~_kP5Bea)ppdO$m&yfTWXzkY%aCnw(RFe&Pg=bf=lj(orsTojO+` zFihhEU*;iR?|-tYOwR}U8n;QS;+fNwM{1GLauEctP{Wv9g;q{F9EP8>wN;3<;1HcO z4a~@v10&aU_2hz8*X z?!Y=4IDm`Q7@*M{<3{vrv&6`%$3GSf6mPv-)Z9RyRe{-NzbRX;qBQAb_0xw@%ybwtMGB|2LmfRqXnr&Vt|Tbz+T>SVA2Tyh60 zV7X8uYFDqpPVh)Uv;r}(CKiVIXhartD4c>0GRzSPtxEe4tn^+yM_T1LPdn_uiqqZW zjk6ebOl#* z74IzxX(kx#AP at 7)6INs=9m-Jw-xRQH4FQ<0 at h9gh(5INmj at Wduc?SR)kSO%+>4oeW zAr``f>OA8pZCut>PkOY6?+h&AZ76X%)RaW5RfxeFna++?E5Pj&_Gsc&b1Yl2 z2GKza%3aA+$n`u06w8Dft2iiwKn2vSMuGUsqw$H2Hdo?Y52^m7R2;*< z8757!pI63M7Lu>E`de?-EsMO`OsJU at AKIY&=WB-T;q~ON8 zoU*1=5NYq|zp*Xbm*_qSpkhG?CQt|iOVW{qVG+KG3MGv)ON>-}j8m7=hzWChAkfb4 zgps{gKBvHfan30frtwJu&TS63(CF!V=h=5FZDp?mH7kT+$z8^d+S at TriGv;NVn&m4 zM~u7g(HUxh%Ve!KHEZ*+<-a!B&jY1-%OA6sfPdWYHL>^0eKU^k7+8BGM0Gfv`FCVB zn?(tebYuXs2;fNv?QLUaYDE(HLtudG8aXAMWK1qf7+}LsRb{hpj){oNXLLTk%^*Kh z6(*p_tu+;bLBJproo=7tjj~*oqC8ea7b+F+DWoY(7y#9)0mNoh5jKq3t0M%&kweCq zFv*vTBCUD82 at P}MlQ(I*tYV)AFj#iGXT$NvMn!ZR93SlLv=?AgcXbmlfyH!%>8HrR zLPA%KnBMjgyVMCa9E$dLtP_++O+Gicl)K3$(z|?*yW2#2AcD at R#m1@<36HJr{xYvZ z`MH0Hd9?_;f)pI_j_%QIk;1#^W2NcYO+7MnF?%hlwk)DG at tIUwY}@I8NGYEpNl6H$ zRwy>;g+R-t)Z6SUzeG_oHRtuTS#^h+C5;1d(QH>@2_L>a7)rP>`AxA+hTD&Z7-aBa zj8q5gHdW!w#<@a5AgEoSK5P0)SmOL-wDQ{Fvmf_Hbw7VOT6y!%4--dezaq)*3y%yV zM^(efSu*Ulio%(R+c3i#D)R8TB$E*Z;&wc*B2hiPI3!=4%@BRcJ-oIwq(&OQmF{aT z$TPUW^mo1FiDFC4pV!y?YiZeD;?SfvdR20_7`=u0VU zuNd*|GxVY&=%*7_BKn(6R^-qpuhzJ5lL>FVddaQnqfGIOdMbn`MA#*m0LX^vFI}zf zP9;2Cy!fP^F2KQcR+W3Zi?kn8VSh-mJBkMp>9W`g26f;(X zgzy0b7uz_8`ky9Kr41Y68?Wa#qHtay#48;?#K-H__ at 0uYayZy?Ow74-{6i|#71WMb zV={%XlR|U at Q(VGD`SIaCT%E@%)W&|G9o*LiX!Q!ynxzLn?85d$9h8AMIrpGM0RT)O z56F}A@%Q9fZ-m-+s9N9U at K&l8MFE(qAhygSx(dKtsP%)d-7ZD#HUf at iHL-rh>F_v^H`%aZE%a6qV_Nm zzDziVfRL|Cf(dI({4Okn2xy=LP)dV8d zgs28UHH|2TGB_|sP32@)MrQbSwM%QXQ(0~RTR51gf_=8trjY^1gPoo%^>`1 zZuN?!`fDrPSqO};=qE=&e`&7TG=?xt-?o1WG7W(snbq3O2)-1d=TfVWLB^!R2sMBM z2sKobtc5{vHRcQtiAy(1*aowslCd1fz!-99j4YDQp;a01^-{o)51rT%O%Vl~sVW2_ z>^Ye}PXNVYVERlGBmf}*P^#J(&9AppL%9q3Au+h`U-FBdnH-2;FepB#`#eiuB7%5obhSARX(Ecg8t`t1TO<-ED8h at 5f3v901Olw7!(8<6%HR20T>h}85b5D84VN~AQ~DI z9~l%U7ZWcQ4?z+J4IMKg8w(R1EJG6sCL0wMA1Ngq93USTA|4(eARZ+j8Y3hlP#F#? zB at s{?2reTZFe4f{AsZ+qCK at L^Dkd5!CLkUsHyC?-H87dj>uIVK%5C?qE= zGdUjYldYhZc$$@!mY0*El#-v9ex8_ztCf<0oxrA?et at 9Ke4@~= znUr^<)^eoXrJ;eOppvPehpnHRu%DEyqJyKPp{k^i!k(9~r;f6yiNdCyx2%n|t&_E{ zo3XL0y0VzKwWq(goxQiCyuG)@y`#gusmj8r$ilA3#kS1Gve3t^$jQUe%eL0fyVTIZ z+0eGy)4$i&(cIX|-`T|G;LG6Q-sa-d?&#C&>E`e2-2dq1`s(EK at 8JIK=<)LH`uzF- z`}+U=|NZ~`A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyF#rGv{s8|895|34!Gi?( z$paSY&Wap4R;)x at lqiR^Y?%b6Oq)m%?vs_o2^cU}xC~LEu(FlH(4#q+kbvYcn+H z)FoYPsJ*d-DoT|-lcdOXG^|H{rBWox5k$}?Iw~SySmK5frBQ~K5Qwm$aRj|RhYTrI z*CS1k{33DP(CXd1cjmOM^5R1ku4A*h$RdkH`MmSZH{oRC4LtBvqaH2M at N$9>-GnBN zIp)xlPCDd>qmDW1kW)@K6)5lmCLIkpQz;PuVa0spW#f!9;XoKpG_L4E3oId|0gEu+ zkfV+`_K}m0INy-d;5Xf{afl>j-~$#vDwtt~8TP27O*rA4!%jHyz{8C-#^{0#EiGUH zOEuh#qmDZCv?Jm<-sD+LHsbK1Lm84>(@#?9B)|qBrsPA;H|CHtW;VllV@!I!2!lln zZ&t&OI`7ysPl(*)DJd`FkU|9$i%2pkQl-4`LM{HU*dvZM#>z=7eXDIq8gpXE at b3BhD^pRPn_hR^o=j7Ib8y&8Om!b51tlkfWrmgeK1*<&FShWRi(HpEio8H{$5ZO*U!zn1%(6V8czg z>BLiKx8r2&O*Y(!69o_Zin6MJvZ(MvD}wA}B%?>pN)K_-#2k$-X;5&9HOfK=4?XZ8 zdk&c6Y-~;%FfdU at 9r}#y;y*xyVMQ&OD5}jj at TAk^H)Uqy%gnma46!evrh}h-O$Ht6 z!sa;QMHQ%0qclhV(Dd&cj?|LNJl&et=>9m<=vqxQ%rJuux*;ecOsM9F_%f~GoSo-4 zs}uo)4xVT-GC}=tB#Q|>Y|;uk^T0Ew*y13pE5m{NLQ5JUFrrH})qwcU;@*an=fd7J zQv?Z27wGaQ)0J%r>QzEc2J1K)!3Lg>_CGvxWE&g=*Q&* z(hpg at U<;gpl|9N~o?0zzO!6~^HO!?8Sk#OWz8FWXl-G`UkV6~Z08?>nBo0dyp$bUQ z#2=E at ku7Wi2DNBKGweZ*Ml}jd{?!;1Gwtp$^ei!y2^k5iR&2JzlV*go{c? zbmlZBZg8U-#;Ark&`^XdFyRqnxW_^K(S|DUz!uF|A3Vens&R-T9h at ptI*3RM)kSZ5 z<3Luev|%wjDJx^yh$cB45ePa!VGNH*M%)DAk9r7T4?Nh#FcLMZ1&IS5_DJVv-l0Za z^vD%RgD+VG2h?p$Z3_#N`mV2RM+T89Q9iH#%jHZDb-a4XA(@ zOfd`}xk3#JxWqZhn9gnhV;9XRM>)O$Ks|Xw8*?ba89v~NDcoaZY}i5-P*I6npd&u^ zNYE~5&;Y at lKm`?O003aHi)?sM0hXA?JUmqko(2^F8*oH3%rOl(?TH+GKtmRA at P|bR zN+9)cz#d=#jsDbQAMOCg92B4c8lb at nPO}0X=0FD+gkT!e;G`wYVGnRb!8#S-fC^4P z*bK~}8QmZctpb4tI#dA%o+zY1eqn$;gz*)0a6}Lk&;vnKViR+)LJ)#bgCK+<3^ec$ z7KRZB3Rq$ux5)m$Pp$9*4pbll5#Rt^qfi7skYX6!*hCcQa0CQ+0txyM$Q^h9hf2KS z6-7WpCN`0YIYc20Jph1qw~K)=%z>_GXzeRZkpUW5K?NM(Km-K9UJTTr20|!8bcLXT zFa!Y&VL(71@<5D#^dkXv(19%~kp=ngjs!=5K?2yz;070gv0ey71_IFlA!MNkRq((8 z4qyNSY#0F^2yqpva0CaK_yuh6Kodf7h<-f71BZ|R9MES48}c9q2si))Ab@}#=hy%a zSa1c*fCeEnKmj%I0v+~%gE8oV5Kz{G9 at emiCa_=x5`aL6JrDyJK;QwPz`;ELu?I=i z0S;RTgZ>RMA&OXZ;?0woL?Pyk2Ryvt4PB5y1e_Lu9+<%qX86G&8WD;@f1=Q-D6}U$ zA&Emcnha!s0u;W`h(izq4>q*nQ=XE5PMf&X3|N4uN4$_8W*`26BJ|C~$!bR)8WAT9|zc2AH2E$!=Y6UiM?Abf~4J?{^>LoVbRVVTqG bemnAzMkz>=g7T-J4Tva(G`NrYfB*nH>vb;Y literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/cd.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/cd.gif new file mode 100644 index 0000000000000000000000000000000000000000..904e2a6c0f5d5da877b3ae1e056e461d1ada0fdd GIT binary patch literal 3170 zcmV-o44v~wNk%w1VLSjd0O$Vz0R#XG1Of*N1`Q7k5e^a-4+j|!4-OL*5)=^~77!j6 z3>6w6DiswO8Wu8V at KO2NxeJ9v>YeA090r4Kg1PH69fnBPl@|94R6g zA|xRuBO)IqGczO&KOZ11CLA^+B_=2)FD51^DJLu_CoU&0F()V}Dl9rE3 at 9oxAuKj3 zD=9B4Dr6lVD=jJ`ENUqTRvH8w^^MKwxlM at UOIOJ#aKKxRZla6?3ZKRroKQBh4xcSAuu zQEX39PCQd|ia|ncP8U;DS5#J0L0NN=NJv~-T|{1ff>Ba at S{qzmTai*zOk;k8VH!@U3Hdkbaq#Go^*C|gmQGP zYG`15owjIbQ+~EteXyc-C0u at _SbwW_dwzL)cwm03SAx1-fwZc6AjoTKQ-#BSfqqnruI+uV=%}ft<)$!uv-5$o?C7X6t*@-?t1N%F z_l39dwz06Wv#_qTwurj)gS-2Wy6=m;_qVvUjlTKzv^S5y`}wvomB978y}FXa{+Gk} zl*Rv+$N!tg`@h7-#KgP8#KFkQ$Ij5q)z;I}*xK3N;ojig+S09 z at a^*S@%{h&A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8?697wRB!Grwf zr5lG0TRM9E4oaLzvEsmVo~&>v0b at o-7$ZhlnbeJ+#gixn_Dg1^MG1~BUA}AqqeP1q zI3~$U$ma)f6x3q86->qpl1YD(>pNtDFP(10uC!ycnp|MeYyb#3xbJ at _UxFo-@c>%@e*!~T(BkaEDF*ks9W=g zKwsKy;i5(t5zNeyGgpl_Vep0VQcEtpY-5f&+dwf*MS}R^MgZx|LxB-CadndkPmlq@ zE`_ z#s~lafPg&l4DbM6DqKK-Gyjps&N}8qb4)ehnS+Zhxge<@l4P$PpJoOngv4rPz3)k1hcO(7-+oP?1Cy&q(8HVdM-; zjyTo~^UXH5e3FVY-?Y+-frXj+O*OyRanKpbKxV`Y{rD0mJsl{Kz$ecvvy8bNZevX~ z)@);o4;iQtNgqpiFvc$jCVQZMf-ZAR5C at 47a5qc(%&32jQ%ma{E~|;rerdPE(TdKjTPfC!NCXuq~mo3 zH6YTAaIJvS2qu}>0`)S%tYFVQpx=WP-TdT}f-1j^H>4_{n1Tr=kPKo+I at 3(kP&Ygr zo(>ZYG$24cUUy)?EzLyJjNZc#XNoCdjsXnl`pBaP7nF#8Pd~sop-L#9gtCbwgf!Af zAcQD_g%NF}-$oJv=*~nOe^?+75Atx3KrO=@^UTwF3o~9VpNK&{@WC7|_ at N3fc*0fm zVUGnYViAr2#3Ay4hdP9>5uaFs5z5hvD1^WYXOIUIfR~MPo0$Uqo^5u^wvC^GR0Cjdi} z_b3J%j_?F-^h0#sh`}KiVF^&Q0u!JB#Ti2p3M^QG9&rk%01%)L3b^E!I7kNvYH$Tc z0P_^9SVb^T`HNc=As-9=><8)eaSweo0Sa}X!yJm3iS2zN6QHNyv;$OrWF!4G?M z!UykSg(BoIh&&Xc5P&f29F{PRaZn%`@t~b2D4>Ek*fkCXkOvIL!GSUWVGN|eX6CkG z7;8j>Vqr)DEWGg!Z$x4RYmmm6%wddB4B`-nKm<(9Y6K>wqX0>WLK))Fi^{kn2?GEC zJ at z_+Y)~Tum$UwbHA0pa!*1gn2igT1eBc8o;2~}6`o>zU(F#cvq7I561Rx^uGJohp z0-6wobfX)E0eC_l`1r>N#?b;|AOi?^cm_C at Rv2qELmTL2)i?*F~5`J?j{}SelJfZ4GU7dJ_aF0h1=;1_?C4 z4T5mP3>2V=%6PjnnTZ1toDpbcE1FC{f<`VxDh^bG!`ams0|Hv$iHf)Z8NJX%bcylp zetX*$8MuWuz_E>Wjnqiu_>nVAF^qPj7rnQLK?6!)1%22%FL+YH2R3d23rOGr7P!C# z{(c<+0~i1e&iJ&MM at lGbfWj8ehK4qr5rzZQ5(m?!2tTaCk6D$1D<0vB3GP4(T40(C zT{yxC*5Hhhn&TVd*v2#1 at r_WJ!g#pI!U4?5krVgi=QZI<2|BO^R1}@cdVT^3ps)${ zb~+kKQiUAWV1om2KqfF?kz54giLcP)CM`e#7tD_5DkB{UAP~U`VqgOnc;Emt8iClq zqW8V?ohCu4kqM;0hDxB~5`I8B8IXR28g#$}C76NagTe!^TizeOsEK at J!VwO1;08hv zf(S^^fz|)LMl}%wa$a8$d9FPW=qQz2qI2REbF;uFVr$! zZcoiwEmJg0YgT5pXJreuSH8+-&Mj-k-ro1m at BiP==PQa5^8BTIzz2Bs7XX3+=3oF~ zfhL%lSt863NHZG*0*yr>v3Md5;fyrLSP>CK5}ttDghFA+1fe-hfV3cz2 at X~`D%rx) zno6PI0xd0RWD?Pu8icXH(dd6WcajC();+j?faDq(Q*wp^wk62$ikD5THHF)f at FDRK{rj7o`M`NqTvMG?MRg+Z~RI}VN^v9XWs9Q=}E0uxfg z#o{||9)Zb;aq(NXBySB#N=!-cj7&<-i)RQ@(gRZCg~@5p+&t5hopKZDVQE>h+qeJM z-7`8hJ0c at FI4e0aJuPK>N?2BU$u?_ImQ_Q-kV;MFWI|4rL3SK-=(m)AgipXuElLYL$m-v=^#8)Eaef4ZFE9yy0lQ=GgJEqYi_| zH#MI;Uf=TdShMr#Gp$|cqE5EApF4l{boaNtgNfh$t7q)W*6zVe1A`a)FI|}&j=yHe zoET1dd&zg~dg`TN!{m6<(D2pi at vVj%ljAq9Pu`xm`O}@d(^C%~&CLA!$&wIpqF)XNvb-t_q%7>O^*2p*G;HeW?Z4%GJJ0)G zO#chK7Pz*yNrc+y+OOk#%q at bqthaHYAh*Fh0oaVtTjSB$axAN=iJNE1`=z|&PUDN& zoW}6}qFJe at kdXLw$m)t512~;r93%6S)6OBaQ*s6CM`%uc1CWXT$r*JUFCwP!+9Ir* z!r8a^pIh0n_K1P17|%|=;Z7y=#-cqSUa*S;dCWe#PPjX at 0@!sLWwG3U?mQ4>-_yH@ zam{UJjblQS+al;qhKi}y{a+w{Vpz}Gu|wW%SPK9Xf62QG88qt^=LHzSb>K at -GF5{k40_Sk z?dp?M155cLq3m{Y%W>EEWy&WR&mA^6*_*225&6}*CRc?#;%%ypUAu>si=J`nBW}%Rx!T7 zV@}{<{BMzN*O%~nKqYSY+H+0K^W&YOo{!G0rkTev+{;6ylQiVRIddCSjXvJ*^T7N? z+~7<42kJnY^ z!0$uiXd4Q~D%Shn+x!n~lrS-Z9 at p9fyOnNOY~);tEO_PGQJHl$Uy&s;i at lw>&KO at 44w|lE?lb4h3uGYB8aN5L%1^kZVisesjhI0FP z2Am7_X6KHA<&=f<(RgTErOO2GQtJbqPoHyWi-Ku&yeSCtqz{_VVan z?PA at 6MgbYAA&Y2%X=Cnw+fJJm+&BmJB9*t(d39u3&=3JFtXv8~~w*AE4{a zU-bf_1_fFoaXWkuar1sO6~1(0l>VFUM(5!bb&{c@`TQizb+s1=8(^Q`5jYy0X=nr^ z_IJVLB0nm(`fPT8$JQGyUYaf+iTj09GA)E>D6w#Q38MeZ31hNLzDgRH?$J*>$9E_& z=Id{pR<$BXxlvVSFR*3F;Yp`Yp>if0g$jKrs1 at ihG$Zv at U`-I89%VrE4NaVe3yXX3 z3A1aZo$;tk<)thRH{&adT9iMmL^JT1g93F9;FLr6###_Ga at _z8J`FB zIoen4RM>|4W)h|bgA`~52z#O&LMgvZg6ov1G75Cx&nrrRu1A}60{>netUdQ_%t_vL zGl~HKA at tA;%DmM-<~dgqQxL= z4yUU7BChK2Wl6gg`niw9rv3v|2_kYpRQr;er_ewB&gh^;_$Fz3AdgW2hfILMXfvWE2pHYc;CvH{>

    !X;(_p0w5SXvpG z^-$DVHEhDHq6cMw7~mOP)<#kMF38W{&8kp^%Qe~maNncXh%qoA?S^mU@*^GidIe|DF zOP3}*xQ`GUf}+oZ`3kb{68MW17f7 zK|wCkYRdB*4n%5Nu$a=zB=0u(p;`5=CG`cJ+UW>F^WK2+Eg`GQ$t^ncx=!27!E(mX VkC^DG-r5-h`n?`=gn|VE{|Dt(M8W_7 literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/ebook.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/ebook.gif new file mode 100644 index 0000000000000000000000000000000000000000..19a02313dddc244927f717d42d37fcb800b3b571 GIT binary patch literal 3117 zcmV+|4AS#QNk%w1VLSja0O$Sy1^@s60ssU93>E+d4g(JX2 at ePd7$5 at y4+sVu1px>P z1{DYi4-5b#1^@#MBN_|^2M`ww4j&E>4L}0`D+&P=5Dpa+2^td%8x;UF4gnY!791H3 z8yOQW6%0WU03sR)DHstF9VZVRG87#wCL0tb933GZ7a$)UA0HzH!mb0HzXJ*C?-N85+5lvKqVe9DkLW? zGdUd?esPI_WQK%;oPT(Ug?)92qmPDqj*N$KkhYSHf1Q+g znv{W>m57L!uc4EXmY0)uoyw||k%67Sf1t^tosf5<)^eoXpPrhgo`$iSmVKnste%>x zrLc{sE)6xmA0&n$EKOJt&_&5ps=r}wXd7GvzWQHr at ywHwz#yuxTL$i zy2ZVt!@a4(zp}`}t;@ow%*L|C$jH#ht<1=}(aW~g&9c|gyw%ad($mb|)w|u<%HY|> z+u79P-_YOT-s9rg>Eq7m?d;?E>E!?D<^SsE{_g4W^X~lk>G}Ki|N8U) z`}zO<|NZ~`A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyF#rGv{s8|897vF$KYs-W zvf~v=4vQQ)SV$C;h!;DA2 at PV@m@(tQg86ufA+lu)6DB5^kSxh0hZ<)4I{y1ukS0f& z|Ky1*xrKV6;+&}zz4ZltAD`Pn|b& z>)?@Fx9;4zajh7^vCb>(U39O!l1L~PFc1I$2+9yjH}B}A03+7$kpwm1IKvG%;K)ag zH{6&5jyc|R)6E7X+cOInvcgPj$&q1IQ7sGy^0#<_yVAIpSQi z%{9$L!;Kv}e9?(CxnUL#0&O5N3pm{j2Y at 2#tV5%XHqPS=ATPM0Of%-d_Z)}Sym?JA zw{XLW5lAc|NuGC^a>EU at wBijl1_BVujP1;0$r%3Q%rlReFHCYvGva&*9XJ~rxlJ?0 zaD&SmQ+yFfly~`a0v2stl8ZOE5C;G&T)y*;B>+rA&#ZuaFo`S0h~wdNqe9hO_=*);0MRdB1 z&;`v~MkBMda$gMl0zd;X>{uHG6Y}sgkN!1OA5u&-*MP&#IPt(kjW^p|4fr+LtOCUh zI(+g7KR9)KLny5zbDs(OnlR3c at yx@@EBWxFPd5hJ+DtPWt}~C}-jws^n`Rc1#0N;| zp$9(x3G at UOq>l35I1C`T2dkmelTS?iSi{H#heTuZd#=Odu+29o$@uMQXz_?K{rER; z8+Fja2(QV+JqoMsypzvB{B*+z29vn?4SnXk?oBfg(;hZAZvcWDTJVXCb>tN*zyc;> zF$y%&fHOjS)c&r0SND7-Wim{DVgkc70_`)O3mJoR? zzztro#l6gN4n>e>8r_J+7?_XrA`pMb0|9ox!7OlrigDN?U~A{gWFMmFH|H8W8ofNb! z2u2tfz<>*!zyufI=^oB8k8Z5OTh3 at zJZKRE1{6pE8(>5-DrBZOc>@q(@B$11u?T47 zNgfZd!wiDaicxgq9MkYu5-bpdFl2!XT*v|(<{E<-bi*2}NWmn)QPeCr#sV9lfeC03 zgAKqT7}m%JHJou(ILzS+F!+QXDEALyB)|??oCO~gk%S8Xfe)9s1RSyegdWhK2X2jl zev%LjRHT3t>zMw<222oxB*Xxy2tdFE;F^Tbasn6D7)2K5V1x#ILJRm1NF8`!hD)>! z2w}LyDD;zsG0C0~{a$39xVj zI-r6Mu+j(*2r&@a&;cokVi5g6MhEhc0XDc{4lMKn4|t&A22h{@IL7b;5YW>wz_&m# z at WLGI00T7OK@dn5L?7^g1}U__0~w$|20FlD6;NOTqJV)t5Mc*N#K8?lzycQ(ND5eV z;>?tw#Qq at s;0HRW;mu&EK?UG?fgZG>5o7qlARZwKPx#prqDX}(MDYntEW!|oHiH?i zfCTU5!5DYw0t>Csg-Um!0t;9`h%+4l2YC9^4v2sO3ZMWD{8R=q5P$$8z-j{+fB>)_ zfUF0A;S5(<1w25)70j at NgZTQ_pvb{lf)E5B=t392_ysVQ4UAvNq6!9pKmj1&Y7wYH z*~?D0EM##C6rA7$8YqFdcR}u5Aj22NKn60rA`p4xfY?FEfe&nO3Sb=L7{bW6Fpkj+ zRX_p~e+YOl^sVn+0OJ%RXu=Z~eimZnsUHttN;oLPnIR~_29U6~FowZ#juTwp9Un%% z{(Aul5m2ECb0LCVP(%=3_#_8IsDTf5P=#OMJLDqAdB=s(i&|8{25_0nD_EWom-{3L zLudjOT#)g5gB<502gV;n0ERBar6r&sdPaCr8=wqf<~AsVEHwV{V*sNTg>b=Jf|7Dx zXuTuY*g|bM!vdM_Km;xz10*(4i(05+6ObT-+Tnt7%7{T5Z~w|bz at s6+IRF3z{5SuFi<=X~ag6nEsCW{<@(&;g z#KQ4^0xKJcorMF)3E<)bpE}LW4}of&5fcv%ZEpRm3jzP>p#L at j0PJjkWfsuCGFdR- zZw6!qf>{6m9SaD^%Ek@=^PS>2%`e6Yfr_ibY&?!Afa8A!7BC15&;#_R!;S#AA`L6x z5mk!k78-9nnX!ztPe}Dv!DlMEwm+AxK;Ed8jQ#Rz}?Z4 zrI?-Z;sp{q%$ktyrTH!GF16^#gKRSIMWr%sn8ZYjvMh1@!PJt4_ at KfS6pRSD@J#y% z;IQ&GBe$>Vx{ZqaoA~JDYeK`7hElKd8{AbF6DQn_JoVPchC&BYS?ej&F-|X2$EsR6 zkDGz54~>k*n2XQe92g64e^1+uzBN?|S?WUZamj?BR^^^Fh4E~%-bJLQ*6(g6gbG6h zI=_SoHIM=op}pDO`qNAwmt2XVZl{pRd8KcK2>Y>iH~%>n&sY9Liq;a+F6MDytjLw2 z$Cy@!pg}!c)PS_)8Sq`=$bSAGuXK&2hpupD%|6LGxfBmJIPXiH(=dRAQf| zKw;)0Hn|O7hGTe?S>qgxZYdq-l`itmcfN5#ZW$4&tDKi^gx)|lT6l0?_6-k7*wynWF(_5#~d2(Q%?)$C97|G3)P(Wr{~U zA1zmW=M6gSNP0VNGyl65Yv{O}BIDpc at ZC}?7i at O=R0ch3MLx|1B59I))q>b{Q6czO zn!pJaIe|`0MX&vX3LS6C=m|IddnY9C7;W5YiHWajoDt60N8KhT?&-r*%l$koF80>c zXm86A7-u^hv^|8%;tvcxXXkwK4tpZ|q&?PVi4D;Ydi>FQ!!Ird`U&O>%$K#P%0$tu z<=(AGj(7UWs%g;W4&k&hJb>1^}YOfC6iK=MFmZ%lH zR7``r27byiZ(E<+X)UKyesQ-9Kh2U$SX`KVZ8>WyQm>`Ng>>0DGYc{5Va`XJAXz~_F=Y^Av&VHkYD~CF*&40#37zM5JZK}v(^CofS zC!rU@&hpntiFXbby93IkMBU3<_f05Ts%5^|_|lU41u?$^s*{zE zT`&Vdh|2PFxHoZEu|oU9WK{HL- at PeUP4#v6d%!BpT_kY+ at wb&BZ3}sU at M5*46Qk?F za3{D)3JOxDR$!jB(O2pgG))-gW|&V#tdJkeXx5=-Hj(xcxIqR=S)O{EsxD)D!fC(F z%?OQz`!=g(`+JE6TFu5)D3e4*rhIw?&0^l1%4dL|X^jvZzAfeN_6JHTtB9=Wc6~=w zhA(Qa2n{!tkTxdqmhsLHpPzN7pNydD;e|XVnZdc*ffLRVllLE19)Iu2h)#Yj at C90G zXX#|`A>>uyhzRis9G4muiI|l6n!+8EF?1z at Cat03!G3ltuEi_oLRf5L^oxz$YDTAw z0~SelK^k>;YtK5cBOW<79mE%R>q0C}22* z9gOS#vh1*YFw`}BGx3BW2*Ud&N)LuoUpg$iyIt%_X=x*nlOqJxwoU0T`AV9K(7wc(#uhUow)f(7~pT!p)o~DcA>>*{U z#<7-iOJLmQ12~2eb8Ix67()|0?VE(4`by?uF5I_xjLj+rj3`=ab at PF%5Xt*Lq9F+Rigl zkLk>yO$khAu2=AFF(JEUb#bLC<{H9@@L*+^b-#{0G30dTm;be{#&)kWjqk28dozPJ zSNHMA)iqEY(a}XdF4IEO`@;t{{eZ27hAaA+GMrvynMUg_-oOJ|jmA0recN~C)rCdF z)33axjSwoN`J9Q`9 at BS@Kd*!j_zORqs4R5eC}1{M5PlZQ6GtW zzxAfltmtblU%P5lYc2D0rNR$<R-) zTbl{?Yz;W(I$)-On_KZ<6HuB2)cq;lvG-`k`F7UL=4mY(TACSJ at ENC6LMA9q9sBmx zOMXI(S(w8$UOXFLoRPWppS&I-|oajAh|(wa|y`{gZKorfE+7jdNqY~J$D7WLeu z^)uhj59!vV7L at DDX=Jl(`Aw`W&xmX+H1T51ynpSN6!J+&c5lsFmZL5YY+ytwXT;b@ z^tAU=%-ydh;$3npI;PJ at UC$NZ3%A;LxDz!S2kv~IW(T|Xm*+l&(PFsO6|d&CwnR|FkaJRs0(3G#@s8kAOd}xUNW{{^H_C>bUtXF-NaIS)AQ+_3}4=RkUTg>^LX8 z0z_4{vvru4s0~OWm87tbLguH1_ZA|V+x3TgL>n#JN`=BB0E(|m0D?ya>vL1ZI+T#7 zvv?X@$Ew?F8IoLLMX7c4fB{i;XUBRtr^iR5G7fTk3r`JQw>k`l##c;-R!;8_ko*qK zIMVeVy4kt}yAg#x<`R;U8&;;6q}DgbZOr_!qbR+(n)fQW$(-hrDaG`jn}1)IaI2Yu zwIAyNlLCFDeHJe!ZYrJOElD~(6Vi>2xXvXv)`DegZgilNRJOPNU>0s(;+=e(d!Vy< zC$q!#zH}C9v||@1Fn`b_GqOaF@*$&jYb)JaE|3b_ns z$m?&HHudnceePqedBgw zq{Q2m1%$#Gn3`_voRF4Qo$=L2$+b)KCAxe+t8j`Xh2BKQX!u*rr+R-JxL|TmhF!gH z)Vrn14$FSYA)PK6Mb+Mr=0DrETJ>NTnueZB;fb}9>Y7{NX^E(CRX#z8t;Jw(*`Oa$ zX|-VuUUv)$@9BnODUv00Vyp1;x0WG~nV%Ze4tp*F1h<|R-1WQfSQrH}WI1eO8$o_t zwhw-75vU2W8vO7yjFq}t-FEQ8xzy*4)otj9T5E5;lCsyYwlH4zbeSS{&)Ti!(fpaQ z#P=b~$B+;)IoD?nDzeczGxgcd#$NkJfSMX7Mrc2s!JX%JZR5I2 at eBG~a;zPWqJAzx zOQu>kyzdBby6_6@*iaizav8J}9!cfBU~8Emlp-*|!xF(aA!0j`-icQ34EX((*ffWd zw}(@DYW#koTR;hnG9H;*5M7I8PT-CPML{r076k$*O% zP#M^o3$5sAmw|}$kZ)7pc(jzx3|^xBY3r*zC;i2~ghQ4~rU;8~TYDEiD%782mK&6) z>u17vdJiwiubzyU2-<-(FoekAC@^g zPW){pJ0Eyj=mO)>6aC1C3WfBftg{7KTRV)ktb*^sV4a&92Wi4?U2AEfoO`CW1_j%aQMN6Ge!+Rt~N*E%3y64t8m$x6&*bBI>F|$#`k}LyF>2=9T3*?`}QR9$trLN=H&Hlk{*+ zR8FcPuS!ksieARgmFsco^y_+^e)s!){)W#dA}XB4P7MG!z>5_C2?1bm&=iDPLSRNH zJREIng)}3WfaWM03fjmP0}^m1)~28{4xkVK5)oL9Ls*$(I2gdv(%jt)u(z2E(>9b91txIg_1T97(JE zSdLg{7gsA1gTYOk%nqeVrVbPWFB-cpn!FXWAMs7e_BwYY#WKHEz!I)s)p9 ztJgc3r8=5Mx}#maI9^^p88m1heN`~s!Gqz?^j_t~p!<1yMSD7gdRZj8+lSJf!`Ha6 z8J+Lc0 zZd&WVVQqMByz at 3;M2;XLO&DJpZ=Sp%DSAuM)|BLmBxXfoSm9s zf^C%r>*ag1FBEK7?JAM(ljO-7bL8rpQb~H*In7?~@lwIzeHj(9;->wHhoxJ~lOmC^Fr*1FoN{QBNTWkFy0?hCaWOAlRatl!sEUp7!1az!b;u8eAGs5^Fe zuewokq2c>8hg9bdAH391HU3j%*@=Pu>aibMALttcN1N8(IFjDi{9R$&)04-JoIbvP zuV(ULlh5$clr!qe)2$8nPQ*PtCOFqtuRhgr{#5ztcD44ja`My`?b(inc9!9E?9+~o zS1ugBbm3@^w)OhumTQ+=UtUc3(I518`pm^^q0Qr7mp2e-X8228@@a` zGBh!AQ9sr>dHeG8y-UAN4nCahpS^eM!EckZGdG{k+rhUtPMyei{X}63j-v-*>BfK$l&12&hob;67H zWOpAgXASG at 55e1O4cx!T5~=kz#2QkISj#E(E@ zuvFcLnH|hO2m^cddJUGf)KPT67R2 at 6X#zVo_O1DMcZpYIN+TqQYgQv3+458 z=|4!IAkwsYRp*nza6-I+P{%fC`{LM?!6JdzuNI6ksNAVYz+Td&<2VZ{jlgGzOSgdG zNr8-55BAJQIqXP*fIz@|4U{+tbl3Ra?^r6cDSxerV=Oi#-tAr1X#`&9i0Q^o(+5o_ z{1>$Rdz`uUp|gJDp$es046R_ql{4%ev-$*yTO0f*jXUOfBZ(0M^~;fu2Q8LejccBD zB4JuCC*S5;Tq0@&0k1h#ckj=pEDOBG)%+2BG`+CW_eO?CjOlih&>HaAYvU at kpaHB2 zjA@*D&s=okyg7P~I|x{}?bEoGz0Mgrz4GW`C|^m6p>&N}JxE%6O=Wb4LNp0DTQ&$#6p9Rg2#Gk8)p0ut}yE`qJ6`NpTVG83l zdei*7i56e82FHb8?l1~Cs$sWg&rWRMl4$5``_y-b4qz!^GN~97xdpVd1>~Jl~?}C(*CjIR$g510P%c2Jc=a^_VF4EfN9G^8XRoJQzY1c z%&jCzA6e+w{Ag?vn>V4^xN`n;1^yp6g7B9Ck5bFIU*{T#XqcH_#}UV818qAO&yfDm z!~G2jO7+aVH7*?>9h^J;{iPxM<>`^j-v7lE=BArc0 at 6@VCUHybNiuDE&`eCNEY+q* z&ov((>6LIcTkXIXIfk(dA1FQA>-P%+p80M~wQ at e6iut=LmiP6Y(kN#Ddj@$k=n>Vk zc<*BT=Galj!HCZ9COvF^*HxI$)zeElIuA@;JVfN`jGRewbAw}5 at Y+-;HK&!R)>*S3 zK(Oyq6+bO5ky_?mfY^QQo*MX?fD^Y3 z=FEuUu7A3&^6rCKJakK9X-fG$#C6eo at eeq6DBbf2)S2<3wV$Y$xQ~``>N|o zKN5)kES-_3O5sAByJ#}4Tipuj+diF6*6Vo(JoBYM z8ToTSiymo(W9ViWLk+>K13dGK)NuDFYU{&IN7;)fsm2Qi*ec2Q#SzfT4L(rYnGTpa zP$T1?r#9^-g6=uHA!Z^f{;*16eKuci1T$Qt;xQzHv^**Yz|N?^%oDaUl)K>ug(b at r zsG+kjsff+05D+^6-DLtJqs0o7b}GUrl7~ssLl6}ruxI!55L>v$VnGLCFB-tLbeTzp zN($+f0H`G?B838_h7w>DJ;a8Bub?kD&{inns9qh+KZjZ!kC&TpmeMSP(QCi!lv`Je zK(kOTIz$acN%RWOJ-c9zDgZ?ng18LBoi#e$3KBa|?%a10TOyLN>LkA#f(z6>nvq8MUn>scS3P`1!Yz+_Kkz6p_NXEF(gwj0+tsX3u3ryOSC8S8E zsuoK66)^9}FL!MZ%oX&X{O#xUCHCzexdL%3p;{keSWtBd_!^2b at zs43nQG zbGwgTlan*#mLv3vH6Pv>r+3Wb at +5rAJ{_ub`LX3SLzsQG?np%?FoU-oW1|jMBb(Hy z04 at Z-Pb~|6pEf&${6t^*a4b(zvv&dcHUwRzIzdVnffm1{Q`KCQ4KWqLN`{p5N%OX~ za2A4s+2fW2axxx*)OMXG0a98etBbt0iN89ezKkj&A#Af`qstR{_2ehBZV$ox2lQpO zcci8{fNnl$5a0qsp6l}DgsMb^MH>azYzSM^d;IOz_aSC(O#gzNdYDbs$t|VAFA*;x z(zvQj(mYKu at q-p5F7_MQh~m$Av~1otH{x+l%@&d0F78o$+tbZ{*;J~pCfOd_xV7blV4{W}3Kf1_*v z!oq`MIt0Omx9ZW|c;l{oG+Icoq8dd}j9na!%eW9w3h(?IdrD~3SYI&qPWH7DEZ360 z3elEoAk%<4mXGe#Lr&2PFq1ff4&JFp7a0Ih1n*>8|0Bfps1c8|U>}+202cnM7G**K zgeqh!0G`qcaRU;C3XTB)D+xXhX4;bvf?Oy;jj)=;*jpfX%WQnTFoOL3sl8B%u;Ld& Mkf8t%fdB#j1C=LYmjD0& literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/referencebook.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/referencebook.gif new file mode 100644 index 0000000000000000000000000000000000000000..e350c282ac41058ba1f3474a4c6df00526c97878 GIT binary patch literal 3097 zcmV+!4CeDkNk%w1VLSja0O$Sy1^@s60ssUA4i*3d4g?S%0RRFC7Y_&r2nz=e3jiDk z0wo3j1`H$$3?3N^1QrV$7z_;)4h$^_0Spir4-pO*6AK&`02ve}D-sGD7#B1W2^tv_ zKo9^R83!F34GYH8vg?OBoFu zBrhT)A}%5tC?pvzA|NUy5hx`eB_${+B_t*&B_b+1BP%vCC at 3c@Eh#H09xOvIDOGGq4MNBwJTuMhfN=HCONJUsg zJ9#`UPe(jcMnGUgJ9R)ZG)`<@NkUUkM2SK&U`$VQNk36jQC(0>jzu*)Sa@$vMOs!& zU{ytBSVMJHQh8QQVO>#NUR!BgS7BdQX<$Z at RYXT+hK*NCXJSxLXM<{GS!rfphG0@< zXm(g at fplhJa%oSaTvT{yUUF<=Zfz~jkBDEe3*!SjgO3!kBF6!gMgK< zo0NWdnZcHol%bQ4pO$!moxiP^m4Ttke4@~IqtdM2_(ZkZx&(qV& z=g`dG*~H!1%Gul4=i$ua;@IKh-{#`e?&#C*>)h_CX>@2HM at dak04x9i002AyF#rGv{s8|897wRBL4o|< z(MlBOgbf=mB92K!Oy0qP{`?utc(EfvjreGdLE;69$&yG&dhvq9MjUAuITn=ZG3Gsy zD_KH8V$x)jCMuz at Tm!SF(VF*C4Ouy6B@!u5rU02DMT*d#C4s6Q)W}Rc;USM1PIV0%XlQZq_vrVtX?{A z-r&*m)~?;TblgrMdIKi|?SFT9q>d}D_)$wZ;fPZU0s!>DO+5Bo<3a!cWHCt;)p(PP zHrk8>k2m9Rc#b#cXv0l24mc2lEByr65hoc8VMR0IgtG{RV1zSIJ at wdw%yS7$~=S36-k_N2s>CFl}!X>3{r|X*CYS{g=4xi&pM?bKw$uqsCmpY z=bQsibJ}3@%$?Klf(tf;T%iOdtORNlCo#lO%PIbddVl}|Wr*VrH-j)Z=^~PpfC(?k zd;?;0 at M+^Dp2cW03LRYZafqrO`I7+|btp0niQI4_PCDyMqU(4Y)N;)x9biHvIU_cw zWQfmvqf9Z_;DW{xO!QICQR*Df#Uzt(1LA$|R5Qb(HcaB#JT_mHAcqs4bbL at MG3df3U;(R4r2|34a0PJ& z5~zd?f_S{37>VeUykzw3PJM$H8(zQ#7I at -l7wJM5M3xF$m at FOXXvPdEgaCE?1AV|t z*!mcu44*+`L^vCfHJn7YV=Mz3{*Xum5wLKFKCI0k@)$rJx=;&5T*H9kr~ttNfDH7# z at E0$(8P{b|}k-KwJ|-i(x#C8c%XqF|2`$K|}!!9Por0 zt~3xbbU_TJkVGqJ^rbJ^;s*&pKn6^3f(jrY0fUIgJc_YTOh98t^GJmW5>SBz1ONt- zXofbD0gY!Ai5hx%C6|&HS8T6nGVEDm)&@c;0bYK+lIE7hfV1*f+H3Ag)02sai$w7=_7}XfW z7wA9)4R|69fr|bE5yYU0Q=Fm*X^_Mw_Va}@%s^7(0aqE`pa(k8K at uTo1tL5EgD8C9 zxe* zD17q^Qhh at Oq7Vfm5CH=PD1ZV2Tz~~&U~6-!xpd*hDVs89BUAv2*)x82tdFAe)e+%7(nPkGoS$i2tWif zkbw`>-~<3LKm!_Zfd>%a(gYZQrU#&aPWu?aD-Z$}t3va2L>>J049)Y5v)SizlgQ1S5b)*WZ(oJ2tfvnV2oWj+Zev^g)y9Ao9q2U z9yJ(3wrc={8?53NzzBx8#|;crIKmNuz(XK%5$0W-W3AX=nk2Q;8Tx82Z-a4Y=dAAdJ0 z at s@CdDLla{R-p^UtNjm)^CSpCkV3%0-EM*_oZPv?BPYA-*kwCTV2>l>LhlmT1 z5D^#HfCey!dB$6^gB|e1^ApcbcHY5>>$so>4>^J5i!PgNTc_v;6TR&JaSvTIY0|^)(0|E~T z2O9Ym7Y!X54i78~1QZhrGYbG26AT#@1sD`2 z6Brm97Zw{C6CD~3CKnYi77h&^G9nubCK?n%69*F>EfpUrB^(?g9vLDXCLbUjP8SR+ zAt5Ft9V#UeC?q2tCNVA}A1NgoB_${{A{!+pBp)U=8Yet4BpW*-8$=)$LL(O`D=9c9 zB{L}|B`h>9D!}FD))CSS1%wC>%g7BsVb}FfuPSF)%qXCo?iN zW+oUmGbJxGJ54PiKQbsYH8MCfE<-UdOE4!WH&8G)LqRn$Ni{1tIX6BzEI~InKRGjJ zFC$$wB~>{yL_Rn_KRrc1G%rG5Q9U(BKSN(SE=xZ;RX#0qHz!C#GD}B0MMy?cML$?X zJWNPIU_(1?L^(rFUw=U}T1!G+N<~vnLWV&wP)|otPfcJ;PkBZ=K2&x-R&bC+HgHWv zT2 at VMQB7V~Kwwo?ep5$cT~J_MR%lyRMPY)8Q$}50Tzpthc3M?vU`B~oPiSLNQe}Z> zWnF4zS#D!vc4l0TVpgPGRfT3?R&bD^U{;x9R$*|6aBpXDaBg*QV}WgIcyV8TZ)kCL zeyM6+X?>M~eQAJwaE5(zih*N>gnW>JeT9UAi-mECg?N~Ocx{TUfryZLi>8=|eSnOa zk&J(ijEs_ug_ at Inos)H#m5q6s!i$!$nU;u_mXx5BlYpGQotv3N2y|<&qyrRRsslL9r!oIM`!mY}}sLaN)&&RFI$hpbM!qLmN)z7-s(ZbWw%GuMt z-`K?4+0@gVn3g4|J=_CX>@2HM at dak04x9i002AyF#rGv{s8|897vF$zk&qY z1#<+)h7A}nY^*5bC|Em$7&B_z`0t>|+xZwsYyJ)kXH}r6LjyT$g(@izp zWP`>akBpHIQ7MpNg&yv#L(Vzu#ByK&t&BG#H(o4}N;EpYN6$LmoI{Q_-DvYnG~VFB zgBp)a(~nH%D6j at 0vAna+hVI~UAOP6N*q|3Lu(IYl=&)m4INnr~rZ&gy;teTEV1dXZ zbH)@(3o_`ECpzb#;|?$fMgWhN^hguM3z6^=4LSZB9ybn#XLb|KG2ZNA1{Y!svgC9q zd@)BQ%(%niI(;5khKw^>6U7LTu(As|=!|pRfa9Dg&NI(&BaIh2B$0_SnQqjM0$)^8 zNjWQ`6OTJqA_$6>GfLxx29Z#+O*i43^UgeEh9l0v+dN~9H&Nsu?k4?|i;+LCpdiC4 zmP8pUJMOr+8@=%~69vB1h(iuL7|+AbtmJgl4UpB0<34m#}p%m;Xc*h6$G z8Xz4_G#I)gH{B_tsSTLTI57eifBd1(MonzdDJb()`(9~LfR`n`>_85IA+Pd_tlSx< ztg@}zWb-T=VKkzQM(4&6hc2jtn)o|W7+`>S9Pjc0zG#vYPdx3>6HYV(rwL{?-ncOY z8%TJicw-Vnu$m<5 zkdJ=s#~)uXohw$sjQ70_KS(=)^_s)0BRq2pTNNZB at 8$T=sF zKn_Vb#UHd53=p7U5xr2vJ>mhsb$|mw0Z75AJeb5?tYaPV at CG-|aU8_0BTd)16`RCI zg()=}D7)(&;F<1&)e(mF^HIYVfpLZM33I}XPUYYgd8 z(Flhq65#|au;3I7BS!HsQzX>+~)(}NSxPy$aR0UzaB!xp$u3QNSI9P>CFI?54?4={iM8Aw42 zGGKrWW)pH3n1nRmVH{n|fB_d^fB`&^2xg3<8DNS=HNv3>Gf-g%e?Wws1X7O)$RP*I zSVbb921}lJJ4s&?J3=)BkN at jE%_xOevJn(^tO4J1 at _`n;Ok&R+X zgE?l90~U7Ri7g6*7z at Y)7kaUZHzZ;P5Ez0UEMbW`SOGdN2m%}0{GbR3}4A&`IsRLH>q2JoHkc6SJb7;66b00H3sKnWp8fO;38-Ufu=y+;Q1C<{`mqcU48j6vFrF2*u!S1vpaBiAfCUiTfCMaH0s~NN2FO4LxCYe=X2`=1 z+OP*f2x1Q)-a{Lpz=9HBzyj|LK at DnP0SRQ;1|Jkc5}nXQC#KwqQ=Fm`naIQ=9x;eQjA0B|m_qOdp^QE> z;R;)@LjDA|W(E2$&|qFMctMVHo4n#u&ydvVZ^t9H7()5CJMY9qLZkq86r5 z0SZt+f?1XaEEtWMLS}p0~mke(h1;KnhGr%PagXkYIR)E=G8Q7I3g`WK_Et3tu)e z(tH63e5c_FJ&_K at D;{u?Ji!P+AOa2oQHxJ|+}hZlMIdnS at Q61-C;3_VK(Nt;)f~Yg zJs?61On`$kFoF}ah&m at 2kp&zO0pcbpw-Czk4WSpL9*3a8uo*M(g2!O#Coq8tfN*vo zyqq;gID#YO;dPq@!`wDFx? z3Jwz%9T5y66BQa35FZs39Ty7}86O!M7$qDHB^(nO9wZ(g9WEOh7$7St9}6NQAs!_w zIUgG=BoZ7ZF)Sk^F(wTwCM7c at Bqt~)IwT|_D>pzSCMql`C at eEAD=#xDDnKYBFf1!F zEG8^2EIKX_E-x)NEiPOoA}}#8DKkDqEiElGIw>?nJ2N6qFfCIrE;=?iEI3X at HxxuS zA2&HRLN_=@HaIpqL2NB8Ogs}@H8VdxG%`U~PCPj{Lry$HN*!zN?3D1K6yVsJ5FO at O&C^7OHNNrXGlsy zQEg99SVL53JymgSQy6khP*he^YE~IdSY$|Ed5cd^d{k0jTwQZlS4m-lUSC~{S6O{x zAY^21PH2i{XJk`rhLK)inq6F3Y>!oLmQ-<(gJ@@HZ*y63jA3wsZEtK+bed*yeqVBl zv0h+Xb)8UnqmptWTX&dNc%EZ+jc0a;dy!myq*s2bWqg=< zdw61gpH+jjXMd=Cet}$ruVaC)VS}l-Z*jwIZ-0S)XN9v{iMqgYc4LRSUWmcFbarNl zuVRU|S&hYCjJ}13glvkqgNTZkgob31!^3=iUy{makjaaTk8O~|i;aqMkiKk^zmJiQ zY?aTqkS1!E%5s&-ahlY1o5_`zlz5uYYo69|ozTCRDs`UOnVg at Sotk~1)q0}ca;4vS zrPy|*<)EUUcd6rlsNVLQQjI{8Fwf42IuHUgNhq&{wwYQ49^^&>vRB&y|}jNx;2r){p`Fh zyS=)T#Q&AX|G>h)#>d6a(9P4;(%0JF+1uFP;ojZi<>cq%;^*q+>h0+2=j`w7@$>NZ z`1Shy`2GL_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grqb z!DELFTRC|54oaLzvEo2>m8y(5F{5M06DO)vVrQ|W$$|H7ErD?YhRc^AU%LFEir&ea z2KD*+;WB2+o*E=1Sg at dihY}ttJW&-7r$l}AqUzIEt`49tGi1W>XdyubE{J+*Q|FGX zJ9pYlQF(&RX+aAwUVspgpb|ZJ2SDfrk)f}E09<;VJ4e>6*|TM9QGr6zEx!}b9UANBL+8Y*DhCupx7+wk6*DRzN#040YE at Mb^^lwBWMsIm^o<8j!`pRTDdxC zynq2aW-b_wwifFxq2;e0pacK}sKGzJXuv`ZQmBy3Ip&-bO>yV2XPP>|?4rvs;0&hC z5zAO~Mm+Su5kP<>R`E|AArzs-1-%@WO*7F%BjH)2fuoBqt3Wf_Xy!D5-$YgTa{`G( zHuBFBPH4e_CC8})jx^DLBcWN)*mBA+=Iq$uI5ac`q(46pIU)eX{PTepIwTR{gw#Nz z<6+6E!%Qu%G@}k-4KkPv6bF5B#upa+^97M4LUaHG3oNKyatv>@v<^ z3=&2d9mNeq{giuQ at zZi3j!`a+98a2q| zu>mpo>@$@&^f0{aBFPPp>vPW?gkT|q8$#b>PX&r7vdAEd{IQ20&npBcQ1F9ltRo%kIG`Nf zaWEoP;vYtE0Q!#MG+v;O7r4OSEHID{wxPolARK}W-~p9=pkNMvScD=Nfe1+?!V;7C z909M;g&JPr3LuDwF9_v~eq_J_{+ft|D_{W&T;ReLqZq{|FkuM}-s2wL0HG)3hmN78 zz!F$=MJP at Yid38;6-#h@=n_Jm7hW2!tU5v4=twA`yewLnKOo zwtL6}4l=tm`plmLII!U;K00{{aNh(t_c6r at n% zBqR|9Vmz at P-nau3zyObZuq_-kP$4BWkqS+mB5|MN#1kO-4?qwJ4*&3i6>=~JLrfwR zs6a(5lE_SB>_Q0m800>LHkEqZ;|W>VgCP3A2upC{mYl%EDJ*dYUXls`BXWj6RGANJTP95sFyE0vXEwGDj3-A++KN&3F1>MHE1h2S()Y4}%y4BL*=`I{-o;@OTG1 zCc1=wz=25jhzALDpaThn!WFJSMJPfs3SgMyEDmZ04>EC&s5}uWnc%^^W`T%7L}C$w z5X2z1DF`KWs2&iw;T5J}q9u at MK)2|@6uQs at GK4}CqnN}jq*RzTO^ggFkVQD)5e`S7 z;0 at 52hNPIm2|p}i5q|K)ApYQp6Qt}OFGyfIs_}(?ID-|L07RM2 at QnmM0|S$gDm6e> z7O`dM9K9d|4|s3{JwRh@;*gR%s4)vl2*M6 at T!bTjAP{{(;1Gv^#33N?g-_g~809F3 zFFKHmT!88YfoT4QIFLr8Xgn4iVfrvcpK at yZm!zTo?4_eSd z6{`4z1nQ7lXQ<)?bTNT;FK_`G+$u|jm4-Dk^e!GzV`<0e27}Zwj^B=E7 at OFGO*h~r zg6!iAzNiN+8c~UN^wI)s=!7WNpoJA!qP%iqhBX?*;CHpl9Lxa5HqJ3yxkYF+(ZB^F z$N+TW zqzd;qGX4Ns$B`hQc)(gH!Wf)$jq_faU0KSLJ9u#nFM}hpe=Z9ZEYJvvEWsZDBGMNS z9UcQH;L!vqzyP?wjBAXIY&HIJgpk1t2PuPzSa7;2Y_PwzQ`Wi4C}d z8{^1^gOSD{DKX;|^ocAtf=!1Ai~t5z&<91%P=#{DLmtimga8~cfqG8>0uXQj1t{$vk#N%f$v*8IMk2A+I u3G6Gcl at rwA9koA6#XWEN(aXLVDGR<+^udm0+(H%3rG+n?(Mrbz1OPjslRBRO literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservetape.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservetape.gif new file mode 100644 index 0000000000000000000000000000000000000000..14a56a96f2af07574c3bf1397ffe7c7b17ef2210 GIT binary patch literal 3856 zcmWlZ`6JVfbeW!{ zLp4_^9m~`6w2nvP=}@1J at l;Pw^?1I|_w^sVet5k?!$P>eQXaqqUi}LIAOJv-Xb?cc zFh~r7fI?tQ%+UB{CZ=RF0-j)sClSqvMEhj~qOG}wImMnrwOmFeSy8Plt(X>8ES9Au z+1ih>%-Y7znr2J0wWWL8SUWg6*e&;_FLz)%IC$FAoE+&kjzVWAwll*i$liXPt+kD7 zRG^cyE7N6-gQF|c!qYD1)(O`ij*Hv0Ca(U->X5L6 zDpCBQHjyYfF-nwpEH<$!I(koTryfh*TCycQ?Ocplymc^k>*?d0Hg3&Sq-NH3ZcdVB?%$O8 zW9E+S>#{Dc%hGPhI#;?qUApsFO7>B4&iF>zK$fgDW#>R%PFix#rA;~4H|A+>!HU$ByUOnKiWy2kO$5wI}lH9yIK&D{Q#eu{X73 z-?izIg7)U3{mlnU_div(+-^D8Tz_EV$f5F+tyvX^pLcY&cXW0Qb!Hy#+IOiZ at 7VF) zp5rGD_03M4l3zJfF>(5b{(&=>2lkygJ2-l_Z1`OD;LthU)xB4>S4KuAo{iOvT>tI* zjr%ulUVnDC?d9Ei-Sj=<{l?e7b-vTLJ<|Wa at aVwXCkGxq(SP_|^=77bajyN-+=0Jm zJ3hZS`p1j8Z}aW{zUuz|rssd}-n at Ok@NJ>*cb&1VAkT|Dvr$8nvM8>)8qRgr at 7Kv_~_a{6quY6Lkg$T(klrtTXf8 ztk>#HK?o{Nap3ag*%#MJhqC0wBg^3k5~rX7doyiPWrjhq+FqVz2ug-%5(8^IB+8jq zf-iXd=LFG~*E(73dFN>K!KIx!q7i{J`uK|R+mgkUsso*Dc|y|Ec-;X`N~^W-Re%4( ze%RE)1(!v5wdD#Sw`3|6wb?o0_s0h5L&vfy82>RP<>C9&_l9PYKEA?&NYWNMlB$FW zL4utJH-mp!fI!=_KMtD!LA}qal_r5^=%_8gjN4Z~SQ+dQ(S>-=2z1x?tou*#u?O>4 zhtQ6+xk^`RIQvs_|4jQ(?mt-!P5i)7bAltyXwY&hux9)8XQw4y`4kDl|YCr9xW z$VlB=^mZiF3C%F#ZK((}-)){D84LcZB5DCB#n1~e39bden3#)vFkx#Oza=rh?Z0sm z0YxJpQ!8b^s3{O7Fu%;+;>xbOq<1`5dF?y0=Qm$^XWnlYLx2yCsm at h15m3MaB~QhW z1oIN4+lWDF;(h@}{;Bui9BAUUKi}2Gy=88(u2<8rrrtFc%ir5oP7?3)Tmo3^5bs`! zL#4%0iSnl7aN!)&`M6~9CcP6I{fUAEIET~&15dgrj;jp3d1o*%3WpP#(3ya1~WZz at lb5G)YlX?K?f z#$~wqZO&5-YxJW-&I)2s;?y`PsKN94V4 at oas2=Xos#E62#$o%5XHVN}B636A|9;RM z74X+nFRwt(!{v>4{icGV{69T~e!Lw#<<{sI8mhSAN5s}u`xBoUYt5L~lsBnY9(YCF z5&RPICogo$i=h7#@ITMu=cDVF{6xRFaUK^x+r`mK z8*%6THr5~c!V^6Uf}?ZWeQ{jag=oyLJ

    %-5?(#cZ8c(m(ugXr!f7siD zLp_gc4Fk9{SpMXTnU{i7R)Zap7kKZA-w(d}+qgVWxA-7}bJy$P)4IliR$n_7G(j0g zI=5{4rc2&Oe4}2}KX&KK)4X5qe0i9dTI%z9=-O59mxqp)GQk$|6_xdT>McOk;t=fJ zlQI7JQmEIt!Bm^FK9Hg{mfP{{(J`t~vlHS<#|SZ6LMcZuQ5AGK5xbru0B+@&cx~ts zLV*eTlBG6Y)^G7$Vr|seR|e|^uu|HD`F3>;n`Ho&_&jZMRR&aP)0n0_3yf`8$&JERR(yfKWImLDrOK+Gv4 zNQx0i(T#wXSx}oGVRfq#*06`jR~=)Mby}FYNbBcps7|B& z=*c!J2#A5QQG>m;O{<_1r9l))Xd;-gikZ%@PXJY0T6I?bkMjwI#i@{c#t=NBtj1}4 z&d!Fb^lW2SSoW$-#+UeISfR2yivpN at kO(1j`FF4vZ&3jq#Fe#hZ9~38$Dlg&kGmrc zcB(ll&L|+{ih&}EmQpS1iQ0b=nes&f_ik5Pd;sq?wwUZ_^$Z;pje%USo9aKxf zbgdc!4nrw|x{81p7L48kk}Gc~(n$hDt0&&}l{SRLxL+H=^&!`(gPl=1=r{(^cJGWWCqjyv}m@);*U2-VN98H#J) zudGGvTwVqS^0g#D%Q;)t1uzoQIz%7niG1c?kxG**lSrOn7GKyAWIc__8S91Ms>8~u zqY?zCcLA4qLBC8d8{nj1|41>@Qh_m5AxzU?$EY72d^7GisWbWG^n2Sct<(Uc=iPj6 zn{8nE;+;hSq1&B$D{^zSH%4Ys!g(je at T%CG!>pMU(S;Pa$~4>#vYU3ze<4ubp_qb9~a9?F)u;o zlfJ1 at 0#r9~GSb@#V_y>}5|S##6^@Linn1=J;ci^{;4z!u*Jdd}Zve>>K^nFVr`m~h zTDPw%l#qScv>o-??y);MiylqPl0a=1k7TdXm*F<*hOWLgWN&>kf>(06+D8(!1-CUU z9HSWDpsoon?k4lqA*VA;-v;n5&txk=v!zHH=-$ff-=qgEhcCd{GW!<=zk<|rn#GnM zq!@DXDCLZ<>|nM%hNIS6n2qdgxMpQui^_L6c&3W|R)Vw;Pk5FJJ|$cK at h0v@p_gW< zeyjW+%BE+94^MVslX(h6SdEZsHu6~#^$oEsJ(#}g{X)QZ2*!^qAnjYIi_h!6*rFeI z%_zgH%L3O`Cc|CX19kDb?uBcL30GAU5(<;RMWVj|h8mtuE+W^TS?~OShFl4|{82un zbt~<{gr{|rtM)*NcY)f`C!5Xt064><5yLJP5Ps%|EJqNPvbW_nlY~$dLR}fjP(G5; zE1g at kN_K?+rzeczw=apyQx)A%q!@hf)pP=>0ZA$`e3o8Ww-BTRq4NN<>OKTUduIN8 zM99?-fC$a32}g$Js&h)!&{b;qqrVVQbnu`Nlgt8865y0kp2vd6NYH9^sah#lE986@ zgs;XnvVc+ro at tN(EP$!S4-yse81$C?2>Mm&}1c+;>(0AMv2NQeRJ zNC7xB0-?|#R54(w0G-sJHUS*vHjGjlw3G%X6&y_i?y_(zSk8__lh0ydkI~Y6z?vc^ zZybSg7eKTIvRVS0%Yex^`(DcTg^OV{B8cC*GyfBQo`?omuz3TiTI~?;Np<0aF4KUM z0WQ-awn`8(mTHGgg+e2X3{Z0#BtnJo(yWObfe8jUs|T!!lBl=|n7|0y8X$NLBuRs; z*V^DyOlD@`zB<5`24xz-2-W{Ai7a+%3iPJY-qIJ>*F}z&LcdX9_6jSU3}U4K85#)A z0HBGWfCv*WkOQP}xda-=!oASeC>98i-Q<<_&>D#Onj8xr5w at buoJWJI2Ee^d<~0zr zA<5nizQo?y=9;FM=2>#4DJkBb^pru;NzDU(0)lAuIR(TeLjzF at yXy(_qFJ`*P+Sgx zE2E$p*c$ct}3e+G$9NUvn4el=O at B1x;6}}eGP>4 pJ%@@>fpWf2 at _oWr!{Nh^2+|fTUW!Q}n#?GgPrYuxMkNA%{|Ay^3daBd literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservevhs.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/reservevhs.gif new file mode 100644 index 0000000000000000000000000000000000000000..9761c3e6b4b4bd05d18559ca1be506f5c8df20ea GIT binary patch literal 3642 zcmWmD`9snNS*}97H4UBFB{c^Ge&)r?u+Yv!QOwT5WXfnNN?i at AG~C^!f+hv2pUyZFvzuDDe0#06+i$ zhJ-)~2q+o_p~4U#2&W?83<$y%3uhq_?huq00fm5J at i;Wz0f|Ckkr*T&jiDe>zV;}B zBNmGzV2OA#hDf%@<6N;w0trtfIZ^B}Br=mqCXp#52YV`;WJhvv^d#C*sP;|{6laPf zjp{^o5KtYN{}av8jp5|%M5i(6lpuS&6P at isccMEx2^}4rT^LLk7L)17bhUSJ;R_f} zE=+eOi^<{egP3$K$DQlu%;C~FT(->F(ZkKx-NVPz!^@NBvE7~R#rN~(3;EuhSgxzU zhr#m}dhsU-b((tT&KyHRlsdg&S6V at O`u^R! zDl;?7+EnsgS;a<`BxiT=`6O{xmM%LdFFQ9YC#UdqvRsp=%*(FM(v;=qR%mm}wAy#} z?kU=vf3TpSOuM(Tpm5LLy*2yxRuz_%74NSsE5twm**$kaQ&-zys5?>LU}$bCZ9UOqG`?drzIU>-qqDo>^r^F_PIsR> zd#v|;Q}2cIAN1>o2J1h(*n07!!An=#hOb<^a`p1a at agNHzjx#F>!V}ix4t_4<*l2R zuLmp>=BeomGjr2-zg<|qxAfrQ)%y>=d-TJDm6g#)Kdt^~{nz8Czy9(2*RNjB{q^VV zm#<%JZO(6QE^WN|>+RoDn{TJzzBO;X-DGc(q7N42RTk`Fy|b^fh!q=`r~*xHslY}R2$9r_gB+3J8&v`df5l3TF>)dWbHp&?z&+3?}aPkT~axk8JxZ_c2hb#+r=7Q zyf<~~6Fqam0JoQCzwy?7Kq+UxFvp;Yjxk$hW4rZ_ z5=x!_Jye)4Z|mVksj=uK z>-6U-lQ9B^)t4CGuU~6%zRFeY98STv6>}g0Why at VI?gP`Z*8+aY;dmOWX^f)%-mPt zJ{p!8-ymCkiS3%;%q4jDD_4tXyPl;&Lx*TOF$BXST0Z-ZZ#08Lm-uGjr+BmFlbDF5 zsmnF^t|Bj0hjc}73-?cM!$tM-I#X^XxqX2dw?`zB at kc4>GlP`L}S7jE~F6F+ZCj z$ly=zluq1#`NOM;?>NL8u=X4Il7RRaGIq;XeQmi-cx!fIRCsx at P4Hz(>P?<|H+Okv zt!0+o#MrG&uDZJqs}n))$&J#m=Ov=M^p64Iyz9y8)mFhYZEfMV+TRXhR?jP&t9k9d z{WY9%Ps92j%@EEwqs-(dBc;4vgg8I%*0ehf0-rW`?HgoI|M~sn&L*<EO2E+E!dnza8fi3Dk=d?i3y(AS4%iOT9LY2mzX&Y{Ym)MY5N0v}m)?uC}7n4wcnS^kuBkG6kjtQ at y1;;Is z5pV3U3jnmRy0O>lw|Mx*8n zTeLi;JXSI}NF9^=^;_=NUaMrj3ax{dSlhH4pp&+FJ?UgzbZPG-L!gHcr&pE|UPjX) z-ui84zF5dVa|8B>73=v;Ilg{k?V?R312Y#fSA*TK+G<2my|@Rsq;+{U+>m*fbXV!& z0Jsb_1)j&8XvkzaKdNpFd9bp4`kQFx at qOYzoB-ioJqfY@WlI8tEOs1E_z- zDna6*3=>dt#XE}FdCH-FjlN_o2;eyeJ5RZ5WQn^rmvr4RGr&)L2hxU#&^ z6uLaWo4yac#a57_q(O}S|$O#)uDIXu$W?kcgqI&f$A zCV=q#8q8AuI$+0LsSOU3v>(dYaCv2#iMZcak2qmw=uji9Gn57I9 z_+-zx$v+)669zknPtJdj{`l`Y@@!{g=Ee$n%-Zl>$7 at V>#*pL9#Rl&bcB?W*now?4 z6U2vVx&1K at 4t%UE2o^O4SlPr5R6W1 at 1&-OfY#+&s9sOH}@knfrOOIam)k at e|;wSm4 zg}VxZLRxo5O7uXJ%{j`C4 at l@ zBA}j)%d?O1;C7;K9$2MxWOiRGEASKP>{%tdm5d5X7Q2pG z2k!k$#J{5}O4B&Un_%SE``IkXLr3Jh#;{NSI&xf8YxYDvwIC~X`?LS@{bL4nHr4QL zP#-Y`E+I%+G*%}yLIZkQ;c7ihvdfl;;eP%18EC4ij-&{Q zhd-Z!h9^T)C1jzM;-2h?XtCE>?KCe=(pKyWhruAzNzMzZ+7J3gb-T*q at PyTw2NJ#o u;J4jRhWHiya41KhN8SMloU;xcKULa&uEBO#i8>9o|4%&WYzGJe;r|CbJcddD literal 0 HcmV?d00001 diff --git a/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/tape.gif b/koha-tmpl/intranet-tmpl/prog/img/itemtypeimg/Seshat/tape.gif new file mode 100644 index 0000000000000000000000000000000000000000..793db8d7a5f0ba952d9a4169ca10f2752ab016fd GIT binary patch literal 3805 zcmV<34kGbKNk%w1VLSjl0O$Vz0}2fa2?h%Y4GIet4h|p~4Gt6!4i6Cy5)c#(5gi*B z79SQC78oHI85blL7#kTJ7#S)q7ZxEM93LJb9Udqi9~~DTJ0Br6JR2M at A00Uz8Z03q zA|xUrBQ7N)CnqB!D8D=RKd zB_%B`EHf`IC@)buE-x`LG%+$TFEK+aGEPS=E+#TzSt%%9C at L>AN;5SxEi_g&Hc2!$ zLsu^@Ml>=zH#RmnJ2yEtH#k- at Ia@G0VlzBgb1pD^E-yMhRxLksJw8!BKs`M_N^mqY zF+puPL0wopLPJ7EI6`VWLS;opLqz$SSdyGaM at U$hNm-&zTZ&Iw zkVaghR$O&lU0PFKfmU98nNLntUWlVkO_EbmU|?ocUzKTLPEBC0PGP9EOiEE=omOIz zRAQr{RZnDQV^C(MVP=0+WwT9Zv|nb7sa8}@XS!2ou3>42V`_b)TwQ8xX;N&tYHW91 zY^Ygmv{h`tTWh*`Z%<)wpJH#OVs5cpak5x(zfyC?T5-l>a;{%;x_xzBcXfGkcX at Sp zbYFGKSa{20c)Gr3Wny^7&SGL~ce`wPscL$*XnMn8e8hZxdx(BtYJS0ie}r#<%F=CX za)Z2Tgv^nITaboha)rs_ZEdg$$%V+u$H>af?az(m(VFSgmFLxq)YjAV)|2hnpYhq1 z?%R&++m-9yqut)y_urcI;gs^>n&RK&_2ixT=9&HFp!nyY=jrDC>Ye=Sr2p=x{PL;r z^6&Zk`2PR=A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyJOBU){s8|897wRBL4o+J z$uh;Tp($n7-t{|3v7*I_-6Rb;P@#be6*FASsL-*&fd*rMiMzmQ*<{EN6$b(|k>;`}!G5wDG~h5~M$aZ7eGYlrb4Jr0O=OCY=Fccgf514X;GlJe z5Ef&cx_Dv5N)W3ohRA3_SHunu4VtXQ9vkuEs6a3Nww+aNoJm>H8*hzu(_o48Qn zqN$7tb at 1^e=+D_w5oE0j88W4T0SOy6EGWQwfrJMiCiEP#!|II0Ryc6j%h#Ww1|r4= zcOm1&hYVmMsZw>T`K{%VB7ym_Kmm&;Rw~aJo45f{ul;iVi)e6{>4z61BHjAMzJ0Iu zzk0D^rD~5233S_vXd1*t17{W`WX*uqWU~5PQ&>{dVA^-paIOdq60Xp``BaR0g at PJYc zJTPRDMke_H0DOSO0w1+}v&}bDR%zuo;82+*mf&nzrI%TDDdw18UP)y(6j)=*6hioL z2rRthA}24w1S4lIb=somoV at gzODws>X^Wh&z!In}upkOcEV1xHOP`De(`O|`XhMfI zq|iad7oL0q$|azJA}T1SoB|3apm;LssHTQWDysggjtc6mmwZYqC|*p#0~VM*GD#zr zsA0#jk32H09eFIW$gpP&n?@RHsFBCCdBhRNv~dig?I3*!(nlNMw&86XZwS(c9NmV} z1|d{n3W+C;bm50L^wvx7GWh1J?=i_;nE at KS81RrC}!Nv?T at G-*_ybBGJoB{== zh`@458oKC1&pr9nlh4Qe=#vjU at z5hrJoV5+k3IB^yzxC8-$Rc+C#SrRKKk$@bIbYY zQ;)~`SYgQ}?UGXQCm56LvBw{aEDt^H#3QxTDx<72$x@#j&pPas40Fp>%ahMOCeNIO zD4$11zr^Vz2qjfkpl(^C)CDnG4H3hum|@u7A7_(=ESlwkV$zL9r*O$gxX3>}Va2JJeK<&Gpq=f6X=7SHJ!D*I?iM z_1=VyxjtD;a*6V!JR-^|ee5#))9aYyM-*IO(E|-pP~m?S05k#stFVPLoM8)9FhUWI z5QQjU;elItAQqJ12YYO7cVo+fB|yQxN2~&V@{32@))5UTG~x{x-~%bH00Tv|fdC1B zkql?}q7zKQ5?vs{6=+ZdPAI_}{_AK5J3O|Jvn8)rj}t@) zx2M5l8bnxuKeS~LkA{+Mn5D_fNnTrjkAyk z+=OR^Nqpjt?Gr`Yb^)~!PGbcndI1JPfB^%%0|I$77I`eLKpCWTRq at G4Fott8#V|;Adn!7e_X%`x at 5`_CIbdx zjNkK|M+cnnjvzci4>(wWHu&Joz03F>R1rL&;6Q<}y0m2Z*9x7lPXV8EM<1mFZNFxYEg*C>} z12xPdY8=Cv6Ff0cJX$OcyU<5Gx<-y^kO35vph6FPpo2GDq74aPzyKIP0R|)>1yV?D z2N*zF23VjGlQ8~*8Tep^B3Oc^qN9g9dhm(Hmf{SnXapH{aSsu$qq0?)geNS~iRL=O z5}fG6CMq%AN`#^k*cF6!w|fXn0KyU8ibEgdpoC~-&2{FWL2vI^3P at P23z6kpJHkZZ*ummO`0T6&76G2=@5aVGE9f0B!C$L6) z-y2zWco-h!;6^l}!Hg0=;~B^>F*A^H;%9K98ZeG=HKGyYXHqP0uX?}1SS&kheXT) z5R;e#91@`jVOzoxo>+yrSK$doD8jqk{=*-nT?1&e*AmqJgCa07i9`V6+k{{P8|0wx zeait{U)VPr#@j7ow}IH&6_+3g!3j<{LKK+jb|NMY2RLBD6P~DnG)h4SSor$a^ajKm z{=Be+6IkGhT}XM#wXkwBu)GT_{{qalz;c??912~aLJ^E$i8Xwj+P;3c#v7dqOjLW~ ziCBXdZg2w&yrLLTF9tD+(F~|JgBVzEhSsgF^{!u?>Q!$B4Bl|;s$_# z!x{jg?za=-5R|7x6ina+G3Z|DH-G^QiV=znARr2(??e>Mv21QpZ}3>Xl?+G1FPBLHCp9&ADf&}g&|eDDR#i{TASx4krOyE z10JA}+i?Ix at R3nD5FzOwO%NP%u at jJ#6DmNHRjC3du at z8RmK9+Qb#N1uAp%zL5lp25 zl2I5lz=}ap2i*XY6R{ciAPspLBqvb;AfX!p5C8|D0*0UrIO!7ofDf6u8T}wd%HR;D TFb1-q4Tk z&|N${{X9KGy}cHBb3M6>0;4=QKEA9t57r`|2tQw*ufLDK?-D=15T3tR9M>b%KZqaX z5%@0xg~36g!NJQi{JfI`{A7Heu&{)s;mg98goTC2gfH`5yfh+wi7DotT`RBw3Y|oRO52n<`zZk6xUXR9X`oR+%8wiK8?Lk+QVRwA4~rx-2b2 zoR+>$mQk=ey&yeflRhcBJ#qP()#Yo}l&;I#n4PU`NfE7Gr&yblowcr5t`M)wDN?Le z<>X3pa>{daN)M$b=H_nCTOYT+FsUakwlKe_FmH>ZpuAvxenH{p!opn}3M+cDQ`Q%k zZroT^vT8f|X1rdC_Mr>0ih(3rnxU&)?* zjV=2(wX~?3n-8?LD?8dZwznN>Yi~VvwCw1y?VVp6I*%SX-laa?r8{X)> zxr67Chpw7 zZ+h^c_ukaxFF)V->EVN4{&V%|Cd0 at YYgOM_C-x+rLP3 zTTBQ~e4P&<7_r at P(0#!JzmZ`>E_J$jDc^}~5fL;?05-iWUe{x~=jMOm<@>P%z1$s+p6yETm}jF$ke*&_oQ1lqVOt8R(49%%wMet(c>n=JRxNOu#D zbE>DcnUl-ys0bRNmzpe4m)X0`14dBhY?J%-756k?r+?L;1ycfBhz^~zI*`}tkLwuq zB+;p!`h4nJj%=e*(b{)Ig!CQt${KV3Ubyngw#encn&I!aOEG zPM81MQA?@l`!wyD$~>j;8x;@)TwfE`Uv=dL{2@~Nc% z>^@gtODL}F3`IjA6rXQ$-hbXD+#GEQJ%SRAj<(9W^qk)sghS+{IldD9(yJHfw=SOH z_xE1;cp7w3S{z8`MoeNL*XM;Jo;0n<(f6$187`N4McVLvBPq9z##<)5Wrhwm0N}_M zy}?%_eAz;eX+E$LU)}nCtnGLY;qqfcA7O0ayGAoI;6Wx&JHq}m{jq-HYSm-CaG*yCj9{zRUomD%{DbN)Mot|~F8-?jsnq;l)~IZ03N z|H at YD5;r%o%SmB)VF}8X4J7zUitoj^q=h`Iq$o%!F_gS1yyNuAO6hjr^u*^MyY&K} zh50^+YcD(9aA_bYIYL_RJRSl90I>eG8A2r~(o{8pY&Gzq%#5rA9C$_xT1%%%yG03&5{m*hDjEc44QeG0jEWTu z+Vj2K{i%Gt6#c{90$11dM?{qpMm&J}>n&-|rA4`N0zoo2-h^j0`;@V%zQARdA`7_q71d6IM4N|vd80U3UGKH%y?H+ zw{%#8+1gi4^Ti1m at 2rkR`I@$}W+>o28Nv)ACLLSg~YG0cAX7 z(_V^o!KYi$%1(FYpZ#$W8DmXVVu%O}RP*~4ceMi$Mi^NG7}$-uy+W6mi5Qy0h8l85 zGxdcU<`m_VywiG#_PIC4D at aqnvIFdVlN}rMO(3>v1w at 3B!*~tCyV@(=bh{c(0o%c= ztsKmCl?A zH1{i1U4RE=C`&Wzs?f*6^A8>K9tJg~&4kjQi-*$_6EGDM5Z3JH1>dMS8 at 6hy>p02` z3#k$A)usoZ{ja%}-gw~`ACiqWoo~kG@}rzu^XNlGTJ*rAtfDiT{>Z2cZdL60-K+cC zVdZd$!zL%Ee4@)8IV|M#YRRsL-Hh*>yZI3|xV%V%>_(u0bV0}8|HzZ>MaCsUk(m|( z<*4pNog7l;jFVSWhYZ8vcOGFrjEMkj$9dM`GF_ at wO~o2n&QFrOHf%4ce7L7gvwvv*S?)8{*>cnGCxLz7R2NgP>9&sMw^p9grv*^Bq-L4Nh3u!R>ke4@?|b==#R*3}aIQ{fP9SvrvDKIDjms4DMQyb_}@FQdRC}28?=* zum%i&HLc}6XCu~3`;+=iS=`pChAEAfoN;(+w5ILEqsWAuR+VhL?4&NZQ}|k924O1a z9oz28>2hE=h~5ll7YUK;DV+Ln{PnwS0~_kqE^S_yx6DrRGQE*dZ<({|%;hf4sgYLf z1ZZ>MUeHQ0ptWGvv2Z!m8~ry7dQSfo;as(u&8>mQ)r zBJj5gyxl}%rqE;|0Fn>gB}b$eA$Cu|cbRH;NnlxgXsW>>fnSXV0IVG-{u3NvcTMB3 zK!m_zl-`s{bghua64E$o5X1y3FeB>hb#(w+YlQDq!*?2L7o-!w&J%RZaeAN?7iCCY zEy42wF-w)vwJp?kJm_NztV at o(hi|wcM;Z-mp}^HGh1Ly%?N*RL6z7dlg3S#aC}?zR z0U0lVqRnuf-0`3pUciT5!h=xT8w)IC&uJYV{u#`q$0b#2Rv_V1U$%#BO5X;BdjQFVuhxNk7Wj64eez2#N z00=XwG4}fwx+b ezo}bns#SMPPGEc+i^XrE#L literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/AV.jpg b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/AV.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cca52278a2883ed1b6c99c9e148dfc27cfa4773 GIT binary patch literal 4513 zcmbW0XE+;-*TxgOR-4$f5|q|f)Ygh3s8Ph;G>Fk4R!eKNHEXm+t1(1P&7k~=@AR{9O0{%}lS7_+~l++Y|%^TPL z#{^Q4|Hb?>LP1GR1tg=UxdLEfW}yYMf*{a;Ai)0*p{60D0FYBs{WWib{+j>lFXrDh zKr(U)N)Qzozyy(EhTap9zHKCf4!fKM(EmMz3`7nBr~#bYZrDj)d-_DVr{|vS>Kk1c%-8j6m`U-%RK95KA5f35Smn~Q(W|TuUI*U1^E^S zlv}xvNw!b3eeaGVV6ncahtndPB=>ID?=@A-el_gghf;ShU7WDGvGhBm3nG1c)h+_zWMKIl2d66b?*RN~(Uj4c^SAsr0bxXB4dlniZ;C6@ zH%SOF#Um7Oj=lYirudv$14b>)Pd3=I&o*DkN{)uxB|F~ z1UTw*BKyHFqkfSFv1ggjL at Hs!)JyeP)GxXNJv?V&%HS)<#ii0lQ|dL7#xCf`RRaZY z!Qg=cdb;IuOJ7AHHt=Ei*mD*UHIdyC at d!FY}_hle7wxC)9VmZ*=rrlzN>F zRpc9fzDMJ+IvlA)sX4$+5wB2>SFgVci%dcaK7IU#YR?R5c)U%rZT&7P+JdrD(eHL` zwysompUW at tlWs8yA#)&82?ygM36fh+KCt9nPvf1y87l6fyn*!dSKkE&9gVflUa01b zQMFt1qXb#|lL9`D*P=&#u-ZPkL$eAW7W6)wM2TbOX>v at 4{a6F)s3S=>br=)BK>vt> zN})bqzhnC at PobU9dUInUGe8x$>a%B1a(oG>|FbsGqSj$|3CLZ^ zcCS?llX>GPoKc_z7bI(cSWC@}TWy*!4CTKyA0LV{V6PysG+1KB z?ki9tZ?}Fz+!$(4NjukMb9n&g^?tj_YR% z`Eo#TQxlELfhc*mo+z^G60iHZ)^$RDd at t}=X at 4_C>){$AwI at WwF?TnfD40DZA35~M zl;RTb1Wh8aY)qwO2Y??GkxP10 at sBDnRP_s+7Ilm4LBRDhw^M5hIv`0Rh+eY>+S~lh zN%@&JhZd&yj8--oHJ4xOsseNd;b at jxD!CvE3FRYFWk^kVR4ud at FbgUahk;d<7elPD z`>kdb~1kjULK}P|E?XB z(7kTmI1eP4MjAfVvebwYVL at 7D2poYXHfOpv~&wd#$Pz>zz#T{*b zVg+qGNzm;hTy3B+y+7}(aM&vF%Fue6G;$A4%DoNkDt$X at vz4=3Ww~ctG<@w_tdGzg zsP$^;$it7-VOIK{k48VFt(o9Ktx1&?H3Iph)mY8sSeEDLWe97}y}|{Dz^8bd=5wNQ z-edjh(*-!*SZ%qs?y&f`FEnqU6)5NKk?JyNT_CR6DSbDkfb$Wblr!aXw#PpuCc`~| z6OJt-(@$+W%x8A8HgbNI&EsC|PWt38_eo8{mSyn_3oP5Om(Q*B`X#~fqh6I_Rx)n` z4wZ!}2T0on#p$tWr$PfZ)Yy_bEt}se*coFCt*~`!jmE1?%is8^gqxQDSryL+x-kw1 zOGCp+g_E1{xD;tO4Auq01u~a*>p|@`Ph>6!ZZ*jrZ!5~=qzL46;WUXw6+XiB{u_?- z5pcn1@`0B$OMle+)J1x at Mbn3cy3n828#YLl_;#Y~9~N}f4+ za1$y*{Vyo*7pBvYY~%{WTqiFz6{T*z{_?`P^+ZE*jVp-QkD!YF9&Ic%5lv(n+6q5D zxYn~TO16_|rqdVYEO(cDSmSC?t^CQ5)Ec%z=Q<*2b|agz3bXC+YZ&@RPlTcT9zhJ4 z!FP657;LtQzgbO-T=wSNi+>K1N`7C(JvL7AawicJ_vq+9lC3oHu~86#MBe}QJ& z`1GVjFL2(dhSUI*{I(}?;VsSd2w7Wu(sMth9gt%Z2(;CZ?4)3EJPecY_edPzV9Ax$ zFw!+gNIl`~MH7i!Z%&~(=daU_1-2rVn0GP!xzoEGOjm}IwH(T+*N%S}cso6p8SX4L ze8S at m)7l9^AbXz;v$^n2a`&${lZXL9drx-<*`}AyEi#eC at 3ydiE~*FncTh7Z*37NK znPI0`&%ALJe|N4EuCb{VqQc2kRgAKk%VtPfxyfwx8jp0gu*j2V8aWq+6EMTvJFng3 zSQVRke74V%JDe(Bs!I`>jV5 at zF99jY?vU8`J=i7hc)p|>mRqH>1_eo_TzXtQXvQA5 z2OB;sQc=QTrg8Sa2R}7!Wxs`(>A6&20*VpGzra;JZG9MX%j_q^q0j$*OpWPJ)|O%M z*YUg*;-L0;2LnUD;Ro+QN^j92DVV*OS;~0u=TElUQ at M*?n?E}Fex7`rb4ru={cu)+ z-nwuo#ZfP|qh2t^4U~d;^zj~BUDR3k#3Q&9FZGFERxF5^gnoHFjm1G1!d{sw7)&RH zW3K)nBKcd-dT at jC+{gbC!0i)M{pql^V0gzs!A_&>SHlqT8iPAD8M9+PPr|j1NuSZx z5XH($N*j4>WHBkA1YT{j^>t!}tO>B(cV22p|{#KDe zsomL^VY#o{v$vuic~`lvv*D7bV5vQJrz|nT2Pgpoi at JoDU#;n(!Ec|#Ru!j@{%Ij2 znP!TDrIE53LoZ}|-VI6c!0Eo|*yGQ~bHhkwnbtKIP9-ojJDp?cd;#Rxv7Jt@)I7O% zX7$CYnrg7l at j^1 at Jh0cVgdl82!#di(TE8eyuTue?j;X~?i!&%zSWh0f+imF?k;!nm z8Y5yvsBnRf#^!LgQJ*cnM-rLNC0e#0JI4m*tGE;Od01O?eY9x87arI43xJC1-eJA@ zBR1&9Xy1A)`8?IS?ogCn8z5CjO6G8Kd4y95%zry*tkKJDjAQ@&%3h0u=ZwmY{bVO; zF=Cg|riZFp`;2=w<9*euw#tr{nau{_-*Y>}3#;p01bE}uK+XPr59Q!RYnB^l-G#Fw z+J`1N0Y5`Ta4KJ!?&(#sKK`uR_;s-H%?iZOtoIUt at 6C3>IP|G|t2QA64^!2b7OuxO zoE-Y-m&Q!=M&On4g!DB_u=6?Do`^|?k#4Pt+IrcGB+B$F`K7pGDGx}T;WVq%jNE`W zm-Kg-2E-oSdBSz*l;Di9EJ{;eO*;RU%}^%;M-UO*sNw#}49`;*H4 at 8R<#;-Pg}MIw zrncQBsa>JOQ2tDc$~dH%$`IQ6NerU#b$;VX1EDVrDD^{NjT zjQW+xVC1z#4asmC8OsjI_wkHP>hg=7g-Q1)EZvxm+{)1#l}(H6 z#&)!JT!W!f%@VMm9^V;ld;O$st5&JWwiPUyCPg<=)ulCM0VH->4{tH?w7G9O!{ z7G%e1zZ^XIG1YK>b14}vkgVUYCh+DEegWUj1^{zqs6UghUOgbi$1HCVvkIyqbta?I zX}8V0Tp4V;gQ~rxo at a3=>PR`H%G5F%c4-MPwcps)E!^E{_!K at ebP3pfT}EKST(v$H zA5BesVK3_0s3vV?zWGTrE(*)urK~tZ2$YYH_n7-1`Sa(0#k`h0wiT8QB8Y9-2LcgY>c;wPxjxsCE`x5Bj zvnoe;7+#Tdg%nAF!27KgwpaH;?1+!kWQFrI*k5+S7=Jk~wvNDxN1KC)LG?Ve>nYG8 z5^uCo84<*AO&4`AWj!-ck78wrzZ1g_pk>dC;M%z1d$?QI7T~dy9fpk4N8*iXG?erVNRUPyO!9JFKfu{d|0 zWKX2lul+y4^3Qq}pDP`i`Q!1y8}F~9 z3&Fd4b(nR8o$0Mzlgg_u;q2qWW0}hxx(G#w>8CcI7S3;145agsX7JE7KAC&i4 AEC2ui literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVD.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVD.gif new file mode 100644 index 0000000000000000000000000000000000000000..e72e4cd3465b0c365d6dad29e1b0749aaaa941f3 GIT binary patch literal 3188 zcmV-)42$zeNk%w1VLSjd0O$Vz00RIC0ssXE0|E&Q2nq%d2nP at n4-OI)77-8>5*8d1 z6CD*585bHG7Zw;97a|)G9~&AO93mbZ6(t=GB^(?b9~~bbCmbOrA|xR!A|oawCod%u zDJ3KzCoLr=E-fY;C?_E%C?y{$G$bfAF()T4Djz2+H!CbEEG#cMDJ(B7CoC>2D=sxP zEG#83J1#FRF)}bNGdedjF)TGeD>X+zF*7qYGCnghL^3c#H5foOAv-oJL^L)xI6Eyn zOE@|=Mm9J|HZwaqGc-FxGdoO3I66u=HAFf)OgcD7Jt<2&JwHG`PCPnIKOsFqL`^+E zG(%HSK0HrCC^$q~P(VUEMp08lAWKCzKu1nRM?_af9Xd%_OGZURNJ>{kLOw}gR!A*6 zO=46^HAqZZUQH=ZPfcP at A4^bDP)}4;PfkEnXhKqLL{no`R#Zt>ZfjI1Mp|`gST=N7 zB~4v)by^@`TuohGTuEVkU0z{vUNm50UwmLDRAYdEV29+gfwc4vWbX*XN|gtiH2>CwseiKql!z1jE}I4HI0so zagw>Oj6iLZz>$)VcbC6&nZ}rxk9wQKx|K$Kn#q@#m6VyBcb&_0pwxSz&zzl_fuhQt zpQ6K^Mti5)p`xFGr`3k1(8QutgsRwqt>LGrr-!ZFtF5YrvgXsPRE at IX)2v&Ix9ixj zS+cXRvb49_vtf|C at Rq#mx4E{Hzx0;D_MF1;yuQ1b!}yxT`=Q46oyh&c#K)h?|HQ__ zrONuD%>T*D$kNWx&(Y4+*3;J5+t}LI-Qe8Y;N#-t;p6D*=IG_=>*(z6>hJOH@$>NX z_w)Gs_x=C;A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grwt z(TnG9ojZE_5K5d#aU#84c7DKsVdDji7b}+h+2t-`#ghp8{aZP3A2~fRR;&OyQ|3&N zFJ6>6W)G#$e*RYe^EYsv9-1|8uE5~HK!OM&W=QRD=GHu)5`hXGDlncQn>2A^FmQp* zCuir*sZ*;?-MCp>&Va*8Fz8m6`clO_VN>Rd5C_yCJ7*4^I>U$CDn`dEjFWX(?cV*z z51*bDe8HYLVStFNaOeypR!mx*Ib+6T%>bpZqSnd(`q?XEbF)kpO+IXD7Ok3E#G^wi z_GXM2FCB2F56aJn+kC-c+OE ze{F>p4l%#Ta!qKViL=FA1T{DiJT_#u0t#TX(#Qsk_y=4#8iw;9V%PA3i!p_jXihjo zEGLj;D-lJI9WJgQ1~89k0mV0)u)@}1*=RT#c<4-n3oj!UcAz=pK!e6WlNGeh3oh>P z3?`2lFv9=<03ZT89qu=cH;FA~8ZiTkGp3;E6y^st4&FtOK5a}_3NTvKu?;wB2mn9; zzZ_O#G|?2+VO#qR=*@xXh*PL(=zQZuqCzPt5IFu3p725mO%#v?IYQxcO9)Vqh)y}) zM3YTuL7FyAFa43~E3tem=o~@uVdj7U0a#jR1(U$@k2`okVOlo%Y1d3R-te*tF4KgA z3ofIQ7^H{UG;@Y~Te*tQ3m8=JhcIOjP-nFP1Teq_a7-f{x!HJAt`8mHamXP~jNk at - zL5_J~HPAEz%@F!L%MUz%2w(#}Lg^z+76k|}fC-84mawwkK;wr8$>6gOKKbO6P8VN< zQ;xggWZcZq&8R^RlJ at NK!=;xNz{N2g?{mxTD1*3~BsLXLobMEM|#QrhDEKxw6mj+P44;xGn$uz}v0tXQz8~{KB z(0J1f3-!=rIX(E`qfh4bpztGVKFZ>XE32&X2_%0=4MPFDY(-BjFx2@#9*y)d!5nJ1 z(8DCmfD$kOUChD at 9K+0mIXHDl5y(7a>od$0xUeGqDW6EP$tICV@<|s4{2KrVvEZ{3 zKCv*sKpbS~z=aL}lKf8#b!KtQ9H`JBk3IUhlSeL%&>_a=_^3w&JfR6nSi%yHU<4$r zw+U1 at Aq%^3Kmh(FfF-nn04ci^HG;xE0JLEx)Bqecz!8RCj36KQdqp?2VGTlB&0Eq69lXUD_IBA+_4fF1kM2nV1X(upbvZC zLxtMV#wg^#3;?3w6Q?)@E at VMQT(|-juyDl?^x}XYOb`HEScy9(7yx0cqz#vn!8THn zh5|Hz0xbXn4>X{P5!54d;Gl&zut5kb%wu!)umCGQ!3tdH!WFXE;VMjliY`zi3;a;x zrKGVEJ4}!O`gq4N0#*P8WFU|@2m%mf83YJ?;tMsy2R(c-h&O2B1*aHUt_(Po#pptj|?NSI(00~mSgCYRIn?L{p4r&n2Cy;;-!RWy~aHcuT zwa!VsrG+$3Dh}xmrwN6^W39B`)CzNLa!XkT?Y at 0FjD+lz{^U zKqv_wsstYNGzdmeLJ+)3PC+sO2|?h&H-Yd3A5Z(yVi{B>%<`y4u&6~nkg#m50R^?-Mmo3= z3KsC88rLvQG*|%%O4Lvij-W&(UO*3jq=N!f at B$T-fCRgWbCy0WLJ*L^gQ3>Ir$7)Y z51zn;1zf{G=J@`_;)pPXL{!6P;n0yfvZ0GlP=XQJvqUIj|PqXATS0u^N0(;65- zv_ci+ERi72(o*-cO2_~%V2chMeZv^HwOBdY5{_a>ViAnkgeL at H2!ZsY1$M=O5;!|l z&H{l6MtDL`pTL6}2$iR^1ZoQsp`Q|EBOKF!hJj3#+n*Jx8LL=?BRmlU$Or at t_bq~c zdBB69A|a>{?P*(QInHrDfwbZL!hybN&i*RZ2qqxafedsFW3;Qr;i&Ow%+U-NAZj4VpnzP-8HA)J zIh;zKul^G3%48gb)6GJKz&G?WF`qTtr~k~WrQ7Bv&*%Y-5rp}w26ni`I`rX>_UPj)d_js3M1c)!SVI}D$OI`G z at rE4i00uD_0t+sX00&e+^N-|1qITlB>?Cs08gMDYx4D8m++h&`O-AO#hmzBXB) zI_VG64{$6YLYQ$;2vl%|D~KTpI at m!7Y*QPX{DB_3x5!uIBcCQwe+j}cN%SX8LXJi? zUna5wzxey|0z(*S`xV&-IF7=X_5&X&HnG7ZbdP?4Xn!K{5QZUs4}R41WeJ8r4Z&7_ a(YFur01nc?49sv0%s>s~01?p_5CA)GqDL_R literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVDreserve.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/DVDreserve.gif new file mode 100644 index 0000000000000000000000000000000000000000..29834b0e2ff13bb3974a4a793fe4ea23d4bc0d77 GIT binary patch literal 3153 zcmV-X46gG>Nk%w1VLSjd0O$Vz00ICC0|5XF1P2NT5E2g#5)}&+5Ec;-6cQF06ATs? z6&e;59u^876%`s99~m1N9~&Aa932 at SBpx6hA0Hp3}EG{r6 zFFGzSEi*ACFfuPaF&Qm1FfKDXJ25gqFfuDOKq)mwGc_|bH8?^w7eq2JIW;sqHZVjq zHaIypGdnXuI4LbVOENl3NH#PyJ3>b{IY~J at OgcA9J3Tc)Qa(XBK0!V`K}1bGKTkb7 zPCz0!Ls~gRPfkKCQ9(maL^MT5L_QN>5W_ zO(s84XiiW~Nl;x%Qb<%!PDE2fUGK!j&3 zZD?m at Z)In1c3N_cVQ`IZaBX99gI;o!ZgF&yZZ3{+E{$+CS$3Ccbb(`bjbV3`g>zGM zb#rcZeQtPdXm^Q|bTe#wjbVMBaC?YxesgMllxKdLdVG0$e1DI8R-Ju4V}z at Oe|~I( zpm~IIXoRMCg?WL4fOLhLXNRtAh^lIfvYdxnriMp=je>)Xe5Qv{ZH~5djj)M}h=+`i zagw=hlfaLWj)#?riK5Q+{UJ8tF5YrvgXaIWuda4jk4jdv98dr zZ;Q9TdAzRb?c$lAl!*xT3H*3IC|(BQ`1-`v~aNY z_w)Jt_x=C;A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grb4 zK{NL2m$7j24oaLzv7*3z)a<~R;K2oqk1jl1aAC*TJ&PzO_WQ?j;5}6^N~lobVrEU7 zHEVj{6E3CCe*Reg^C$47%$YQCs<`lg00IXcY)F;B!d66|5`hXGDo~e-qc?M2ATZ&~ zr)TKUty8;hZ7nQddSV?IbZbj_Rz!S7YSTjjG04!FOSg`2;kJm=^}^DG9oD*b|M7c= zV=vO0A_xqjB`zId!-zw#Ggqt_EgPWrS=1W&Uq5y*kd`<~0?LO?&7xIPYZ$a=#NLV# zBi3uvm8)4J*L{7IZwV-SJRlplEt;}#qC@{)SFJR$X62gx6(N`0Za;o3>&0%aq6eNq zFP at nzXRdlRbJ<0wE9Q$>F>&UY^NkYO92D7k==C$kOdcpO+Z2xsVgfRtc~i}W`L*Sl zIK%`)3pSp4HVziu6m%d#x`-gc1cl5|LKUMp62m9>^(M}R;^b!-Hof3d%wQs#BTf;> zLB7>oXxgPC4KBTaI9Pz at jMK~)14TwqKe}AN z3_W*ra!nkW43dBi1poj*2W+KNpETYame^>-^fwNfhx(aLAJhn>ra=C5(*``?R3LyG z?yRta8QFAW#sB~W5KLhrMib3o8n#tmf8GR`&N%*lj+V|hO*pz0lKy~l3O=a_;42XL z46p_{b?IY^2ug&QPC4F0vyEp!jwX#S_qnPpw0#t4mp}dNvj#Zyl;Nwd58!iwo(NR( z&Oh(ep~Pt0%tu`_;&{^wE4WA_4lcN~8X}MzZqp1H=-uj%9qzaz!?@$lvxJ at j=qUjk z()?EMHs07PL`;y{u^ zJp0tcjy(75vrj%>s4))N(&Sd!FuBlzO8y$Utn?2%b}+GwF4x>)wE(H`q5~Pd__9bE zLxhm01kLP>f<5(QUXRd0>thcHK9<%aEv~r23M-#T!UsRbz!1PMEcNs4;eK3`Kn5MK zPzf}k1Q78Rwe-TqG4gC4jviep18{*V^{8^r z!ZB-cPR;eOM1r1HETaZ0H^kHSJ8-}fAsU_A~d?)|_{_FY&4?-0H1snhctDwL>?xBwlTEiN!*aI{=$AV9o z!W6img%)w)ioCg^2ry9q3~FYDzsbT4R#TW2s8I?t1YiLX7=aOd0D at J7z#c;D#w)Bb zjYoK4d7h&{D?ZT*T;#$Pw16QiNP&tgK*I|BU<2;@|~pFpnE8(8LPy#R}7%juox=!aZQ{4?gJW0Ott at 4yYD0UKD}` zNg#p`JXr%H7{Li6=)*9IkPn~%ZF54~+!e at hh)5Vh5(T71D^P(7T5N(3|F{4 at xCej< z;2;18SO7D`#js1rVgyP4aArP1=}a2rp&VkkMbPTuHht8CiMNOXD;6;cOh`fzlE8!~ zB=HGU{6Q7}7y}028OLQN!3TwiMa=HNj171c3CeWlGlfu%Xbd3~2HhMgLotMJcq12^ zkc1{MVF^oMA`+G`#1*LV4^?cy2>CPu67uPT9-O0m*N8w3YT$z>AmOS>SSklFwhcD0 z;1=9a2RA~2f<9CO8>5LvDLxL9mDZuE^}Otxg at Xp1k&f%N5m2fpeX!5jrT`N35z#ipQ8xg=s|`XIGCsDTrZuuLOlAwcCQ$2h!E4rwT(Rh1pbH~_SkbZo;HllTJ* z2oj1;(v}E2SgH{$a1IZQ%K-fiWq_NR+GQdk1g;7YfUr>ve at R#z5(bSqn$ZGK5abvU zNJ4-^Nn0nRKo*7 at S74o>%o^C%lSm!qH|Qhd01=~FWumfW3j>J(yn`U|Xh10WNra at f zffpyZ!~QPLv1HnQbdH22LIl8rG%~HD7|ICH+$ziG!l0r6V<^Zz7T|=#c2}t-z=u0{ zaS1#8AO%iP>Q(3HgB>h00wYr}mDkaXVo;fE^~#txHc@~Jl&By)*n)_oiv&w=;0GI^ z!3Zp{fhQCB!!;Pe0)((wSP6+c#Ms7-C!Dcuq at e&RSe-%mAl)a}_oGM{0S|1k3}Y;V z5S=uFtRt|14CKKT;JLA$b0iH~G=tcpCPoV$pn at Nq#2~+bG^?K=T_2d?7cdimD&(Mn zDa7GDdsqP-s^JX at 8+^jsxU4IBkuicx)ToJcq1Lob0k=s2165e<7YYdZ6M->`OgthC zCXhlau;C4i-KQM2_(L9UP=E={rUV}Ng+(fX0T|dp7mn%WFRZ2utM`Bs(+DBaGf}57 z!~g~?m_ZRxkO2fJU;=tUiU*c47fAhM8NXn{iFJ{enUufs~1L3lyL*>jWzR5iLPpB5|2m-!eDhiwD{&2mQI| r0~&mQ!3A1Bo60Nc2bGXZ_hbJKW2hn#eBgr}?7#05CfIuKBTPj-sI9~v`Z#_hK0f2#l z3_uV3hjTKZ_wUtz#lMpOO7L&_yaQmP2UGz~YLF;E#Rj5g1D$sR0sufo4N!yrvljs9 z82~y)S}+sM-xS6QfM}=zfR>7en&E#>XsM`az#uw$fPsyJi=C7E5 at d%_bQG$jt8WpM zT3GkDBMAE2`Rn|D=%}b^=>af^hT(54%LY(UfvEpN3;MsWpub95FdGD*W9Q&hq8HWW z;)Yoi21TBK1}^*^M#Vj_wPJ_q;Q!XB?bvksVyy>RF;RAY_d+;tb zrN(Z{mo;X=_hyV*&74n&b1o+*b1IW{mrXTs>zLk--sZj&%+G?Gn$~e2%P(iy#E5TW z;vl^7!iuHJD!-ivZ;V#uO1?5Bts;%flv={?s{|(*GS*Oz=O0ONH9A(V88yjpZq at jd2^jOlv{!U|WQIUbMqItJ%u`A~MV~Mqb_Wmjd+d{V#mt>bzNWo1==`?{OZGy`i_k+@`_x9Qj z3{M>Ir)_GEgxB{kg~wgwSMfoL?e;n7OL(d_PUi^cfXLXa0#vg1#^(+OE^hJ6($D0| z2!CfvZ?RDn;YS{Tb>)}yZh6ZC7fhQrY*qCO4>{6xi7_;ai&fs at 7|);doK|CuL|-hz z+8?%ecXQ at IE6TgEyf|`1CHBtHNkfPB;cd?`IHD_4B)a?wCobCx=g;E095%*<3}c{Q zNJ?(wcFjG!q;KQ}d8rvqt1;JjuQ|?Tfnr8#bq{Z+; zzd)gbrFVRCQxPb}&kv`WOqbbMTE%wYQ1NZh~hzO{FJX~$u)wBsRO zr%vcYxk_)pe&?b zcMW~zEYYgIK}65;de?kAI~(80_kGjRxU-=KKc995rd-onw~;$5W!@9lChk}0Y4nqA zf5xiP?@K+bJ(|zl4QL$?P!VM>-nS=*p49z0>&qMZn%)IhrkR z3d at qHjG{De9t$ytZn9RfW;FJ+Bs;bh9qn0C>Q;tR?tQ5m*HiY9V>H-aTaEfDQDf3O!A}jr~=oAD9us)K(A#Sck#)eVB-T>>j2-8x-5$) z2pzm};kxP-?<(3y(GqzPp>N*a%_s&Le+zB0e%9H&X8uMalB00pk at 4v-g3~#$La#S; zJnP%-;5}p2RCo0VEnQrYu9Vsu{@vp8a8fqB??MdQGF~+;h6WpWcoOKu=V(}#R3U;k zS?(1*IW&2Z+HkniI?JW=2?8cg>NtXxvRT~+ebhUY2GxYzEf!s+^3`GEjG2Un}h`@f`T- z9WBg#w_FEzb5F|Yw`^BERay0OrB98AC^V0w(q`^u)cn(b;+rbt zTe~C=E=-Gz`MVB-WxK?ScxNiAo2`@%F|g+My*OeeU*dasBPFIr*hulttMvqf}%$*IPBn9s;^^ch+%$NDu%~&RAWx|c0ltf at l zuQf5Xw%(VFo@&lgdN4=IyhAh-smQ at oY$-sp1S_Q^Y{AeFmx{3sf!* zzyAKPH>2??xP!avS+@$T?6odWFt4jG*QcQ-h>H)t1YrsrwDq+8HNE})aP?|uLmDOi z8zYHjZLfiSa75&fcPx{|KGgD?f#=$N znijq4q{eSLGM&}tMmel92UjD at A?eJS(fSm5VL~69*cWmA4%n#oLAr^|g(IOzt$(a} zIE^tc!!@A+eurmyd|{U_1x%Bcm0DVSZGNIeG4FMB-FP(@YnS0^^wC#zzB_D!uZW&J z9DP;svGnZQqRLV6mg*&bUu#5_YfhG^DPwHqBRO&MIDFem99!Km;+wV4RexD_Dr7-m z5x>o8`Qw4BgoNre>(x`Qsk87W?K7B?YSGJM1+U&a+AAeI90)G1xTaWi;SVf$*^7*Q zh3wKNw`|H*~-I>Wrvew(qkTuF$zWbjiX2xglITLGO*A<(>Ws_yX zD at s~x)HG_~N4yT=Fk%H#adt_)sn1_3^mQN at FN@QF2P4_MGX3<@*hN|2R4c$e)VSCk zw>2sLA6$jewT5GlF|Py?Ha!`E-$$)=<0kz*M%f3ntP{Omc?o3 zXkiqzMkz+49+zTt%`kpIoz00CC8c-U7MsnSjV^Q3LR||~MhhAGK?{OsaHz{!O5I?i=Q07o0~3lW4Dr zW42jCN0<9WG!-NaUGw?C#qtHrU4I44ygnIM**nW8BnpkzpAdPUEG*H!V$qiwHR^I9 zxU9MHmgy8{gDiJM9ik#>41^CO18WJ0j&40pq0LI(;MG8I&oHD;McN{p~uxp_UI&mdxMmBe?uI`~IMB_Ph0kYkHSPUMS zM;lS%D_*)?oDd36k0>@oRDsWaq^Rm7?vNIF&6zErW|8qJ%xq`3-Ub#Eh1u_BS(C5Z z;hG%V18^wX;Q+E=aZIXzy#{4 at VLA(wZ<%W4Bh4;$x7F_#Cpl&IxO~q;MLa6K5bO6k zhCMX1rw|RAR?0<44TK*@%H$UE at Bi>*8gY0;;w-ze1skv&SoXxA z&w@QoJ51%eFSTDAgvq9O1%-i4m zqJ)z^TFpi)m2nxbJ|&^1K556(O$!LysXR5#cqIMDma*B*Zj(b4g4EZU3Diwf!%O+&NzWg?kTmq3iwe$^ zcwaOss}ecmC>6&;w=d|LUDsBJ=M9-)Q*El5s6kD zJKscWnA;sL>1U|@8(lHNv;O?+EzxAJU;3MW7xVzr| zs5tDq(H)=glyHT2Mf4ux_IQTGT1^k|9fHm2i2UpoNt29&C|bjm2n#)0 at gW&&kIpON zhNzC6Kmb(B59*-)c9BvcW+0YkAhu<&oEBlAofd8$;rY@;lei+UmEQb3J{lk1Wu6DR zKZ&Mx=8okE_q5G`byo138{3c~+x$V6L?6fNCxcT!Q-ml-KoQC zWvD9S918eNO{i-6JCo_^c%ej?|;HRC1{V={(i!sao at B}QY zpAF_CM`z*~-b*|f3hRMbG|wYMVT9h_QAPW8)b1@}m!Mvtr<#J10z&*@0k1X$iCcY%KDd z=Em97M=vsc8^T}?BN-mrov=d=F<2s7_f literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archival lDVD.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archival lDVD.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b278cb4aad324760ccd336bccfe8ad79f79e73c GIT binary patch literal 3126 zcmV-649W9HNk%w1VLSjd0O$Vz00RIC0ssyN1qKQS3lI|&5DyR%4;2;^85j{97#1KI z4WnzV6F??n)d}u06 zaFK{-I%{oei)l7$ZgEs}j+JXIkZd%Fa4nH;JB4#HQhAw`a50o|H*_e$ zl{k}_o0gcBz?nS5n>U=DpuU|zyP!axpqe$o%%V2Tqdv)|K&Ggs&8a)bt3=ML zMA5B2(ym9h0+3=k4$7@$>NZ z`1Sew`2GL_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grte z!Ap1T+BbOj4oaLzv7*3z=|)NM-~ok47br at 2AoD7n#gi2K{aZOu-!LR4N}ND(V&;jM z9%q(7(rX^dpZ)x;{O3=g%N#Os%FHQp0)qnv4j at 2aK+d;)KPLtqN>pI995-#+3^@To zj60@`Wi!XFtvP6)vP6oPm7q|rEb9%58M9_h6dnu^fn`oz+rx<4s%r&Bj=ZdQ@&4l{ zPYU0fB|>H}V51ec#GntC`}ONoi(x1u^9jTbLn#L7K80&k+^e*9Mc>g&>%?~FHiJU~-Nt{gSn z<)$Cj6-yVdZR*g0%ku5ucY#EWa?@)`K!QgG#u(O?HqA&QjeP8QL*FS68m3M;T)0!v ze*;~ETnRH&f=36GD0rAR)JWrveAdKr3NP`sg$_F7_~4U3s&zHcJ+Ae&0w{uDK?FFT zn8KD~)Ff#lXw00F$~2;_vrakC$T5&)1-%kdSRrU42p$B$FaQ7o_<&eB*f4_)ZtCPx zUySUOV<9_-m=xY>JBCzV9+mV!$2Zrw0000Mz=D`Kwk_FKIW6jfO^oBPV_1CPi~%55 zMGZ7ec_>7%0s%Yftx{qVUYQC6(+M6hFhBsn z1^~bl*QgYa3#T$#PC4UPL(Dkf;9?3c(|B{rDcr<2>7m#pGsvAoEM zK(Ol`utXZh9L5bc*l4rOEihQnM<$s(u>l&#EW7B1%Sw~XG0Y6H53T~qBgX(a%rlfe zy=X8f01X^+OfuDM6K7j#Dq?{%_w1w3$?s?Z1vqe);|(*%YI?t_T2SCXCt&9iO8y)#G$4QkTQH-|Gak at W&*4^=e2+f%h=2<) zq{&hWDV%VE2_}yaatS}z44k128DzJ0H6TE3IG{| z@&sU^U?r$n7a8^u4K(E90#eh*E^1K=RUiTn-vHhU;J^n*@b3{Qw8Z5wL4z(xFM@*# zz$Magk4VG~9{+$xu$JLH1O`9?{tKu;3M?Ukeca<78{{A)1aXa%=|cql!$c`UAqr81 zf)ksl+!3OI1S!Y?d_NS*Jp=%(C#*yc!Ro^kBme;r{6Ggh;K2qgae=7a;~bjcAR at 3} zM|(to6PDmaC`w_)6-vT?^~k|L>=6Jmq5^`!x`Zp*P=EwfKm~Brfe at HL1s)Wk1`m)# z6i9ZDdMKj|SnxtP_F=VfkU)8u5M(SZhY3%3LJa;W!9QHFE&(WH83t%%5LqAt9 at Kyb zRG>l;co2jd{NM*dC_)8bQH&el!- at Hr$Ks at R4=qGt4u0^%@-RWU%ZY*$a`1-~VOG4SU at nCW*BcwLmR(nhG*lXjz~pF z7mwfrA0FWdIE(^EAZP+`Ls|sIMiZb#utGnXzylUswU{RT=MM%dusB(R8_Xa^H_#Cu zag4*c>Hr2O3IWs!iQXA>UlNq@?Km^C1;Jb4g?Wi<^Q+ZacD z=PM5TqJwFNX;C5OpaO!d0tEQP>NDfW;vh&knxCuzV{0G-d~!fw%MyonXhDtojzh=J zUDPpNaNQ0q0Hut at sx!qJ$B`CztK}tT9C at pQ2QbaTSEfZX=*z5f%xFc2>BIr(G7xzb zpr0p=qy7-Az|taoccec!tbya$Pm at 9b8aS2{JFqjOWpzUw-UxJCV8Jtk{57gfsHYXC z99b(ky3OiEsWZFEg9;?5%d;W|E#ySs4sT-{^fHA3JfNY1Om!kQaQTNPAb z0R>P%7(P*qA9pxDyJp5FlJVI zBw*nSY;b at YsOr2R z3}^*;P{k}*(R4fL!3;fczyvVBfe~;310kPySWa+_x*X&lWcW}_LNJ9yu!8PRx4RvJ zw1W_o=QTOlx#0_%nL%dqS6sC}b8O-1V8Mw at V2GoVeY`G5cbJ5h`fN&o-= literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalCD.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalCD.gif new file mode 100644 index 0000000000000000000000000000000000000000..632fe76e68d12f8e91581716ae2235622976d26f GIT binary patch literal 3081 zcmV+k4EFO!Nk%w1VLSjd0O$Vz1P1~P1q22O4G{|p4G#+$4i6F$6%G>`84?#66b%#= z5)Bq09up1~85l*DJ3K_BPA#&AulB+J|Z78Clxp)94aU)C at LpaA009(9X2WwFDoo8 zEh|ANC at n55FD@rGEG;ZBGA=MJODHEHGDt5lI6E*GQ79>8BO^XB6frX}NG~rbH%CJ< zF*-FgJT at yqHzO@NL0K;?Bs^4bDkv&DRYy4)MmZs2FfTbfIX*f$UNSCTG&OKBFe*f1 zMnXD4LqJkO9Z^CgUp+l>Iyz`QK7=+kFH34hNJ~9RQc_1XM at dF_KR;(hMLtkkUrs1g zPflV`AX-pBPf}GnReCd5dr?zRfksAXR32hfI%icba!*fsO-)={SX*6Mkxx=#U0qvW zVnSk$c3&l6VqbM(I*nLbd15l9Qcq`RWJqkAe`zyIaH48%acypFift*QVPbf0V^Vji zOL?(%bZmcfVuW*5gK=||bR~6nb&zyLi*-$|X=<8yDYt2AiF#mqe0h_4PrqtxmU>E$ zdsbG2wONC_nS4fke}cAfa+ZEaoPIoifqrL(l~ahnihqAjipN%n#-xEOpMXTAe?!1? zce{0VpMp%Ef>EP{JA{XXriMhOhDxr7M#Fr4tcpmGjE#(rjINA4ag?dAj6<}GM6- at J zw~#BijzPPSJGYZVo0gQnls}c2mcExVy_Z45mOH+fI>wka$(k_4oj=Q*I-{PRouHk@ zo;l8+G|Hhg&YwNYqCL~1Fw>(s(55=3sHM`UGp(nl*{C+vsy^MSFxRX%tgfrttuWiK zJK?T0w6Cw-ur%PaH?Xz1<+d^7wmP=BwY;~s=eRWHxIF2)HNL*Q!^FYB#mLCY$Ir>g z&d|-*($Lh_)7RF`)Y;qG+}YvV+S%UW-r(Kc;^pGx;p6D)=IG_{>gnq2>Fw|A@$>Ne z_4N1o_Wl3-A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grwb zp~HsE7cz155K5d#aU!}%Q9gWVv13L at 6dIK1L58oQ$&&){tx|%b#fup)UcPA2Vg}3^ zH1(iE$hsPfY{P{W1|86xQ2%XhDU0AhZjU8|N{VZ!Brt%;(JCo(Q?=$^PF zN)+W#mOp*Eq}kG?8b at Y%TT9w-Y0}}ECA)>B)4r2`?1?*r at 5CTNxCsr~y*u|F4T+## z%a%6n>C at hpB~zUU%G8Q_ at S#I at rcRWM1hQ)0^+>et-l at 80C6;3zZWD`zlhZR;1G|4Oj&1mFkBLy}T>9LOl609?u zeqg}_LK9t3 at XKM|WRuM`<`G6ta>W31je_Aw5uZeL>@z?B61XFd0z%ouf)!m at 0LWo$ zg|kgJ5E4n6HpK|z%z;Ic(@hZ19aQ6u0gNCIHayYwXamJ-1j!&u4g3U<&p((3py?`K z(Beq~C>9ATYKCfq7-7{EqYYZ4o)-=vaS;^71OoUIfIgk*!^@2$T{hx-v-c5Bs2t|N;SJ)9Dewbg$ipFbCz1ro^=hw&>Rs_L2u-mPZS!Q;m@enGty9lwt&&kr)wFhwn}v@(k^#!%x- zH`fRV$P)1ALytP{*rU%r_mHuMfYm at l4gNF57}JX`uq+bC)cg#vvP%lk^FuqG2+43T zz|2BQF0cgiOw+=&Fb_SP(?hgY^_*}^GSD<*b1k{#Vv8-Qpu&YX(L{sI>{0kLz&>kU%9W z0SN{k0uzg%1S?7bi}76|6lSPF7UWR1evkn(Pk0B{Ist%ZFoPN>bcQudm<(nZ0~jK( ziaw_Ch)GPM2q`!R^=u%BLqI|j{*~w+D_Y?SSJ(mwTxh at t#Nm&B_#++xV4wRk5RWCu zuNKA-hBAm at jAa-j7`wzuwWBo>_snfp^G^N<8M&FM-=R_ zjyPZdPXXu$7c`&&0#tDwnFs(USiuTaNNy9PP=zWMfeA^#U>;g=#~o}~1RUVwfc4-2 zEK&iBUIfDys#{&yprD9z6bz67 at CO$V=MF12&JL8=1SceU3tzaWM)oH2}H z1S1%_Fr55vcfsb9ABx8=%85bfJq`2m?Yrlb9G}APa7!;~R>A0Ufka zjde+*7Ls6uN+lr)NVLEn{J at 3*gwO*blz}pp>BAE;pg3`Kq7Q`Vz%1;FuO%S~TDK6x z5s)wiKuF_2;eh^-HiCf)Ml6C9RfWV7QgVPY_|^=+?SUfLG1euFqZ4!J!v;9f9!E(j z8{Pm1V!Uw;enB@%Zh8g;7vTz2*r5&r*@rA-v5NApq7FNthd-tf2Nn$AxFoQE1#ZBq z(vSzQsF_$bq#<3>B+W48c*aQ?(Fzqr$|rlA#vk!C0B&?55OC;%3jjeVX=J0n$4T0F zr0b}&n1&k0;Dj9 at Kr4gDLUveUu!95f2sBiI0s#t#G at 4N?^BhPU&cN at woJ)>pbU+aj z(Stkggrxz103UT|gee-)1&R8s8PKS&jn}e_Z4{})rAY$>8iSBXs6!7$c0)eU at c>Pn z;uL}C0{#x9&>{l;H%dHPi!`ip8UaCx4iJcwL?WSwevISK`0&Rn1RwwdIN$*eKmY;+ z0ETKrS3rgFFlp4|+yO;Q8(KyIml5&?BV at rB(eQ;FdN7B|n7T5TxC9Z7AdS($7Bx$g zk~E&hv)Cp_2O5~cA1LyMJzQcAbMSR2hAj%rm>M&mFvA6Kku+rq2vwtzhA`-5Yj1cX z5fwne43uy(iM)X?3kY|(4?yk%7}^1eM!*0VK!;Y_SwP*0RWBoUjkc at +0yo(SMf8!C zPYR?HF4;jxUI2nSyy6v_h;SE}U;;YCctx?ThO1_=i}3)W1Q4i63s6ukx%@#UHX*nd z;ZAYzM!*3L3%7t296=rey(k>Du!9s5pn;dTgyV7{$R9WYmY1+#rwfYW0#aGtjy3hZe6LD(_NuXG3|9Z7ppKz=K*@|2H>P`<)*sM`buTJ&72}Srm5}ojcI3O#RfB*nHQydnI literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalVHS.jpg b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivalVHS.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6663a7e5eb1e4a8923046db9916442fb0c395c3a GIT binary patch literal 4541 zcmbuDXEYmN`^H1;7Bz~9+A~3oimhVAruJ59kJOA7HHt=SkBU;W_J|pKm8w;v_J~od z6rpI9)_B|hIqy0D at 9%Za^Xa;t-*umJKcAlK`Rgx$TiOUM1b~Q$h}eSI0sy#P12CyS zb$0;(w6q`q3c!DLjR&ayOZ`v!2l<}>|1Mv at 2hdRfWB>|4B5nXN9TAX@=(-O81^|eG zf8GDi3jk130mv!HNN at Z#1#ba}NPqz1zlp!8e-RR5ASoFUIRzyHfS!tu at ir4P7dP)e z3=x2c^#4-;q{KiHGIGGb4k+DU1QCz~K>8QXiL;kPAxQ&b!Z zt``9}|8>y;=>YcuPxTh2+2%&|O!IcCBPX*!aXs7W#+pm*h_tGhM$LY)AtSi?YU^lk zqo}UWX6zAxxcN0$ExulCg~Rng_#)y;SxND!ry*h`{|Q<5Zf8`0ZrSev6aTKUcXlsp zbC`-~baT2kY%zI}a{>9ZK`G9{sn|hH>{G$uQI82hI`M?agOB^w<+vd7mA93qZo_l> zvxTUy8(YH%Rkc&uEpT_FbLsEkpB4Ho1Fh^!SvegC$jZXQ)7Doc at DUkxc&vzSt*W|$ ztQOZVp|Ga?1rY2om$w4;O5C!yc$pc#L}8&@gtqikjyxF}{U9dE3r;#ng}9e2(A^bm zB}Idic$nroSL%u+zORY3K?SfiI3!=zS at ufqfMvyPwdZ;^AAe(nB at w!@_8RfrsgpvS zU^5O~wj8r&M?P~9Eoa%OW0ty~rtP_MHNyhXb-gd8kG;;^Jm~m1e3NQaz#?wZ?DDQM z#uupKR&ApDlWRjI=&*$4bt^pk6yL#ec7=AfgbdG^{4$M+E>XLw#pTMZc at pEda5)QV zOFYU8C5F`xHCgid+8cv(J|++M=e at O=Wm++*7wdn}EOAuKSGU4td5ICUyn8$GRp7YF zcmKt}0Xn;@iZ2rZ5D_*1YA#_Z>YG|87+Z^H49>9)H;nsLNlKU5oCJGb`U7Rnn?QX(Zwqk zkdN-K-2e3?cF`P?o?@tnnV#^#t>uGV&G5GgX=S==h+SlnUE`vYl)Vn`>_DDrYjZefIPV1(1vQoL#toQpwG8UqkXJki zt(c{Cq(6F8l-2jzuD+SOCbH1r<`7w|a|xv|rB7~v at 4|!qcN+zNX7C4VTfDvBs?cV- zIFq75Ee)X(6g!P+Ib*UqZ$Se~+k<9G;of3;Gym~qqx{@x=YTFpY8$I|YG2!83$7BtMG}SeA<&*$*gAlvz{bb=`EINyik&P$if`$|2u|lo{&%5^k9o zRzA5nB>hiOC{Li9T3eU|acP~(Jj zJ%)}Z#T5cWd{KJ4;KSdrtl}JMm_TtXLBhlK>!OS7F=&jPt!Mk2f#Bk(d>tW>@NCz# zj6naj|9#n95MFyWr2rL&)`De(V;_{&*B=E at m`Fqdk$UApD6Q!R)HQ(j1|Rq8Gx+DjqxJF; z#!U^~9c$G?p_^+Sml~tWG=B&!!;3%SyDL^c+})D(MMCHN&UmNN<`VAXnR43Ipw0x> zcBMdO`%g2CrGJ-IDQwFRF`J4hY<}jJAo(zC$VH*`g25_yY zCb(n4R2mHn8CW|ZuO~v$o$=cuikY2s;aKznwX5vdLoj7;Mm83NxNmWe-c=eu)$a1< z(idHQRK|Kt(b2N^JBjHcmWK(B{$y-{-{sPL0Ox3-wFO0)?IsbUKj}%daOk~sAEUrW z+;ojZ at Vo@#!&fl56B^(j at 0tXjFTYpF%5rF+DcT|M)!jilIYJGNwC9Fn_#T={X5*S_ z at drHD09VF2f{d9=%F-1K-9G9W63+KizhvQ-USfHUA0OC$Ms(r^r{;P10t#tfzmgj7 zJlN`%2{W_Tz4^ndj6~pcC at O^Qw4r#NBl~%j)ZqNtIp}Hf5>w_#7yNw5RO}nJsY(5f z=aUrcsD~3X;qu22HJ at rBgUoBdSd3pfs0xFUKE8SQhrJ=U4gs#{U-X(Ym6nvRt&<@b z5^h(|n71rdLmMo}(5b_kM1Ccs at m?HdV!&jP{LJc+&f-5D`2CroqqB<)KQT{I?<{iA zlC2##6 at Q{QE59+{Gf3{k=6(v`sr?CgYXis#YC8y at tbeoJpA6_bvde|4KI z73Ia&*Wv at M4NP|nRzk}zQtCc@>sjyP+ApLW9_s9|{i30|XGNky`xBQTR*LzcS1ejt zHeV~VrSt3sG;MzZGRrKp+w_?i`&?xPjMhesyOg~j$l;;$k~Hr`?;+Hbd*ta at A+<1u zjAEreItVf2ssnT>*Hc$4#g842hsfif z=LDE5?f+qF!lS0`*0OB2GHmuMqGzHQs&TtG!2p6jd+!?0%CDdZVQZJ7*oxexZ z8=R|HW&fd(7feFRu<?&zO1qPf{S^h}JoiTNm%-%NR4Vw|VvWu(CAKbW zK0LwDpDGjNx$ySR6Xw!}Gf!qNEGZ(FrC#=CmGTbC7uxSJB&9EG4n_RihtsZUD58*U1r4i9g5F!r2!~baXwbIW|_q_hjF` z3uLr^yDySbE8>=|PF0|i7RK-7=E0~b$jutVe%_V;8OK;ZdjtUsB6HkUlWVwU$j#o8 zzgqFhcqUazdw)EK!C|Vx$Uog-1pVcg6JxJgUYB*hSe3vvKxjDZT*Zw3-s)>)Lv!Pq zTxxdzZfXC3zPQXCH}+Z=mz98s4{egARA!&&Dqzz*SS9Tf_JI9r$)9YG5b=o#Xtofi zu+*KGQek81goxBdpCTS=U&RZlwNi=3wI5?&8x^!URO76@?;SW9zjiJP?M6Cokqvl< z2|tExi7$qz?)GH at SDRh6b|G+r=n%KsZ(~EJSIQs z*rj5)%v3*2nBBi`B=RPT07UNn@>+twt~@Vac`d~6>dnp*qN$Rv3!3w_JVfGgYxQR? z8`OV<_^VyW>}0)RRZ2oU9PDmdc9g35&f$$`)0gBR=FRYm;P#TBlj_~YPX*Za$oaNA z^7`|(Bn95duDc_JkBoQ~+YT5%!^A*IB5YRk-;^!~65AOu8JondhM+l(W+dGg zscS{=2rLI~eifm{4UX0DmaU$0LOJB}`0O)o}Xrl(&ee at HHO>f*VlzTh%=>Zq&r zsE?h=qg5m%UWCz$BbMLMU=<8f40fKc$0)%0{5F0#4^C}Kk$wjr^t#pgRU89-SZ^2} zd)NJH#{QbWjD694OtWo)bZy+T;<5T+Q+=LIrcBL&^;$#>3YkH3qJ6pTRm5--C%#_> zK9y@|@;Xa%yOqhlSyJ$fYRnb*V19R5P+<$_VP2#qAC|N_puI}}GnLDObd#d zk%38W^oE?L&Yq@#h)9Ov3kfQZ-oU2JMrq5`1e(WGOnz)&7ICwCI%*obie0nI(=%2% zmAlo;GZVpn7^dm^B|SKqN62|Oazfj5QmRJfqb5(81bqvp at SJ5}*e&+u7G-+>+Riks z0c7EZ(O7KCMT2tPoN4ml{?ZoW(G{o6pdv$kN-KHX7xZ!ZT6o$;$qYikDdMVe74>Fh z;IkZSIxBE?C&kLQSFL*K9o2&`URLrha%(I#y7X+>MlTgnU_Og-S?;(zfzg4AZB5Sw zj>OV5Q8k#&AW|jVV2|a6(;M5g(cU`&m{5#aDKPM%aqQ|PmQr*|Urw!rr!tUg#AC84 zvw09VrM^u}i3>T=qIpB?8my8$m52lTf~nf=6;))PPj0}8Veg|;eb|~Lvdu^wKj-PI zKLNHR6}ILH4599>4yBPY{N_;eV|{jcIwcKU+ZoA;7xP4vc$_oVXj(Ppnf^OeyPMjw!jx-$?`P~1qnqyo)Q%t=loS*5B90QHl8_Kb5=fFn bfv{wQXCg6RRX1(l!;3tDez}A0>xKUS-u*b_ literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivaltape.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/archivaltape.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d5382482afcc5ff5c9562635e5e2558adb4d67 GIT binary patch literal 3852 zcmWmD`6JVhGSzM|A5DD&wwC*wu`_Wa0ljo0&tu*8i&-vg1R^i zsH;r`QM$SY2D&;#(1=VT8k5LI#)js`pqVkljB08 at F{M!~Y^Yjx78nalb1QSZ_2%YQ zmUOzM#X7o`leMl5-F5vse`gylCmUlMhPB;#26MfOtsR49yKW=HmhE8Z=-}kw$mFny z&Q7+h4UQWe!`Lh at HY>nugQYXu&4X?0?6T3zg|)?l;_8;-=eEVu%VUd|m5*0+p!deD zKKees{yv-?p+3wAKguS5-{?Tg*dS`qmh7ky_w6Bef>2Uih|{m3mb~Cyf-p)#m`zwn zCXW{y7aGe8-^L58-yLa{6z#D)#y&lkm>9chU#w+HtZV%CxcInJ`vvTs2}SY09^aSb zBix~roSc-Bn4g>Mv{O*~pJcmzDO^#C*@4u}X=!`%)BN`CsTJ+ at DBkO|KVx at w2I*kt z_Kdwv<(c+5`;!Z at q7Gyq%s!B{|G=TTgBy+?wmEj#;dCA;FYmB8FQqO&usolie^@RN zdNhfgYl|Z4inkXDdrOWKoh|kF<0!jKJla-fUtIk3Tt(3DVzp;g zWzU(~ls{_Y&ekP$)?0Kpkgp$iJ0>}HNs at Z&1nc^VfImpV zfB6lyh4lWF)Av{2^GoagzUcDzCFY$=`4g92x-W~zFLUJWmtJ3H%yw8j>iD(mO7qke zyH_2a&#w8aud#bOOJ8(yCcC0vcJZ#?xc=q_>-~-O(>LA6Zj`CJgC}ks8NV%>Q*549 z at Dz&Mqsp3DWz6fo#3%igg9CSl2X8#Rf8zdwftd%nUxq{9jFx?U7_*>CeXWu_9_t%_ zG&1+(+=t1EcawFWp4Klvsed!sG5@#p#q-IJFE4y~`TLT(eqrjw+v$<%nW>do$=BJ_ zt21Z5zia;YUF)}Z9Y5Zm`u9WskB=?y=ijYH20S3$l`T zP!H_RN}&b>g>V4|@W1|l5CFXf{KSw0z%Cs1x9 at FI3krkrp~PE<&PkiY5GtHMTNu!7&&fg`!

    nD6{j%Sv0JhZE=^#WQV`EQ8RLM~pokk7xG? zQ=;>`9o87Cp=Bis+(j^reYnPzefxZJ$;J1F-HRTp?P4zXeqwJt07b(9BAKK2n?5Kn zG>j2Wsf)mklDlI4LrOpBRRKqDH;oMnsSqe#%ZCI9gaExcw;2Ggq5%k!l&+|7G6P>% zvhJmvtw4bs1(ajc0 at Pp$LFb at A)j#<*$|$Pl-w8!E9e$B%=^Lz<*m0gP#fkg`qn+IYppipTmHH- z`e4t+o at HpTDSK78sik7&iWVbFH5Fi5v at AGcn!hqOa3!mY*Jd*G%sYTGva|dmrO3$< zO{)aWFLh1nB at W)0HV!YNG>CcDW*^8bBw;){>GG}d;QAn|rupuDmQCr4gBCyh_3kUs z>zXv?c#EFFUdNugitdb_u at HwWpsw0|S*0H~usl<*Ilu3e$oH#zT*V7vmY8-};9`-MGFNJKPrflRDgZ*Y(5P zX1F7Z_aeLZhj~VKZ+!?})A(#^x#M?sm|7rDs&We+NOGEp^U}&*8(xeUIp9{1q{a3K zx3Faoe3B=91(ozGIpj0=vv`_tc-+||Bq`1Lapb<2q4y)dUA*=(k5zf~<&tII!}r at L z7Z*Ktq3VZUr%pCkP#X7{=D1r|yE}R;Nw!~kpezbr(kw>bb{hCbzV&7L8nEQoaz>r$ zMqLCFHo9HU3LF0Ra?X5hWv2e8$I8niVZ%;e8ce_ceOcxBgPclW-MA+>39B-S5Q~aI zwggICjViWDgvV(lJ$rMf>pyy_#Zsz5o}e=!MRSu0K|W9coPMb8HwxuQv9X zzL9J)PH-qCX3?~_kP5Bea)ppdO$m&yfTWXzkY%aCnw(RFe&Pg=bf=lj(orsTojO+` zFihhEU*;iR?|-tYOwR}U8n;QS;+fNwM{1GLauEctP{Wv9g;q{F9EP8>wN;3<;1HcO z4a~@v10&aU_2hz8*X z?!Y=4IDm`Q7@*M{<3{vrv&6`%$3GSf6mPv-)Z9RyRe{-NzbRX;qBQAb_0xw@%ybwtMGB|2LmfRqXnr&Vt|Tbz+T>SVA2Tyh60 zV7X8uYFDqpPVh)Uv;r}(CKiVIXhartD4c>0GRzSPtxEe4tn^+yM_T1LPdn_uiqqZW zjk6ebOl#* z74IzxX(kx#AP at 7)6INs=9m-Jw-xRQH4FQ<0 at h9gh(5INmj at Wduc?SR)kSO%+>4oeW zAr``f>OA8pZCut>PkOY6?+h&AZ76X%)RaW5RfxeFna++?E5Pj&_Gsc&b1Yl2 z2GKza%3aA+$n`u06w8Dft2iiwKn2vSMuGUsqw$H2Hdo?Y52^m7R2;*< z8757!pI63M7Lu>E`de?-EsMO`OsJU at AKIY&=WB-T;q~ON8 zoU*1=5NYq|zp*Xbm*_qSpkhG?CQt|iOVW{qVG+KG3MGv)ON>-}j8m7=hzWChAkfb4 zgps{gKBvHfan30frtwJu&TS63(CF!V=h=5FZDp?mH7kT+$z8^d+S at TriGv;NVn&m4 zM~u7g(HUxh%Ve!KHEZ*+<-a!B&jY1-%OA6sfPdWYHL>^0eKU^k7+8BGM0Gfv`FCVB zn?(tebYuXs2;fNv?QLUaYDE(HLtudG8aXAMWK1qf7+}LsRb{hpj){oNXLLTk%^*Kh z6(*p_tu+;bLBJproo=7tjj~*oqC8ea7b+F+DWoY(7y#9)0mNoh5jKq3t0M%&kweCq zFv*vTBCUD82 at P}MlQ(I*tYV)AFj#iGXT$NvMn!ZR93SlLv=?AgcXbmlfyH!%>8HrR zLPA%KnBMjgyVMCa9E$dLtP_++O+Gicl)K3$(z|?*yW2#2AcD at R#m1@<36HJr{xYvZ z`MH0Hd9?_;f)pI_j_%QIk;1#^W2NcYO+7MnF?%hlwk)DG at tIUwY}@I8NGYEpNl6H$ zRwy>;g+R-t)Z6SUzeG_oHRtuTS#^h+C5;1d(QH>@2_L>a7)rP>`AxA+hTD&Z7-aBa zj8q5gHdW!w#<@a5AgEoSK5P0)SmOL-wDQ{Fvmf_Hbw7VOT6y!%4--dezaq)*3y%yV zM^(efSu*Ulio%(R+c3i#D)R8TB$E*Z;&wc*B2hiPI3!=4%@BRcJ-oIwq(&OQmF{aT z$TPUW^mo1FiDFC4pV!y?YiZeD;?SfvdR20_7`=u0VU zuNd*|GxVY&=%*7_BKn(6R^-qpuhzJ5lL>FVddaQnqfGIOdMbn`MA#*m0LX^vFI}zf zP9;2Cy!fP^F2KQcR+W3Zi?kn8VSh-mJBkMp>9W`g26f;(X zgzy0b7uz_8`ky9Kr41Y68?Wa#qHtay#48;?#K-H__ at 0uYayZy?Ow74-{6i|#71WMb zV={%XlR|U at Q(VGD`SIaCT%E@%)W&|G9o*LiX!Q!ynxzLn?85d$9h8AMIrpGM0RT)O z56F}A@%Q9fZ-m-+s9N9U at K&l8MFE(qAhygSx(dKtsP%)d-7ZD#HUf at iHL-rh>F_v^H`%aZE%a6qV_Nm zzDziVfRL|Cf(dI({4Okn2xy=LP)dV8d zgs28UHH|2TGB_|sP32@)MrQbSwM%QXQ(0~RTR51gf_=8trjY^1gPoo%^>`1 zZuN?!`fDrPSqO};=qE=&e`&7TG=?xt-?o1WG7W(snbq3O2)-1d=TfVWLB^!R2sMBM z2sKobtc5{vHRcQtiAy(1*aowslCd1fz!-99j4YDQp;a01^-{o)51rT%O%Vl~sVW2_ z>^Ye}PXNVYVERlGBmf}*P^#J(&9AppL%9q3Au+h`U-FBdnH-2;FepB#`#eiuB7%5obhSARX(Ecg8t`t1TO<-ED8h at 5f3v901Olw7!(8<6%HR20T>h}85b5D84VN~AQ~DI z9~l%U7ZWcQ4?z+J4IMKg8w(R1EJG6sCL0wMA1Ngq93USTA|4(eARZ+j8Y3hlP#F#? zB at s{?2reTZFe4f{AsZ+qCK at L^Dkd5!CLkUsHyC?-H87dj>uIVK%5C?qE= zGdUjYldYhZc$$@!mY0*El#-v9ex8_ztCf<0oxrA?et at 9Ke4@~= znUr^<)^eoXrJ;eOppvPehpnHRu%DEyqJyKPp{k^i!k(9~r;f6yiNdCyx2%n|t&_E{ zo3XL0y0VzKwWq(goxQiCyuG)@y`#gusmj8r$ilA3#kS1Gve3t^$jQUe%eL0fyVTIZ z+0eGy)4$i&(cIX|-`T|G;LG6Q-sa-d?&#C&>E`e2-2dq1`s(EK at 8JIK=<)LH`uzF- z`}+U=|NZ~`A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyF#rGv{s8|895|34!Gi?( z$paSY&Wap4R;)x at lqiR^Y?%b6Oq)m%?vs_o2^cU}xC~LEu(FlH(4#q+kbvYcn+H z)FoYPsJ*d-DoT|-lcdOXG^|H{rBWox5k$}?Iw~SySmK5frBQ~K5Qwm$aRj|RhYTrI z*CS1k{33DP(CXd1cjmOM^5R1ku4A*h$RdkH`MmSZH{oRC4LtBvqaH2M at N$9>-GnBN zIp)xlPCDd>qmDW1kW)@K6)5lmCLIkpQz;PuVa0spW#f!9;XoKpG_L4E3oId|0gEu+ zkfV+`_K}m0INy-d;5Xf{afl>j-~$#vDwtt~8TP27O*rA4!%jHyz{8C-#^{0#EiGUH zOEuh#qmDZCv?Jm<-sD+LHsbK1Lm84>(@#?9B)|qBrsPA;H|CHtW;VllV@!I!2!lln zZ&t&OI`7ysPl(*)DJd`FkU|9$i%2pkQl-4`LM{HU*dvZM#>z=7eXDIq8gpXE at b3BhD^pRPn_hR^o=j7Ib8y&8Om!b51tlkfWrmgeK1*<&FShWRi(HpEio8H{$5ZO*U!zn1%(6V8czg z>BLiKx8r2&O*Y(!69o_Zin6MJvZ(MvD}wA}B%?>pN)K_-#2k$-X;5&9HOfK=4?XZ8 zdk&c6Y-~;%FfdU at 9r}#y;y*xyVMQ&OD5}jj at TAk^H)Uqy%gnma46!evrh}h-O$Ht6 z!sa;QMHQ%0qclhV(Dd&cj?|LNJl&et=>9m<=vqxQ%rJuux*;ecOsM9F_%f~GoSo-4 zs}uo)4xVT-GC}=tB#Q|>Y|;uk^T0Ew*y13pE5m{NLQ5JUFrrH})qwcU;@*an=fd7J zQv?Z27wGaQ)0J%r>QzEc2J1K)!3Lg>_CGvxWE&g=*Q&* z(hpg at U<;gpl|9N~o?0zzO!6~^HO!?8Sk#OWz8FWXl-G`UkV6~Z08?>nBo0dyp$bUQ z#2=E at ku7Wi2DNBKGweZ*Ml}jd{?!;1Gwtp$^ei!y2^k5iR&2JzlV*go{c? zbmlZBZg8U-#;Ark&`^XdFyRqnxW_^K(S|DUz!uF|A3Vens&R-T9h at ptI*3RM)kSZ5 z<3Luev|%wjDJx^yh$cB45ePa!VGNH*M%)DAk9r7T4?Nh#FcLMZ1&IS5_DJVv-l0Za z^vD%RgD+VG2h?p$Z3_#N`mV2RM+T89Q9iH#%jHZDb-a4XA(@ zOfd`}xk3#JxWqZhn9gnhV;9XRM>)O$Ks|Xw8*?ba89v~NDcoaZY}i5-P*I6npd&u^ zNYE~5&;Y at lKm`?O003aHi)?sM0hXA?JUmqko(2^F8*oH3%rOl(?TH+GKtmRA at P|bR zN+9)cz#d=#jsDbQAMOCg92B4c8lb at nPO}0X=0FD+gkT!e;G`wYVGnRb!8#S-fC^4P z*bK~}8QmZctpb4tI#dA%o+zY1eqn$;gz*)0a6}Lk&;vnKViR+)LJ)#bgCK+<3^ec$ z7KRZB3Rq$ux5)m$Pp$9*4pbll5#Rt^qfi7skYX6!*hCcQa0CQ+0txyM$Q^h9hf2KS z6-7WpCN`0YIYc20Jph1qw~K)=%z>_GXzeRZkpUW5K?NM(Km-K9UJTTr20|!8bcLXT zFa!Y&VL(71@<5D#^dkXv(19%~kp=ngjs!=5K?2yz;070gv0ey71_IFlA!MNkRq((8 z4qyNSY#0F^2yqpva0CaK_yuh6Kodf7h<-f71BZ|R9MES48}c9q2si))Ab@}#=hy%a zSa1c*fCeEnKmj%I0v+~%gE8oV5Kz{G9 at emiCa_=x5`aL6JrDyJK;QwPz`;ELu?I=i z0S;RTgZ>RMA&OXZ;?0woL?Pyk2Ryvt4PB5y1e_Lu9+<%qX86G&8WD;@f1=Q-D6}U$ zA&Emcnha!s0u;W`h(izq4>q*nQ=XE5PMf&X3|N4uN4$_8W*`26BJ|C~$!bR)8WAT9|zc2AH2E$!=Y6UiM?Abf~4J?{^>LoVbRVVTqG bemnAzMkz>=g7T-J4Tva(G`NrYfB*nH>vb;Y literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/cd.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/cd.gif new file mode 100644 index 0000000000000000000000000000000000000000..904e2a6c0f5d5da877b3ae1e056e461d1ada0fdd GIT binary patch literal 3170 zcmV-o44v~wNk%w1VLSjd0O$Vz0R#XG1Of*N1`Q7k5e^a-4+j|!4-OL*5)=^~77!j6 z3>6w6DiswO8Wu8V at KO2NxeJ9v>YeA090r4Kg1PH69fnBPl@|94R6g zA|xRuBO)IqGczO&KOZ11CLA^+B_=2)FD51^DJLu_CoU&0F()V}Dl9rE3 at 9oxAuKj3 zD=9B4Dr6lVD=jJ`ENUqTRvH8w^^MKwxlM at UOIOJ#aKKxRZla6?3ZKRroKQBh4xcSAuu zQEX39PCQd|ia|ncP8U;DS5#J0L0NN=NJv~-T|{1ff>Ba at S{qzmTai*zOk;k8VH!@U3Hdkbaq#Go^*C|gmQGP zYG`15owjIbQ+~EteXyc-C0u at _SbwW_dwzL)cwm03SAx1-fwZc6AjoTKQ-#BSfqqnruI+uV=%}ft<)$!uv-5$o?C7X6t*@-?t1N%F z_l39dwz06Wv#_qTwurj)gS-2Wy6=m;_qVvUjlTKzv^S5y`}wvomB978y}FXa{+Gk} zl*Rv+$N!tg`@h7-#KgP8#KFkQ$Ij5q)z;I}*xK3N;ojig+S09 z at a^*S@%{h&A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyGynhy{s8?697wRB!Grwf zr5lG0TRM9E4oaLzvEsmVo~&>v0b at o-7$ZhlnbeJ+#gixn_Dg1^MG1~BUA}AqqeP1q zI3~$U$ma)f6x3q86->qpl1YD(>pNtDFP(10uC!ycnp|MeYyb#3xbJ at _UxFo-@c>%@e*!~T(BkaEDF*ks9W=g zKwsKy;i5(t5zNeyGgpl_Vep0VQcEtpY-5f&+dwf*MS}R^MgZx|LxB-CadndkPmlq@ zE`_ z#s~lafPg&l4DbM6DqKK-Gyjps&N}8qb4)ehnS+Zhxge<@l4P$PpJoOngv4rPz3)k1hcO(7-+oP?1Cy&q(8HVdM-; zjyTo~^UXH5e3FVY-?Y+-frXj+O*OyRanKpbKxV`Y{rD0mJsl{Kz$ecvvy8bNZevX~ z)@);o4;iQtNgqpiFvc$jCVQZMf-ZAR5C at 47a5qc(%&32jQ%ma{E~|;rerdPE(TdKjTPfC!NCXuq~mo3 zH6YTAaIJvS2qu}>0`)S%tYFVQpx=WP-TdT}f-1j^H>4_{n1Tr=kPKo+I at 3(kP&Ygr zo(>ZYG$24cUUy)?EzLyJjNZc#XNoCdjsXnl`pBaP7nF#8Pd~sop-L#9gtCbwgf!Af zAcQD_g%NF}-$oJv=*~nOe^?+75Atx3KrO=@^UTwF3o~9VpNK&{@WC7|_ at N3fc*0fm zVUGnYViAr2#3Ay4hdP9>5uaFs5z5hvD1^WYXOIUIfR~MPo0$Uqo^5u^wvC^GR0Cjdi} z_b3J%j_?F-^h0#sh`}KiVF^&Q0u!JB#Ti2p3M^QG9&rk%01%)L3b^E!I7kNvYH$Tc z0P_^9SVb^T`HNc=As-9=><8)eaSweo0Sa}X!yJm3iS2zN6QHNyv;$OrWF!4G?M z!UykSg(BoIh&&Xc5P&f29F{PRaZn%`@t~b2D4>Ek*fkCXkOvIL!GSUWVGN|eX6CkG z7;8j>Vqr)DEWGg!Z$x4RYmmm6%wddB4B`-nKm<(9Y6K>wqX0>WLK))Fi^{kn2?GEC zJ at z_+Y)~Tum$UwbHA0pa!*1gn2igT1eBc8o;2~}6`o>zU(F#cvq7I561Rx^uGJohp z0-6wobfX)E0eC_l`1r>N#?b;|AOi?^cm_C at Rv2qELmTL2)i?*F~5`J?j{}SelJfZ4GU7dJ_aF0h1=;1_?C4 z4T5mP3>2V=%6PjnnTZ1toDpbcE1FC{f<`VxDh^bG!`ams0|Hv$iHf)Z8NJX%bcylp zetX*$8MuWuz_E>Wjnqiu_>nVAF^qPj7rnQLK?6!)1%22%FL+YH2R3d23rOGr7P!C# z{(c<+0~i1e&iJ&MM at lGbfWj8ehK4qr5rzZQ5(m?!2tTaCk6D$1D<0vB3GP4(T40(C zT{yxC*5Hhhn&TVd*v2#1 at r_WJ!g#pI!U4?5krVgi=QZI<2|BO^R1}@cdVT^3ps)${ zb~+kKQiUAWV1om2KqfF?kz54giLcP)CM`e#7tD_5DkB{UAP~U`VqgOnc;Emt8iClq zqW8V?ohCu4kqM;0hDxB~5`I8B8IXR28g#$}C76NagTe!^TizeOsEK at J!VwO1;08hv zf(S^^fz|)LMl}%wa$a8$d9FPW=qQz2qI2REbF;uFVr$! zZcoiwEmJg0YgT5pXJreuSH8+-&Mj-k-ro1m at BiP==PQa5^8BTIzz2Bs7XX3+=3oF~ zfhL%lSt863NHZG*0*yr>v3Md5;fyrLSP>CK5}ttDghFA+1fe-hfV3cz2 at X~`D%rx) zno6PI0xd0RWD?Pu8icXH(dd6WcajC();+j?faDq(Q*wp^wk62$ikD5THHF)f at FDRK{rj7o`M`NqTvMG?MRg+Z~RI}VN^v9XWs9Q=}E0uxfg z#o{||9)Zb;aq(NXBySB#N=!-cj7&<-i)RQ@(gRZCg~@5p+&t5hopKZDVQE>h+qeJM z-7`8hJ0c at FI4e0aJuPK>N?2BU$u?_ImQ_Q-kV;MFWI|4rL3SK-=(m)AgipXuElLYL$m-v=^#8)Eaef4ZFE9yy0lQ=GgJEqYi_| zH#MI;Uf=TdShMr#Gp$|cqE5EApF4l{boaNtgNfh$t7q)W*6zVe1A`a)FI|}&j=yHe zoET1dd&zg~dg`TN!{m6<(D2pi at vVj%ljAq9Pu`xm`O}@d(^C%~&CLA!$&wIpqF)XNvb-t_q%7>O^*2p*G;HeW?Z4%GJJ0)G zO#chK7Pz*yNrc+y+OOk#%q at bqthaHYAh*Fh0oaVtTjSB$axAN=iJNE1`=z|&PUDN& zoW}6}qFJe at kdXLw$m)t512~;r93%6S)6OBaQ*s6CM`%uc1CWXT$r*JUFCwP!+9Ir* z!r8a^pIh0n_K1P17|%|=;Z7y=#-cqSUa*S;dCWe#PPjX at 0@!sLWwG3U?mQ4>-_yH@ zam{UJjblQS+al;qhKi}y{a+w{Vpz}Gu|wW%SPK9Xf62QG88qt^=LHzSb>K at -GF5{k40_Sk z?dp?M155cLq3m{Y%W>EEWy&WR&mA^6*_*225&6}*CRc?#;%%ypUAu>si=J`nBW}%Rx!T7 zV@}{<{BMzN*O%~nKqYSY+H+0K^W&YOo{!G0rkTev+{;6ylQiVRIddCSjXvJ*^T7N? z+~7<42kJnY^ z!0$uiXd4Q~D%Shn+x!n~lrS-Z9 at p9fyOnNOY~);tEO_PGQJHl$Uy&s;i at lw>&KO at 44w|lE?lb4h3uGYB8aN5L%1^kZVisesjhI0FP z2Am7_X6KHA<&=f<(RgTErOO2GQtJbqPoHyWi-Ku&yeSCtqz{_VVan z?PA at 6MgbYAA&Y2%X=Cnw+fJJm+&BmJB9*t(d39u3&=3JFtXv8~~w*AE4{a zU-bf_1_fFoaXWkuar1sO6~1(0l>VFUM(5!bb&{c@`TQizb+s1=8(^Q`5jYy0X=nr^ z_IJVLB0nm(`fPT8$JQGyUYaf+iTj09GA)E>D6w#Q38MeZ31hNLzDgRH?$J*>$9E_& z=Id{pR<$BXxlvVSFR*3F;Yp`Yp>if0g$jKrs1 at ihG$Zv at U`-I89%VrE4NaVe3yXX3 z3A1aZo$;tk<)thRH{&adT9iMmL^JT1g93F9;FLr6###_Ga at _z8J`FB zIoen4RM>|4W)h|bgA`~52z#O&LMgvZg6ov1G75Cx&nrrRu1A}60{>netUdQ_%t_vL zGl~HKA at tA;%DmM-<~dgqQxL= z4yUU7BChK2Wl6gg`niw9rv3v|2_kYpRQr;er_ewB&gh^;_$Fz3AdgW2hfILMXfvWE2pHYc;CvH{>

    !X;(_p0w5SXvpG z^-$DVHEhDHq6cMw7~mOP)<#kMF38W{&8kp^%Qe~maNncXh%qoA?S^mU@*^GidIe|DF zOP3}*xQ`GUf}+oZ`3kb{68MW17f7 zK|wCkYRdB*4n%5Nu$a=zB=0u(p;`5=CG`cJ+UW>F^WK2+Eg`GQ$t^ncx=!27!E(mX VkC^DG-r5-h`n?`=gn|VE{|Dt(M8W_7 literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/ebook.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/ebook.gif new file mode 100644 index 0000000000000000000000000000000000000000..19a02313dddc244927f717d42d37fcb800b3b571 GIT binary patch literal 3117 zcmV+|4AS#QNk%w1VLSja0O$Sy1^@s60ssU93>E+d4g(JX2 at ePd7$5 at y4+sVu1px>P z1{DYi4-5b#1^@#MBN_|^2M`ww4j&E>4L}0`D+&P=5Dpa+2^td%8x;UF4gnY!791H3 z8yOQW6%0WU03sR)DHstF9VZVRG87#wCL0tb933GZ7a$)UA0HzH!mb0HzXJ*C?-N85+5lvKqVe9DkLW? zGdUd?esPI_WQK%;oPT(Ug?)92qmPDqj*N$KkhYSHf1Q+g znv{W>m57L!uc4EXmY0)uoyw||k%67Sf1t^tosf5<)^eoXpPrhgo`$iSmVKnste%>x zrLc{sE)6xmA0&n$EKOJt&_&5ps=r}wXd7GvzWQHr at ywHwz#yuxTL$i zy2ZVt!@a4(zp}`}t;@ow%*L|C$jH#ht<1=}(aW~g&9c|gyw%ad($mb|)w|u<%HY|> z+u79P-_YOT-s9rg>Eq7m?d;?E>E!?D<^SsE{_g4W^X~lk>G}Ki|N8U) z`}zO<|NZ~`A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyF#rGv{s8|897vF$KYs-W zvf~v=4vQQ)SV$C;h!;DA2 at PV@m@(tQg86ufA+lu)6DB5^kSxh0hZ<)4I{y1ukS0f& z|Ky1*xrKV6;+&}zz4ZltAD`Pn|b& z>)?@Fx9;4zajh7^vCb>(U39O!l1L~PFc1I$2+9yjH}B}A03+7$kpwm1IKvG%;K)ag zH{6&5jyc|R)6E7X+cOInvcgPj$&q1IQ7sGy^0#<_yVAIpSQi z%{9$L!;Kv}e9?(CxnUL#0&O5N3pm{j2Y at 2#tV5%XHqPS=ATPM0Of%-d_Z)}Sym?JA zw{XLW5lAc|NuGC^a>EU at wBijl1_BVujP1;0$r%3Q%rlReFHCYvGva&*9XJ~rxlJ?0 zaD&SmQ+yFfly~`a0v2stl8ZOE5C;G&T)y*;B>+rA&#ZuaFo`S0h~wdNqe9hO_=*);0MRdB1 z&;`v~MkBMda$gMl0zd;X>{uHG6Y}sgkN!1OA5u&-*MP&#IPt(kjW^p|4fr+LtOCUh zI(+g7KR9)KLny5zbDs(OnlR3c at yx@@EBWxFPd5hJ+DtPWt}~C}-jws^n`Rc1#0N;| zp$9(x3G at UOq>l35I1C`T2dkmelTS?iSi{H#heTuZd#=Odu+29o$@uMQXz_?K{rER; z8+Fja2(QV+JqoMsypzvB{B*+z29vn?4SnXk?oBfg(;hZAZvcWDTJVXCb>tN*zyc;> zF$y%&fHOjS)c&r0SND7-Wim{DVgkc70_`)O3mJoR? zzztro#l6gN4n>e>8r_J+7?_XrA`pMb0|9ox!7OlrigDN?U~A{gWFMmFH|H8W8ofNb! z2u2tfz<>*!zyufI=^oB8k8Z5OTh3 at zJZKRE1{6pE8(>5-DrBZOc>@q(@B$11u?T47 zNgfZd!wiDaicxgq9MkYu5-bpdFl2!XT*v|(<{E<-bi*2}NWmn)QPeCr#sV9lfeC03 zgAKqT7}m%JHJou(ILzS+F!+QXDEALyB)|??oCO~gk%S8Xfe)9s1RSyegdWhK2X2jl zev%LjRHT3t>zMw<222oxB*Xxy2tdFE;F^Tbasn6D7)2K5V1x#ILJRm1NF8`!hD)>! z2w}LyDD;zsG0C0~{a$39xVj zI-r6Mu+j(*2r&@a&;cokVi5g6MhEhc0XDc{4lMKn4|t&A22h{@IL7b;5YW>wz_&m# z at WLGI00T7OK@dn5L?7^g1}U__0~w$|20FlD6;NOTqJV)t5Mc*N#K8?lzycQ(ND5eV z;>?tw#Qq at s;0HRW;mu&EK?UG?fgZG>5o7qlARZwKPx#prqDX}(MDYntEW!|oHiH?i zfCTU5!5DYw0t>Csg-Um!0t;9`h%+4l2YC9^4v2sO3ZMWD{8R=q5P$$8z-j{+fB>)_ zfUF0A;S5(<1w25)70j at NgZTQ_pvb{lf)E5B=t392_ysVQ4UAvNq6!9pKmj1&Y7wYH z*~?D0EM##C6rA7$8YqFdcR}u5Aj22NKn60rA`p4xfY?FEfe&nO3Sb=L7{bW6Fpkj+ zRX_p~e+YOl^sVn+0OJ%RXu=Z~eimZnsUHttN;oLPnIR~_29U6~FowZ#juTwp9Un%% z{(Aul5m2ECb0LCVP(%=3_#_8IsDTf5P=#OMJLDqAdB=s(i&|8{25_0nD_EWom-{3L zLudjOT#)g5gB<502gV;n0ERBar6r&sdPaCr8=wqf<~AsVEHwV{V*sNTg>b=Jf|7Dx zXuTuY*g|bM!vdM_Km;xz10*(4i(05+6ObT-+Tnt7%7{T5Z~w|bz at s6+IRF3z{5SuFi<=X~ag6nEsCW{<@(&;g z#KQ4^0xKJcorMF)3E<)bpE}LW4}of&5fcv%ZEpRm3jzP>p#L at j0PJjkWfsuCGFdR- zZw6!qf>{6m9SaD^%Ek@=^PS>2%`e6Yfr_ibY&?!Afa8A!7BC15&;#_R!;S#AA`L6x z5mk!k78-9nnX!ztPe}Dv!DlMEwm+AxK;Ed8jQ#Rz}?Z4 zrI?-Z;sp{q%$ktyrTH!GF16^#gKRSIMWr%sn8ZYjvMh1@!PJt4_ at KfS6pRSD@J#y% z;IQ&GBe$>Vx{ZqaoA~JDYeK`7hElKd8{AbF6DQn_JoVPchC&BYS?ej&F-|X2$EsR6 zkDGz54~>k*n2XQe92g64e^1+uzBN?|S?WUZamj?BR^^^Fh4E~%-bJLQ*6(g6gbG6h zI=_SoHIM=op}pDO`qNAwmt2XVZl{pRd8KcK2>Y>iH~%>n&sY9Liq;a+F6MDytjLw2 z$Cy@!pg}!c)PS_)8Sq`=$bSAGuXK&2hpupD%|6LGxfBmJIPXiH(=dRAQf| zKw;)0Hn|O7hGTe?S>qgxZYdq-l`itmcfN5#ZW$4&tDKi^gx)|lT6l0?_6-k7*wynWF(_5#~d2(Q%?)$C97|G3)P(Wr{~U zA1zmW=M6gSNP0VNGyl65Yv{O}BIDpc at ZC}?7i at O=R0ch3MLx|1B59I))q>b{Q6czO zn!pJaIe|`0MX&vX3LS6C=m|IddnY9C7;W5YiHWajoDt60N8KhT?&-r*%l$koF80>c zXm86A7-u^hv^|8%;tvcxXXkwK4tpZ|q&?PVi4D;Ydi>FQ!!Ird`U&O>%$K#P%0$tu z<=(AGj(7UWs%g;W4&k&hJb>1^}YOfC6iK=MFmZ%lH zR7``r27byiZ(E<+X)UKyesQ-9Kh2U$SX`KVZ8>WyQm>`Ng>>0DGYc{5Va`XJAXz~_F=Y^Av&VHkYD~CF*&40#37zM5JZK}v(^CofS zC!rU@&hpntiFXbby93IkMBU3<_f05Ts%5^|_|lU41u?$^s*{zE zT`&Vdh|2PFxHoZEu|oU9WK{HL- at PeUP4#v6d%!BpT_kY+ at wb&BZ3}sU at M5*46Qk?F za3{D)3JOxDR$!jB(O2pgG))-gW|&V#tdJkeXx5=-Hj(xcxIqR=S)O{EsxD)D!fC(F z%?OQz`!=g(`+JE6TFu5)D3e4*rhIw?&0^l1%4dL|X^jvZzAfeN_6JHTtB9=Wc6~=w zhA(Qa2n{!tkTxdqmhsLHpPzN7pNydD;e|XVnZdc*ffLRVllLE19)Iu2h)#Yj at C90G zXX#|`A>>uyhzRis9G4muiI|l6n!+8EF?1z at Cat03!G3ltuEi_oLRf5L^oxz$YDTAw z0~SelK^k>;YtK5cBOW<79mE%R>q0C}22* z9gOS#vh1*YFw`}BGx3BW2*Ud&N)LuoUpg$iyIt%_X=x*nlOqJxwoU0T`AV9K(7wc(#uhUow)f(7~pT!p)o~DcA>>*{U z#<7-iOJLmQ12~2eb8Ix67()|0?VE(4`by?uF5I_xjLj+rj3`=ab at PF%5Xt*Lq9F+Rigl zkLk>yO$khAu2=AFF(JEUb#bLC<{H9@@L*+^b-#{0G30dTm;be{#&)kWjqk28dozPJ zSNHMA)iqEY(a}XdF4IEO`@;t{{eZ27hAaA+GMrvynMUg_-oOJ|jmA0recN~C)rCdF z)33axjSwoN`J9Q`9 at BS@Kd*!j_zORqs4R5eC}1{M5PlZQ6GtW zzxAfltmtblU%P5lYc2D0rNR$<R-) zTbl{?Yz;W(I$)-On_KZ<6HuB2)cq;lvG-`k`F7UL=4mY(TACSJ at ENC6LMA9q9sBmx zOMXI(S(w8$UOXFLoRPWppS&I-|oajAh|(wa|y`{gZKorfE+7jdNqY~J$D7WLeu z^)uhj59!vV7L at DDX=Jl(`Aw`W&xmX+H1T51ynpSN6!J+&c5lsFmZL5YY+ytwXT;b@ z^tAU=%-ydh;$3npI;PJ at UC$NZ3%A;LxDz!S2kv~IW(T|Xm*+l&(PFsO6|d&CwnR|FkaJRs0(3G#@s8kAOd}xUNW{{^H_C>bUtXF-NaIS)AQ+_3}4=RkUTg>^LX8 z0z_4{vvru4s0~OWm87tbLguH1_ZA|V+x3TgL>n#JN`=BB0E(|m0D?ya>vL1ZI+T#7 zvv?X@$Ew?F8IoLLMX7c4fB{i;XUBRtr^iR5G7fTk3r`JQw>k`l##c;-R!;8_ko*qK zIMVeVy4kt}yAg#x<`R;U8&;;6q}DgbZOr_!qbR+(n)fQW$(-hrDaG`jn}1)IaI2Yu zwIAyNlLCFDeHJe!ZYrJOElD~(6Vi>2xXvXv)`DegZgilNRJOPNU>0s(;+=e(d!Vy< zC$q!#zH}C9v||@1Fn`b_GqOaF@*$&jYb)JaE|3b_ns z$m?&HHudnceePqedBgw zq{Q2m1%$#Gn3`_voRF4Qo$=L2$+b)KCAxe+t8j`Xh2BKQX!u*rr+R-JxL|TmhF!gH z)Vrn14$FSYA)PK6Mb+Mr=0DrETJ>NTnueZB;fb}9>Y7{NX^E(CRX#z8t;Jw(*`Oa$ zX|-VuUUv)$@9BnODUv00Vyp1;x0WG~nV%Ze4tp*F1h<|R-1WQfSQrH}WI1eO8$o_t zwhw-75vU2W8vO7yjFq}t-FEQ8xzy*4)otj9T5E5;lCsyYwlH4zbeSS{&)Ti!(fpaQ z#P=b~$B+;)IoD?nDzeczGxgcd#$NkJfSMX7Mrc2s!JX%JZR5I2 at eBG~a;zPWqJAzx zOQu>kyzdBby6_6@*iaizav8J}9!cfBU~8Emlp-*|!xF(aA!0j`-icQ34EX((*ffWd zw}(@DYW#koTR;hnG9H;*5M7I8PT-CPML{r076k$*O% zP#M^o3$5sAmw|}$kZ)7pc(jzx3|^xBY3r*zC;i2~ghQ4~rU;8~TYDEiD%782mK&6) z>u17vdJiwiubzyU2-<-(FoekAC@^g zPW){pJ0Eyj=mO)>6aC1C3WfBftg{7KTRV)ktb*^sV4a&92Wi4?U2AEfoO`CW1_j%aQMN6Ge!+Rt~N*E%3y64t8m$x6&*bBI>F|$#`k}LyF>2=9T3*?`}QR9$trLN=H&Hlk{*+ zR8FcPuS!ksieARgmFsco^y_+^e)s!){)W#dA}XB4P7MG!z>5_C2?1bm&=iDPLSRNH zJREIng)}3WfaWM03fjmP0}^m1)~28{4xkVK5)oL9Ls*$(I2gdv(%jt)u(z2E(>9b91txIg_1T97(JE zSdLg{7gsA1gTYOk%nqeVrVbPWFB-cpn!FXWAMs7e_BwYY#WKHEz!I)s)p9 ztJgc3r8=5Mx}#maI9^^p88m1heN`~s!Gqz?^j_t~p!<1yMSD7gdRZj8+lSJf!`Ha6 z8J+Lc0 zZd&WVVQqMByz at 3;M2;XLO&DJpZ=Sp%DSAuM)|BLmBxXfoSm9s zf^C%r>*ag1FBEK7?JAM(ljO-7bL8rpQb~H*In7?~@lwIzeHj(9;->wHhoxJ~lOmC^Fr*1FoN{QBNTWkFy0?hCaWOAlRatl!sEUp7!1az!b;u8eAGs5^Fe zuewokq2c>8hg9bdAH391HU3j%*@=Pu>aibMALttcN1N8(IFjDi{9R$&)04-JoIbvP zuV(ULlh5$clr!qe)2$8nPQ*PtCOFqtuRhgr{#5ztcD44ja`My`?b(inc9!9E?9+~o zS1ugBbm3@^w)OhumTQ+=UtUc3(I518`pm^^q0Qr7mp2e-X8228@@a` zGBh!AQ9sr>dHeG8y-UAN4nCahpS^eM!EckZGdG{k+rhUtPMyei{X}63j-v-*>BfK$l&12&hob;67H zWOpAgXASG at 55e1O4cx!T5~=kz#2QkISj#E(E@ zuvFcLnH|hO2m^cddJUGf)KPT67R2 at 6X#zVo_O1DMcZpYIN+TqQYgQv3+458 z=|4!IAkwsYRp*nza6-I+P{%fC`{LM?!6JdzuNI6ksNAVYz+Td&<2VZ{jlgGzOSgdG zNr8-55BAJQIqXP*fIz@|4U{+tbl3Ra?^r6cDSxerV=Oi#-tAr1X#`&9i0Q^o(+5o_ z{1>$Rdz`uUp|gJDp$es046R_ql{4%ev-$*yTO0f*jXUOfBZ(0M^~;fu2Q8LejccBD zB4JuCC*S5;Tq0@&0k1h#ckj=pEDOBG)%+2BG`+CW_eO?CjOlih&>HaAYvU at kpaHB2 zjA@*D&s=okyg7P~I|x{}?bEoGz0Mgrz4GW`C|^m6p>&N}JxE%6O=Wb4LNp0DTQ&$#6p9Rg2#Gk8)p0ut}yE`qJ6`NpTVG83l zdei*7i56e82FHb8?l1~Cs$sWg&rWRMl4$5``_y-b4qz!^GN~97xdpVd1>~Jl~?}C(*CjIR$g510P%c2Jc=a^_VF4EfN9G^8XRoJQzY1c z%&jCzA6e+w{Ag?vn>V4^xN`n;1^yp6g7B9Ck5bFIU*{T#XqcH_#}UV818qAO&yfDm z!~G2jO7+aVH7*?>9h^J;{iPxM<>`^j-v7lE=BArc0 at 6@VCUHybNiuDE&`eCNEY+q* z&ov((>6LIcTkXIXIfk(dA1FQA>-P%+p80M~wQ at e6iut=LmiP6Y(kN#Ddj@$k=n>Vk zc<*BT=Galj!HCZ9COvF^*HxI$)zeElIuA@;JVfN`jGRewbAw}5 at Y+-;HK&!R)>*S3 zK(Oyq6+bO5ky_?mfY^QQo*MX?fD^Y3 z=FEuUu7A3&^6rCKJakK9X-fG$#C6eo at eeq6DBbf2)S2<3wV$Y$xQ~``>N|o zKN5)kES-_3O5sAByJ#}4Tipuj+diF6*6Vo(JoBYM z8ToTSiymo(W9ViWLk+>K13dGK)NuDFYU{&IN7;)fsm2Qi*ec2Q#SzfT4L(rYnGTpa zP$T1?r#9^-g6=uHA!Z^f{;*16eKuci1T$Qt;xQzHv^**Yz|N?^%oDaUl)K>ug(b at r zsG+kjsff+05D+^6-DLtJqs0o7b}GUrl7~ssLl6}ruxI!55L>v$VnGLCFB-tLbeTzp zN($+f0H`G?B838_h7w>DJ;a8Bub?kD&{inns9qh+KZjZ!kC&TpmeMSP(QCi!lv`Je zK(kOTIz$acN%RWOJ-c9zDgZ?ng18LBoi#e$3KBa|?%a10TOyLN>LkA#f(z6>nvq8MUn>scS3P`1!Yz+_Kkz6p_NXEF(gwj0+tsX3u3ryOSC8S8E zsuoK66)^9}FL!MZ%oX&X{O#xUCHCzexdL%3p;{keSWtBd_!^2b at zs43nQG zbGwgTlan*#mLv3vH6Pv>r+3Wb at +5rAJ{_ub`LX3SLzsQG?np%?FoU-oW1|jMBb(Hy z04 at Z-Pb~|6pEf&${6t^*a4b(zvv&dcHUwRzIzdVnffm1{Q`KCQ4KWqLN`{p5N%OX~ za2A4s+2fW2axxx*)OMXG0a98etBbt0iN89ezKkj&A#Af`qstR{_2ehBZV$ox2lQpO zcci8{fNnl$5a0qsp6l}DgsMb^MH>azYzSM^d;IOz_aSC(O#gzNdYDbs$t|VAFA*;x z(zvQj(mYKu at q-p5F7_MQh~m$Av~1otH{x+l%@&d0F78o$+tbZ{*;J~pCfOd_xV7blV4{W}3Kf1_*v z!oq`MIt0Omx9ZW|c;l{oG+Icoq8dd}j9na!%eW9w3h(?IdrD~3SYI&qPWH7DEZ360 z3elEoAk%<4mXGe#Lr&2PFq1ff4&JFp7a0Ih1n*>8|0Bfps1c8|U>}+202cnM7G**K zgeqh!0G`qcaRU;C3XTB)D+xXhX4;bvf?Oy;jj)=;*jpfX%WQnTFoOL3sl8B%u;Ld& Mkf8t%fdB#j1C=LYmjD0& literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/referencebook.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/referencebook.gif new file mode 100644 index 0000000000000000000000000000000000000000..e350c282ac41058ba1f3474a4c6df00526c97878 GIT binary patch literal 3097 zcmV+!4CeDkNk%w1VLSja0O$Sy1^@s60ssUA4i*3d4g?S%0RRFC7Y_&r2nz=e3jiDk z0wo3j1`H$$3?3N^1QrV$7z_;)4h$^_0Spir4-pO*6AK&`02ve}D-sGD7#B1W2^tv_ zKo9^R83!F34GYH8vg?OBoFu zBrhT)A}%5tC?pvzA|NUy5hx`eB_${+B_t*&B_b+1BP%vCC at 3c@Eh#H09xOvIDOGGq4MNBwJTuMhfN=HCONJUsg zJ9#`UPe(jcMnGUgJ9R)ZG)`<@NkUUkM2SK&U`$VQNk36jQC(0>jzu*)Sa@$vMOs!& zU{ytBSVMJHQh8QQVO>#NUR!BgS7BdQX<$Z at RYXT+hK*NCXJSxLXM<{GS!rfphG0@< zXm(g at fplhJa%oSaTvT{yUUF<=Zfz~jkBDEe3*!SjgO3!kBF6!gMgK< zo0NWdnZcHol%bQ4pO$!moxiP^m4Ttke4@~IqtdM2_(ZkZx&(qV& z=g`dG*~H!1%Gul4=i$ua;@IKh-{#`e?&#C*>)h_CX>@2HM at dak04x9i002AyF#rGv{s8|897wRBL4o|< z(MlBOgbf=mB92K!Oy0qP{`?utc(EfvjreGdLE;69$&yG&dhvq9MjUAuITn=ZG3Gsy zD_KH8V$x)jCMuz at Tm!SF(VF*C4Ouy6B@!u5rU02DMT*d#C4s6Q)W}Rc;USM1PIV0%XlQZq_vrVtX?{A z-r&*m)~?;TblgrMdIKi|?SFT9q>d}D_)$wZ;fPZU0s!>DO+5Bo<3a!cWHCt;)p(PP zHrk8>k2m9Rc#b#cXv0l24mc2lEByr65hoc8VMR0IgtG{RV1zSIJ at wdw%yS7$~=S36-k_N2s>CFl}!X>3{r|X*CYS{g=4xi&pM?bKw$uqsCmpY z=bQsibJ}3@%$?Klf(tf;T%iOdtORNlCo#lO%PIbddVl}|Wr*VrH-j)Z=^~PpfC(?k zd;?;0 at M+^Dp2cW03LRYZafqrO`I7+|btp0niQI4_PCDyMqU(4Y)N;)x9biHvIU_cw zWQfmvqf9Z_;DW{xO!QICQR*Df#Uzt(1LA$|R5Qb(HcaB#JT_mHAcqs4bbL at MG3df3U;(R4r2|34a0PJ& z5~zd?f_S{37>VeUykzw3PJM$H8(zQ#7I at -l7wJM5M3xF$m at FOXXvPdEgaCE?1AV|t z*!mcu44*+`L^vCfHJn7YV=Mz3{*Xum5wLKFKCI0k@)$rJx=;&5T*H9kr~ttNfDH7# z at E0$(8P{b|}k-KwJ|-i(x#C8c%XqF|2`$K|}!!9Por0 zt~3xbbU_TJkVGqJ^rbJ^;s*&pKn6^3f(jrY0fUIgJc_YTOh98t^GJmW5>SBz1ONt- zXofbD0gY!Ai5hx%C6|&HS8T6nGVEDm)&@c;0bYK+lIE7hfV1*f+H3Ag)02sai$w7=_7}XfW z7wA9)4R|69fr|bE5yYU0Q=Fm*X^_Mw_Va}@%s^7(0aqE`pa(k8K at uTo1tL5EgD8C9 zxe* zD17q^Qhh at Oq7Vfm5CH=PD1ZV2Tz~~&U~6-!xpd*hDVs89BUAv2*)x82tdFAe)e+%7(nPkGoS$i2tWif zkbw`>-~<3LKm!_Zfd>%a(gYZQrU#&aPWu?aD-Z$}t3va2L>>J049)Y5v)SizlgQ1S5b)*WZ(oJ2tfvnV2oWj+Zev^g)y9Ao9q2U z9yJ(3wrc={8?53NzzBx8#|;crIKmNuz(XK%5$0W-W3AX=nk2Q;8Tx82Z-a4Y=dAAdJ0 z at s@CdDLla{R-p^UtNjm)^CSpCkV3%0-EM*_oZPv?BPYA-*kwCTV2>l>LhlmT1 z5D^#HfCey!dB$6^gB|e1^ApcbcHY5>>$so>4>^J5i!PgNTc_v;6TR&JaSvTIY0|^)(0|E~T z2O9Ym7Y!X54i78~1QZhrGYbG26AT#@1sD`2 z6Brm97Zw{C6CD~3CKnYi77h&^G9nubCK?n%69*F>EfpUrB^(?g9vLDXCLbUjP8SR+ zAt5Ft9V#UeC?q2tCNVA}A1NgoB_${{A{!+pBp)U=8Yet4BpW*-8$=)$LL(O`D=9c9 zB{L}|B`h>9D!}FD))CSS1%wC>%g7BsVb}FfuPSF)%qXCo?iN zW+oUmGbJxGJ54PiKQbsYH8MCfE<-UdOE4!WH&8G)LqRn$Ni{1tIX6BzEI~InKRGjJ zFC$$wB~>{yL_Rn_KRrc1G%rG5Q9U(BKSN(SE=xZ;RX#0qHz!C#GD}B0MMy?cML$?X zJWNPIU_(1?L^(rFUw=U}T1!G+N<~vnLWV&wP)|otPfcJ;PkBZ=K2&x-R&bC+HgHWv zT2 at VMQB7V~Kwwo?ep5$cT~J_MR%lyRMPY)8Q$}50Tzpthc3M?vU`B~oPiSLNQe}Z> zWnF4zS#D!vc4l0TVpgPGRfT3?R&bD^U{;x9R$*|6aBpXDaBg*QV}WgIcyV8TZ)kCL zeyM6+X?>M~eQAJwaE5(zih*N>gnW>JeT9UAi-mECg?N~Ocx{TUfryZLi>8=|eSnOa zk&J(ijEs_ug_ at Inos)H#m5q6s!i$!$nU;u_mXx5BlYpGQotv3N2y|<&qyrRRsslL9r!oIM`!mY}}sLaN)&&RFI$hpbM!qLmN)z7-s(ZbWw%GuMt z-`K?4+0@gVn3g4|J=_CX>@2HM at dak04x9i002AyF#rGv{s8|897vF$zk&qY z1#<+)h7A}nY^*5bC|Em$7&B_z`0t>|+xZwsYyJ)kXH}r6LjyT$g(@izp zWP`>akBpHIQ7MpNg&yv#L(Vzu#ByK&t&BG#H(o4}N;EpYN6$LmoI{Q_-DvYnG~VFB zgBp)a(~nH%D6j at 0vAna+hVI~UAOP6N*q|3Lu(IYl=&)m4INnr~rZ&gy;teTEV1dXZ zbH)@(3o_`ECpzb#;|?$fMgWhN^hguM3z6^=4LSZB9ybn#XLb|KG2ZNA1{Y!svgC9q zd@)BQ%(%niI(;5khKw^>6U7LTu(As|=!|pRfa9Dg&NI(&BaIh2B$0_SnQqjM0$)^8 zNjWQ`6OTJqA_$6>GfLxx29Z#+O*i43^UgeEh9l0v+dN~9H&Nsu?k4?|i;+LCpdiC4 zmP8pUJMOr+8@=%~69vB1h(iuL7|+AbtmJgl4UpB0<34m#}p%m;Xc*h6$G z8Xz4_G#I)gH{B_tsSTLTI57eifBd1(MonzdDJb()`(9~LfR`n`>_85IA+Pd_tlSx< ztg@}zWb-T=VKkzQM(4&6hc2jtn)o|W7+`>S9Pjc0zG#vYPdx3>6HYV(rwL{?-ncOY z8%TJicw-Vnu$m<5 zkdJ=s#~)uXohw$sjQ70_KS(=)^_s)0BRq2pTNNZB at 8$T=sF zKn_Vb#UHd53=p7U5xr2vJ>mhsb$|mw0Z75AJeb5?tYaPV at CG-|aU8_0BTd)16`RCI zg()=}D7)(&;F<1&)e(mF^HIYVfpLZM33I}XPUYYgd8 z(Flhq65#|au;3I7BS!HsQzX>+~)(}NSxPy$aR0UzaB!xp$u3QNSI9P>CFI?54?4={iM8Aw42 zGGKrWW)pH3n1nRmVH{n|fB_d^fB`&^2xg3<8DNS=HNv3>Gf-g%e?Wws1X7O)$RP*I zSVbb921}lJJ4s&?J3=)BkN at jE%_xOevJn(^tO4J1 at _`n;Ok&R+X zgE?l90~U7Ri7g6*7z at Y)7kaUZHzZ;P5Ez0UEMbW`SOGdN2m%}0{GbR3}4A&`IsRLH>q2JoHkc6SJb7;66b00H3sKnWp8fO;38-Ufu=y+;Q1C<{`mqcU48j6vFrF2*u!S1vpaBiAfCUiTfCMaH0s~NN2FO4LxCYe=X2`=1 z+OP*f2x1Q)-a{Lpz=9HBzyj|LK at DnP0SRQ;1|Jkc5}nXQC#KwqQ=Fm`naIQ=9x;eQjA0B|m_qOdp^QE> z;R;)@LjDA|W(E2$&|qFMctMVHo4n#u&ydvVZ^t9H7()5CJMY9qLZkq86r5 z0SZt+f?1XaEEtWMLS}p0~mke(h1;KnhGr%PagXkYIR)E=G8Q7I3g`WK_Et3tu)e z(tH63e5c_FJ&_K at D;{u?Ji!P+AOa2oQHxJ|+}hZlMIdnS at Q61-C;3_VK(Nt;)f~Yg zJs?61On`$kFoF}ah&m at 2kp&zO0pcbpw-Czk4WSpL9*3a8uo*M(g2!O#Coq8tfN*vo zyqq;gID#YO;dPq@!`wDFx? z3Jwz%9T5y66BQa35FZs39Ty7}86O!M7$qDHB^(nO9wZ(g9WEOh7$7St9}6NQAs!_w zIUgG=BoZ7ZF)Sk^F(wTwCM7c at Bqt~)IwT|_D>pzSCMql`C at eEAD=#xDDnKYBFf1!F zEG8^2EIKX_E-x)NEiPOoA}}#8DKkDqEiElGIw>?nJ2N6qFfCIrE;=?iEI3X at HxxuS zA2&HRLN_=@HaIpqL2NB8Ogs}@H8VdxG%`U~PCPj{Lry$HN*!zN?3D1K6yVsJ5FO at O&C^7OHNNrXGlsy zQEg99SVL53JymgSQy6khP*he^YE~IdSY$|Ed5cd^d{k0jTwQZlS4m-lUSC~{S6O{x zAY^21PH2i{XJk`rhLK)inq6F3Y>!oLmQ-<(gJ@@HZ*y63jA3wsZEtK+bed*yeqVBl zv0h+Xb)8UnqmptWTX&dNc%EZ+jc0a;dy!myq*s2bWqg=< zdw61gpH+jjXMd=Cet}$ruVaC)VS}l-Z*jwIZ-0S)XN9v{iMqgYc4LRSUWmcFbarNl zuVRU|S&hYCjJ}13glvkqgNTZkgob31!^3=iUy{makjaaTk8O~|i;aqMkiKk^zmJiQ zY?aTqkS1!E%5s&-ahlY1o5_`zlz5uYYo69|ozTCRDs`UOnVg at Sotk~1)q0}ca;4vS zrPy|*<)EUUcd6rlsNVLQQjI{8Fwf42IuHUgNhq&{wwYQ49^^&>vRB&y|}jNx;2r){p`Fh zyS=)T#Q&AX|G>h)#>d6a(9P4;(%0JF+1uFP;ojZi<>cq%;^*q+>h0+2=j`w7@$>NZ z`1Shy`2GL_CX>@2HM at dak04x9i002AyGynhy{s8$297wRB!Grqb z!DELFTRC|54oaLzvEo2>m8y(5F{5M06DO)vVrQ|W$$|H7ErD?YhRc^AU%LFEir&ea z2KD*+;WB2+o*E=1Sg at dihY}ttJW&-7r$l}AqUzIEt`49tGi1W>XdyubE{J+*Q|FGX zJ9pYlQF(&RX+aAwUVspgpb|ZJ2SDfrk)f}E09<;VJ4e>6*|TM9QGr6zEx!}b9UANBL+8Y*DhCupx7+wk6*DRzN#040YE at Mb^^lwBWMsIm^o<8j!`pRTDdxC zynq2aW-b_wwifFxq2;e0pacK}sKGzJXuv`ZQmBy3Ip&-bO>yV2XPP>|?4rvs;0&hC z5zAO~Mm+Su5kP<>R`E|AArzs-1-%@WO*7F%BjH)2fuoBqt3Wf_Xy!D5-$YgTa{`G( zHuBFBPH4e_CC8})jx^DLBcWN)*mBA+=Iq$uI5ac`q(46pIU)eX{PTepIwTR{gw#Nz z<6+6E!%Qu%G@}k-4KkPv6bF5B#upa+^97M4LUaHG3oNKyatv>@v<^ z3=&2d9mNeq{giuQ at zZi3j!`a+98a2q| zu>mpo>@$@&^f0{aBFPPp>vPW?gkT|q8$#b>PX&r7vdAEd{IQ20&npBcQ1F9ltRo%kIG`Nf zaWEoP;vYtE0Q!#MG+v;O7r4OSEHID{wxPolARK}W-~p9=pkNMvScD=Nfe1+?!V;7C z909M;g&JPr3LuDwF9_v~eq_J_{+ft|D_{W&T;ReLqZq{|FkuM}-s2wL0HG)3hmN78 zz!F$=MJP at Yid38;6-#h@=n_Jm7hW2!tU5v4=twA`yewLnKOo zwtL6}4l=tm`plmLII!U;K00{{aNh(t_c6r at n% zBqR|9Vmz at P-nau3zyObZuq_-kP$4BWkqS+mB5|MN#1kO-4?qwJ4*&3i6>=~JLrfwR zs6a(5lE_SB>_Q0m800>LHkEqZ;|W>VgCP3A2upC{mYl%EDJ*dYUXls`BXWj6RGANJTP95sFyE0vXEwGDj3-A++KN&3F1>MHE1h2S()Y4}%y4BL*=`I{-o;@OTG1 zCc1=wz=25jhzALDpaThn!WFJSMJPfs3SgMyEDmZ04>EC&s5}uWnc%^^W`T%7L}C$w z5X2z1DF`KWs2&iw;T5J}q9u at MK)2|@6uQs at GK4}CqnN}jq*RzTO^ggFkVQD)5e`S7 z;0 at 52hNPIm2|p}i5q|K)ApYQp6Qt}OFGyfIs_}(?ID-|L07RM2 at QnmM0|S$gDm6e> z7O`dM9K9d|4|s3{JwRh@;*gR%s4)vl2*M6 at T!bTjAP{{(;1Gv^#33N?g-_g~809F3 zFFKHmT!88YfoT4QIFLr8Xgn4iVfrvcpK at yZm!zTo?4_eSd z6{`4z1nQ7lXQ<)?bTNT;FK_`G+$u|jm4-Dk^e!GzV`<0e27}Zwj^B=E7 at OFGO*h~r zg6!iAzNiN+8c~UN^wI)s=!7WNpoJA!qP%iqhBX?*;CHpl9Lxa5HqJ3yxkYF+(ZB^F z$N+TW zqzd;qGX4Ns$B`hQc)(gH!Wf)$jq_faU0KSLJ9u#nFM}hpe=Z9ZEYJvvEWsZDBGMNS z9UcQH;L!vqzyP?wjBAXIY&HIJgpk1t2PuPzSa7;2Y_PwzQ`Wi4C}d z8{^1^gOSD{DKX;|^ocAtf=!1Ai~t5z&<91%P=#{DLmtimga8~cfqG8>0uXQj1t{$vk#N%f$v*8IMk2A+I u3G6Gcl at rwA9koA6#XWEN(aXLVDGR<+^udm0+(H%3rG+n?(Mrbz1OPjslRBRO literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservetape.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservetape.gif new file mode 100644 index 0000000000000000000000000000000000000000..14a56a96f2af07574c3bf1397ffe7c7b17ef2210 GIT binary patch literal 3856 zcmWlZ`6JVfbeW!{ zLp4_^9m~`6w2nvP=}@1J at l;Pw^?1I|_w^sVet5k?!$P>eQXaqqUi}LIAOJv-Xb?cc zFh~r7fI?tQ%+UB{CZ=RF0-j)sClSqvMEhj~qOG}wImMnrwOmFeSy8Plt(X>8ES9Au z+1ih>%-Y7znr2J0wWWL8SUWg6*e&;_FLz)%IC$FAoE+&kjzVWAwll*i$liXPt+kD7 zRG^cyE7N6-gQF|c!qYD1)(O`ij*Hv0Ca(U->X5L6 zDpCBQHjyYfF-nwpEH<$!I(koTryfh*TCycQ?Ocplymc^k>*?d0Hg3&Sq-NH3ZcdVB?%$O8 zW9E+S>#{Dc%hGPhI#;?qUApsFO7>B4&iF>zK$fgDW#>R%PFix#rA;~4H|A+>!HU$ByUOnKiWy2kO$5wI}lH9yIK&D{Q#eu{X73 z-?izIg7)U3{mlnU_div(+-^D8Tz_EV$f5F+tyvX^pLcY&cXW0Qb!Hy#+IOiZ at 7VF) zp5rGD_03M4l3zJfF>(5b{(&=>2lkygJ2-l_Z1`OD;LthU)xB4>S4KuAo{iOvT>tI* zjr%ulUVnDC?d9Ei-Sj=<{l?e7b-vTLJ<|Wa at aVwXCkGxq(SP_|^=77bajyN-+=0Jm zJ3hZS`p1j8Z}aW{zUuz|rssd}-n at Ok@NJ>*cb&1VAkT|Dvr$8nvM8>)8qRgr at 7Kv_~_a{6quY6Lkg$T(klrtTXf8 ztk>#HK?o{Nap3ag*%#MJhqC0wBg^3k5~rX7doyiPWrjhq+FqVz2ug-%5(8^IB+8jq zf-iXd=LFG~*E(73dFN>K!KIx!q7i{J`uK|R+mgkUsso*Dc|y|Ec-;X`N~^W-Re%4( ze%RE)1(!v5wdD#Sw`3|6wb?o0_s0h5L&vfy82>RP<>C9&_l9PYKEA?&NYWNMlB$FW zL4utJH-mp!fI!=_KMtD!LA}qal_r5^=%_8gjN4Z~SQ+dQ(S>-=2z1x?tou*#u?O>4 zhtQ6+xk^`RIQvs_|4jQ(?mt-!P5i)7bAltyXwY&hux9)8XQw4y`4kDl|YCr9xW z$VlB=^mZiF3C%F#ZK((}-)){D84LcZB5DCB#n1~e39bden3#)vFkx#Oza=rh?Z0sm z0YxJpQ!8b^s3{O7Fu%;+;>xbOq<1`5dF?y0=Qm$^XWnlYLx2yCsm at h15m3MaB~QhW z1oIN4+lWDF;(h@}{;Bui9BAUUKi}2Gy=88(u2<8rrrtFc%ir5oP7?3)Tmo3^5bs`! zL#4%0iSnl7aN!)&`M6~9CcP6I{fUAEIET~&15dgrj;jp3d1o*%3WpP#(3ya1~WZz at lb5G)YlX?K?f z#$~wqZO&5-YxJW-&I)2s;?y`PsKN94V4 at oas2=Xos#E62#$o%5XHVN}B636A|9;RM z74X+nFRwt(!{v>4{icGV{69T~e!Lw#<<{sI8mhSAN5s}u`xBoUYt5L~lsBnY9(YCF z5&RPICogo$i=h7#@ITMu=cDVF{6xRFaUK^x+r`mK z8*%6THr5~c!V^6Uf}?ZWeQ{jag=oyLJ

    %-5?(#cZ8c(m(ugXr!f7siD zLp_gc4Fk9{SpMXTnU{i7R)Zap7kKZA-w(d}+qgVWxA-7}bJy$P)4IliR$n_7G(j0g zI=5{4rc2&Oe4}2}KX&KK)4X5qe0i9dTI%z9=-O59mxqp)GQk$|6_xdT>McOk;t=fJ zlQI7JQmEIt!Bm^FK9Hg{mfP{{(J`t~vlHS<#|SZ6LMcZuQ5AGK5xbru0B+@&cx~ts zLV*eTlBG6Y)^G7$Vr|seR|e|^uu|HD`F3>;n`Ho&_&jZMRR&aP)0n0_3yf`8$&JERR(yfKWImLDrOK+Gv4 zNQx0i(T#wXSx}oGVRfq#*06`jR~=)Mby}FYNbBcps7|B& z=*c!J2#A5QQG>m;O{<_1r9l))Xd;-gikZ%@PXJY0T6I?bkMjwI#i@{c#t=NBtj1}4 z&d!Fb^lW2SSoW$-#+UeISfR2yivpN at kO(1j`FF4vZ&3jq#Fe#hZ9~38$Dlg&kGmrc zcB(ll&L|+{ih&}EmQpS1iQ0b=nes&f_ik5Pd;sq?wwUZ_^$Z;pje%USo9aKxf zbgdc!4nrw|x{81p7L48kk}Gc~(n$hDt0&&}l{SRLxL+H=^&!`(gPl=1=r{(^cJGWWCqjyv}m@);*U2-VN98H#J) zudGGvTwVqS^0g#D%Q;)t1uzoQIz%7niG1c?kxG**lSrOn7GKyAWIc__8S91Ms>8~u zqY?zCcLA4qLBC8d8{nj1|41>@Qh_m5AxzU?$EY72d^7GisWbWG^n2Sct<(Uc=iPj6 zn{8nE;+;hSq1&B$D{^zSH%4Ys!g(je at T%CG!>pMU(S;Pa$~4>#vYU3ze<4ubp_qb9~a9?F)u;o zlfJ1 at 0#r9~GSb@#V_y>}5|S##6^@Linn1=J;ci^{;4z!u*Jdd}Zve>>K^nFVr`m~h zTDPw%l#qScv>o-??y);MiylqPl0a=1k7TdXm*F<*hOWLgWN&>kf>(06+D8(!1-CUU z9HSWDpsoon?k4lqA*VA;-v;n5&txk=v!zHH=-$ff-=qgEhcCd{GW!<=zk<|rn#GnM zq!@DXDCLZ<>|nM%hNIS6n2qdgxMpQui^_L6c&3W|R)Vw;Pk5FJJ|$cK at h0v@p_gW< zeyjW+%BE+94^MVslX(h6SdEZsHu6~#^$oEsJ(#}g{X)QZ2*!^qAnjYIi_h!6*rFeI z%_zgH%L3O`Cc|CX19kDb?uBcL30GAU5(<;RMWVj|h8mtuE+W^TS?~OShFl4|{82un zbt~<{gr{|rtM)*NcY)f`C!5Xt064><5yLJP5Ps%|EJqNPvbW_nlY~$dLR}fjP(G5; zE1g at kN_K?+rzeczw=apyQx)A%q!@hf)pP=>0ZA$`e3o8Ww-BTRq4NN<>OKTUduIN8 zM99?-fC$a32}g$Js&h)!&{b;qqrVVQbnu`Nlgt8865y0kp2vd6NYH9^sah#lE986@ zgs;XnvVc+ro at tN(EP$!S4-yse81$C?2>Mm&}1c+;>(0AMv2NQeRJ zNC7xB0-?|#R54(w0G-sJHUS*vHjGjlw3G%X6&y_i?y_(zSk8__lh0ydkI~Y6z?vc^ zZybSg7eKTIvRVS0%Yex^`(DcTg^OV{B8cC*GyfBQo`?omuz3TiTI~?;Np<0aF4KUM z0WQ-awn`8(mTHGgg+e2X3{Z0#BtnJo(yWObfe8jUs|T!!lBl=|n7|0y8X$NLBuRs; z*V^DyOlD@`zB<5`24xz-2-W{Ai7a+%3iPJY-qIJ>*F}z&LcdX9_6jSU3}U4K85#)A z0HBGWfCv*WkOQP}xda-=!oASeC>98i-Q<<_&>D#Onj8xr5w at buoJWJI2Ee^d<~0zr zA<5nizQo?y=9;FM=2>#4DJkBb^pru;NzDU(0)lAuIR(TeLjzF at yXy(_qFJ`*P+Sgx zE2E$p*c$ct}3e+G$9NUvn4el=O at B1x;6}}eGP>4 pJ%@@>fpWf2 at _oWr!{Nh^2+|fTUW!Q}n#?GgPrYuxMkNA%{|Ay^3daBd literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservevhs.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/reservevhs.gif new file mode 100644 index 0000000000000000000000000000000000000000..9761c3e6b4b4bd05d18559ca1be506f5c8df20ea GIT binary patch literal 3642 zcmWmD`9snNS*}97H4UBFB{c^Ge&)r?u+Yv!QOwT5WXfnNN?i at AG~C^!f+hv2pUyZFvzuDDe0#06+i$ zhJ-)~2q+o_p~4U#2&W?83<$y%3uhq_?huq00fm5J at i;Wz0f|Ckkr*T&jiDe>zV;}B zBNmGzV2OA#hDf%@<6N;w0trtfIZ^B}Br=mqCXp#52YV`;WJhvv^d#C*sP;|{6laPf zjp{^o5KtYN{}av8jp5|%M5i(6lpuS&6P at isccMEx2^}4rT^LLk7L)17bhUSJ;R_f} zE=+eOi^<{egP3$K$DQlu%;C~FT(->F(ZkKx-NVPz!^@NBvE7~R#rN~(3;EuhSgxzU zhr#m}dhsU-b((tT&KyHRlsdg&S6V at O`u^R! zDl;?7+EnsgS;a<`BxiT=`6O{xmM%LdFFQ9YC#UdqvRsp=%*(FM(v;=qR%mm}wAy#} z?kU=vf3TpSOuM(Tpm5LLy*2yxRuz_%74NSsE5twm**$kaQ&-zys5?>LU}$bCZ9UOqG`?drzIU>-qqDo>^r^F_PIsR> zd#v|;Q}2cIAN1>o2J1h(*n07!!An=#hOb<^a`p1a at agNHzjx#F>!V}ix4t_4<*l2R zuLmp>=BeomGjr2-zg<|qxAfrQ)%y>=d-TJDm6g#)Kdt^~{nz8Czy9(2*RNjB{q^VV zm#<%JZO(6QE^WN|>+RoDn{TJzzBO;X-DGc(q7N42RTk`Fy|b^fh!q=`r~*xHslY}R2$9r_gB+3J8&v`df5l3TF>)dWbHp&?z&+3?}aPkT~axk8JxZ_c2hb#+r=7Q zyf<~~6Fqam0JoQCzwy?7Kq+UxFvp;Yjxk$hW4rZ_ z5=x!_Jye)4Z|mVksj=uK z>-6U-lQ9B^)t4CGuU~6%zRFeY98STv6>}g0Why at VI?gP`Z*8+aY;dmOWX^f)%-mPt zJ{p!8-ymCkiS3%;%q4jDD_4tXyPl;&Lx*TOF$BXST0Z-ZZ#08Lm-uGjr+BmFlbDF5 zsmnF^t|Bj0hjc}73-?cM!$tM-I#X^XxqX2dw?`zB at kc4>GlP`L}S7jE~F6F+ZCj z$ly=zluq1#`NOM;?>NL8u=X4Il7RRaGIq;XeQmi-cx!fIRCsx at P4Hz(>P?<|H+Okv zt!0+o#MrG&uDZJqs}n))$&J#m=Ov=M^p64Iyz9y8)mFhYZEfMV+TRXhR?jP&t9k9d z{WY9%Ps92j%@EEwqs-(dBc;4vgg8I%*0ehf0-rW`?HgoI|M~sn&L*<EO2E+E!dnza8fi3Dk=d?i3y(AS4%iOT9LY2mzX&Y{Ym)MY5N0v}m)?uC}7n4wcnS^kuBkG6kjtQ at y1;;Is z5pV3U3jnmRy0O>lw|Mx*8n zTeLi;JXSI}NF9^=^;_=NUaMrj3ax{dSlhH4pp&+FJ?UgzbZPG-L!gHcr&pE|UPjX) z-ui84zF5dVa|8B>73=v;Ilg{k?V?R312Y#fSA*TK+G<2my|@Rsq;+{U+>m*fbXV!& z0Jsb_1)j&8XvkzaKdNpFd9bp4`kQFx at qOYzoB-ioJqfY@WlI8tEOs1E_z- zDna6*3=>dt#XE}FdCH-FjlN_o2;eyeJ5RZ5WQn^rmvr4RGr&)L2hxU#&^ z6uLaWo4yac#a57_q(O}S|$O#)uDIXu$W?kcgqI&f$A zCV=q#8q8AuI$+0LsSOU3v>(dYaCv2#iMZcak2qmw=uji9Gn57I9 z_+-zx$v+)669zknPtJdj{`l`Y@@!{g=Ee$n%-Zl>$7 at V>#*pL9#Rl&bcB?W*now?4 z6U2vVx&1K at 4t%UE2o^O4SlPr5R6W1 at 1&-OfY#+&s9sOH}@knfrOOIam)k at e|;wSm4 zg}VxZLRxo5O7uXJ%{j`C4 at l@ zBA}j)%d?O1;C7;K9$2MxWOiRGEASKP>{%tdm5d5X7Q2pG z2k!k$#J{5}O4B&Un_%SE``IkXLr3Jh#;{NSI&xf8YxYDvwIC~X`?LS@{bL4nHr4QL zP#-Y`E+I%+G*%}yLIZkQ;c7ihvdfl;;eP%18EC4ij-&{Q zhd-Z!h9^T)C1jzM;-2h?XtCE>?KCe=(pKyWhruAzNzMzZ+7J3gb-T*q at PyTw2NJ#o u;J4jRhWHiya41KhN8SMloU;xcKULa&uEBO#i8>9o|4%&WYzGJe;r|CbJcddD literal 0 HcmV?d00001 diff --git a/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/tape.gif b/koha-tmpl/opac-tmpl/prog/itemtypeimg/Seshat/tape.gif new file mode 100644 index 0000000000000000000000000000000000000000..793db8d7a5f0ba952d9a4169ca10f2752ab016fd GIT binary patch literal 3805 zcmV<34kGbKNk%w1VLSjl0O$Vz0}2fa2?h%Y4GIet4h|p~4Gt6!4i6Cy5)c#(5gi*B z79SQC78oHI85blL7#kTJ7#S)q7ZxEM93LJb9Udqi9~~DTJ0Br6JR2M at A00Uz8Z03q zA|xUrBQ7N)CnqB!D8D=RKd zB_%B`EHf`IC@)buE-x`LG%+$TFEK+aGEPS=E+#TzSt%%9C at L>AN;5SxEi_g&Hc2!$ zLsu^@Ml>=zH#RmnJ2yEtH#k- at Ia@G0VlzBgb1pD^E-yMhRxLksJw8!BKs`M_N^mqY zF+puPL0wopLPJ7EI6`VWLS;opLqz$SSdyGaM at U$hNm-&zTZ&Iw zkVaghR$O&lU0PFKfmU98nNLntUWlVkO_EbmU|?ocUzKTLPEBC0PGP9EOiEE=omOIz zRAQr{RZnDQV^C(MVP=0+WwT9Zv|nb7sa8}@XS!2ou3>42V`_b)TwQ8xX;N&tYHW91 zY^Ygmv{h`tTWh*`Z%<)wpJH#OVs5cpak5x(zfyC?T5-l>a;{%;x_xzBcXfGkcX at Sp zbYFGKSa{20c)Gr3Wny^7&SGL~ce`wPscL$*XnMn8e8hZxdx(BtYJS0ie}r#<%F=CX za)Z2Tgv^nITaboha)rs_ZEdg$$%V+u$H>af?az(m(VFSgmFLxq)YjAV)|2hnpYhq1 z?%R&++m-9yqut)y_urcI;gs^>n&RK&_2ixT=9&HFp!nyY=jrDC>Ye=Sr2p=x{PL;r z^6&Zk`2PR=A^s6Va%Ew3Wn>_CX>@2HM at dak04x9i002AyJOBU){s8|897wRBL4o+J z$uh;Tp($n7-t{|3v7*I_-6Rb;P@#be6*FASsL-*&fd*rMiMzmQ*<{EN6$b(|k>;`}!G5wDG~h5~M$aZ7eGYlrb4Jr0O=OCY=Fccgf514X;GlJe z5Ef&cx_Dv5N)W3ohRA3_SHunu4VtXQ9vkuEs6a3Nww+aNoJm>H8*hzu(_o48Qn zqN$7tb at 1^e=+D_w5oE0j88W4T0SOy6EGWQwfrJMiCiEP#!|II0Ryc6j%h#Ww1|r4= zcOm1&hYVmMsZw>T`K{%VB7ym_Kmm&;Rw~aJo45f{ul;iVi)e6{>4z61BHjAMzJ0Iu zzk0D^rD~5233S_vXd1*t17{W`WX*uqWU~5PQ&>{dVA^-paIOdq60Xp``BaR0g at PJYc zJTPRDMke_H0DOSO0w1+}v&}bDR%zuo;82+*mf&nzrI%TDDdw18UP)y(6j)=*6hioL z2rRthA}24w1S4lIb=somoV at gzODws>X^Wh&z!In}upkOcEV1xHOP`De(`O|`XhMfI zq|iad7oL0q$|azJA}T1SoB|3apm;LssHTQWDysggjtc6mmwZYqC|*p#0~VM*GD#zr zsA0#jk32H09eFIW$gpP&n?@RHsFBCCdBhRNv~dig?I3*!(nlNMw&86XZwS(c9NmV} z1|d{n3W+C;bm50L^wvx7GWh1J?=i_;nE at KS81RrC}!Nv?T at G-*_ybBGJoB{== zh`@458oKC1&pr9nlh4Qe=#vjU at z5hrJoV5+k3IB^yzxC8-$Rc+C#SrRKKk$@bIbYY zQ;)~`SYgQ}?UGXQCm56LvBw{aEDt^H#3QxTDx<72$x@#j&pPas40Fp>%ahMOCeNIO zD4$11zr^Vz2qjfkpl(^C)CDnG4H3hum|@u7A7_(=ESlwkV$zL9r*O$gxX3>}Va2JJeK<&Gpq=f6X=7SHJ!D*I?iM z_1=VyxjtD;a*6V!JR-^|ee5#))9aYyM-*IO(E|-pP~m?S05k#stFVPLoM8)9FhUWI z5QQjU;elItAQqJ12YYO7cVo+fB|yQxN2~&V@{32@))5UTG~x{x-~%bH00Tv|fdC1B zkql?}q7zKQ5?vs{6=+ZdPAI_}{_AK5J3O|Jvn8)rj}t@) zx2M5l8bnxuKeS~LkA{+Mn5D_fNnTrjkAyk z+=OR^Nqpjt?Gr`Yb^)~!PGbcndI1JPfB^%%0|I$77I`eLKpCWTRq at G4Fott8#V|;Adn!7e_X%`x at 5`_CIbdx zjNkK|M+cnnjvzci4>(wWHu&Joz03F>R1rL&;6Q<}y0m2Z*9x7lPXV8EM<1mFZNFxYEg*C>} z12xPdY8=Cv6Ff0cJX$OcyU<5Gx<-y^kO35vph6FPpo2GDq74aPzyKIP0R|)>1yV?D z2N*zF23VjGlQ8~*8Tep^B3Oc^qN9g9dhm(Hmf{SnXapH{aSsu$qq0?)geNS~iRL=O z5}fG6CMq%AN`#^k*cF6!w|fXn0KyU8ibEgdpoC~-&2{FWL2vI^3P at P23z6kpJHkZZ*ummO`0T6&76G2=@5aVGE9f0B!C$L6) z-y2zWco-h!;6^l}!Hg0=;~B^>F*A^H;%9K98ZeG=HKGyYXHqP0uX?}1SS&kheXT) z5R;e#91@`jVOzoxo>+yrSK$doD8jqk{=*-nT?1&e*AmqJgCa07i9`V6+k{{P8|0wx zeait{U)VPr#@j7ow}IH&6_+3g!3j<{LKK+jb|NMY2RLBD6P~DnG)h4SSor$a^ajKm z{=Be+6IkGhT}XM#wXkwBu)GT_{{qalz;c??912~aLJ^E$i8Xwj+P;3c#v7dqOjLW~ ziCBXdZg2w&yrLLTF9tD+(F~|JgBVzEhSsgF^{!u?>Q!$B4Bl|;s$_# z!x{jg?za=-5R|7x6ina+G3Z|DH-G^QiV=znARr2(??e>Mv21QpZ}3>Xl?+G1FPBLHCp9&ADf&}g&|eDDR#i{TASx4krOyE z10JA}+i?Ix at R3nD5FzOwO%NP%u at jJ#6DmNHRjC3du at z8RmK9+Qb#N1uAp%zL5lp25 zl2I5lz=}ap2i*XY6R{ciAPspLBqvb;AfX!p5C8|D0*0UrIO!7ofDf6u8T}wd%HR;D TFb1-q4Tk z&|N${{X9KGy}cHBb3M6>0;4=QKEA9t57r`|2tQw*ufLDK?-D=15T3tR9M>b%KZqaX z5%@0xg~36g!NJQi{JfI`{A7Heu&{)s;mg98goTC2gfH`5yfh+wi7DotT`RBw3Y|oRO52n<`zZk6xUXR9X`oR+%8wiK8?Lk+QVRwA4~rx-2b2 zoR+>$mQk=ey&yeflRhcBJ#qP()#Yo}l&;I#n4PU`NfE7Gr&yblowcr5t`M)wDN?Le z<>X3pa>{daN)M$b=H_nCTOYT+FsUakwlKe_FmH>ZpuAvxenH{p!opn}3M+cDQ`Q%k zZroT^vT8f|X1rdC_Mr>0ih(3rnxU&)?* zjV=2(wX~?3n-8?LD?8dZwznN>Yi~VvwCw1y?VVp6I*%SX-laa?r8{X)> zxr67Chpw7 zZ+h^c_ukaxFF)V->EVN4{&V%|Cd0 at YYgOM_C-x+rLP3 zTTBQ~e4P&<7_r at P(0#!JzmZ`>E_J$jDc^}~5fL;?05-iWUe{x~=jMOm<@>P%z1$s+p6yETm}jF$ke*&_oQ1lqVOt8R(49%%wMet(c>n=JRxNOu#D zbE>DcnUl-ys0bRNmzpe4m)X0`14dBhY?J%-756k?r+?L;1ycfBhz^~zI*`}tkLwuq zB+;p!`h4nJj%=e*(b{)Ig!CQt${KV3Ubyngw#encn&I!aOEG zPM81MQA?@l`!wyD$~>j;8x;@)TwfE`Uv=dL{2@~Nc% z>^@gtODL}F3`IjA6rXQ$-hbXD+#GEQJ%SRAj<(9W^qk)sghS+{IldD9(yJHfw=SOH z_xE1;cp7w3S{z8`MoeNL*XM;Jo;0n<(f6$187`N4McVLvBPq9z##<)5Wrhwm0N}_M zy}?%_eAz;eX+E$LU)}nCtnGLY;qqfcA7O0ayGAoI;6Wx&JHq}m{jq-HYSm-CaG*yCj9{zRUomD%{DbN)Mot|~F8-?jsnq;l)~IZ03N z|H at YD5;r%o%SmB)VF}8X4J7zUitoj^q=h`Iq$o%!F_gS1yyNuAO6hjr^u*^MyY&K} zh50^+YcD(9aA_bYIYL_RJRSl90I>eG8A2r~(o{8pY&Gzq%#5rA9C$_xT1%%%yG03&5{m*hDjEc44QeG0jEWTu z+Vj2K{i%Gt6#c{90$11dM?{qpMm&J}>n&-|rA4`N0zoo2-h^j0`;@V%zQARdA`7_q71d6IM4N|vd80U3UGKH%y?H+ zw{%#8+1gi4^Ti1m at 2rkR`I@$}W+>o28Nv)ACLLSg~YG0cAX7 z(_V^o!KYi$%1(FYpZ#$W8DmXVVu%O}RP*~4ceMi$Mi^NG7}$-uy+W6mi5Qy0h8l85 zGxdcU<`m_VywiG#_PIC4D at aqnvIFdVlN}rMO(3>v1w at 3B!*~tCyV@(=bh{c(0o%c= ztsKmCl?A zH1{i1U4RE=C`&Wzs?f*6^A8>K9tJg~&4kjQi-*$_6EGDM5Z3JH1>dMS8 at 6hy>p02` z3#k$A)usoZ{ja%}-gw~`ACiqWoo~kG@}rzu^XNlGTJ*rAtfDiT{>Z2cZdL60-K+cC zVdZd$!zL%Ee4@)8IV|M#YRRsL-Hh*>yZI3|xV%V%>_(u0bV0}8|HzZ>MaCsUk(m|( z<*4pNog7l;jFVSWhYZ8vcOGFrjEMkj$9dM`GF_ at wO~o2n&QFrOHf%4ce7L7gvwvv*S?)8{*>cnGCxLz7R2NgP>9&sMw^p9grv*^Bq-L4Nh3u!R>ke4@?|b==#R*3}aIQ{fP9SvrvDKIDjms4DMQyb_}@FQdRC}28?=* zum%i&HLc}6XCu~3`;+=iS=`pChAEAfoN;(+w5ILEqsWAuR+VhL?4&NZQ}|k924O1a z9oz28>2hE=h~5ll7YUK;DV+Ln{PnwS0~_kqE^S_yx6DrRGQE*dZ<({|%;hf4sgYLf z1ZZ>MUeHQ0ptWGvv2Z!m8~ry7dQSfo;as(u&8>mQ)r zBJj5gyxl}%rqE;|0Fn>gB}b$eA$Cu|cbRH;NnlxgXsW>>fnSXV0IVG-{u3NvcTMB3 zK!m_zl-`s{bghua64E$o5X1y3FeB>hb#(w+YlQDq!*?2L7o-!w&J%RZaeAN?7iCCY zEy42wF-w)vwJp?kJm_NztV at o(hi|wcM;Z-mp}^HGh1Ly%?N*RL6z7dlg3S#aC}?zR z0U0lVqRnuf-0`3pUciT5!h=xT8w)IC&uJYV{u#`q$0b#2Rv_V1U$%#BO5X;BdjQFVuhxNk7Wj64eez2#N z00=XwG4}fwx+b ezo}bns#SMPPGEc+i^XrE#L literal 0 HcmV?d00001 -- 1.5.6.5 From gcollum at gmail.com Sat Dec 11 19:46:36 2010 From: gcollum at gmail.com (Garry Collum) Date: Sat, 11 Dec 2010 13:46:36 -0500 Subject: [Koha-patches] [PATCH] Bug 4965: Adds Title and Author data to batch item deletion. Message-ID: <1292093196-3511-1-git-send-email-gcollum@gmail.com> Also corrects some XHTML errors. --- .../prog/en/modules/tools/batchMod-del.tmpl | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-del.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-del.tmpl index 441f4c5..8199a38 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-del.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchMod-del.tmpl @@ -86,6 +86,7 @@   + Title @@ -93,6 +94,7 @@ Cannot Edit" id="row" checked="checked" /> + @@ -138,6 +140,7 @@ Cancel +

    Return to batch item deletion

    @@ -174,8 +177,8 @@

    Return to batch item deletion

    - - + + -- 1.5.6.5 From Katrin.Fischer.83 at web.de Sat Dec 11 21:17:55 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Sat, 11 Dec 2010 21:17:55 +0100 Subject: [Koha-patches] [PATCH 1/2] [SIGNED-OFF] Bug 1997: new OPACNoResultsFound pref Message-ID: <1292098675-3715-1-git-send-email-Katrin.Fischer.83@web.de> From: Nicole Engard This patch adds a new preference to allow librarians to add content to the no results found page if they want. Signed-off-by: Katrin Fischer Changed surrounding

    in template to

    Will send follow up patch adding sys pref to translated sql files --- installer/data/mysql/en/mandatory/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 11 +++++++++++ .../prog/en/modules/admin/preferences/opac.pref | 5 +++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 8 +++++++- opac/opac-search.pl | 1 + 5 files changed, 25 insertions(+), 1 deletions(-) diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql index d4fb9a2..be7b6c9 100644 --- a/installer/data/mysql/en/mandatory/sysprefs.sql +++ b/installer/data/mysql/en/mandatory/sysprefs.sql @@ -73,6 +73,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacheader','','Add HTML to be included as a custom header in the OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaclayoutstylesheet','opac.css','Enter the name of the layout CSS stylesheet to use in the OPAC','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacMaintenance',0,'If ON, enables maintenance warning in OPAC','','YesNo'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACNoResultsFound','','Display this HTML when no results are found for a search in the OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacMainUserBlock','Welcome to Koha...\r\n
    ','A user-defined block of HTML in the main content area of the opac main page','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacNav','Important links here.','Use HTML tags to add navigational links to the left-hand navigational bar in OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacPasswordChange',1,'If ON, enables patron-initiated password change in OPAC (disable it when using LDAP auth)',NULL,'YesNo'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index d093946..e3ee37a 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3876,6 +3876,17 @@ VALUES SetVersion ($DBversion); }; + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference('Version') < TransformToNum($DBversion)){ + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACNoResultsFound','','Display this HTML when no results are found for a search in the OPAC','70|10','Textarea')"); + print "Upgrade to $DBversion done adding syspref OPACNoResultsFound to control what displays when no results are found for a search in the OPAC."; + SetVersion ($DBversion); +} + +=item DropAllForeignKeys($table) + + =head1 FUNCTIONS =head2 DropAllForeignKeys($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 55560d3..acab30a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -147,6 +147,11 @@ OPAC: yes: Add no: "Don't add" - a library select pulldown menu on the OPAC masthead. + - + - 'Display this HTML when no results are found for a search in the OPAC:' + - pref: OPACNoResultsFound + type: textarea + class: code Features: - - pref: opacuserlogin diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 878a412..236f296 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -173,7 +173,7 @@

    returned results. (related searches: ). /cgi-bin/koha/opac-search.pl?&sort_by=&format=rss2">Subscribe to this search -No Result found! +No Results Found!

    No results match your search for in Catalog. /cgi-bin/koha/opac-search.pl?&format=rss2">Subscribe to this search @@ -181,5 +181,11 @@ You did not specify any search criteria.

    + +
    + +
    + +

    diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 2bfcb6d..88f3a2f 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -97,6 +97,7 @@ elsif (C4::Context->preference("marcflavour") eq "MARC21" ) { $template->param('usmarc' => 1); } $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); +$template->param( 'OPACNoResultsFound' => C4::Context->preference('OPACNoResultsFound') ); if (C4::Context->preference('BakerTaylorEnabled')) { $template->param( -- 1.7.1 From Katrin.Fischer.83 at web.de Sat Dec 11 21:25:22 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Sat, 11 Dec 2010 21:25:22 +0100 (CET) Subject: [Koha-patches] Bug 1997: Follow up - new OPACNoResultsFound pref Message-ID: <1670279439.1942332.1292099122668.JavaMail.fmail@mwmweb073> Sending patch as attachement because: fatal: 0002-Bug-1997-new-OPACNoResultsFound-pref.patch: 164: patch contains a line longer than 998 characters This patch is a follow up - adding new system preference to all translated sql files. --- installer/data/mysql/de-DE/mandatory/sysprefs.sql | 1 + installer/data/mysql/en/mandatory/sysprefs.sql | 2 +- .../1-Obligatoire/unimarc_standard_systemprefs.sql | 1 + installer/data/mysql/it-IT/necessari/sysprefs.sql | 398 ++++++++++---------- installer/data/mysql/pl-PL/mandatory/sysprefs.sql | 1 + ...m_preferences_full_optimal_for_install_only.sql | 1 + ...m_preferences_full_optimal_for_install_only.sql | 1 + 7 files changed, 206 insertions(+), 199 deletions(-) ___________________________________________________________ GRATIS! Movie-FLAT mit ?ber 300 Videos. Jetzt freischalten unter http://movieflat.web.de -------------- next part -------------- A non-text attachment was scrubbed... Name: 0002-Bug-1997-new-OPACNoResultsFound-pref.patch Type: text/x-patch Size: 110724 bytes Desc: not available URL: From Katrin.Fischer.83 at web.de Sat Dec 11 21:46:53 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Sat, 11 Dec 2010 21:46:53 +0100 Subject: [Koha-patches] [PATCH] Bug 3009 - Change items.content field so it prints due date by default Message-ID: <1292100413-26850-1-git-send-email-Katrin.Fischer.83@web.de> in overdue notices prints issuedate instead of duedate by default. This patch changes default to issues.date_due. --- misc/cronjobs/overdue_notices.pl | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl index 92bc786..671368e 100755 --- a/misc/cronjobs/overdue_notices.pl +++ b/misc/cronjobs/overdue_notices.pl @@ -112,9 +112,9 @@ directory. This can be downloaded or futher processed by library staff. comma separated list of fields that get substituted into templates in places of the EEitems.contentEE placeholder. This -defaults to issuedate,title,barcode,author +defaults to due date,title,barcode,author -Other possible values come from fields in the biblios, items, and +Other possible values come from fields in the biblios, items and issues tables. =item B<-borcat> @@ -255,7 +255,7 @@ my $csvfilename; my $htmlfilename; my $triggered = 0; my $listall = 0; -my $itemscontent = join( ',', qw( issuedate title barcode author itemnumber ) ); +my $itemscontent = join( ',', qw( date_due title barcode author itemnumber ) ); my @myborcat; my @myborcatout; -- 1.7.1 From chrisc at catalyst.net.nz Sun Dec 12 22:22:51 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Mon, 13 Dec 2010 10:22:51 +1300 Subject: [Koha-patches] Bug 1997: Follow up - new OPACNoResultsFound pref In-Reply-To: <1670279439.1942332.1292099122668.JavaMail.fmail@mwmweb073> References: <1670279439.1942332.1292099122668.JavaMail.fmail@mwmweb073> Message-ID: <20101212212251.GH9173@rorohiko> Hi Katrin This patch doesn't apply error: patch failed: installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql:93 error: installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql: patch does not apply error: patch failed: installer/data/mysql/it-IT/necessari/sysprefs.sql:2 error: installer/data/mysql/it-IT/necessari/sysprefs.sql: patch does not apply error: patch failed: installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql:106 error: installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql: patch does not apply error: patch failed: installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql:106 error: installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql: patch does not apply Could you please rebase and send again Chris -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From robin at catalyst.net.nz Sun Dec 12 23:20:03 2010 From: robin at catalyst.net.nz (Robin Sheat) Date: Mon, 13 Dec 2010 11:20:03 +1300 Subject: [Koha-patches] [PATCH] Update Debian changelog for 3.2.1 release Message-ID: <1292192403-19362-1-git-send-email-robin@catalyst.net.nz> This adds the required changelog changes to keep it current for the 3.2.1 release. It is intended to go straight into 3.2.x, and probably should go into master also. --- debian/changelog | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/debian/changelog b/debian/changelog index fec8e90..f710ca5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +koha (3.2.1-1) squeeze; urgency=low + + * New upstream release. + + -- Robin Sheat Thu, 09 Dec 2010 15:35:37 +1300 + koha (3.2.0-1) squeeze; urgency=low * New upstream release. -- 1.7.1 From chrisc at catalyst.net.nz Mon Dec 13 01:43:18 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Mon, 13 Dec 2010 13:43:18 +1300 Subject: [Koha-patches] [PATCH] Bug 5484 - Handling bad borrower categories in serial routing lists more gracefully Message-ID: <1292200998-10594-1-git-send-email-chrisc@catalyst.net.nz> --- serials/member-search.pl | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-) diff --git a/serials/member-search.pl b/serials/member-search.pl index f18c2f3..f027df5 100755 --- a/serials/member-search.pl +++ b/serials/member-search.pl @@ -1,5 +1,7 @@ #!/usr/bin/perl +# Parts copyright Catalyst IT 2010 +# # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the @@ -110,18 +112,20 @@ my @resultsdata; $to=($count>$to?$to:$count); my $index=$from; foreach my $borrower(@$results[$from..$to-1]){ - #find out stats - - $$borrower{'dateexpiry'}= C4::Dates->new($$borrower{'dateexpiry'},'iso')->output('syspref'); - - my %row = ( - count => $index++, - %$borrower, - %{$categories_dislay{$$borrower{categorycode}}}, - ); - push(@resultsdata, \%row); + # find out stats + $borrower->{'dateexpiry'}= C4::Dates->new($borrower->{'dateexpiry'},'iso')->output('syspref'); + if ($categories_dislay{$borrower->{'categorycode'}}){ + my %row = ( + count => $index++, + %$borrower, + %{$categories_dislay{$$borrower{categorycode}}}, + ); + push(@resultsdata, \%row); + } + else { + warn $borrower->{'cardnumber'} ." has a bad category code of " . $borrower->{'categorycode'} ."\n"; + } } - if ($$patron{branchcode}){ foreach my $branch (grep{$_->{value} eq $$patron{branchcode}}@$branches){ $$branch{selected}=1; -- 1.7.1 From Katrin.Fischer.83 at web.de Mon Dec 13 05:43:55 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 13 Dec 2010 05:43:55 +0100 Subject: [Koha-patches] [PATCH 1/2] [SIGNED-OFF] Bug 1997: new OPACNoResultsFound pref Message-ID: <1292215435-27215-1-git-send-email-Katrin.Fischer.83@web.de> From: Nicole Engard This patch adds a new preference to allow librarians to add content to the no results found page if they want. Signed-off-by: Katrin Fischer Changed surrounding

    in template to

    Will send follow up patch adding sys pref to translated sql files --- installer/data/mysql/en/mandatory/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 8 ++++++++ .../prog/en/modules/admin/preferences/opac.pref | 5 +++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 8 +++++++- opac/opac-search.pl | 1 + 5 files changed, 22 insertions(+), 1 deletions(-) diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql index 61fc22d..0451c3f 100644 --- a/installer/data/mysql/en/mandatory/sysprefs.sql +++ b/installer/data/mysql/en/mandatory/sysprefs.sql @@ -73,6 +73,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacheader','','Add HTML to be included as a custom header in the OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaclayoutstylesheet','opac.css','Enter the name of the layout CSS stylesheet to use in the OPAC','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacMaintenance',0,'If ON, enables maintenance warning in OPAC','','YesNo'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OPACNoResultsFound','','Display this HTML when no results are found for a search in the OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacMainUserBlock','Welcome to Koha...\r\n
    ','A user-defined block of HTML in the main content area of the opac main page','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacNav','Important links here.','Use HTML tags to add navigational links to the left-hand navigational bar in OPAC','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacPasswordChange',1,'If ON, enables patron-initiated password change in OPAC (disable it when using LDAP auth)',NULL,'YesNo'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 7eea700..86d6a74 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -3883,6 +3883,14 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference('Version') < TransformToNum($DBversion)){ + $dbh->do("INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACNoResultsFound','','Display this HTML when no results are found for a search in the OPAC','70|10','Textarea')"); + print "Upgrade to $DBversion done adding syspref OPACNoResultsFound to control what displays when no results are found for a search in the OPAC."; + SetVersion ($DBversion); +} + +=item DropAllForeignKeys($table) =head1 FUNCTIONS diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 55560d3..acab30a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -147,6 +147,11 @@ OPAC: yes: Add no: "Don't add" - a library select pulldown menu on the OPAC masthead. + - + - 'Display this HTML when no results are found for a search in the OPAC:' + - pref: OPACNoResultsFound + type: textarea + class: code Features: - - pref: opacuserlogin diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 878a412..236f296 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -173,7 +173,7 @@

    returned results. (related searches: ). /cgi-bin/koha/opac-search.pl?&sort_by=&format=rss2">Subscribe to this search -No Result found! +No Results Found!

    No results match your search for in Catalog. /cgi-bin/koha/opac-search.pl?&format=rss2">Subscribe to this search @@ -181,5 +181,11 @@ You did not specify any search criteria.

    + +
    + +
    + +

    diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 2bfcb6d..88f3a2f 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -97,6 +97,7 @@ elsif (C4::Context->preference("marcflavour") eq "MARC21" ) { $template->param('usmarc' => 1); } $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); +$template->param( 'OPACNoResultsFound' => C4::Context->preference('OPACNoResultsFound') ); if (C4::Context->preference('BakerTaylorEnabled')) { $template->param( -- 1.7.1 From Katrin.Fischer.83 at web.de Mon Dec 13 05:47:10 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 13 Dec 2010 05:47:10 +0100 (CET) Subject: [Koha-patches] [PATCH 2/2] Bug 1997: new OPACNoResultsFound pref Message-ID: <17097208.2683313.1292215630125.JavaMail.fmail@mwmweb076> This patch is a follow up - adding new system preference to all translated sql files. Both patches rebased to current HEAD - there was only a small problem with updatedatabase.pl. ___________________________________________________________ Neu: WEB.DE De-Mail - Einfach wie E-Mail, sicher wie ein Brief! Jetzt De-Mail-Adresse reservieren: https://produkte.web.de/go/demail02 -------------- next part -------------- A non-text attachment was scrubbed... Name: 0002-Bug-1997-new-OPACNoResultsFound-pref.patch Type: text/x-patch Size: 110724 bytes Desc: not available URL: From Katrin.Fischer.83 at web.de Mon Dec 13 05:53:01 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 13 Dec 2010 05:53:01 +0100 (CET) Subject: [Koha-patches] [PATCH] Bug 3381 - Add an IntranetUserCSS system preference Message-ID: <126911020.2683707.1292215981608.JavaMail.fmail@mwmweb076> A non-text attachment was scrubbed... Name: 0001-Bug-3381-Add-an-IntranetUserCSS-system-preference.patch Type: text/x-patch Size: 138845 bytes Desc: not available URL: -------------- next part -------------- Add an IntranetUserCSS sys pref that works like OPACUserCSS in OPAC only for intranet ___________________________________________________________ WEB.DE DSL Doppel-Flat ab 19,99 €/mtl.! Jetzt auch mit gratis Notebook-Flat! http://produkte.web.de/go/DSL_Doppel_Flatrate/2 From katrin.fischer at bsz-bw.de Tue Dec 7 04:47:35 2010 From: katrin.fischer at bsz-bw.de (Katrin Fischer) Date: Tue, 7 Dec 2010 04:47:35 +0100 Subject: [Koha-patches] [PATCH] Bug 4218: Fixes display problem introduced by last patch Message-ID: <1291693655-30233-1-git-send-email-katrin.fischer@bsz-bw.de> Adds back missing . Without navigation tabs and holdigns are not displayed in staff detail. --- .../prog/en/modules/catalogue/detail.tmpl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl index 6be8424..273150a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl @@ -197,6 +197,7 @@ function verify_images() {
  • Holds: ">
  • +
    -- 1.6.3.3 From colin.campbell at ptfs-europe.com Mon Dec 13 12:28:20 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 13 Dec 2010 11:28:20 +0000 Subject: [Koha-patches] [PATCH] Bug 5485: Add script to run Test::Perl::Critic Message-ID: <1292239700-24491-1-git-send-email-colin.campbell@ptfs-europe.com> Tests are run if TEST_QA environment variable is set and Test::Perl::Critic is installed e.g. TEST_QA=1 prove =l t/00-testcritic.t --- t/00-testcritic.t | 37 +++++++++++++++++++++++++++++++++++++ t/perlcriticrc | 1 + 2 files changed, 38 insertions(+), 0 deletions(-) create mode 100755 t/00-testcritic.t create mode 100644 t/perlcriticrc diff --git a/t/00-testcritic.t b/t/00-testcritic.t new file mode 100755 index 0000000..65f2288 --- /dev/null +++ b/t/00-testcritic.t @@ -0,0 +1,37 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +# This script can be used to run perlcritic on perl files in koha +# It calls its own custom perlcriticrc +# The script is purely optional requiring Test::Perl::Critic to be installed +# and the environment variable TEST_QA to be set +# At present only the directories in @dirs will pass the tests in 'Gentle' mode + +use File::Spec; +use Test::More; +use English qw(-no_match_vars); + +my @all_koha_dirs = qw( acqui admin authorities basket C4 catalogue cataloguing circ debian errors +labels members misc offline_circ opac patroncards reports reserve reviews rotating_collections +serials sms suggestion t tags test tools virtualshelves); + +my @dirs = qw( basket circ debian errors offline_circ reserve reviews rotating_collections +serials sms virtualshelves ); + +if ( not $ENV{TEST_QA} ) { + my $msg = 'Author test. Set $ENV{TEST_QA} to a true value to run'; + plan( skip_all => $msg ); +} + +eval { require Test::Perl::Critic; }; + +if ( $EVAL_ERROR ) { + my $msg = 'Test::Perl::Critic required to criticise code,'; + plan( skip_all => $msg ); +} + +my $rcfile = File::Spec->catfile( 't', 'perlcriticrc' ); +Test::Perl::Critic->import( -profile => $rcfile); +all_critic_ok(@dirs); + diff --git a/t/perlcriticrc b/t/perlcriticrc new file mode 100644 index 0000000..53a34a6 --- /dev/null +++ b/t/perlcriticrc @@ -0,0 +1 @@ +exclude = Miscellanea::RequireRcsKeywords -- 1.7.3.3 From colin.campbell at ptfs-europe.com Mon Dec 13 12:44:35 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 13 Dec 2010 11:44:35 +0000 Subject: [Koha-patches] [SIGNED OFF] Bug 5484 - Handling bad borrower categories in serial routing lists more gracefully Message-ID: <1292240675-24698-1-git-send-email-colin.campbell@ptfs-europe.com> From: Chris Cormack Signed-off-by: Colin Campbell --- serials/member-search.pl | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-) diff --git a/serials/member-search.pl b/serials/member-search.pl index f18c2f3..f027df5 100755 --- a/serials/member-search.pl +++ b/serials/member-search.pl @@ -1,5 +1,7 @@ #!/usr/bin/perl +# Parts copyright Catalyst IT 2010 +# # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the @@ -110,18 +112,20 @@ my @resultsdata; $to=($count>$to?$to:$count); my $index=$from; foreach my $borrower(@$results[$from..$to-1]){ - #find out stats - - $$borrower{'dateexpiry'}= C4::Dates->new($$borrower{'dateexpiry'},'iso')->output('syspref'); - - my %row = ( - count => $index++, - %$borrower, - %{$categories_dislay{$$borrower{categorycode}}}, - ); - push(@resultsdata, \%row); + # find out stats + $borrower->{'dateexpiry'}= C4::Dates->new($borrower->{'dateexpiry'},'iso')->output('syspref'); + if ($categories_dislay{$borrower->{'categorycode'}}){ + my %row = ( + count => $index++, + %$borrower, + %{$categories_dislay{$$borrower{categorycode}}}, + ); + push(@resultsdata, \%row); + } + else { + warn $borrower->{'cardnumber'} ." has a bad category code of " . $borrower->{'categorycode'} ."\n"; + } } - if ($$patron{branchcode}){ foreach my $branch (grep{$_->{value} eq $$patron{branchcode}}@$branches){ $$branch{selected}=1; -- 1.7.3.3 From henridamien.laurent at biblibre.com Mon Dec 13 13:09:49 2010 From: henridamien.laurent at biblibre.com (LAURENT Henri-Damien) Date: Mon, 13 Dec 2010 13:09:49 +0100 Subject: [Koha-patches] Pull request - git://git.librarypolice.com/git/koha-galen.git 3.4_BibLibre-reports-tested In-Reply-To: <1289362278-14819-1-git-send-email-gmcharlt@gmail.com> References: <1289362278-14819-1-git-send-email-gmcharlt@gmail.com> Message-ID: <4D060D0D.1090402@biblibre.com> Hi, I didn't get that your message required a comment from us. I thought it was just for Release manager. Le 10/11/2010 05:11, Galen Charlton a ?crit : > This is a tested version of BibLibre's 3.4/BibLibre-reports branch > including some follow-up patches. The following patches in BibLibre's > original pull request do *not* have my sign-off and are consequently > omitted from this branch: > > * MT2268 : Followup Reports Guided columns.def > > Patch resulted in double-encoding of diacritics in both > the column picker and report output. Without the patch, diacritics > in report output and the column picker display correctly for me, so > whatever problem this patch was trying to solve ... works for me. Well it is ok... We removed that patch. And fixed the encoding in overdue_notices. > > * MT4038 : guided reports (Guided reports should be exported > according to the delimiter system preference) > > I am in agreement with the general idea, but the implementation needs work: > > [1] The patch does not check the value of the delimiter syspref correctly; in > particular, if you set the syspref to 'tabs', the delimiter will be set to > the literal string 'tabulation'. > [2] To be consistent with the non-guided reports, what it should be doing > is giving the user a choice of delimiters and using the syspref only to > select the default choice. Good ideas. But no time to implement that. > > * bugfix on catalogue_stat : barcode & acquire fields > > [1] This patch adds an extraneous file, reports/catalogue_stats.pl.orig rebasing is not that safe a process. > [2] It also contains a regression for bug 4176. namely ? Is it because it is using a system preference ? The original patch was introduced long before the other one. Rejecting a patch because it doesnot foresee a to-be-declared bug (at the time the work was done) looks quite strange to me. > > * (MT #4417) support dates for debarred's patrons stats > > This patch assumes that borrowers.debarred is a date column; it is > currently a Boolean. If BibLibre is proposing to make that column a date, > this patch belongs on a separate topic branch implementing such a change. The change is done on BibLibre-Memb-circ-upd Maybe this should be done on this branch. This was done in this branch because it was a report modification. Maybe we should not have done Topic branches. Friendly -- Henri-Damien LAURENT BibLibre From oleonard at myacpl.org Mon Dec 13 15:15:14 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 13 Dec 2010 09:15:14 -0500 Subject: [Koha-patches] [PATCH] Updated fix for Bug 2170, Adding 'edititems' user-permission Message-ID: <1292249714-7665-1-git-send-email-oleonard@myacpl.org> This patch follows up on the addition of the 'edititems' permission by adding a check of the new permission to places in the interface which link to the edit item screen. The catalogue toolbar had to be extensively re-worked in order to ensure that the "New" and "Edit" menus would appear (or not) whether or not edit_catalogue, edit_items, or create_subscription permissions are on. Revised for current HEAD --- .../intranet-tmpl/prog/en/css/staff-global.css | 6 +- .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 173 +++++++++++--------- .../prog/en/modules/cataloguing/addbooks.tmpl | 16 +-- .../prog/en/modules/tools/batchMod-del.tmpl | 2 +- .../prog/en/modules/tools/batchMod-edit.tmpl | 2 +- 5 files changed, 111 insertions(+), 88 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css index 55e61be..3f43f61 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -437,6 +437,9 @@ ul.toolbar { padding-left : 0; } +ul.toolbar button { + padding-bottom : 2px; +} .yui-menu-button { } @@ -923,7 +926,8 @@ fieldset.rows .inputnote { background-repeat : no-repeat; } -#placehold a { +#placehold a, +#placehold button { padding-left : 34px; background-image: url("../../img/toolbar-hold.gif"); background-position : center left; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 228ebf3..8d4e02e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -25,6 +25,7 @@ } function printBiblio() {window.open('/cgi-bin/koha/catalogue/detailprint.pl?biblionumber=','Print_Biblio','width=700,height=500,toolbar=false,scrollbars=yes'); } + function confirm_deletion() { var count = ; var is_confirmed; @@ -44,6 +45,8 @@ function confirm_deletion() { return false; } } + + function confirm_items_deletion() { var count = ; if(count > 0){ @@ -54,125 +57,147 @@ function confirm_items_deletion() { } } } + // prepare DOM for YUI Toolbar $(document).ready(function() { - $("#edititems").parent().remove(); - $("#duplicatebiblio").parent().remove(); + $("#edititems").parent().remove(); + $("#newitem").parent().remove(); + $("#duplicatebiblio").parent().remove(); $("#deletebiblio").parent().remove(); - $("#newitem").parent().remove(); - $("#newsub").parent().remove(); - $("#editmenuc").empty(); - $("#newmenuc").empty(); - $("#addtoshelfc").empty(); - $("#printbiblioc").empty(); + $("#z3950searchc").empty(); + $("#newsub").parent().remove(); + $("#newbiblio").parent().remove(); + $("#editbiblio").parent().remove(); + $("#addtoshelf").parent().remove(); + $("#printbiblio").parent().remove(); + $("#placehold").parent().remove(); $("#export").remove(); - $("#addtoshelfc").before("
  • <\/li>"); - $("#z3950searchc").empty(); - yuiToolbar(); }); - // YUI Toolbar Functions - - function yuiToolbar() { + YAHOO.util.Event.onContentReady("cattoolbar", function () { + // Menu for new record, new item, new subscription var newmenu = [ - {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, - {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=#additema" }, - {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription="}, + {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, + {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=#additema" }, + + {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription="}, ]; - + if(newmenu.length){ + new YAHOO.widget.Button({ + type: "menu", + label: _("New"), + id: "newmenuc", + name: "newmenubutton", + menu: newmenu, + container: this + }); + } var editmenu = [ - { text: _("Edit Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=" }, - { text: _("Edit Items"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=" }, - { text: _("Attach Item"), url: "/cgi-bin/koha/cataloguing/moveitem.pl?biblionumber=" }, - { text: _("Edit as New (Duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=duplicate" }, - { text: _("Delete Record"), onclick: {fn: confirm_deletion },id:'disabled' }, - { text: _("Delete all Items"), onclick: {fn: confirm_items_deletion },id:'disabled' } + { text: _("Edit Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=" }, + { text: _("Edit Items"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=" }, + { text: _("Attach Item"), url: "/cgi-bin/koha/cataloguing/moveitem.pl?biblionumber=" }, + { text: _("Edit as New (Duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=duplicate" }, + { text: _("Delete Record"), onclick: {fn: confirm_deletion },id:'disabled' }, + { text: _("Delete all Items"), onclick: {fn: confirm_items_deletion } } ]; - + if(editmenu.length){ + new YAHOO.widget.Button({ + type: "menu", + label: _("Edit"), + id: "editmenuc", + name: "editmenubutton", + menu: editmenu, + container: this + }); + } var savemenu = [ - { text: _("MODS (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=mods&op=export&bib=" }, - { text: _("Dublin Core (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=dc&op=export&bib=" }, - { text: _("MARCXML"), url: "/cgi-bin/koha/catalogue/export.pl?format=marcxml&op=export&bib=" }, - { text: _("MARC (non-Unicode/MARC-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=marc8&op=export&bib=" }, - { text: _("MARC (Unicode/UTF-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=" } - ]; - - var addtomenu = [ - { text: _("Cart"), onclick: { fn: addToCart } }, - { text: _("List"), onclick: { fn: addToShelf } } + { text: _("MODS (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=mods&op=export&bib=" }, + { text: _("Dublin Core (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=dc&op=export&bib=" }, + { text: _("MARCXML"), url: "/cgi-bin/koha/catalogue/export.pl?format=marcxml&op=export&bib=" }, + { text: _("MARC (non-Unicode/MARC-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=marc8&op=export&bib=" }, + { text: _("MARC (Unicode/UTF-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=" } ]; new YAHOO.widget.Button({ type: "menu", label: _("Save"), + id: "savemenuc", name: "savemenubutton", menu: savemenu, - container: "savemenuc" - }); - - new YAHOO.widget.Button({ - type: "menu", - label: _("Edit"), - name: "editmenubutton", - menu: editmenu, - container: "editmenuc" + container: this }); - new YAHOO.widget.Button({ - type: "menu", - label: _("New"), - name: "newmenubutton", - menu: newmenu, - container: "newmenuc" - }); + var addtomenu = [ + { text: _("Cart"), onclick: { fn: addToCart } }, + { text: _("List"), onclick: { fn: addToShelf } } + ]; new YAHOO.widget.Button({ type: "menu", label: _("Add to"), name: "addtomenubutton", menu: addtomenu, - container: "addtoshelfc" + container: this }); new YAHOO.widget.Button({ - id: "z3950search", + id: "printbiblio", + type: "button", + label: _("Print"), + container: this, + onclick: {fn: printBiblio } + }); + + new YAHOO.widget.Button({ + id: "placehold", + type: "link", + label: _("Place hold"), + container: this, + href: "/cgi-bin/koha/reserve/request.pl?biblionumber=" + }); + + new YAHOO.widget.Button({ + id: "z3950search", type: "button", - label: _("Z39.50 Search"), - container: "z3950searchc", + label: _("Z39.50 Search"), + container: this, onclick: {fn:function(){PopupZ3950()}} }); - - var printbiblioButton = new YAHOO.widget.Button({ - id: "printbiblio", - type: "button", - label: _("Print"), - container: "printbiblioc", - onclick: {fn: printBiblio } - }); - - var newbiblioButton = new YAHOO.widget.Button("newbiblio"); - var placeholdButton = new YAHOO.widget.Button("placehold"); - - } - + + }); //]]>
    -
  • -- 1.7.1 From colin.campbell at ptfs-europe.com Mon Dec 13 16:30:07 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 13 Dec 2010 15:30:07 +0000 Subject: [Koha-patches] [SIGNED OFF] Updated fix for Bug 2170, Adding 'edititems' user-permission Message-ID: <1292254207-28141-1-git-send-email-colin.campbell@ptfs-europe.com> From: Owen Leonard This patch follows up on the addition of the 'edititems' permission by adding a check of the new permission to places in the interface which link to the edit item screen. The catalogue toolbar had to be extensively re-worked in order to ensure that the "New" and "Edit" menus would appear (or not) whether or not edit_catalogue, edit_items, or create_subscription permissions are on. Revised for current HEAD Signed-off-by: Colin Campbell --- .../intranet-tmpl/prog/en/css/staff-global.css | 6 +- .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 173 +++++++++++--------- .../prog/en/modules/cataloguing/addbooks.tmpl | 16 +-- .../prog/en/modules/tools/batchMod-del.tmpl | 2 +- .../prog/en/modules/tools/batchMod-edit.tmpl | 2 +- 5 files changed, 111 insertions(+), 88 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css index 55e61be..3f43f61 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -437,6 +437,9 @@ ul.toolbar { padding-left : 0; } +ul.toolbar button { + padding-bottom : 2px; +} .yui-menu-button { } @@ -923,7 +926,8 @@ fieldset.rows .inputnote { background-repeat : no-repeat; } -#placehold a { +#placehold a, +#placehold button { padding-left : 34px; background-image: url("../../img/toolbar-hold.gif"); background-position : center left; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 228ebf3..8d4e02e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -25,6 +25,7 @@ } function printBiblio() {window.open('/cgi-bin/koha/catalogue/detailprint.pl?biblionumber=','Print_Biblio','width=700,height=500,toolbar=false,scrollbars=yes'); } + function confirm_deletion() { var count = ; var is_confirmed; @@ -44,6 +45,8 @@ function confirm_deletion() { return false; } } + + function confirm_items_deletion() { var count = ; if(count > 0){ @@ -54,125 +57,147 @@ function confirm_items_deletion() { } } } + // prepare DOM for YUI Toolbar $(document).ready(function() { - $("#edititems").parent().remove(); - $("#duplicatebiblio").parent().remove(); + $("#edititems").parent().remove(); + $("#newitem").parent().remove(); + $("#duplicatebiblio").parent().remove(); $("#deletebiblio").parent().remove(); - $("#newitem").parent().remove(); - $("#newsub").parent().remove(); - $("#editmenuc").empty(); - $("#newmenuc").empty(); - $("#addtoshelfc").empty(); - $("#printbiblioc").empty(); + $("#z3950searchc").empty(); + $("#newsub").parent().remove(); + $("#newbiblio").parent().remove(); + $("#editbiblio").parent().remove(); + $("#addtoshelf").parent().remove(); + $("#printbiblio").parent().remove(); + $("#placehold").parent().remove(); $("#export").remove(); - $("#addtoshelfc").before("
  • <\/li>"); - $("#z3950searchc").empty(); - yuiToolbar(); }); - // YUI Toolbar Functions - - function yuiToolbar() { + YAHOO.util.Event.onContentReady("cattoolbar", function () { + // Menu for new record, new item, new subscription var newmenu = [ - {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, - {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=#additema" }, - {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription="}, + {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, + {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=#additema" }, + + {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription="}, ]; - + if(newmenu.length){ + new YAHOO.widget.Button({ + type: "menu", + label: _("New"), + id: "newmenuc", + name: "newmenubutton", + menu: newmenu, + container: this + }); + } var editmenu = [ - { text: _("Edit Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=" }, - { text: _("Edit Items"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=" }, - { text: _("Attach Item"), url: "/cgi-bin/koha/cataloguing/moveitem.pl?biblionumber=" }, - { text: _("Edit as New (Duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=duplicate" }, - { text: _("Delete Record"), onclick: {fn: confirm_deletion },id:'disabled' }, - { text: _("Delete all Items"), onclick: {fn: confirm_items_deletion },id:'disabled' } + { text: _("Edit Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=" }, + { text: _("Edit Items"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=" }, + { text: _("Attach Item"), url: "/cgi-bin/koha/cataloguing/moveitem.pl?biblionumber=" }, + { text: _("Edit as New (Duplicate)"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?biblionumber=&frameworkcode=&op=duplicate" }, + { text: _("Delete Record"), onclick: {fn: confirm_deletion },id:'disabled' }, + { text: _("Delete all Items"), onclick: {fn: confirm_items_deletion } } ]; - + if(editmenu.length){ + new YAHOO.widget.Button({ + type: "menu", + label: _("Edit"), + id: "editmenuc", + name: "editmenubutton", + menu: editmenu, + container: this + }); + } var savemenu = [ - { text: _("MODS (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=mods&op=export&bib=" }, - { text: _("Dublin Core (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=dc&op=export&bib=" }, - { text: _("MARCXML"), url: "/cgi-bin/koha/catalogue/export.pl?format=marcxml&op=export&bib=" }, - { text: _("MARC (non-Unicode/MARC-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=marc8&op=export&bib=" }, - { text: _("MARC (Unicode/UTF-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=" } - ]; - - var addtomenu = [ - { text: _("Cart"), onclick: { fn: addToCart } }, - { text: _("List"), onclick: { fn: addToShelf } } + { text: _("MODS (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=mods&op=export&bib=" }, + { text: _("Dublin Core (XML)"), url: "/cgi-bin/koha/catalogue/export.pl?format=dc&op=export&bib=" }, + { text: _("MARCXML"), url: "/cgi-bin/koha/catalogue/export.pl?format=marcxml&op=export&bib=" }, + { text: _("MARC (non-Unicode/MARC-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=marc8&op=export&bib=" }, + { text: _("MARC (Unicode/UTF-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=" } ]; new YAHOO.widget.Button({ type: "menu", label: _("Save"), + id: "savemenuc", name: "savemenubutton", menu: savemenu, - container: "savemenuc" - }); - - new YAHOO.widget.Button({ - type: "menu", - label: _("Edit"), - name: "editmenubutton", - menu: editmenu, - container: "editmenuc" + container: this }); - new YAHOO.widget.Button({ - type: "menu", - label: _("New"), - name: "newmenubutton", - menu: newmenu, - container: "newmenuc" - }); + var addtomenu = [ + { text: _("Cart"), onclick: { fn: addToCart } }, + { text: _("List"), onclick: { fn: addToShelf } } + ]; new YAHOO.widget.Button({ type: "menu", label: _("Add to"), name: "addtomenubutton", menu: addtomenu, - container: "addtoshelfc" + container: this }); new YAHOO.widget.Button({ - id: "z3950search", + id: "printbiblio", + type: "button", + label: _("Print"), + container: this, + onclick: {fn: printBiblio } + }); + + new YAHOO.widget.Button({ + id: "placehold", + type: "link", + label: _("Place hold"), + container: this, + href: "/cgi-bin/koha/reserve/request.pl?biblionumber=" + }); + + new YAHOO.widget.Button({ + id: "z3950search", type: "button", - label: _("Z39.50 Search"), - container: "z3950searchc", + label: _("Z39.50 Search"), + container: this, onclick: {fn:function(){PopupZ3950()}} }); - - var printbiblioButton = new YAHOO.widget.Button({ - id: "printbiblio", - type: "button", - label: _("Print"), - container: "printbiblioc", - onclick: {fn: printBiblio } - }); - - var newbiblioButton = new YAHOO.widget.Button("newbiblio"); - var placeholdButton = new YAHOO.widget.Button("placehold"); - - } - + + }); //]]> -
      + -- 1.7.3.3 From colin.campbell at ptfs-europe.com Mon Dec 13 16:31:47 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 13 Dec 2010 15:31:47 +0000 Subject: [Koha-patches] [PATCH] Bug 2170 Supplementary Fix Wrap link in permissions check Message-ID: <1292254307-28271-1-git-send-email-colin.campbell@ptfs-europe.com> Found an edit item link not subject to edit_items permission check --- .../prog/en/modules/catalogue/moredetail.tmpl | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl index b87e14a..440e652 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl @@ -42,7 +42,11 @@

      ">Barcode

      -

      Item Information &itemnumber=">[Edit Item]

      +

      Item Information + + &itemnumber=">[Edit Item] + +

      1. Home Library:  
      2. -- 1.7.3.3 From oleonard at myacpl.org Mon Dec 13 17:13:58 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 13 Dec 2010 11:13:58 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] bug 5255 change 'document type' to 'item type' Message-ID: <1292256838-12463-1-git-send-email-oleonard@myacpl.org> From: Nicole Engard Signed-off-by: Owen Leonard --- .../prog/en/modules/reports/catalogue_out.tmpl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/catalogue_out.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/catalogue_out.tmpl index d6218e1..68f6713 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/catalogue_out.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/catalogue_out.tmpl @@ -96,8 +96,8 @@
      3. - + -- 1.7.1 From colin.campbell at ptfs-europe.com Mon Dec 13 18:05:06 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Mon, 13 Dec 2010 17:05:06 +0000 Subject: [Koha-patches] [PATCH] Variable redeclared in same scope Message-ID: <1292259906-29026-1-git-send-email-colin.campbell@ptfs-europe.com> lexical variable declared twice causing run time warnings --- C4/Items.pm | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/C4/Items.pm b/C4/Items.pm index 5eda6dd..a7c190c 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -1279,7 +1279,7 @@ sub GetItemsInfo { ); $restrictedstatus->execute; - my ($authorised_valuecode) = $restrictedstatus->fetchrow; + ($authorised_valuecode) = $restrictedstatus->fetchrow; if ($authorised_valuecode) { $restrictedstatus = $dbh->prepare( "SELECT lib,lib_opac FROM authorised_values -- 1.7.3.3 From chrisc at catalyst.net.nz Mon Dec 13 18:24:23 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Tue, 14 Dec 2010 06:24:23 +1300 Subject: [Koha-patches] Pull request - git://git.librarypolice.com/git/koha-galen.git 3.4_BibLibre-reports-tested In-Reply-To: <4D060D0D.1090402@biblibre.com> References: <1289362278-14819-1-git-send-email-gmcharlt@gmail.com> <4D060D0D.1090402@biblibre.com> Message-ID: <20101213172423.GP9173@rorohiko> * LAURENT Henri-Damien (henridamien.laurent at biblibre.com) wrote: > Hi, > I didn't get that your message required a comment from us. > I thought it was just for Release manager. Have read through the answers below. As there are no changes, Ill push the signed off branch today Chris > > Le 10/11/2010 05:11, Galen Charlton a ?crit : > > This is a tested version of BibLibre's 3.4/BibLibre-reports branch > > including some follow-up patches. The following patches in BibLibre's > > original pull request do *not* have my sign-off and are consequently > > omitted from this branch: > > > > * MT2268 : Followup Reports Guided columns.def > > > > Patch resulted in double-encoding of diacritics in both > > the column picker and report output. Without the patch, diacritics > > in report output and the column picker display correctly for me, so > > whatever problem this patch was trying to solve ... works for me. > Well it is ok... We removed that patch. > And fixed the encoding in overdue_notices. > > > > > * MT4038 : guided reports (Guided reports should be exported > > according to the delimiter system preference) > > > > I am in agreement with the general idea, but the implementation needs work: > > > > [1] The patch does not check the value of the delimiter syspref correctly; in > > particular, if you set the syspref to 'tabs', the delimiter will be set to > > the literal string 'tabulation'. > > [2] To be consistent with the non-guided reports, what it should be doing > > is giving the user a choice of delimiters and using the syspref only to > > select the default choice. > Good ideas. But no time to implement that. > > > > > * bugfix on catalogue_stat : barcode & acquire fields > > > > [1] This patch adds an extraneous file, reports/catalogue_stats.pl.orig > rebasing is not that safe a process. > > > [2] It also contains a regression for bug 4176. > namely ? Is it because it is using a system preference ? > The original patch was introduced long before the other one. > Rejecting a patch because it doesnot foresee a to-be-declared bug (at > the time the work was done) looks quite strange to me. > > > > > > * (MT #4417) support dates for debarred's patrons stats > > > > This patch assumes that borrowers.debarred is a date column; it is > > currently a Boolean. If BibLibre is proposing to make that column a date, > > this patch belongs on a separate topic branch implementing such a change. > The change is done on BibLibre-Memb-circ-upd > Maybe this should be done on this branch. > This was done in this branch because it was a report modification. > Maybe we should not have done Topic branches. > > Friendly > -- > Henri-Damien LAURENT > BibLibre > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From Katrin.Fischer.83 at web.de Mon Dec 13 22:14:11 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 13 Dec 2010 22:14:11 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5000, Uncertain prices misses option to choose display language Message-ID: <1292274851-25194-1-git-send-email-Katrin.Fischer.83@web.de> From: Owen Leonard - Adding missing footer include for language chooser - Correcting markup and structure errors Signed-off-by: Katrin Fischer --- .../prog/en/modules/acqui/uncertainprice.tmpl | 23 ++++++++----------- 1 files changed, 10 insertions(+), 13 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/uncertainprice.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/uncertainprice.tmpl index 86f635e..86d9186 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/uncertainprice.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/uncertainprice.tmpl @@ -22,7 +22,7 @@ function check(form) { ?booksellerid="> -

        Orders with uncertain prices for vendor "> &op=enter">(edit)

        +

        Orders with uncertain prices for vendor "> &op=enter">(edit)

        Contact information

        Address: @@ -35,8 +35,8 @@ function check(form) {

        Phone: / Fax:

        -

        -
        Contact: +
        +
        Contact:
        @@ -44,7 +44,7 @@ function check(form) {
        -

        +

        Notes:

        @@ -84,7 +84,7 @@ function check(form) { /
        ,

        - &booksellerid=&basketno="> + &booksellerid=&basketno="> edit @@ -92,25 +92,22 @@ function check(form) { - " value="1" checked> + " value="1" checked="checked" /> " value="" - onChange="uncheckbox(this.form, );" /> + onchange="uncheckbox(this.form, );" /> " value="" - onChange="uncheckbox(this.form, );" /> + onchange="uncheckbox(this.form, );" /> - +
      -
      -
      - - \ No newline at end of file + -- 1.7.1 From Katrin.Fischer.83 at web.de Mon Dec 13 22:34:07 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 13 Dec 2010 22:34:07 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 2965: Allow due date in the past Message-ID: <1292276047-10087-1-git-send-email-Katrin.Fischer.83@web.de> From: Srdjan Jankovic Raise warning rather than disallowing Remove due date js validation when checking out Signed-off-by: Katrin Fischer Fixed small error in circulation.tmpl --- C4/Circulation.pm | 9 +++++++-- circ/circulation.pl | 12 ++++++------ .../prog/en/modules/circ/circulation.tmpl | 13 ++++++++++--- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/C4/Circulation.pm b/C4/Circulation.pm index c5ac344..0131e90 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -650,7 +650,7 @@ reserved for someone else. =head3 INVALID_DATE -sticky due date is invalid +sticky due date is invalid or due date in the past =head3 TOO_MANY @@ -688,7 +688,12 @@ sub CanBookBeIssued { # Offline circ calls AddIssue directly, doesn't run through here # So issuingimpossible should be ok. } - $issuingimpossible{INVALID_DATE} = $duedate->output('syspref') unless ( $duedate && $duedate->output('iso') ge C4::Dates->today('iso') ); + if ($duedate) { + $needsconfirmation{INVALID_DATE} = $duedate->output('syspref') + unless $duedate->output('iso') ge C4::Dates->today('iso'); + } else { + $issuingimpossible{INVALID_DATE} = $duedate->output('syspref'); + } # # BORROWER STATUS diff --git a/circ/circulation.pl b/circ/circulation.pl index bed1191..c4421ed 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -146,13 +146,13 @@ if($duedatespec_allow){ if ($duedatespec) { if ($duedatespec =~ C4::Dates->regexp('syspref')) { my $tempdate = C4::Dates->new($duedatespec); - if ($tempdate and $tempdate->output('iso') gt C4::Dates->new()->output('iso')) { - # i.e., it has to be later than today/now +# if ($tempdate and $tempdate->output('iso') gt C4::Dates->new()->output('iso')) { +# # i.e., it has to be later than today/now $datedue = $tempdate; - } else { - $invalidduedate = 1; - $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec); - } +# } else { +# $invalidduedate = 1; +# $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec); +# } } else { $invalidduedate = 1; $template->param(IMPOSSIBLE=>1, INVALID_DATE=>$duedatespec); 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 ca93a31..fc27cfa 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -258,7 +258,14 @@ function refocus(calendar) { " /> + +

      + " /> + +

      + " /> + " /> " /> @@ -411,7 +418,7 @@ No patron matched - + >"/> @@ -440,8 +447,8 @@ No patron matched inputField : "duedatespec", ifFormat : "", button : "CalendarDueDate", - disableFunc : validate1, - dateStatusFunc : validate1, +// disableFunc : validate1, +// dateStatusFunc : validate1, onClose : refocus } ); -- 1.7.1 From robin at catalyst.net.nz Mon Dec 13 23:53:09 2010 From: robin at catalyst.net.nz (Robin Sheat) Date: Tue, 14 Dec 2010 11:53:09 +1300 Subject: [Koha-patches] [PATCH] Bug 5172 - prefer 'other name' over 'first name' if available. Message-ID: <1292280789-31938-1-git-send-email-robin@catalyst.net.nz> In all the places that the user is referred to by name in the OPAC, the 'other name' field is now used instead of the first name, if an 'other name' has been defined. --- C4/Members.pm | 5 +++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 2 +- .../opac-tmpl/prog/en/modules/opac-account.tmpl | 6 +++--- .../opac-tmpl/prog/en/modules/opac-messaging.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-passwd.tmpl | 4 ++-- .../prog/en/modules/opac-readingrecord.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-reserve.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-sendbasket.tmpl | 2 +- .../opac-tmpl/prog/en/modules/opac-sendshelf.tmpl | 2 +- koha-tmpl/opac-tmpl/prog/en/modules/opac-user.tmpl | 4 ++-- .../prog/en/modules/opac-userdetails.tmpl | 9 ++++++--- .../opac-tmpl/prog/en/modules/opac-userupdate.tmpl | 4 ++-- opac/opac-passwd.pl | 10 ++++++---- 13 files changed, 35 insertions(+), 25 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 00716cd..9dece92 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -367,6 +367,11 @@ sub GetMemberDetails { $sth->execute( $borrower->{'categorycode'} ); my $enrolment = $sth->fetchrow; $borrower->{'enrolmentperiod'} = $enrolment; + # For the purposes of making templates easier, we'll define a + # 'showname' which is the alternate form the user's first name if + # 'other name' is defined. + $borrower->{'showname'} = $borrower->{'othernames'} || $borrower->{'firstname'}; + return ($borrower); #, $flags, $accessflagshash); } diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 236f296..1f1a007 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -4,7 +4,7 @@
    • Log in to Your Account
    • -
    • Welcome,
    • +
    • Welcome,
    • diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl index 0b7f220..eb2a20e 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl @@ -1,4 +1,4 @@ -Koha Online Catalog › Account for +Koha Online Catalog › Account for @@ -11,7 +11,7 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Fines and Charges

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Fines and Charges

      @@ -59,4 +59,4 @@
      - \ No newline at end of file + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl index 0e0543c..3800d10 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl @@ -1,4 +1,4 @@ -Koha OnlineKoha Online Catalog › Updating Details for +Koha OnlineKoha Online Catalog › Updating Details for @@ -93,7 +93,7 @@ $.tablesorter.addParser({ -

      Hello, (Click here if you're not )

      +

      Hello, (Click here if you're not )

      Thank you!

      Your corrections have been submitted to the library, and a staff member will update your record as soon as possible.

      diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl index 174b8bd..ec88242 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl @@ -1,4 +1,4 @@ -Koha Online Catalog › Personal Details for +Koha Online Catalog › Personal Details for @@ -9,10 +9,13 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Personal Details

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Personal Details

      + + +
      Name:
      Other Name:
      Card Number:
      @@ -84,4 +87,4 @@ Card Number:
      - \ No newline at end of file + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 24c3068..a325218 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -1,4 +1,4 @@ -Koha OnlineKoha Online Catalog › Updating Details for +Koha OnlineKoha Online Catalog › Updating Details for @@ -11,7 +11,7 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Your Personal Details

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Your Personal Details

      diff --git a/opac/opac-passwd.pl b/opac/opac-passwd.pl index ca502ab..cc518d5 100755 --- a/opac/opac-passwd.pl +++ b/opac/opac-passwd.pl @@ -97,10 +97,12 @@ else { } } -$template->param(firstname => $borr->{'firstname'}, - surname => $borr->{'surname'}, - minpasslen => $minpasslen, - passwdview => 1, +$template->param( + firstname => $borr->{'firstname'}, + surname => $borr->{'surname'}, + showname => $borr->{'showname'}, + minpasslen => $minpasslen, + passwdview => 1, ); output_html_with_http_headers $query, $cookie, $template->output; -- 1.7.1 From robin at catalyst.net.nz Tue Dec 14 00:14:18 2010 From: robin at catalyst.net.nz (Robin Sheat) Date: Tue, 14 Dec 2010 12:14:18 +1300 Subject: [Koha-patches] [PATCH] Bug 5172 - prefer 'other name' over 'first name' if available. In-Reply-To: <1292280789-31938-1-git-send-email-robin@catalyst.net.nz> References: <1292280789-31938-1-git-send-email-robin@catalyst.net.nz> Message-ID: <1292282058.2428.199.camel@zarathud> Robin Sheat schreef op di 14-12-2010 om 11:53 [+1300]: > In all the places that the user is referred to by name in the OPAC, > the Actually, disregard this version...somehow something got missed in it. Amended version coming in a moment. -- Robin Sheat Catalyst IT Ltd. ? +64 4 803 2204 GPG: 5957 6D23 8B16 EFAB FEF8 7175 14D3 6485 A99C EB6D -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part URL: From robin at catalyst.net.nz Tue Dec 14 00:17:17 2010 From: robin at catalyst.net.nz (Robin Sheat) Date: Tue, 14 Dec 2010 12:17:17 +1300 Subject: [Koha-patches] [PATCH][RESEND] Bug 5172 - prefer 'other name' over 'first name' if available. Message-ID: <1292282237-32575-1-git-send-email-robin@catalyst.net.nz> In all the places that the user is referred to by name in the OPAC, the 'other name' field is now used instead of the first name, if an 'other name' has been defined. --- C4/Members.pm | 5 +++++ koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc | 2 +- .../opac-tmpl/prog/en/modules/opac-account.tmpl | 6 +++--- .../opac-tmpl/prog/en/modules/opac-messaging.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-passwd.tmpl | 4 ++-- .../prog/en/modules/opac-readingrecord.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-reserve.tmpl | 4 ++-- .../opac-tmpl/prog/en/modules/opac-sendbasket.tmpl | 2 +- .../opac-tmpl/prog/en/modules/opac-sendshelf.tmpl | 2 +- koha-tmpl/opac-tmpl/prog/en/modules/opac-user.tmpl | 4 ++-- .../prog/en/modules/opac-userdetails.tmpl | 9 ++++++--- .../opac-tmpl/prog/en/modules/opac-userupdate.tmpl | 4 ++-- opac/opac-passwd.pl | 10 ++++++---- opac/opac-sendbasket.pl | 1 + opac/opac-sendshelf.pl | 1 + 15 files changed, 37 insertions(+), 25 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 00716cd..9dece92 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -367,6 +367,11 @@ sub GetMemberDetails { $sth->execute( $borrower->{'categorycode'} ); my $enrolment = $sth->fetchrow; $borrower->{'enrolmentperiod'} = $enrolment; + # For the purposes of making templates easier, we'll define a + # 'showname' which is the alternate form the user's first name if + # 'other name' is defined. + $borrower->{'showname'} = $borrower->{'othernames'} || $borrower->{'firstname'}; + return ($borrower); #, $flags, $accessflagshash); } diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc index 236f296..1f1a007 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/masthead.inc @@ -4,7 +4,7 @@
    • Log in to Your Account
    • -
    • Welcome,
    • +
    • Welcome,
    • diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl index 0b7f220..eb2a20e 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-account.tmpl @@ -1,4 +1,4 @@ -Koha Online Catalog › Account for +Koha Online Catalog › Account for @@ -11,7 +11,7 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Fines and Charges

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Fines and Charges

      @@ -59,4 +59,4 @@
      - \ No newline at end of file + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl index 0e0543c..3800d10 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-messaging.tmpl @@ -1,4 +1,4 @@ -Koha OnlineKoha Online Catalog › Updating Details for +Koha OnlineKoha Online Catalog › Updating Details for @@ -93,7 +93,7 @@ $.tablesorter.addParser({ -

      Hello, (Click here if you're not )

      +

      Hello, (Click here if you're not )

      Thank you!

      Your corrections have been submitted to the library, and a staff member will update your record as soon as possible.

      diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl index 174b8bd..ec88242 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userdetails.tmpl @@ -1,4 +1,4 @@ -Koha Online Catalog › Personal Details for +Koha Online Catalog › Personal Details for @@ -9,10 +9,13 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Personal Details

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Personal Details

      + + +
      Name:
      Other Name:
      Card Number:
      @@ -84,4 +87,4 @@ Card Number:
      - \ No newline at end of file + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 24c3068..a325218 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -1,4 +1,4 @@ -Koha OnlineKoha Online Catalog › Updating Details for +Koha OnlineKoha Online Catalog › Updating Details for @@ -11,7 +11,7 @@
      -

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Your Personal Details

      +

      's account ../../images/caret.gif" width="16" height="16" alt=">" border="0" /> Your Personal Details

      diff --git a/opac/opac-passwd.pl b/opac/opac-passwd.pl index ca502ab..cc518d5 100755 --- a/opac/opac-passwd.pl +++ b/opac/opac-passwd.pl @@ -97,10 +97,12 @@ else { } } -$template->param(firstname => $borr->{'firstname'}, - surname => $borr->{'surname'}, - minpasslen => $minpasslen, - passwdview => 1, +$template->param( + firstname => $borr->{'firstname'}, + surname => $borr->{'surname'}, + showname => $borr->{'showname'}, + minpasslen => $minpasslen, + passwdview => 1, ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl index 76400a5..90b1f12 100755 --- a/opac/opac-sendbasket.pl +++ b/opac/opac-sendbasket.pl @@ -110,6 +110,7 @@ if ( $email_add ) { comment => $comment, firstname => $user->{firstname}, surname => $user->{surname}, + showname => $user->{showname}, ); # Getting template result diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl index b535616..b9aa468 100755 --- a/opac/opac-sendshelf.pl +++ b/opac/opac-sendshelf.pl @@ -107,6 +107,7 @@ if ( $email ) { shelfname => $shelf[1], firstname => $user->{firstname}, surname => $user->{surname}, + showname => $user->{showname}, ); # Getting template result -- 1.7.1 From Katrin.Fischer.83 at web.de Tue Dec 14 06:33:27 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Tue, 14 Dec 2010 06:33:27 +0100 Subject: [Koha-patches] [PATCH 2/2] Bug 2965: Allow due date in the past - small template fix Message-ID: <1292304807-25014-1-git-send-email-Katrin.Fischer.83@web.de> --- .../prog/en/modules/circ/circulation.tmpl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 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 fc27cfa..20b3650 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -418,7 +418,7 @@ No patron matched - >"/> + "/> -- 1.7.1 From Katrin.Fischer.83 at web.de Tue Dec 14 07:24:16 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Tue, 14 Dec 2010 07:24:16 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Possible fix for Bug 2307, Calendar widget cannot be translated Message-ID: <1292307856-3968-1-git-send-email-Katrin.Fischer.83@web.de> From: Owen Leonard This patch copies the calendar's language strings from a stand- alone javascript file into calendar.inc where they can be translated along with other strings. Signed-off-by: Katrin Fischer --- .../intranet-tmpl/prog/en/includes/calendar.inc | 62 +++++++++++++++++++- 1 files changed, 61 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc index c36daa6..aa6e9c7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/calendar.inc @@ -1,6 +1,66 @@ /lib/calendar/calendar-system.css"/> - + + + + +
      + + " onclick="this.value=''" class="debarred" size="150"/> + + + + @@ -976,7 +1049,7 @@ " - id="" name="" /> + id="" name="" onclick="this.value=''" /> (Password: " @@ -1048,7 +1121,7 @@

      - " /> + " onclick="this.value=''" />

      diff --git a/members/memberentry.pl b/members/memberentry.pl index fbd8538..f9a75e0 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -70,7 +70,8 @@ my $destination = $input->param('destination'); my $cardnumber = $input->param('cardnumber'); my $check_member = $input->param('check_member'); my $nodouble = $input->param('nodouble'); -$nodouble = 1 if $op eq 'modify'; # FIXME hack to represent fact that if we're +my $duplicate = $input->param('duplicate'); +$nodouble = 1 if ($op eq 'modify' or $op eq 'duplicate'); # FIXME hack to represent fact that if we're # modifying an existing patron, it ipso facto # isn't a duplicate. Marking FIXME because this # script needs to be refactored. @@ -99,8 +100,9 @@ foreach (@field_check) { $template->param( "mandatory$_" => 1); } $template->param("add"=>1) if ($op eq 'add'); +$template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' ); $template->param("checked" => 1) if (defined($nodouble) && $nodouble eq 1); -($borrower_data = GetMember( 'borrowernumber'=>$borrowernumber )) if ($op eq 'modify' or $op eq 'save'); +( $borrower_data = GetMember( 'borrowernumber' => $borrowernumber ) ) if ( $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ); my $categorycode = $input->param('categorycode') || $borrower_data->{'categorycode'}; my $category_type = $input->param('category_type'); my $new_c_type = $category_type; #if we have input param, then we've already chosen the cat_type. @@ -117,7 +119,8 @@ $category_type="A" unless $category_type; # FIXME we should display a error mess # initialize %newdata my %newdata; # comes from $input->param() -if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') { +if ( $op eq 'insert' || $op eq 'modify' || $op eq 'save' || $op eq 'duplicate' ) { + my @names= ($borrower_data && $op ne 'save') ? keys %$borrower_data : $input->param(); foreach my $key (@names) { if (defined $input->param($key)) { @@ -125,10 +128,26 @@ if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') { $newdata{$key} =~ s/\"/"/g unless $key eq 'borrowernotes' or $key eq 'opacnote'; } } + + ## Manipulate debarred + if($newdata{debarred}){ + $newdata{debarred} = $newdata{datedebarred} ? $newdata{datedebarred} : "9999-12-31"; + }elsif (exists ($newdata{debarred}) && !($newdata{debarred})){ + undef ($newdata{debarred}); + undef ($newdata{debarredcomment}); + }elsif (exists ($newdata{debarredcomment}) && $newdata{debarredcomment} eq ""){ + undef($newdata{debarredcomment}); + } + + # Manipulate flags : + # Delete comment if flag set to no + $newdata{gonenoaddresscomment} = "" if (defined $newdata{gonenoaddress} && $newdata{gonenoaddress} == 0); + $newdata{lostcomment} = "" if (defined $newdata{lost} && $newdata{lost} == 0); + my $dateobject = C4::Dates->new(); my $syspref = $dateobject->regexp(); # same syspref format for all 3 dates my $iso = $dateobject->regexp('iso'); # - foreach (qw(dateenrolled dateexpiry dateofbirth)) { + foreach (qw(dateenrolled dateexpiry dateofbirth debarred)) { next unless exists $newdata{$_}; my $userdate = $newdata{$_} or next; if ($userdate =~ /$syspref/) { @@ -198,15 +217,16 @@ if (($op eq 'insert') and !$nodouble){ } #recover all data from guarantor address phone ,fax... -if ( defined($guarantorid) and - ( $category_type eq 'C' || $category_type eq 'P' ) and - $guarantorid ne '' and +if ( defined($guarantorid) + and ( $category_type eq 'C' || $category_type eq 'P' || $category_type eq 'A' ) + and $guarantorid ne '' and $guarantorid ne '0' ) { if (my $guarantordata=GetMember(borrowernumber => $guarantorid)) { $guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'}; if ( !defined($data{'contactname'}) or $data{'contactname'} eq '' or $data{'contactname'} ne $guarantordata->{'surname'} ) { $newdata{'contactfirstname'}= $guarantordata->{'firstname'}; + $data{'contactname'} = $guarantordata->{'surname'}; $newdata{'contactname'} = $guarantordata->{'surname'}; $newdata{'contacttitle'} = $guarantordata->{'title'}; foreach (qw(streetnumber address streettype address2 @@ -278,7 +298,7 @@ if ($op eq 'save' || $op eq 'insert'){ } } -if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save') and ($step == 0 or $step == 3 )){ +if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){ if (exists ($newdata{'dateexpiry'}) && !($newdata{'dateexpiry'})){ my $arg2 = $newdata{'dateenrolled'} || C4::Dates->today('iso'); $newdata{'dateexpiry'} = GetExpiryDate($newdata{'categorycode'},$arg2); @@ -387,6 +407,11 @@ if ($op eq "modify") { $template->param( updtype => 'M',modify => 1 ); $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1, step_6 => 1) unless $step; } +if ( $op eq "duplicate" ) { + $template->param( updtype => 'I' ); + $template->param( step_1 => 1, step_2 => 1, step_3 => 1, step_4 => 1, step_5 => 1, step_6 => 1 ) unless $step; +} + # my $cardnumber=$data{'cardnumber'}; $data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if $op eq 'add'; if(!defined($data{'sex'})){ @@ -481,7 +506,7 @@ my $borrotitlepopup = CGI::popup_menu(-name=>'title', -default=>$default_borrowertitle ); -my @relationships = split /,|\|/, C4::Context->preference('BorrowerRelationship'); +my @relationships = split (/,|\|/, C4::Context->preference('BorrowerRelationship')); my @relshipdata; while (@relationships) { my $relship = shift @relationships || ''; @@ -495,10 +520,9 @@ while (@relationships) { } my %flags = ( 'gonenoaddress' => ['gonenoaddress' ], - 'lost' => ['lost'], - 'debarred' => ['debarred']); + 'lost' => ['lost']); + - my @flagdata; foreach (keys(%flags)) { my $key = $_; @@ -533,6 +557,13 @@ for my $branch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branc $select_branches{$branch} = $branches->{$branch}->{'branchname'}; $default = C4::Context->userenv->{'branch'} if (C4::Context->userenv && C4::Context->userenv->{'branch'}); } + +if ($category_type eq 'A' || $category_type eq 'P') { + $template->param( + addtoorganization => 1 + ); +} + # -------------------------------------------------------------------------------------------------------- #in modify mod :default value from $CGIbranch comes from borrowers table #in add mod: default value come from branches table (ip correspendence) @@ -599,7 +630,10 @@ if (C4::Context->preference('uppercasesurnames')) { $data{'surname'} =uc($data{'surname'} ); $data{'contactname'}=uc($data{'contactname'}); } -foreach (qw(dateenrolled dateexpiry dateofbirth)) { + +$data{debarred} = C4::Overdues::CheckBorrowerDebarred($borrowernumber); +$data{datedebarred} = $data{debarred} if ($data{debarred} ne "9999-12-31"); +foreach (qw(dateenrolled dateexpiry dateofbirth debarred)) { $data{$_} = format_date($data{$_}); # back to syspref for display $template->param( $_ => $data{$_}); } diff --git a/members/setdebar.pl b/members/setdebar.pl deleted file mode 100755 index b12ab57..0000000 --- a/members/setdebar.pl +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/perl - -# 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -=head1 setdebar.pl - -script to set or lift debarred status -written 2/8/04 -by oleonard at athenscounty.lib.oh.us - -=cut - -use strict; -use warnings; - -use CGI; -use C4::Context; -use C4::Auth; - -my $input = new CGI; - -my $flagsrequired; -$flagsrequired->{borrowers} = 1; -my ( $loggedinuser, $cookie, $sessionID ) = - checkauth( $input, 0, $flagsrequired ); - -my $destination = $input->param("destination") || ''; -my $cardnumber = $input->param("cardnumber"); -my $borrowernumber = $input->param('borrowernumber'); -my $status = $input->param('status'); - -my $dbh = C4::Context->dbh; -my $sth = - $dbh->prepare("Update borrowers set debarred = ? where borrowernumber = ?"); -$sth->execute( $status, $borrowernumber ); -$sth->finish; - -if ( $destination eq "circ" ) { - print $input->redirect( - "/cgi-bin/koha/circ/circulation.pl?findborrower=".$cardnumber); -} -else { - print $input->redirect( - "/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber"); -} diff --git a/members/setstatus.pl b/members/setstatus.pl index 2a3947c..47c71ee 100755 --- a/members/setstatus.pl +++ b/members/setstatus.pl @@ -43,6 +43,7 @@ my $borrowernumber=$input->param('borrowernumber'); my $status = $input->param('status'); my $reregistration = $input->param('reregistration') || ''; +undef $status unless ($status); my $dbh = C4::Context->dbh; my $dateexpiry; @@ -50,7 +51,7 @@ if ( $reregistration eq 'y' ) { # re-reregistration function to automatic calcul of date expiry $dateexpiry = ExtendMemberSubscriptionTo( $borrowernumber ); } else { - my $sth=$dbh->prepare("Update borrowers set debarred = ? where borrowernumber = ?"); + my $sth=$dbh->prepare("UPDATE borrowers SET debarred = ?, debarredcomment = '' WHERE borrowernumber = ?"); $sth->execute($status,$borrowernumber); $sth->finish; } @@ -59,12 +60,16 @@ if($destination eq "circ"){ if($dateexpiry){ print $input->redirect("/cgi-bin/koha/circ/circulation.pl?findborrower=$cardnumber&dateexpiry=$dateexpiry"); } else { - print $input->redirect("/cgi-bin/koha/circ/circulation.pl?findborrower=$cardnumber"); + if($cardnumber){ + print $input->redirect("/cgi-bin/koha/circ/circulation.pl?findborrower=$cardnumber"); + }else{ + print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); + } } } else { if($dateexpiry){ - print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$borrowernumber&dateexpiry=$dateexpiry"); + print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber&dateexpiry=$dateexpiry"); } else { - print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$borrowernumber"); + print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$borrowernumber"); } } -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:09 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:09 +0100 Subject: [Koha-patches] [PATCH 15/54] displaying 2nd email if there is one In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-15-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/members/moremember-print.tmpl | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-print.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-print.tmpl index e395e3f..a45b8ff 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-print.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-print.tmpl @@ -12,7 +12,8 @@

      • ,
      • (no phone number on file)
      • -
      • (no email on file)
      • +
      • (no primary email on file)
      • +
      -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:08 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:08 +0100 Subject: [Koha-patches] [PATCH 14/54] MT 4096 Fix gurantor pop-up closing for adults In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-14-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/members/guarantor_search.tmpl | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/guarantor_search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/guarantor_search.tmpl index 13fb052..a17519b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/guarantor_search.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/guarantor_search.tmpl @@ -24,9 +24,12 @@ $(form.contactname) .val(surname) .before('' + surname + '').get(0).type = 'hidden'; + + if (form.contactfirstname) { $(form.contactfirstname) .val(firstname) .before('' + firstname + '').get(0).type = 'hidden'; + } form.streetnumber.value = streetnumber; form.address.value = address; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:11 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:11 +0100 Subject: [Koha-patches] [PATCH 17/54] MT #4584 Add duplicate support for borrowers : adding the link on the toolbar In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-17-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/includes/members-toolbar.inc | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc index 6f22d46..81d7a72 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/members-toolbar.inc @@ -82,6 +82,7 @@ function update_child() { new YAHOO.widget.Button("editpatron"); new YAHOO.widget.Button("addnote"); new YAHOO.widget.Button("changepassword"); + new YAHOO.widget.Button("duplicate"); new YAHOO.widget.Button("printslip"); new YAHOO.widget.Button("printpage"); new YAHOO.widget.Button("renewpatron"); @@ -110,6 +111,7 @@ function update_child() {
    • &category_type=C">Add child
    • ">Add Note -->
    • ">Change Password
    • +
    • &category_type=">Duplicate
    • &print=page">Print Page
    • &print=slip">Print Slip
    • ">Renew Account
    • ">Set Permissions
    • Delete
    • -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:07 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:07 +0100 Subject: [Koha-patches] [PATCH 13/54] MT3747: Shows member relatives (guaranteeds) in issues lists In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-13-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain Displaying maxpickupdate for all the intranet screens For waiting reserves, it is quite useful for librarians to be able to tell when is the maxpickup date Displaying that information on each screen MT4096 Fix guarantor display for adults MT4585 add manage suggestions on borrowers Added debarrment comment : on each debarment, there can now be a comment to explain why the debarment has been set emails renamed "primary" and "secondary" some HTML cleaning added some informations in issues table (ccode, stocknumber, barcode) --- .../prog/en/modules/members/moremember.tmpl | 409 ++++++++++++++++---- members/moremember.pl | 180 ++++++++- 2 files changed, 498 insertions(+), 91 deletions(-) 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 030c78a..13cdc6f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tmpl @@ -6,6 +6,9 @@ + + + @@ -146,32 +211,52 @@ function validate1(date) {
      Patron's account has been renewed until
      +
        - -
      • Patron is restricted - +
      • + +
      • Patron is restricted until () + " /> -
      • -
      • Patron's address is in doubt.
      • -
      • Patron's card has been reported lost.
      • +
      • Patron's address is in doubt. ()
      • +
      • Patron's card has been reported lost. ()
      +
      + +

      ()

      -
      -
      + +
      + + +
      -

      - - , - +



      @@ -189,14 +274,14 @@ function validate1(date) {

    • Work:
    • - +
    • Professional phone:
    • Professional mobile:
    • Fax:
    • - -
    • Email (home):">
    • -
    • Email (work): ">
    • + +
    • Primary Email:">
    • +
    • Secondary Email: ">
    • Initials:
    • Date of birth:
    • @@ -209,11 +294,10 @@ function validate1(date) {
    • Guarantees:
    • - +
    • Guarantor:">,
    • -
      @@ -227,8 +311,8 @@ function validate1(date) { -
      +
      @@ -257,23 +341,25 @@ function validate1(date) {
      -
      + -
      +

      Additional attributes and identifiers

      - - +
      + + - + - + +
      TypeDescription Value
      () () @@ -282,31 +368,29 @@ function validate1(date) {
      -
      +
      -
      +

      Patron messaging preferences

      1. SMS number:
      -
      +
      -
      -
      +

      Library use

      1. Card number:
      2. -
      3. Borrowernumber:
      4. Category: ()
      5. Registration date:
      6. @@ -334,12 +418,12 @@ function validate1(date) {
      7. OPAC note:
      +
      - -
      +

      Alternate Address

      - +
      1. Address:
      2. Address 2:
      3. City, State:
      4. @@ -355,10 +439,10 @@ function validate1(date) {
      5. Email:
      6. Relationship:
      +
      - -
      +

      Alternative Contact

      1. Surname:
      2. First name:
      3. @@ -368,23 +452,110 @@ function validate1(date) {
      4. Zip/Postal Code:
      5. Country:
      6. Phone:
      +
      - -
      +
      + +
      +
      +

      Check All | Uncheck All

      + + + + + + + + + + + + + + + + + + + + + + + + + +
       SuggestionNoteSuggested by /onManaged by /onLibraryBudgetStatus
      + " /> + + &op=edit&returnsuggestedby=" title="suggestion" > + , by + +
      + © + ; Volume: + ; ISBN: ; Published by in in ; ;
      +
      + + + ">, + / + + ">, + , + + + + + + Asked Accepted Ordered Rejected Checked
      () +
      + +
      +
      + + + Cancel + OR: +
      +
      + +" /> + + + +
      +
      +
      +Patron has no suggestions. +
      +

      Total due:

      @@ -403,15 +574,53 @@ function validate1(date) { Due date Title + Collection + Stock number + Barcode Item Type Checked out on + Borrower Call no Charge Price Renew

      select all | none

      Check in

      select all | none

      - - + + + + + 98" style="text-align: right; font-weight:bold;">Totals: + + + +

      + Renewal due date: " /> + /lib/calendar/cal.gif" id="newduedate_button" alt="Show Calendar" /> + + +

      +

      + +

      + + +

      + + +

      + + + + + @@ -428,30 +637,41 @@ function validate1(date) { - ">, by ; , &itemnumber=#item"> + ">, by ; , + + + &itemnumber=#item"> " alt="" /> + Renewal Failed - 0 + + + / + + - +
      + - ">On Hold + On Hold + + Overdue + Not Renewable @@ -459,7 +679,6 @@ function validate1(date) { - " checked="checked" style="display: none;" /> " checked="checked" onclick="uncheck_sibling(this);" /> @@ -470,9 +689,9 @@ function validate1(date) { Checkin Failed - - " onclick="uncheck_sibling(this);" /> - " checked="checked" style="display: none;" /> + + " onclick="uncheck_sibling(this);" /> +
      ')">On Hold @@ -480,16 +699,62 @@ function validate1(date) {
      - - - - - -

      Patron has nothing checked out.

      + + +

      Relatives issues

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Due dateTitleCollectionStock numberBarcodeItem TypeChecked out onBorrowerCall noChargePrice
      + + + + + + + +">, by ; , &itemnumber=#item"> " alt="" />">
      +
      @@ -512,20 +777,23 @@ function validate1(date) { ">, by - - Item is waiting + Item + "> + + + is waiting until - Item in transit from - since + in transit from + since - Item hasn't been transferred yet from "> + " /> " /> + " /> diff --git a/members/moremember.pl b/members/moremember.pl index beec293..b8922d6 100755 --- a/members/moremember.pl +++ b/members/moremember.pl @@ -34,21 +34,30 @@ use strict; #use warnings; FIXME - Bug 2505 use CGI; +use YAML; use C4::Context; use C4::Auth; use C4::Output; use C4::Members; use C4::Members::Attributes; use C4::Members::AttributeTypes; -use C4::Dates; +use C4::Dates qw(format_date); use C4::Reserves; use C4::Circulation; use C4::Koha; use C4::Letters; use C4::Biblio; -use C4::Reserves; +use C4::Items; +use C4::Suggestions; +use C4::Budgets; +use C4::Search; +use C4::Dates qw(format_date); +use C4::Debug; use C4::Branch; # GetBranchName use C4::Form::MessagingPreferences; +use C4::Overdues qw/CheckBorrowerDebarred/; +use JSON; +use List::MoreUtils qw/uniq/; #use Smart::Comments; #use Data::Dumper; @@ -67,11 +76,13 @@ my $print = $input->param('print'); my $override_limit = $input->param("override_limit") || 0; my @failedrenews = $input->param('failedrenew'); my @failedreturns = $input->param('failedreturn'); +my @renewerrors = $input->param('renewerror'); # expected to be json +my @returnerrors = $input->param('returnerror'); # expected to be json my $error = $input->param('error'); my %renew_failed; -for my $renew (@failedrenews) { $renew_failed{$renew} = 1; } my %return_failed; -for my $failedret (@failedreturns) { $return_failed{$failedret} = 1; } +for (@failedrenews) { $renew_failed{$_} = decode_json(shift @renewerrors); } +for (@failedreturns) { $return_failed{GetItemnumberFromBarcode($_)} = decode_json(shift @returnerrors); } my $template_name; my $quickslip = 0; @@ -143,12 +154,20 @@ foreach (qw(dateenrolled dateexpiry dateofbirth)) { $data->{$_} = $userdate || ''; $template->param( $_ => $userdate ); } -$data->{'IS_ADULT'} = ( $data->{'categorycode'} ne 'I' ); -for (qw(debarred gonenoaddress lost borrowernotes)) { +for (qw(gonenoaddress lost borrowernotes)) { $data->{$_} and $template->param(flagged => 1) and last; } +my $debar = CheckBorrowerDebarred($borrowernumber); +if($debar){ + $template->param(userdebarred => 1,flagged=>1); + if( $debar ne "9999-12-31"){ + $template->param(userdebarreddate => C4::Dates::format_date($debar)); + $template->param(debarredcomment => $data->{debarredcomment}); + } +} + $data->{'ethnicity'} = fixEthnicity( $data->{'ethnicity'} ); $data->{ "sex_".$data->{'sex'}."_p" } = 1; @@ -190,10 +209,10 @@ if ( $category_type eq 'A' || $category_type eq 'I') { } ); } + warn Data::Dumper::Dumper(@guaranteedata); $template->param( guaranteeloop => \@guaranteedata ); ( $template->param( adultborrower => 1 ) ) if ( $category_type eq 'A' || $category_type eq 'I' ); } -else { if ($data->{'guarantorid'}){ my ($guarantor) = GetMember( 'borrowernumber' =>$data->{'guarantorid'}); $template->param(guarantor => 1); @@ -204,7 +223,6 @@ else { if ($category_type eq 'C'){ $template->param('C' => 1); } -} my %bor; $bor{'borrowernumber'} = $borrowernumber; @@ -232,16 +250,28 @@ $template->param( lib2 => $lib2 ) if ($lib2); # current issues # -my $issue = GetPendingIssues($borrowernumber); -my $issuecount = scalar(@$issue); +my @borrowernumbers = GetMemberRelatives($borrowernumber); +push @borrowernumbers, $borrowernumber; +my $issue = GetPendingIssues(@borrowernumbers); +my $issuecount = scalar(@$issue); my $roaddetails = &GetRoadTypeDetails( $data->{'streettype'} ); my $today = POSIX::strftime("%Y-%m-%d", localtime); # iso format my @issuedata; +my @borrowers_with_issues; my $overdues_exist = 0; my $totalprice = 0; for ( my $i = 0 ; $i < $issuecount ; $i++ ) { - my $datedue = $issue->[$i]{'date_due'}; - my $issuedate = $issue->[$i]{'issuedate'}; + + # Getting borrower details + my $memberdetails = GetMemberDetails($issue->[$i]{'borrowernumber'}); + $issue->[$i]{'borrowername'} = $memberdetails->{'firstname'} . " " . $memberdetails->{'surname'}; + + # Adding this borrower to the list of borrowers with issue + push @borrowers_with_issues, $issue->[$i]{'borrowernumber'}; + + my $datedue = $issue->[$i]{'date_due'}; + my $issuedate = $issue->[$i]{'issuedate'}; + my $itemnumber = $issue->[$i]{'itemnumber'}; $issue->[$i]{'date_due'} = C4::Dates->new($issue->[$i]{'date_due'}, 'iso')->output('syspref'); $issue->[$i]{'issuedate'} = C4::Dates->new($issue->[$i]{'issuedate'},'iso')->output('syspref'); my $biblionumber = $issue->[$i]{'biblionumber'}; @@ -282,23 +312,65 @@ for ( my $i = 0 ; $i < $issuecount ; $i++ ) { #find the charge for an item my ( $charge, $itemtype ) = - GetIssuingCharges( $issue->[$i]{'itemnumber'}, $borrowernumber ); + GetIssuingCharges( $itemnumber, $borrowernumber ); my $itemtypeinfo = getitemtypeinfo($itemtype); $row{'itemtype_description'} = $itemtypeinfo->{description}; $row{'itemtype_image'} = $itemtypeinfo->{imageurl}; + # find the collection of an item + my $collection; + my $authvals = GetAuthorisedValues('CCODE'); + for ( @$authvals ) { + $collection = $_->{'lib'} if $_->{'authorised_value'} eq $row{'ccode'} + } + $row{'collection'} = $collection; + $row{'charge'} = sprintf( "%.2f", $charge ); - my ( $renewokay,$renewerror ) = CanBookBeRenewed( $borrowernumber, $issue->[$i]{'itemnumber'}, $override_limit ); - $row{'norenew'} = !$renewokay; - $row{'can_confirm'} = ( !$renewokay && $renewerror ne 'on_reserve' ); - $row{"norenew_reason_$renewerror"} = 1 if $renewerror; - $row{'renew_failed'} = $renew_failed{ $issue->[$i]{'itemnumber'} }; - $row{'return_failed'} = $return_failed{$issue->[$i]{'barcode'}}; - push( @issuedata, \%row ); + my ( $renewokay,$renewerror ) = CanBookBeRenewed( $borrowernumber, $itemnumber); + if (defined $renewerror->{message}){ + $row{"norenew_reason_".$renewerror->{message}} = 1; + $row{'norenew'} = 1; + } + $row{$_} = $renewerror->{$_} for (qw(renewals renewalsallowed reserves)); + $row{renewals} = $issue->[$i]{renewals}; + $row{renewals} ||= 0; + my ( $restype, $reserves ) = CheckReserves( $issue->[$i]->{'itemnumber'} ); + if ($restype){ + $row{'reserved'} = 1; + $row{$restype}=1 + } + $row{'can_confirm'} = $row{'norenew'} && C4::Context->preference("AllowRenewalLimitOverride");#( !$renewokay && $renewerror->{message} ne 'on_reserve' ); + $row{'renew_failed'} = defined($renew_failed{ $itemnumber }); + $row{'return_failed'} = defined($return_failed{$itemnumber}); + if ($row{'return_failed'}){ + $row{'return_error_'.$return_failed{$issue->[$i]->{'itemnumber'}}->{message}}=1; + delete $return_failed{$issue->[$i]->{'itemnumber'}}; + } + if ( $row{'renew_failed'}){ + $row{'norenew_reason_'.$renew_failed{$issue->[$i]->{'itemnumber'}}->{message}}=1; + } + push( @issuedata, \%row ); +} + +# If we have more than one borrower, we display their names + at borrowers_with_issues = uniq @borrowers_with_issues; +$template->param('multiple_borrowers' => 1) if (@borrowers_with_issues > 1); + + +#BUILDS the LOOP for reserves when returning books with reserves +my @reserveswaiting; +foreach my $itemnumber (keys %return_failed){ + next unless $return_failed{$itemnumber}->{'reservesdata'}; + my $hashdata=$return_failed{$itemnumber}->{'reservesdata'}; + $hashdata->{circborrowernumber}=$borrowernumber; + $hashdata->{script_name}=$input->script_name(); + push @reserveswaiting, $hashdata if (%$hashdata); } +$template->param(reserves_waiting=>\@reserveswaiting); + ### ############################################################################### # BUILD HTML # show all reserves of this borrower, and the position of the reservation .... @@ -329,6 +401,9 @@ if ($borrowernumber) { if ( $num_res->{'found'} eq 'W' ) { $getreserv{color} = 'reserved'; $getreserv{waiting} = 1; + my @maxpickupdate = $num_res->{'waitingdate'} ? GetMaxPickupDate( $num_res->{'waitingdate'}, $borrowernumber, $num_res ) : ''; + $getreserv{'maxpickupdate'} = sprintf( "%d-%02d-%02d", @maxpickupdate ); + $getreserv{'formattedwaitingdate'} = format_date( $getreserv{'maxpickupdate'} ); } # check transfers with the itemnumber foud in th reservation loop @@ -359,6 +434,7 @@ if ($borrowernumber) { $getreserv{biblionumber} = $num_res->{'biblionumber'}; } $getreserv{waitingposition} = $num_res->{'priority'}; + $getreserv{reservenumber} = $num_res->{'reservenumber'}; push( @reservloop, \%getreserv ); } @@ -369,6 +445,68 @@ if ($borrowernumber) { ); } +####################################### +# SUGGESTIONS +# manage borrowers suggestions +sub GetCriteriumDesc { + my ( $criteriumvalue, $displayby ) = @_; + return ( $criteriumvalue eq 'ASKED' ? "Pending" : ucfirst( lc($criteriumvalue) ) ) if ( $displayby =~ /status/i ); + return ( GetBranchName($criteriumvalue) ) if ( $displayby =~ /branchcode/ ); + return ( GetSupportName($criteriumvalue) ) if ( $displayby =~ /itemtype/ ); + if ( $displayby =~ /managedby/ || $displayby =~ /acceptedby/ || $displayby =~ /suggestedby/) { + my $borr = C4::Members::GetMember( borrowernumber => $criteriumvalue ); + return "" unless $borr; + return $$borr{firstname} . ", " . $$borr{surname}; + } + if ( $displayby =~ /budgetid/) { + my $budget = GetBudget($criteriumvalue); + return "" unless $budget; + return $$budget{budget_name}; + } +} + my $suggestion_ref={"suggestedby"=>$borrowernumber}; + my $displayby = "STATUS"; + my $criteria_list = GetDistinctValues( "suggestions." . $displayby ); + my @allsuggestions; + my $countsuggestions=0; + my $reasonsloop = GetAuthorisedValues("SUGGEST"); + foreach my $criteriumvalue ( map { $$_{'value'} } @$criteria_list ) { + my $definedvalue = defined $$suggestion_ref{$displayby} && $$suggestion_ref{$displayby} ne ""; + + next if ( $definedvalue && $$suggestion_ref{$displayby} ne $criteriumvalue ); + $$suggestion_ref{$displayby} = $criteriumvalue; + + # warn $$suggestion_ref{$displayby}."=$criteriumvalue; $displayby"; + #warn "==========================================="; + #warn Data::Dumper::Dumper($suggestion_ref); + my $suggestions = &SearchSuggestion($suggestion_ref); + foreach my $suggestion (@$suggestions) { + $suggestion->{budget_name} = GetBudget( $suggestion->{budgetid} )->{budget_name} if $suggestion->{budgetid}; + foreach my $date qw(suggesteddate manageddate accepteddate) { + if ( $suggestion->{$date} ne "0000-00-00" && $suggestion->{$date} ne "" ) { + $suggestion->{$date} = format_date( $suggestion->{$date} ); + } else { + $suggestion->{$date} = ""; + } + } + $countsuggestions++; + } +push @allsuggestions, + { "suggestiontype" => $criteriumvalue || "suggest", + "suggestiontypelabel" => GetCriteriumDesc( $criteriumvalue, $displayby ) || "", + "suggestionscount" => scalar(@$suggestions), + 'suggestions_loop' => $suggestions, + 'reasonsloop' => $reasonsloop, + }; + delete $$suggestion_ref{$displayby} unless $definedvalue; + } + if($countsuggestions>0) + { + $template->param("boolsuggestions" => 1); + } +$template->param("suggestions" => \@allsuggestions, "countsuggestions"=>$countsuggestions); +# SUGGESTIONS : end + # current alert subscriptions my $alerts = getalert($borrowernumber); foreach (@$alerts) { @@ -398,7 +536,7 @@ $template->param( picture => 1 ) if $picture; my $branch=C4::Context->userenv->{'branch'}; -$template->param($data); +SetMemberInfosInTemplate($borrowernumber, $template); if (C4::Context->preference('ExtendedPatronAttributes')) { $template->param(ExtendedPatronAttributes => 1); -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:20 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:20 +0100 Subject: [Koha-patches] [PATCH 26/54] intranet stylesheet In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-26-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain some changes and new classes, used in various scripts --- .../intranet-tmpl/prog/en/css/staff-global.css | 76 +++++++++++++++++++- .../intranet-tmpl/prog/img/more-right-arrow.gif | Bin 0 -> 81 bytes 2 files changed, 75 insertions(+), 1 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/img/more-right-arrow.gif diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css index 3f43f61..5b1e7c5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -532,6 +532,11 @@ div.yui-b fieldset.brief { padding : .4em .7em; } +label { + width: 12em; + margin-right: 1em; + text-align: left; +} div.yui-b fieldset.brief ol { font-size : 85%; margin : 0; @@ -571,7 +576,6 @@ fieldset.rows legend { } fieldset.rows label, fieldset.rows span.label { - float: left; font-weight : bold; width: 6em; margin-right: 1em; @@ -1170,6 +1174,14 @@ div.alert { text-align : center; } +div.alert ul{ + text-align: left; +} + +div.alert ul li { + text-align: center; +} + div.alert strong { color : #900; } @@ -1908,3 +1920,65 @@ ul.budget_hierarchy li:first-child:after { .holdcount { font-size : 105%; line-height : 200%; } .holdcount a { border : 1px solid #a4bedd; background-color : #e4ecf5; font-weight : bold; -moz-border-radius: 4px; padding : .1em .4em; text-decoration : none; } .holdcount a:hover { background-color : #ebeff7; } + +#cartmenulink img { + background-image : none; + display : inline; + padding : 3px 6px 0 0; +} + +* html #cartmenulink { + border : 1px solid #336600; +} + +* html #listsmenulink { + border : 1px solid #006699; +} + +#collapsedaddress { + border: solid 1px #eee; + margin-right: 10px; + overflow: hidden; +} +#toggleaddress { + display: block; + padding: 2px 2px 2px 12px; + margin-right: 10px; + cursor: pointer; +} +.toggleaddress { + background: #eee url(../../img/more-right-arrow.gif) 0 50% no-repeat; +} +.toggleaddress2 { + background: #eee url(../../img/more-up-arrow.gif) 0 50% no-repeat; +} + +select.advsearch { + margin-left:5em; +} +select.advsearchoperator { + position:absolute; +} + +#collapsedaddress { + border: solid 1px #eee; + margin-right: 10px; + overflow: hidden; +} +#toggleaddress { + display: block; + padding: 2px 2px 2px 12px; + margin-right: 10px; + cursor: pointer; +} +.toggleaddress { + background: #eee url(../../img/more-right-arrow.gif) 0 50% no-repeat; +} +.toggleaddress2 { + background: #eee url(../../img/more-up-arrow.gif) 0 50% no-repeat; +} + +.herited { + color: #ccc; +} + diff --git a/koha-tmpl/intranet-tmpl/prog/img/more-right-arrow.gif b/koha-tmpl/intranet-tmpl/prog/img/more-right-arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..1729fafa7cb9d8d01a37a4dc55558255f3619549 GIT binary patch literal 81 zcmZ?wbhEHb References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-24-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain (patch for updateDB later) --- C4/Search.pm | 130 +++++++++++++------- .../opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl | 5 +- .../opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl | 5 +- 3 files changed, 94 insertions(+), 46 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 1bbfce6..eca115c 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -27,6 +27,7 @@ use XML::Simple; use C4::Dates qw(format_date); use C4::XSLT; use C4::Branch; +use C4::Charset; use C4::Reserves; # CheckReserves use C4::Debug; use URI::Escape; @@ -120,6 +121,15 @@ sub FindDuplicate { } } + # If unimarc, then search duplicate on EAN + if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) { + my @fields = $record->field('073'); + foreach my $field (@fields) { + my $ean = $field->subfield('a'); + $query .= " or ean=$ean"; + } + } + # FIXME: add error handling my ( $error, $searchresults ) = SimpleSearch($query); # FIXME :: hardcoded ! my @results; @@ -669,14 +679,14 @@ sub _detect_truncation { $operand =~ s/^ //g; my @wordlist = split( /\s/, $operand ); foreach my $word (@wordlist) { - if ( $word =~ s/^\*([^\*]+)\*$/$1/ ) { - push @rightlefttruncated, $word; + if (( index( $word, "*" ) ==length($word)-1) && (index( $word, "*" )==0)) { + push @rightlefttruncated, substr($word,1,-1); } - elsif ( $word =~ s/^\*([^\*]+)$/$1/ ) { - push @lefttruncated, $word; + elsif ( index( $word, "*" ) == length($word)-1 ) { + push @righttruncated, substr($word,0,-1); } - elsif ( $word =~ s/^([^\*]+)\*$/$1/ ) { - push @righttruncated, $word; + elsif ( index( $word, "*" ) ==0) { + push @lefttruncated, substr($word,1); } elsif ( index( $word, "*" ) < 0 ) { push @nontruncated, $word; @@ -736,17 +746,22 @@ sub _build_weighted_query { # Keyword, or, no index specified if ( ( $index eq 'kw' ) || ( !$index ) ) { $weighted_query .= - "Title-cover,ext,r1=\"$operand\""; # exact title-cover - $weighted_query .= " or ti,ext,r2=\"$operand\""; # exact title - $weighted_query .= " or ti,phr,r3=\"$operand\""; # phrase title + "Title-cover,first-in-field,phr,r1=\"$operand\""; # exact title-cover + $weighted_query .= " or ti,first-in-field,phr,r2=\"$operand\""; # exact title + $weighted_query .= " or au,first-in-field,phr,r3=\"$operand\""; # phrase title + $weighted_query .= " or ti,phr,r3=\"$operand\""; # exact title + $weighted_query .= " or au,phr,r3=\"$operand\""; # phrase title + $weighted_query .= " or ti,wrdl,r4=\"$operand\""; + $weighted_query .= " or au,wrdl,r4=\"$operand\""; #$weighted_query .= " or any,ext,r4=$operand"; # exact any #$weighted_query .=" or kw,wrdl,r5=\"$operand\""; # word list any - $weighted_query .= " or wrdl,fuzzy,r8=\"$operand\"" + $weighted_query .= " or phr,r5=\"$operand\""; + $weighted_query .= " or wrdl,r7=\"$operand\""; + $weighted_query .= " or wrdl,fuzzy,r9=\"$operand\"" if $fuzzy_enabled; # add fuzzy, word list $weighted_query .= " or wrdl,right-Truncation,r9=\"$stemmed_operand\"" if ( $stemming and $stemmed_operand ) ; # add stemming, right truncation - $weighted_query .= " or wrdl,r9=\"$operand\""; # embedded sorting: 0 a-z; 1 z-a # $weighted_query .= ") or (sort1,aut=1"; @@ -771,9 +786,9 @@ sub _build_weighted_query { #TODO: build better cases based on specific search indexes else { - $weighted_query .= " $index,ext,r1=\"$operand\""; # exact index + $weighted_query .= " $index,phr,r1=\"$operand\""; # exact index #$weighted_query .= " or (title-sort-az=0 or $index,startswithnt,st-word,r3=$operand #)"; - $weighted_query .= " or $index,phr,r3=\"$operand\""; # phrase index + $weighted_query .= " or $index,wrdl,r3=\"$operand\""; # phrase index $weighted_query .= " or $index,rt,wrdl,r3=\"$operand\""; # word list index } @@ -1079,7 +1094,8 @@ sub buildQuery { # COMBINE OPERANDS, INDEXES AND OPERATORS if ( $operands[$i] ) { - $operands[$i]=~s/^\s+//; + $operands[$i]=~s/^\s+//; + next unless $operands[$i]; # A flag to determine whether or not to add the index to the query my $indexes_set; @@ -1160,11 +1176,8 @@ sub buildQuery { "TRUNCATION: NON:>@$nontruncated< RIGHT:>@$righttruncated< LEFT:>@$lefttruncated< RIGHTLEFT:>@$rightlefttruncated< REGEX:>@$regexpr<" if $DEBUG; - # Apply Truncation - if ( - scalar(@$righttruncated) + scalar(@$lefttruncated) + - scalar(@$rightlefttruncated) > 0 ) - { + # Apply Truncation + if ( scalar(@$righttruncated) + scalar(@$lefttruncated) + scalar(@$rightlefttruncated) + scalar(@$regexpr) > 0 ) { # Don't field weight or add the index to the query, we do it here $indexes_set = 1; @@ -1256,21 +1269,21 @@ sub buildQuery { my $group_OR_limits; my $availability_limit; foreach my $this_limit (@limits) { -# if ( $this_limit =~ /available/ ) { + next unless $this_limit; + if ( $this_limit =~ /available/ ) { # ## 'available' is defined as (items.onloan is NULL) and (items.itemlost = 0) ## In English: ## all records not indexed in the onloan register (zebra) and all records with a value of lost equal to 0 -# $availability_limit .= -#"( ( allrecords,AlwaysMatches='' not onloan,AlwaysMatches='') and (lost,st-numeric=0) )"; #or ( allrecords,AlwaysMatches='' not lost,AlwaysMatches='')) )"; -# $limit_cgi .= "&limit=available"; -# $limit_desc .= ""; -# } + $availability_limit .= +"( ( allrecords,AlwaysMatches='' not onloan,AlwaysMatches='') and (lost,st-numeric=0) )"; #or ( allrecords,AlwaysMatches='' not lost,AlwaysMatches='')) )"; + $limit_cgi .= "&limit=available"; + $limit_desc .= ""; + } # # group_OR_limits, prefixed by mc- # OR every member of the group -# elsif ( $this_limit =~ /mc/ ) { - if ( $this_limit =~ /mc/ ) { + elsif ( $this_limit =~ /mc/ ) { $group_OR_limits .= " or " if $group_OR_limits; $limit_desc .= " or " if $group_OR_limits; $group_OR_limits .= "$this_limit"; @@ -1429,11 +1442,17 @@ sub searchResults { # loop through all of the records we've retrieved for ( my $i = $offset ; $i <= $times - 1 ; $i++ ) { my $marcrecord = MARC::File::USMARC::decode( $marcresults[$i] ); - $fw = $scan - ? undef - : $bibliotag < 10 - ? GetFrameworkCode($marcrecord->field($bibliotag)->data) - : GetFrameworkCode($marcrecord->subfield($bibliotag,$bibliosubf)); + my $biblionumber; + if(not $scan){ + if ( $bibliotag < 10 ) { + $biblionumber = $marcrecord->field($bibliotag) ? $marcrecord->field($bibliotag)->data : undef; + } else { + $biblionumber = $marcrecord->subfield($bibliotag,$bibliosubf); + } + $fw = (defined $biblionumber) ? GetFrameworkCode($biblionumber) : ''; + } + + my $oldbiblio = TransformMarcToKoha( $dbh, $marcrecord, $fw ); $oldbiblio->{subtitle} = GetRecordValue('subtitle', $marcrecord, $fw); $oldbiblio->{result_number} = $i + 1; @@ -1527,10 +1546,9 @@ sub searchResults { my $item_onhold_count = 0; my $items_count = scalar(@fields); my $maxitems = - ( C4::Context->preference('maxItemsinSearchResults') ) - ? C4::Context->preference('maxItemsinSearchResults') - 1 + ( C4::Context->preference('maxItemsInSearchResults') ) + ? C4::Context->preference('maxItemsInSearchResults') - 1 : 1; - # loop through every item foreach my $field (@fields) { my $item; @@ -1649,10 +1667,6 @@ sub searchResults { } } # notforloan, item level and biblioitem level my ( $availableitemscount, $onloanitemscount, $otheritemscount ); - $maxitems = - ( C4::Context->preference('maxItemsinSearchResults') ) - ? C4::Context->preference('maxItemsinSearchResults') - 1 - : 1; for my $key ( sort keys %$onloan_items ) { (++$onloanitemscount > $maxitems) and last; push @onloan_items_loop, $onloan_items->{$key}; @@ -1669,7 +1683,6 @@ sub searchResults { # XSLT processing of some stuff use C4::Charset; SetUTF8Flag($marcrecord); - $debug && warn $marcrecord->as_formatted; if (!$scan && $search_context eq 'opac' && C4::Context->preference("OPACXSLTResultsDisplay")) { # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results) # is not implemented yet @@ -1701,9 +1714,9 @@ sub searchResults { $oldbiblio->{isbn} =~ s/-//g; # deleting - in isbn to enable amazon content push( @newresults, $oldbiblio ) - if(not $hidelostitems - or (($items_count > $itemlost_count ) - && $hidelostitems)); + if(not C4::Context->preference('hidelostitems') + or ( ( $items_count > $itemlost_count || $items_count == 0 ) + && C4::Context->preference('hidelostitems'))); } return @newresults; @@ -2427,6 +2440,37 @@ sub enabled_staff_search_views ); } +=head2 enabled_opac_search_views + +%hash = enabled_opac_search_views() + +This function returns a hash that contains two flags obtained from the system +preferences, used to determine whether a particular opac search results view +is enabled. + +=over 2 + +=item C + + * $hash{can_view_MARC} is true only if the MARC view is enabled + * $hash{can_view_ISBD} is true only if the ISBD view is enabled + +=item C + +=back + +$template->param ( C4::Search::enabled_opac_search_views ); + +=cut + +sub enabled_opac_search_views +{ + return ( + can_opac_view_MARC => C4::Context->preference('OPACviewMARC'), # 1 if the opac search allows the MARC view + can_opac_view_ISBD => C4::Context->preference('OPACviewISBD'), # 1 if the opac search allows the ISBD view + ); +} + sub AddSearchHistory{ my ($borrowernumber,$session,$query_desc,$query_cgi, $total)=@_; my $dbh = C4::Context->dbh; diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl index 039e2ea..dd094d8 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl @@ -30,12 +30,13 @@

      ISBD View

      diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl index 319d0d7..8915319 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl @@ -26,14 +26,17 @@

      (Record no. )

      -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:21 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:21 +0100 Subject: [Koha-patches] [PATCH 27/54] changing shelf to list In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-27-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 8d4e02e..5174397 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -119,6 +119,11 @@ function confirm_items_deletion() { { text: _("MARC (Unicode/UTF-8)"), url: "/cgi-bin/koha/catalogue/export.pl?format=utf8&op=export&bib=" } ]; + var addtomenu = [ + { text: _("Cart"), onclick: { fn: addToCart } }, + { text: _("List"), onclick: { fn: addToShelf } } + ]; + new YAHOO.widget.Button({ type: "menu", label: _("Save"), @@ -195,7 +200,6 @@ function confirm_items_deletion() {
    • ">Delete
    • -
    • ">Add to shelf
    • ">Print
    • -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:19 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:19 +0100 Subject: [Koha-patches] [PATCH 25/54] MT4316 AdvancedSearchContent new feature (OPACAdvancedSearchContent) In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-25-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain if those sysprefs are filled, the index list will be replaced by the content of the syspref That let the library define his own index list, with more or less lines on the list --- .../prog/en/modules/catalogue/advsearch.tmpl | 8 ++---- .../opac-tmpl/prog/en/modules/opac-advsearch.tmpl | 8 +++++- opac/opac-search.pl | 23 +++++++++---------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tmpl index aeed108..dcd2d9b 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/advsearch.tmpl @@ -60,21 +60,21 @@
      - - + [+] - +
      @@ -102,7 +102,6 @@
      -
      @@ -132,7 +131,6 @@
      - diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tmpl index ec77493..ec4d617 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-advsearch.tmpl @@ -50,7 +50,7 @@

      - @@ -58,7 +58,10 @@ - @@ -95,6 +98,7 @@ + Scan Indexes --> diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 88f3a2f..23da608 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -246,6 +246,10 @@ if ( $template_type && $template_type eq 'advsearch' ) { if ( C4::Context->preference("expandedSearchOption") == 1 ) { $template->param( expanded_options => C4::Context->preference("expandedSearchOption") ); } + if ( C4::Context->preference("OpacAdvancedSearchContent") ne '' ) { + $template->param( OpacAdvancedSearchContent => C4::Context->preference("OpacAdvancedSearchContent") ); + } + # but let the user override it if (defined $cgi->param('expanded_options')) { if ( ($cgi->param('expanded_options') == 0) || ($cgi->param('expanded_options') == 1 ) ) { @@ -273,7 +277,7 @@ my @sort_by; my $default_sort_by = C4::Context->preference('OPACdefaultSortField')."_".C4::Context->preference('OPACdefaultSortOrder') if (C4::Context->preference('OPACdefaultSortField') && C4::Context->preference('OPACdefaultSortOrder')); - at sort_by = split("\0",$params->{'sort_by'}) if $params->{'sort_by'}; + at sort_by = $cgi->param('sort_by'); $sort_by[0] = $default_sort_by if !$sort_by[0] && defined($default_sort_by); foreach my $sort (@sort_by) { $template->param($sort => 1); # FIXME: security hole. can set any TMPL_VAR here @@ -281,8 +285,7 @@ foreach my $sort (@sort_by) { $template->param('sort_by' => $sort_by[0]); # Use the servers defined, or just search our local catalog(default) -my @servers; - at servers = split("\0",$params->{'server'}) if $params->{'server'}; +my @servers = $cgi->param('server'); unless (@servers) { #FIXME: this should be handled using Context.pm @servers = ("biblioserver"); @@ -291,21 +294,18 @@ unless (@servers) { # operators include boolean and proximity operators and are used # to evaluate multiple operands -my @operators; - at operators = split("\0",$params->{'op'}) if $params->{'op'}; +my @operators = $cgi->param('op'); # indexes are query qualifiers, like 'title', 'author', etc. They -# can be single or multiple parameters separated by comma: kw,right-Truncation -my @indexes; - at indexes = split("\0",$params->{'idx'}) if $params->{'idx'}; +# can be single or multiple parameters separated by comma: kw,right-Truncation +my @indexes = $cgi->param('idx'); # if a simple index (only one) display the index used in the top search box if ($indexes[0] && !$indexes[1]) { $template->param("ms_".$indexes[0] => 1); } # an operand can be a single term, a phrase, or a complete ccl query -my @operands; - at operands = split("\0",$params->{'q'}) if $params->{'q'}; +my @operands = $cgi->param('q'); # if a simple search, display the value in the search box if ($operands[0] && !$operands[1]) { @@ -313,8 +313,7 @@ if ($operands[0] && !$operands[1]) { } # limits are use to limit to results to a pre-defined category such as branch or language -my @limits; - at limits = split("\0",$params->{'limit'}) if $params->{'limit'}; +my @limits = $cgi->param('limit'); if($params->{'multibranchlimit'}) { push @limits, join(" or ", map { "branch: $_ "} @{GetBranchesInCategory($params->{'multibranchlimit'})}) ; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:15 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:15 +0100 Subject: [Koha-patches] [PATCH 21/54] MT2894 Adds a download link for big error reports to import_borrowers In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-21-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/tools/import_borrowers.tmpl | 8 ++ tools/import_borrowers.pl | 129 +++++++++++++++++--- 2 files changed, 117 insertions(+), 20 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl index 0e409b6..8a23aec 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl @@ -51,6 +51,13 @@

      Error analysis:
      + +
      + " /> + + + +
      • Header row could not be parsed
      • @@ -74,6 +81,7 @@
      +
      diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl index d953667..5d05fa1 100755 --- a/tools/import_borrowers.pl +++ b/tools/import_borrowers.pl @@ -45,7 +45,9 @@ use C4::Members; use C4::Members::Attributes qw(:all); use C4::Members::AttributeTypes; use C4::Members::Messaging; - +use Date::Calc qw(Today_and_Now); +use Getopt::Long; +use File::Temp; use Text::CSV; # Text::CSV::Unicode, even in binary mode, fails to parse lines with these diacriticals: # ?? @@ -68,24 +70,41 @@ our $csv = Text::CSV->new({binary => 1}); # binary needed for non-ASCII Unicod # push @feedback, {feedback=>1, name=>'backend', value=>$csv->backend, backend=>$csv->backend}; my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ - template_name => "tools/import_borrowers.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => { tools => 'import_patrons' }, - debug => 1, -}); + template_name => "tools/import_borrowers.tmpl", + query => $input, + type => "intranet", + authnotrequired => $commandline, + flagsrequired => { tools => 'import_patrons' }, + debug => 1, + }); + +if (!$commandline) { + $template->param(columnkeys => $columnkeystpl); + $template->param( SCRIPT_NAME => $ENV{'SCRIPT_NAME'} ); + ($extended) and $template->param(ExtendedPatronAttributes => 1); -$template->param(columnkeys => $columnkeystpl); + if ($input->param('sample')) { + print $input->header( + -type => 'application/vnd.sun.xml.calc', # 'application/vnd.ms-excel' ? + -attachment => 'patron_import.csv', + ); + $csv->combine(@columnkeys); + print $csv->string, "\n"; + exit 1; + } -if ($input->param('sample')) { - print $input->header( - -type => 'application/vnd.sun.xml.calc', # 'application/vnd.ms-excel' ? - -attachment => 'patron_import.csv', - ); - $csv->combine(@columnkeys); - print $csv->string, "\n"; - exit 1; + if ($input->param('report')) { + open (FH, $input->param('errors_filename')); + print $input->header( + -type => 'text/plain', + -attachment => 'import_borrowers_report.txt' + ); + print ; + close FH; + #TODO : We surely want to check that is it really a temp file that we are unlinking + unlink $input->param('errors_filename'); + exit 1; + } } my $uploadborrowers = $input->param('uploadborrowers'); my $matchpoint = $input->param('matchpoint'); @@ -186,8 +205,7 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { $_->{surname} = $borrower{surname} || 'UNDEF'; } $invalid++; - (25 > scalar @errors) and push @errors, {missing_criticals=>\@missing_criticals}; - # The first 25 errors are enough. Keeping track of 30,000+ would destroy performance. + push @errors, {missing_criticals=>\@missing_criticals}; next LINE; } if ($extended) { @@ -288,7 +306,78 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { 'alreadyindb' => $alreadyindb, 'invalid' => $invalid, 'total' => $imported + $alreadyindb + $invalid + $overwritten, - ); + ) if (!$commandline); + + if (scalar(@errors) > 25 or $commandline) { + + my $total = $imported + $alreadyindb + $invalid + $overwritten; + my $output; + + my $timestamp = C4::Dates->new()->output . " " . POSIX::strftime("%H:%M:%S",localtime); + $output .= "Timestamp : $timestamp\n"; + $output .= "Import results\n"; + $output .= "$imported imported records\n"; + $output .= "$overwritten overwritten records\n"; + $output .= "$alreadyindb not imported because already in borrowers table and overwrite disabled\n"; + $output .= "(last was $lastalreadyindb)\n" if ($lastalreadyindb); + $output .= "$invalid not imported because they are not in the expected format\n"; + $output .= "(last was $lastinvalid)\n" if ($lastinvalid); + $output .= "$total records parsed\n"; + + + $output .= "\nError analysis\n"; + foreach my $hash (@errors) { + $output .= "Header row could not be parsed" if ($hash->{'badheader'}); + foreach my $array ($hash->{'missing_criticals'}) { + foreach (@$array) { + $output .= "Line $_->{'line'}: "; + if ($hash->{'badparse'}) { + $output .= "could not be parsed!"; + } elsif ($hash->{'bad_date'}) { + $output .= "has $_->{'key'} in unrecognized format: $_->{'value'} "; + } else { + $output .= "Critical field $_->{'key'}: "; + if ($_->{'branch_map'} || $_->{'category_map'}) { + $output .= "has unrecognized value: $_->{'value'}"; + } else { + $output .= " missing"; + } + $output .= " (borrowernumber: $_->{'borrowernumber'}; surname: $_->{'surname'})"; + } + $output .= "\n"; + $output .= $_->{'lineraw'} . "\n" if ($commandline); + } + } + } + + if (scalar(@errors) > 25 && !$commandline) { + my $tmpf = File::Temp->new(UNLINK => 0); + print $tmpf $output; + $template->param(download_errors => 1, errors_filename => $tmpf->filename); + close $tmpf; + } + + if ($commandline) { + # Write log file + my $logfile = "/var/log/koha/reports/import_borrowers.log"; + if (open (FH, ">>$logfile")) { + print FH $output; + close(FH); + } else { + $output .= "Unable to write to log file : $logfile\n"; + } + + + # Send email with log + my $mail = MIME::Lite->new( + To => C4::Context->preference('KohaAdminEmailAddress'), + Subject => "Import borrowers log email", + Type => 'text/plain', + Data => $output + ); + $mail->send() or print "Unable to send log email"; + } + } } else { if ($extended) { -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:16 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:16 +0100 Subject: [Koha-patches] [PATCH 22/54] MT3113 : Showing cards should use marcflavour In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-22-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain filename for compact xsl is now based on marcflavour --- catalogue/cardview.pl | 3 ++- catalogue/showmarc.pl | 3 ++- .../intranet-tmpl/prog/en/xslt/UNIMARC_compact.xsl | 19 ++++++------------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/catalogue/cardview.pl b/catalogue/cardview.pl index f93323f..d41d7c8 100755 --- a/catalogue/cardview.pl +++ b/catalogue/cardview.pl @@ -32,7 +32,8 @@ $template->param(biblionumber => $biblionumber); my $xmlrecord = GetXmlBiblio($biblionumber); #my $xslfile = "/home/kohacat/etc/xslt/MARC21slim2HTML.xsl"; #my $xslfile = "/home/kohacat/etc/xslt/MARC21slim2English.xsl"; -my $xslfile = C4::Context->config('intranetdir')."/koha-tmpl/intranet-tmpl/prog/en/xslt/compact.xsl"; +my $filename=(C4::Context->preference('marcflavour') ne "MARC21"?C4::Context->preference('marcflavour')."_":"").'compact.xsl'; +my $xslfile = C4::Context->config('intranetdir')."/koha-tmpl/intranet-tmpl/prog/en/xslt/$filename"; my $parser = XML::LibXML->new(); my $xslt = XML::LibXSLT->new(); my $source = $parser->parse_string($xmlrecord); diff --git a/catalogue/showmarc.pl b/catalogue/showmarc.pl index d0011ba..1e7e5b8 100755 --- a/catalogue/showmarc.pl +++ b/catalogue/showmarc.pl @@ -69,7 +69,8 @@ if($importid) { if($view eq 'card') { $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; -my $xslfile = C4::Context->config('intrahtdocs')."/prog/en/xslt/compact.xsl"; +my $filename=(C4::Context->preference('marcflavour') ne "MARC21"?C4::Context->preference('marcflavour')."_":"").'compact.xsl'; +my $xslfile = C4::Context->config('intrahtdocs')."/prog/en/xslt/$filename"; my $parser = XML::LibXML->new(); my $xslt = XML::LibXSLT->new(); my $source = $parser->parse_string($xmlrecord); diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARC_compact.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARC_compact.xsl index 6e70ee7..32e92ca 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARC_compact.xsl +++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARC_compact.xsl @@ -34,28 +34,21 @@ -

      +

      - -
      -

      - -

      -
      - - . - - - . + +

      + . +

      @@ -78,7 +71,7 @@
      - + -- -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:13 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:13 +0100 Subject: [Koha-patches] [PATCH 19/54] MT 2263 Change debarring system Now when a user is debarred, you set a end date, and can put a comment. If an overdue generate a debar, the debar date is set to 9999-12-31. In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-19-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain MT3747: Shows member relatives in issues lists --- C4/Members.pm | 252 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 183 insertions(+), 69 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 00716cd..f69efca 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -23,14 +23,15 @@ use strict; use C4::Context; use C4::Dates qw(format_date_in_iso); use Digest::MD5 qw(md5_base64); -use Date::Calc qw/Today Add_Delta_YM/; +use Date::Calc qw/Today Add_Delta_YM check_date Date_to_Days/; use C4::Log; # logaction +use C4::Branch; use C4::Overdues; use C4::Reserves; use C4::Accounts; use C4::Biblio; use C4::SQLHelper qw(InsertInTable UpdateInTable SearchInTable); -use C4::Members::Attributes qw(SearchIdMatchingAttribute); +use C4::Members::Attributes qw(SearchIdMatchingAttribute GetBorrowerAttributes); our ($VERSION, at ISA, at EXPORT, at EXPORT_OK,$debug); @@ -44,6 +45,7 @@ BEGIN { &Search &SearchMember &GetMemberDetails + &GetMemberRelatives &GetMember &GetGuarantees @@ -87,6 +89,8 @@ BEGIN { &DeleteMessage &GetMessages &GetMessagesCount + &SetMemberInfosInTemplate + &getFullBorrowerAddress ); #Modify data @@ -155,7 +159,7 @@ name. C<$filter> is assumed to be a list of elements to filter results on -C<$showallbranches> is used in IndependantBranches Context to display all branches results. +C<$showallbranches> is used in IndependentBranchPatron Context to display all branches results. C<&SearchMember> returns a two-element list. C<$borrowers> is a reference-to-array; each element is a reference-to-hash, whose keys @@ -179,8 +183,20 @@ sub SearchMember { $query = "SELECT * FROM borrowers LEFT JOIN categories ON borrowers.categorycode=categories.categorycode "; - my $sth = $dbh->prepare("$query WHERE cardnumber = ?"); - $sth->execute($searchstring); + my (@where_string, @bind_params); + push @where_string, "cardnumber=?"; + push @bind_params, $searchstring; + if (C4::Context->preference("IndependentBranchPatron") && !$showallbranches){ + if (C4::Context->userenv && (C4::Context->userenv->{flags} % 2) !=1 && C4::Context->userenv->{'branch'}){ + unless (C4::Context->userenv->{'branch'} eq "insecure"){ + push @where_string,"borrowers.branchcode =?"; + push @bind_params,C4::Context->userenv->{'branch'}; + } + } + } + my $sth = $dbh->prepare("$query WHERE ".join(" AND ", @where_string)); + + $sth->execute(@bind_params); my $data = $sth->fetchall_arrayref({}); if (@$data){ return ( scalar(@$data), $data ); @@ -190,8 +206,8 @@ sub SearchMember { { $query .= ($category_type ? " AND category_type = ".$dbh->quote($category_type) : ""); $query .= " WHERE (surname LIKE ? OR cardnumber like ?) "; - if (C4::Context->preference("IndependantBranches") && !$showallbranches){ - if (C4::Context->userenv && C4::Context->userenv->{flags} % 2 !=1 && C4::Context->userenv->{'branch'}){ + if (C4::Context->preference("IndependentBranchPatron") && !$showallbranches){ + if (C4::Context->userenv && (C4::Context->userenv->{flags} % 2) !=1 && C4::Context->userenv->{'branch'}){ $query.=" AND borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'}) unless (C4::Context->userenv->{'branch'} eq "insecure"); } } @@ -203,8 +219,8 @@ sub SearchMember { @data = split( ' ', $searchstring ); $count = @data; $query .= " WHERE "; - if (C4::Context->preference("IndependantBranches") && !$showallbranches){ - if (C4::Context->userenv && C4::Context->userenv->{flags} % 2 !=1 && C4::Context->userenv->{'branch'}){ + if (C4::Context->preference("IndependentBranchPatron") && !$showallbranches){ + if (C4::Context->userenv && (C4::Context->userenv->{flags} %2 )!=1 && C4::Context->userenv->{'branch'}){ $query.=" borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'})." AND " unless (C4::Context->userenv->{'branch'} eq "insecure"); } } @@ -227,7 +243,7 @@ sub SearchMember { # FIXME - .= <{ LOST }->{noissues} Set for each LOST $flags->{ LOST }->{message} Message -- deprecated - $flags->{DBARRED} Set if patron debarred, no access - $flags->{DBARRED}->{noissues} Set for each DBARRED - $flags->{DBARRED}->{message} Message -- deprecated + $flags->{DEBARRED} Set if patron debarred, no access + $flags->{DEBARRED}->{noissues} Set for each DEBARRED + $flags->{DEBARRED}->{message} Message -- deprecated $flags->{ NOTES } $flags->{ NOTES }->{message} The note itself. NOT deprecated @@ -408,6 +424,7 @@ The following will be set where applicable: $flags->{WAITING}->{message} Message -- deprecated $flags->{WAITING}->{itemlist} ref-to-array: list of available items + $flags->{EXPIRED} patron subscription expired =over =item C<$flags-E{ODUES}-E{itemlist}> is a reference-to-array listing the @@ -458,26 +475,39 @@ sub patronflags { && $patroninformation->{'gonenoaddress'} == 1 ) { my %flaginfo; + $flaginfo{'gonenoaddresscomment'} = $patroninformation->{'gonenoaddresscomment'}; $flaginfo{'message'} = 'Borrower has no valid address.'; $flaginfo{'noissues'} = 1; $flags{'GNA'} = \%flaginfo; } if ( $patroninformation->{'lost'} && $patroninformation->{'lost'} == 1 ) { my %flaginfo; + $flaginfo{'lostcomment'} = $patroninformation->{'lostcomment'}; $flaginfo{'message'} = 'Borrower\'s card reported lost.'; $flaginfo{'noissues'} = 1; $flags{'LOST'} = \%flaginfo; } - if ( $patroninformation->{'debarred'} - && $patroninformation->{'debarred'} == 1 ) - { - my %flaginfo; - $flaginfo{'message'} = 'Borrower is Debarred.'; - $flaginfo{'noissues'} = 1; - $flags{'DBARRED'} = \%flaginfo; + my $dateexpiry=$patroninformation->{'dateexpiry'}; + my @dateexpiry=split(/-/,$patroninformation->{'dateexpiry'}) if ($dateexpiry); + if ( scalar(@dateexpiry)>0 && check_date(@dateexpiry)) { + if(Date_to_Days(Date::Calc::Today) > Date_to_Days(@dateexpiry )){ + my %flaginfo; + $flaginfo{'noissues'} = 1; + $flags{'EXPIRED'} = \%flaginfo; + } } - if ( $patroninformation->{'borrowernotes'} - && $patroninformation->{'borrowernotes'} ) + if ( $patroninformation->{'debarred'} && check_date(split(/-/,$patroninformation->{'debarred'})) ){ + if(Date_to_Days(Date::Calc::Today) < Date_to_Days(split(/-/,$patroninformation->{'debarred'}) )){ + my %flaginfo; + $flaginfo{'debarredcomment'} = $patroninformation->{'debarredcomment'}; + $flaginfo{'message'} = $patroninformation->{'debarredcomment'}; + $flaginfo{'noissues'} = 1; + $flaginfo{'dateend'} = $patroninformation->{'debarred'} if $patroninformation->{'debarred'} ne "9999-12-31"; + $flaginfo{'dateend'} = $patroninformation->{'debarred'}; + $flags{'DEBARRED'} = \%flaginfo; + } + } + if ( $patroninformation->{'borrowernotes'} ) { my %flaginfo; $flaginfo{'message'} = $patroninformation->{'borrowernotes'}; @@ -563,13 +593,41 @@ sub GetMember { my $data = $sth->fetchall_arrayref({}); #FIXME interface to this routine now allows generation of a result set #so whole array should be returned but bowhere in the current code expects this - if (@{$data} ) { - return $data->[0]; + return undef if (scalar(@$data)==0); + if (scalar(@$data)==1) {return $data->[0];} + ($data) and return $data; +} + +=head2 GetMemberRelatives + + @borrowernumbers = GetMemberRelatives($borrowernumber); + + C returns a borrowersnumber's list of guarantor/guarantees of the member given in parameter + +=cut +sub GetMemberRelatives { + my $borrowernumber = shift; + my $dbh = C4::Context->dbh; + my @glist; + + # Getting guarantor + my $query = "SELECT guarantorid FROM borrowers WHERE borrowernumber=?"; + my $sth = $dbh->prepare($query); + $sth->execute($borrowernumber); + my $data = $sth->fetchrow_arrayref(); + push @glist, $data->[0] if $data->[0]; + + # Getting guarantees + $query = "SELECT borrowernumber FROM borrowers WHERE guarantorid=?"; + $sth = $dbh->prepare($query); + $sth->execute($borrowernumber); + while ($data = $sth->fetchrow_arrayref()) { + push @glist, $data->[0]; } - return; -} + return @glist; +} =head2 IsMemberBlocked @@ -600,39 +658,12 @@ sub IsMemberBlocked { my $borrowernumber = shift; my $dbh = C4::Context->dbh; - # does patron have current fine days? - my $strsth=qq{ - SELECT - ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due) ) AS blockingdate, - DATEDIFF(ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due)),NOW()) AS blockedcount - FROM old_issues - }; - if(C4::Context->preference("item-level_itypes")){ - $strsth.= - qq{ LEFT JOIN items ON (items.itemnumber=old_issues.itemnumber) - LEFT JOIN issuingrules ON (issuingrules.itemtype=items.itype)} - }else{ - $strsth .= - qq{ LEFT JOIN items ON (items.itemnumber=old_issues.itemnumber) - LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber) - LEFT JOIN issuingrules ON (issuingrules.itemtype=biblioitems.itemtype) }; - } - $strsth.= - qq{ WHERE finedays IS NOT NULL - AND date_due < returndate - AND borrowernumber = ? - ORDER BY blockingdate DESC, blockedcount DESC - LIMIT 1}; - my $sth=$dbh->prepare($strsth); - $sth->execute($borrowernumber); - my $row = $sth->fetchrow_hashref; - my $blockeddate = $row->{'blockeddate'}; - my $blockedcount = $row->{'blockedcount'}; + my $blockeddate = CheckBorrowerDebarred($borrowernumber); - return (1, $blockedcount) if $blockedcount > 0; + return (1, $blockeddate) if $blockeddate; # if he have late issues - $sth = $dbh->prepare( + my $sth = $dbh->prepare( "SELECT COUNT(*) as latedocs FROM issues WHERE borrowernumber = ? @@ -704,6 +735,11 @@ true on success, or false on failure sub ModMember { my (%data) = @_; + my $dbh = C4::Context->dbh; + + # Getting patron informations + my $meminfos = GetMember('borrowernumber' => $data{'borrowernumber'}); + # test to know if you must update or not the borrower password if (exists $data{password}) { if ($data{password} eq '****' or $data{password} eq '') { @@ -713,14 +749,27 @@ sub ModMember { } } my $execute_success=UpdateInTable("borrowers",\%data); -# ok if its an adult (type) it may have borrowers that depend on it as a guarantor -# so when we update information for an adult we should check for guarantees and update the relevant part -# of their records, ie addresses and phone numbers + # ok if its an adult (type) it may have borrowers that depend on it as a guarantor + # so when we update information for an adult we should check for guarantees and update the relevant part + # of their records, ie addresses and phone numbers my $borrowercategory= GetBorrowercategory( $data{'category_type'} ); if ( exists $borrowercategory->{'category_type'} && $borrowercategory->{'category_type'} eq ('A' || 'S') ) { # is adult check guarantees; UpdateGuarantees(%data); } + + # If the patron changes to a category with enrollment fee, we add an invoice + if ($data{'categorycode'} && $data{'categorycode'} ne $meminfos->{'categorycode'}) { + # check for enrollment fee & add it if needed + my $sth = $dbh->prepare("SELECT enrolmentfee FROM categories WHERE categorycode=?"); + $sth->execute($data{'categorycode'}); + my ($enrolmentfee) = $sth->fetchrow; + if ($enrolmentfee && $enrolmentfee > 0) { + # insert fee in patron debts + manualinvoice($data{'borrowernumber'}, '', '', 'A', $enrolmentfee); + } + } + logaction("MEMBERS", "MODIFY", $data{'borrowernumber'}, "UPDATE (executed w/ arg: $data{'borrowernumber'})") if C4::Context->preference("BorrowersLog"); @@ -951,7 +1000,7 @@ sub UpdateGuarantees { } =head2 GetPendingIssues - my $issues = &GetPendingIssues($borrowernumber); + my $issues = &GetPendingIssues(@borrowernumbers); Looks up what the patron with the given borrowernumber has borrowed. @@ -964,15 +1013,23 @@ The keys include C fields except marc and marcxml. #' sub GetPendingIssues { - my ($borrowernumber) = @_; + my (@borrowernumbers) = @_; + + # Borrowers part of the query + my $bquery = ''; + for (my $i = 0; $i < @borrowernumbers; $i++) { + $bquery .= " borrowernumber = ?"; + $bquery .= " OR" if ($i < (scalar(@borrowernumbers) - 1)); + } + # must avoid biblioitems.* to prevent large marc and marcxml fields from killing performance # FIXME: namespace collision: each table has "timestamp" fields. Which one is "timestamp" ? # FIXME: circ/ciculation.pl tries to sort by timestamp! # FIXME: C4::Print::printslip tries to sort by timestamp! # FIXME: namespace collision: other collisions possible. # FIXME: most of this data isn't really being used by callers. - my $sth = C4::Context->dbh->prepare( - "SELECT issues.*, + my $query = + qq(SELECT issues.*, items.*, biblio.*, biblioitems.volume, @@ -988,23 +1045,26 @@ sub GetPendingIssues { biblioitems.url, issues.timestamp AS timestamp, issues.renewals AS renewals, + issues.borrowernumber AS borrowernumber, items.renewals AS totalrenewals FROM issues LEFT JOIN items ON items.itemnumber = issues.itemnumber LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber WHERE - borrowernumber=? - ORDER BY issues.issuedate" + $bquery + ORDER BY issues.issuedate ); - $sth->execute($borrowernumber); - my $data = $sth->fetchall_arrayref({}); + my $sth = C4::Context->dbh->prepare($query); + $sth->execute(@borrowernumbers); + my $data = $sth->fetchall_arrayref( {} ); my $today = C4::Dates->new->output('iso'); foreach (@$data) { $_->{date_due} or next; ($_->{date_due} lt $today) and $_->{overdue} = 1; } return $data; + } =head2 GetAllIssues @@ -1641,6 +1701,59 @@ sub DelMember { return $sth->rows; } +=head2 SetMemberInfosInTemplate + &SetMemberInfosInTemplate($borrowernumber, $template) + + +Settings borrower informations for template user + +=cut + +sub SetMemberInfosInTemplate { + my ($borrowernumber, $template) = @_; + + my $borrower = GetMemberDetails( $borrowernumber, 0 ); + foreach my $key (keys %$borrower){ + $template->param($key => $borrower->{$key}); + } + + # Computes full borrower address + my (undef, $roadttype_hashref) = &GetRoadTypes(); + my $address = $borrower->{'streetnumber'}.' '.$roadttype_hashref->{$borrower->{'streettype'}}.' '.$borrower->{'address'}; + $template->param(is_child => ($borrower->{'category_type'} eq 'C'), + address => $address, + branchname => GetBranchName($borrower->{'branchcode'}), + ); + + foreach (qw(dateenrolled dateexpiry dateofbirth)) { + my $userdate = $borrower->{$_}; + unless ($userdate) { + $borrower->{$_} = ''; + next; + } + $userdate = C4::Dates->new($userdate,'iso')->output('syspref'); + $borrower->{$_} = $userdate || ''; + $template->param( $_ => $userdate ); + } + + my $attributes = GetBorrowerAttributes($borrowernumber); + $template->param( + extendedattributes => $attributes, + ); +} + +sub getFullBorrowerAddress { + my ( $borrowernumber ) = @_; + my $borrower = GetMemberDetails( $borrowernumber, 0 ); + # Computes full borrower address + my ( undef, $roadttype_hashref ) = &GetRoadTypes(); + my $address1=""; + if(($borrower->{'streetnumber'}) ne ''){$address1=$address1.$borrower->{'streetnumber'}.' ';} + if(($roadttype_hashref->{ $borrower->{'streettype'} }) ne ""){$address1=$address1.$roadttype_hashref->{ $borrower->{'streettype'} }.' ';} + $address1=$address1.$borrower->{'address'}; + return $address1; +} + =head2 ExtendMemberSubscriptionTo (OUEST-PROVENCE) $date = ExtendMemberSubscriptionTo($borrowerid, $date); @@ -2001,7 +2114,7 @@ sub GetBorrowersNamesAndLatestIssue { =head2 DebarMember - my $success = DebarMember( $borrowernumber ); + my $success = DebarMember( $borrowernumber, $todate ); marks a Member as debarred, and therefore unable to checkout any more items. @@ -2013,12 +2126,13 @@ true on success, false on failure sub DebarMember { my $borrowernumber = shift; + my $todate = shift; return unless defined $borrowernumber; return unless $borrowernumber =~ /^\d+$/; return ModMember( borrowernumber => $borrowernumber, - debarred => 1 ); + debarred => $todate ); } -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:23 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:23 +0100 Subject: [Koha-patches] [PATCH 29/54] adding a class to index + - - - +
    • @@ -179,8 +180,8 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di
    • "/>
    • - -
      " /> ">Cancel Cancel +
      noone"/> +
      " /> /cgi-bin/koha/members/moremember.pl?borrowernumber=#suggestionssuggestion.pl?suggestionid=">Cancel Cancel
      @@ -251,7 +252,7 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di @@ -260,9 +261,10 @@ h4.collapse a { font-size : 80%; text-decoration: none; } fieldset.brief ol { di
      "> " />
    • Suggestion information

      -
      1. + + + +
      2. + &biblionumber=&op=slip'); $('#reserve').hide(); return false;" /> + + + &biblionumber=&op=slip'); $('#reserve').hide(); return false;" /> + + " /> + " /> + " /> + " /> + " /> + " /> + " /> + +
      + + + + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:33 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:33 +0100 Subject: [Koha-patches] [PATCH 39/54] Offline circulation improvements : upload all files, apply at once In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-39-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain Offline circ : You now can upload all offline files from the Firefox extension. Once all circ desks have uploaded the file, the librarian can apply all of them, sorted by date. This avoid the problem of someone issuing an item on desk A, returning it on desk B. Before this improvement, if desk B uploaded the file before A, the return was applied before the issue, resulting in the items reamining issued. --- .../prog/en/modules/offline_circ/list.tmpl | 97 ++++++++++++++++++++ offline_circ/list.pl | 57 ++++++++++++ offline_circ/process.pl | 48 ++++++++++ offline_circ/service.pl | 60 ++++++++++++ 4 files changed, 262 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/offline_circ/list.tmpl create mode 100755 offline_circ/list.pl create mode 100755 offline_circ/process.pl create mode 100755 offline_circ/service.pl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/offline_circ/list.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/offline_circ/list.tmpl new file mode 100644 index 0000000..50fe065 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/offline_circ/list.tmpl @@ -0,0 +1,97 @@ + + Koha › Circulation › Offline Circulation + + + + + + + + + + +
      + +
      + +

      Offline Circulation

      + + + +
      + +
       DateBy
      - Requested Accepted Ordered Rejected Checked
      () + Asked Accepted Ordered Rejected Checked
      ()
      + + + + + + + + + + + + "> + + + + + + + + +
      DateActionBarcodeCardnumber
      " /> + + " title=""> + + + + + + + " title=""> + + + + +
      + +

      For the selected operations: + +

      + + + + + +

      There is no pending offline operations.

      + + + +
      + + diff --git a/offline_circ/list.pl b/offline_circ/list.pl new file mode 100755 index 0000000..e95411a --- /dev/null +++ b/offline_circ/list.pl @@ -0,0 +1,57 @@ +#!/usr/bin/perl + +# 2009 BibLibre + +# 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 CGI; +use C4::Output; +use C4::Auth; +use C4::Koha; +use C4::Context; +use C4::Circulation; +use C4::Branch; +use C4::Members; +use C4::Biblio; + +my $query = CGI->new; + +my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => "offline_circ/list.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => "circulate_remaining_permissions" }, +}); + +my $operations = GetOfflineOperations; + +for (@$operations) { + my $biblio = GetBiblioFromItemNumber(undef, $_->{'barcode'}); + $_->{'bibliotitle'} = $biblio->{'title'}; + $_->{'biblionumber'} = $biblio->{'biblionumber'}; + my $borrower = GetMemberDetails(undef,$_->{'cardnumber'}); + $_->{'borrowernumber'} = $borrower->{'borrowernumber'}; + $_->{'borrower'} = join(' ', $borrower->{'firstname'}, $borrower->{'surname'}); + $_->{'actionissue'} = $_->{'action'} eq 'issue'; + $_->{'actionreturn'} = $_->{'action'} eq 'return'; +} + +$template->param(operations => $operations); + +output_html_with_http_headers $query, $cookie, $template->output; + diff --git a/offline_circ/process.pl b/offline_circ/process.pl new file mode 100755 index 0000000..e1d1acd --- /dev/null +++ b/offline_circ/process.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl + +# 2009 BibLibre + +# 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 CGI; +use C4::Auth; +use C4::Circulation; + +my $query = CGI->new; + +my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => "offline_circ/list.tmpl", + query => $query, + type => "intranet", + authnotrequired => 0, + flagsrequired => { circulate => "circulate_remaining_permissions" }, +}); + +my $operationid = $query->param('operationid'); +my $action = $query->param('action'); +my $result; + +if ( $action eq 'process' ) { + my $operation = GetOfflineOperation( $operationid ); + $result = ProcessOfflineOperation( $operation ); +} elsif ( $action eq 'delete' ) { + $result = DeleteOfflineOperation( $operationid ); +} + +print CGI::header('-type'=>'text/plain', '-charset'=>'utf-8'); +print $result; + diff --git a/offline_circ/service.pl b/offline_circ/service.pl new file mode 100755 index 0000000..40bd4c7 --- /dev/null +++ b/offline_circ/service.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl + +# 2009 BibLibre + +# 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 CGI; +use C4::Auth; +use C4::Circulation; + +my $cgi = CGI->new; + +# get the status of the user, this will check his credentials and rights +my ($status, $cookie, $sessionId) = C4::Auth::check_api_auth($cgi, undef); + +my $result; + +if ($status eq 'ok') { # if authentication is ok + if ( $cgi->param('pending') eq 'true' ) { # if the 'pending' flag is true, we store the operation in the db instead of directly processing them + $result = AddOfflineOperation( + $cgi->param('userid') || '', + $cgi->param('branchcode') || '', + $cgi->param('timestamp') || '', + $cgi->param('action') || '', + $cgi->param('barcode') || '', + $cgi->param('cardnumber') || '', + ); + } else { + $result = ProcessOfflineOperation( + { + 'userid' => $cgi->param('userid'), + 'branchcode' => $cgi->param('branchcode'), + 'timestamp' => $cgi->param('timestamp'), + 'action' => $cgi->param('action'), + 'barcode' => $cgi->param('barcode'), + 'cardnumber' => $cgi->param('cardnumber'), + } + ); + } +} else { + $result = "Authentication failed." +} + +print CGI::header('-type'=>'text/plain', '-charset'=>'utf-8'); +print $result; + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:35 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:35 +0100 Subject: [Koha-patches] [PATCH 41/54] Biblio.pm : fix isbd syspref and default location In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-41-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain - the systempreference is isbd, not ISBD - when preparing the ItemRecord (for acq or serials recieving), there was no default value calculated for location. Fixing that --- C4/Biblio.pm | 10 +++++++++- 1 files changed, 9 insertions(+), 1 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index c3a3094..9562d12 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -747,7 +747,7 @@ sub GetISBDView { my ( $holdingbrtagf, $holdingbrtagsubf ) = &GetMarcFromKohaField( "items.holdingbranch", $itemtype ); my $tagslib = &GetMarcStructure( 1, $itemtype ); - my $ISBD = C4::Context->preference('ISBD'); + my $ISBD = C4::Context->preference('isbd'); my $bloc = $ISBD; my $res; my $blocres; @@ -2258,6 +2258,14 @@ sub PrepareItemrecordDisplay { $defaultvalue = $defaultvalues->{branchcode} if $defaultvalues; } } + if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.location' ) + && $defaultvalues + && $defaultvalues->{'location'} ) { + my $temp = $itemrecord->field($subfield) if ($itemrecord); + unless ($temp) { + $defaultvalue = $defaultvalues->{location} if $defaultvalues; + } + } if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { my @authorised_values; my %authorised_lib; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:37 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:37 +0100 Subject: [Koha-patches] [PATCH 43/54] CSV export : deal with control fields to avoid an error (C4/Record.pm) In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-43-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- C4/Record.pm | 49 ++++++++++++++++++++++++++++++------------------- 1 files changed, 30 insertions(+), 19 deletions(-) diff --git a/C4/Record.pm b/C4/Record.pm index 497c03d..4c8eb8e 100644 --- a/C4/Record.pm +++ b/C4/Record.pm @@ -460,26 +460,37 @@ sub marcrecord2csv { } } push (@fieldstab, join($subfieldseparator, @tmpfields)); - # Or a field - } else { - my @fields = ($record->field($marcfield)); - my $authvalues = GetKohaAuthorisedValuesFromField($marcfield, undef, $frameworkcode, undef); - - my @valuesarray; - foreach (@fields) { - my $value; - - # Getting authorised value - $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string; - - # Field processing - eval $fieldprocessing if ($fieldprocessing); + # Or a field - push @valuesarray, $value; - } - push (@fieldstab, join($fieldseparator, @valuesarray)); - } - }; + } else { + my @fields = ( $record->field($marcfield) ); + my $authvalues = GetKohaAuthorisedValuesFromField( $marcfield, undef, $frameworkcode, undef ); + + my @valuesarray; + foreach (@fields) { + my $value; + + # If it is a control field + if ($_->is_control_field) { + $value = defined $authvalues->{$_->as_string} ? $authvalues->{$_->as_string} : $_->as_string; + } else { + # If it is a field, we gather all subfields, joined by the subfield separator + my @subvaluesarray; + my @subfields = $_->subfields; + foreach my $subfield (@subfields) { + push (@subvaluesarray, defined $authvalues->{$subfield->[1]} ? $authvalues->{$subfield->[1]} : $subfield->[1]); + } + $value = join ($subfieldseparator, @subvaluesarray); + } + + # Field processing + eval $fieldprocessing if ($fieldprocessing); + + push @valuesarray, $value; + } + push( @fieldstab, join( $fieldseparator, @valuesarray ) ); + } + } $csv->combine(@fieldstab); $output .= $csv->string() . "\n"; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:27 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:27 +0100 Subject: [Koha-patches] [PATCH 33/54] opac CSS new classes In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-33-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain Some new classes for OPAC css --- koha-tmpl/opac-tmpl/prog/en/css/opac.css | 35 ++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css index 3df41fb..3b7c352 100644 --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css @@ -1993,4 +1993,39 @@ div.ft { .searchresults .commentline.yours { background-color : rgb(239, 254, 213); background-color : rgba(239, 254, 213, 0.4); + +select.advsearch { + margin-left:5em; +} +select.advsearchoperator { + position:absolute; +} + +.authorSearch { + position: absolute; + display: none; + z-index: 2; + background-color: white; + border: 1px solid black; + padding: 4px; +} +.authorSearch li { + list-style-type: none; +} +.authorSearch ul { + padding-left: 0px; +} +.subjectSearch { + position: absolute; + display: none; + z-index: 2; + background-color: white; + border: 1px solid black; + padding: 4px; +} +.subjectSearch li { + list-style-type: none; +} +.subjectSearch ul { + padding-left: 0px; } -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:36 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:36 +0100 Subject: [Koha-patches] [PATCH 42/54] C4/Koha.pm : adding two functions GetAutorisedValueByCode and GetKohaImageurlFromAuthorisedValues In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-42-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain just for convenience --- C4/Koha.pm | 40 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) diff --git a/C4/Koha.pm b/C4/Koha.pm index d10c52e..2dc6e77 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -58,6 +58,8 @@ BEGIN { &GetKohaAuthorisedValues &GetKohaAuthorisedValuesFromField &GetKohaAuthorisedValueLib + &GetAuthorisedValueByCode + &GetKohaImageurlFromAuthorisedValues &GetAuthValCode &GetNormalizedUPC &GetNormalizedISBN @@ -1041,6 +1043,25 @@ sub displayServers { return \@primaryserverloop; } + +=head2 GetKohaImageurlFromAuthorisedValues + +$authhorised_value = GetKohaImageurlFromAuthorisedValues( $category, $authvalcode ); + +Return the first url of the authorised value image represented by $lib. + +=cut + +sub GetKohaImageurlFromAuthorisedValues { + my ( $category, $lib ) = @_; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT imageurl FROM authorised_values WHERE category=? AND lib =?"); + $sth->execute( $category, $lib ); + while ( my $data = $sth->fetchrow_hashref ) { + return $data->{'imageurl'}; + } +} + =head2 GetAuthValCode $authvalcode = GetAuthValCode($kohafield,$frameworkcode); @@ -1135,6 +1156,25 @@ sub GetAuthorisedValueCategories { return \@results; } +=head2 GetAuthorisedValueByCode + +$authhorised_value = GetAuthorisedValueByCode( $category, $authvalcode ); + +Return an hashref of the authorised value represented by $authvalcode. + +=cut + +sub GetAuthorisedValueByCode { + my ( $category, $authvalcode ) = @_; + + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT lib FROM authorised_values WHERE category=? AND authorised_value =?"); + $sth->execute( $category, $authvalcode ); + while ( my $data = $sth->fetchrow_hashref ) { + return $data->{'lib'}; + } +} + =head2 GetKohaAuthorisedValues Takes $kohafield, $fwcode as parameters. -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:29 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:29 +0100 Subject: [Koha-patches] [PATCH 35/54] build_holds_queue.pl : patch to fixup with IssuingRules In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-35-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- misc/cronjobs/holds/build_holds_queue.pl | 8 +++++--- opac/opac-ISBDdetail.pl | 13 +++++++++++-- opac/opac-MARCdetail.pl | 4 ++++ opac/opac-user.pl | 13 ++++++++++--- 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/misc/cronjobs/holds/build_holds_queue.pl b/misc/cronjobs/holds/build_holds_queue.pl index b02ab60..edbc4a7 100755 --- a/misc/cronjobs/holds/build_holds_queue.pl +++ b/misc/cronjobs/holds/build_holds_queue.pl @@ -21,6 +21,7 @@ use C4::Search; use C4::Items; use C4::Branch; use C4::Circulation; +use C4::IssuingRules; use C4::Members; use C4::Biblio; @@ -188,9 +189,10 @@ sub GetItemsAvailableToFillHoldRequestsForBib { $sth->execute(@params); my $items = $sth->fetchall_arrayref({}); - $items = [ grep { my @transfers = GetTransfers($_->{itemnumber}); $#transfers == -1; } @$items ]; - map { my $rule = GetBranchItemRule($_->{homebranch}, $_->{itype}); $_->{holdallowed} = $rule->{holdallowed}; $rule->{holdallowed} != 0 } @$items; - return [ grep { $_->{holdallowed} != 0 } @$items ]; + + my $branchfield = C4::Context->preference('HomeOrHoldingBranch'); + + return [ grep { my $rule = GetIssuingRule('*', $_->{itype}, $_->{$branchfield}); $_->{reservesallowed} = $rule->{reservesallowed}; $_->{reservesallowed} != 0 } @$items ]; } =head2 MapItemsToHoldRequests diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl index 88904da..9c94039 100755 --- a/opac/opac-ISBDdetail.pl +++ b/opac/opac-ISBDdetail.pl @@ -53,6 +53,8 @@ use C4::Review; use C4::Serials; # uses getsubscriptionfrom biblionumber use C4::Koha; use C4::Members; # GetMember +use C4::Items; +use C4::Reserves; use C4::External::Amazon; my $query = CGI->new(); @@ -68,7 +70,6 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( my $biblionumber = $query->param('biblionumber'); -$template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); $template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); my $marcflavour = C4::Context->preference("marcflavour"); @@ -122,6 +123,15 @@ $template->param( ); my $norequests = 1; +## Check if an item Can be holds on shelf +$template->param(C4::Search::enabled_opac_search_views); +my @all_items = &GetItemsInfo( $biblionumber, 'opac' ); +my $allowonshelfholds = 0; +for my $item (@all_items){ + $allowonshelfholds = 1 if(CanHoldOnShelf($item->{itemnumber}) and not $allowonshelfholds); +} +$template->param( 'AllowOnShelfHolds' => $allowonshelfholds ); + my $res = GetISBDView($biblionumber, "opac"); my @items = &GetItemsInfo($biblionumber, 'opac'); @@ -148,7 +158,6 @@ foreach ( @$reviews ) { $template->param( RequestOnOpac => C4::Context->preference("RequestOnOpac"), - AllowOnShelfHolds => C4::Context->preference('AllowOnShelfHolds'), norequests => $norequests, ISBD => $res, biblionumber => $biblionumber, diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index d127202..4d1e4b8 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -49,6 +49,8 @@ use C4::Output; use CGI; use MARC::Record; use C4::Biblio; +use C4::Items; #qw/GetItemsInfo GetItemsCount/; +use C4::Reserves qw/CanHoldOnShelf/; use C4::Acquisition; use C4::Koha; @@ -82,6 +84,8 @@ $template->param( $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); $template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); +$template->param( 'ItemsCount' => GetItemsCount( $biblionumber ) ); +$template->param(C4::Search::enabled_opac_search_views); # adding the $RequestOnOpac param my $RequestOnOpac; diff --git a/opac/opac-user.pl b/opac/opac-user.pl index 634b77a..7c2910e 100755 --- a/opac/opac-user.pl +++ b/opac/opac-user.pl @@ -24,7 +24,7 @@ use CGI; use C4::Auth; use C4::Koha; use C4::Circulation; -use C4::Reserves; +use C4::Reserves;# qw/GetMaxPickupDate GetReservesFromBorrowernumber/; use C4::Members; use C4::Output; use C4::Biblio; @@ -32,6 +32,7 @@ use C4::Items; use C4::Dates qw/format_date/; use C4::Letters; use C4::Branch; # GetBranches +use C4::Overdues qw/CheckBorrowerDebarred/; my $query = new CGI; @@ -64,7 +65,7 @@ for (qw(dateenrolled dateexpiry dateofbirth)) { } $borr->{'ethnicity'} = fixEthnicity( $borr->{'ethnicity'} ); -if ( $borr->{'debarred'} || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { +if ( CheckBorrowerDebarred($borrowernumber) || $borr->{'gonenoaddress'} || $borr->{'lost'} ) { $borr->{'flagged'} = 1; } @@ -183,6 +184,7 @@ $template->param( branchloop => \@branch_loop ); # now the reserved items.... my @reserves = GetReservesFromBorrowernumber( $borrowernumber ); foreach my $res (@reserves) { + warn $res->{'waitingdate'}; $res->{'reservedate'} = format_date( $res->{'reservedate'} ); if ( $res->{'expirationdate'} ne '0000-00-00' ) { @@ -193,7 +195,12 @@ foreach my $res (@reserves) { my $publictype = $res->{'publictype'}; $res->{$publictype} = 1; - $res->{'waiting'} = 1 if $res->{'found'} eq 'W'; + if ($res->{'found'} eq 'W'){ + $res->{'waiting'} = 1; + my @maxpickupdate = $res->{'waitingdate'} ? GetMaxPickupDate( $res->{'waitingdate'}, $borrowernumber, $res ) : ''; + $res->{'maxpickupdate'} = sprintf("%d-%02d-%02d", @maxpickupdate); + $res->{'formattedwaitingdate'} = format_date($res->{'maxpickupdate'}); + } $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'}; my $biblioData = GetBiblioData($res->{'biblionumber'}); $res->{'reserves_title'} = $biblioData->{'title'}; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:30 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:30 +0100 Subject: [Koha-patches] [PATCH 36/54] circ/overdue.pl modified : permission & limit on date In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-36-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain - the Overdues.pl now is now available to ppl with reports->execute_reports permission - there is a filter on date (to display only "old" or "new" overdues, for example) (the permission is created in another patch) --- circ/overdue.pl | 12 ++++++- .../prog/en/modules/circ/overdue.tmpl | 33 +++++++++++++++++++- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/circ/overdue.pl b/circ/overdue.pl index cad8e6d..21a5254 100755 --- a/circ/overdue.pl +++ b/circ/overdue.pl @@ -26,7 +26,7 @@ use CGI qw(-oldstyle_urls); use C4::Auth; use C4::Branch; use C4::Debug; -use C4::Dates qw/format_date/; +use C4::Dates qw/format_date format_date_in_iso/; use Date::Calc qw/Today/; use Text::CSV_XS; @@ -39,6 +39,8 @@ my $itemtypefilter = $input->param('itemtype') || ''; my $borflagsfilter = $input->param('borflag') || ''; my $branchfilter = $input->param('branch') || ''; my $op = $input->param('op') || ''; +my $dateduefrom = format_date_in_iso($input->param( 'dateduefrom' )) || ''; +my $datedueto = format_date_in_iso($input->param( 'datedueto' )) || ''; my $isfiltered = $op =~ /apply/i && $op =~ /filter/i; my $noreport = C4::Context->preference('FilterBeforeOverdueReport') && ! $isfiltered && $op ne "csv"; @@ -48,7 +50,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { reports => 1, circulate => "circulate_remaining_permissions" }, + flagsrequired => { reports => 'execute_reports', circulate => "circulate_remaining_permissions" }, debug => 1, } ); @@ -206,6 +208,9 @@ $template->param( borcatloop=> \@borcatloop, itemtypeloop => \@itemtypeloop, patron_attr_filter_loop => \@patron_attr_filter_loop, + dateduefrom => $input->param( 'dateduefrom' ) || '', + datedueto => $input->param( 'datedueto' ) || '', + DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), borname => $bornamefilter, order => $order, showall => $showall); @@ -253,6 +258,8 @@ if ($noreport) { $strsth.=" AND biblioitems.itemtype = '" . $itemtypefilter . "' " if $itemtypefilter; $strsth.=" AND borrowers.flags = '" . $borflagsfilter . "' " if $borflagsfilter; $strsth.=" AND borrowers.branchcode = '" . $branchfilter . "' " if $branchfilter; + $strsth .= " AND date_due < '" . $datedueto . "' " if $datedueto; + $strsth .= " AND date_due > '" . $dateduefrom . "' " if $dateduefrom; # restrict patrons (borrowers) to those matching the patron attribute filter(s), if any my $bnlist = $have_pattr_filter_data ? join(',',keys %borrowernumber_to_attributes) : ''; $strsth =~ s/WHERE 1=1/WHERE 1=1 AND borrowers.borrowernumber IN ($bnlist)/ if $bnlist; @@ -284,6 +291,7 @@ if ($noreport) { push @patron_attr_value_loop, { value => join(', ', sort { lc $a cmp lc $b } @displayvalues) }; } + $data->{email}=C4::Members::GetFirstValidEmailAddress($data->{borrowernumber}); push @overduedata, { duedate => format_date($data->{date_due}), borrowernumber => $data->{borrowernumber}, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tmpl index 9682fb1..a37fdca 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tmpl @@ -69,6 +69,7 @@ + @@ -137,6 +138,35 @@

      Filter On:

        +
      1. Date due: + + " /> + + + + " /> + +
      2. " />
      3. + +
      -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:40 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:40 +0100 Subject: [Koha-patches] [PATCH 46/54] UNIMARC XSLT changes In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-46-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain dealing with some BNF/SUDOC invalid utf-8 (in title, the removed fields are used to mark non-sorted words) --- .../prog/en/xslt/UNIMARCslim2intranetDetail.xsl | 2 +- .../prog/en/xslt/UNIMARCslimUtils.xsl | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl index bb542bc..9c04316 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl +++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslim2intranetDetail.xsl @@ -27,7 +27,7 @@ + select="translate($title, '˜œ슜슛슘슈슉','')"/> : diff --git a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl index c04a8e4..ad1650d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl +++ b/koha-tmpl/intranet-tmpl/prog/en/xslt/UNIMARCslimUtils.xsl @@ -135,6 +135,14 @@ + + + + + + + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:38 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:38 +0100 Subject: [Koha-patches] [PATCH 44/54] XSLT modifications (patch to double check) In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-44-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain This patch adds the ccode images on the XSLT Paul's question : isn't this a duplicate of commit d3b07c1889ed30693d321394562db627a4c135dd Author: Owen Leonard Date: Wed Jun 2 15:17:37 2010 -0400 More fixes for Bug 4423, Staff Client XSLT is just a copy of the OPAC one - Adding material type icons from the OPAC side --- C4/XSLT.pm | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-) diff --git a/C4/XSLT.pm b/C4/XSLT.pm index 7844330..5616c84 100644 --- a/C4/XSLT.pm +++ b/C4/XSLT.pm @@ -123,7 +123,9 @@ sub XSLTParse4Display { my ( $biblionumber, $orig_record, $xsl_suffix, $interface ) = @_; $interface = 'opac' unless $interface; # grab the XML, run it through our stylesheet, push it out to the browser - my $record = transformMARCXML4XSLT($biblionumber, $orig_record); + my $record = transformMARCXML4XSLT( $biblionumber, $orig_record ); + my $itemsimageurl = GetKohaImageurlFromAuthorisedValues( "CCODE", $orig_record->field('099')->subfield("t")) || ''; + my $logoxml = "" . $itemsimageurl . "\n"; #return $record->as_formatted(); my $itemsxml = buildKohaItemsNamespace($biblionumber); my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); @@ -134,7 +136,7 @@ sub XSLTParse4Display { "\n"; } $sysxml .= "\n"; - $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml\<\/record\>/; + $xmlrecord =~ s/\<\/record\>/$itemsxml$sysxml$logoxml\<\/record\>/; $xmlrecord =~ s/\& /\&\; /; $xmlrecord=~ s/\&\;amp\; /\&\; /; @@ -211,7 +213,8 @@ sub buildKohaItemsNamespace { $status = "available"; } my $homebranch = xml_escape($branches->{$item->{homebranch}}->{'branchname'}); - my $itemcallnumber = xml_escape($item->{itemcallnumber}); + my $itemcallnumber = xml_escape($item->{itemcallnumber}); + my $itemlocation = GetAuthorisedValueByCode( "LOC", $item->{location}) || ''; $xml.= "$homebranch". "$status". "".$itemcallnumber."" -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:25 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:25 +0100 Subject: [Koha-patches] [PATCH 31/54] Adding a reserve report In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-31-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/reports/reports-home.tmpl | 1 + .../prog/en/modules/reports/reserves_stats.tmpl | 549 ++++++++++++++++++++ reports/reserves_stats.pl | 382 ++++++++++++++ 3 files changed, 932 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/reports/reserves_stats.tmpl create mode 100755 reports/reserves_stats.pl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reports-home.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reports-home.tmpl index b2d8487..7c6efae 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reports-home.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reports-home.tmpl @@ -34,6 +34,7 @@
    • Catalog
    • Circulation
    • Serials
    • +
    • Reserves

    Top Lists

    diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reserves_stats.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reserves_stats.tmpl new file mode 100644 index 0000000..2b78133 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/reserves_stats.tmpl @@ -0,0 +1,549 @@ + +Koha › Reports › Checkout statistics <!-- TMPL_IF NAME="do_it" -->› Results<!-- /TMPL_IF --> + + + + + + + + + + +
    + +
    +
    +
    + + + +

    Reserves statistics

    + +

    Filtered on

    +
      + +
    • Error: +
    • +
    • + + +
    • + +
    + + + + + + + + + + + + + + class="highlight"> + + + + + + + + + + + + + + +
    / TOTAL
    + "> +
    TOTAL
    + + + + +
    +
    + Reserve statistics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TitleRowColumnFilter
    Reserve status + Asked + Processing + Waiting + Satisfied + cancelled +
    reserve date + /lib/calendar/cal.gif" alt="Show Calendar" border="0" id="openreservedateFrom" style="cursor: pointer;" /> + + + /lib/calendar/cal.gif" alt="Show Calendar" id="openreservedateTo" style="cursor: pointer;" border="0" /> + +
    notification date + /lib/calendar/cal.gif" alt="Show Calendar" border="0" id="opennotificationdateFrom" style="cursor: pointer;" /> + + + /lib/calendar/cal.gif" alt="Show Calendar" id="opennotificationdateTo" style="cursor: pointer;" border="0" /> + +
    Reminder date + /lib/calendar/cal.gif" alt="Show Calendar" border="0" id="openreminderdateFrom" style="cursor: pointer;" /> + + + /lib/calendar/cal.gif" alt="Show Calendar" id="openreminderdateTo" style="cursor: pointer;" border="0" /> + +
    Waiting date + /lib/calendar/cal.gif" alt="Show Calendar" border="0" id="openwaitingdateFrom" style="cursor: pointer;" /> + + + /lib/calendar/cal.gif" alt="Show Calendar" id="openwaitingdateTo" style="cursor: pointer;" border="0" /> + +
    cancellation date + /lib/calendar/cal.gif" alt="Show Calendar" border="0" id="opencancellationdateFrom" style="cursor: pointer;" /> + + + /lib/calendar/cal.gif" alt="Show Calendar" id="opencancellationdateTo" style="cursor: pointer;" border="0" /> + +
    Patron Category +
    Item Type +
    Pickup Library +
    Holding Library +
    Home Library +
    Collection +
    Shelving Location +
    Item Call NumberFrom (inclusive) to (exclusive)
    Patron sort1 +
    Patron sort2 +

    + +
    Cell value
    1. +
    + +
    + Output +
    1. +
    2. +
    +
    + +
    + + " /> + +
    +
    + + +
    +
    +
    + +
    +
    + diff --git a/reports/reserves_stats.pl b/reports/reserves_stats.pl new file mode 100755 index 0000000..93f2818 --- /dev/null +++ b/reports/reserves_stats.pl @@ -0,0 +1,382 @@ +#!/usr/bin/perl + + +# 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 CGI; + +use C4::Auth; +use C4::Debug; +use C4::Context; +use C4::Branch; # GetBranches +use C4::Koha; +use C4::Output; +use C4::Reports; +use C4::Members; +use C4::Dates qw/format_date format_date_in_iso/; +use C4::Category; +use List::MoreUtils qw/any/; +use YAML; + +=head1 NAME + +plugin that shows circulation stats + +=head1 DESCRIPTION + +=over 2 + +=cut + +# my $debug = 1; # override for now. +my $input = new CGI; +my $fullreportname = "reports/reserves_stats.tmpl"; +my $do_it = $input->param('do_it'); +my $line = $input->param("Line"); +my $column = $input->param("Column"); +my $podsp = $input->param("DisplayBy"); +my $type = $input->param("PeriodTypeSel"); +my $daysel = $input->param("PeriodDaySel"); +my $monthsel = $input->param("PeriodMonthSel"); +my $calc = $input->param("Cellvalue"); +my $output = $input->param("output"); +my $basename = $input->param("basename"); +my $mime = $input->param("MIME"); +my $hash_params = $input->Vars; +my $filter_hashref; +foreach my $filter (grep {$_ =~/^filter/} keys %$hash_params){ + my $filterstring=$filter; + $filterstring=~s/^filter_//g; + $$filter_hashref{$filterstring}=$$hash_params{$filter} if (defined $$hash_params{$filter} && $$hash_params{$filter} ne ""); +} +my ($template, $borrowernumber, $cookie) = get_template_and_user({ + template_name => $fullreportname, + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {reports => '*'}, + debug => 0, +}); +our $sep = $input->param("sep"); +$sep = "\t" if ($sep eq 'tabulation'); +$template->param(do_it => $do_it, + DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(), +); + +my $itemtypes = GetItemTypes(); +my $categoryloop = GetBorrowercategoryList; + +my $ccodes = GetKohaAuthorisedValues("items.ccode"); +my $locations = GetKohaAuthorisedValues("items.location"); +my $authvalue = GetKohaAuthorisedValues("items.authvalue"); + +my $Bsort1 = GetAuthorisedValues("Bsort1"); +my $Bsort2 = GetAuthorisedValues("Bsort2"); +my ($hassort1,$hassort2); +$hassort1=1 if $Bsort1; +$hassort2=1 if $Bsort2; + + +if ($do_it) { +# Displaying results + my $results = calculate($line, $column, $calc, $filter_hashref); + if ($output eq "screen"){ +# Printing results to screen + $template->param(mainloop => $results); + output_html_with_http_headers $input, $cookie, $template->output; + } else { +# Printing to a csv file + print $input->header(-type => 'application/vnd.sun.xml.calc', + -encoding => 'utf-8', + -attachment=>"$basename.csv", + -filename=>"$basename.csv" ); + my $cols = @$results[0]->{loopcol}; + my $lines = @$results[0]->{looprow}; +# header top-right + print @$results[0]->{line} ."/". @$results[0]->{column} .$sep; +# Other header + foreach my $col ( @$cols ) { + print $col->{coltitle}.$sep; + } + print "Total\n"; +# Table + foreach my $line ( @$lines ) { + my $x = $line->{loopcell}; + print $line->{rowtitle}.$sep; + print map {$_->{value}.$sep} @$x; + print $line->{totalrow}, "\n"; + } +# footer + print "TOTAL"; + $cols = @$results[0]->{loopfooter}; + print map {$sep.$_->{totalcol}} @$cols; + print $sep.@$results[0]->{total}; + } + exit(1); # exit either way after $do_it +} + +my $dbh = C4::Context->dbh; +my @values; +my %labels; +my %select; + +# create itemtype arrayref for " /> " /> " /> " /> " /> Item waiting to be pulled from @@ -400,7 +400,8 @@ $.tablesorter.addParser({
    " /> -
    + " /> +   diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 24c3068..e7ac71c 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -37,8 +37,8 @@
  • " name="mobile" />
  • " name="phonepro" />
  • " name="fax" />
  • -
  • " name="email" />
  • -
  • " name="emailpro" />
  • +
  • " name="emailaddress" />
  • +
  • " name="emailpro" />
  • @@ -114,8 +114,8 @@
  • Mobile Phone:
  • Work phone:
  • Fax:
  • -
  • Email:
  • -
  • Work Email:
  • +
  • Primary Email:
  • +
  • Secondary Email:
  • -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:47 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:47 +0100 Subject: [Koha-patches] [PATCH 53/54] ysearch.pl members improvements (Independant branches behaviour) In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-53-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain If IntependantBranchesPatron is set, then the search is limited to the librarian branch in circ member auto completion --- circ/ysearch.pl | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/circ/ysearch.pl b/circ/ysearch.pl index f8fc52a..5d4442b 100755 --- a/circ/ysearch.pl +++ b/circ/ysearch.pl @@ -46,8 +46,14 @@ my $sql = qq(SELECT surname, firstname, cardnumber, address, city, zipcode, coun FROM borrowers WHERE surname LIKE ? OR firstname LIKE ? - OR cardnumber LIKE ? - ORDER BY surname, firstname); + OR cardnumber LIKE ?); +if (C4::Context->preference("IndependentBranchPatron")){ + if (C4::Context->userenv && (C4::Context->userenv->{flags} % 2) !=1 && C4::Context->userenv->{'branch'}){ + $sql.=" AND borrowers.branchcode =".$dbh->quote(C4::Context->userenv->{'branch'}) unless (C4::Context->userenv->{'branch'} eq "insecure"); + } +} + +$sql .= qq( ORDER BY surname, firstname); my $sth = $dbh->prepare( $sql ); $sth->execute("$query%", "$query%", "$query%"); -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:43 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:43 +0100 Subject: [Koha-patches] [PATCH 49/54] opac-detail subject/author links improvements In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-49-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain When the user clicks on a subject or an author, the list of subjects (authors) is displayed and the user can choose more than 1 subject (author) to search on this is very convenient when, for example, subjects are : France, history, kingdom, war to do a search on "France + war" easily --- .../opac-tmpl/prog/en/modules/opac-detail.tmpl | 174 ++++++++++++++++++-- opac/opac-detail.pl | 73 ++++++-- 2 files changed, 218 insertions(+), 29 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl index 084c484..1c131a3 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -25,7 +25,17 @@ KOHA.Google.GetCoverFromIsbn(); $(".tagbutton").click(KOHA.Tags.add_tag_button); $("a.print").parent().after("
  • "+_("Add to Your Cart")+"<\/a><\/li>"); -}); + + + $("#magnifier a").each(function(){ + var lgth = $(this).attr('href').length; + var authid = $(this).attr('href').substring(47, lgth ); + if (!parseInt(authid)) { + $(this).hide(); + } + }); + +}); YAHOO.util.Event.onContentReady("furtherm", function () { $("#furtherm").css("display","block").css("visibility","hidden"); @@ -44,6 +54,95 @@ YAHOO.util.Event.onContentReady("furtherm", function () { //]]> + @@ -94,7 +193,24 @@ YAHOO.util.Event.onContentReady("furtherm", function () {

    by ">
    -
    Normal View ">MARC View ">ISBD View +
    + + Normal View + + + + + ">MARC View + + + + + + + ">ISBD View + + +
    @@ -109,12 +225,26 @@ YAHOO.util.Event.onContentReady("furtherm", function () { - Authors: - - :"> - | - + + Authors: +
    + Select the item(s) to search : +
      +
    • all
    • + +
    • an:au,wrdl:+au,wrdl:+">
    • + +
    + Cancel | Search +
    + + /cgi-bin/koha/opac-authoritiesdetail.pl?authid=" > + + + an:au,wrdl:+au,wrdl:+')">  |  + +
    @@ -164,12 +294,30 @@ YAHOO.util.Event.onContentReady("furtherm", function () { - Subject(s): + Subject(s): +
    + Select the item(s) to search : +
      +
    • all
    • + + +
    • " value="an:su,wrdl:">
    • + +

    • + +
    + Cancel | Search +
    - " href="/cgi-bin/koha/opac-search.pl?q=:"> - | -
    + + + "> + + an:su,wrdl:', '')"> + | + +
    Subject(s): "> | @@ -393,6 +541,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () { Status Notes Date Due + Serial number + Publication date " title="" alt="" /> @@ -405,6 +555,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () { + + &item=">Fix Itemtype diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index cf5edf7..0b0d629 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -62,6 +62,7 @@ my $biblionumber = $query->param('biblionumber') || $query->param('bib'); $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); $template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); +$template->param(C4::Search::enabled_opac_search_views); my $record = GetMarcBiblio($biblionumber); if ( ! $record ) { @@ -166,8 +167,8 @@ for my $itm (@items) { $itm->{'imageurl'} = getitemtypeimagelocation( 'opac', $itemtypes->{ $itm->{itype} }->{'imageurl'} ); $itm->{'description'} = $itemtypes->{ $itm->{itype} }->{'description'}; } - foreach (qw(ccode enumchron copynumber itemnotes uri)) { - $itemfields{$_} = 1 if ($itm->{$_}); + foreach (qw(ccode enumchron copynumber itemnotes uri serialseq publisheddate)) { + $itemfields{$_} = 1 if ( $itm->{$_} ); } # walk through the item-level authorised values and populate some images @@ -190,7 +191,8 @@ for my $itm (@items) { $itm->{transfertwhen} = format_date($transfertwhen); $itm->{transfertfrom} = $branches->{$transfertfrom}{branchname}; $itm->{transfertto} = $branches->{$transfertto}{branchname}; - } + } + $itm->{publisheddate}=format_date($itm->{publisheddate}); } ## get notes and subjects from MARC record @@ -203,22 +205,57 @@ my $marcseriesarray = GetMarcSeries ($record,$marcflavour); my $marcurlsarray = GetMarcUrls ($record,$marcflavour); my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($biblionumber)); - $template->param( - MARCNOTES => $marcnotesarray, - MARCSUBJCTS => $marcsubjctsarray, - MARCAUTHORS => $marcauthorsarray, - MARCSERIES => $marcseriesarray, - MARCURLS => $marcurlsarray, - norequests => $norequests, - RequestOnOpac => C4::Context->preference("RequestOnOpac"), - itemdata_ccode => $itemfields{ccode}, - itemdata_enumchron => $itemfields{enumchron}, - itemdata_uri => $itemfields{uri}, - itemdata_copynumber => $itemfields{copynumber}, - itemdata_itemnotes => $itemfields{itemnotes}, - authorised_value_images => $biblio_authorised_value_images, - subtitle => $subtitle, +#search rebound parameter +my $searchByauthority = 0; +if ( C4::Context->preference("OPACSearchReboundBy") eq "authority" ) { + $searchByauthority = 1; +} + +#search rebound on author +my @reboundmarcauthorsarray; +foreach my $author (@$marcauthorsarray) { + my ( $a, $b, $authoritylink, @term ); + foreach my $subfield ( @{ $author->{'MARCAUTHOR_SUBFIELDS_LOOP'} } ) { + if ( $subfield->{'code'} eq "a" && @{ $subfield->{'link_loop'} }[0]->{"limit"} eq "an" ) { + $authoritylink = @{ $subfield->{'link_loop'} }[0]->{"link"}; + } + unless ( $subfield->{'code'} eq "3" || $subfield->{'code'} eq "4" ) { push( @term, { value => $subfield->{'value'} } ); } + } + push( + @reboundmarcauthorsarray, + { term => \@term, + authoritylink => $authoritylink, + searchbyauthority => $searchByauthority, + } ); +} + +#search rebound on subject +foreach my $subject (@$marcsubjctsarray) { + foreach my $subfield ( @{ $subject->{'MARCSUBJECT_SUBFIELDS_LOOP'} } ) { + $subfield->{'searchbyauthority'} = $searchByauthority; + } +} + +$template->param( + MARCNOTES => $marcnotesarray, + MARCSUBJCTS => $marcsubjctsarray, + MARCAUTHORS => $marcauthorsarray, + MARCSERIES => $marcseriesarray, + MARCURLS => $marcurlsarray, + norequests => $norequests, + RequestOnOpac => C4::Context->preference("RequestOnOpac"), + itemdata_serialseq => $itemfields{serialseq}, + itemdata_publisheddate => $itemfields{publisheddate}, + itemdata_ccode => $itemfields{ccode}, + itemdata_enumchron => $itemfields{enumchron}, + itemdata_uri => $itemfields{uri}, + itemdata_copynumber => $itemfields{copynumber}, + itemdata_itemnotes => $itemfields{itemnotes}, + authorised_value_images => $biblio_authorised_value_images, + subtitle => $subtitle, + bouncemarcauthorsarray => \@reboundmarcauthorsarray, +); foreach ( keys %{$dat} ) { $template->param( "$_" => defined $dat->{$_} ? $dat->{$_} : '' ); -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:12 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:12 +0100 Subject: [Koha-patches] [PATCH 18/54] MT 2285 : enhancement for patronSearch In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-18-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/includes/patron-search.inc | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc index d1b096e..5e1f0b0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc @@ -50,12 +50,12 @@ YAHOO.util.Event.onContentReady("header_search", function() {
    "/> - [-] - [+] + [-] + [+] order by: @@ -74,7 +74,7 @@ YAHOO.util.Event.onContentReady("header_search", function() {

    -
    +
    -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:10 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:10 +0100 Subject: [Koha-patches] [PATCH 16/54] MT3137 : Adding jquery.tablesorter and jquery.tablesorter.pager support for readingrec.pl In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-16-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/members/readingrec.tmpl | 31 ++++++++++++++++++-- 1 files changed, 28 insertions(+), 3 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tmpl index aa1bf22..a891feb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/readingrec.tmpl @@ -1,6 +1,13 @@ Reading Record for <!-- TMPL_VAR NAME="firstname" --> <!-- TMPL_VAR NAME="surname" --> + + + @@ -19,8 +26,26 @@

    Showing All Items | &limit=50">Show Last 50 Items Only Showing Last 50 Items | &limit=full">Show All Items

    - - + +
     page(s) : + /prog/img/first.png" class="first"/> + /prog/img/prev.png" class="prev"/> + + /prog/img/next.png" class="next"/> + /prog/img/last.png" class="last"/> + , entries/page : + + +
    +
    + @@ -39,7 +64,7 @@ - + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:48 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:48 +0100 Subject: [Koha-patches] [PATCH 54/54] (fixing branch) basket.js = missing function in javascript In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-54-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- koha-tmpl/intranet-tmpl/prog/en/js/basket.js | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js index 373dc17..6d02418 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js @@ -440,4 +440,10 @@ $(document).ready(function(){ if(basketcount){ updateBasket(basketcount); } }); +function batchEdit(){ + var valCookie = readCookie(nameCookie); + var strCookie = nameParam + "=" + valCookie; + var loc = CGIBIN + "tools/batchedit.pl?" + strCookie; + window.opener.location = loc; +} -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:14 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:14 +0100 Subject: [Koha-patches] [PATCH 20/54] adding display_checkout field in extended attributes types In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-20-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain It's a boolean that is used to display or not the left (circ-menu) (updatedatabase in another patch) --- C4/Members/AttributeTypes.pm | 31 +++++++++++++++++-- C4/Members/Attributes.pm | 3 +- admin/patron-attr-types.pl | 9 +++++- .../prog/en/modules/admin/patron-attr-types.tmpl | 5 +++ 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/C4/Members/AttributeTypes.pm b/C4/Members/AttributeTypes.pm index 21d17eb..c539f23 100644 --- a/C4/Members/AttributeTypes.pm +++ b/C4/Members/AttributeTypes.pm @@ -102,6 +102,7 @@ sub new { $self->{'opac_display'} = 0; $self->{'password_allowed'} = 0; $self->{'staff_searchable'} = 0; + $self->{'display_checkout'} = 0; $self->{'authorised_value_category'} = ''; bless $self, $class; @@ -136,6 +137,7 @@ sub fetch { $self->{'opac_display'} = $row->{'opac_display'}; $self->{'password_allowed'} = $row->{'password_allowed'}; $self->{'staff_searchable'} = $row->{'staff_searchable'}; + $self->{'display_checkout'} = $row->{'display_checkout'}; $self->{'authorised_value_category'} = $row->{'authorised_value_category'}; bless $self, $class; @@ -166,14 +168,15 @@ sub store { opac_display = ?, password_allowed = ?, staff_searchable = ?, - authorised_value_category = ? + authorised_value_category = ?, + display_checkout = ? WHERE code = ?"); } else { $sth = $dbh->prepare_cached("INSERT INTO borrower_attribute_types (description, repeatable, unique_id, opac_display, password_allowed, - staff_searchable, authorised_value_category, code) + staff_searchable, authorised_value_category, display_checkout,code) VALUES (?, ?, ?, ?, ?, - ?, ?, ?)"); + ?, ?, ?, ?)"); } $sth->bind_param(1, $self->{'description'}); $sth->bind_param(2, $self->{'repeatable'}); @@ -182,7 +185,8 @@ sub store { $sth->bind_param(5, $self->{'password_allowed'}); $sth->bind_param(6, $self->{'staff_searchable'}); $sth->bind_param(7, $self->{'authorised_value_category'}); - $sth->bind_param(8, $self->{'code'}); + $sth->bind_param(8, $self->{'display_checkout'}); + $sth->bind_param(9, $self->{'code'}); $sth->execute; } @@ -288,6 +292,25 @@ sub staff_searchable { @_ ? $self->{'staff_searchable'} = ((shift) ? 1 : 0) : $self->{'staff_searchable'}; } +=head2 display_checkout + +=over 4 + +my $display_checkout = $attr_type->display_checkout(); +$attr_type->display_checkout($display_checkout); + +=back + +Accessor. The C<$display_checkout> argument +is interpreted as a Perl boolean. + +=cut + +sub display_checkout { + my $self = shift; + @_ ? $self->{'display_checkout'} = ((shift) ? 1 : 0) : $self->{'display_checkout'}; +} + =head2 authorised_value_category my $authorised_value_category = $attr_type->authorised_value_category(); diff --git a/C4/Members/Attributes.pm b/C4/Members/Attributes.pm index 70c34b4..c1f1040 100644 --- a/C4/Members/Attributes.pm +++ b/C4/Members/Attributes.pm @@ -72,7 +72,7 @@ sub GetBorrowerAttributes { my $opac_only = @_ ? shift : 0; my $dbh = C4::Context->dbh(); - my $query = "SELECT code, description, attribute, lib, password + my $query = "SELECT code, description, attribute, lib, password, display_checkout FROM borrower_attributes JOIN borrower_attribute_types USING (code) LEFT JOIN authorised_values ON (category = authorised_value_category AND attribute = authorised_value) @@ -89,6 +89,7 @@ sub GetBorrowerAttributes { value => $row->{'attribute'}, value_description => $row->{'lib'}, password => $row->{'password'}, + display_checkout => $row->{'display_checkout'}, } } return \@results; diff --git a/admin/patron-attr-types.pl b/admin/patron-attr-types.pl index 188b040..17ee71a 100755 --- a/admin/patron-attr-types.pl +++ b/admin/patron-attr-types.pl @@ -105,6 +105,9 @@ sub error_add_attribute_type_form { if ($input->param('staff_searchable')) { $template->param(staff_searchable_checked => 'checked="checked"'); } + if ($input->param('display_checkout')) { + $template->param(display_checkout_checked => 'checked="checked"'); + } $template->param( attribute_type_form => 1, @@ -146,6 +149,8 @@ sub add_update_attribute_type { $attr_type->authorised_value_category($authorised_value_category); my $password_allowed = $input->param('password_allowed'); $attr_type->password_allowed($password_allowed); + my $display_checkout = $input->param('display_checkout'); + $attr_type->display_checkout($display_checkout); if ($op eq 'edit') { $template->param(edited_attribute_type => $attr_type->code()); @@ -221,7 +226,9 @@ sub edit_attribute_type_form { if ($attr_type->staff_searchable()) { $template->param(staff_searchable_checked => 'checked="checked"'); } - + if ($attr_type->display_checkout()) { + $template->param(display_checkout_checked => 'checked="checked"'); + } authorised_value_category_list($template, $attr_type->authorised_value_category()); $template->param( diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl index b445c41..e969273 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/patron-attr-types.tmpl @@ -122,6 +122,11 @@ function CheckAttributeTypeForm(f) { /> Check to make this attribute staff_searchable in the staff patron search. +
  • + /> + Check to show this attribute in member check-out. +
  • +
  • "> - + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:22 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:22 +0100 Subject: [Koha-patches] [PATCH 16/17] MT1059 Follow-up : Fix merge reference selection presentation In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-16-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain A change in global-staff.css messed the merge reference selection presentation Signed-off-by: Henri-Damien LAURENT --- .../prog/en/modules/cataloguing/merge.tmpl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tmpl index 6230faa..e51cec3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/merge.tmpl @@ -195,8 +195,8 @@ $(document).ready(function(){
    Merge reference
      -
    1. " checked="checked" id="mergereference1" name="mergereference" />
    2. -
    3. " id="mergereference2" name="mergereference" />
    4. +
    5. " checked="checked" id="mergereference1" name="mergereference" />
    6. +
    7. " id="mergereference2" name="mergereference" />
    " /> " /> -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:18 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:18 +0100 Subject: [Koha-patches] [PATCH 12/17] MT3915: rebuild_zebra changes because deleted biblios would stick in zebra indexes In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-12-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain Since the update of biblios would be done AFTER the deletion of biblios, and since biblios would be updated just before being deleted (in order to delete the items) update process would recreate the biblio. This patch fixes the order in order to do the deletion AFTER the update. --- misc/migration_tools/rebuild_zebra.pl | 27 ++++++++++++--------------- 1 files changed, 12 insertions(+), 15 deletions(-) diff --git a/misc/migration_tools/rebuild_zebra.pl b/misc/migration_tools/rebuild_zebra.pl index bd11494..2bdcaa4 100755 --- a/misc/migration_tools/rebuild_zebra.pl +++ b/misc/migration_tools/rebuild_zebra.pl @@ -34,7 +34,7 @@ my $as_xml; my $process_zebraqueue; my $do_not_clear_zebraqueue; my $verbose_logging; -my $zebraidx_log_opt = " -v none,fatal,warn "; +my $zebraidx_log_opt = " -v none,fatal "; my $result = GetOptions( 'd:s' => \$directory, 'reset' => \$reset, @@ -65,12 +65,6 @@ if (not $biblios and not $authorities) { die $msg; } -if ($authorities and $as_xml) { - my $msg = "Cannot specify both -a and -x\n"; - $msg .= "Please do '$0 --help' to see usage.\n"; - die $msg; -} - if ( !$as_xml and $nosanitize ) { my $msg = "Cannot specify both -no_xml and -nosanitize\n"; $msg .= "Please do '$0 --help' to see usage.\n"; @@ -237,10 +231,10 @@ sub index_records { } my $record_fmt = ($as_xml) ? 'marcxml' : 'iso2709' ; if ($process_zebraqueue) { - do_indexing($record_type, 'delete', "$directory/del_$record_type", $reset, $noshadow, $record_fmt, $zebraidx_log_opt) - if $num_records_deleted; do_indexing($record_type, 'update', "$directory/upd_$record_type", $reset, $noshadow, $record_fmt, $zebraidx_log_opt) if $num_records_exported; + do_indexing($record_type, 'delete', "$directory/del_$record_type", $reset, $noshadow, $record_fmt, $zebraidx_log_opt) + if $num_records_deleted; } else { do_indexing($record_type, 'update', "$directory/$record_type", $reset, $noshadow, $record_fmt, $zebraidx_log_opt) if ($num_records_exported or $skip_export); @@ -424,7 +418,8 @@ sub get_raw_marc_record { my $marc; if ($record_type eq 'biblio') { if ($noxml) { - my $fetch_sth = $dbh->prepare_cached("SELECT marc FROM biblioitems WHERE biblionumber = ?"); + my $fetch_sth = $dbh->prepare_cached("SELECT marc FROM biblioitems WHERE biblionumber = ? + UNION SELECT marc from deletedbiblioitems where biblionumber=?"); $fetch_sth->execute($record_number); if (my ($blob) = $fetch_sth->fetchrow_array) { $marc = MARC::Record->new_from_usmarc($blob); @@ -435,7 +430,7 @@ sub get_raw_marc_record { # trying to process a record update } } else { - eval { $marc = GetMarcBiblio($record_number); }; + eval { $marc = GetMarcBiblio($record_number,"include_deleted_table"); }; if ($@) { # here we do warn since catching an exception # means that the bib was found but failed @@ -451,7 +446,7 @@ sub get_raw_marc_record { return; } } - return $marc; + return $marc; } sub fix_leader { @@ -479,10 +474,11 @@ sub fix_biblio_ids { my $biblioitemnumber; if (@_) { $biblioitemnumber = shift; - } else { + } else { my $sth = $dbh->prepare( - "SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=?"); - $sth->execute($biblionumber); + "SELECT biblioitemnumber FROM biblioitems WHERE biblionumber=? + UNION SELECT biblioitemnumber FROM deletedbiblioitems WHERE biblionumber=?"); + $sth->execute($biblionumber,$biblionumber); ($biblioitemnumber) = $sth->fetchrow_array; $sth->finish; unless ($biblioitemnumber) { @@ -515,6 +511,7 @@ sub fix_authority_id { } } + sub fix_unimarc_100 { # FIXME - again, if this is necessary, it belongs in C4::AuthoritiesMarc. my $marc = shift; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:20 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:20 +0100 Subject: [Koha-patches] [PATCH 14/17] MT #2991 (Feature) Batch biblio modifications In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-14-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain This patch add a new feature of batch biblio modifications, it permit to select biblios from basket, and modify fields of them setting --- C4/Biblio.pm | 182 ++++++++++++++-- koha-tmpl/intranet-tmpl/prog/en/js/basket.js | 6 + .../prog/en/modules/basket/basket.tmpl | 5 + .../prog/en/modules/tools/batchedit.tmpl | 231 ++++++++++++++++++++ tools/batchedit.pl | 222 +++++++++++++++++++ 5 files changed, 631 insertions(+), 15 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchedit.tmpl create mode 100755 tools/batchedit.pl diff --git a/C4/Biblio.pm b/C4/Biblio.pm index c3a3094..d97d4f9 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -93,6 +93,8 @@ BEGIN { &ModBiblio &ModBiblioframework &ModZebra + + &BatchModField ); # To delete something @@ -368,7 +370,7 @@ sub ModBiblioframework { =head2 DelBiblio - my $error = &DelBiblio($dbh,$biblionumber); + my $error = &DelBiblio($biblionumber); Exported function (core API) for deleting a biblio in koha. Deletes biblio record from Zebra and Koha tables (biblio,biblioitems,items) @@ -1038,9 +1040,14 @@ The MARC record contains both biblio & item data. sub GetMarcBiblio { my $biblionumber = shift; + my $deletedtable = shift; my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("SELECT marcxml FROM biblioitems WHERE biblionumber=? "); - $sth->execute($biblionumber); + my $strsth = qq{SELECT marcxml FROM biblioitems WHERE biblionumber=?}; + $strsth .= qq{UNION SELECT marcxml FROM deletedbiblioitems WHERE biblionumber=?} if $deletedtable; + my $sth = $dbh->prepare($strsth); + my @params=($biblionumber); + push @params, $biblionumber if ($deletedtable); + $sth->execute(@params); my $row = $sth->fetchrow_hashref; my $marcxml = StripNonXmlChars( $row->{'marcxml'} ); MARC::File::XML->default_record_format( C4::Context->preference('marcflavour') ); @@ -1105,6 +1112,8 @@ sub GetCOinSBiblio { my $isbn = ''; my $issn = ''; my $publisher = ''; + my $place = ''; + my $tpages = ''; if ( C4::Context->preference("marcflavour") eq "UNIMARC" ) { my $fmts6; @@ -1151,24 +1160,70 @@ sub GetCOinSBiblio { $genre = ( $mtx eq 'dc' ) ? "&rft.type=$genre" : "&rft.genre=$genre"; # Setting datas - $aulast = $record->subfield( '700', 'a' ); - $aufirst = $record->subfield( '700', 'b' ); - $oauthors = "&rft.au=$aufirst $aulast"; + + # authors + $aulast = $record->subfield( '700', 'a' ) || ''; + $aufirst = $record->subfield( '700', 'b' ) || ''; + + foreach my $field (qw/700 701/) { + my $author = ''; + $author = $record->subfield($field, 'a') || ''; + $author .= ", " . $record->subfield($field, 'b') if ($author and $record->subfield($field, 'b')); + $author .= " - " . join(' - ', $record->subfield($field, '4')) if ($record->subfield($field, '4')); + $author .= " (" . $record->subfield($field, 'f') . ")" if ($record->subfield($field, 'f')); + + $oauthors .= "&rft.au=$author" if ($author); + } + + foreach my $field (qw/710 711/) { + my $author = ''; + $author = $record->subfield($field, 'a') || ''; + $author .= ", " . $record->subfield($field, 'b') if ($author and $record->subfield($field, 'b')); + $author .= " - " . join(' - ', $record->subfield($field, '4')) if ($record->subfield($field, '4')); + $author .= " (" . $record->subfield($field, 'c') . ")" if ($record->subfield($field, 'c')); + + $oauthors .= "&rft.au=$author" if ($author); + } + # others authors if ( $record->field('200') ) { + for my $au ( $record->field('200')->subfield('f') ) { + $oauthors .= "&rft.au=$au"; + } for my $au ( $record->field('200')->subfield('g') ) { $oauthors .= "&rft.au=$au"; } + } + + # place + $place = join(" - ", $record->subfield('210', 'a')); + $place = "&rtf.place=$place" if ($place); + + # tpages + my $i = 0; + foreach my $field ($record->field('215')) { + $tpages .= " | " if ($i > 0); + $tpages .= join(" - ", $field->subfield('a')); + $tpages .= join(" ; ", $field->subfield('d')); + $tpages .= join(" + ", $field->subfield('e')); + $i++; + } + $tpages = "&rtf.tpages=$tpages" if ($tpages); + + # title + my $btitle = join(' ; ', $record->subfield('200', 'a')); + $btitle .= " : " . join(' : ', $record->subfield('200', 'e')) if ($record->subfield('200', 'e')); + $title = ( $mtx eq 'dc' ) ? "&rft.title=" . $record->subfield( '200', 'a' ) - : "&rft.title=" . $record->subfield( '200', 'a' ) . "&rft.btitle=" . $record->subfield( '200', 'a' ); - $pubyear = $record->subfield( '210', 'd' ); - $publisher = $record->subfield( '210', 'c' ); - $isbn = $record->subfield( '010', 'a' ); - $issn = $record->subfield( '011', 'a' ); + : "&rft.title=" . $record->subfield( '200', 'a' ) . "&rft.btitle=" . $btitle; + $pubyear = $record->subfield( '210', 'd' ) || ''; + $publisher = $record->subfield( '210', 'c' ) || ''; + $isbn = $record->subfield( '010', 'a' ) || ''; + $issn = $record->subfield( '011', 'a' ) || ''; } else { # MARC21 need some improve @@ -1197,7 +1252,7 @@ sub GetCOinSBiblio { } my $coins_value = -"ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A$mtx$genre$title&rft.isbn=$isbn&rft.issn=$issn&rft.aulast=$aulast&rft.aufirst=$aufirst$oauthors&rft.pub=$publisher&rft.date=$pubyear"; +"ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3A$mtx$genre$title&rft.isbn=$isbn&rft.issn=$issn&rft.aulast=$aulast&rft.aufirst=$aufirst$oauthors&rft.pub=$publisher&rft.date=$pubyear$place$tpages"; $coins_value =~ s/(\ |&[^a])/\+/g; $coins_value =~ s/\"/\"\;/g; @@ -1662,13 +1717,18 @@ sub TransformKohaToMarcOneField { } $sth->execute( $frameworkcode, $kohafieldname ); if ( ( $tagfield, $tagsubfield ) = $sth->fetchrow ) { + my @values = split(/\s?\|\s?/, $value, -1); + + foreach my $itemvalue (@values){ my $tag = $record->field($tagfield); if ($tag) { - $tag->update( $tagsubfield => $value ); + $tag->add_subfields( $tagsubfield => $itemvalue ); $record->delete_field($tag); $record->insert_fields_ordered($tag); - } else { - $record->add_fields( $tagfield, " ", " ", $tagsubfield => $value ); + } + else { + $record->add_fields( $tagfield, " ", " ", $tagsubfield => $itemvalue ); + } } } return $record; @@ -1727,6 +1787,7 @@ sub TransformHtmlToXml { @$values[$i] =~ s/>/>/g; @$values[$i] =~ s/"/"/g; @$values[$i] =~ s/'/'/g; + @$values[$i] = NormalizeString(@$values[$i]); # if ( !utf8::is_utf8( @$values[$i] ) ) { # utf8::decode( @$values[$i] ); @@ -2284,7 +2345,9 @@ sub PrepareItemrecordDisplay { push @authorised_values, $branchcode; $authorised_lib{$branchcode} = $branchname; } + $defaultvalue = C4::Context->userenv->{branch}; } + $defaultvalue = C4::Context->userenv->{branch}; #----- itemtypes } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { @@ -3423,6 +3486,95 @@ sub get_biblio_authorised_values { return $authorised_values; } +=head3 BatchModField + + Mod subfields in field record + + returns 1,$record if succeed + returns 0,$record if Action was not processed + returns -1 if no record + returns -2 if no action done on record + +=cut + +sub BatchModField { + my ( $record, $field, $subfield, $action, $condval, $nocond, $repval ) = @_; + + return -1 unless $record; + $condval=NormalizeString($condval); + my $condition=qr/$condval/; + + if($action eq "add"){ + for my $rfield ($record->field($field)){ + $rfield->add_subfields( $subfield => $repval ); + } + return 1; + }elsif($action eq "addfield"){ + my $new_field = MARC::Field->new($field,'','', + $subfield => $repval); + $record->insert_fields_ordered($new_field); + return 1; + } else { + my $done=0; + for my $rfield ($record->field($field)) { + if ($subfield && $subfield ne "@"){ + my @subfields = $rfield->subfields(); + my @subfields_to_add; + foreach my $subf (@subfields) { + if ($subf->[0] eq $subfield){ + $subf->[1]=NormalizeString($subf->[1]); + if ( $action eq "mod" ) { + if ( $nocond ne "true" && $subf->[1] =~ s/$condition/$repval/) { + $done=1; + } + if ($nocond eq "true"){ + $subf->[1] = $repval; + $done=1; + } + } elsif ( $action eq "del" ) { + if ( $subf->[1] =~ m/$condition/ || $nocond eq "true" ) { + $done=1; + next; + } + } + } + push @subfields_to_add,@$subf; + } + if ($done){ + if (@subfields_to_add){ + $rfield->replace_with(MARC::Field->new($rfield->tag,$rfield->indicator(1),$rfield->indicator(2), at subfields_to_add)); + } + else { + my $count= $record->delete_field($rfield); + } + } + } + else { + if ($action eq "del"){ + my $count=$record->delete_field($rfield); + $done=1; + } + else { + if ($field < 10){ + my $value=$record->field($field)->data(); + if ($value=~ s/$condition/$repval/){ + $record->field($field)->update($value); + $done=1; + + } + if ( $nocond eq 'true'){ + $record->field($field)->update($repval); + $done=1; + } + } + } + } + } + return ($done,$record); + } + return -2; +} + 1; __END__ diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js index 0ab6711..0991f42 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js @@ -433,4 +433,10 @@ $(document).ready(function(){ if(basketcount){ updateBasket(basketcount); } }); +function batchEdit(){ + var valCookie = readCookie(nameCookie); + var strCookie = nameParam + "=" + valCookie; + var loc = CGIBIN + "tools/batchedit.pl?" + strCookie; + window.opener.location = loc; +} diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl index d3d83ac..6699bde 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/basket/basket.tmpl @@ -86,6 +86,11 @@ function placeHold () { Brief DisplayMore Details +
  • + + Batch Edit + +
  • Send diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchedit.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchedit.tmpl new file mode 100644 index 0000000..5cd7648 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/batchedit.tmpl @@ -0,0 +1,231 @@ + +Koha › Tools › Batch Deletion of Items + + + + + + + + + + + +
    +
    +
    +
    + +
    + +

    Batch records modification

    +
    + Use a file +
      +
    1. +
    +
    +
    + Or enter records one by one +
      +
    1. + + +
    2. +
    +
    + +

    List of records:

    +
  • &order=issuestimestamp&limit=">Date &order=returndate%20DESC&limit=">Return Date
    - &q="""> + ,phr&q="""> @@ -360,7 +360,7 @@ function GetZ3950Terms(){ - +
    @@ -393,6 +393,10 @@ function GetZ3950Terms(){ " name="biblionumber" value="" style="display:none" />
    + + "> + +

    . No title @@ -464,11 +468,16 @@ function GetZ3950Terms(){

    - - itemsitem, available:, None available + "> + items + item + + , + available: + , None available + - available:
      -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:24 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:24 +0100 Subject: [Koha-patches] [PATCH 30/54] MT3531 add a parameter for confirmation or not to basket emptying In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-30-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain The confirmation is not required if the delBasket is called when the user logout --- koha-tmpl/intranet-tmpl/prog/en/js/basket.js | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js index 0ab6711..373dc17 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/basket.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/basket.js @@ -299,10 +299,17 @@ function delRecord (n, s) { } -function delBasket() { +// Empty the basket +// If no_confirmation is set, no dialog message asking the user to confirm will be shown +function delBasket(no_confirmation) { var rep = false; + + if (no_confirmation) { + rep = true; + } else { rep = confirm(MSG_CONFIRM_DEL_BASKET); + } if (rep) { delCookie(nameCookie); document.location = "about:blank"; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:22 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:22 +0100 Subject: [Koha-patches] [PATCH 28/54] MT3138 : Adding permissions on viewlog+change in display In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-28-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain * dealing with CAN_user_circulate_view_borrowers_logs new permission * changing the display of the borrower informations --- .../intranet-tmpl/prog/en/includes/circ-menu.inc | 117 ++++++++++++-------- 1 files changed, 72 insertions(+), 45 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc index 56dd2f2..8bd6d58 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/circ-menu.inc @@ -4,6 +4,19 @@ +
        @@ -12,46 +25,64 @@
      • <!-- TMPL_VAR name= ()" border="0" style="margin: .3em 0 .3em .3em; padding: .2em; border: 1px solid #CCCCCC;" />
      • -
      • - - - No address stored. -
      • - -
      • -
      • - - - - , - - No city stored. -
      • -
      • - - - - - - - - - No phone stored. - - -
      • - - - - - - -
      • No email stored.
      • - - -
      • Category: ()
      • -
      • Home Library:
      • -
    +
  • ()
  • +
  • + + + + : + + + +
  • +
    +

    + + + + No address stored. + + + + + + + + , + + No city stored. + +

    +

    + + + + + + + + + + No phone stored. + + + +

    + + " title=""> + + + " title=""> + + No email stored. + + +

    +
    + View/Hide address +
  • + + - -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:45 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:45 +0100 Subject: [Koha-patches] [PATCH 51/54] UPDATEDATABASE : Big patch, everything in 1 patch In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-51-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain - new permissions - new systempreferences (and some removed => those no more applicable due to hold at granular level) - new fields & mySQL database --- admin/systempreferences.pl | 8 +- .../0009-patron-attr-display-checkout.pl | 7 + .../atomicupdate/0010-holds-on-smart-rules.pl | 11 + .../atomicupdate/0011-debarred-modifications.pl | 8 + .../data/mysql/en/mandatory/sample_notices.sql | 3 +- installer/data/mysql/en/mandatory/sysprefs.sql | 15 +- .../data/mysql/en/mandatory/userpermissions.sql | 2 + .../1-Obligatoire/unimarc_standard_systemprefs.sql | 7 +- .../mysql/fr-FR/1-Obligatoire/userpermissions.sql | 24 +- installer/data/mysql/kohastructure.sql | 46 ++- ...m_preferences_full_optimal_for_install_only.sql | 1 - ...m_preferences_full_optimal_for_install_only.sql | 1 - installer/data/mysql/updatedatabase.pl | 543 +++++++++++++++++++- .../en/modules/admin/preferences/circulation.pref | 4 + .../prog/en/modules/admin/preferences/opac.pref | 6 + 15 files changed, 663 insertions(+), 23 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/0009-patron-attr-display-checkout.pl create mode 100644 installer/data/mysql/atomicupdate/0010-holds-on-smart-rules.pl create mode 100644 installer/data/mysql/atomicupdate/0011-debarred-modifications.pl diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index 9ff009d..0bd4d92 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -85,6 +85,7 @@ $tabsysprefs{OpacMaintenance} = "Admin"; $tabsysprefs{FrameworksLoaded} = "Admin"; $tabsysprefs{delimiter} = "Admin"; $tabsysprefs{IndependantBranches} = "Admin"; +$tabsysprefs{IndependentBranchPatron}= "Admin"; $tabsysprefs{insecure} = "Admin"; $tabsysprefs{KohaAdmin} = "Admin"; $tabsysprefs{KohaAdminEmailAddress} = "Admin"; @@ -156,7 +157,6 @@ $tabsysprefs{SpineLabelAutoPrint} = "Cataloging"; # Circulation $tabsysprefs{maxoutstanding} = "Circulation"; -$tabsysprefs{maxreserves} = "Circulation"; $tabsysprefs{noissuescharge} = "Circulation"; $tabsysprefs{IssuingInProcess} = "Circulation"; $tabsysprefs{patronimages} = "Circulation"; @@ -165,7 +165,6 @@ $tabsysprefs{ReturnBeforeExpiry} = "Circulation"; $tabsysprefs{ceilingDueDate} = "Circulation"; $tabsysprefs{SpecifyDueDate} = "Circulation"; $tabsysprefs{AutomaticItemReturn} = "Circulation"; -$tabsysprefs{ReservesMaxPickUpDelay} = "Circulation"; $tabsysprefs{TransfersMaxDaysWarning} = "Circulation"; $tabsysprefs{useDaysMode} = "Circulation"; $tabsysprefs{ReservesNeedReturns} = "Circulation"; @@ -264,6 +263,8 @@ $tabsysprefs{QueryAutoTruncate} = "Searching"; $tabsysprefs{QueryRemoveStopwords} = "Searching"; $tabsysprefs{AdvancedSearchTypes} = "Searching"; $tabsysprefs{DisplayMultiPlaceHold} = "Searching"; +$tabsysprefs{AdvancedSearchContent} = "Searching"; +$tabsysprefs{OpacAdvancedSearchContent} = "Searching"; # EnhancedContent $tabsysprefs{AmazonEnabled} = "EnhancedContent"; @@ -379,7 +380,8 @@ $tabsysprefs{OPACItemHolds} = "OPAC"; $tabsysprefs{OPACGroupResults} = "OPAC"; $tabsysprefs{XSLTDetailsDisplay} = "OPAC"; $tabsysprefs{XSLTResultsDisplay} = "OPAC"; -$tabsysprefs{OPACShowCheckoutName} = "OPAC"; +$tabsysprefs{OPACShowCheckoutName} = "OPAC"; +$tabsysprefs{OPACSearchReboundBy} = "OPAC"; # Serials $tabsysprefs{RoutingListAddReserves} = "Serials"; diff --git a/installer/data/mysql/atomicupdate/0009-patron-attr-display-checkout.pl b/installer/data/mysql/atomicupdate/0009-patron-attr-display-checkout.pl new file mode 100644 index 0000000..44cfcfa --- /dev/null +++ b/installer/data/mysql/atomicupdate/0009-patron-attr-display-checkout.pl @@ -0,0 +1,7 @@ +#! /usr/bin/perl +use strict; +use warnings; +use C4::Context; +my $dbh=C4::Context->dbh; +$dbh->do("ALTER TABLE borrower_attribute_types ADD COLUMN `display_checkout` TINYINT(1) NOT NULL DEFAULT '0';"); +print "Upgrade done (Added a display_checkout field in borrower_attribute_types table)\n"; diff --git a/installer/data/mysql/atomicupdate/0010-holds-on-smart-rules.pl b/installer/data/mysql/atomicupdate/0010-holds-on-smart-rules.pl new file mode 100644 index 0000000..5ab2ae9 --- /dev/null +++ b/installer/data/mysql/atomicupdate/0010-holds-on-smart-rules.pl @@ -0,0 +1,11 @@ +#! /usr/bin/perl +use strict; +use warnings; +use C4::Context; +my $dbh=C4::Context->dbh; + +$dbh->do("ALTER TABLE `issuingrules` ADD COLUMN `holdspickupdelay` int(11) DEFAULT NULL;"); + +# FIXME Migrate datas + +print "Upgrade done (Moved hold rules to issuing rules)\n"; diff --git a/installer/data/mysql/atomicupdate/0011-debarred-modifications.pl b/installer/data/mysql/atomicupdate/0011-debarred-modifications.pl new file mode 100644 index 0000000..0c16732 --- /dev/null +++ b/installer/data/mysql/atomicupdate/0011-debarred-modifications.pl @@ -0,0 +1,8 @@ +#! /usr/bin/perl +use strict; +use warnings; +use C4::Context; +my $dbh=C4::Context->dbh; +$dbh->do("ALTER TABLE borrowers MODIFY debarred DATE DEFAULT NULL;"); +$dbh->do("ALTER TABLE borrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;"); +print "Upgrade done (Change fields for debar)\n"; diff --git a/installer/data/mysql/en/mandatory/sample_notices.sql b/installer/data/mysql/en/mandatory/sample_notices.sql index 689fa0f..c5ee396 100644 --- a/installer/data/mysql/en/mandatory/sample_notices.sql +++ b/installer/data/mysql/en/mandatory/sample_notices.sql @@ -8,7 +8,8 @@ VALUES ('circulation','ODUE','Overdue Notice','Item Overdue','Dear <> <>,\r\n\r\nThe following item will be due soon:\r\n\r\n<>, <> (<>)'), ('circulation','PREDUEDGST','Advance Notice of Item Due (Digest)','Advance Notice of Item Due','You have <> items due soon'), ('reserves', 'HOLD', 'Hold Available for Pickup', 'Hold Available for Pickup at <>', 'Dear <> <>,\r\n\r\nYou have a hold available for pickup as of <>:\r\n\r\nTitle: <>\r\nAuthor: <>\r\nCopy: <>\r\nLocation: <>\r\n<>\r\n<>\r\n<>\r\n<> <>'), -('reserves', 'HOLD_PRINT', 'Hold Available for Pickup (print notice)', 'Hold Available for Pickup (print notice)', '<>\r\n<>\r\n<>\r\n\r\n\r\nChange Service Requested\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<> <>\r\n<>\r\n<> <>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<> <> <>\r\n\r\nYou have a hold available for pickup as of <>:\r\n\r\nTitle: <>\r\nAuthor: <>\r\nCopy: <>\r\n'), +('reserves', 'HOLD_PRINT', 'Hold Available for Pickup (print notice)', 'Hold Available for Pickup (print notice)', '<>\n<>\n<>\n\n\nChange Service Requested\n\n\n\n\n\n\n\n<> <>\n<>\n<> <>\n\n\n\n\n\n\n\n\n\n\n<> <> +<>\n\nYou have a hold available for pickup as of <>:\r\n\r\nTitle: <>\r\nAuthor: <>\r\nCopy: <>\r\n'), ('circulation','CHECKIN','Item Check-in (Digest)','Check-ins','The following items have been checked in:\r\n----\r\n<>\r\n----\r\nThank you.'), ('circulation','CHECKOUT','Item Check-out (Digest)','Checkouts','The following items have been checked out:\r\n----\r\n<>\r\n----\r\nThank you for visiting <>.'), ('reserves', 'HOLDPLACED', 'Hold Placed on Item', 'Hold Placed on Item','A hold has been placed on the following item : <> (<<biblionumber>>) by the user <<firstname>> <<surname>> (<<cardnumber>>).'), diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql index 1806657..2ecad7e 100644 --- a/installer/data/mysql/en/mandatory/sysprefs.sql +++ b/installer/data/mysql/en/mandatory/sysprefs.sql @@ -35,6 +35,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IndependantBranches',0,'If ON, increases security between libraries',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('insecure',0,'If ON, bypasses all authentication. Be careful!',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetBiblioDefaultView','normal','Choose the default detail view in the staff interface; choose between normal, labeled_marc, marc or isbd','normal|marc|isbd|labeled_marc','Choice'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('intranetbookbag','1','If ON, enables display of Cart feature in the intranet','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('intranetcolorstylesheet','','Define the color stylesheet to use in the Staff Client','50','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetmainUserblock','','Add a block of HTML that will display on the intranet home page','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IntranetNav','','Use HTML tabs to add navigational links to the top-hand navigational bar in the Staff Client','70|10','Textarea'); @@ -59,13 +60,11 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MARCOrgCode','OSt','Define MARC Organization Code - http://www.loc.gov/marc/organizations/orgshome.html','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MaxFine',9999,'Maximum fine a patron can have for a single late return','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxoutstanding',5,'maximum amount withstanding to be able make holds','','Integer'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxreserves',50,'Define maximum number of holds a patron can place','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('memberofinstitution',0,'If ON, patrons can be linked to institutions',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noissuescharge',5,'Define maximum amount withstanding before check outs are blocked','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NotifyBorrowerDeparture',30,'Define number of days before expiry where circulation is warned about patron account expiry',NULL,'Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacAuthorities',1,'If ON, enables the search authorities link on OPAC',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacbookbag',1,'If ON, enables display of Cart feature','','YesNo'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('intranetbookbag','1','If ON, enables display of Cart feature in the intranet','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacBrowser',0,'If ON, enables subject authorities browser on OPAC (needs to set misc/cronjob/sbuild_browser_and_cloud.pl)',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacCloud',0,'If ON, enables subject cloud on OPAC',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaccolorstylesheet','colors.css','Define the color stylesheet to use in the OPAC','','free'); @@ -88,7 +87,6 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('patronimages',0,'Enable patron images for the Staff Client',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('printcirculationslips',1,'If ON, enable printing circulation receipts','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RequestOnOpac',1,'If ON, globally enables patron holds on OPAC',NULL,'YesNo'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesMaxPickUpDelay',7,'Define the Maximum delay to pick up an item on hold','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReturnBeforeExpiry',0,'If ON, checkout will be prevented if returndate is after patron card expiry',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReturnLog',1,'If ON, enables the circulation (returns) log',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('reviewson',1,'If ON, enables patron reviews of bibliographic records in the OPAC','','YesNo'); @@ -277,4 +275,13 @@ INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanatio INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ILS-DI','0','Enables ILS-DI services at OPAC.','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ILS-DI:AuthorizedIPs','','.','Restricts usage of ILS-DI to some IPs','Free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OverduesBlockCirc','noblock','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','noblock|confirmation|block','Choice'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('DisplayMultiPlaceHold','1','Display the ability to place multiple holds or not','','YesNo'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('IndependentBranchPatron',0,'If ON, librarian patron search can only be done on patron of same library as librarian',NULL,'YesNo'); +INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Branch checked for members reservations rights','Choice'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACviewISBD','1','Allow display of ISBD view of bibiographic records in OPAC','','YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACviewMARC','1','Allow display of MARC view of bibiographic records in OPAC','','YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACPickUpLocation','1','Enable Pickup location choice for holds','','YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CI-3M:AuthorizedIPs','','Authorized IPs for CI3M magnetisation','','Free'); +INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ( 'OPACSearchReboundBy', 'term', 'term|authority', 'determines if the rebound search use authority number or term.', 'Choice' ); +INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AllowMultipleHoldsPerBib','','','Enter here the different itemtypes separated by space you want to allow librarians or OPAC users (if OPACItemHolds is enabled) to set holds on multiple items','Free'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacAdvancedSearchContent','','Use HTML tabs to create your own advanced search menu in OPAC','70|10','Textarea'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('AdvancedSearchContent','','Use HTML tabs to create your own advanced search menu','70|10','Textarea'); diff --git a/installer/data/mysql/en/mandatory/userpermissions.sql b/installer/data/mysql/en/mandatory/userpermissions.sql index ec61ea0..1d36383 100644 --- a/installer/data/mysql/en/mandatory/userpermissions.sql +++ b/installer/data/mysql/en/mandatory/userpermissions.sql @@ -1,6 +1,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions'), ( 1, 'override_renewals', 'Override blocked renewals'), + ( 1, 'view_borrowers_logs', 'Can see the borrowers logs'), ( 6, 'place_holds', 'Place holds for patrons'), ( 6, 'modify_holds_priority', 'Modify holds priority'), ( 9, 'edit_catalogue', 'Edit catalog (Modify bibliographic/holdings data)'), @@ -33,6 +34,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (13, 'schedule_tasks', 'Schedule tasks to run'), (13, 'items_batchmod', 'Perform batch modification of items'), (13, 'items_batchdel', 'Perform batch deletion of items'), + (13, 'batchedit', 'Perform batch modification of records'), (13, 'manage_csv_profiles', 'Manage CSV export profiles'), (13, 'moderate_tags', 'Moderate patron tags'), (13, 'rotating_collections', 'Manage rotating collections'), diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql b/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql index 7b2ecd9..0bc1c9d 100644 --- a/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql +++ b/installer/data/mysql/fr-FR/1-Obligatoire/unimarc_standard_systemprefs.sql @@ -61,7 +61,6 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MARCOrgCode', '0', 'Ce param??tre d??finit votre code organisme MARC. Utilis?? en MARC21. Voir - http://www.loc.gov/marc/organizations/orgshome.html', '', ''); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MaxFine','9999','Amende maximum qu''un ahd??rent peut avoir pour un retour en retard','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxoutstanding', '5', 'Ce param??tre d??finit le montant maximal des dettes au dela duquel le lecteur ne peut plus faire de r??servation', '', 'Integer'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxreserves', '2', 'Ce param??tre d??finit le nombre maximal de r??servations qu''un lecteur peut faire.', '', 'Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('memberofinstitution', '0', 'Vos adh??rents sont ils membres d''une institution ?', NULL, 'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noissuescharge', '5', 'Ce param??tre d??finit le montant maximal des dettes au del?? duquel le lecteur ne peut plus emprunter', '', 'Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NotifyBorrowerDeparture', '0', 'Ce param??tre permet d''??tre pr??venu N jours avant l''expiration de la carte d''un adh??rent, ?? la banque de pr??t.', '', 'Integer'); @@ -107,7 +106,6 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('printcirculationslips', '1', 'Active ou non l''impression de tickets de circulation', '', 'free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReceiveBackIssues', '5', 'Ce param??tre d??finit le nombre d''anciens bulletins ?? afficher lorsque l''on bulletine', '', ''); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('RequestOnOpac', '1', 'Active ou non les r??servations ?? l''OPAC', '', 'YesNo'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesMaxPickUpDelay', '10', 'D??lai maximum pour venir chercher un document r??serv?? et mis de cot??', '', 'Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReservesNeedReturns', '0', 'Si une r??servation a ??t?? faite sur un document disponible en rayon, ce param??tre d??finit si un ''retour'' est n??cessaire ou pas pour que le document soit consid??r?? comme mis de cot??.', '', 'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReturnBeforeExpiry', '0', 'Si ce param??tre est positionn??, la date de retour d''un document ne peut pas d??passer la date de fin d''inscription d''un lecteur.', '', 'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ReturnLog', '0', 'Activer ce param??tre pour enregistrer les actions sur la circulation (les retours)', '', 'YesNo'); @@ -279,3 +277,8 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'PrintNoticesMaxLines', '0', '', 'If greater than 0, sets the maximum number of lines an overdue notice will print. If the number of items is greater than this number, the notice will end with a warning asking the borrower to check their online account for a full list of overdue items.', 'Integer' ); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('ILS-DI','0','Active les services ILS-DI ?? l''OPAC.','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('OverduesBlockCirc','noblock','When checking out an item should overdues block checkout, generate a confirmation dialogue, or allow checkout','noblock|confirmation|block','Choice'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('IndependentBranchPatron','0','Si activ??, Le biblioth??caire ne recherche les lecteurs que dans SA biblioth??que',NULL,'YesNo'); +INSERT INTO systempreferences (variable,value, options, explanation, type) VALUES('ReservesControlBranch','PatronLibrary','ItemHomeLibrary|PatronLibrary','Site consid??r?? pour calculer les droits de r??servation','Choice'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACPickUpLocation','1','Permet aux adh??rent de choisir leur biblioth??que de retrait pour une r??servation','','YesNo'); +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CI-3M:AuthorizedIPs','','Liste des IPs autoris??es pour la magn??tisation 3M','','Free'); +INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowMultipleHoldsPerBib','','','Entrez ici la liste des types de documents (s??par??s par des espaces) pour lesquelles vous voulez permettre la r??servation multiple des exemplaires.','Free'); diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql index 7f67d1b..655ccc9 100644 --- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql +++ b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql @@ -1,6 +1,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES ( 1, 'circulate_remaining_permissions', 'Remaining circulation permissions'), ( 1, 'override_renewals', 'Outrepasser les limites de renouvellement'), + ( 1, 'view_borrowers_logs', 'Voir les logs adh??rents'), ( 6, 'place_holds', 'R??server pour des adh??rents'), ( 6, 'modify_holds_priority', 'Modifier la priorit?? des r??servations'), ( 9, 'edit_catalogue', 'Ajouter et modifier les notices du catalogue'), @@ -36,6 +37,9 @@ INSERT INTO permissions (module_bit, code, description) VALUES (13, 'rotating_collections', 'G??rer les collections tournantes'), (13, 'items_batchmod', 'Modifier les exemplaires par lot'), (13, 'items_batchdel', 'Supprimer les exemplaires par lot'), + (13, 'batchmod', 'Modifier les exemplaires par lot'), + (13, 'batchdel', 'Supprimer les exemplaires par lot'), + (13, 'batchedit', 'Modifier les notices par lot'), (15, 'check_expiration', 'Check the expiration of a serial'), (15, 'claim_serials', 'Claim missing serials'), (15, 'create_subscription', 'Create a new subscription'), @@ -45,6 +49,22 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'renew_subscription', 'Renew a subscription'), (15, 'routing', 'Routing'), (16, 'execute_reports', 'Lancer les rapports SQL'), - (16, 'create_reports', 'Cr??er les rapports SQL Reports') - + (16, 'create_reports', 'Cr??er les rapports SQL Reports'), + (13, 'edit_news', 'Write news for the OPAC and staff interfaces'), + (13, 'label_creator', 'Create printable labels and barcodes from catalog and patron data'), + (13, 'edit_calendar', 'Define days when the library is closed'), + (13, 'moderate_comments', 'Moderate patron comments'), + (13, 'edit_notices', 'Define notices'), + (13, 'edit_notice_status_triggers', 'Set notice/status triggers for overdue items'), + (13, 'view_system_logs', 'Browse the system logs'), + (13, 'inventory', 'Perform inventory (stocktaking) of your catalogue'), + (13, 'stage_marc_import', 'Stage MARC records into the reservoir'), + (13, 'manage_staged_marc', 'Managed staged MARC records, including completing and reversing imports'), + (13, 'export_catalog', 'Export bibliographic and holdings data'), + (13, 'import_patrons', 'Import patron data'), + (13, 'delete_anonymize_patrons', 'Delete old borrowers and anonymize circulation history (deletes borrower reading history)'), + (13, 'batch_upload_patron_images', 'Upload patron images in batch or one at a time'), + (13, 'schedule_tasks', 'Schedule tasks to run'), + (13, 'items_batchmod', 'Modification Par lot des exemplaires'), + (13, 'items_batchdel', 'Suppression par lot des exemplaires') ; diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 5e0c6b6..6666409 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -56,6 +56,7 @@ CREATE TABLE `auth_subfield_structure` ( `linkid` tinyint(1) NOT NULL default 0, `kohafield` varchar(45) NULL default '', `frameworkcode` varchar(10) NOT NULL default '', + CONSTRAINT `auth_subfield_structure_ibfk_1` FOREIGN KEY (`authtypecode`, `tagfield`) REFERENCES `auth_tag_structure` (`authtypecode`, `tagfield`) ON DELETE CASCADE, PRIMARY KEY (`authtypecode`,`tagfield`,`tagsubfield`), KEY `tab` (`authtypecode`,`tab`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -229,8 +230,10 @@ CREATE TABLE `borrowers` ( `dateenrolled` date default NULL, `dateexpiry` date default NULL, `gonenoaddress` tinyint(1) default NULL, + `gonenoaddresscomment` VARCHAR(255) default NULL, `lost` tinyint(1) default NULL, - `debarred` tinyint(1) default NULL, + `debarred` date default NULL, + `debarredcomment` VARCHAR(255) DEFAULT NULL, `contactname` mediumtext, `contactfirstname` text, `contacttitle` text, @@ -281,6 +284,7 @@ CREATE TABLE `borrower_attribute_types` ( `password_allowed` tinyint(1) NOT NULL default 0, `staff_searchable` tinyint(1) NOT NULL default 0, `authorised_value_category` varchar(10) default NULL, + `display_checkout` TINYINT(1) NOT NULL DEFAULT '0', PRIMARY KEY (`code`), KEY `auth_val_cat_idx` (`authorised_value_category`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; @@ -676,8 +680,11 @@ CREATE TABLE `deletedborrowers` ( `dateenrolled` date default NULL, `dateexpiry` date default NULL, `gonenoaddress` tinyint(1) default NULL, + `gonenoaddresscomment` VARCHAR(255) default NULL, `lost` tinyint(1) default NULL, - `debarred` tinyint(1) default NULL, + `lostcomment` VARCHAR(255) default NULL, + `debarred` date default NULL, + `debarredcomment` VARCHAR(255) default NULL, `contactname` mediumtext, `contactfirstname` text, `contacttitle` text, @@ -756,7 +763,6 @@ CREATE TABLE `deleteditems` ( `marc` longblob, PRIMARY KEY (`itemnumber`), KEY `delitembarcodeidx` (`barcode`), - KEY `delitemstocknumberidx` (`stocknumber`), KEY `delitembinoidx` (`biblioitemnumber`), KEY `delitembibnoidx` (`biblionumber`), KEY `delhomebranch` (`homebranch`), @@ -965,8 +971,12 @@ CREATE TABLE `issuingrules` ( `chargename` varchar(100) default NULL, `maxissueqty` int(4) default NULL, `issuelength` int(4) default NULL, - `renewalsallowed` smallint(6) NOT NULL default "0", - `reservesallowed` smallint(6) NOT NULL default "0", + `allowonshelfholds` tinyint(1) default NULL, + `holdrestricted` tinyint(1) default NULL, + `holdspickupdelay` int(11) default NULL, + `renewalsallowed` smallint(6) default NULL, + `reservesallowed` smallint(6) default NULL, + `renewalperiod` smallint(6) NULL DEFAULT NULL, `branchcode` varchar(10) NOT NULL default '', PRIMARY KEY (`branchcode`,`categorycode`,`itemtype`), KEY `categorycode` (`categorycode`), @@ -1018,9 +1028,9 @@ CREATE TABLE `items` ( `enumchron` varchar(80) default NULL, `copynumber` varchar(32) default NULL, `stocknumber` varchar(32) default NULL, + `statisticvalue` varchar(80) DEFAULT NULL, PRIMARY KEY (`itemnumber`), UNIQUE KEY `itembarcodeidx` (`barcode`), - UNIQUE KEY `itemstocknumberidx` (`stocknumber`), KEY `itembinoidx` (`biblioitemnumber`), KEY `itembibnoidx` (`biblionumber`), KEY `homebranch` (`homebranch`), @@ -1352,6 +1362,7 @@ CREATE TABLE `old_issues` ( -- DROP TABLE IF EXISTS `old_reserves`; CREATE TABLE `old_reserves` ( + `reservenumber` int(11) NOT NULL AUTO_INCREMENT, `borrowernumber` int(11) default NULL, `reservedate` date default NULL, `biblionumber` int(11) default NULL, @@ -1368,6 +1379,7 @@ CREATE TABLE `old_reserves` ( `waitingdate` date default NULL, `expirationdate` DATE DEFAULT NULL, `lowestPriority` tinyint(1) NOT NULL, + PRIMARY KEY (`reservenumber`), KEY `old_reserves_borrowernumber` (`borrowernumber`), KEY `old_reserves_biblionumber` (`biblionumber`), KEY `old_reserves_itemnumber` (`itemnumber`), @@ -1527,6 +1539,7 @@ CREATE TABLE `reserveconstraints` ( DROP TABLE IF EXISTS `reserves`; CREATE TABLE `reserves` ( + `reservenumber` int(11) NOT NULL AUTO_INCREMENT, `borrowernumber` int(11) NOT NULL default 0, `reservedate` date default NULL, `biblionumber` int(11) NOT NULL default 0, @@ -1543,6 +1556,7 @@ CREATE TABLE `reserves` ( `waitingdate` date default NULL, `expirationdate` DATE DEFAULT NULL, `lowestPriority` tinyint(1) NOT NULL, + PRIMARY KEY (`reservenumber`), KEY `borrowernumber` (`borrowernumber`), KEY `biblionumber` (`biblionumber`), KEY `itemnumber` (`itemnumber`), @@ -2289,6 +2303,8 @@ CREATE TABLE `accountlines` ( `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `notify_id` int(11) NOT NULL default 0, `notify_level` int(2) NOT NULL default 0, + `note` text NULL default NULL, + `manager_id` int( 11 ) NULL, KEY `acctsborridx` (`borrowernumber`), KEY `timeidx` (`timestamp`), KEY `itemnumber` (`itemnumber`), @@ -2352,6 +2368,9 @@ CREATE TABLE `aqbasketgroups` ( `name` varchar(50) default NULL, `closed` tinyint(1) default NULL, `booksellerid` int(11) NOT NULL, + `deliveryplace` varchar(10) default NULL, + `deliverycomment` varchar(255) default NULL, + `billingplace` varchar(10) default NULL, PRIMARY KEY (`id`), KEY `booksellerid` (`booksellerid`), CONSTRAINT `aqbasketgroups_ibfk_1` FOREIGN KEY (`booksellerid`) REFERENCES `aqbooksellers` (`id`) ON UPDATE CASCADE ON DELETE CASCADE @@ -2594,6 +2613,21 @@ CREATE TABLE `fieldmapping` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +-- +-- Table structure for table `pending_offline_operations` +-- + +DROP TABLE IF EXISTS `pending_offline_operations`; +CREATE TABLE `pending_offline_operations` ( + `operationid` INT(11) NOT NULL AUTO_INCREMENT, + `userid` VARCHAR(30) NOT NULL, + `branchcode` VARCHAR(10) NOT NULL, + `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + `action` VARCHAR(10) NOT NULL, + `barcode` VARCHAR(20) NOT NULL, + `cardnumber` VARCHAR(16) NULL, + PRIMARY KEY (`operationid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; diff --git a/installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql b/installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql index 1adbe04..62711a2 100644 --- a/installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql +++ b/installer/data/mysql/ru-RU/mandatory/system_preferences_full_optimal_for_install_only.sql @@ -92,7 +92,6 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MARCOrgCode','OSt','Define MARC Organization Code - http://www.loc.gov/marc/organizations/orgshome.html','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MaxFine',9999,'Maximum fine a patron can have for a single late return','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxoutstanding',5,'maximum amount withstanding to be able make holds','','Integer'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxreserves',50,'Define maximum number of holds a patron can place','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('memberofinstitution',0,'If ON, patrons can be linked to institutions',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noissuescharge',5,'Define maximum amount withstanding before check outs are blocked','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NotifyBorrowerDeparture',30,'Define number of days before expiry where circulation is warned about patron account expiry',NULL,'Integer'); diff --git a/installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql b/installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql index 51474f6..58b1091 100644 --- a/installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql +++ b/installer/data/mysql/uk-UA/mandatory/system_preferences_full_optimal_for_install_only.sql @@ -92,7 +92,6 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MARCOrgCode','OSt','Define MARC Organization Code - http://www.loc.gov/marc/organizations/orgshome.html','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('MaxFine',9999,'Maximum fine a patron can have for a single late return','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxoutstanding',5,'maximum amount withstanding to be able make holds','','Integer'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('maxreserves',50,'Define maximum number of holds a patron can place','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('memberofinstitution',0,'If ON, patrons can be linked to institutions',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('noissuescharge',5,'Define maximum amount withstanding before check outs are blocked','','Integer'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('NotifyBorrowerDeparture',30,'Define number of days before expiry where circulation is warned about patron account expiry',NULL,'Integer'); diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index ac272ce..f1df9d0 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -53,6 +53,7 @@ $|=1; # flushes output # Deal with virtualshelves +my $compare_version=C4::Context->preference("Version"); my $DBversion = "3.00.00.001"; if (C4::Context->preference("Version") < TransformToNum($DBversion)) { # update virtualshelves table to @@ -1393,10 +1394,10 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { $DBversion = "3.00.00.074"; if (C4::Context->preference("Version") < TransformToNum($DBversion)) { - $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl ) + $dbh->do( q#update itemtypes set imageurl = concat( 'npl/', imageurl ) where imageurl not like 'http%' and imageurl is not NULL - and imageurl != '') ); + and imageurl != ''# ); print "Upgrade to $DBversion done (updating imagetype.imageurls to reflect new icon locations.)\n"; SetVersion ($DBversion); } @@ -2935,6 +2936,10 @@ BUDGETAUTOINCREMENT ALTER TABLE aqbudget RENAME `aqbudgets` BUDGETNAME + $dbh->do(<<BUDGETNAME); +ALTER TABLE aqbudget RENAME `aqbudgets` +BUDGETNAME + $dbh->do(<<BUDGETS); ALTER TABLE `aqbudgets` CHANGE COLUMN aqbudgetid `budget_id` int(11) NOT NULL AUTO_INCREMENT, @@ -3269,7 +3274,7 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { $DBversion = "3.01.00.097"; if (C4::Context->preference("Version") < TransformToNum($DBversion)) { $dbh->do(qq{ - ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10) NOT NULL AFTER deliverycomment; + ALTER TABLE aqbasketgroups ADD billingplace VARCHAR(10) default NULL AFTER deliverycomment; }); print "Upgrade to $DBversion done (Adding billingplace to aqbasketgroups)\n"; @@ -3915,6 +3920,538 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) { SetVersion ($DBversion); } +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("UPDATE systempreferences SET options = 'Calendar|Days|Datedue' WHERE variable = 'useDaysMode'"); + + print "Upgrade to $DBversion done (upgrade useDaysMode syspref)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(qq{ + CREATE TABLE IF NOT EXISTS pending_offline_operations ( + operationid INT(11) NOT NULL AUTO_INCREMENT, + userid VARCHAR(30) NOT NULL, + branchcode VARCHAR(10) NOT NULL, + timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + action VARCHAR(10) NOT NULL, + barcode VARCHAR(20) NOT NULL, + cardnumber VARCHAR(16) NULL, + PRIMARY KEY (operationid) + ); + }); + + print "Upgrade to $DBversion done (adding one table : pending_offline_operations)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + my $borrowers=$dbh->selectcol_arrayref("SELECT borrowernumber from borrowers where debarred <>0;",{Columns=>[1]}); + $dbh->do("ALTER TABLE borrowers MODIFY debarred DATE DEFAULT NULL;"); + $dbh->do( "UPDATE borrowers set debarred='9999-12-31' where borrowernumber IN (" . join( ",", @$borrowers ) . ");" ) if ($borrowers); + $dbh->do("ALTER TABLE borrowers ADD COLUMN debarredcomment VARCHAR(255) DEFAULT NULL AFTER debarred;"); + print "Upgrade done (Change borrowers.debarred into Date )\n"; + + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("UPDATE `permissions` SET `code` = 'items_batchdel' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchdel' LIMIT 1 ;"); + $dbh->do("UPDATE `permissions` SET `code` = 'items_batchmod' WHERE `permissions`.`module_bit` =13 AND `permissions`.`code` = 'batchmod' LIMIT 1 ;"); + print "Upgrade done (Change permissions names for item batch modification / deletion)\n"; + + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE language_descriptions ADD INDEX LANG (subtag, type, lang); + }); + print "Upgrade to $DBversion done (Adding index to language_descriptions table)\n"; + SetVersion ($DBversion); +} + + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO systempreferences SET variable='IndependentBranchPatron',value=0"); + + print "Upgrade to $DBversion done (IndependentBranchPatron syspref added)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do('ALTER TABLE `categories` ADD COLUMN `enrolmentperioddate` DATE NULL DEFAULT NULL AFTER `enrolmentperiod`'); + print "Upgrade done (Add enrolment period date support)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(qq{ + ALTER TABLE items ADD statisticvalue VARCHAR(80); + }); + + print "Upgrade to $DBversion done (statisticvalue added to item table)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE issuingrules ADD COLUMN `allowonshelfholds` TINYINT(1) NOT NULL DEFAULT '0';"); + + my $sth = $dbh->prepare( "SELECT value from systempreferences where variable = 'AllowOnShelfHolds';" ); + $sth->execute(); + my $data = $sth->fetchrow_hashref(); + + my $updsth = $dbh->prepare("UPDATE issuingrules SET allowonshelfholds = ?"); + $updsth->execute($data->{value}); + + $dbh->do("DELETE FROM systempreferences where variable = 'AllowOnShelfHolds';"); + print "Upgrade done (Migrating AllowOnShelfHold to smart-rules)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE `borrowers` ADD `gonenoaddresscomment` VARCHAR(255) DEFAULT NULL AFTER `gonenoaddress`"); + $dbh->do("ALTER TABLE `borrowers` ADD `lostcomment` VARCHAR(255) DEFAULT NULL AFTER `lost`"); + + print "Upgrade to $DBversion done (add comments in borrowers)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE issuingrules MODIFY renewalsallowed SMALLINT(6) NULL DEFAULT NULL;"); + $dbh->do("ALTER TABLE issuingrules MODIFY reservesallowed SMALLINT(6) NULL DEFAULT NULL;"); + $dbh->do("ALTER TABLE issuingrules MODIFY allowonshelfholds TINYINT(1) NULL DEFAULT NULL;"); + + print "Upgrade done (Allow NULL in issuingrules)\n"; + + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do('ALTER TABLE `categories` ADD COLUMN `enrolmentperioddate` DATE NULL DEFAULT NULL AFTER `enrolmentperiod`'); + print "Upgrade done (Add enrolment period date support)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE `issuingrules` ADD `holdrestricted` TINYINT( 1 ) NULL default NULL "); + $dbh->do('INSERT INTO issuingrules (branchcode, categorycode, itemtype,holdrestricted,maxissueqty) + SELECT "*","*","*",holdallowed,maxissueqty + FROM default_circ_rules defaults + ON DUPLICATE KEY update maxissueqty=defaults.maxissueqty, holdrestricted=defaults.holdallowed'); + $dbh->do('INSERT INTO issuingrules (branchcode, itemtype, categorycode,maxissueqty) + SELECT "*","*",categorycode,maxissueqty from default_borrower_circ_rules defaults + ON DUPLICATE KEY update maxissueqty=defaults.maxissueqty'); + $dbh->do('INSERT INTO issuingrules (branchcode, categorycode, itemtype,holdrestricted,maxissueqty) + SELECT branchcode,"*","*",holdallowed,maxissueqty from default_branch_circ_rules defaults + ON DUPLICATE KEY update maxissueqty=defaults.maxissueqty, holdrestricted=defaults.holdallowed'); + $dbh->do('INSERT INTO issuingrules (branchcode, categorycode, itemtype,holdrestricted) + SELECT "*","*",itemtype,holdallowed from default_branch_item_rules defaults + ON DUPLICATE KEY update holdrestricted=defaults.holdallowed'); + for my $tablename qw(default_circ_rules default_branch_circ_rules default_branch_item_rules default_borrower_circ_rules){ + $dbh->do("DROP TABLE $tablename"); + } + print "Upgrade done (Updating Circulation rules\n Inserting defaults values into issuingrules \n removing defaults table)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do('ALTER TABLE issuingrules ADD COLUMN `renewalperiod` SMALLINT(6) NULL default NULL AFTER `renewalsallowed`;'); + print "Upgrade done (Add renewalperiod)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(qq{INSERT INTO `saved_sql` ( + `id`, `borrowernumber`, `date_created`, `last_modified`, `savedsql`, `last_run`, `report_name`, `type`, `notes`) + VALUES + (NULL , '0', NULL , NULL , 'select branchcode, count(*) from borrowers where dateexpiry >= <<start_date>> and dateexpiry <= <<end_date>> group by branchcode', NULL, 'ESGBU_Patrons', '1', ''), + (NULL , '0', NULL , NULL , 'select branchcode, count(borrowers.borrowernumber) from borrowers, statistics where borrowers.borrowernumber = statistics.borrowernumber AND statistics.datetime >= <<start_date>> AND statistics.datetime <= <<end_date>> AND (type = "issue" or type = "renew") group by branchcode', NULL, 'ESGBU_Active_Patrons', '1', ''), + (NULL , '0', NULL , NULL , 'select branch, count(*) from statistics where (type="issue" or type="renew") and datetime >= <<start_date>> and datetime <= <<end_date>> group by branch', NULL, 'ESGBU_Number_of_issues', '1', ''), + (NULL , '0', NULL , NULL , 'SELECT substring(marcxml,LOCATE("<leader>",marcxml)+8+6,1) rtype , count(*) from biblioitems GROUP BY rtype', NULL, 'ESGBU_Item_Types', '1', '') + ;}); + print "Upgrade done (Add ESGBU saved reports)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(qq{INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACviewISBD','1','Allow display of ISBD view of bibiographic records in OPAC','','YesNo');}); + $dbh->do(qq{INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACviewMARC','1','Allow display of MARC view of bibiographic records in OPAC','','YesNo');}); + + print "Upgrade to $DBversion done (Added OPAC ISBD and MARC view sysprefs)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(qq{INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACPickupLocation','1','Allow choice for Pickup Library reserve at OPAC','','YesNo');}); + + print "Upgrade to $DBversion done (Added OPACPickupLocation sysprefs)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES (1, 'view_borrowers_logs', 'Enables log access for the borrower on staff viw')"); + print "Upgrade to $DBversion done (Adding permissions for staff member access to borrowers logs. )\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ +INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('CI-3M:AuthorizedIPs','','Liste des IPs autoris??es pour la magn??tisation 3M','','Free'); + }); + print "Upgrade to $DBversion done (Adding permissions for staff member access to borrowers logs. )\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("UPDATE authorised_values SET authorised_value=UPPER(authorised_value) WHERE category='COUNTRY'"); + print "Upgrade to $DBversion done (Converts COUNTRY authorised values to uppercase)\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + INSERT INTO systempreferences (variable,value,explanation,options,type) + VALUES ('OPACSearchReboundBy', 'term', 'determines if the search rebound use authority number or term.','term|authority','Choice'); +}); + print "Upgrade to $DBversion done. ??? Add a new system preference OPACSearchReboundBy\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE reserves ADD `reservenumber` int(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`reservenumber`); +}); + $dbh->do(q{ + ALTER TABLE old_reserves ADD `reservenumber` int(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`reservenumber`); +}); + + print "Upgrade to $DBversion done. ??? Add reservenumber in reserves table\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE borrower_attribute_types ADD `display_checkout` TINYINT(1) NOT NULL DEFAULT '0'; +}); + print "Upgrade to $DBversion done. ??? Add display_checkout in borrower_attribute_types table\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + INSERT INTO permissions (module_bit, code, description) VALUES(13, 'batchedit', 'Perform batch modification of records'); +}); + print "Upgrade to $DBversion done. ??? Add permission to batch modifications on records\n"; + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE items + DROP KEY `itemstocknumberidx`, + DROP KEY `itemsstocknumberidx`; + }); + $dbh->do(q{ + ALTER TABLE deleteditems + DROP KEY `delitemstocknumberidx`; + }); + print "Upgrade to $DBversion done. ??? Add permission to batch modifications on records\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE deletedborrowers ADD COLUMN gonenoaddresscomment VARCHAR(255) AFTER gonenoaddress, ADD COLUMN lostcomment VARCHAR(255) AFTER lost,ADD COLUMN debarredcomment VARCHAR(255) AFTER debarred; + }); + $dbh->do(q{ + ALTER TABLE deletedborrowers CHANGE COLUMN debarred debarred DATE; + }); + print "Upgrade to $DBversion done (Synching deletedborrowers with borrowers)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do("ALTER TABLE borrowers ADD KEY `guarantorid` (guarantorid);"); + print "Upgrade to $DBversion done (Add index on guarantorid)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES('AllowMultipleHoldsPerBib','','','Enter here the different itemtypes separated by space you want to allow librarians or OPAC users (if OPACItemHolds is enabled) to set holds on multiple items','Free'); + }); + print "Upgrade to $DBversion done (Add index on guarantorid)\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + UPDATE `letter` set content='Dear <<borrowers.firstname>> <<borrowers.surname>>,\r\n\r\nYou have a hold available for pickup as of <<reserves.waitingdate>>:\r\n\r\nTitle: <<biblio.title>>\r\nAuthor: <<biblio.author>>\r\nCopy: <<items.barcode>>\r\nLocation: <<branches.branchname>>\r\n<<branches.branchaddress1>>\r\n<<branches.branchaddress2>>\r\n<<branches.branchaddress3>>' where module='reserves' and code='HOLD'}); + print "Upgrade to $DBversion done\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE issuingrules ADD COLUMN `holdspickupdelay` INT(11) NULL default NULL ; + }); + print "Upgrade to $DBversion done\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + $dbh->do(q{ + ALTER TABLE `search_history` ADD `limit_desc` VARCHAR( 255 ) NULL DEFAULT NULL AFTER `query_cgi` , + ADD `limit_cgi` VARCHAR( 255 ) NULL DEFAULT NULL AFTER `limit_desc` + }); + print "Upgrade to $DBversion done\n"; + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES + ('OpacAdvancedSearchContent','','Use HTML tabs to create your own advanced search menu in OPAC','70|10','Textarea'), + ('AdvancedSearchContent','','Use HTML tabs to create your own advanced search menu','70|10','Textarea')"); + print "Upgrade to $DBversion done (adding OpacAdvancedSearchContent and AdvancedSearchContent systempref, in 'Searching' tab)\n"; + SetVersion($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do(" + INSERT INTO `permissions` (`module_bit`, `code`, `description`) VALUES + (15, 'check_expiration', 'Check the expiration of a serial'), + (15, 'claim_serials', 'Claim missing serials'), + (15, 'create_subscription', 'Create a new subscription'), + (15, 'delete_subscription', 'Delete an existing subscription'), + (15, 'edit_subscription', 'Edit an existing subscription'), + (15, 'receive_serials', 'Serials receiving'), + (15, 'renew_subscription', 'Renew a subscription'), + (15, 'routing', 'Routing'); + "); + print "Upgrade to $DBversion done (adding more permissions)\n"; + SetVersion($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.01.003")) + { + my $search=$dbh->selectall_arrayref("select * from systempreferences where variable='dontmerge'"); + if (@$search){ + my $search=$dbh->selectall_arrayref("select * from systempreferences where variable='MergeAuthoritiesOnUpdate'"); + if (@$search){ + $dbh->do("DELETE FROM systempreferences set variable='dontmerge'"); + } + else { + $dbh->do("UPDATE systempreferences set variable='MergeAuthoritiesOnUpdate' ,value=1-value*1 WHERE variable='dontmerge'"); + } + } + else { + $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('MergeAuthoritiesOnUpdate', '1', 'if ON, Updating authorities will automatically updates biblios',NULL,'YesNo')"); + } + print "Upgrade to $DBversion done (add new syspref MergeAuthoritiesOnUpdate)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { +if($compare_version < TransformToNum("3.00.01.004")) +{ + if (lc(C4::Context->preference('marcflavour')) eq "unimarc"){ + $dbh->do("INSERT IGNORE INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `authorised_value`, `frameworkcode`) VALUES ('099', 'Informations locales', '', 0, 0, '', '');"); + $dbh->do("INSERT IGNORE INTO `marc_tag_structure` (`frameworkcode`,`tagfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `authorised_value`) SELECT DISTINCT(frameworkcode),'099', 'Informations locales', '', 0, 0, '' from biblio_framework"); + $dbh->do(<<ENDOFSQL); +INSERT IGNORE INTO marc_subfield_structure (`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, `seealso`, `link`, `defaultvalue`,frameworkcode ) +VALUES ('099', 'c', 'date creation notice (koha)', '', 0, 0, 'biblio.datecreated', -1, '', '', '', NULL, 0, '', '', NULL, ''), +('099', 'd', 'date modification notice (koha)', '', 0, 0, 'biblio.timestamp', -1, '', '', '', NULL, 0, '', '', NULL, ''), +('995', '2', 'Perdu', '', 0, 0, 'items.itemlost', 10, '', '', '', NULL, 1, '', NULL, NULL, ''); +ENDOFSQL + $dbh->do(<<ENDOFSQL1); +INSERT IGNORE INTO marc_subfield_structure (`frameworkcode`,`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, seealso, link, defaultvalue ) +SELECT DISTINCT(frameworkcode), '099', 'c', 'date creation notice (koha)', '', 0, 0, 'biblio.datecreated', -1, '', '', '', NULL, 0, '', '', NULL from biblio_framework; +ENDOFSQL1 + $dbh->do(<<ENDOFSQL2); +INSERT IGNORE INTO marc_subfield_structure (`frameworkcode`,`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, seealso, link, defaultvalue ) +SELECT DISTINCT(frameworkcode), '099', 'd', 'date modification notice (koha)', '', 0, 0, 'biblio.timestamp', -1, '', '', '', NULL, 0, '', '', NULL from biblio_framework; +ENDOFSQL2 + $dbh->do(<<ENDOFSQL3); +INSERT IGNORE INTO marc_subfield_structure (`frameworkcode`,`tagfield`, `tagsubfield`, `liblibrarian`, `libopac`, `repeatable`, `mandatory`, `kohafield`, `tab`, `authorised_value`, `authtypecode`, `value_builder`, `isurl`, `hidden`, seealso, link, defaultvalue ) +SELECT DISTINCT(frameworkcode), '995', '2', 'Perdu', '', 0, 0, 'items.itemlost', 10, '', '', '', NULL, 1, '', NULL, NULL from biblio_framework; +ENDOFSQL3 + print "Upgrade to $DBversion done (updates MARC framework structure)\n"; + } +} + SetVersion ($DBversion); +} + + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.04.019")) + { + my $authdisplayhierarchy = C4::Context->preference('AuthDisplayHierarchy'); + if ($authdisplayhierarchy < 1){ + $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type)VALUES('AuthDisplayHierarchy','0','To display authorities in a hierarchy way. Put ON only if you have a thesaurus. Default is OFF','','YesNo')"); + }; + print "Upgrade to $DBversion done (new AuthDisplayHierarchy, )\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { +if($compare_version < TransformToNum("3.00.04.020")) +{ + if (lc(C4::Context->preference('marcflavour')) eq "unimarc"){ + $dbh->do(<<OPACISBD); +INSERT IGNORE INTO systempreferences (variable,explanation,options,type,value) +VALUES('OPACISBD','OPAC ISBD View','90|20', 'Textarea', +'#200|<h2>Titre : |{200a}{. 200c}{ : 200e}{200d}{. 200h}{. 200i}|</h2>\r\n#500|<label class="ipt">Autres titres : </label>|{500a}{. 500i}{. 500h}{. 500m}{. 500q}{. 500k}<br/>|\r\n#517|<label class="ipt"> </label>|{517a}{ : 517e}{. 517h}{, 517i}<br/>|\r\n#541|<label class="ipt"> </label>|{541a}{ : 541e}<br/>|\r\n#200||<label class="ipt">Auteurs : </label><br/>|\r\n#700||<a href="opac-search.pl?op=do_search&marclist=7009&operator==&type=intranet&value={7009}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{700c}{ 700b}{ 700a}{ 700d}{ (700f)}{. 7004}<br/>|\r\n#701||<a href="opac-search.pl?op=do_search&marclist=7009&operator==&type=intranet&value={7019}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{701c}{ 701b}{ 701a}{ 701d}{ (701f)}{. 7014}<br/>|\r\n#702||<a href="opac-search.pl?op=do_search&marclist=7009&operator==&type=intranet&value={7029}"> <img borde r="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{702c}{ 702b}{ 702a}{ 702d}{ (702f)}{. 7024}<br/>|\r\n#710||<a href="opac-search.pl?op=do_search&marclist=7109&operator==&type=intranet&value={7109}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{710a}{ (710c)}{. 710b}{ : 710d}{ ; 710f}{ ; 710e}<br/>|\r\n#711||<a href="opac-search.pl?op=do_search&marclist=7109&operator==&type=intranet&value={7119}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{711a}{ (711c)}{. 711b}{ : 711d}{ ; 711f}{ ; 711e}<br/>|\r\n#712||<a href="opac-search.pl?op=do_search&marclist=7109&operator==&type=intranet&value={7129}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur l''auteur"></a>{712a}{ (712c)}{. 712b}{ : 712d}{ ; 712f}{ ; 712e}<br/>|\r\n#210|<label class="ipt">Lieu d''??dition : </l abel>|{ 210a}<br/>|\r\n#210|<label class="ipt">Editeur : </label>|{ 210c}<br/>|\r\n#210|<label class="ipt">Date d''??dition : </label>|{ 210d}<br/>|\r\n#215|<label class="ipt">Description : </label>|{215a}{ : 215c}{ ; 215d}{ + 215e}|<br/>\r\n#225|<label class="ipt">Collection :</label>|<a href="opac-search.pl?op=do_search&marclist=225a&operator==&type=intranet&value={225a}"> <img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Chercher sur {225a}"></a>{ (225a}{ = 225d}{ : 225e}{. 225h}{. 225i}{ / 225f}{, 225x}{ ; 225v}|)<br/>\r\n#200||<label class="ipt">Sujets : </label><br/>|\r\n#600||<a href="opac-search.pl?op=do_search&marclist=6009&operator==&type=intranet&value={6009}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6009}"></a>{ 600c}{ 600b}{ 600a}{ 600d}{ (600f)} {-- 600x }{-- 600z }{-- 600y}<br />|\r\n#604||<a href="opac-search.pl?op=do_search&marclist=6049&operator==&type=intranet&value={6049}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6049}"></a>{ 604a}{. 604t}<br />|\r\n#601||<a href="opac-search.pl?op=do_search&marclist=6019&operator==&type=intranet&value={6019}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6019}"></a>{ 601a}{ (601c)}{. 601b}{ : 601d} { ; 601f}{ ; 601e}{ -- 601x }{-- 601z }{-- 601y}<br />|\r\n#605||<a href="opac-search.pl?op=do_search&marclist=6059&operator==&type=intranet&value={6059}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6059}"></a>{ 605a}{. 605i}{. 605h}{. 605k}{. 605m}{. 605q} {-- 605x }{-- 605z }{-- 605y }{-- 605l}<br />|\r\n#606||<a href="opac-search.pl?op=do_search&marclist=6069&operator==&type=intranet&value={6069}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6069}">xx</a>{ 606a}{-- 606x }{-- 606z }{606y }<br />|\r\n#607||<a href="opac-search.pl?op=do_se arch&marclist=6079&operator==&type=intranet&value={6079}"><img border="0" src="/opac-tmpl/css/en/images/filefind.png" height="15" title="Search on {6079}"></a>{ 607a}{-- 607x}{-- 607z}{-- 607y}<br />|\r\n#010|<label class="ipt">ISBN : </label>|{010a}|<br/>\r\n#011|<label class="ipt">ISSN : </label>|{011a}|<br/>\r\n#200||<label class="ipt">Notes : </label>|<br/>\r\n#300||{300a}|<br/>\r\n#320||{320a}|<br/>\r\n#327||{327a}|<br/>\r\n#328||{328a}|<br/>\r\n#200||<br/><h2>Exemplaires</h2>|\r\n#200|<table>|<th>Localisation</th><th>Cote</th>|\r\n#995||<tr><td>{995e}  </td><td> {995k}</td></tr>|\r\n#200|||</table>') +OPACISBD + }else{ + $dbh->do(<<OPACISBDEN); +INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) +VALUES('OPACISBD','#100||{ 100a }{ 100b }{ 100c }{ 100d }{ 110a }{ 110b }{ 110c }{ 110d }{ 110e }{ 110f }{ 110g }{ 130a }{ 130d }{ 130f }{ 130g }{ 130h }{ 130k }{ 130l }{ 130m }{ 130n }{ 130o }{ 130p }{ 130r }{ 130s }{ 130t }|<br/><br/>\r\n#245||{ 245a }{ 245b }{245f }{ 245g }{ 245k }{ 245n }{ 245p }{ 245s }{ 245h }|\r\n#246||{ : 246i }{ 246a }{ 246b }{ 246f }{ 246g }{ 246n }{ 246p }{ 246h }|\r\n#242||{ = 242a }{ 242b }{ 242n }{ 242p }{ 242h }|\r\n#245||{ 245c }|\r\n#242||{ = 242c }|\r\n#250| - |{ 250a }{ 250b }|\r\n#254|, |{ 254a }|\r\n#255|, |{ 255a }{ 255b }{ 255c }{ 255d }{ 255e }{ 255f }{ 255g }|\r\n#256|, |{ 256a }|\r\n#257|, |{ 257a }|\r\n#258|, |{ 258a }{ 258b }|\r\n#260| - |{ 260a }{ 260b }{ 260c }|\r\n#300| - |{ 300a }{ 300b }{ 300c }{ 300d }{ 300e }{ 300f }{ 300g }|\r\n#306| - |{ 306a }|\r\n#307| - |{ 307a }{ 307b }|\r\n#310| - |{ 310a }{ 310b }|\r\n#321| - |{ 321a }{ 321b }|\r\n#340| - |{ 3403 }{ 340a }{ 340b }{ 340c }{ 340d }{ 340e }{ 340f }{ 340h }{ 340i }|\r\n #342| - |{ 342a }{ 342b }{ 342c }{ 342d }{ 342e }{ 342f }{ 342g }{ 342h }{ 342i }{ 342j }{ 342k }{ 342l }{ 342m }{ 342n }{ 342o }{ 342p }{ 342q }{ 342r }{ 342s }{ 342t }{ 342u }{ 342v }{ 342w }|\r\n#343| - |{ 343a }{ 343b }{ 343c }{ 343d }{ 343e }{ 343f }{ 343g }{ 343h }{ 343i }|\r\n#351| - |{ 3513 }{ 351a }{ 351b }{ 351c }|\r\n#352| - |{ 352a }{ 352b }{ 352c }{ 352d }{ 352e }{ 352f }{ 352g }{ 352i }{ 352q }|\r\n#362| - |{ 362a }{ 351z }|\r\n#440| - |{ 440a }{ 440n }{ 440p }{ 440v }{ 440x }|.\r\n#490| - |{ 490a }{ 490v }{ 490x }|.\r\n#800| - |{ 800a }{ 800b }{ 800c }{ 800d }{ 800e }{ 800f }{ 800g }{ 800h }{ 800j }{ 800k }{ 800l }{ 800m }{ 800n }{ 800o }{ 800p }{ 800q }{ 800r }{ 800s }{ 800t }{ 800u }{ 800v }|.\r\n#810| - |{ 810a }{ 810b }{ 810c }{ 810d }{ 810e }{ 810f }{ 810g }{ 810h }{ 810k }{ 810l }{ 810m }{ 810n }{ 810o }{ 810p }{ 810r }{ 810s }{ 810t }{ 810u }{ 810v }|.\r\n#811| - |{ 811a }{ 811c }{ 811d }{ 811e }{ 811f }{ 811g }{ 811h }{ 811k }{ 811l }{ 811n }{ 811p }{ 811q }{ 811s }{ 811t }{ 811u }{ 811v }|.\r\n#830| - |{ 830a }{ 830d }{ 830f }{ 830g }{ 830h }{ 830k }{ 830l }{ 830m }{ 830n }{ 830o }{ 830p }{ 830r }{ 830s }{ 830t }{ 830v }|.\r\n#500|<br/><br/>|{ 5003 }{ 500a }|\r\n#501|<br/><br/>|{ 501a }|\r\n#502|<br/><br/>|{ 502a }|\r\n#504|<br/><br/>|{ 504a }|\r\n#505|<br/><br/>|{ 505a }{ 505t }{ 505r }{ 505g }{ 505u }|\r\n#506|<br/><br/>|{ 5063 }{ 506a }{ 506b }{ 506c }{ 506d }{ 506u }|\r\n#507|<br/><br/>|{ 507a }{ 507b }|\r\n#508|<br/><br/>|{ 508a }{ 508a }|\r\n#510|<br/><br/>|{ 5103 }{ 510a }{ 510x }{ 510c }{ 510b }|\r\n#511|<br/><br/>|{ 511a }|\r\n#513|<br/><br/>|{ 513a }{513b }|\r\n#514|<br/><br/>|{ 514z }{ 514a }{ 514b }{ 514c }{ 514d }{ 514e }{ 514f }{ 514g }{ 514h }{ 514i }{ 514j }{ 514k }{ 514m }{ 514u }|\r\n#515|<br/><br/>|{ 515a }|\r\n#516|<br/><br/>|{ 516a }|\r\n#518|<br/><br/>|{ 5183 }{ 518a }|\r\n#520|<br/><br/>|{ 5203 }{ 520a }{ 520b }{ 520u }|\r\n#521|<br/><br/>|{ 5213 }{ 521a }{ 521b }|\r\n#522|<br/><br/>|{ 522a }|\r\n# 524|<br/><br/>|{ 524a }|\r\n#525|<br/><br/>|{ 525a }|\r\n#526|<br/><br/>|{\\n510i }{\\n510a }{ 510b }{ 510c }{ 510d }{\\n510x }|\r\n#530|<br/><br/>|{\\n5063 }{\\n506a }{ 506b }{ 506c }{ 506d }{\\n506u }|\r\n#533|<br/><br/>|{\\n5333 }{\\n533a }{\\n533b }{\\n533c }{\\n533d }{\\n533e }{\\n533f }{\\n533m }{\\n533n }|\r\n#534|<br/><br/>|{\\n533p }{\\n533a }{\\n533b }{\\n533c }{\\n533d }{\\n533e }{\\n533f }{\\n533m }{\\n533n }{\\n533t }{\\n533x }{\\n533z }|\r\n#535|<br/><br/>|{\\n5353 }{\\n535a }{\\n535b }{\\n535c }{\\n535d }|\r\n#538|<br/><br/>|{\\n5383 }{\\n538a }{\\n538i }{\\n538u }|\r\n#540|<br/><br/>|{\\n5403 }{\\n540a }{ 540b }{ 540c }{ 540d }{\\n520u }|\r\n#544|<br/><br/>|{\\n5443 }{\\n544a }{\\n544b }{\\n544c }{\\n544d }{\\n544e }{\\n544n }|\r\n#545|<br/><br/>|{\\n545a }{ 545b }{\\n545u }|\r\n#546|<br/><br/>|{\\n5463 }{\\n546a }{ 546b }|\r\n#547|<br/><br/>|{\\n547a }|\r\n#550|<br/><br/>|{ 550a }|\r\n#552|<br/><br/>|{ 552z }{ 552a }{ 552b }{ 552c }{ 552d }{ 552e }{ 552f }{ 552g }{ 552h }{ 552i }{ 552j }{ 552k }{ 552l }{ 552m }{ 552n }{ 562o }{ 552p }{ 552u }|\r\n#555|<br/><br/>|{ 5553 }{ 555a }{ 555b }{ 555c }{ 555d }{ 555u }|\r\n#556|<br/><br/>|{ 556a }{ 506z }|\r\n#563|<br/><br/>|{ 5633 }{ 563a }{ 563u }|\r\n#565|<br/><br/>|{ 5653 }{ 565a }{ 565b }{ 565c }{ 565d }{ 565e }|\r\n#567|<br/><br/>|{ 567a }|\r\n#580|<br/><br/>|{ 580a }|\r\n#581|<br/><br/>|{ 5633 }{ 581a }{ 581z }|\r\n#584|<br/><br/>|{ 5843 }{ 584a }{ 584b }|\r\n#585|<br/><br/>|{ 5853 }{ 585a }|\r\n#586|<br/><br/>|{ 5863 }{ 586a }|\r\n#020|<br/><br/><label>ISBN: </label>|{ 020a }{ 020c }|\r\n#022|<br/><br/><label>ISSN: </label>|{ 022a }|\r\n#222| = |{ 222a }{ 222b }|\r\n#210| = |{ 210a }{ 210b }|\r\n#024|<br/><br/><label>Standard No.: </label>|{ 024a }{ 024c }{ 024d }{ 0242 }|\r\n#027|<br/><br/><label>Standard Tech. Report. No.: </label>|{ 027a }|\r\n#028|<br/><br/><label>Publisher. No.: </label>|{ 028a }{ 028b }|\r\n#013|<br/><br/><label>Patent No.: </label>|{ 013a }{ 013b }{ 013c }{ 013d }{ 013e }{ 013f }|\r\n#030|<br/><br/><label>CODEN: </label>|{ 030a }|\r\n#037|<br/><br/><label>Source: </label>|{ 037a }{ 037b }{ 037c }{ 037f }{ 037g }{ 037n }|\r\n#010|<br/><br/><label>LCCN: </label>|{ 010a }|\r\n#015|<br/><br/><label>Nat. Bib. No.: </label>|{ 015a }{ 0152 }|\r\n#016|<br/><br/><label>Nat. Bib. Agency Control No.: </label>|{ 016a }{ 0162 }|\r\n#600|<br/><br/><label>Subjects--Personal Names: </label>|{\\n6003 }{\\n600a}{ 600b }{ 600c }{ 600d }{ 600e }{ 600f }{ 600g }{ 600h }{--600k}{ 600l }{ 600m }{ 600n }{ 600o }{--600p}{ 600r }{ 600s }{ 600t }{ 600u }{--600x}{--600z}{--600y}{--600v}|\r\n#610|<br/><br/><label>Subjects--Corporate Names: </label>|{\\n6103 }{\\n610a}{ 610b }{ 610c }{ 610d }{ 610e }{ 610f }{ 610g }{ 610h }{--610k}{ 610l }{ 610m }{ 610n }{ 610o }{--610p}{ 610r }{ 610s }{ 610t }{ 610u }{--610x}{--610z}{--610y}{--610v}|\r\n#611|<br/><br/><label>Subjects--Meeting Names: </label>|{\\n6113 }{\\n611a}{ 611b }{ 611c }{ 611d }{ 611e }{ 611f }{ 6 11g }{ 611h }{--611k}{ 611l }{ 611m }{ 611n }{ 611o }{--611p}{ 611r }{ 611s }{ 611t }{ 611u }{--611x}{--611z}{--611y}{--611v}|\r\n#630|<br/><br/><label>Subjects--Uniform Titles: </label>|{\\n630a}{ 630b }{ 630c }{ 630d }{ 630e }{ 630f }{ 630g }{ 630h }{--630k }{ 630l }{ 630m }{ 630n }{ 630o }{--630p}{ 630r }{ 630s }{ 630t }{--630x}{--630z}{--630y}{--630v}|\r\n#648|<br/><br/><label>Subjects--Chronological Terms: </label>|{\\n6483 }{\\n648a }{--648x}{--648z}{--648y}{--648v}|\r\n#650|<br/><br/><label>Subjects--Topical Terms: </label>|{\\n6503 }{\\n650a}{ 650b }{ 650c }{ 650d }{ 650e }{--650x}{--650z}{--650y}{--650v}|\r\n#651|<br/><br/><label>Subjects--Geographic Terms: </label>|{\\n6513 }{\\n651a}{ 651b }{ 651c }{ 651d }{ 651e }{--651x}{--651z}{--651y}{--651v}|\r\n#653|<br/><br/><label>Subjects--Index Terms: </label>|{ 653a }|\r\n#654|<br/><br/><label>Subjects--Facted Index Terms: </label>|{\\n6543 }{\\n654a}{--654b}{--654x}{--654z}{--654y}{--654v}|\r\n#655|<br/><br/><label>Ind ex Terms--Genre/Form: </label>|{\\n6553 }{\\n655a}{--655b}{--655x }{--655z}{--655y}{--655v}|\r\n#656|<br/><br/><label>Index Terms--Occupation: </label>|{\\n6563 }{\\n656a}{--656k}{--656x}{--656z}{--656y}{--656v}|\r\n#657|<br/><br/><label>Index Terms--Function: </label>|{\\n6573 }{\\n657a}{--657x}{--657z}{--657y}{--657v}|\r\n#658|<br/><br/><label>Index Terms--Curriculum Objective: </label>|{\\n658a}{--658b}{--658c}{--658d}{--658v}|\r\n#050|<br/><br/><label>LC Class. No.: </label>|{ 050a }{ / 050b }|\r\n#082|<br/><br/><label>Dewey Class. No.: </label>|{ 082a }{ / 082b }|\r\n#080|<br/><br/><label>Universal Decimal Class. No.: </label>|{ 080a }{ 080x }{ / 080b }|\r\n#070|<br/><br/><label>National Agricultural Library Call No.: </label>|{ 070a }{ / 070b }|\r\n#060|<br/><br/><label>National Library of Medicine Call No.: </label>|{ 060a }{ / 060b }|\r\n#074|<br/><br/><label>GPO Item No.: </label>|{ 074a }|\r\n#086|<br/><br/><label>Gov. Doc. Class. No.: </label>|{ 086a }|\r\n#088|<b r/><br/><label>Report. No.: </label>|{ 088a }|','ISBD','70|10','Textarea'); +OPACISBDEN + } + print "Upgrade to $DBversion done (new OPACISBD syspref, )\n"; +} + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.06.001")) + { + my $value = $dbh->selectrow_array("SELECT value FROM systempreferences WHERE variable = 'HomeOrHoldingBranch'"); + $dbh->do("INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('HomeOrHoldingBranchReturn','$value','Used by Circulation to determine which branch of an item to check checking-in items','holdingbranch|homebranch','Choice');"); + print "Upgrade to $DBversion done (Add HomeOrHoldingBranchReturn system preference)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.06.002")) + { + $dbh->do("ALTER TABLE issues CHANGE COLUMN `itemnumber` `itemnumber` int(11) UNIQUE DEFAULT NULL;"); + $dbh->do("ALTER TABLE serialitems ADD CONSTRAINT `serialitems_sfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE;"); + print "Upgrade to $DBversion done (Improve serialitems table security)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.06.003")) + { + $dbh->do("UPDATE systempreferences set value='../koha-tmpl/opac-tmpl/prog/en/xslt/".C4::Context->preference('marcflavour')."slim2OPACDetail.xsl',type='Free' where variable='XSLTDetailsDisplay' AND value=1;"); + $dbh->do("UPDATE systempreferences set value='../koha-tmpl/opac-tmpl/prog/en/xslt/".C4::Context->preference('marcflavour')."slim2OPACResults.xsl',type='Free' where variable='XSLTResultsDisplay' AND value=1;"); + $dbh->do("UPDATE systempreferences set value='',type='Free' where variable='XSLTDetailsDisplay' AND value=0;"); + $dbh->do("UPDATE systempreferences set value='',type='Free' where variable='XSLTResultsDisplay' AND value=0;"); + print "Upgrade to $DBversion done (Improve XSLT)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference('Version') < TransformToNum($DBversion)){ + if($compare_version < TransformToNum("3.00.06.006")) + { + $dbh->do(" + INSERT IGNORE INTO `letter` (module, code, name, title, content) VALUES('reserves', 'STAFFHOLDPLACED', 'Hold Placed on Item (from staff)', 'Hold Placed on Item (from staff)','A hold has been placed on the following item from the intranet : <<title>> (<<biblionumber>>) for the user <<firstname>> <<surname>> (<<cardnumber>>).'); + "); + print "Upgrade to $DBversion done (Added notice for hold from staff)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = '3.03.00.XXX'; +if (C4::Context->preference('Version') < TransformToNum($DBversion)){ + if($compare_version < TransformToNum("3.00.06.008")) + { + $dbh->do("INSERT IGNORE INTO `user_permissions` (borrowernumber,`module_bit` , `code` ) (SELECT borrowernumber, '9', 'edit_items' FROM borrowers WHERE (flags<<9 && 00000001));"); + print "Upgrade to $DBversion done (updating permissions for catalogers)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if (C4::Context->preference("Version") < TransformToNum($DBversion)) { + if($compare_version < TransformToNum("3.00.06.010")) + { + $dbh->do("INSERT systempreferences (value, variable) select value, 'XSLTDetailFilename' from systempreferences where variable='XSLTDetailsDisplay';"); + $dbh->do("INSERT systempreferences (value, variable) select value, 'XSLTResultsFilename' from systempreferences where variable='XSLTResultsDisplay' ;"); + $dbh->do("UPDATE systempreferences set value=(LENGTH(value)>0),type='YesNo' where variable='XSLTDetailsDisplay';"); + $dbh->do("UPDATE systempreferences set value=(LENGTH(value)>0),type='YesNo' where variable='XSLTResultsDisplay';"); + print "Upgrade to $DBversion done (Improvements to XSLT Support)\n"; + } + SetVersion ($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { +$dbh->do(" + INSERT IGNORE INTO `systempreferences` (variable,value,explanation,options,type) VALUES('SpecifyDueDate',1,'Define whether to display \"Specify Due Date\" form in Circulation','','YesNo'); + "); + print "Upgrade to $DBversion done\n"; + SetVersion($DBversion); +} + +$DBversion = "3.03.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("ALTER TABLE `auth_subfield_structure` ADD CONSTRAINT `auth_subfield_structure_ibfk_1` FOREIGN KEY (`authtypecode`, `tagfield`) REFERENCES `auth_tag_structure` (`authtypecode`, `tagfield`) ON DELETE CASCADE"); + print "Upgrade to $DBversion done (adding foreign key on auth_subfield_structure.authtypecode and auth_subfield_structure.tagfield for deleting on cascade)\n"; +} + +$DBversion = "3.02.00.047"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("ALTER TABLE `accountlines` ADD `note` text NULL default NULL"); + print "Upgrade to $DBversion done (adding note field in accountlines table)\n"; + SetVersion($DBversion); +} + +$DBversion = "3.02.00.048"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("ALTER TABLE `accountlines` ADD `manager_id` int( 11 ) NULL "); + print "Upgrade to $DBversion done (adding manager_id field in accountlines table)\n"; + SetVersion($DBversion); +} =head1 FUNCTIONS diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref index 8fd9423..67f8b53 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref @@ -277,6 +277,10 @@ Circulation: yes: Enable no: "Don't enable" - "the ability to place holds on multiple biblio from the search results" + - + - pref: AllowMultipleHoldsPerBib + class: multi + - This allows multiple items per record to be placed on hold by a single patron. To enable, enter a list of space separated itemtype codes in the field (i.e. "MAG JMAG YMAG"). Useful for magazines, encyclopedias and other bibs where the attached items are not identical. Fines Policy: - - Calculate fines based on days overdue diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index acab30a..7fc48d3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -231,6 +231,12 @@ OPAC: yes: Allow no: "Don't allow" - patrons to place holds on items from the OPAC. + - + - Do search rebound on + - pref: OPACSearchReboundBy + choices: + authority: Authority + term: Term Policy: - - pref: singleBranchMode -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 11:54:28 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 11:54:28 +0100 Subject: [Koha-patches] [PATCH 34/54] Circulation rules management : everything (issues, holds, fines) now at granular level In-Reply-To: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292496888-12128-34-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain <paul.poulain at biblibre.com> All scripts = there are some (a few) reindenting changes. * C4/IssuintRules.pm script created : contains all circ rules related functions * C4/Circulation.pm - rewrite issuing rules according to new behaviour : default values applies as default, not as total. There is also an inheritance, meaning you don't have to define all rules - debarment management : debarred patrons now can have a limit date of debarment (for fine in days, but also for a limited debarrment) - lot of lines removes (now in IssuinRules.pm) - modifys the offline circ : works in conjunction with the Firefox plugin. All offline circ code is in another patch * C4/Overdues.pm - use IssuingRules.pm functions - deal with debarment up to a givendate * C4/Reserves.pm - deal with HoldRules at granular level. The library can now define rules for hold at ccode(itype) / branch / patron category level - added a pickupDelay * admin/smart-rules.pl - script rewritten - added ajax (smart-rules-service) to modify a cell directly * admin/branch_transfer_limits.pl - some variable renamed for more readability * circ/branchtransfers.pl - ModReserveAffect now deals with branches to check hold rules * circ/circulation.pl and circ/returns.pl - deals with debardate where applicable - deals with possible holds on a given item adapted to fit new hold rules - display borrower relatives issues (on circulation.pl only) * reserve/modrequest.pl, placerequest.pl, renewscript.pl and request.pl - deals with new granular-level hold rules * unit tests for Circulation.pm, GetMemberDetails.pm and Overdues.pm - deals with IssuingRules.pm package & API changes * opac-reserve.pl and opac-modrequest: - deals with holds at granular level --- C4/Circulation.pm | 918 +++++++++----------- C4/IssuingRules.pm | 261 ++++++ C4/Overdues.pm | 81 +-- C4/Reserves.pm | 631 ++++++++++---- admin/branch_transfer_limits.pl | 22 +- admin/smart-rules-service.pl | 59 ++ admin/smart-rules.pl | 567 +++---------- circ/branchtransfers.pl | 4 +- circ/circulation.pl | 282 +++++-- circ/returns.pl | 137 +++- .../en/modules/admin/branch_transfer_limits.tmpl | 15 +- .../prog/en/modules/admin/clone-rules.tmpl | 3 +- .../prog/en/modules/admin/smart-rules.tmpl | 589 +++++++------ .../prog/en/modules/circ/circulation.tmpl | 441 ++++++---- .../prog/en/modules/circ/returns.tmpl | 151 ++-- .../prog/en/modules/reserve/request.tmpl | 30 +- .../opac-tmpl/prog/en/modules/opac-reserve.tmpl | 53 +- opac/opac-modrequest.pl | 4 +- opac/opac-reserve.pl | 68 +- reserve/modrequest.pl | 19 +- reserve/placerequest.pl | 92 +- reserve/renewscript.pl | 57 ++- reserve/request.pl | 48 +- t/lib/KohaTest/Circulation.pm | 2 - t/lib/KohaTest/Members/GetMemberDetails.pm | 6 +- t/lib/KohaTest/Overdues.pm | 1 - 26 files changed, 2608 insertions(+), 1933 deletions(-) create mode 100644 C4/IssuingRules.pm create mode 100755 admin/smart-rules-service.pl diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 0131e90..08b2a0b 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -27,12 +27,15 @@ use C4::Koha; use C4::Biblio; use C4::Items; use C4::Members; -use C4::Dates; +use C4::IssuingRules; +use C4::Dates qw/format_date/; use C4::Calendar; use C4::Accounts; +use C4::Overdues ; use C4::ItemCirculationAlertPreference; use C4::Message; use C4::Debug; +use YAML; use Date::Calc qw( Today Today_and_Now @@ -41,6 +44,9 @@ use Date::Calc qw( Date_to_Days Day_of_Week Add_Delta_Days + Delta_Days + check_date + Add_Delta_Days ); use POSIX qw(strftime); use C4::Branch; # GetBranches @@ -72,9 +78,6 @@ BEGIN { &GetItemIssues &GetBorrowerIssues &GetIssuingCharges - &GetIssuingRule - &GetBranchBorrowerCircRule - &GetBranchItemRule &GetBiblioIssues &GetOpenIssue &AnonymiseIssueHistory @@ -97,6 +100,15 @@ BEGIN { &CreateBranchTransferLimit &DeleteBranchTransferLimits ); + + # subs to deal with offline circulation + push @EXPORT, qw( + &GetOfflineOperations + &GetOfflineOperation + &AddOfflineOperation + &DeleteOfflineOperation + &ProcessOfflineOperation + ); } =head1 NAME @@ -345,116 +357,97 @@ sub TooMany { my $item = shift; my $cat_borrower = $borrower->{'categorycode'}; my $dbh = C4::Context->dbh; - my $branch; + my $exactbranch; # Get which branchcode we need - $branch = _GetCircControlBranch($item,$borrower); - my $type = (C4::Context->preference('item-level_itypes')) + $exactbranch = _GetCircControlBranch($item,$borrower); + my $itype = (C4::Context->preference('item-level_itypes')) ? $item->{'itype'} # item-level : $item->{'itemtype'}; # biblio-level # given branch, patron category, and item type, determine # applicable issuing rule - my $issuing_rule = GetIssuingRule($cat_borrower, $type, $branch); - - # if a rule is found and has a loan limit set, count - # how many loans the patron already has that meet that - # rule - if (defined($issuing_rule) and defined($issuing_rule->{'maxissueqty'})) { - my @bind_params; - my $count_query = "SELECT COUNT(*) FROM issues - JOIN items USING (itemnumber) "; - - my $rule_itemtype = $issuing_rule->{itemtype}; - if ($rule_itemtype eq "*") { - # matching rule has the default item type, so count only - # those existing loans that don't fall under a more - # specific rule - if (C4::Context->preference('item-level_itypes')) { - $count_query .= " WHERE items.itype NOT IN ( - SELECT itemtype FROM issuingrules - WHERE branchcode = ? - AND (categorycode = ? OR categorycode = ?) - AND itemtype <> '*' - ) "; - } else { - $count_query .= " JOIN biblioitems USING (biblionumber) - WHERE biblioitems.itemtype NOT IN ( - SELECT itemtype FROM issuingrules - WHERE branchcode = ? - AND (categorycode = ? OR categorycode = ?) - AND itemtype <> '*' - ) "; - } - push @bind_params, $issuing_rule->{branchcode}; - push @bind_params, $issuing_rule->{categorycode}; - push @bind_params, $cat_borrower; - } else { - # rule has specific item type, so count loans of that - # specific item type - if (C4::Context->preference('item-level_itypes')) { - $count_query .= " WHERE items.itype = ? "; - } else { - $count_query .= " JOIN biblioitems USING (biblionumber) - WHERE biblioitems.itemtype= ? "; - } - push @bind_params, $type; - } - - $count_query .= " AND borrowernumber = ? "; - push @bind_params, $borrower->{'borrowernumber'}; - my $rule_branch = $issuing_rule->{branchcode}; - if ($rule_branch ne "*") { - if (C4::Context->preference('CircControl') eq 'PickupLibrary') { - $count_query .= " AND issues.branchcode = ? "; - push @bind_params, $branch; - } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') { - ; # if branch is the patron's home branch, then count all loans by patron - } else { - $count_query .= " AND items.homebranch = ? "; - push @bind_params, $branch; - } - } - - my $count_sth = $dbh->prepare($count_query); - $count_sth->execute(@bind_params); - my ($current_loan_count) = $count_sth->fetchrow_array; + my $branchfield = C4::Context->Preference('HomeOrHoldingBranch') || "homebranch"; + #By default, Patron is supposed not to be able to borrow + my $toomany = 1; + + foreach my $branch ( $exactbranch, '*' ) { + foreach my $type ( $itype, '*' ) { + my $issuing_rule = GetIssuingRule( $cat_borrower, $type, $branch ); + + # if a rule is found and has a loan limit set, count + # how many loans the patron already has that meet that + # rule + if ( defined($issuing_rule) and defined( $issuing_rule->{'maxissueqty'} ) ) { + my @bind_params; + my $count_query = "SELECT COUNT(*) FROM issues + JOIN items USING (itemnumber) "; + + my $rule_itemtype = $issuing_rule->{itemtype}; + if ($rule_itemtype eq "*") { + # matching rule has the default item type, so count all the items issued for that branch no + # those existing loans that don't fall under a more + # specific rule Not QUITE + if (C4::Context->preference('item-level_itypes')) { + $count_query .= " WHERE items.itype NOT IN ( + SELECT itemtype FROM issuingrules + WHERE branchcode = ? + AND (categorycode = ? OR categorycode = ?) + AND itemtype <> '*' + )"; + } else { + $count_query .= " JOIN biblioitems USING (biblionumber) + WHERE biblioitems.itemtype NOT IN ( + SELECT itemtype FROM issuingrules + WHERE branchcode = ? + AND (categorycode = ? OR categorycode = ?) + AND itemtype <> '*' + )"; + } + push @bind_params, $issuing_rule->{branchcode}; + push @bind_params, $issuing_rule->{categorycode}; + push @bind_params, $cat_borrower; + } else { + # rule has specific item type, so count loans of that + # specific item type + if (C4::Context->preference('item-level_itypes')) { + $count_query .= " WHERE items.itype = ? "; + } else { + $count_query .= " JOIN biblioitems USING (biblionumber) + WHERE biblioitems.itemtype= ? "; + } + push @bind_params, $type; + } - my $max_loans_allowed = $issuing_rule->{'maxissueqty'}; - if ($current_loan_count >= $max_loans_allowed) { - return "$current_loan_count / $max_loans_allowed"; - } - } + $count_query .= " AND borrowernumber = ? "; + push @bind_params, $borrower->{'borrowernumber'}; + my $rule_branch = $issuing_rule->{branchcode}; + if ( $rule_branch ne "*" ) { + if ( C4::Context->preference('CircControl') eq 'PickupLibrary' ) { + $count_query .= " AND issues.branchcode = ? "; + push @bind_params, $branch; + } elsif ( C4::Context->preference('CircControl') eq 'PatronLibrary' ) { + ; # if branch is the patron's home branch, then count all loans by patron + } else { + $count_query .= " AND items.$branchfield = ? "; + push @bind_params, $branch; + } + } - # Now count total loans against the limit for the branch - my $branch_borrower_circ_rule = GetBranchBorrowerCircRule($branch, $cat_borrower); - if (defined($branch_borrower_circ_rule->{maxissueqty})) { - my @bind_params = (); - my $branch_count_query = "SELECT COUNT(*) FROM issues - JOIN items USING (itemnumber) - WHERE borrowernumber = ? "; - push @bind_params, $borrower->{borrowernumber}; - - if (C4::Context->preference('CircControl') eq 'PickupLibrary') { - $branch_count_query .= " AND issues.branchcode = ? "; - push @bind_params, $branch; - } elsif (C4::Context->preference('CircControl') eq 'PatronLibrary') { - ; # if branch is the patron's home branch, then count all loans by patron - } else { - $branch_count_query .= " AND items.homebranch = ? "; - push @bind_params, $branch; - } - my $branch_count_sth = $dbh->prepare($branch_count_query); - $branch_count_sth->execute(@bind_params); - my ($current_loan_count) = $branch_count_sth->fetchrow_array; + my $count_sth = $dbh->prepare($count_query); + $count_sth->execute(@bind_params); + my ($current_loan_count) = $count_sth->fetchrow_array; - my $max_loans_allowed = $branch_borrower_circ_rule->{maxissueqty}; - if ($current_loan_count >= $max_loans_allowed) { - return "$current_loan_count / $max_loans_allowed"; + my $max_loans_allowed = $issuing_rule->{'maxissueqty'}; + if ( $current_loan_count >= $max_loans_allowed ) { + return 1,$current_loan_count,$max_loans_allowed; + } + else { + $toomany=0; + } + } } } - - # OK, the patron can issue !!! - return; + return $toomany; } =head2 itemissues @@ -683,7 +676,10 @@ sub CanBookBeIssued { my $branch = _GetCircControlBranch($item,$borrower); my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblioitem->{'itemtype'}; my $loanlength = GetLoanLength( $borrower->{'categorycode'}, $itype, $branch ); - $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $loanlength, $branch, $borrower ); + unless ($loanlength or C4::Context->preference("AllowNotForLoanOverride")) { + $issuingimpossible{LOAN_LENGTH_UNDEFINED} = "$borrower->{'categorycode'}, $itype, $branch"; + } + $duedate = CalcDateDue( C4::Dates->new( $issuedate, 'iso' ), $loanlength, $branch, $borrower ) ; # Offline circ calls AddIssue directly, doesn't run through here # So issuingimpossible should be ok. @@ -711,15 +707,22 @@ sub CanBookBeIssued { $issuingimpossible{CARD_LOST} = 1; } if ( $borrower->{flags}->{'DBARRED'} ) { - $issuingimpossible{DEBARRED} = 1; + if (my $dateenddebarred=$borrower->{flags}->{'DBARRED'}->{'dateend'}){ + $issuingimpossible{DEBARRED} = format_date($dateenddebarred); + } + else { + $issuingimpossible{DEBARRED} = 1; + } } if ( $borrower->{'dateexpiry'} eq '0000-00-00') { $issuingimpossible{EXPIRED} = 1; } else { - my @expirydate= split /-/,$borrower->{'dateexpiry'}; - if($expirydate[0]==0 || $expirydate[1]==0|| $expirydate[2]==0 || - Date_to_Days(Today) > Date_to_Days( @expirydate )) { - $issuingimpossible{EXPIRED} = 1; + my @expirydate = split (/-/, $borrower->{'dateexpiry'}); + if ( $expirydate[0] == 0 + || $expirydate[1] == 0 + || $expirydate[2] == 0 + || Date_to_Days(Today) > Date_to_Days(@expirydate) ) { + $issuingimpossible{EXPIRED} = 1; } } # @@ -761,14 +764,15 @@ sub CanBookBeIssued { # # JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS # - my $toomany = TooMany( $borrower, $item->{biblionumber}, $item ); - # if TooMany return / 0, then the user has no permission to check out this book - if ($toomany =~ /\/ 0/) { + my @toomany = TooMany( $borrower, $item->{biblionumber}, $item ); + + if ( $toomany[0] == 1 && scalar(@toomany)<3) { $needsconfirmation{PATRON_CANT} = 1; - } else { - $needsconfirmation{TOO_MANY} = $toomany if $toomany; + } elsif (scalar(@toomany)==3) { + $needsconfirmation{TOO_MANY} = "$toomany[1] / $toomany[2]"; } + # # ITEM CHECKING # @@ -805,8 +809,18 @@ sub CanBookBeIssued { } } } - if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} == 1 ) - { + if ( $item->{'damaged'} && $item->{'damaged'} > 0 ){ + $needsconfirmation{DAMAGED} = $item->{'damaged'}; + my $fw = GetFrameworkCode($item->{biblionumber}); + my $category = GetAuthValCode('items.damaged',$fw); + my $authorizedvalues = GetAuthorisedValues($category, $item->{damaged}); + + foreach my $authvalue (@$authorizedvalues){ + $needsconfirmation{DAMAGED} = $authvalue->{lib} if $authvalue->{'authorised_value'} eq $item->{'damaged'}; + } + + } + if ( $item->{'wthdrawn'} && $item->{'wthdrawn'} == 1 ) { $issuingimpossible{WTHDRAWN} = 1; } if ( $item->{'restricted'} @@ -814,15 +828,23 @@ sub CanBookBeIssued { { $issuingimpossible{RESTRICTED} = 1; } + my $userenv = C4::Context->userenv; + my $branch=$userenv->{branch}; + my $hbr= $item->{ C4::Context->preference("HomeOrHoldingBranch") }; if ( C4::Context->preference("IndependantBranches") ) { - my $userenv = C4::Context->userenv; if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) { $issuingimpossible{ITEMNOTSAMEBRANCH} = 1 - if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} ); + if ( $hbr ne $branch ); $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} ) if ( $borrower->{'branchcode'} ne $userenv->{branch} ); } } + my $branchtransferfield=C4::Context->preference("BranchTransferLimitsType") eq "ccode" ? "ccode" : "itype"; + if ( C4::Context->preference("UseBranchTransferLimits") + and !IsBranchTransferAllowed( $branch, $hbr, $item->{ $branchtransferfield } ) ) { + $needsconfirmation{BRANCH_TRANSFER_NOT_ALLOWED} = $hbr; + } + # # CHECK IF BOOK ALREADY ISSUED TO THIS BORROWER @@ -860,20 +882,21 @@ sub CanBookBeIssued { my ( $resborrower ) = C4::Members::GetMemberDetails( $resbor, 0 ); my $branches = GetBranches(); my $branchname = $branches->{ $res->{'branchcode'} }->{'branchname'}; - if ( $resbor ne $borrower->{'borrowernumber'} && $restype eq "Waiting" ) - { - # The item is on reserve and waiting, but has been - # reserved by some other patron. - $needsconfirmation{RESERVE_WAITING} = -"$resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}, $branchname)"; - } - elsif ( $restype eq "Reserved" ) { - # The item is on reserve for someone else. - $needsconfirmation{RESERVED} = -"$res->{'reservedate'} : $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})"; + if( $resbor ne $borrower->{'borrowernumber'}){ + if ( $restype eq "Waiting" ) { + # The item is on reserve and waiting, but has been + # reserved by some other patron. + $needsconfirmation{RESERVE_WAITING} = + "$resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'}, $branchname)"; + } + elsif ( $restype eq "Reserved" ) { + # The item is on reserve for someone else. + $needsconfirmation{RESERVED} = + "$res->{'reservedate'} : $resborrower->{'firstname'} $resborrower->{'surname'} ($resborrower->{'cardnumber'})"; + } } } - return ( \%issuingimpossible, \%needsconfirmation ); + return ( \%issuingimpossible, \%needsconfirmation ); } =head2 AddIssue @@ -954,7 +977,10 @@ sub AddIssue { # who wants to borrow it now. mark it returned before issuing to the new borrower AddReturn( $item->{'barcode'}, - C4::Context->userenv->{'branch'} + C4::Context->userenv->{'branch'}, + undef, + undef, + 1 ); } @@ -987,7 +1013,9 @@ sub AddIssue { ModReserve(1, $res->{'biblionumber'}, $res->{'borrowernumber'}, - $res->{'branchcode'} + $res->{'branchcode'}, + undef, + $res->{'reservenumber'} ); } } @@ -1077,10 +1105,11 @@ sub AddIssue { branch => $branch, }); } + + logaction( "CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $item->{'itemnumber'} ) + if C4::Context->preference("IssueLog"); } - logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'biblionumber'}) - if C4::Context->preference("IssueLog"); } return ($datedue); # not necessarily the same as when it came in! } @@ -1095,254 +1124,8 @@ Get loan length for an itemtype, a borrower type and a branch sub GetLoanLength { my ( $borrowertype, $itemtype, $branchcode ) = @_; - my $dbh = C4::Context->dbh; - my $sth = - $dbh->prepare( -"select issuelength from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null" - ); -# warn "in get loan lenght $borrowertype $itemtype $branchcode "; -# try to find issuelength & return the 1st available. -# check with borrowertype, itemtype and branchcode, then without one of those parameters - $sth->execute( $borrowertype, $itemtype, $branchcode ); - my $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( $borrowertype, "*", $branchcode ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( "*", $itemtype, $branchcode ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( "*", "*", $branchcode ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( $borrowertype, $itemtype, "*" ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( $borrowertype, "*", "*" ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( "*", $itemtype, "*" ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - $sth->execute( "*", "*", "*" ); - $loanlength = $sth->fetchrow_hashref; - return $loanlength->{issuelength} - if defined($loanlength) && $loanlength->{issuelength} ne 'NULL'; - - # if no rule is set => 21 days (hardcoded) - return 21; -} - -=head2 GetIssuingRule - - my $irule = &GetIssuingRule($borrowertype,$itemtype,branchcode) - -FIXME - This is a copy-paste of GetLoanLength -as a stop-gap. Do not wish to change API for GetLoanLength -this close to release, however, Overdues::GetIssuingRules is broken. - -Get the issuing rule for an itemtype, a borrower type and a branch -Returns a hashref from the issuingrules table. - -=cut - -sub GetIssuingRule { - my ( $borrowertype, $itemtype, $branchcode ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( "select * from issuingrules where categorycode=? and itemtype=? and branchcode=? and issuelength is not null" ); - my $irule; - - $sth->execute( $borrowertype, $itemtype, $branchcode ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( $borrowertype, "*", $branchcode ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( "*", $itemtype, $branchcode ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( "*", "*", $branchcode ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( $borrowertype, $itemtype, "*" ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( $borrowertype, "*", "*" ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( "*", $itemtype, "*" ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - $sth->execute( "*", "*", "*" ); - $irule = $sth->fetchrow_hashref; - return $irule if defined($irule) ; - - # if no rule matches, - return undef; -} - -=head2 GetBranchBorrowerCircRule - - my $branch_cat_rule = GetBranchBorrowerCircRule($branchcode, $categorycode); - -Retrieves circulation rule attributes that apply to the given -branch and patron category, regardless of item type. -The return value is a hashref containing the following key: - -maxissueqty - maximum number of loans that a -patron of the given category can have at the given -branch. If the value is undef, no limit. - -This will first check for a specific branch and -category match from branch_borrower_circ_rules. - -If no rule is found, it will then check default_branch_circ_rules -(same branch, default category). If no rule is found, -it will then check default_borrower_circ_rules (default -branch, same category), then failing that, default_circ_rules -(default branch, default category). - -If no rule has been found in the database, it will default to -the buillt in rule: - -maxissueqty - undef - -C<$branchcode> and C<$categorycode> should contain the -literal branch code and patron category code, respectively - no -wildcards. - -=cut - -sub GetBranchBorrowerCircRule { - my $branchcode = shift; - my $categorycode = shift; - - my $branch_cat_query = "SELECT maxissueqty - FROM branch_borrower_circ_rules - WHERE branchcode = ? - AND categorycode = ?"; - my $dbh = C4::Context->dbh(); - my $sth = $dbh->prepare($branch_cat_query); - $sth->execute($branchcode, $categorycode); - my $result; - if ($result = $sth->fetchrow_hashref()) { - return $result; - } - - # try same branch, default borrower category - my $branch_query = "SELECT maxissueqty - FROM default_branch_circ_rules - WHERE branchcode = ?"; - $sth = $dbh->prepare($branch_query); - $sth->execute($branchcode); - if ($result = $sth->fetchrow_hashref()) { - return $result; - } - - # try default branch, same borrower category - my $category_query = "SELECT maxissueqty - FROM default_borrower_circ_rules - WHERE categorycode = ?"; - $sth = $dbh->prepare($category_query); - $sth->execute($categorycode); - if ($result = $sth->fetchrow_hashref()) { - return $result; - } - - # try default branch, default borrower category - my $default_query = "SELECT maxissueqty - FROM default_circ_rules"; - $sth = $dbh->prepare($default_query); - $sth->execute(); - if ($result = $sth->fetchrow_hashref()) { - return $result; - } - - # built-in default circulation rule - return { - maxissueqty => undef, - }; -} - -=head2 GetBranchItemRule - - my $branch_item_rule = GetBranchItemRule($branchcode, $itemtype); - -Retrieves circulation rule attributes that apply to the given -branch and item type, regardless of patron category. - -The return value is a hashref containing the following key: - -holdallowed => Hold policy for this branch and itemtype. Possible values: - 0: No holds allowed. - 1: Holds allowed only by patrons that have the same homebranch as the item. - 2: Holds allowed from any patron. - -This searches branchitemrules in the following order: - - * Same branchcode and itemtype - * Same branchcode, itemtype '*' - * branchcode '*', same itemtype - * branchcode and itemtype '*' - -Neither C<$branchcode> nor C<$categorycode> should be '*'. - -=cut - -sub GetBranchItemRule { - my ( $branchcode, $itemtype ) = @_; - my $dbh = C4::Context->dbh(); - my $result = {}; - - my @attempts = ( - ['SELECT holdallowed - FROM branch_item_rules - WHERE branchcode = ? - AND itemtype = ?', $branchcode, $itemtype], - ['SELECT holdallowed - FROM default_branch_circ_rules - WHERE branchcode = ?', $branchcode], - ['SELECT holdallowed - FROM default_branch_item_rules - WHERE itemtype = ?', $itemtype], - ['SELECT holdallowed - FROM default_circ_rules'], - ); - - foreach my $attempt (@attempts) { - my ($query, @bind_params) = @{$attempt}; - - # Since branch/category and branch/itemtype use the same per-branch - # defaults tables, we have to check that the key we want is set, not - # just that a row was returned - return $result if ( defined( $result->{'holdallowed'} = $dbh->selectrow_array( $query, {}, @bind_params ) ) ); - } - - # built-in default circulation rule - return { - holdallowed => 2, - }; + my $loanlength=GetIssuingRule($borrowertype,$itemtype,$branchcode); + return $loanlength->{issuelength}; } =head2 AddReturn @@ -1420,8 +1203,8 @@ patron who last borrowed the book. =cut sub AddReturn { - my ( $barcode, $branch, $exemptfine, $dropbox ) = @_; - if ($branch and not GetBranchDetail($branch)) { + my ( $barcode, $branch, $exemptfine, $dropbox, $force) = @_; + if ( $branch and not GetBranchDetail($branch) ) { warn "AddReturn error: branch '$branch' not found. Reverting to " . C4::Context->userenv->{'branch'}; undef $branch; } @@ -1465,9 +1248,17 @@ sub AddReturn { my $branches = GetBranches(); # a potentially expensive call for a non-feature. $branches->{$hbr}->{PE} and $messages->{'IsPermanent'} = $hbr; } - + my $branchtransferfield=C4::Context->preference("BranchTransferLimitsType") eq "ccode" ? "ccode" : "itype"; + $debug && warn "$branch, $hbr, ",C4::Context->preference("BranchTransferLimitsType")," ,",$item->{ $branchtransferfield } ; + $debug && warn Dump($item); + $debug && warn IsBranchTransferAllowed( $branch, $hbr, $item->{ C4::Context->preference("BranchTransferLimitsType") } ); # if indy branches and returning to different branch, refuse the return - if ($hbr ne $branch && C4::Context->preference("IndependantBranches")){ + if ( !$force && ($hbr ne $branch) + && (C4::Context->preference("IndependantBranches") + or ( C4::Context->preference("UseBranchTransferLimits") + and !IsBranchTransferAllowed( $branch, $hbr, $item->{$branchtransferfield } ) ) + ) + ){ $messages->{'Wrongbranch'} = { Wrongbranch => $branch, Rightbranch => $hbr, @@ -1478,7 +1269,6 @@ sub AddReturn { # FIXME - even in an indy branches situation, there should # still be an option for the library to accept the item # and transfer it to its owning library. - return ( $doreturn, $messages, $issue, $borrower ); } if ( $item->{'wthdrawn'} ) { # book has been cancelled @@ -1489,12 +1279,11 @@ sub AddReturn { # case of a return of document (deal with issues and holdingbranch) if ($doreturn) { $borrower or warn "AddReturn without current borrower"; - my $circControlBranch; + my $circControlBranch; if ($dropbox) { - # define circControlBranch only if dropbox mode is set - # don't allow dropbox mode to create an invalid entry in issues (issuedate > today) - # FIXME: check issuedate > returndate, factoring in holidays - $circControlBranch = _GetCircControlBranch($item,$borrower) unless ( $item->{'issuedate'} eq C4::Dates->today('iso') );; + $circControlBranch = _GetCircControlBranch( $item, $borrower ); + # don't allow dropbox mode to create an invalid entry in issues (issuedate > returndate) FIXME: actually checks eq, not gt + undef($dropbox) if ( $item->{'issuedate'} eq C4::Dates->today('iso') ); } if ($borrowernumber) { @@ -1502,15 +1291,15 @@ sub AddReturn { $messages->{'WasReturned'} = 1; # FIXME is the "= 1" right? This could be the borrower hash. } - ModItem({ onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'}); + ModItem( { renewals=>0, onloan => undef }, $issue->{'biblionumber'}, $item->{'itemnumber'} ); + # the holdingbranch is updated if the document is returned to another location. + # this is always done regardless of whether the item was on loan or not + if ( $item->{'holdingbranch'} ne $branch ) { + UpdateHoldingbranch( $branch, $item->{'itemnumber'} ); + $item->{'holdingbranch'} = $branch; # update item data holdingbranch too + } } - # the holdingbranch is updated if the document is returned to another location. - # this is always done regardless of whether the item was on loan or not - if ($item->{'holdingbranch'} ne $branch) { - UpdateHoldingbranch($branch, $item->{'itemnumber'}); - $item->{'holdingbranch'} = $branch; # update item data holdingbranch too - } ModDateLastSeen( $item->{'itemnumber'} ); # check if we have a transfer for this document @@ -1537,11 +1326,26 @@ sub AddReturn { _FixAccountForLostAndReturned($item->{'itemnumber'}, $borrowernumber, $barcode); # can tolerate undef $borrowernumber $messages->{'WasLost'} = 1; } + if ($item->{'notforloan'}){ + $messages->{'NotForLoan'} = $item->{'notforloan'}; + } + if ($item->{'damaged'}){ + $messages->{'Damaged'} = $item->{'damaged'}; + } - # fix up the overdues in accounts... - if ($borrowernumber) { + if ($borrowernumber && $doreturn) { + # fix up the overdues in accounts... my $fix = _FixOverduesOnReturn($borrowernumber, $item->{itemnumber}, $exemptfine, $dropbox); defined($fix) or warn "_FixOverduesOnReturn($borrowernumber, $item->{itemnumber}...) failed!"; # zero is OK, check defined + + # fix fine days + my $debardate = _FixFineDaysOnReturn($borrower, $item, $issue->{date_due}); + $messages->{'Debarred'} = $debardate if($debardate); + + # get fines for the borrower + my $fineamount = C4::Overdues::GetFine($borrowernumber); + $messages->{'HaveFines'} = $fineamount if($fineamount); + } # find reserves..... @@ -1577,20 +1381,20 @@ sub AddReturn { branch => $branch, }); } - - logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'biblionumber'}) - if C4::Context->preference("ReturnLog"); - + + logaction( "CIRCULATION", "RETURN", $borrowernumber, $item->{'itemnumber'} ) + if C4::Context->preference("ReturnLog"); + # FIXME: make this comment intelligible. #adding message if holdingbranch is non equal a userenv branch to return the document to homebranch #we check, if we don't have reserv or transfert for this document, if not, return it to homebranch . - if ($doreturn and ($branch ne $hbr) and not $messages->{'WrongTransfer'} and ($validTransfert ne 1) ){ - if ( C4::Context->preference("AutomaticItemReturn" ) or - (C4::Context->preference("UseBranchTransferLimits") and - ! IsBranchTransferAllowed($branch, $hbr, $item->{C4::Context->preference("BranchTransferLimitsType")} ) - )) { - $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'},$branch, $hbr; + if ( $doreturn and ( $branch ne $hbr ) and not $messages->{'WrongTransfer'} and ( $validTransfert ne 1 ) ) { + if (C4::Context->preference("AutomaticItemReturn") + or ( C4::Context->preference("UseBranchTransferLimits") + and !IsBranchTransferAllowed( $branch, $hbr, $item->{ $branchtransferfield } ) ) + ) { + $debug and warn sprintf "about to call ModItemTransfer(%s, %s, %s)", $item->{'itemnumber'}, $branch, $hbr; $debug and warn "item: " . Dumper($item); ModItemTransfer($item->{'itemnumber'}, $branch, $hbr); $messages->{'WasTransfered'} = 1; @@ -1652,6 +1456,61 @@ sub MarkIssueReturned { $sth_del->execute($borrowernumber, $itemnumber); } +=head2 _FixFineDaysOnReturn + + &_FixFineDaysOnReturn($borrower, $item, $datedue); + +C<$borrower> borrower hashref + +C<$item> item hashref + +C<$datedue> date due + +Internal function, called only by AddReturn that calculate and update the user fine days, and debars him + +=cut + +sub _FixFineDaysOnReturn { + my ($borrower, $item, $datedue) = @_; + + if($datedue){ + $datedue = C4::Dates->new($datedue,"iso"); + }else{ + return; + } + + my $branchcode =_GetCircControlBranch($item, $borrower); + my $calendar = C4::Calendar->new( branchcode => $branchcode ); + my $today = C4::Dates->new(); + + my $deltadays = $calendar->daysBetween($datedue, C4::Dates->new()); + + my $circcontrol = C4::Context::preference('CircControl'); + my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode); + my $finedays = $issuingrule->{finedays}; + # exit if no finedays defined + return unless $finedays; + my $grace = $issuingrule->{firstremind}; + + if( $deltadays - $grace > 0){ + my @newdate = Add_Delta_Days(Today(), $deltadays * $finedays ); + my $isonewdate = join('-', at newdate); + my ($deby, $debm, $debd) = split(/-/,$borrower->{debarred}); + if(check_date($deby, $debm, $debd)){ + my @olddate = split(/-/, $borrower->{debarred}); + + if(Delta_Days(@olddate, at newdate) > 0){ + C4::Members::DebarMember($borrower->{borrowernumber}, $isonewdate); + return $isonewdate; + } + }else{ + C4::Members::DebarMember($borrower->{borrowernumber}, $isonewdate); + return $isonewdate; + } + } +} + + =head2 _FixOverduesOnReturn &_FixOverduesOnReturn($brn,$itm, $exemptfine, $dropboxmode); @@ -1826,7 +1685,7 @@ sub _GetCircControlBranch { my $circcontrol = C4::Context->preference('CircControl'); my $branch; - if ($circcontrol eq 'PickupLibrary') { + if ($circcontrol eq 'PickupLibrary' && C4::Context->userenv->{'branch'}) { $branch= C4::Context->userenv->{'branch'}; } elsif ($circcontrol eq 'PatronLibrary') { $branch=$borrower->{branchcode}; @@ -1863,7 +1722,7 @@ sub GetItemIssue { my ($itemnumber) = @_; return unless $itemnumber; my $sth = C4::Context->dbh->prepare( - "SELECT * + "SELECT *, issues.renewals as 'issues.renewals' FROM issues LEFT JOIN items ON issues.itemnumber=items.itemnumber WHERE issues.itemnumber=?"); @@ -1934,7 +1793,7 @@ sub GetItemIssues { } my $results = $sth->fetchall_arrayref({}); foreach (@$results) { - $_->{'overdue'} = ($_->{'date_due'} lt $today) ? 1 : 0; + $_->{'overdue'} = ( $_->{'date_due'} lt $today && !defined($_->{return_date}) ) ? 1 : 0; } return $results; } @@ -2040,69 +1899,42 @@ already renewed the loan. $error will contain the reason the renewal can not pro sub CanBookBeRenewed { # check renewal status - my ( $borrowernumber, $itemnumber, $override_limit ) = @_; + my ( $borrowernumber, $itemnumber ) = @_; my $dbh = C4::Context->dbh; my $renews = 1; - my $renewokay = 0; - my $error; + my $renewokay = 1; + my $error; # Look in the issues table for this item, lent to this borrower, # and not yet returned. # Look in the issues table for this item, lent to this borrower, # and not yet returned. - my %branch = ( - 'ItemHomeLibrary' => 'items.homebranch', - 'PickupLibrary' => 'items.holdingbranch', - 'PatronLibrary' => 'borrowers.branchcode' - ); - my $controlbranch = $branch{C4::Context->preference('CircControl')}; - my $itype = C4::Context->preference('item-level_itypes') ? 'items.itype' : 'biblioitems.itemtype'; + my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef; + my $item = GetItem($itemnumber) or return undef; + my $itemissue = GetItemIssue($itemnumber) or return undef; + my $branchcode = _GetCircControlBranch($item, $borrower); + if ($itemissue->{'overdue'}){ + $renewokay=0; + $error->{message}='overdue'; + } - my $sthcount = $dbh->prepare(" - SELECT - borrowers.categorycode, biblioitems.itemtype, issues.renewals, renewalsallowed, $controlbranch - FROM issuingrules, - issues - LEFT JOIN items USING (itemnumber) - LEFT JOIN borrowers USING (borrowernumber) - LEFT JOIN biblioitems USING (biblioitemnumber) - - WHERE - (issuingrules.categorycode = borrowers.categorycode OR issuingrules.categorycode = '*') - AND - (issuingrules.itemtype = $itype OR issuingrules.itemtype = '*') - AND - (issuingrules.branchcode = $controlbranch OR issuingrules.branchcode = '*') - AND - borrowernumber = ? - AND - itemnumber = ? - ORDER BY - issuingrules.categorycode desc, - issuingrules.itemtype desc, - issuingrules.branchcode desc - LIMIT 1; - "); - - $sthcount->execute( $borrowernumber, $itemnumber ); - if ( my $data1 = $sthcount->fetchrow_hashref ) { - - if ( ( $data1->{renewalsallowed} && $data1->{renewalsallowed} > $data1->{renewals} ) || $override_limit ) { - $renewokay = 1; - } - else { - $error="too_many"; - } - - my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber); - if ($resfound) { - $renewokay = 0; - $error="on_reserve" - } + my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode); + + if ( $issuingrule->{renewalsallowed} <= $itemissue->{'issues.renewals'} ) { + $renewokay=0; + $error->{message} = "too_many"; + } + my ( $resfound, $resrec ) = C4::Reserves::CheckReserves($itemnumber); + if ($resfound) { + $renewokay = 0; + $error->{message} = "on_reserve"; } - return ($renewokay,$error); + $error->{renewals} = $itemissue->{'issues.renewals'}; + $error->{renewalsallowed}= $issuingrule->{renewalsallowed}; + + return ( $renewokay, $error ); } =head2 AddRenewal @@ -2157,22 +1989,28 @@ sub AddRenewal { # based on the value of the RenewalPeriodBase syspref. unless ($datedue) { - my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef; - my $loanlength = GetLoanLength( - $borrower->{'categorycode'}, - (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'} , - $issuedata->{'branchcode'} ); # that's the circ control branch. + my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef; + my $branchcode = _GetCircControlBranch($item, $borrower); + my $loanlength = GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode ); + + $datedue = + ( C4::Context->preference('RenewalPeriodBase') eq 'date_due' ) + ? C4::Dates->new( $issuedata->{date_due}, 'iso' ) + : C4::Dates->new(); + + my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'}; + my $controlbranch = _GetCircControlBranch( $item, $borrower ); + my $renewalperiod = $loanlength->{renewalperiod} || GetLoanLength( $borrower->{'categorycode'}, $itype, $controlbranch ); + + $datedue = CalcDateDue( $datedue, $renewalperiod, $issuedata->{'branchcode'}, $borrower ); - $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? - C4::Dates->new($issuedata->{date_due}, 'iso') : - C4::Dates->new(); - $datedue = CalcDateDue($datedue,$loanlength,$issuedata->{'branchcode'},$borrower); } # Update the issues record to have the new due date, and a new count # of how many times it has been renewed. my $renews = $issuedata->{'renewals'} + 1; - $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? + $sth = $dbh->prepare( + "UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = ? WHERE borrowernumber=? AND itemnumber=?" ); @@ -2180,8 +2018,8 @@ sub AddRenewal { $sth->finish; # Update the renewal count on the item, and tell zebra to reindex - $renews = $biblio->{'renewals'} + 1; - ModItem({ renewals => $renews, onloan => $datedue->output('iso') }, $biblio->{'biblionumber'}, $itemnumber); + $renews = $item->{'renewals'} + 1; + ModItem( { renewals => $renews, onloan => $datedue->output('iso') }, undef, $itemnumber ); # Charge a new rental fee, if applicable? my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber ); @@ -2547,15 +2385,8 @@ sub CalcDateDue { my ($startdate,$loanlength,$branch,$borrower) = @_; my $datedue; - if(C4::Context->preference('useDaysMode') eq 'Days') { # ignoring calendar - my $timedue = time + ($loanlength) * 86400; - #FIXME - assumes now even though we take a startdate - my @datearr = localtime($timedue); - $datedue = C4::Dates->new( sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso'); - } else { - my $calendar = C4::Calendar->new( branchcode => $branch ); - $datedue = $calendar->addDate($startdate, $loanlength); - } + my $calendar = C4::Calendar->new( branchcode => $branch ); + $datedue = $calendar->addDate($startdate, $loanlength); # if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate if ( C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry} ) { @@ -2765,18 +2596,121 @@ sub CreateBranchTransferLimit { =head2 DeleteBranchTransferLimits - DeleteBranchTransferLimits(); + DeleteBranchTransferLimits($tobranch); =cut sub DeleteBranchTransferLimits { - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare("TRUNCATE TABLE branch_transfer_limits"); - $sth->execute(); + my $branch = shift; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("DELETE FROM branch_transfer_limits WHERE toBranch = ?"); + $sth->execute($branch); +} + +sub GetOfflineOperations { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT * FROM pending_offline_operations WHERE branchcode=? ORDER BY timestamp"); + $sth->execute(C4::Context->userenv->{'branch'}); + my $results = $sth->fetchall_arrayref({}); + $sth->finish; + return $results; +} + +sub GetOfflineOperation { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT * FROM pending_offline_operations WHERE operationid=?"); + $sth->execute( shift ); + my $result = $sth->fetchrow_hashref; + $sth->finish; + return $result; +} + +sub AddOfflineOperation { + my $dbh = C4::Context->dbh; + warn Data::Dumper::Dumper(@_); + my $sth = $dbh->prepare("INSERT INTO pending_offline_operations VALUES('',?,?,?,?,?,?)"); + $sth->execute( @_ ); + return "Added."; +} + +sub DeleteOfflineOperation { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("DELETE FROM pending_offline_operations WHERE operationid=?"); + $sth->execute( shift ); + return "Deleted."; +} + +sub ProcessOfflineOperation { + my $operation = shift; + + my $report; + if ( $operation->{action} eq 'return' ) { + $report = ProcessOfflineReturn( $operation ); + } elsif ( $operation->{action} eq 'issue' ) { + $report = ProcessOfflineIssue( $operation ); + } + + DeleteOfflineOperation( $operation->{operationid} ) if $operation->{operationid}; + + return $report; +} + +sub ProcessOfflineReturn { + my $operation = shift; + + my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); + + if ( $itemnumber ) { + my $issue = GetOpenIssue( $itemnumber ); + if ( $issue ) { + MarkIssueReturned( + $issue->{borrowernumber}, + $itemnumber, + undef, + $operation->{timestamp}, + ); + return "Success."; + } else { + return "Item not issued."; + } + } else { + return "Item not found."; + } +} + +sub ProcessOfflineIssue { + my $operation = shift; + + my $borrower = C4::Members::GetMemberDetails( undef, $operation->{cardnumber} ); # Get borrower from operation cardnumber + + if ( $borrower->{borrowernumber} ) { + my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); + my $issue = GetOpenIssue( $itemnumber ); + + if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned + MarkIssueReturned( + $issue->{borrowernumber}, + $itemnumber, + undef, + $operation->{timestamp}, + ); + } + AddIssue( + $borrower, + $operation->{'barcode'}, + undef, + 1, + $operation->{timestamp}, + undef, + ); + return "Success."; + } else { + return "Borrower not found."; + } } - 1; +1; __END__ diff --git a/C4/IssuingRules.pm b/C4/IssuingRules.pm new file mode 100644 index 0000000..b64b817 --- /dev/null +++ b/C4/IssuingRules.pm @@ -0,0 +1,261 @@ +package C4::IssuingRules; + +# Copyright 2009 BibLibre SARL +# +# 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 warnings; +use C4::Context; +use C4::Koha; +use C4::SQLHelper qw( SearchInTable InsertInTable UpdateInTable DeleteInTable ); +use Memoize; + +use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); + +BEGIN { + # set the version for version checking + $VERSION = 3.0.5; + @ISA = qw(Exporter); + @EXPORT = qw( + &GetIssuingRule + &GetIssuingRulesByBranchCode + &GetIssuingRules + &AddIssuingRule + &ModIssuingRule + &DelIssuingRule + ); +} + +=head1 NAME + +C4::IssuingRules - Koha issuing rules module + +=head1 SYNOPSIS + +use C4::IssuingRules; + +=head1 DESCRIPTION + +The functions in this module deal with issuing rules. + +=head1 FUNCTIONS + +=head2 GetIssuingRule + +Compute the issuing rule for an itemtype, a borrower category and a branch. +Returns a hashref from the issuingrules table. + +my $rule = &GetIssuingRule($categorycode, $itemtype, $branchcode); + +The rules are applied from most specific to less specific, using the first found in this order: + * same library, same patron type, same item type + * same library, same patron type, default item type + * same library, default patron type, same item type + * same library, default patron type, default item type + * default library, same patron type, same item type + * default library, same patron type, default item type + * default library, default patron type, same item type + * default library, default patron type, default item type + +The values in the returned hashref are inherited from a more generic rules if undef. + +=cut +#Caching GetIssuingRule +memoize('GetIssuingRule'); + +sub GetIssuingRule { + my ( $categorycode, $itemtype, $branchcode ) = @_; + $categorycode||="*"; + $itemtype||="*"; + $branchcode||="*"; + + # This configuration table defines the order of inheritance. We'll loop over it. + my @attempts = ( + [ "*" , "*" , "*" ], + [ "*" , $itemtype, "*" ], + [ $categorycode, "*" , "*" ], + [ $categorycode, $itemtype, "*" ], + [ "*" , "*" , $branchcode ], + [ "*" , $itemtype, $branchcode ], + [ $categorycode, "*" , $branchcode ], + [ $categorycode, $itemtype, $branchcode ], + ); + + # This complex query returns a nested hashref, so we can access a rule using : + # my $rule = $$rules{$categorycode}{$itemtype}{$branchcode}; + # this will be usefull in the inheritance computation code + my $dbh = C4::Context->dbh; + my $rules = $dbh->selectall_hashref( + "SELECT * FROM issuingrules where branchcode IN ('*',?) and itemtype IN ('*', ?) and categorycode IN ('*',?)", + ["branchcode", "itemtype", "categorycode"], + undef, + ( $branchcode, $itemtype, $categorycode ) + ); + + # This block is for inheritance. It loops over rules returned by the + # previous query. If a value is found in a more specific rule, it replaces + # the old value from the more generic rule. + my $oldrule; + for my $attempt ( @attempts ) { + if ( my $rule = $$rules{@$attempt[2]}{@$attempt[1]}{@$attempt[0]} ) { + if ( $oldrule ) { + for ( keys %$oldrule ) { + if ( defined $rule->{$_} ) { + $oldrule->{$_} = $rule->{$_}; + } + } + } else { + $oldrule = $rule; + } + } + } + if($oldrule){ + return $oldrule; + }else{ + return { + 'itemtype' => $itemtype, + 'categorycode' => $categorycode, + 'branchcode' => $branchcode, + 'holdspickupdelay' => 0, + # 'maxissueqty' => 0, + 'renewalsallowed' => 0, + 'firstremind' => 0, + 'accountsent' => 0, + 'reservecharge' => 0, + 'fine' => 0, + 'restrictedtype' => 0, + 'rentaldiscount' => 0, + 'chargename' => 0, + 'finedays' => 0, + 'holdrestricted' => 0, + 'allowonshelfholds' => 0, + 'reservesallowed' => 0, + 'chargeperiod' => 0, + # 'issuelength' => 0, + 'renewalperiod' => 0, + }; + } +} + +=head2 GetIssuingRulesByBranchCode + + my @issuingrules = &GetIssuingRulesByBranchCode($branchcode); + + Retruns a list of hashref from the issuingrules Koha table for a given + branchcode. + Each hashref will contain data from issuingrules plus human readable names of + patron and item categories. + +=cut + +sub GetIssuingRulesByBranchCode { + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare(" + SELECT issuingrules.*, itemtypes.description AS humanitemtype, categories.description AS humancategorycode + FROM issuingrules + LEFT JOIN itemtypes + ON (itemtypes.itemtype = issuingrules.itemtype) + LEFT JOIN categories + ON (categories.categorycode = issuingrules.categorycode) + WHERE issuingrules.branchcode = ? + ORDER BY humancategorycode, humanitemtype + "); + $sth->execute(shift); + + my $res = $sth->fetchall_arrayref({}); + + return @$res; +} + +=head2 GetIssuingRules + + my @issuingrules = &GetIssuingRules({ + branchcode => $branch, + categorycode => $input->param('categorycode'), + itemtype => $input->param('itemtype'), + }); + + Get an issuing rule from Koha database. + An alias for SearchInTable, see C4::SQLHelper for more help. + +=cut + +sub GetIssuingRules { + my $res = SearchInTable('issuingrules', shift); + return @$res; +} + +=head2 AddIssuingRule + + my $issuingrule = { + branchcode => $branch, + categorycode => $input->param('categorycode'), + itemtype => $input->param('itemtype'), + maxissueqty => $maxissueqty, + renewalsallowed => $input->param('renewalsallowed'), + reservesallowed => $input->param('reservesallowed'), + issuelength => $input->param('issuelength'), + fine => $input->param('fine'), + finedays => $input->param('finedays'), + firstremind => $input->param('firstremind'), + chargeperiod => $input->param('chargeperiod'), + }; + + &AddIssuingRule( $issuingrule ); + + Adds an issuing rule to Koha database. + An alias for InsertInTable, see C4::SQLHelper for more help. + +=cut + +sub AddIssuingRule { InsertInTable('issuingrules',shift); } + +=head2 ModIssuingRule + + &ModIssuingRule( $issuingrule ); + + Update an issuing rule of the Koha database. + An alias for UpdateInTable, see C4::SQLHelper for more help. + +=cut + +sub ModIssuingRule { UpdateInTable('issuingrules',shift); } + +=head2 DelIssuingRule + + DelIssuingRule({ + branchcode => $branch, + categorycode => $input->param('categorycode'), + itemtype => $input->param('itemtype'), + }); + + Delete an issuing rule from Koha database. + An alias for DeleteInTable, see C4::SQLHelper for more help. + +=cut + +sub DelIssuingRule { DeleteInTable('issuingrules',shift); } + +1; + +=head1 AUTHOR + +Koha Developement team <info at koha.org> + +Jean-Andr?? Santoni <jeanandre.santoni at biblibre.com> + +=cut diff --git a/C4/Overdues.pm b/C4/Overdues.pm index 032ca93..03b3d22 100644 --- a/C4/Overdues.pm +++ b/C4/Overdues.pm @@ -23,6 +23,7 @@ use strict; use Date::Calc qw/Today Date_to_Days/; use Date::Manip qw/UnixDate/; use C4::Circulation; +use C4::IssuingRules; use C4::Context; use C4::Accounts; use C4::Log; # logaction @@ -71,9 +72,6 @@ BEGIN { push @EXPORT, qw( &GetIssuesIteminfo ); - # - # &GetIssuingRules - delete. - # use C4::Circulation::GetIssuingRule instead. # subs to move to Members.pm push @EXPORT, qw( @@ -124,7 +122,7 @@ sub Getoverdues { SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode FROM issues LEFT JOIN items USING (itemnumber) - WHERE date_due < CURDATE() + WHERE DATE(date_due) < CURDATE() "; } else { $statement = " @@ -132,7 +130,7 @@ LEFT JOIN items USING (itemnumber) FROM issues LEFT JOIN items USING (itemnumber) LEFT JOIN biblioitems USING (biblioitemnumber) - WHERE date_due < CURDATE() + WHERE DATE(date_due) < CURDATE() "; } @@ -170,7 +168,7 @@ sub checkoverdues { LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber WHERE issues.borrowernumber = ? - AND issues.date_due < CURDATE()" + AND DATE(issues.date_due) < CURDATE()" ); # FIXME: SELECT * across 4 tables? do we really need the marc AND marcxml blobs?? $sth->execute($borrowernumber); @@ -245,7 +243,7 @@ sub CalcFine { my $daystocharge; # get issuingrules (fines part will be used) $debug and warn sprintf("CalcFine calling GetIssuingRule(%s, %s, %s)", $bortype, $item->{'itemtype'}, $branchcode); - my $data = C4::Circulation::GetIssuingRule($bortype, $item->{'itemtype'}, $branchcode); + my $data = GetIssuingRule($bortype, $item->{'itemtype'}, $branchcode); if($difference) { # if $difference is supplied, the difference has already been calculated, but we still need to adjust for the calendar. # use copy-pasted functions from calendar module. (deprecated -- these functions will be removed from C4::Overdues ). @@ -269,7 +267,7 @@ sub CalcFine { } else { # a zero (or null) chargeperiod means no charge. } - $amount = C4::Context->preference('maxFine') if(C4::Context->preference('maxFine') && ( $amount > C4::Context->preference('maxFine'))); + $amount = C4::Context->preference('MaxFine') if ( C4::Context->preference('MaxFine') && ( $amount > C4::Context->preference('MaxFine') ) ); $debug and warn sprintf("CalcFine returning (%s, %s, %s, %s)", $amount, $data->{'chargename'}, $days_minus_grace, $daystocharge); return ($amount, $data->{'chargename'}, $days_minus_grace, $daystocharge); # FIXME: chargename is NEVER populated anywhere. @@ -585,7 +583,7 @@ Returns the replacement cost of the item with the given item number. =cut -#' + sub ReplacementCost { my ($itemnum) = @_; my $dbh = C4::Context->dbh; @@ -604,60 +602,22 @@ sub ReplacementCost { return the total of fine -C<$itemnum> is item number - C<$borrowernumber> is the borrowernumber -=cut - +=cut sub GetFine { - my ( $itemnum, $borrowernumber ) = @_; + my ( $borrowernumber ) = @_; my $dbh = C4::Context->dbh(); my $query = "SELECT sum(amountoutstanding) FROM accountlines where accounttype like 'F%' - AND amountoutstanding > 0 AND itemnumber = ? AND borrowernumber=?"; + AND amountoutstanding > 0 AND borrowernumber=?"; my $sth = $dbh->prepare($query); - $sth->execute( $itemnum, $borrowernumber ); + $sth->execute( $borrowernumber ); my $data = $sth->fetchrow_hashref(); return ( $data->{'sum(amountoutstanding)'} ); } - -=head2 GetIssuingRules - -FIXME - This sub should be deprecated and removed. -It ignores branch and defaults. - - $data = &GetIssuingRules($itemtype,$categorycode); - -Looks up for all issuingrules an item info - -C<$itemnumber> is a reference-to-hash whose keys are all of the fields -from the borrowers and categories tables of the Koha database. Thus, - -C<$categorycode> contains information about borrowers category - -C<$data> contains all information about both the borrower and -category he or she belongs to. -=cut - -sub GetIssuingRules { - warn "GetIssuingRules is deprecated: use GetIssuingRule from C4::Circulation instead."; - my ($itemtype,$categorycode)=@_; - my $dbh = C4::Context->dbh(); - my $query=qq|SELECT * - FROM issuingrules - WHERE issuingrules.itemtype=? - AND issuingrules.categorycode=? - |; - my $sth = $dbh->prepare($query); - # print $query; - $sth->execute($itemtype,$categorycode); - return $sth->fetchrow_hashref; -} - - sub ReplacementCost2 { my ( $itemnum, $borrowernumber ) = @_; my $dbh = C4::Context->dbh(); @@ -956,7 +916,7 @@ returns a list of branch codes for branches with overdue rules defined. sub GetBranchcodesWithOverdueRules { my $dbh = C4::Context->dbh; - my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay1 IS NOT NULL AND branchcode <> ''"); + my $rqoverduebranches = $dbh->prepare("SELECT DISTINCT branchcode FROM overduerules WHERE delay1 IS NOT NULL "); $rqoverduebranches->execute; my @branches = map { shift @$_ } @{ $rqoverduebranches->fetchall_arrayref }; return @branches; @@ -1029,7 +989,7 @@ sub GetOverduerules { Check if the borrowers is already debarred -C<$debarredstatus> return 0 for not debarred and return 1 for debarred +C<$debarredstatus> return undef for not debarred and return end of debar date for debarred C<$borrowernumber> contains the borrower number @@ -1043,32 +1003,35 @@ sub CheckBorrowerDebarred { SELECT debarred FROM borrowers WHERE borrowernumber=? + AND debarred > NOW() |; my $sth = $dbh->prepare($query); $sth->execute($borrowernumber); - my ($debarredstatus) = $sth->fetchrow; - return ( $debarredstatus eq '1' ? 1 : 0 ); + my $debarredstatus= $sth->fetchrow; + return $debarredstatus; + } =head2 UpdateBorrowerDebarred - ($borrowerstatut) = &UpdateBorrowerDebarred($borrowernumber); + ($borrowerstatut) = &UpdateBorrowerDebarred($borrowernumber, $todate); update status of borrowers in borrowers table (field debarred) C<$borrowernumber> borrower number +C<$todate> end of bare =cut sub UpdateBorrowerDebarred{ - my($borrowernumber) = @_; + my($borrowernumber, $todate) = @_; my $dbh = C4::Context->dbh; my $query=qq|UPDATE borrowers - SET debarred='1' + SET debarred=? WHERE borrowernumber=? |; my $sth=$dbh->prepare($query); - $sth->execute($borrowernumber); + $sth->execute($todate, $borrowernumber); $sth->finish; return 1; } diff --git a/C4/Reserves.pm b/C4/Reserves.pm index fcf9209..dd60a61 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -22,6 +22,7 @@ package C4::Reserves; use strict; #use warnings; FIXME - Bug 2505 +use Date::Calc qw( Add_Delta_Days Time_to_Date Today); use C4::Context; use C4::Biblio; use C4::Members; @@ -32,10 +33,11 @@ use C4::Accounts; # for _koha_notify_reserve use C4::Members::Messaging; -use C4::Members qw(); +use C4::Members ; use C4::Letters; use C4::Branch qw( GetBranchDetail ); use C4::Dates qw( format_date_in_iso ); +use C4::IssuingRules; use List::MoreUtils qw( firstidx ); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @@ -91,11 +93,14 @@ BEGIN { @EXPORT = qw( &AddReserve + &GetMaxPickupDelay + &GetMaxPickupDate &GetReservesFromItemnumber &GetReservesFromBiblionumber &GetReservesFromBorrowernumber &GetReservesForBranch &GetReservesToBranch + &GetReservesControlBranch &GetReserveCount &GetReserveFee &GetReserveInfo @@ -113,13 +118,16 @@ BEGIN { &CheckReserves &CanBookBeReserved &CanItemBeReserved - &CancelReserve - &CancelExpiredReserves + &CanHoldOnShelf + &CancelReserve + &CancelExpiredReserves - &IsAvailableForItemLevelRequest - - &AlterPriority - &ToggleLowestPriority + &IsAvailableForItemLevelRequest + + &AlterPriority + &ToggleLowestPriority + &CanHoldMultipleItems + &BorrowerHasReserve ); } @@ -142,11 +150,17 @@ sub AddReserve { my $const = lc substr( $constraint, 0, 1 ); $resdate = format_date_in_iso( $resdate ) if ( $resdate ); $resdate = C4::Dates->today( 'iso' ) unless ( $resdate ); + my $item = C4::Items::GetItem($checkitem); + my @maxPickupDate = GetMaxPickupDate($resdate, $borrowernumber, $item); + my $maxpickupdate = sprintf( "%d-%02d-%02d", @maxPickupDate ); if ($expdate) { $expdate = format_date_in_iso( $expdate ); + my @expdate = split("-", $expdate); + $expdate = $maxpickupdate if Delta_Days(@expdate[ 0 .. 2 ], @maxPickupDate[ 0 .. 2 ]) < 0; } else { - undef $expdate; # make reserves.expirationdate default to null rather than '0000-00-00' + $expdate = $maxpickupdate; } + undef $expdate if $resdate eq $maxpickupdate; # make reserves.expirationdate default to null rather than '0000-00-00' if ( C4::Context->preference( 'AllowHoldDateInFuture' ) ) { # Make room in reserves for this before those of a later reserve date $priority = _ShiftPriorityByDateAndPriority( $biblionumber, $resdate, $priority ); @@ -248,24 +262,27 @@ sub GetReservesFromBiblionumber { # Find the desired items in the reserves my $query = " - SELECT branchcode, - timestamp AS rtimestamp, - priority, - biblionumber, - borrowernumber, - reservedate, - constrainttype, - found, - itemnumber, - reservenotes, - expirationdate, - lowestPriority + SELECT reserves.reservenumber, + reserves.branchcode, + reserves.timestamp AS rtimestamp, + reserves.priority, + reserves.biblionumber, + reserves.borrowernumber, + reserves.reservedate, + reserves.constrainttype, + reserves.found, + reserves.itemnumber, + reserves.reservenotes, + reserves.expirationdate, + reserves.lowestPriority, + biblioitems.itemtype FROM reserves - WHERE biblionumber = ? "; + LEFT JOIN biblioitems ON biblioitems.biblionumber = reserves.biblionumber + WHERE reserves.biblionumber = ? "; unless ( $all_dates ) { $query .= "AND reservedate <= CURRENT_DATE()"; } - $query .= "ORDER BY priority"; + $query .= "ORDER BY reserves.priority"; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); my @results; @@ -371,9 +388,40 @@ sub GetReservesFromBorrowernumber { return @$data; } #------------------------------------------------------------------------------------- +sub BorrowerHasReserve { + my ( $borrowernumber, $biblionumber, $itemnumber ) = @_; + my $dbh = C4::Context->dbh; + my $sth; + + if ( $biblionumber ) { + $sth = $dbh->prepare(" + SELECT COUNT(*) AS hasReserve + FROM reserves + WHERE borrowernumber = ? + AND biblionumber = ? + ORDER BY reservedate + "); + $sth->execute( $borrowernumber, $biblionumber ); + } elsif ( $itemnumber ) { + $sth = $dbh->prepare(" + SELECT COUNT(*) AS hasReserve + FROM reserves + WHERE borrowernumber = ? + AND itemnumber = ? + ORDER BY reservedate + "); + $sth->execute( $borrowernumber, $itemnumber ); + } else { + return -1; + } + + my $data = $sth->fetchrow_hashref(); + return $data->{'hasReserve'}; +} + =head2 CanBookBeReserved - $error = &CanBookBeReserved($borrowernumber, $biblionumber) +$error = &CanBookBeReserved($borrowernumber, $biblionumber) =cut @@ -397,7 +445,7 @@ This function return 1 if an item can be issued by this borrower. sub CanItemBeReserved{ my ($borrowernumber, $itemnumber) = @_; - + my $dbh = C4::Context->dbh; my $allowedreserves = 0; @@ -405,7 +453,7 @@ sub CanItemBeReserved{ my $itype = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype"; # we retrieve borrowers and items informations # - my $item = GetItem($itemnumber); + my $item = C4::Items::GetItem($itemnumber); my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber); # we retrieve user rights on this itemtype and branchcode @@ -436,22 +484,31 @@ sub CanItemBeReserved{ my $branchfield = "reserves.branchcode"; if( $controlbranch eq "ItemHomeLibrary" ){ - $branchfield = "items.homebranch"; - $branchcode = $item->{homebranch}; + my $field=C4::Context->preference("HomeOrHoldingBranch")||"homebranch"; + $branchfield = "items.$field"; + $branchcode = $item->{$field}; }elsif( $controlbranch eq "PatronLibrary" ){ $branchfield = "borrowers.branchcode"; $branchcode = $borrower->{branchcode}; } - # we retrieve rights - $sth->execute($categorycode, $itemtype, $branchcode); - if(my $rights = $sth->fetchrow_hashref()){ - $itemtype = $rights->{itemtype}; - $allowedreserves = $rights->{reservesallowed}; + # we retrieve user rights on this itemtype and branchcode + my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{$itype}, $branchcode); + return 0 if( defined $issuingrule->{reservesallowed} && not $issuingrule->{reservesallowed} ); + + # We retrieve the count of reserves allowed for this category code + $issuingrule = GetIssuingRule ($borrower->{categorycode}, "*", "*"); + + if($issuingrule){ + $itemtype = $issuingrule->{itemtype}; + $allowedreserves = $issuingrule->{reservesallowed}; }else{ $itemtype = '*'; } + return 0 if ($issuingrule->{reservesallowed}==0 || + ($issuingrule->{holdrestricted}== 1 && !($branchcode eq $borrower->{branchcode})) + ); # we retrieve count $querycount .= "AND $branchfield = ?"; @@ -477,6 +534,106 @@ sub CanItemBeReserved{ return 0; } } + +=item GetMaxPickupDelay + +$resallowed = &GetMaxPickupDelay($borrowernumber, $itemnumber) + +this function return the number of allowed reserves. + +=cut + +sub GetMaxPickupDelay { + my ($borrowernumber, $itemnumber) = @_; + + my $dbh = C4::Context->dbh; + my $allowedreserves = 0; + + my $itype = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype"; + + # we retrieve borrowers and items informations # + my $item = C4::Items::GetItem($itemnumber); + my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber); + my $controlbranch = GetReservesControlBranch($borrower,$item); + + # we retrieve user rights on this itemtype and branchcode + my $sth = $dbh->prepare("SELECT holdspickupdelay + FROM issuingrules + WHERE categorycode=? + AND itemtype=? + AND branchcode=? + AND holdspickupdelay IS NOT NULL" + ); + + my $itemtype = $item->{$itype}; + my $borrowertype = $borrower->{categorycode}; + my $branchcode = $controlbranch; + + $sth->execute( $borrowertype, $itemtype, $branchcode ); + my $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( $borrowertype, "*", $branchcode ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( "*", $itemtype, $branchcode ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( "*", "*", $branchcode ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( $borrowertype, $itemtype, "*" ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( $borrowertype, "*", "*" ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( "*", $itemtype, "*" ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + $sth->execute( "*", "*", "*" ); + $pickupdelay = $sth->fetchrow_hashref; + return $pickupdelay->{holdspickupdelay} + if defined($pickupdelay) && $pickupdelay->{holdspickupdelay} ne 'NULL'; + + # if nothing found, return no rights + return 0; +} + +=item GetMaxPickupDate + +$maxpickupdate = &GetMaxPickupDate($date); + +this function return the max pickup date. +(e.g. : the date after which the hold will be considered cancelled) + +=cut + +sub GetMaxPickupDate{ + my $inputdate=shift; + my $borrowernumber=shift; + my $item=shift; + return unless $inputdate; + my @date = split(/-/,$inputdate); + my $delay = GetMaxPickupDelay($borrowernumber, $item->{'itemnumber'}); + ( @date ) = + Add_Delta_Days( @date[0..2], $delay); + return @date; +} + #-------------------------------------------------------------------------------- =head2 GetReserveCount @@ -516,21 +673,22 @@ sub GetOtherReserves { my $nextreservinfo; my ( $restype, $checkreserves ) = CheckReserves($itemnumber); if ($checkreserves) { - my $iteminfo = GetItem($itemnumber); + my $iteminfo = C4::Items::GetItem($itemnumber); if ( $iteminfo->{'holdingbranch'} ne $checkreserves->{'branchcode'} ) { $messages->{'transfert'} = $checkreserves->{'branchcode'}; #minus priorities of others reservs ModReserveMinusPriority( $itemnumber, $checkreserves->{'borrowernumber'}, - $iteminfo->{'biblionumber'} + $iteminfo->{'biblionumber'}, + $checkreserves->{'reservenumber'} ); #launch the subroutine dotransfer C4::Items::ModItemTransfer( $itemnumber, $iteminfo->{'holdingbranch'}, - $checkreserves->{'branchcode'} + $checkreserves->{'branchcode'}, ), ; } @@ -541,7 +699,8 @@ sub GetOtherReserves { ModReserveMinusPriority( $itemnumber, $checkreserves->{'borrowernumber'}, - $iteminfo->{'biblionumber'} + $iteminfo->{'biblionumber'}, + $checkreserves->{'reservenumber'} ); ModReserveStatus($itemnumber,'W'); } @@ -655,6 +814,26 @@ sub GetReserveFee { return $fee; } +=head2 GetReservesControlBranch + +$branchcode = &GetReservesControlBranch($borrower, $item) + +Returns the branchcode to consider to check hold rules against + +=cut +sub GetReservesControlBranch{ + my ($borrower, $item) = @_; + my $controlbranch = C4::Context->preference('ReservesControlBranch'); + my $hbr = C4::Context->preference('HomeOrHoldingBranch')||"homebranch"; + my $branchcode="*"; + if($controlbranch eq "ItemHomeLibrary"){ + $branchcode = $item->{$hbr}; + } elsif($controlbranch eq "PatronLibrary"){ + $branchcode = $borrower->{'branchcode'}; + } + return $branchcode; +} + =head2 GetReservesToBranch @transreserv = GetReservesToBranch( $frombranch ); @@ -838,23 +1017,18 @@ sub CancelExpiredReserves { $sth->execute(); while ( my $res = $sth->fetchrow_hashref() ) { - CancelReserve( $res->{'biblionumber'}, '', $res->{'borrowernumber'} ); + CancelReserve( $res->{'reservenumber'}, $res->{'biblionumber'} ); } } =head2 CancelReserve - &CancelReserve($biblionumber, $itemnumber, $borrowernumber); + &CancelReserve( $reservenumber, $biblionumber ); Cancels a reserve. -Use either C<$biblionumber> or C<$itemnumber> to specify the item to -cancel, but not both: if both are given, C<&CancelReserve> does -nothing. - -C<$borrowernumber> is the borrower number of the patron on whose -behalf the book was reserved. +C<$reservenumber> is the unique key for the reserve to be canceled. If C<$biblionumber> was given, C<&CancelReserve> also adjusts the priorities of the other people who are waiting on the book. @@ -862,9 +1036,14 @@ priorities of the other people who are waiting on the book. =cut sub CancelReserve { - my ( $biblio, $item, $borr ) = @_; + my ( $reservenumber, $biblio ) = @_; my $dbh = C4::Context->dbh; - if ( $item and $borr ) { + + my $sth = $dbh->prepare('SELECT * FROM reserves WHERE reservenumber = ?'); + $sth->execute( $reservenumber ); + my $reserve = $sth->fetchrow_hashref(); + + if ( $reserve->{'found'} eq 'W' ) { # removing a waiting reserve record.... # update the database... my $query = " @@ -872,27 +1051,46 @@ sub CancelReserve { SET cancellationdate = now(), found = Null, priority = 0 - WHERE itemnumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? "; my $sth = $dbh->prepare($query); - $sth->execute( $item, $borr ); - $sth->finish; + $sth->execute( $reservenumber ); + + # get reserve information to place into old_reserves $query = " INSERT INTO old_reserves SELECT * FROM reserves - WHERE itemnumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? "; $sth = $dbh->prepare($query); - $sth->execute( $item, $borr ); + $sth->execute( $reservenumber ); + my $holditem = $sth->fetchrow_hashref; + my $insert_fields = ''; + my $value_fields = ''; + foreach my $column ('borrowernumber','reservedate','biblionumber','constrainttype','branchcode','notificationdate','reminderdate','cancellationdate','reservenotes','priority','found','itemnumber','waitingdate','expirationdate') { + if (defined($holditem->{$column})) { + if (length($insert_fields)) { + $insert_fields .= ",$column"; + $value_fields .= ",\'$holditem->{$column}\'"; + } + else { + $insert_fields .= "$column"; + $value_fields .= "\'$holditem->{$column}\'"; + } + } + } + $query = qq/ + INSERT INTO old_reserves ($insert_fields) + VALUES ($value_fields) + /; + $sth = $dbh->prepare($query); + $sth->execute(); $query = " DELETE FROM reserves - WHERE itemnumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? "; $sth = $dbh->prepare($query); - $sth->execute( $item, $borr ); + $sth->execute( $reservenumber ); } else { # removing a reserve record.... @@ -900,52 +1098,72 @@ sub CancelReserve { my $priority; my $query = qq/ SELECT priority FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? AND cancellationdate IS NULL AND itemnumber IS NULL /; my $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borr ); + $sth->execute( $reservenumber ); ($priority) = $sth->fetchrow_array; $sth->finish; $query = qq/ UPDATE reserves SET cancellationdate = now(), found = Null, - priority = 0 - WHERE biblionumber = ? - AND borrowernumber = ? + priority = 0, + expirationdate = NULL + WHERE reservenumber = ? /; # update the database, removing the record... $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borr ); - $sth->finish; + $sth->execute( $reservenumber ); $query = qq/ INSERT INTO old_reserves SELECT * FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? + /; + $sth = $dbh->prepare($query); + $sth->execute( $reservenumber ); + my $holditem = $sth->fetchrow_hashref; + + my $insert_fields = ''; + my $value_fields = ''; + foreach my $column ('borrowernumber','reservedate','biblionumber','constrainttype','branchcode','notificationdate','reminderdate','cancellationdate','reservenotes','priority','found','itemnumber','waitingdate','expirationdate') { + if (defined($holditem->{$column})) { + if (length($insert_fields)) { + $insert_fields .= ",$column"; + $value_fields .= ",\'$holditem->{$column}\'"; + } + else { + $insert_fields .= "$column"; + $value_fields .= "\'$holditem->{$column}\'"; + } + } + } + $query = qq/ + INSERT INTO old_reserves ($insert_fields) + VALUES ($value_fields) /; $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borr ); + $sth->execute(); $query = qq/ DELETE FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? /; $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borr ); + $sth->execute( $reservenumber ); # now fix the priority on the others.... - _FixPriority( $biblio, $borr ); + _FixPriority( '', '', $priority,'', $reservenumber ); } } -=head2 ModReserve +=item ModReserve + +=over 4 ModReserve($rank, $biblio, $borrower, $branch[, $itemnumber]) @@ -978,52 +1196,48 @@ itemnumber and supplying itemnumber. sub ModReserve { #subroutine to update a reserve - my ( $rank, $biblio, $borrower, $branch , $itemnumber) = @_; + my ( $rank, $biblio, $borrower, $branch , $itemnumber, $reservenumber) = @_; return if $rank eq "W"; return if $rank eq "n"; my $dbh = C4::Context->dbh; if ( $rank eq "del" ) { my $query = qq/ UPDATE reserves - SET cancellationdate=now() - WHERE biblionumber = ? - AND borrowernumber = ? + SET cancellationdate=now(), + expirationdate = NULL + WHERE reservenumber = ? /; my $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borrower ); + $sth->execute( $reservenumber ); $sth->finish; $query = qq/ INSERT INTO old_reserves - SELECT * - FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + SELECT * FROM reserves + WHERE reservenumber = ? /; $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borrower ); + $sth->execute( $reservenumber ); $query = qq/ DELETE FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? /; $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borrower ); + $sth->execute( $reservenumber ); } elsif ($rank =~ /^\d+/ and $rank > 0) { my $query = qq/ UPDATE reserves SET priority = ? ,branchcode = ?, itemnumber = ?, found = NULL, waitingdate = NULL - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? /; my $sth = $dbh->prepare($query); - $sth->execute( $rank, $branch,$itemnumber, $biblio, $borrower); + $sth->execute( $rank, $branch, $itemnumber, $reservenumber ); $sth->finish; - _FixPriority( $biblio, $borrower, $rank); + _FixPriority( $biblio, $borrower, $rank, '', $reservenumber); } } -=head2 ModReserveFill +=item ModReserveFill &ModReserveFill($reserve); @@ -1042,16 +1256,17 @@ sub ModReserveFill { my $biblionumber = $res->{'biblionumber'}; my $borrowernumber = $res->{'borrowernumber'}; my $resdate = $res->{'reservedate'}; + my $resnumber = $res->{'reservenumber'}; # get the priority on this record.... my $priority; my $query = "SELECT priority FROM reserves - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE borrowernumber = ? + AND reservenumber = ? AND reservedate = ?"; my $sth = $dbh->prepare($query); - $sth->execute( $biblionumber, $borrowernumber, $resdate ); + $sth->execute( $resnumber, $borrowernumber, $resdate ); ($priority) = $sth->fetchrow_array; $sth->finish; @@ -1059,35 +1274,35 @@ sub ModReserveFill { $query = "UPDATE reserves SET found = 'F', priority = 0 - WHERE biblionumber = ? + WHERE reservenumber = ? AND reservedate = ? AND borrowernumber = ? "; $sth = $dbh->prepare($query); - $sth->execute( $biblionumber, $resdate, $borrowernumber ); + $sth->execute( $resnumber, $resdate, $borrowernumber ); $sth->finish; # move to old_reserves $query = "INSERT INTO old_reserves SELECT * FROM reserves - WHERE biblionumber = ? + WHERE reservenumber = ? AND reservedate = ? AND borrowernumber = ? "; $sth = $dbh->prepare($query); - $sth->execute( $biblionumber, $resdate, $borrowernumber ); + $sth->execute( $resnumber, $resdate, $borrowernumber ); $query = "DELETE FROM reserves - WHERE biblionumber = ? + WHERE reservenumber = ? AND reservedate = ? AND borrowernumber = ? "; $sth = $dbh->prepare($query); - $sth->execute( $biblionumber, $resdate, $borrowernumber ); + $sth->execute( $resnumber, $resdate, $borrowernumber ); # now fix the priority on the others (if the priority wasn't # already sorted!).... unless ( $priority == 0 ) { - _FixPriority( $biblionumber, $borrowernumber ); + _FixPriority( $priority, $biblionumber,undef,undef, $res->{reservenumber} ); } } @@ -1104,7 +1319,6 @@ $newstatus is the new status. =cut sub ModReserveStatus { - #first : check if we have a reservation for this item . my ($itemnumber, $newstatus) = @_; my $dbh = C4::Context->dbh; @@ -1138,9 +1352,8 @@ take care of the waiting status =cut sub ModReserveAffect { - my ( $itemnumber, $borrowernumber,$transferToDo ) = @_; + my ( $itemnumber, $borrowernumber,$transferToDo, $reservenumber ) = @_; my $dbh = C4::Context->dbh; - # we want to attach $itemnumber to $borrowernumber, find the biblionumber # attached to $itemnumber my $sth = $dbh->prepare("SELECT biblionumber FROM items WHERE itemnumber=?"); @@ -1158,27 +1371,52 @@ sub ModReserveAffect { $query = " UPDATE reserves SET priority = 0, - itemnumber = ?, - found = 'T' - WHERE borrowernumber = ? - AND biblionumber = ? + itemnumber = ? + WHERE reservenumber = ? "; } else { # affect the reserve to Waiting as well. - $query = " - UPDATE reserves - SET priority = 0, - found = 'W', - waitingdate=now(), - itemnumber = ? - WHERE borrowernumber = ? - AND biblionumber = ? - "; + my $holdperiod = C4::Context->preference('ReservesMaxPickUpDelay'); + if ((!defined($holdperiod)) || ($holdperiod eq '') || ($holdperiod == 0)) { + $query = " + UPDATE reserves + SET priority = 0, + found = 'W', + waitingdate=now(), + itemnumber = ? + WHERE reservenumber = ? + "; + } + else { + my ($holdexpyear,$holdexpmonth,$holdexpday) = Today(); + my $holdstartdate = C4::Dates->new(sprintf "%02d/%02d/%04d",$holdexpmonth,$holdexpday,$holdexpyear, 'us'); + + # Grab branch for calendar purposes + $sth = $dbh->prepare("SELECT branchcode FROM reserves WHERE borrowernumber=? AND biblionumber=?"); + $sth->execute($borrowernumber,$biblionumber); + my ($branch) = $sth->fetchrow; + + # Check to see if hold expiration date falls on a closed library day. + # Note the useDaysMode syspref will need to be set to Calendar for + # the code to advance to the next non-closed day. + my $calendar = C4::Calendar->new( branchcode => $branch); + my $holdexpdate = $calendar->addDate($holdstartdate, $holdperiod); + my $sqlexpdate = $holdexpdate->output('iso'); + $query = " + UPDATE reserves + SET priority = 0, + found = 'W', + waitingdate=now(), + itemnumber = ?, + expirationdate='$sqlexpdate' + WHERE reservenumber = ? + "; + } } $sth = $dbh->prepare($query); - $sth->execute( $itemnumber, $borrowernumber,$biblionumber); - _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf ); + $sth->execute( $itemnumber, $reservenumber ); + _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber, $reservenumber ) if ( !$transferToDo && !$already_on_shelf ); if ( C4::Context->preference("ReturnToShelvingCart") ) { CartToShelf( $itemnumber ); @@ -1218,23 +1456,21 @@ Reduce the values of queuded list =cut sub ModReserveMinusPriority { - my ( $itemnumber, $borrowernumber, $biblionumber ) = @_; - + my ( $itemnumber, $borrowernumber, $biblionumber, $reservenumber ) = @_; #first step update the value of the first person on reserv my $dbh = C4::Context->dbh; my $query = " UPDATE reserves SET priority = 0 , itemnumber = ? - WHERE borrowernumber=? - AND biblionumber=? + WHERE reservenumber=? "; my $sth_upd = $dbh->prepare($query); - $sth_upd->execute( $itemnumber, $borrowernumber, $biblionumber ); + $sth_upd->execute( $itemnumber, $reservenumber ); # second step update all others reservs - _FixPriority($biblionumber, $borrowernumber, '0'); + _FixPriority($biblionumber, $borrowernumber, '0', '', $reservenumber); } -=head2 GetReserveInfo +=item GetReserveInfo &GetReserveInfo($borrowernumber,$biblionumber); @@ -1319,7 +1555,7 @@ and canreservefromotherbranches. sub IsAvailableForItemLevelRequest { my $itemnumber = shift; - my $item = GetItem($itemnumber); + my $item = C4::Items::GetItem($itemnumber); # must check the notforloan setting of the itemtype # FIXME - a lot of places in the code do this @@ -1354,10 +1590,10 @@ sub IsAvailableForItemLevelRequest { $notforloan_per_itemtype; - if (C4::Context->preference('AllowOnShelfHolds')) { + if (CanHoldOnShelf($itemnumber)) { return $available_per_item; } else { - return ($available_per_item and ($item->{onloan} or GetReserveStatus($itemnumber) eq "W")); + return ($available_per_item and ($item->{onloan} or GetReserveStatus($itemnumber) eq "W")); } } @@ -1385,15 +1621,15 @@ sub AlterPriority { my $priority = $reserve->{'priority'}; $priority = $where eq 'up' ? $priority - 1 : $priority + 1; - _FixPriority( $biblionumber, $borrowernumber, $priority ) + _FixPriority( $biblionumber, $borrowernumber, $priority ,undef,$reserve->{reservenumber}) } elsif ( $where eq 'top' ) { - _FixPriority( $biblionumber, $borrowernumber, '1' ) + _FixPriority( $biblionumber, $borrowernumber, '1',undef,$reserve->{reservenumber} ) } elsif ( $where eq 'bottom' ) { - _FixPriority( $biblionumber, $borrowernumber, '999999' ) + _FixPriority( $biblionumber, $borrowernumber, '999999',undef,$reserve->{reservenumber} ) } } @@ -1416,18 +1652,50 @@ sub ToggleLowestPriority { WHERE biblionumber = ? AND borrowernumber = ?" ); - $sth->execute( - $biblionumber, - $borrowernumber, - ); + $sth->execute( $biblionumber, $borrowernumber, ); $sth->finish; _FixPriority( $biblionumber, $borrowernumber, '999999' ); } +=head2 CanHoldOnShelf + +my $canhold = &CanHoldOnShelf($itemnumber); + + Check if a book can be hold on shelf. + +=cut + +sub CanHoldOnShelf { + my ($itemnumber) = @_; + + my $item = C4::Items::GetItem($itemnumber); + my $itemtype = C4::Context->preference('item-level_itypes'); + $itemtype = $itemtype ? $item->{itype} : $item->{itemtype} ; + my $branch = $item->{C4::Context->preference('HomeOrHoldingBranch')}; + + my $issuingrule = GetIssuingRule('*', $itemtype, $branch); + return $issuingrule->{allowonshelfholds}; + +} + +sub CanHoldMultipleItems { + my ( $itemtype ) = @_; + + my @multi_itemtypes = split( / /, C4::Context->preference('AllowMultipleHoldsPerBib') ); + for my $mtype ( @multi_itemtypes ) { + if ( $itemtype eq $mtype ) { + return 1; + } + } + + return 0; +} + =head2 _FixPriority +>>>>>>> [MT2355] Ergonomy improvement in smart rule management - &_FixPriority($biblio,$borrowernumber,$rank,$ignoreSetLowestRank); +&_FixPriority($biblio,$borrowernumber,$rank,$ignoreSetLowestRank,$reservenumber); Only used internally (so don't export it) Changed how this functions works # @@ -1439,7 +1707,7 @@ in new priority rank =cut sub _FixPriority { - my ( $biblio, $borrowernumber, $rank, $ignoreSetLowestRank ) = @_; + my ( $biblio, $borrowernumber, $rank, $ignoreSetLowestRank, $reservenumber ) = @_; my $dbh = C4::Context->dbh; if ( $rank eq "del" ) { CancelReserve( $biblio, undef, $borrowernumber ); @@ -1450,12 +1718,11 @@ sub _FixPriority { my $query = qq/ UPDATE reserves SET priority = 0 - WHERE biblionumber = ? - AND borrowernumber = ? - AND found IN ('W', 'T') + WHERE reservenumber = ? + AND found IN ('W',"T") /; my $sth = $dbh->prepare($query); - $sth->execute( $biblio, $borrowernumber ); + $sth->execute( $reservenumber ); } my @priority; my @reservedates; @@ -1466,7 +1733,7 @@ sub _FixPriority { # This is wrong a waiting reserve has W set # The assumption that having an itemnumber set means waiting is wrong and should be corrected any place it occurs my $query = qq/ - SELECT borrowernumber, reservedate, constrainttype + SELECT borrowernumber, reservedate, constrainttype, reservenumber FROM reserves WHERE biblionumber = ? AND ((found <> 'W' AND found <> 'T') or found is NULL) @@ -1501,16 +1768,15 @@ sub _FixPriority { $query = " UPDATE reserves SET priority = ? - WHERE biblionumber = ? - AND borrowernumber = ? + WHERE reservenumber = ? AND reservedate = ? AND found IS NULL "; $sth = $dbh->prepare($query); for ( my $j = 0 ; $j < @priority ; $j++ ) { $sth->execute( - $j + 1, $biblio, - $priority[$j]->{'borrowernumber'}, + $j + 1, + $priority[$j]->{'reservenumber'}, $priority[$j]->{'reservedate'} ); $sth->finish; @@ -1550,15 +1816,16 @@ sub _Findgroupreserve { # TODO: consolidate at least the SELECT portion of the first 2 queries to a common $select var. # check for exact targetted match my $item_level_target_query = qq/ - SELECT reserves.biblionumber AS biblionumber, - reserves.borrowernumber AS borrowernumber, - reserves.reservedate AS reservedate, - reserves.branchcode AS branchcode, - reserves.cancellationdate AS cancellationdate, - reserves.found AS found, - reserves.reservenotes AS reservenotes, - reserves.priority AS priority, - reserves.timestamp AS timestamp, + SELECT reserves.reservenumber AS reservenumber, + reserves.biblionumber AS biblionumber, + reserves.borrowernumber AS borrowernumber, + reserves.reservedate AS reservedate, + reserves.branchcode AS branchcode, + reserves.cancellationdate AS cancellationdate, + reserves.found AS found, + reserves.reservenotes AS reservenotes, + reserves.priority AS priority, + reserves.timestamp AS timestamp, biblioitems.biblioitemnumber AS biblioitemnumber, reserves.itemnumber AS itemnumber FROM reserves @@ -1580,15 +1847,16 @@ sub _Findgroupreserve { # check for title-level targetted match my $title_level_target_query = qq/ - SELECT reserves.biblionumber AS biblionumber, - reserves.borrowernumber AS borrowernumber, - reserves.reservedate AS reservedate, - reserves.branchcode AS branchcode, - reserves.cancellationdate AS cancellationdate, - reserves.found AS found, - reserves.reservenotes AS reservenotes, - reserves.priority AS priority, - reserves.timestamp AS timestamp, + SELECT reserves.reservenumber AS reservenumber, + reserves.biblionumber AS biblionumber, + reserves.borrowernumber AS borrowernumber, + reserves.reservedate AS reservedate, + reserves.branchcode AS branchcode, + reserves.cancellationdate AS cancellationdate, + reserves.found AS found, + reserves.reservenotes AS reservenotes, + reserves.priority AS priority, + reserves.timestamp AS timestamp, biblioitems.biblioitemnumber AS biblioitemnumber, reserves.itemnumber AS itemnumber FROM reserves @@ -1609,15 +1877,16 @@ sub _Findgroupreserve { return @results if @results; my $query = qq/ - SELECT reserves.biblionumber AS biblionumber, - reserves.borrowernumber AS borrowernumber, - reserves.reservedate AS reservedate, - reserves.branchcode AS branchcode, - reserves.cancellationdate AS cancellationdate, - reserves.found AS found, - reserves.reservenotes AS reservenotes, - reserves.priority AS priority, - reserves.timestamp AS timestamp, + SELECT reserves.reservenumber AS reservenumber, + reserves.biblionumber AS biblionumber, + reserves.borrowernumber AS borrowernumber, + reserves.reservedate AS reservedate, + reserves.branchcode AS branchcode, + reserves.cancellationdate AS cancellationdate, + reserves.found AS found, + reserves.reservenotes AS reservenotes, + reserves.priority AS priority, + reserves.timestamp AS timestamp, reserveconstraints.biblioitemnumber AS biblioitemnumber, reserves.itemnumber AS itemnumber FROM reserves @@ -1649,30 +1918,29 @@ ModReserveAffect, _not_ ModReserveFill) =cut sub _koha_notify_reserve { - my ($itemnumber, $borrowernumber, $biblionumber) = @_; + my ($itemnumber, $borrowernumber, $biblionumber, $reservenumber) = @_; - my $dbh = C4::Context->dbh; - my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); + my $dbh = C4::Context->dbh; + my $borrower = C4::Members::GetMember( 'borrowernumber'=> $borrowernumber ); my $letter_code; my $print_mode = 0; my $messagingprefs; - if ( $borrower->{'email'} || $borrower->{'smsalertnumber'} ) { + if ( C4::Members::GetFirstValidEmailAddress($borrowernumber) || $borrower->{'smsalertnumber'} ) { $messagingprefs = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber, message_name => 'Hold Filled' } ); return if ( !defined( $messagingprefs->{'letter_code'} ) ); $letter_code = $messagingprefs->{'letter_code'}; } else { - $letter_code = 'HOLD_PRINT'; + $letter_code = 'HOLD'; $print_mode = 1; } my $sth = $dbh->prepare(" SELECT * FROM reserves - WHERE borrowernumber = ? - AND biblionumber = ? + WHERE reservenumber = ? "); - $sth->execute( $borrowernumber, $biblionumber ); + $sth->execute( $reservenumber ); my $reserve = $sth->fetchrow_hashref; my $branch_details = GetBranchDetail( $reserve->{'branchcode'} ); @@ -1685,6 +1953,7 @@ sub _koha_notify_reserve { C4::Letters::parseletter( $letter, 'borrowers', $borrowernumber ); C4::Letters::parseletter( $letter, 'biblio', $biblionumber ); C4::Letters::parseletter( $letter, 'reserves', $borrowernumber, $biblionumber ); + C4::Letters::parseletter( $letter, 'items', $itemnumber ); if ( $reserve->{'itemnumber'} ) { C4::Letters::parseletter( $letter, 'items', $reserve->{'itemnumber'} ); diff --git a/admin/branch_transfer_limits.pl b/admin/branch_transfer_limits.pl index 1b89efb..7028a90 100755 --- a/admin/branch_transfer_limits.pl +++ b/admin/branch_transfer_limits.pl @@ -83,13 +83,13 @@ while ( my $row = $sth->fetchrow_hashref ) { ## If Form Data Passed, Update the Database if ( $input->param('updateLimits') ) { - DeleteBranchTransferLimits(); + DeleteBranchTransferLimits($branchcode); foreach my $code ( @codes ) { - foreach my $toBranch ( @branchcodes ) { - my $isSet = not $input->param( $code . "_" . $toBranch); + foreach my $fromBranch ( @branchcodes ) { + my $isSet = not $input->param( $code . "_" . $fromBranch); if ( $isSet ) { - CreateBranchTransferLimit( $toBranch, $branchcode, $code ); + CreateBranchTransferLimit( $branchcode, $fromBranch, $code ); } } } @@ -107,18 +107,18 @@ my $branchcount = scalar(@branchcode_loop); ## Build the default data my @codes_loop; foreach my $code ( @codes ) { - my @to_branch_loop; + my @from_branch_loop; my %row_data; $row_data{ code } = $code; - $row_data{ to_branch_loop } = \@to_branch_loop; - foreach my $toBranch ( @branchcodes ) { + $row_data{ from_branch_loop } = \@from_branch_loop; + foreach my $fromBranch ( @branchcodes ) { my %row_data; - my $isChecked = IsBranchTransferAllowed( $toBranch, $branchcode, $code ); + my $isChecked = IsBranchTransferAllowed( $branchcode, $fromBranch, $code ); $row_data{ code } = $code; - $row_data{ toBranch } = $toBranch; + $row_data{ fromBranch } = $fromBranch; $row_data{ isChecked } = $isChecked; - $row_data{ toBranchname } = GetBranchName($toBranch); - push( @to_branch_loop, \%row_data ); + $row_data{ fromBranchname } = GetBranchName($fromBranch); + push( @from_branch_loop, \%row_data ); } push( @codes_loop, \%row_data ); diff --git a/admin/smart-rules-service.pl b/admin/smart-rules-service.pl new file mode 100755 index 0000000..3fca0ee --- /dev/null +++ b/admin/smart-rules-service.pl @@ -0,0 +1,59 @@ +#!/usr/bin/perl + +# 2009 BibLibre <jeanandre.santoni at biblibre.com> + +# 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 CGI; +use C4::Auth; +use C4::IssuingRules; + +my $cgi = CGI->new; + +# get the status of the user, this will check his credentials and rights +my ($status, $cookie, $sessionId) = C4::Auth::check_api_auth($cgi, undef); + +my $result; + +if ($status eq 'ok') { # if authentication is ok + + # Get the POST data + my $branchcode = $cgi->param('branchcode'); + my $categorycode = $cgi->param('categorycode'); + my $itemtype = $cgi->param('itemtype'); + my $varname = $cgi->param('varname'); + my $inputvalue = $cgi->param('inputvalue') eq '' ? undef : $cgi->param('inputvalue'); + + # Modify the existing rule + ModIssuingRule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + $varname => $inputvalue, + }); + + # Compute inheritance, and return the new value; + my $rule = GetIssuingRule($categorycode, $itemtype, $branchcode); + + $result = $rule->{$varname}; +} else { + $result = 'Fail'; +} + +print CGI::header('-type'=>'text/plain', '-charset'=>'utf-8'); +print $result; + diff --git a/admin/smart-rules.pl b/admin/smart-rules.pl index fdd9b91..72535b9 100755 --- a/admin/smart-rules.pl +++ b/admin/smart-rules.pl @@ -25,317 +25,32 @@ use C4::Output; use C4::Auth; use C4::Koha; use C4::Debug; -use C4::Branch; # GetBranches +use C4::Branch; +use C4::IssuingRules; +use C4::Circulation; my $input = new CGI; my $dbh = C4::Context->dbh; -# my $flagsrequired; -# $flagsrequired->{circulation}=1; -my ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "admin/smart-rules.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => {parameters => 1}, - debug => 1, - }); - -my $type=$input->param('type'); -my $branch = $input->param('branch') || ( C4::Branch::onlymine() ? ( C4::Branch::mybranch() || '*' ) : '*' ); -my $op = $input->param('op'); - -if ($op eq 'delete') { - my $itemtype = $input->param('itemtype'); - my $categorycode = $input->param('categorycode'); - $debug and warn "deleting $1 $2 $branch"; - - my $sth_Idelete = $dbh->prepare("delete from issuingrules where branchcode=? and categorycode=? and itemtype=?"); - $sth_Idelete->execute($branch, $categorycode, $itemtype); -} -elsif ($op eq 'delete-branch-cat') { - my $categorycode = $input->param('categorycode'); - if ($branch eq "*") { - if ($categorycode eq "*") { - my $sth_delete = $dbh->prepare("DELETE FROM default_circ_rules"); - $sth_delete->execute(); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM default_borrower_circ_rules - WHERE categorycode = ?"); - $sth_delete->execute($categorycode); - } - } elsif ($categorycode eq "*") { - my $sth_delete = $dbh->prepare("DELETE FROM default_branch_circ_rules - WHERE branchcode = ?"); - $sth_delete->execute($branch); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM branch_borrower_circ_rules - WHERE branchcode = ? - AND categorycode = ?"); - $sth_delete->execute($branch, $categorycode); - } -} -elsif ($op eq 'delete-branch-item') { - my $itemtype = $input->param('itemtype'); - if ($branch eq "*") { - if ($itemtype eq "*") { - my $sth_delete = $dbh->prepare("DELETE FROM default_circ_rules"); - $sth_delete->execute(); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM default_branch_item_rules - WHERE itemtype = ?"); - $sth_delete->execute($itemtype); - } - } elsif ($itemtype eq "*") { - my $sth_delete = $dbh->prepare("DELETE FROM default_branch_circ_rules - WHERE branchcode = ?"); - $sth_delete->execute($branch); - } else { - my $sth_delete = $dbh->prepare("DELETE FROM branch_item_rules - WHERE branchcode = ? - AND itemtype = ?"); - $sth_delete->execute($branch, $itemtype); - } -} -# save the values entered -elsif ($op eq 'add') { - my $sth_search = $dbh->prepare("SELECT COUNT(*) AS total FROM issuingrules WHERE branchcode=? AND categorycode=? AND itemtype=?"); - my $sth_insert = $dbh->prepare("INSERT INTO issuingrules (branchcode, categorycode, itemtype, maxissueqty, renewalsallowed, reservesallowed, issuelength, fine, finedays, firstremind, chargeperiod,rentaldiscount) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)"); - my $sth_update=$dbh->prepare("UPDATE issuingrules SET fine=?, finedays=?, firstremind=?, chargeperiod=?, maxissueqty=?, renewalsallowed=?, reservesallowed=?, issuelength=?, rentaldiscount=? WHERE branchcode=? AND categorycode=? AND itemtype=?"); - - my $br = $branch; # branch - my $bor = $input->param('categorycode'); # borrower category - my $cat = $input->param('itemtype'); # item type - my $fine = $input->param('fine'); - my $finedays = $input->param('finedays'); - my $firstremind = $input->param('firstremind'); - my $chargeperiod = $input->param('chargeperiod'); - my $maxissueqty = $input->param('maxissueqty'); - my $renewalsallowed = $input->param('renewalsallowed'); - my $reservesallowed = $input->param('reservesallowed'); - $maxissueqty =~ s/\s//g; - $maxissueqty = undef if $maxissueqty !~ /^\d+/; - my $issuelength = $input->param('issuelength'); - my $rentaldiscount = $input->param('rentaldiscount'); - $debug and warn "Adding $br, $bor, $cat, $fine, $maxissueqty"; - - $sth_search->execute($br,$bor,$cat); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($fine, $finedays,$firstremind, $chargeperiod, $maxissueqty, $renewalsallowed,$reservesallowed, $issuelength,$rentaldiscount, $br,$bor,$cat); - } else { - $sth_insert->execute($br,$bor,$cat,$maxissueqty,$renewalsallowed,$reservesallowed,$issuelength,$fine,$finedays,$firstremind,$chargeperiod,$rentaldiscount); - } -} -elsif ($op eq "set-branch-defaults") { - my $categorycode = $input->param('categorycode'); - my $maxissueqty = $input->param('maxissueqty'); - my $holdallowed = $input->param('holdallowed'); - $maxissueqty =~ s/\s//g; - $maxissueqty = undef if $maxissueqty !~ /^\d+/; - $holdallowed =~ s/\s//g; - $holdallowed = undef if $holdallowed !~ /^\d+/; - - if ($branch eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_circ_rules"); - my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (maxissueqty, holdallowed) - VALUES (?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET maxissueqty = ?, holdallowed = ?"); - - $sth_search->execute(); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $holdallowed); - } else { - $sth_insert->execute($maxissueqty, $holdallowed); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_branch_circ_rules - WHERE branchcode = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO default_branch_circ_rules - (branchcode, maxissueqty, holdallowed) - VALUES (?, ?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET maxissueqty = ?, holdallowed = ? - WHERE branchcode = ?"); - $sth_search->execute($branch); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $holdallowed, $branch); - } else { - $sth_insert->execute($branch, $maxissueqty, $holdallowed); - } - } -} -elsif ($op eq "add-branch-cat") { - my $categorycode = $input->param('categorycode'); - my $maxissueqty = $input->param('maxissueqty'); - $maxissueqty =~ s/\s//g; - $maxissueqty = undef if $maxissueqty !~ /^\d+/; - - if ($branch eq "*") { - if ($categorycode eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_circ_rules"); - my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (maxissueqty) - VALUES (?)"); - my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET maxissueqty = ?"); - - $sth_search->execute(); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty); - } else { - $sth_insert->execute($maxissueqty); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_borrower_circ_rules - WHERE categorycode = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO default_borrower_circ_rules - (categorycode, maxissueqty) - VALUES (?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_borrower_circ_rules - SET maxissueqty = ? - WHERE categorycode = ?"); - $sth_search->execute($branch); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $categorycode); - } else { - $sth_insert->execute($categorycode, $maxissueqty); - } - } - } elsif ($categorycode eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_branch_circ_rules - WHERE branchcode = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO default_branch_circ_rules - (branchcode, maxissueqty) - VALUES (?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET maxissueqty = ? - WHERE branchcode = ?"); - $sth_search->execute($branch); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $branch); - } else { - $sth_insert->execute($branch, $maxissueqty); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM branch_borrower_circ_rules - WHERE branchcode = ? - AND categorycode = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO branch_borrower_circ_rules - (branchcode, categorycode, maxissueqty) - VALUES (?, ?, ?)"); - my $sth_update = $dbh->prepare("UPDATE branch_borrower_circ_rules - SET maxissueqty = ? - WHERE branchcode = ? - AND categorycode = ?"); - - $sth_search->execute($branch, $categorycode); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($maxissueqty, $branch, $categorycode); - } else { - $sth_insert->execute($branch, $categorycode, $maxissueqty); - } - } -} -elsif ($op eq "add-branch-item") { - my $itemtype = $input->param('itemtype'); - my $holdallowed = $input->param('holdallowed'); - $holdallowed =~ s/\s//g; - $holdallowed = undef if $holdallowed !~ /^\d+/; - - if ($branch eq "*") { - if ($itemtype eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_circ_rules"); - my $sth_insert = $dbh->prepare("INSERT INTO default_circ_rules - (holdallowed) - VALUES (?)"); - my $sth_update = $dbh->prepare("UPDATE default_circ_rules - SET holdallowed = ?"); - - $sth_search->execute(); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($holdallowed); - } else { - $sth_insert->execute($holdallowed); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_branch_item_rules - WHERE itemtype = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO default_branch_item_rules - (itemtype, holdallowed) - VALUES (?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_branch_item_rules - SET holdallowed = ? - WHERE itemtype = ?"); - $sth_search->execute($itemtype); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($holdallowed, $itemtype); - } else { - $sth_insert->execute($itemtype, $holdallowed); - } - } - } elsif ($itemtype eq "*") { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM default_branch_circ_rules - WHERE branchcode = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO default_branch_circ_rules - (branchcode, holdallowed) - VALUES (?, ?)"); - my $sth_update = $dbh->prepare("UPDATE default_branch_circ_rules - SET holdallowed = ? - WHERE branchcode = ?"); - $sth_search->execute($branch); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($holdallowed, $branch); - } else { - $sth_insert->execute($branch, $holdallowed); - } - } else { - my $sth_search = $dbh->prepare("SELECT count(*) AS total - FROM branch_item_rules - WHERE branchcode = ? - AND itemtype = ?"); - my $sth_insert = $dbh->prepare("INSERT INTO branch_item_rules - (branchcode, itemtype, holdallowed) - VALUES (?, ?, ?)"); - my $sth_update = $dbh->prepare("UPDATE branch_item_rules - SET holdallowed = ? - WHERE branchcode = ? - AND itemtype = ?"); - - $sth_search->execute($branch, $itemtype); - my $res = $sth_search->fetchrow_hashref(); - if ($res->{total}) { - $sth_update->execute($holdallowed, $branch, $itemtype); - } else { - $sth_insert->execute($branch, $itemtype, $holdallowed); - } - } -} - +my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => "admin/smart-rules.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {parameters => 1}, + debug => 1, +}); + +my $type = $input->param('type'); +my $branchcode = $input->param('branchcode') || ( C4::Branch::onlymine() ? ( C4::Branch::mybranch() || '*' ) : '*' ); +my $op = $input->param('op'); +my $confirm = $input->param('confirm'); + +# This block builds the branch list my $branches = GetBranches(); my @branchloop; -for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{branchname} } keys %$branches) { - my $selected = 1 if $thisbranch eq $branch; +for my $thisbranch (sort { $branches->{$a}->{'branchname'} cmp $branches->{$b}->{'branchname'} } keys %$branches) { + my $selected = 1 if $thisbranch eq $branchcode; my %row =(value => $thisbranch, selected => $selected, branchname => $branches->{$thisbranch}->{'branchname'}, @@ -343,177 +58,111 @@ for my $thisbranch (sort { $branches->{$a}->{branchname} cmp $branches->{$b}->{b push @branchloop, \%row; } -my $sth=$dbh->prepare("SELECT description,categorycode FROM categories ORDER BY description"); -$sth->execute; -my @category_loop; -while (my $data=$sth->fetchrow_hashref){ - push @category_loop,$data; -} - -$sth->finish; -$sth=$dbh->prepare("SELECT description,itemtype FROM itemtypes ORDER BY description"); -$sth->execute; -# $i=0; -my @row_loop; -my @itemtypes; -while (my $row=$sth->fetchrow_hashref){ - push @itemtypes,$row; -} - -my $sth2 = $dbh->prepare(" - SELECT issuingrules.*, itemtypes.description AS humanitemtype, categories.description AS humancategorycode - FROM issuingrules - LEFT JOIN itemtypes - ON (itemtypes.itemtype = issuingrules.itemtype) - LEFT JOIN categories - ON (categories.categorycode = issuingrules.categorycode) - WHERE issuingrules.branchcode = ? -"); -$sth2->execute($branch); - -while (my $row = $sth2->fetchrow_hashref) { - $row->{'humanitemtype'} ||= $row->{'itemtype'}; - $row->{'default_humanitemtype'} = 1 if $row->{'humanitemtype'} eq '*'; - $row->{'humancategorycode'} ||= $row->{'categorycode'}; - $row->{'default_humancategorycode'} = 1 if $row->{'humancategorycode'} eq '*'; - $row->{'fine'} = sprintf('%.2f', $row->{'fine'}); - push @row_loop, $row; -} -$sth->finish; +# Get the patron category list +my @category_loop = C4::Category->all; -my @sorted_row_loop = sort by_category_and_itemtype @row_loop; +# Get the item types list +my @itemtypes = C4::ItemType->all; -my $sth_branch_cat; -if ($branch eq "*") { - $sth_branch_cat = $dbh->prepare(" - SELECT default_borrower_circ_rules.*, categories.description AS humancategorycode - FROM default_borrower_circ_rules - JOIN categories USING (categorycode) - - "); - $sth_branch_cat->execute(); -} else { - $sth_branch_cat = $dbh->prepare(" - SELECT branch_borrower_circ_rules.*, categories.description AS humancategorycode - FROM branch_borrower_circ_rules - JOIN categories USING (categorycode) - WHERE branch_borrower_circ_rules.branchcode = ? - "); - $sth_branch_cat->execute($branch); +if ( $op eq 'delete' ) { + DelIssuingRule({ + branchcode => $branchcode, + categorycode => $input->param('categorycode'), + itemtype => $input->param('itemtype'), + }); } +# save the values entered +elsif ( $op eq 'add' ) { -my @branch_cat_rules = (); -while (my $row = $sth_branch_cat->fetchrow_hashref) { - push @branch_cat_rules, $row; -} -my @sorted_branch_cat_rules = sort { $a->{'humancategorycode'} cmp $b->{'humancategorycode'} } @branch_cat_rules; + # Converts '' to undef, so we can have NULL in database fields + my $issuingrule; + for ( $input->param ) { + my $v = $input->param($_); + $issuingrule->{$_} = length $v ? $v : undef; + } -# note undef maxissueqty so that template can deal with them -foreach my $entry (@sorted_branch_cat_rules, @sorted_row_loop) { - $entry->{unlimited_maxissueqty} = 1 unless defined($entry->{maxissueqty}); + # We don't want op to be passed to the API + delete $issuingrule->{'op'}; + + # If the (branchcode,categorycode,itemtype) combination already exists... + my @issuingrules = GetIssuingRules({ + branchcode => $issuingrule->{'branchcode'}, + categorycode => $issuingrule->{'categorycode'}, + itemtype => $issuingrule->{'itemtype'}, + }); + + # ...we modify the existing rule... + if ( @issuingrules ) { + ModIssuingRule( $issuingrule ); +# } elsif (@issuingrules){ +# $template->param(confirm=>1); +# $template->param(%$issuingrule); +# foreach (@category_loop) { +# $_->{selected}="selected" if ($_->{categorycode} eq $issuingrule->{categorycode}); +# } +# foreach (@itemtypes) { +# $_->{selected}="selected" if ($_->{itemtype} eq $issuingrule->{itemtype}); +# } + # ...else we add a new rule. + } else { + AddIssuingRule( $issuingrule ); + } } -my @sorted_row_loop = sort by_category_and_itemtype @row_loop; - -my $sth_branch_item; -if ($branch eq "*") { - $sth_branch_item = $dbh->prepare(" - SELECT default_branch_item_rules.*, itemtypes.description AS humanitemtype - FROM default_branch_item_rules - JOIN itemtypes USING (itemtype) - "); - $sth_branch_item->execute(); -} else { - $sth_branch_item = $dbh->prepare(" - SELECT branch_item_rules.*, itemtypes.description AS humanitemtype - FROM branch_item_rules - JOIN itemtypes USING (itemtype) - WHERE branch_item_rules.branchcode = ? - "); - $sth_branch_item->execute($branch); -} +# Get the issuing rules list... +my @issuingrules = GetIssuingRulesByBranchCode($branchcode); -my @branch_item_rules = (); -while (my $row = $sth_branch_item->fetchrow_hashref) { - push @branch_item_rules, $row; -} -my @sorted_branch_item_rules = sort { $a->{'humanitemtype'} cmp $b->{'humanitemtype'} } @branch_item_rules; +# ...and refine its data, row by row. +for my $rule ( @issuingrules ) { + $rule->{'humanitemtype'} ||= $rule->{'itemtype'}; + $rule->{'default_humanitemtype'} = $rule->{'humanitemtype'} eq '*'; + $rule->{'humancategorycode'} ||= $rule->{'categorycode'}; + $rule->{'default_humancategorycode'} = $rule->{'humancategorycode'} eq '*'; -# note undef holdallowed so that template can deal with them -foreach my $entry (@sorted_branch_item_rules) { - $entry->{holdallowed_any} = 1 if($entry->{holdallowed} == 2); - $entry->{holdallowed_same} = 1 if($entry->{holdallowed} == 1); + # This block is to show herited values in grey. + # We juste compare keys from our raw rule, with keys from the computed rule. + my $computedrule = GetIssuingRule($rule->{'categorycode'}, $rule->{'itemtype'}, $rule->{'branchcode'}); + for ( keys %$rule ) { + if ( not defined $rule->{$_} ) { + $rule->{$_} = $computedrule->{$_}; + $rule->{"herited_$_"} = 1; + } + } } -$template->param(show_branch_cat_rule_form => 1); -$template->param(branch_item_rule_loop => \@sorted_branch_item_rules); -$template->param(branch_cat_rule_loop => \@sorted_branch_cat_rules); +# Get the issuing rules list... +my @issuingrules = GetIssuingRulesByBranchCode($branchcode); -my $sth_defaults; -if ($branch eq "*") { - $sth_defaults = $dbh->prepare(" - SELECT * - FROM default_circ_rules - "); - $sth_defaults->execute(); -} else { - $sth_defaults = $dbh->prepare(" - SELECT * - FROM default_branch_circ_rules - WHERE branchcode = ? - "); - $sth_defaults->execute($branch); -} +# ...and refine its data, row by row. +for my $rule ( @issuingrules ) { + $rule->{'humanitemtype'} ||= $rule->{'itemtype'}; + $rule->{'default_humanitemtype'} = $rule->{'humanitemtype'} eq '*'; + $rule->{'humancategorycode'} ||= $rule->{'categorycode'}; + $rule->{'default_humancategorycode'} = $rule->{'humancategorycode'} eq '*'; -my $defaults = $sth_defaults->fetchrow_hashref; + # This block is to show herited values in grey. + # We juste compare keys from our raw rule, with keys from the computed rule. + my $computedrule = GetIssuingRule($rule->{'categorycode'}, $rule->{'itemtype'}, $rule->{'branchcode'}); + for ( keys %$rule ) { + if ( not defined $rule->{$_} ) { + $rule->{$_} = $computedrule->{$_}; + $rule->{"herited_$_"} = 1; + } + } -if ($defaults) { - $template->param(default_holdallowed_none => 1) if($defaults->{holdallowed} == 0); - $template->param(default_holdallowed_same => 1) if($defaults->{holdallowed} == 1); - $template->param(default_holdallowed_any => 1) if($defaults->{holdallowed} == 2); - $template->param(default_maxissueqty => $defaults->{maxissueqty}); + $rule->{'fine'} = sprintf('%.2f', $rule->{'fine'}); } -$template->param(default_rules => ($defaults ? 1 : 0)); - -$template->param(categoryloop => \@category_loop, - itemtypeloop => \@itemtypes, - rules => \@sorted_row_loop, - branchloop => \@branchloop, - humanbranch => ($branch ne '*' ? $branches->{$branch}->{branchname} : ''), - branch => $branch, - definedbranch => scalar(@sorted_row_loop)>0 - ); +$template->param( + categoryloop => \@category_loop, + itemtypeloop => \@itemtypes, + rules => \@issuingrules, + branchloop => \@branchloop, + humanbranch => ($branchcode ne '*' ? $branches->{$branchcode}->{branchname} : ''), + branchcode => $branchcode, + definedbranch => scalar(@issuingrules) > 0, +); output_html_with_http_headers $input, $cookie, $template->output; exit 0; -# sort by patron category, then item type, putting -# default entries at the bottom -sub by_category_and_itemtype { - unless (by_category($a, $b)) { - return by_itemtype($a, $b); - } -} - -sub by_category { - my ($a, $b) = @_; - if ($a->{'default_humancategorycode'}) { - return ($b->{'default_humancategorycode'} ? 0 : 1); - } elsif ($b->{'default_humancategorycode'}) { - return -1; - } else { - return $a->{'humancategorycode'} cmp $b->{'humancategorycode'}; - } -} - -sub by_itemtype { - my ($a, $b) = @_; - if ($a->{'default_humanitemtype'}) { - return ($b->{'default_humanitemtype'} ? 0 : 1); - } elsif ($b->{'default_humanitemtype'}) { - return -1; - } else { - return $a->{'humanitemtype'} cmp $b->{'humanitemtype'}; - } -} diff --git a/circ/branchtransfers.pl b/circ/branchtransfers.pl index ab38749..6374f71 100755 --- a/circ/branchtransfers.pl +++ b/circ/branchtransfers.pl @@ -87,7 +87,9 @@ if ( $request eq "KillWaiting" ) { } elsif ( $request eq "SetWaiting" ) { my $item = $query->param('itemnumber'); - ModReserveAffect( $item, $borrowernumber ); + my $itemhash=C4::Items::GetItem($item); + my ( $reservetype, $reserve ) = C4::Reserves::CheckReserves( undef, $itemhash->{barcode} ); + ModReserveAffect( $item, $borrowernumber,$tobranchcd ne C4::Context->userenv->{'branch'}, $reserve->{reservenumber}); $ignoreRs = 1; $setwaiting = 1; $reqmessage = 1; diff --git a/circ/circulation.pl b/circ/circulation.pl index c4421ed..a7c8716 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -30,27 +30,33 @@ use C4::Dates qw/format_date/; use C4::Branch; # GetBranches use C4::Koha; # GetPrinter use C4::Circulation; +use C4::Overdues qw/CheckBorrowerDebarred/; use C4::Members; use C4::Biblio; use C4::Reserves; use C4::Context; +use C4::Debug; use CGI::Session; - +use C4::Items; +use JSON; +use YAML; use Date::Calc qw( Today Add_Delta_YM Add_Delta_Days Date_to_Days ); +use List::MoreUtils qw/uniq/; # # PARAMETERS READING # my $query = new CGI; - -my $sessionID = $query->cookie("CGISESSID") ; -my $session = get_session($sessionID); +my $dbh = C4::Context->dbh; +my $remotehost = $query->remote_host(); +my $sessionID = $query->cookie("CGISESSID"); +my $session = get_session($sessionID); # branch and printer are now defined by the userenv # but first we have to check if someone has tried to change them @@ -88,9 +94,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user ( my $branches = GetBranches(); -my @failedrenews = $query->param('failedrenew'); # expected to be itemnumbers +my @failedrenews = $query->param('failedrenew'); # expected to be itemnumbers +my @failedreturns = $query->param('failedreturn'); # expected to be barcodes +my @renewerrors = $query->param('renewerror'); # expected to be json +my @returnerrors = $query->param('returnerror'); # expected to be json my %renew_failed; -for (@failedrenews) { $renew_failed{$_} = 1; } +my %return_failed; +for (@failedrenews) { $renew_failed{$_} = decode_json(shift @renewerrors); } +for (@failedreturns) { $return_failed{GetItemnumberFromBarcode($_)} = decode_json(shift @returnerrors); } my $findborrower = $query->param('findborrower'); $findborrower =~ s|,| |g; @@ -125,14 +136,13 @@ my $organisation = $query->param('organisations'); my $print = $query->param('print'); my $newexpiry = $query->param('dateexpiry'); my $debt_confirmed = $query->param('debt_confirmed') || 0; # Don't show the debt error dialog twice - +$debug && warn $newexpiry; # Check if stickyduedate is turned off if ( $barcode ) { # was stickyduedate loaded from session? if ( $stickyduedate && ! $query->param("stickyduedate") ) { $session->clear( 'stickyduedate' ); $stickyduedate = $query->param('stickyduedate'); - $duedatespec = $query->param('duedatespec'); } } @@ -169,7 +179,7 @@ if($duedatespec_allow){ $datedue = $globalduedate if ($globalduedate); } -my $todaysdate = C4::Dates->new->output('iso'); +my $todaysdate = C4::Dates->new->output( 'iso' ); # check and see if we should print if ( $barcode eq '' && $print eq 'maybe' ) { @@ -231,8 +241,8 @@ if ($borrowernumber) { # 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 /-/, $borrower->{'dateexpiry'}; - my ( $enrol_year, $enrol_month, $enrol_day) = split /-/, $borrower->{'dateenrolled'}; + my ($warning_year, $warning_month, $warning_day) = split (/-/, $borrower->{'dateexpiry'}); + my ( $enrol_year, $enrol_month, $enrol_day) = split (/-/, $borrower->{'dateenrolled'}); # Renew day is calculated by adding the enrolment period to today my ( $renew_year, $renew_month, $renew_day); if ($enrol_year*$enrol_month*$enrol_day>0) { @@ -250,6 +260,7 @@ if ($borrowernumber) { flagged => "1", noissues => "1", expired => format_date($borrower->{dateexpiry}), + warning => 1, renewaldate => format_date("$renew_year-$renew_month-$renew_day") ); } @@ -260,9 +271,9 @@ if ($borrowernumber) { { # borrower card soon to expire warn librarian $template->param("warndeparture" => format_date($borrower->{dateexpiry}), - flagged => "1",); + flagged => "1", "warning" => 1); if (C4::Context->preference('ReturnBeforeExpiry')){ - $template->param("returnbeforeexpiry" => 1); + $template->param("returnbeforeexpiry" => 1, "warning => 1"); } } $template->param( @@ -270,12 +281,22 @@ if ($borrowernumber) { issuecount => $issue, finetotal => $fines ); + + my $debar = CheckBorrowerDebarred($borrowernumber); + if($debar){ + $template->param(userdebarred => 1); + $template->param(debarredcomment => $borrower->{debarredcomment}); + if( $debar ne "9999-12-31"){ + $template->param(userdebarreddate => C4::Dates::format_date($debar)); + } + } } # # STEP 3 : ISSUING # # +my $confirm_required = 0; if ($barcode) { # always check for blockers on issuing my ( $error, $question ) = @@ -320,8 +341,33 @@ if ($barcode) { # FIXME If the issue is confirmed, we launch another time GetMemberIssuesAndFines, now display the issue count after issue my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber ); $template->param( issuecount => $issue ); + + # Is there a circulation note? + my $itemnumber = GetItemnumberFromBarcode($barcode); + my $biblionumber = GetBiblionumberFromItemnumber($itemnumber); + my $record = GetMarcBiblio($biblionumber); + my $frameworkcode = GetFrameworkCode($biblionumber); + my $circnotefield = GetRecordValue('circnote', $record, $frameworkcode); + if (defined @$circnotefield[0]) { + $template->param(circnote => @$circnotefield[0]->{'subfield'}); + } } + +# Setting the right status if an hold has been confirmed +#This should never be used in fact +my $resbarcode = $query->param("resbarcode"); +if ($resbarcode) { + if ( my ( $reservetype, $reserve ) = C4::Reserves::CheckReserves( undef, $resbarcode ) ) { + if ( $reservetype eq "Waiting" || $reservetype eq "Reserved" ) { + my $transfer = C4::Context->userenv->{branch} ne $reserve->{branchcode}; + ModReserveAffect( $reserve->{itemnumber}, $reserve->{borrowernumber}, $transfer, $reserve->{"reservenumber"} ); + } + } +} + + + # reload the borrower info for the sake of reseting the flags..... if ($borrowernumber) { $borrower = GetMemberDetails( $borrowernumber, 0 ); @@ -359,11 +405,18 @@ if ($borrowernumber) { $getreserv{itemcallnumber} = $getiteminfo->{'itemcallnumber'}; $getreserv{biblionumber} = $getiteminfo->{'biblionumber'}; $getreserv{waitingat} = GetBranchName( $num_res->{'branchcode'} ); + my $materials = $getiteminfo->{'materials'}; + $template->param(materials => $materials); # check if we have a waiting status for reservations if ( $num_res->{'found'} eq 'W' ) { $getreserv{color} = 'reserved'; $getreserv{waiting} = 1; # genarate information displaying only waiting reserves + my @maxpickupdate = $num_res->{'waitingdate'} ? GetMaxPickupDate( $num_res->{'waitingdate'}, $borrowernumber, $num_res ) : ''; + $getreserv{'maxpickupdate'} = sprintf( "%d-%02d-%02d", @maxpickupdate ); + $getWaitingReserveInfo{'formattedwaitingdate'} = format_date( $getreserv{'maxpickupdate'} ); + $getreserv{'formattedwaitingdate'} = format_date( $getreserv{'maxpickupdate'} ); + $getWaitingReserveInfo{title} = $getiteminfo->{'title'}; $getWaitingReserveInfo{biblionumber} = $getiteminfo->{'biblionumber'}; $getWaitingReserveInfo{itemtype} = $itemtypeinfo->{'description'}; @@ -419,51 +472,97 @@ my $previssues = ''; my @todaysissues; my @previousissues; +my @borrowers_with_issues; +my @relissues; +my @relprevissues; +my $displayrelissues; +## ADDED BY JF: new itemtype issuingrules counter stuff +my $issued_itemtypes_count; +my @issued_itemtypes_count_loop; + my $totalprice = 0; -if ($borrower) { -# get each issue of the borrower & separate them in todayissues & previous issues - my ($issueslist) = GetPendingIssues($borrower->{'borrowernumber'}); - # split in 2 arrays for today & previous - foreach my $it ( @$issueslist ) { - my $itemtypeinfo = getitemtypeinfo( (C4::Context->preference('item-level_itypes')) ? $it->{'itype'} : $it->{'itemtype'} ); - # set itemtype per item-level_itype syspref - FIXME this is an ugly hack - $it->{'itemtype'} = ( C4::Context->preference( 'item-level_itypes' ) ) ? $it->{'itype'} : $it->{'itemtype'}; +sub build_issue_data { + my $issueslist = shift; + my $relatives = shift; - ($it->{'charge'}, $it->{'itemtype_charge'}) = GetIssuingCharges( - $it->{'itemnumber'}, $borrower->{'borrowernumber'} - ); - $it->{'charge'} = sprintf("%.2f", $it->{'charge'}); - my ($can_renew, $can_renew_error) = CanBookBeRenewed( - $borrower->{'borrowernumber'},$it->{'itemnumber'} - ); - $it->{"renew_error_${can_renew_error}"} = 1 if defined $can_renew_error; + # split in 2 arrays for today & previous + foreach my $it (@$issueslist) { + my $itemtypeinfo = getitemtypeinfo( ( C4::Context->preference('item-level_itypes') ) ? $it->{'itype'} : $it->{'itemtype'} ); + + # Getting borrower details + my $memberdetails = GetMemberDetails($it->{'borrowernumber'}); + $it->{'borrowername'} = $memberdetails->{'firstname'} . " " . $memberdetails->{'surname'}; + + # set itemtype per item-level_itype syspref - FIXME this is an ugly hack + $it->{'itemtype'} = ( C4::Context->preference('item-level_itypes') ) ? $it->{'itype'} : $it->{'itemtype'}; + + ( $it->{'charge'}, $it->{'itemtype_charge'} ) = GetIssuingCharges( $it->{'itemnumber'}, $borrower->{'borrowernumber'} ); + $it->{'charge'} = sprintf( "%.2f", $it->{'charge'} ); + my ( $can_renew, $can_renew_error ) = CanBookBeRenewed( $borrower->{'borrowernumber'}, $it->{'itemnumber'} ); + if ( defined $can_renew_error->{message} ) { + $it->{ "renew_error_" . $can_renew_error->{message} } = 1; + $it->{'renew_error'} = 1; + } + $it->{renewals} ||= 0; + $it->{$_} = $can_renew_error->{$_} for (qw(renewalsallowed reserves)); my ( $restype, $reserves ) = CheckReserves( $it->{'itemnumber'} ); - $it->{'can_renew'} = $can_renew; - $it->{'can_confirm'} = !$can_renew && !$restype; - $it->{'renew_error'} = $restype; - $it->{'checkoutdate'} = C4::Dates->new($it->{'issuedate'},'iso')->output('syspref'); + if ($restype) { + $it->{'reserved'} = 1; + $it->{$restype} = 1; + } + $it->{'can_renew'} = $can_renew; + $it->{'can_confirm'} = !$can_renew && !$restype; + $it->{'renew_error'} = $restype; + $it->{'checkoutdate'} = $it->{'issuedate'}; $totalprice += $it->{'replacementprice'}; - $it->{'itemtype'} = $itemtypeinfo->{'description'}; + $it->{'itemtype'} = $itemtypeinfo->{'description'}; $it->{'itemtype_image'} = $itemtypeinfo->{'imageurl'}; - $it->{'dd'} = format_date($it->{'date_due'}); - $it->{'displaydate'} = format_date($it->{'issuedate'}); - $it->{'od'} = ( $it->{'date_due'} lt $todaysdate ) ? 1 : 0 ; - ($it->{'author'} eq '') and $it->{'author'} = ' '; - $it->{'renew_failed'} = $renew_failed{$it->{'itemnumber'}}; - - if ( $todaysdate eq $it->{'issuedate'} or $todaysdate eq $it->{'lastreneweddate'} ) { - push @todaysissues, $it; - } else { - push @previousissues, $it; + $it->{'dd'} = format_date( $it->{'date_due'} ); + $it->{'displaydate'} = format_date( $it->{'issuedate'} ); + ( $it->{'author'} eq '' ) and $it->{'author'} = ' '; + if ( defined( $return_failed{ $it->{'itemnumber'} } ) ) { + $it->{ 'return_error_' . $return_failed{ $it->{'itemnumber'} }->{message} } = 1; + delete $return_failed{ $it->{'itemnumber'} }; } + if ( defined( $renew_failed{ $it->{'itemnumber'} } ) ) { + $it->{ 'renew_error_' . $renew_failed{ $it->{'itemnumber'} }->{message} } = 1; + } + $it->{'return_failed'} = defined( $return_failed{ $it->{'itemnumber'} } ); + $it->{'branchdisplay'} = GetBranchName( ( C4::Context->preference('HomeOrHoldingBranch') eq 'holdingbranch' ) ? $it->{'holdingbranch'} : $it->{'homebranch'} ); + + # ADDED BY JF: NEW ITEMTYPE COUNT DISPLAY + $issued_itemtypes_count->{ $it->{'itemtype'} }++; + if ( $todaysdate eq $it->{'checkoutdate'} or $todaysdate eq $it->{'lastreneweddate'} ) { + (!$relatives) ? push @todaysissues, $it : push @relissues, $it; + } else { + (!$relatives) ? push @previousissues, $it : push @relprevissues, $it; + } + } - if ( C4::Context->preference( "todaysIssuesDefaultSortOrder" ) eq 'asc' ) { - @todaysissues = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues; - } - else { - @todaysissues = sort { $b->{'timestamp'} cmp $a->{'timestamp'} } @todaysissues; + +} + +if ($borrower) { + + # Getting borrower relatives + my @relborrowernumbers = GetMemberRelatives($borrower->{'borrowernumber'}); + #push @borrowernumbers, $borrower->{'borrowernumber'}; + + # get each issue of the borrower & separate them in todayissues & previous issues + my ($issueslist) = GetPendingIssues($borrower->{'borrowernumber'}); + my ($relissueslist) = GetPendingIssues(@relborrowernumbers); + + build_issue_data($issueslist, 0); + build_issue_data($relissueslist, 1); + + $displayrelissues = scalar($relissueslist); + + if ( C4::Context->preference("todaysIssuesDefaultSortOrder") eq 'asc' ) { + @todaysissues = sort { $a->{'timestamp'} cmp $b->{'timestamp'} } @todaysissues; + } else { + @todaysissues = sort { $b->{'timestamp'} cmp $a->{'timestamp'} } @todaysissues; } if ( C4::Context->preference( "previousIssuesDefaultSortOrder" ) eq 'asc' ){ @previousissues = sort { $a->{'date_due'} cmp $b->{'date_due'} } @previousissues; @@ -472,7 +571,48 @@ if ($borrower) { @previousissues = sort { $b->{'date_due'} cmp $a->{'date_due'} } @previousissues; } } +my @reserveswaiting; +foreach my $itemnumber (keys %return_failed){ + next unless $return_failed{$itemnumber}->{'reservesdata'}; + my $hashdata=$return_failed{$itemnumber}->{'reservesdata'}; + $hashdata->{circborrowernumber}=$borrowernumber; + $hashdata->{script_name}=$query->script_name(); + push @reserveswaiting, $hashdata if (%$hashdata); +} + +$template->param(reserves_waiting=>\@reserveswaiting); + +#### ADDED BY JF FOR COUNTS BY ITEMTYPE RULES +# FIXME: This should utilize all the issuingrules options rather than just the defaults +# and it should be moved to a module + +# how many of each is allowed? +my $issueqty_sth = $dbh->prepare( + 'SELECT itemtypes.description AS description,issuingrules.itemtype,maxissueqty ' . + 'FROM issuingrules LEFT JOIN itemtypes ON (itemtypes.itemtype=issuingrules.itemtype) ' . + 'WHERE categorycode=?' +); +$issueqty_sth->execute(q{*}); # This is a literal asterisk, not a wildcard. + +while ( my $data = $issueqty_sth->fetchrow_hashref() ) { + + # subtract how many of each this borrower has + $data->{'count'} = $issued_itemtypes_count->{ $data->{'description'} }; + $data->{'left'} = + ( $data->{'maxissueqty'} - + $issued_itemtypes_count->{ $data->{'description'} } ); + + # can't have a negative number of remaining + if ( $data->{'left'} < 0 ) { $data->{'left'} = '0' } + if ( $data->{maxissueqty} <= $data->{count} ) { + $data->{flag} = 1; + } + if ( $data->{maxissueqty} > 0 && $data->{itemtype} !~m/^(\*|CIRC)$/ ) { + push @issued_itemtypes_count_loop, $data; + } +} +#### / JF my @values; my %labels; @@ -502,6 +642,7 @@ if ($borrowerslist) { #title my $flags = $borrower->{'flags'}; + $debug && warn Dump($flags); foreach my $flag ( sort keys %$flags ) { $template->param( flagged=> 1); $flags->{$flag}->{'message'} =~ s#\n#<br />#g; @@ -511,20 +652,19 @@ foreach my $flag ( sort keys %$flags ) { noissues => 'true', ); if ( $flag eq 'GNA' ) { - $template->param( gna => 'true' ); + $template->param( gna => 'true', gonenoaddresscomment => $borrower->{'gonenoaddresscomment'}, warning => 1 ); } elsif ( $flag eq 'LOST' ) { - $template->param( lost => 'true' ); - } - elsif ( $flag eq 'DBARRED' ) { - $template->param( dbarred => 'true' ); - } - elsif ( $flag eq 'CHARGES' ) { + $template->param( lost => 'true', lostcomment => $borrower->{'lostcomment'}, warning => 1 ); + } elsif ( $flag eq 'DEBARRED' ) { + $template->param( userdebarred => 'true', warning => 1, userdebarreddate=> format_date($flags->{DEBARRED}->{dateend}),debardebarredcomment=>$borrower->{'debarredcomment'}); + } elsif ( $flag eq 'CHARGES' ) { $template->param( charges => 'true', chargesmsg => $flags->{'CHARGES'}->{'message'}, chargesamount => $flags->{'CHARGES'}->{'amount'}, - charges_is_blocker => 1 + charges_is_blocker => 1, + warning => 1 ); } elsif ( $flag eq 'CREDITS' ) { @@ -532,6 +672,7 @@ foreach my $flag ( sort keys %$flags ) { credits => 'true', creditsmsg => $flags->{'CREDITS'}->{'message'}, creditsamount => sprintf("%.02f", -($flags->{'CREDITS'}->{'amount'})), # from patron's pov + warning => 1 ); } } @@ -542,6 +683,7 @@ foreach my $flag ( sort keys %$flags ) { flagged => 1, chargesmsg => $flags->{'CHARGES'}->{'message'}, chargesamount => $flags->{'CHARGES'}->{'amount'}, + warning => 1 ); } elsif ( $flag eq 'CREDITS' ) { @@ -549,13 +691,15 @@ foreach my $flag ( sort keys %$flags ) { credits => 'true', creditsmsg => $flags->{'CREDITS'}->{'message'}, creditsamount => sprintf("%.02f", -($flags->{'CREDITS'}->{'amount'})), # from patron's pov + warning => 1 ); } elsif ( $flag eq 'ODUES' ) { $template->param( odues => 'true', flagged => 1, - oduesmsg => $flags->{'ODUES'}->{'message'} + oduesmsg => $flags->{'ODUES'}->{'message'}, + warning => 1 ); my $items = $flags->{$flag}->{'itemlist'}; @@ -610,9 +754,16 @@ if($lib_messages_loop){ $template->param(flagged => 1 ); } my $bor_messages_loop = GetMessages( $borrowernumber, 'B', $branch ); if($bor_messages_loop){ $template->param(flagged => 1 ); } + # Computes full borrower address my (undef, $roadttype_hashref) = &GetRoadTypes(); -my $address = $borrower->{'streetnumber'}.' '.$roadttype_hashref->{$borrower->{'streettype'}}.' '.$borrower->{'address'}; +my $address = $borrower->{'streetnumber'}.' ' if ($borrower->{'streetnumber'}); +$address .= $roadttype_hashref->{$borrower->{'streettype'}}.' ' if ( $roadttype_hashref->{$borrower->{'streettype'}}); +$address .= $borrower->{'address'}; + + +$duedatespec = "" if not ($stickyduedate or scalar $confirm_required); +my @categories = C4::Category->all; $template->param( lib_messages_loop => $lib_messages_loop, @@ -627,9 +778,9 @@ $template->param( printername => $printer, firstname => $borrower->{'firstname'}, surname => $borrower->{'surname'}, - dateexpiry => format_date($newexpiry), + printer => $printer, + printername => $printer, expiry => format_date($borrower->{'dateexpiry'}), - categorycode => $borrower->{'categorycode'}, categoryname => $borrower->{description}, address => $address, address2 => $borrower->{'address2'}, @@ -640,7 +791,6 @@ $template->param( zipcode => $borrower->{'zipcode'}, country => $borrower->{'country'}, phone => $borrower->{'phone'} || $borrower->{'mobile'}, - cardnumber => $borrower->{'cardnumber'}, amountold => $amountold, barcode => $barcode, stickyduedate => $stickyduedate, @@ -651,14 +801,22 @@ $template->param( totaldue => sprintf('%.2f', $total), todayissues => \@todaysissues, previssues => \@previousissues, + relissues => \@relissues, + relprevissues => \@relprevissues, + displayrelissues => $displayrelissues, inprocess => $inprocess, memberofinstution => $member_of_institution, CGIorganisations => $CGIorganisations, is_child => ($borrower->{'category_type'} eq 'C'), circview => 1, soundon => C4::Context->preference("SoundOn"), + categoryloop => \@categories, ); +$template->param(newexpiry => format_date($newexpiry)) if (defined $newexpiry); + +SetMemberInfosInTemplate($borrowernumber, $template); + # save stickyduedate to session if ($stickyduedate) { $session->param( 'stickyduedate', $duedatespec ); diff --git a/circ/returns.pl b/circ/returns.pl index 2aac76a..13c3283 100755 --- a/circ/returns.pl +++ b/circ/returns.pl @@ -36,16 +36,20 @@ use C4::Circulation; use C4::Dates qw/format_date/; use Date::Calc qw/Add_Delta_Days/; use C4::Calendar; +use C4::Budgets qw/GetCurrency/; use C4::Print; use C4::Reserves; use C4::Biblio; use C4::Items; use C4::Members; +use C4::Overdues qw/CheckBorrowerDebarred/; use C4::Branch; # GetBranches GetBranchName use C4::Koha; # FIXME : is it still useful ? use C4::RotatingCollections; +use C4::Debug; my $query = new CGI; +my $remotehost = $query->remote_host(); if (!C4::Context->userenv){ my $sessionID = $query->cookie("CGISESSID"); @@ -133,6 +137,7 @@ if ( $query->param('resbarcode') ) { my $item = $query->param('itemnumber'); my $borrowernumber = $query->param('borrowernumber'); my $resbarcode = $query->param('resbarcode'); + my $reservenumber = $query->param('reservenumber'); my $diffBranchReturned = $query->param('diffBranch'); my $iteminfo = GetBiblioFromItemNumber($item); # fix up item type for display @@ -140,18 +145,19 @@ if ( $query->param('resbarcode') ) { my $diffBranchSend = ($userenv_branch ne $diffBranchReturned) ? $diffBranchReturned : undef; # diffBranchSend tells ModReserveAffect whether document is expected in this library or not, # i.e., whether to apply waiting status - ModReserveAffect( $item, $borrowernumber, $diffBranchSend); + ModReserveAffect( $item, $borrowernumber, $diffBranchSend, $reservenumber ); + # check if we have other reserves for this document, if we have a return send the message of transfer - my ( $messages, $nextreservinfo ) = GetOtherReserves($item); + my ( $reservemessages, $nextreservinfo ) = GetOtherReserves($item); my ($borr) = GetMemberDetails( $nextreservinfo, 0 ); my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; - if ( $messages->{'transfert'} ) { + if ( $reservemessages->{'transfert'} ) { $template->param( itemtitle => $iteminfo->{'title'}, itembiblionumber => $iteminfo->{'biblionumber'}, iteminfo => $iteminfo->{'author'}, - tobranchname => GetBranchName($messages->{'transfert'}), + tobranchname => GetBranchName($reservemessages->{'transfert'}), name => $name, borrowernumber => $borrowernumber, borcnum => $borr->{'cardnumber'}, @@ -167,10 +173,12 @@ my $returned = 0; my $messages; my $issueinformation; my $itemnumber; +my $biblio; my $barcode = $query->param('barcode'); my $exemptfine = $query->param('exemptfine'); my $dropboxmode = $query->param('dropboxmode'); my $dotransfer = $query->param('dotransfer'); +my $override = $query->param('override'); my $calendar = C4::Calendar->new( branchcode => $userenv_branch ); #dropbox: get last open day (today - 1) my $today = C4::Dates->new(); @@ -184,7 +192,7 @@ if ($dotransfer){ } # actually return book and prepare item table..... -if ($barcode) { +if ($barcode and not $query->param('cancel')) { $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace $barcode = barcodedecode($barcode) if C4::Context->preference('itemBarcodeInputFilter'); $itemnumber = GetItemnumberFromBarcode($barcode); @@ -207,11 +215,19 @@ if ($barcode) { # save the return # ( $returned, $messages, $issueinformation, $borrower ) = - AddReturn( $barcode, $userenv_branch, $exemptfine, $dropboxmode); # do the return + AddReturn( $barcode, $userenv_branch, $exemptfine, $dropboxmode,$override); # do the return my $homeorholdingbranchreturn = C4::Context->preference('HomeOrHoldingBranchReturn') or 'homebranch'; + my @ips=split /,|\|/, C4::Context->preference("CI-3M:AuthorizedIPs"); + #my $pid=fork(); + #unless($pid && $remotehost=~qr(^$ips$)){ + #if (!$pid && any{ $remotehost eq $_ }@ips ){ + if (any{ $remotehost eq $_ }@ips ){ + system("../services/magnetise.pl $remotehost in"); + #die 0; + } # get biblio description - my $biblio = GetBiblioFromItemNumber($itemnumber); + $biblio = GetBiblioFromItemNumber($itemnumber); # fix up item type for display $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; @@ -242,7 +258,7 @@ if ($barcode) { $input{return_overdue} = 1 if ($duedate and $duedate lt $today->output('iso')); push( @inputloop, \%input ); } - elsif ( !$messages->{'BadBarcode'} ) { + elsif ( !$messages->{'BadBarcode'} and ! $messages->{'Wrongbranch'} ) { $input{duedate} = 0; $returneditems{0} = $barcode; $riduedate{0} = 0; @@ -260,6 +276,18 @@ if ($barcode) { } $template->param( inputloop => \@inputloop ); + +# Is there a circulation note? +my $itemnumber = GetItemnumberFromBarcode($barcode); +my $biblionumber = GetBiblionumberFromItemnumber($itemnumber); +my $record = GetMarcBiblio($biblionumber); +my $frameworkcode = GetFrameworkCode($biblionumber); +my $circnotefield = GetRecordValue('circnote', $record, $frameworkcode); +if (defined @$circnotefield[0]) { + $template->param(circnote => @$circnotefield[0]->{'subfield'}); +} + + my $found = 0; my $waiting = 0; my $reserved = 0; @@ -283,9 +311,13 @@ if ( $messages->{'NeedsTransfer'} ){ } if ( $messages->{'Wrongbranch'} ){ - $template->param( - wrongbranch => 1, - ); + $template->param( + wrongbranch => $branches->{$messages->{'Wrongbranch'}->{'Wrongbranch'}}->{'branchname'}, + rightbranch => $branches->{$messages->{'Wrongbranch'}->{'Rightbranch'}}->{'branchname'}, + barcode => $barcode, + exemptfine => $exemptfine, + dropboxmode => $dropboxmode, + ); } # case of wrong transfert, if the document wasn't transfered to the right library (according to branchtransfer (tobranch) BDD) @@ -340,7 +372,7 @@ if ( $messages->{'ResFound'}) { reserved => 1, ); } - + my $debarred = CheckBorrowerDebarred($reserve->{borrowernumber}); # same params for Waiting or Reserved $template->param( found => 1, @@ -357,17 +389,18 @@ if ( $messages->{'ResFound'}) { borcity => $borr->{'city'}, borzip => $borr->{'zipcode'}, borcnum => $borr->{'cardnumber'}, - debarred => $borr->{'debarred'}, + debarred => $debarred, gonenoaddress => $borr->{'gonenoaddress'}, barcode => $barcode, - destbranch => $reserve->{'branchcode'}, + reservenumber => $reserve->{'reservenumber'}, + destbranch => $reserve->{'branchcode'}, borrowernumber => $reserve->{'borrowernumber'}, itemnumber => $reserve->{'itemnumber'}, reservenotes => $reserve->{'reservenotes'}, ); } # else { ; } # error? } - +$borrower->{'flags'}= C4::Members::patronflags($borrower); # Error Messages my @errmsgloop; foreach my $code ( keys %$messages ) { @@ -393,6 +426,35 @@ foreach my $code ( keys %$messages ) { elsif ( $code eq 'WasTransfered' ) { ; # FIXME... anything to do here? } + elsif ( $code eq 'NotForLoan' ) { + my $fw = GetFrameworkCode($biblio->{'biblionumber'}); + my $category = GetAuthValCode('items.notforloan',$fw); + my $authorizedvalues = GetAuthorisedValues($category, $messages->{$code}); + + foreach my $authvalue (@$authorizedvalues){ + $err{notforloan} = $authvalue->{lib} if $authvalue->{'authorised_value'} eq $messages->{$code}; + } + } + elsif ( $code eq 'Damaged' ) { + my $fw = GetFrameworkCode($biblio->{'biblionumber'}); + my $category = GetAuthValCode('items.damaged',$fw); + my $authorizedvalues = GetAuthorisedValues($category, $messages->{$code}); + + foreach my $authvalue (@$authorizedvalues){ + $err{damaged} = $authvalue->{lib} if $authvalue->{'authorised_value'} eq $messages->{$code}; + } + } + elsif( $code eq 'Debarred' ){ + $err{debarred} = format_date($messages->{'Debarred'}); + $err{debarcardnumber} = $borrower->{cardnumber}; + $err{debarborrowernumber} = $borrower->{borrowernumber}; + $err{debarname} = "$borrower->{firstname} $borrower->{surname}"; + } + elsif( $code eq 'HaveFines' ){ + $err{havefines} = $borrower->{'flags'}->{'CHARGES'}->{'amount'} . %{GetCurrency()}->{symbol}; + $err{finecardnumber} = $borrower->{cardnumber}; + $err{finename} = "$borrower->{firstname} $borrower->{surname}"; + } elsif ( $code eq 'wthdrawn' ) { $err{withdrawn} = 1; $exit_required_p = 1; @@ -414,7 +476,6 @@ foreach my $code ( keys %$messages ) { } elsif ( $code eq 'Wrongbranch' ) { } - else { die "Unknown error code $code"; # note we need all the (empty) elsif's above, or we die. # This forces the issue of staying in sync w/ Circulation.pm @@ -428,14 +489,10 @@ $template->param( errmsgloop => \@errmsgloop ); # patrontable .... if ($borrower) { - my $flags = $borrower->{'flags'}; my @flagloop; - my $flagset; + my $flags=$borrower->{flags}; foreach my $flag ( sort keys %$flags ) { my %flaginfo; - unless ($flagset) { $flagset = 1; } - $flaginfo{redfont} = ( $flags->{$flag}->{'noissues'} ); - $flaginfo{flag} = $flag; if ( $flag eq 'CHARGES' ) { $flaginfo{msg} = $flag; $flaginfo{charges} = 1; @@ -450,14 +507,29 @@ if ($borrower) { foreach my $item (@$items) { my $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'}); push @waitingitemloop, { - biblionum => $biblio->{'biblionumber'}, - barcode => $biblio->{'barcode'}, - title => $biblio->{'title'}, - brname => $branches->{ $biblio->{'holdingbranch'} }->{'branchname'}, + biblionumber=> $biblio->{'biblionumber'}, + author => $biblio->{'author'}, + itemtype => $item->{'ccode'}, + reservedate => format_date($item->{'reservedate'}), + waitingdate => format_date($item->{'waitingdate'}), + barcode => $item->{'barcode'}, + maxpickupdate=> format_date( sprintf("%d-%02d-%02d",GetMaxPickupDate($item->{'waitingdate'}, $borrower->{borrowernumber},$item ))), + title => $biblio->{'title'}, + brname => $branches->{ $item->{'branchcode'} }->{'branchname'}, + waitinghere => ($item->{'branchcode'} eq $userenv_branch) }; } $flaginfo{itemloop} = \@waitingitemloop; } + elsif ( $flag =~ /DEBARRED|LOST|GNA/ ) { + if ($flag ne "GNA"){ + $flag=lc($flag); + } + else{ + $flag="gonenoaddress"; + } + %flaginfo=( $flag =>1, $flag."comment"=>$borrower->{$flag."comment"},dateend=>$flags->{uc($flag)}->{dateend}); + } elsif ( $flag eq 'ODUES' ) { my $items = $flags->{$flag}->{'itemlist'}; my @itemloop; @@ -483,7 +555,6 @@ if ($borrower) { push( @flagloop, \%flaginfo ); } $template->param( - flagset => $flagset, flagloop => \@flagloop, riborrowernumber => $borrower->{'borrowernumber'}, riborcnum => $borrower->{'cardnumber'}, @@ -494,7 +565,7 @@ if ($borrower) { } #set up so only the last 8 returned items display (make for faster loading pages) -my $returned_counter = ( C4::Context->preference('numReturnedItemsToShow') ) ? C4::Context->preference('numReturnedItemsToShow') : 8; +my $returned_counter = ( C4::Context->preference('numReturnedItemsToShow') ) ? C4::Context->preference('numReturnedItemsToShow') : 10; my $count = 0; my @riloop; foreach ( sort { $a <=> $b } keys %returneditems ) { @@ -521,19 +592,25 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { else { $ri{borrowernumber} = $riborrowernumber{$_}; } - # my %ri; my $biblio = GetBiblioFromItemNumber(GetItemnumberFromBarcode($bar_code)); + my $item = GetItem(GetItemnumberFromBarcode($bar_code)); # fix up item type for display $biblio->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $biblio->{'itype'} : $biblio->{'itemtype'}; $ri{itembiblionumber} = $biblio->{'biblionumber'}; $ri{itemtitle} = $biblio->{'title'}; $ri{itemauthor} = $biblio->{'author'}; - $ri{itemtype} = $biblio->{'itemtype'}; $ri{itemnote} = $biblio->{'itemnotes'}; - $ri{ccode} = $biblio->{'ccode'}; $ri{itemnumber} = $biblio->{'itemnumber'}; + $ri{itemtype} = $item->{'itype'}; + $ri{ccode} = $item->{'ccode'}; + $ri{itemcallnumber} = $item->{'itemcallnumber'}; + $ri{homebranch} = $item->{'homebranch'}; + $ri{holdingbranch} = $item->{'holdingbranch'}; $ri{barcode} = $bar_code; + my $shelflocations = GetKohaAuthorisedValues('items.location',''); + $ri{itemlocation} = $shelflocations->{$biblio->{'location'}}; + } else { last; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl index fc7e41f..ad7001c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/branch_transfer_limits.tmpl @@ -48,6 +48,7 @@ return false; }); + $('#selectlibrary input[type=submit]').hide(); }); </script> <style type="text/css">td { text-align: center; }</style> @@ -68,13 +69,18 @@ <form method="get" action="/cgi-bin/koha/admin/branch_transfer_limits.pl" id="selectlibrary"> <label for="branchselect">Select a library :</label> <select name="branchcode" id="branchselect"> + <option value="">Choose one</option> <!-- TMPL_LOOP NAME="branch_loop" --> + <!-- TMPL_IF EXPR="value eq branchcode" --> + <option value="<!-- TMPL_VAR NAME="value" -->" selected="selected"><!-- TMPL_VAR NAME="branchname" --></option> + <!-- TMPL_ELSE --> <option value="<!-- TMPL_VAR NAME="value" -->"><!-- TMPL_VAR NAME="branchname" --></option> + <!-- /TMPL_IF --> <!-- /TMPL_LOOP --> </select> <input type="submit" value="Choose" /> </form> - +<!-- TMPL_IF NAME="branchcode" --> <p class="help">Check the boxes for the libraries you accept to checkin items from.</p> <fieldset>For <strong>all</strong> <!--TMPL_VAR NAME="limit_phrase" -->s: <a id="CheckAll" href="#">Check All</a> | <a id="UncheckAll" href="#">Uncheck All</a></fieldset> @@ -99,11 +105,11 @@ </thead> <tbody> - <!-- TMPL_LOOP NAME="to_branch_loop" --> + <!-- TMPL_LOOP NAME="from_branch_loop" --> <!-- TMPL_UNLESS NAME="__odd__" --><tr class="highlight"><!-- TMPL_ELSE --><tr><!-- /TMPL_UNLESS --> - <td><label style="min-width:400px;" for="<!-- TMPL_VAR NAME="code" --><!-- TMPL_VAR NAME="toBranch" -->row"><!-- TMPL_VAR NAME="toBranch" --> - <!-- TMPL_VAR NAME="toBranchname" --></label></td> - <td><input type="checkbox" id="<!-- TMPL_VAR NAME="code" --><!-- TMPL_VAR NAME="toBranch" -->row" name="<!-- TMPL_VAR NAME="code" -->_<!-- TMPL_VAR NAME="toBranch" -->" <!-- TMPL_IF NAME="isChecked" -->checked="checked" <!-- /TMPL_IF --> /></td> + <td><label style="min-width:400px;" for="<!-- TMPL_VAR NAME="code" --><!-- TMPL_VAR NAME="fromBranch" -->row"><!-- TMPL_VAR NAME="fromBranch" --> - <!-- TMPL_VAR NAME="fromBranchname" --></label></td> + <td><input type="checkbox" id="<!-- TMPL_VAR NAME="code" --><!-- TMPL_VAR NAME="fromBranch" -->row" name="<!-- TMPL_VAR NAME="code" -->_<!-- TMPL_VAR NAME="fromBranch" -->" <!-- TMPL_IF NAME="isChecked" -->checked="checked" <!-- /TMPL_IF --> /></td> </tr> <!-- /TMPL_LOOP --> </tbody> @@ -121,6 +127,7 @@ </div> </div> </div> +<!-- /TMPL_IF --> <div class="yui-b"> <!-- TMPL_INCLUDE NAME="admin-menu.inc" --> </div> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl index ad675d1..dcb57a2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl @@ -24,7 +24,8 @@ <!-- TMPL_IF NAME="error" --> <div class="dialog alert">Cloning of issuing rules failed!</div> <!-- TMPL_ELSE --> - <div class="dialog message"><p>The rules have been cloned.</p></div> + <div class="message"><p>The rules have <a href="/cgi-bin/koha/admin/smart-rules.pl?branch=<!-- TMPL_VAR NAME="tobranch" -->">been cloned</a>.</p></div> + <script language="javascript">document.location.href = "/cgi-bin/koha/admin/smart-rules.pl?branch=<!-- TMPL_VAR NAME="tobranch" -->";</script> <!-- /TMPL_IF --> <a href="/cgi-bin/koha/admin/smart-rules.pl">Return to Issuing rules</a> <!-- TMPL_ELSE --> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl index 895ceb9..03a6de9 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl @@ -9,7 +9,7 @@ //<![CDATA[ $(document).ready(function() { $('#selectlibrary').find("input:submit").hide(); - $('#branch').change(function() { + $('#branchcode').change(function() { $('#selectlibrary').submit(); }); $('#filter').keyup(function() { @@ -19,6 +19,9 @@ $(document).ready(function() { $('.issues').show(); $('.fines').show(); $('.reserves').show(); + $('.issues :input').removeAttr('disabled',true); + $('.fines :input').removeAttr('disabled',true); + $('.reserves :input').removeAttr('disabled',true); $(this).parent().attr('class','ui-tabs-selected'); $('#issuesfilter').parent().attr('class',null); $('#finesfilter').parent().attr('class',null); @@ -28,6 +31,9 @@ $(document).ready(function() { $('.issues').show(); $('.fines').hide(); $('.reserves').hide(); + $('.issues :input').removeAttr('disabled',true); + $('.fines :input').attr('disabled',true); + $('.reserves :input').attr('disabled',true); $(this).parent().attr('class','ui-tabs-selected'); $('#nofilter').parent().attr('class',null); $('#finesfilter').parent().attr('class',null); @@ -37,6 +43,9 @@ $(document).ready(function() { $('.issues').hide(); $('.fines').show(); $('.reserves').hide(); + $('.issues :input').attr('disabled',true); + $('.fines :input').removeAttr('disabled',true); + $('.reserves :input').attr('disabled',true); $(this).parent().attr('class','ui-tabs-selected'); $('#issuesfilter').parent().attr('class',null); $('#nofilter').parent().attr('class',null); @@ -46,11 +55,99 @@ $(document).ready(function() { $('.issues').hide(); $('.fines').hide(); $('.reserves').show(); + $('.issues :input').attr('disabled',true); + $('.fines :input').attr('disabled',true); + $('.reserves :input').removeAttr('disabled',true); $(this).parent().attr('class','ui-tabs-selected'); $('#issuesfilter').parent().attr('class',null); $('#finesfilter').parent().attr('class',null); $('#nofilter').parent().attr('class',null); }); + + // Inline editor + var editor = false; + $('#smartrules>tbody>tr>td.editable').click(function() { + if ( ! editor ) { + var td = $(this); + var tdvalue = td.text().trim(); + td.text(''); + + var type; + if ( $.inArray('boolean', td.attr('class').split(' ')) != -1 ) { // If the td is boolean, we display a checkbox + editor = $('<input id="inlineeditor" type="checkbox" /\>'); + editor.attr('checked', tdvalue == 'Yes' ? 'checked' : ''); + type = 'boolean'; + } else if ( $.inArray('triple', td.attr('class').split(' ')) != -1 ) { // else if it is a triple, we display a listbox + var selectedn = tdvalue == '' ? 'selected="selected"' : ''; + var selected1 = tdvalue == 'Yes' ? 'selected="selected"' : ''; + var selected0 = tdvalue == 'No' ? 'selected="selected"' : ''; + var str = '<select id="inlineeditor">'; + str += '<option value="" ' + selectedn + '></option>'; + str += '<option value="1" ' + selected1 + '>Yes</option>'; + str += '<option value="0" ' + selected0 + '>No</option>'; + str += '</select>'; + editor = $(str); + type = 'triple'; + } else { // else we display a textbox + editor = $('<input id="inlineeditor" type="text" size="4" /\>'); + editor.attr('value', tdvalue); + } + + editor.focus(); + + editor.keyup(function(e) { // on press + if ( e.keyCode == 13 ) { // enter + + // let's build the atomic rule + var branchcode = $('#branchcode').val(); + var categorycode = td.parent().children('td.categorycode').children('span').text(); + var itemtype = td.parent().children('td.itemtype').children('span').text(); + var varname = td.attr('class').split(' ')[0]; + var inputvalue; + switch ( type ) { + case 'boolean': + inputvalue = editor.attr('checked') ? 1 : 0; + break; + default: + inputvalue = editor.val(); + break; + } + + // post it to the server + $.ajax({ + url: '/cgi-bin/koha/admin/smart-rules-service.pl', + type: "POST", + async: false, + data: "branchcode="+branchcode+"&categorycode="+categorycode+"&itemtype="+itemtype+"&varname="+varname+"&inputvalue="+inputvalue, + success: function(result) { + + // repopulate the td with data + switch ( type ) { + case 'boolean': + td.text(result == '1' ? 'Yes' : 'No'); + break; + case 'triple': + switch ( result ) { + case '' : td.text(''); break; + case '1': td.text('Yes'); break; + case '0': td.text('No'); break; + } + break; + default: + td.text(result); + break; + } + + editor.remove(); + editor = false; + } + }); + } + }); + + td.append(editor); + } + }); }); //]]> </script> @@ -74,24 +171,10 @@ $(document).ready(function() { Defining default circulation and fine rules <!-- /TMPL_IF --> </h1> - <div class="help"> - <p>The rules are applied from most specific to less specific, using the first found in this order:</p> - <ul> - <li>same library, same patron type, same item type</li> - <li>same library, same patron type, default item type</li> - <li>same library, default patron type, same item type</li> - <li>same library, default patron type, default item type</li> - <li>default library, same patron type, same item type</li> - <li>default library, same patron type, default item type</li> - <li>default library, default patron type, same item type</li> - <li>default library, default patron type, default item type</li> - </ul> - <p>To modify a rule, create a new one with the same patron type and item type.</p> - </div> <div id="bloc100"> <form method="get" action="/cgi-bin/koha/admin/smart-rules.pl" id="selectlibrary"> Select a library : - <select name="branch" id="branch" style="width:20em;"> + <select name="branchcode" id="branchcode" style="width:20em;"> <option value="*">Default</option> <!-- TMPL_LOOP NAME="branchloop" --> <!-- TMPL_IF NAME="selected" --><option value="<!-- TMPL_VAR NAME="value" -->" selected="selected"><!-- TMPL_VAR NAME="branchname" --></option><!-- TMPL_ELSE --><option value="<!-- TMPL_VAR NAME="value" -->"><!-- TMPL_VAR NAME="branchname" --></option><!-- /TMPL_IF --> @@ -107,288 +190,218 @@ $(document).ready(function() { <li><a id="issuesfilter">Issues</a></li> <li><a id="finesfilter">Fines</a></li> <li><a id="reservesfilter">Reserves</a></li> - <div style="text-align:right;"><label for="filter">Filter: </label><input type="text" name="filter" id="filter" /></div> + <div style="text-align:right;"> + <label for="filter" style="float:none;">Filter: </label> + <input type="text" name="filter" id="filter" /> + </div> </ul> <div class="tabs-container"> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add" /> - <table id="smartrules" width="100%"> - <thead> - <tr> - <th>Patron Category</th> - <th>Item Type</th> - <th class="issues">Current Checkouts Allowed</th> - <th class="issues">Loan Period (day)</th> - <th class="fines">Fine Amount</th> - <th class="fines">Fine Charging Interval</th> - <th class="fines">Fine Grace period (day)</th> - <th class="fines">Suspension in Days (day)</th> - <th class="issues">Renewals Allowed (count)</th> - <th class="reserves">Holds Allowed (count)</th> - <th class="issues">Rental Discount (%)</th> - <th> </th> - </tr> - </thead> - <tbody> - <!-- TMPL_LOOP NAME="rules" --> - <!-- TMPL_UNLESS NAME="__odd__" --> - <tr class="highlight"> - <!-- TMPL_ELSE --> - <tr> - <!-- /TMPL_UNLESS --> - <td><!-- TMPL_IF NAME="default_humancategorycode" --> - <em>Default</em> - <!-- TMPL_ELSE --> - <!-- TMPL_VAR NAME="humancategorycode" --> - <!-- /TMPL_IF --> - </td> - <td><!-- TMPL_IF NAME="default_humanitemtype" --> - <em>Default</em> - <!-- TMPL_ELSE --> - <!-- TMPL_VAR NAME="humanitemtype" --> - <!-- /TMPL_IF --> - </td> - <td class="issues"><!-- TMPL_IF NAME="unlimited_maxissueqty" --> + <table id="smartrules" width="100%"> + <thead> + <tr> + <th>Patron category</th> + <th>Item type</th> + <th class="issues">Current checkouts allowed</th> + <th class="issues">Loan period (day)</th> + <th class="fines">Fine amount</th> + <th class="fines">Fine charging interval</th> + <th class="fines">Grace period (day)</th> + <th class="fines">Suspension duration (day)</th> + <th class="issues">Renewals allowed (count)</th> + <th class="issues">Renewals period (days)</th> + <th class="reserves">Holds allowed (count)</th> + <th class="reserves">Holds pickup delay (day)</th> + <th class="reserves">Allow on shelf holds</th> + <th class="reserves">Holds restricted to library</th> + <th class="issues">Rental Discount (%)</th> + <th> </th> + </tr> + </thead> + <tbody> + <!-- TMPL_LOOP NAME="rules" --> + <!-- TMPL_UNLESS NAME="__odd__" --> + <tr class="highlight"> + <!-- TMPL_ELSE --> + <tr> + <!-- /TMPL_UNLESS --> + <td class="categorycode"> + <span style="display:none;"><!-- TMPL_VAR NAME="categorycode" --></span> + <!-- TMPL_IF NAME="default_humancategorycode" --> + <em>Default</em> + <!-- TMPL_ELSE --> + <!-- TMPL_VAR NAME="humancategorycode" --> + <!-- /TMPL_IF --> + </td> + <td class="itemtype"> + <span style="display:none;"><!-- TMPL_VAR NAME="itemtype" --></span> + <!-- TMPL_IF NAME="default_humanitemtype" --> + <em>Default</em> + <!-- TMPL_ELSE --> + <!-- TMPL_VAR NAME="humanitemtype" --> + <!-- /TMPL_IF --> + </td> + <!-- TMPL_IF NAME="herited_maxissueqty" --> + <td class="maxissueqty editable issues herited"> + <!-- TMPL_ELSE --> + <td class="maxissueqty editable issues"> + <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="unlimited_maxissueqty" --> Unlimited <!-- TMPL_ELSE --> <!-- TMPL_VAR NAME="maxissueqty" --> <!-- /TMPL_IF --> </td> - <td class="issues"><!-- TMPL_IF NAME="issuelength" --><!-- TMPL_VAR NAME="issuelength" --> <!-- /TMPL_IF --></td> - <td class="fines"><!-- TMPL_VAR NAME="fine" --></td> - <td class="fines"><!-- TMPL_IF NAME="chargeperiod" --><!-- TMPL_VAR NAME="chargeperiod" --> <!-- /TMPL_IF --></td> - <td class="fines"><!-- TMPL_IF NAME="firstremind" --><!-- TMPL_VAR NAME="firstremind" --> <!-- /TMPL_IF --></td> - <td class="fines"><!-- TMPL_IF NAME="finedays" --> <!-- TMPL_VAR NAME="finedays" --> <!-- /TMPL_IF --></td> - <td class="issues"><!-- TMPL_IF NAME="renewalsallowed" --><!-- TMPL_VAR NAME="renewalsallowed" --> <!-- /TMPL_IF --></td> - <td class="reserves"><!-- TMPL_IF NAME="reservesallowed" --><!-- TMPL_VAR NAME="reservesallowed" --> <!-- /TMPL_IF --></td> - <td class="issues"><!-- TMPL_VAR NAME="rentaldiscount" --></td> - <td> - <a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=<!-- TMPL_VAR NAME="itemtype" -->&categorycode=<!-- TMPL_VAR NAME="categorycode" -->&branch=<!-- TMPL_VAR NAME="branch" -->">Delete</a> - </td> - </tr> - <!-- /TMPL_LOOP --> - </tbody> - <tfoot> - <tr> - <td> - <select name="categorycode"> - <option value="*">Default</option> - <!-- TMPL_LOOP NAME="categoryloop" --> - <option value="<!-- TMPL_VAR NAME="categorycode" -->"><!-- TMPL_VAR NAME="description" --></option> - <!-- /TMPL_LOOP --> - </select> - </td> - <td> - <select name="itemtype" style="width:13em;"> - <option value="*">Default</option> - <!-- TMPL_LOOP NAME="itemtypeloop" --> - <option value="<!-- TMPL_VAR NAME="itemtype" -->"><!-- TMPL_VAR NAME="description" --></option> - <!-- /TMPL_LOOP --> - </select> - </td> - <td class="issues"><input name="maxissueqty" size="3" /></td> - <td class="issues"><input name="issuelength" size="3" /> </td> - <td class="fines"><input name="fine" size="4" /></td> - <td class="fines"><input name="chargeperiod" size="2" /></td> - <td class="fines"><input name="firstremind" size="2" /> </td> - <td class="fines"><input name="finedays" size="3" /> </td> - <td class="issues"><input name="renewalsallowed" size="2" /></td> - <td class="reserves"><input name="reservesallowed" size="2" /></td> - <td><input class="issues" name="rentaldiscount" size="2" /></td> - <td><input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->"/><input type="submit" value="Add" class="submit" /></td> - </tr> - </tfoot> - </table> - </form> + <!-- TMPL_IF NAME="herited_issuelength" --> + <td class="issuelength editable issues herited"> + <!-- TMPL_ELSE --> + <td class="issuelength editable issues"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="issuelength" --> + </td> + <!-- TMPL_IF NAME="herited_fine" --> + <td class="fine editable fines herited"> + <!-- TMPL_ELSE --> + <td class="fine editable fines"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="fine" --> + </td> + <!-- TMPL_IF NAME="herited_chargeperiod" --> + <td class="chargeperiod editable fines herited"> + <!-- TMPL_ELSE --> + <td class="chargeperiod editable fines"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="chargeperiod" --> + </td> + <!-- TMPL_IF NAME="herited_firstremind" --> + <td class="firstremind editable fines herited"> + <!-- TMPL_ELSE --> + <td class="firstremind editable fines"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="firstremind" --> + </td> + <!-- TMPL_IF NAME="herited_finedays" --> + <td class="finedays editable fines herited"> + <!-- TMPL_ELSE --> + <td class="finedays editable fines"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="finedays" --> + </td> + <!-- TMPL_IF NAME="herited_renewalsallowed" --> + <td class="renewalsallowed editable issues herited"> + <!-- TMPL_ELSE --> + <td class="renewalsallowed editable issues"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="renewalsallowed" --> + </td> + <!-- TMPL_IF NAME="herited_renewalperiod" --> + <td class="renewalperiod editable issues herited"> + <!-- TMPL_ELSE --> + <td class="renewalperiod editable issues"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="renewalperiod" --> + </td> + <!-- TMPL_IF NAME="herited_reservesallowed" --> + <td class="reservesallowed editable reserves herited"> + <!-- TMPL_ELSE --> + <td class="reservesallowed editable reserves"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="reservesallowed" --> + </td> + <!-- TMPL_IF NAME="herited_holdspickupdelay" --> + <td class="holdspickupdelay editable reserves herited"> + <!--TMPL_ELSE--> + <td class="holdspickupdelay editable reserves"> + <!--/TMPL_IF--> + <!-- TMPL_VAR NAME="holdspickupdelay" --> + </td> + <!-- TMPL_IF NAME="herited_allowonshelfholds" --> + <td class="allowonshelfholds editable reserves triple herited"> + <!--TMPL_ELSE--> + <td class="allowonshelfholds editable reserves triple"> + <!--/TMPL_IF--> + <!-- TMPL_IF NAME="allowonshelfholds" --> + Yes + <!--TMPL_ELSE--> + No + <!--/TMPL_IF--> + </td> + <!-- TMPL_IF NAME="herited_holdrestricted" --> + <td class="holdrestricted editable reserves boolean herited"> + <!--TMPL_ELSE--> + <td class="holdrestricted editable reserves boolean"> + <!--/TMPL_IF--> + <!-- TMPL_IF NAME="holdrestricted" --> + Yes + <!--TMPL_ELSE--> + No + <!--/TMPL_IF--> + </td> + <!-- TMPL_IF NAME="herited_rentaldiscount" --> + <td class="rentaldiscount editable issues herited"> + <!-- TMPL_ELSE --> + <td class="rentaldiscount editable issues"> + <!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="rentaldiscount" --> + </td> + <td> + <a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=<!-- TMPL_VAR NAME="itemtype" -->&categorycode=<!-- TMPL_VAR NAME="categorycode" -->&branchcode=<!-- TMPL_VAR NAME="branchcode" -->">Delete</a> + </td> + </tr> + <!-- /TMPL_LOOP --> + </tbody> + <form method="post" name="inputrules" action="/cgi-bin/koha/admin/smart-rules.pl"> + <input type="hidden" name="op" value="add" /> + <tfoot> + <tr> + <td> + <select name="categorycode" id="categorycode" style="width:12em;"> + <option value="*">Default</option> + <!-- TMPL_LOOP NAME="categoryloop" --> + <!-- TMPL_IF Name="selected"--> + <option value="<!-- TMPL_VAR NAME="categorycode" -->" selected="selected"><!-- TMPL_VAR NAME="description" --></option> + <!--TMPL_ELSE --> <option value="<!-- TMPL_VAR NAME="categorycode" -->" ><!-- TMPL_VAR NAME="description" --></option> + <!-- /TMPL_IF --> + <!-- /TMPL_LOOP --> + </select> + </td> + <td> + <select name="itemtype" style="width:12em;"> + <option value="*">Default</option> + <!-- TMPL_LOOP NAME="itemtypeloop" --> + <!-- TMPL_IF Name="selected"--> + <option value="<!-- TMPL_VAR NAME="itemtype" -->" selected="selected"><!-- TMPL_VAR NAME="description" --></option> + <!--TMPL_ELSE --> <option value="<!-- TMPL_VAR NAME="itemtype" -->"><!-- TMPL_VAR NAME="description" --></option> + <!-- /TMPL_IF --> + <!-- /TMPL_LOOP --> + </select> + </td> + <td class="issues"><input name="maxissueqty" size="3" value="<!-- TMPL_VAR NAME="maxissueqty" -->"/></td> + <td class="issues"><input name="issuelength" size="3" value="<!-- TMPL_VAR NAME="issuelength" -->"/> </td> + <td class="fines"><input name="fine" size="4" value="<!-- TMPL_VAR NAME="fine" -->"/></td> + <td class="fines"><input name="chargeperiod" size="2" value="<!-- TMPL_VAR NAME="chargeperiod" -->"/></td> + <td class="fines"><input name="firstremind" size="2" value="<!-- TMPL_VAR NAME="firstremind" -->"/> </td> + <td class="fines"><input name="finedays" size="3" value="<!-- TMPL_VAR NAME="finedays" -->"/> </td> + <td class="issues"><input name="renewalsallowed" size="2" value="<!-- TMPL_VAR NAME="renewalsallowed" -->"/></td> + <td class="issues"><input name="renewalperiod" size="2" value="<!-- TMPL_VAR NAME="renewalperiod" -->"/></td> + <td class="reserves"><input name="reservesallowed" size="2" value="<!-- TMPL_VAR NAME="reservesallowed" -->"/></td> + <td class="reserves"><input name="holdspickupdelay" size="2" value="<!-- TMPL_VAR NAME="holdspickupdelay" -->"/></td> + <td class="reserves"> + <select name="allowonshelfholds"> + <option value=""></option> + <option value="1">Yes</option> + <option value="0">No</option> + </select> + </td> + <td class="reserves"><!-- TMPL_IF NAME="holdrestricted"--><input type="checkbox" name="holdrestricted" checked="checked" value="1"/> <!--TMPL_ELSE--><input type="checkbox" name="holdrestricted" value="1"/> <!-- /TMPL_IF --></td> + <td class="issues"><input name="rentaldiscount" size="2" /></td> + <td><input type="hidden" name="branchcode" value="<!-- TMPL_VAR NAME="branchcode" -->"/><input type="submit" value="Add" class="submit" /></td> + </tr> + </tfoot> + </form> + </table> </div><!-- tabs-container --> </div><!-- toptabs --> </div> - <div class="help"> - <h4>Defaults for this library</h4> - <p>You can set a default maximum number of checkouts and hold policy that will be used if none is defined below for a particular item type or category.</p> - </div> - <div> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="set-branch-defaults" /> - <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->"/> - <table> - <tr> - <th> </th> - <th>Total Current Checkouts Allowed</th> - <th>Hold Policy</th> - <th> </th> - <th> </th> - </tr> - <tr> - <td><em>Defaults<!-- TMPL_UNLESS NAME="default_rules" --> (not set)<!-- /TMPL_IF --></em></td> - <td><input type="text" name="maxissueqty" size="3" value="<!-- TMPL_VAR NAME="default_maxissueqty" -->"/></td> - <td> - <select name="holdallowed"> - <!-- TMPL_IF NAME="default_holdallowed_any" --> - <option value="2" selected="selected"> - <!-- TMPL_ELSE --> - <option value="2"> - <!-- /TMPL_IF --> - From Any Library - </option> - <!-- TMPL_IF NAME="default_holdallowed_same" --> - <option value="1" selected="selected"> - <!-- TMPL_ELSE --> - <option value="1"> - <!-- /TMPL_IF --> - From Home Library - </option> - <!-- TMPL_IF NAME="default_holdallowed_none" --> - <option value="0" selected="selected"> - <!-- TMPL_ELSE --> - <option value="0"> - <!-- /TMPL_IF --> - No Holds Allowed - </option> - </select> - </td> - <td><input type="submit" value="Save" class="submit" /></td> - <td> - <a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=*&branch=<!-- TMPL_VAR NAME="branch" -->">Unset</a> - </td> - </tr> - </table> - </form> - </div> - <!-- TMPL_IF NAME="show_branch_cat_rule_form" --> - <div class="help"> - <p>For this library, you can specify the maximum number of loans that - a patron of a given category can make, regardless of the item type. - </p> - <p>If the total amount loanable for a given patron category is left blank, - no limit applies, except possibly for a limit you define for a specific item type. - </p> - </div> - <div> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add-branch-cat" /> - <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->"/> - <table> - <tr> - <th>Patron Category</th> - <th>Total Current Checkouts Allowed</th> - <th> </th> - </tr> - <!-- TMPL_LOOP NAME="branch_cat_rule_loop" --> - <!-- TMPL_UNLESS NAME="__odd__" --> - <tr class="highlight"> - <!-- TMPL_ELSE --> - <tr> - <!-- /TMPL_UNLESS --> - <td><!-- TMPL_IF NAME="default_humancategorycode" --> - <em>Default</em> - <!-- TMPL_ELSE --> - <!-- TMPL_VAR NAME="humancategorycode" --> - <!-- /TMPL_IF --> - </td> - <td><!-- TMPL_IF NAME="unlimited_maxissueqty" --> - Unlimited - <!-- TMPL_ELSE --> - <!-- TMPL_VAR NAME="maxissueqty" --> - <!-- /TMPL_IF --> - </td> - <td> - <a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-cat&categorycode=<!-- TMPL_VAR NAME="categorycode" -->&branch=<!-- TMPL_VAR NAME="branch" -->">Delete</a> - </td> - </tr> - <!-- /TMPL_LOOP --> - <tr> - <td> - <select name="categorycode"> - <!-- TMPL_LOOP NAME="categoryloop" --> - <option value="<!-- TMPL_VAR NAME="categorycode" -->"><!-- TMPL_VAR NAME="description" --></option> - <!-- /TMPL_LOOP --> - </select> - </td> - <td><input name="maxissueqty" size="3" /></td> - <td><input type="submit" value="Add" class="submit" /></td> - </tr> - </table> - </form> - </div> - <!-- /TMPL_IF --> - <div class="help"> - <p> - For this library, you can edit rules for given itemtypes, regardless - of the patron's category. - </p> - <p> - Currently, this means hold policies. - The various policies have the following effects: - </p> - <ul> - <li><strong>From Any Library:</strong> Patrons from any library may put this item on hold. <cite>(default if none is defined)</cite></li> - <li><strong>From Home Library:</strong> Only patrons from the item's home library may put this book on hold.</li> - <li><strong>No Holds Allowed:</strong> No patron may put this book on hold.</li> - </ul> - <p> - Note that if the system preference - <code>AllowHoldPolicyOverride</code> is enabled, these policies can - be overridden by your circulation staff. Also, these policies are - based on the patron's home branch, <em>not</em> the branch that - the reserving staff member is from. - </p> - </div> - <div> - <form method="post" action="/cgi-bin/koha/admin/smart-rules.pl"> - <input type="hidden" name="op" value="add-branch-item" /> - <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->"/> - <table> - <tr> - <th>Item Type</th> - <th>Hold Policy</th> - <th> </th> - </tr> - <!-- TMPL_LOOP NAME="branch_item_rule_loop" --> - <!-- TMPL_UNLESS NAME="__odd__" --> - <tr class="highlight"> - <!-- TMPL_ELSE --> - <tr> - <!-- /TMPL_UNLESS --> - <td><!-- TMPL_IF NAME="default_humanitemtype" --> - <em>Default</em> - <!-- TMPL_ELSE --> - <!-- TMPL_VAR NAME="humanitemtype" --> - <!-- /TMPL_IF --> - </td> - <td><!-- TMPL_IF NAME="holdallowed_any" --> - From Any Library - <!-- TMPL_ELSIF NAME="holdallowed_same" --> - From Home Library - <!-- TMPL_ELSE --> - No Holds Allowed - <!-- /TMPL_IF --> - </td> - <td> - <a class="button" href="/cgi-bin/koha/admin/smart-rules.pl?op=delete-branch-item&itemtype=<!-- TMPL_VAR NAME="itemtype" -->&branch=<!-- TMPL_VAR NAME="branch" -->">Delete</a> - </td> - </tr> - <!-- /TMPL_LOOP --> - <tr> - <td> - <select name="itemtype"> - <!-- TMPL_LOOP NAME="itemtypeloop" --> - <option value="<!-- TMPL_VAR NAME="itemtype" -->"><!-- TMPL_VAR NAME="description" --></option> - <!-- /TMPL_LOOP --> - </select> - </td> - <td> - <select name="holdallowed"> - <option value="2">From Any Library</option> - <option value="1">From Home Library</option> - <option value="0">No Holds Allowed</option> - </select> - </td> - <td><input type="submit" value="Add" class="submit" /></td> - </tr> - </table> - </form> - </div> </div> </div> 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 20b3650..6194a99 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -9,6 +9,10 @@ <script type="text/javascript" src="<!-- TMPL_VAR name="themelang" -->/lib/jquery/plugins/jquery.checkboxes.min.js"></script> <script type="text/javascript"> //<![CDATA[ +function Dopop(link) { + var newin=window.open(link,'popup','width=600,height=400,resizable=1,toolbar=0,scrollbars=1,top'); +} + <!-- TMPL_IF NAME="UseTablesortForCirc" -->$.tablesorter.addParser({ id: 'articles', is: function(s) {return false; }, @@ -23,9 +27,20 @@ dateFormat: 'uk',<!-- /TMPL_IF --> headers: { 1: { sorter: 'articles' },5: { sorter: false },6:{sorter:false},7:{sorter:false},8:{sorter:false}} }); + $("#relissuest").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> + dateFormat: 'uk',<!-- /TMPL_IF --> + headers: { 1: { sorter: 'articles' },5: { sorter: false },6:{sorter:false},7:{sorter:false},8:{sorter:false}} + }); + + //FIXME: Sorting does not work when there are previous checkouts only + // (It works fine when there are only checkouts of the day, or both previous and today checkouts) $("#issuest").bind("sortEnd",function() { $("#previous").parents("tr").remove(); // 'previous checkouts' header chokes table sorter }); + $("#relissuest").bind("sortEnd",function() { + $("#relprevious").parents("tr").remove(); // 'previous checkouts' header chokes table sorter + }); + $("#holdst").tablesorter({<!-- TMPL_IF NAME="dateformat_metric" --> dateFormat: 'uk',<!-- /TMPL_IF --> sortList: [[0,0]], @@ -42,14 +57,15 @@ <!-- /TMPL_IF --> var allcheckboxes = $(".checkboxed"); - $("#renew_all").click(function(){ - $(allcheckboxes).checkCheckboxes(":input[name*=items]"); - $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); - }); $("#CheckAllitems").click(function(){ $(allcheckboxes).checkCheckboxes(":input[name*=items]"); $(allcheckboxes).unCheckCheckboxes(":input[name*=barcodes]"); return false; }); +// $(":input[name*]=items").click(function(){ +// var itemnumber=getitemnumber($(this).attr(???id???)); +// alert(getitemnumber($(this).attr(???id???))); +// $("#return_"+itemnumber).attr('checked', !$(this).attr('checked')); +// }); $("#CheckNoitems").click(function(){ $(allcheckboxes).unCheckCheckboxes(":input[name*=items]"); return false; }); @@ -64,12 +80,9 @@ var allcheckboxes = $(".checkboxed"); <!-- TMPL_IF NAME="CAN_user_circulate_override_renewals" --> <!-- TMPL_IF NAME="AllowRenewalLimitOverride" --> $( '#override_limit' ).click( function () { - if ( this.checked ) { - $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide(); - } else { - $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show(); - } + $( '.renewals-allowed' ).toggle(); } ).attr( 'checked', false ); + $( '.renewals-allowed' ).hide(); <!-- /TMPL_IF --> <!-- /TMPL_IF --> // Clicking the table cell checks the checkbox inside it @@ -108,13 +121,38 @@ var allcheckboxes = $(".checkboxed"); radioCheckBox($(this)); }); }); - + index = id.IndexOf("_"); + return id.substr(index+1); +} +function uncheck_sibling(me){ +nodename=me.getAttribute("name"); +if (nodename =="barcodes[]"){ + var Node=me.parentNode.previousSibling; + while (Node.nodeName!="TD"){Node=Node.previousSibling} + var Nodes=Node.childNodes; + for (var i=0;i<Nodes.length;i++){ + if (Nodes[i].nodeName=="INPUT" && Nodes[i].getAttribute("type")=="checkbox"){ + Nodes[i].checked=false; + } + } + +}else { + var Node=me.parentNode.nextSibling; + while (Node.nodeName!="TD"){Node=Node.nextSibling} + var Nodes=Node.childNodes; + for (var i=0;i<Nodes.length;i++){ + if (Nodes[i].nodeName=="INPUT" && Nodes[i].getAttribute("type")=="checkbox"){ + Nodes[i].checked=false; + } + } +} +} function validate1(date) { var today = new Date(); - if ( date < today ) { - return true; - } else { + if ( today < date || date.toDateString() == today.toDateString() ) { return false; + } else { + return true; } }; function refocus(calendar) { @@ -190,10 +228,17 @@ function refocus(calendar) { </form> </div> -<!-- TMPL_IF NAME="dateexpiry" --><div class="dialog message">Patron's account has been renewed until <!-- TMPL_VAR NAME="dateexpiry" --></div><!-- /TMPL_IF --> +<!-- TMPL_INCLUDE NAME="reserves_waiting.inc" --> + +<!-- TMPL_IF name="circnote" --> + <div id="circnote" class="dialog alert"> + <h3>Circulation note:</h2> + <!-- TMPL_VAR name="circnote" --> + </div> +<!-- /TMPL_IF --> +<!-- TMPL_IF NAME="newexpiry" --><div class="dialog message">Patron's account has been renewed until <!-- TMPL_VAR NAME="newexpiry" --></div><!-- /TMPL_IF --> <!-- TMPL_IF NAME="NEEDSCONFIRMATION" --> <div class="yui-g"> - <div id="circ_needsconfirmation" class="dialog alert"> <h3>Please Confirm Checkout</h3> @@ -202,10 +247,6 @@ function refocus(calendar) { <li>The patron has a debt of <!-- TMPL_VAR name="DEBT" --></li> <!-- /TMPL_IF --> -<!-- TMPL_IF NAME="RENEW_ISSUE" --> - <li>Item is currently checked out to this patron. Renew?</li> -<!-- /TMPL_IF --> - <!-- TMPL_IF NAME="RESERVE_WAITING" --> <li>Item is consigned for <!-- TMPL_VAR NAME="RESERVE_WAITING" --></li> <!-- /TMPL_IF --> @@ -214,28 +255,45 @@ function refocus(calendar) { <li>Item is on hold for <!-- TMPL_VAR NAME="RESERVED" --></li> <!-- /TMPL_IF --> -<!-- TMPL_IF NAME="ISSUED_TO_ANOTHER" --> - <li>Item ( <!-- TMPL_VAR NAME="getTitleMessageIteminfo" --> ) checked out to <!-- TMPL_VAR NAME="ISSUED_TO_ANOTHER" -->. Check in and check out?</li> -<!-- /TMPL_IF --> - <!-- TMPL_IF NAME="TOO_MANY" --> - <li>Too many checked out (already checked out / max : <!-- TMPL_VAR name="TOO_MANY" -->)</li> + <li>Check out limit reached (already checked out / max : <!-- TMPL_VAR name="TOO_MANY" -->)</li> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="BORRNOTSAMEBRANCH" --> <li>This patrons is from a different library (<!-- TMPL_VAR NAME="BORRNOTSAMEBRANCH" -->)</li> <!-- /TMPL_IF --> +<!-- TMPL_IF NAME="BRANCH_TRANSFER_NOT_ALLOWED" --> + <li>Item should be at <!--TMPL_VAR Name="BRANCH_TRANSFER_NOT_ALLOWED"-->.<br /> It should not be checked out in this library.</li> +<!-- /TMPL_IF --> + <!-- TMPL_IF NAME="PATRON_CANT" --> - <li>This patron can't check out this item per library circulation policy</i> + <li>This patron can't check out this item per library circulation policy</li> +<!-- /TMPL_IF --> + +<!-- TMPL_IF NAME="USERBLOCKEDOVERDUE" --> + <li>This patron can't check out this item. Debarred until : <!--TMPL_VAR Name="USERBLOCKEDOVERDUE"--> </li> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="NOT_FOR_LOAN_FORCING" --> <li>Item is normally not for loan. Check out anyway?</li> <!-- /TMPL_IF --> -<!-- TMPL_IF NAME="USERBLOCKEDOVERDUE" --> - <li>Patron has <!-- TMPL_VAR NAME="USERBLOCKEDOVERDUE" --> overdue item(s). Check out anyway?</li> +<!-- TMPL_IF NAME="DAMAGED" --> + <li>Item is considered damaged (<!-- TMPL_VAR NAME="DAMAGED" -->). Check out anyway?</li> <!-- /TMPL_IF --> + +<!-- TMPL_IF NAME="ISSUED_TO_ANOTHER" --> + <li>Item ( <!-- TMPL_VAR NAME="getTitleMessageIteminfo" --> ) checked out to <!-- TMPL_VAR NAME="ISSUED_TO_ANOTHER" -->. Check in and check out?</li> +<!-- /TMPL_IF --> + +<!-- TMPL_IF NAME="RENEW_ISSUE" --> + <li>Item is currently checked out to this patron. Renew?</li> +<!-- /TMPL_IF --> + +<!-- TMPL_IF NAME="USERBLOCKEDREMAINING" --> + <li>Patron cannot check-out this item : has overdue items.</li> +<!-- /TMPL_IF --> + </ul> <form method="post" action="/cgi-bin/koha/circ/circulation.pl"> @@ -303,6 +361,10 @@ function refocus(calendar) { <li>The barcode was not found <!-- TMPL_VAR NAME="barcode" --></li> <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="LOAN_LENGTH_UNDEFINED" --> + <li>No circulation rule defined for <!-- TMPL_VAR Name="LOAN_LENGTH_UNDEFINED"--> </li> + <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="NOT_FOR_LOAN" --> <li>Item not for loan</li> <!-- /TMPL_IF --> @@ -316,15 +378,11 @@ function refocus(calendar) { <!-- /TMPL_IF --> <!-- TMPL_IF NAME="GNA" --> - <li>Patron's address is in doubt</li> + <li>Patron's address is in doubt<!-- TMPL_IF NAME="gonenoaddresscomment" -->: <!-- TMPL_VAR NAME="gonenoaddresscomment" --><!-- /TMPL_IF --></li> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="CARD_LOST" --> - <li>Patron's card is lost</li> - <!-- /TMPL_IF --> - - <!-- TMPL_IF NAME="DEBARRED" --> - <li>Patron is restricted</li> + <li>Patron's card is lost<!-- TMPL_IF NAME="lostcomment" -->: <!-- TMPL_VAR NAME="lostcomment" --><!-- /TMPL_IF --></li> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="NO_MORE_RENEWALS" --> @@ -353,7 +411,6 @@ function refocus(calendar) { <!-- /TMPL_IF --> </div></div> -<!-- TMPL_ELSE --> <!-- TMPL_IF NAME="soundon" --> <audio src="/intranet-tmpl/prog/sound/beep.ogg" autoplay="autoplay" autobuffer="autobuffer"></audio> <!-- /TMPL_IF --> @@ -429,40 +486,29 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" alt="Show Calendar" border="0" id="CalendarDueDate" style="cursor: pointer;" /> <script language="JavaScript" type="text/javascript"> //<![CDATA[ - function validate1(date) { - var today = new Date(); - if ( date < today ) { - return true; - } else { - return false; - } - }; - function refocus(calendar) { - $('#barcode').focus(); - calendar.hide(); - }; //#TODO - ADD syspref (AllowPostDatedCheckouts). Calendar.setup( { inputField : "duedatespec", ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->", button : "CalendarDueDate", -// disableFunc : validate1, -// dateStatusFunc : validate1, + dateStatusFunc : validate1, onClose : refocus } ); //]]> </script> - - <label for="stickyduedate"> Remember for Session:</label> -<!-- TMPL_IF NAME="stickyduedate" --> -<input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" checked="checked" /> -<!-- TMPL_ELSE --> -<input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" /> + </p><p> + <label for="stickyduedate"> Remember for Session:</label> + <!-- TMPL_IF NAME="stickyduedate" --> + <input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" checked="checked" /> + <!-- TMPL_ELSE --> + <input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" /> + <!-- /TMPL_IF --> + <input type="button" class="action" id="cleardate" value="Clear" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" /> + </p> + </div> <!-- /TMPL_IF --> - <input type="button" class="action" id="cleardate" value="Clear" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" /> -</div><!-- /TMPL_IF --> <input type="hidden" name="borrowernumber" id="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" /> <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->" /> <input type="hidden" name="printer" value="<!-- TMPL_VAR NAME="printer" -->" /> @@ -485,7 +531,8 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <div id="circmessages" class="circmessage attention"> <!-- /TMPL_IF --> - <h3><!-- TMPL_IF NAME="noissues" -->Cannot Check Out!<!-- TMPL_ELSE -->Attention:<!-- /TMPL_IF --></h3> + <h3><!-- TMPL_IF NAME="noissues" -->Cannot Check Out!<!-- TMPL_ELSE --> + <!-- TMPL_IF NAME="warning" -->Attention:<!-- /TMPL_IF --><!-- /TMPL_IF --></h3> <ul> <!-- TMPL_IF NAME = "warndeparture" --> @@ -509,16 +556,21 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="gna" --> - <li class="blocker"><span class="circ-hlt">Address:</span> Patron's address in doubt</li> + <li class="blocker"><span class="circ-hlt">Address: </span>Patron's address is in doubt<!-- TMPL_IF NAME="gonenoaddresscomment" --> (<!-- TMPL_VAR NAME="gonenoaddresscomment" -->)<!-- /TMPL_IF --></li> <!-- /TMPL_IF --> <!-- TMPL_IF NAME="lost" --> - <li class="blocker"><span class="circ-hlt">Lost: </span>Patron's card is lost</li> + <li class="blocker"><span class="circ-hlt">Lost: </span>Patron's card is lost<!-- TMPL_IF NAME="lostcomment" --> (<!-- TMPL_VAR NAME="lostcomment" -->)<!-- /TMPL_IF --></li> <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="dbarred" --><li class="blocker"> - <span class="circ-hlt"> Restricted:</span> Patron's account is restricted <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->&cardnumber=<!-- TMPL_VAR NAME="cardnumber" -->&destination=circ&status=0">Lift restriction</a> -</li><!-- /TMPL_IF --> + <!-- TMPL_IF NAME="userdebarred" --><li class="blocker"> + <span class="circ-hlt"> Restricted:</span> Patron's account is restricted<!-- TMPL_IF NAME="userdebarreddate" --> until <!-- TMPL_VAR NAME="userdebarreddate" --> <!--/TMPL_IF--> <!-- TMPL_IF NAME="debarredcomment"-->(<!-- TMPL_VAR NAME="debarredcomment" -->)<!-- /TMPL_IF --> + <form class="inline compact" action="/cgi-bin/koha/members/setstatus.pl" method="post"> + <input type="hidden" name="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" /> + <input type="hidden" name="destination" value="circ" /> + <input type="submit" value="Lift Debarment" /> + </form> + </li><!-- /TMPL_IF --> <!-- TMPL_IF name="odues" --><li><!-- TMPL_IF name="nonreturns" --><span class="circ-hlt">Overdues:</span> Patron has <span class="circ-hlt">ITEMS OVERDUE</span>. See highlighted items <a href="#checkouts">below</a><!-- /TMPL_IF --></li> <!-- /TMPL_IF --> @@ -552,7 +604,7 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <h4>Holds waiting:</h4> <!-- TMPL_LOOP NAME="WaitingReserveLoop" --> <ul> - <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"><!-- TMPL_VAR NAME="title" escape="html" --></a> (<!-- TMPL_VAR NAME="itemtype"-->), <!-- TMPL_IF NAME="author" -->by <!-- TMPL_VAR NAME="author"--><!-- /TMPL_IF --> Hold placed on <!-- TMPL_VAR NAME="reservedate"-->. + <li> <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"><!-- TMPL_VAR NAME="title" escape="html" --></a> (<!-- TMPL_VAR NAME="itemtype"-->), <!-- TMPL_IF NAME="author" -->by <!-- TMPL_VAR NAME="author"--><!-- /TMPL_IF --> Hold placed on <!-- TMPL_VAR NAME="reservedate"--> waiting until <!-- TMPL_VAR NAME="formattedwaitingdate" --> <!-- TMPL_IF NAME="waitingat" --> <br /><!-- TMPL_IF NAME="waitinghere" --><strong class="waitinghere"><!-- TMPL_ELSE --><strong><!-- /TMPL_IF -->Waiting at <!-- TMPL_VAR NAME="waitingat" --></strong> <!-- /TMPL_IF --> @@ -628,20 +680,58 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <input type="hidden" name="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" /> <input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->" /> <table id="issuest"> - <thead><tr> + <thead> + <tr> <th scope="col">Due date</th> <th scope="col">Title</th> <th scope="col">Item Type</th> + <th scope="col">Branch</th> <th scope="col">Checked out on</th> - <th scope="col">Call no</th> + <!-- TMPL_IF NAME="multiple_borrowers" --><th scope="col">Borrower</th><!-- /TMPL_IF --> <th scope="col">Charge</th> - <th scope="col">Price</th> + <th scope="col">Material</th> <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllitems">select all</a> | <a href="#" id="CheckNoitems">none</a></p></th> <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllreturns">select all</a> | <a href="#" id="CheckNoreturns">none</a></p></th> </tr> -<!-- TMPL_IF NAME="todayissues" --></thead> -<!-- TMPL_INCLUDE NAME="checkouts-table-footer.inc" --> - <tbody> +</thead> +<tfoot> + <tr> + <td colspan="<!-- TMPL_IF NAME="multiple_borrowers" -->6<!-- TMPL_ELSE -->5<!-- /TMPL_IF -->" style="text-align: right; font-weight:bold;">Totals:</td> + <td><!-- TMPL_VAR NAME="totaldue" --></td> + <td><!-- TMPL_VAR NAME="totalprice" --></td> + <td colspan="2"> + <p> + Renewal due date: <input type="text" size="8" id="newduedate" name="newduedate" value="<!-- TMPL_VAR Name="newduedate" -->" /> + <img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" id="newduedate_button" alt="Show Calendar" /> + <script type="text/javascript"> //<![CDATA[ + //#TODO - ADD syspref (AllowPostDatedCheckouts). + Calendar.setup( + { + inputField : "newduedate", + ifFormat : "<!-- TMPL_VAR NAME="DHTMLcalendar_dateformat" -->", + button : "newduedate_button", + dateStatusFunc : validate1, + onClose : refocus + } + ); + //]]> + </script> + </p> + <p> + <label for="exemptfine">Forgive fines on return: </label><input type="checkbox" name="exemptfine" value="1" /> + </p> + <!-- TMPL_IF NAME="CAN_user_circulate_override_renewals" --> + <!-- TMPL_IF NAME="AllowRenewalLimitOverride" --> + <p> + <label for="override_limit">Override Renewal Limit:</label> + <input type="checkbox" name="override_limit" id="override_limit" value="1" /> + </p> + <!-- /TMPL_IF --> + <!-- /TMPL_IF --> + </td> + </tr> + </tfoot> +<!-- TMPL_IF NAME="todayissues" --> <tbody> <!-- TMPL_LOOP NAME="todayissues" --> <!-- TMPL_IF NAME="__odd__" --> @@ -649,119 +739,95 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <!-- TMPL_ELSE --> <tr class="highlight"> <!-- /TMPL_IF --> - <td><!-- TMPL_VAR NAME="dd" --></td> + <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="dd" --></td> <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="itemnotes" -->- <span class="circ-hlt"><!-- TMPL_VAR name="itemnotes" --></span><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> <td><!-- TMPL_UNLESS NAME="noItemTypeImages" --> <!-- TMPL_IF NAME="itemtype_image" --><img src="<!-- TMPL_VAR NAME="itemtype_image" -->" alt="" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --><!-- TMPL_VAR NAME="itemtype" --></td> - <td><!-- TMPL_VAR NAME="checkoutdate" --></td> - <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> + <td><!-- TMPL_VAR NAME="branchdisplay" --> + <!--TMPL_IF Name="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> + <td><!-- TMPL_VAR NAME="displaydate" --></td> + <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> <td><!-- TMPL_VAR NAME="charge" --></td> - <td><!-- TMPL_VAR NAME="replacementprice" --></td> - <!-- TMPL_IF NAME="renew_failed" --> - <td class="problem">Renewal Failed</td> - <!-- TMPL_ELSE --> - <td><span style="padding: 0 1em;"><!-- TMPL_IF NAME="renewals" --><!-- TMPL_VAR NAME="renewals" --><!-- TMPL_ELSE -->0<!-- /TMPL_IF --></span> - <!-- TMPL_IF NAME="can_renew" --> - <input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" /> - <!-- TMPL_IF NAME="od" --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" /> - <!-- TMPL_ELSE --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> - <!-- /TMPL_IF --> - <!-- TMPL_ELSE --> - <!-- TMPL_IF NAME="can_confirm" --><span class="renewals-allowed" style="display: none"> - <input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" /> - <!-- TMPL_IF NAME="od" --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" /> - <!-- TMPL_ELSE --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> - <!-- /TMPL_IF --> + <td><!-- TMPL_VAR NAME="materials" --></td> + <td><span style="padding: 0 1em;"> + <!-- TMPL_IF Name="renew_error_too_many"--><span class="problem"><!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="renewals" -->/<!-- TMPL_VAR NAME="renewalsallowed" --> + <!-- TMPL_IF NAME="renew_error_too_many"--></span><!-- /TMPL_IF --> </span> - <span class="renewals-disabled"> + <!-- TMPL_UNLESS NAME="can_renew" --> + <span class="renewals-allowed" style="display: none"> + <!-- /TMPL_UNLESS --> + <input type="checkbox" id="renew_<!--TMPL_VAR NAME="itemnumber"-->" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> + <!-- TMPL_UNLESS NAME="can_renew" --> + </span> + <!-- /TMPL_UNLESS --> + + <!-- TMPL_IF NAME="renew_error"--> + <br/> + <span class="renewals-disabled problem"> + <!-- TMPL_IF NAME="renew_error_on_reserve" --> On Hold <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="renew_error_overdue" --> Overdue <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="renew_error_too_many" --> Not Renewable <!-- /TMPL_IF --> + </span> <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="renew_error_on_reserve" --> - On Hold - <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="renew_error_too_many" --> - Not Renewable - <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="can_confirm" --> - </span> - <!-- /TMPL_IF --> - <!-- /TMPL_IF --> </td> - <!-- /TMPL_IF --> <!-- TMPL_IF NAME="return_failed" --> <td class="problem">Checkin Failed</td> <!--TMPL_ELSE--> - <td><input type="checkbox" class="radio" name="barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" /> - <input type="checkbox" name="all_barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" checked="checked" style="display: none;" /> + <td style="text-align:center;"><input type="checkbox" id="return_<!--TMPL_VAR NAME="itemnumber"-->" name="barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" /> + <!-- TMPL_IF Name="reserved"--><br/><a href="javascript:void(0);" onclick="window.open('/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->')">On Hold</a><!-- /TMPL_IF --> </td> <!-- /TMPL_IF --> </tr> <!-- /TMPL_LOOP --> <!-- /loop todayissues --> <!-- /if todayissues --><!-- /TMPL_IF --> <!-- TMPL_IF NAME="previssues" --> -<!-- TMPL_IF NAME="todayissues" --><tr><th colspan="10"><a name="previous" id="previous"></a>Previous checkouts</th></tr><!-- TMPL_ELSE --> -<tr><th class="{sorter: false}" colspan="10"><a name="previous" id="previous"></a>Previous checkouts</th></tr></thead> -<!-- TMPL_INCLUDE NAME="checkouts-table-footer.inc" --> - <tbody> -<!-- /TMPL_IF --> +<tr><th class="{sorter: false}" colspan="<!-- TMPL_IF NAME="multiple_borrowers"-->10<!-- TMPL_ELSE -->9<!-- /TMPL_IF -->"><a name="previous" id="previous"></a>Previous checkouts</th></tr> <!-- TMPL_LOOP NAME="previssues" --> <!-- TMPL_IF NAME="__odd__" --> <tr> <!-- TMPL_ELSE --> <tr class="highlight"> <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="od" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> + <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> <!-- TMPL_VAR NAME="dd" --> </td> <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --> <!-- TMPL_IF NAME="itemnotes" -->- <!-- TMPL_VAR name="itemnotes" --><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> <td> <!-- TMPL_VAR NAME="itemtype" --> </td> + <td><!-- TMPL_VAR NAME="branchdisplay" --> + <!--TMPL_IF NAME="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> <td><!-- TMPL_VAR NAME="displaydate" --></td> - <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> + <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> <td><!-- TMPL_VAR NAME="charge" --></td> - <td><!-- TMPL_VAR NAME="replacementprice" --></td> - <!-- TMPL_IF NAME="renew_failed" --> - <td class="problem">Renewal Failed</td> - <!-- TMPL_ELSE --> - <td><span style="padding: 0 1em;"><!-- TMPL_IF NAME="renewals" --><!-- TMPL_VAR NAME="renewals" --><!-- TMPL_ELSE -->0<!-- /TMPL_IF --></span> - <!-- TMPL_IF NAME="can_renew" --> - <input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" /> - <!-- TMPL_IF NAME="od" --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" /> - <!-- TMPL_ELSE --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> - <!-- /TMPL_IF --> - <!-- TMPL_ELSE --> - <!-- TMPL_IF NAME="can_confirm" --><span class="renewals-allowed" style="display: none"> - <input type="checkbox" name="all_items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" style="display: none;" /> - <!-- TMPL_IF NAME="od" --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" checked="checked" /> - <!-- TMPL_ELSE --> - <input type="checkbox" class="radio" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> - <!-- /TMPL_IF --> - </span> - <span class="renewals-disabled"> - <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="renew_error_on_reserve" --> - On Hold - <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="renew_error_too_many" --> - Not Renewable - <!-- /TMPL_IF --> - <!-- TMPL_IF NAME="can_confirm" --> - </span> + <td><!-- TMPL_VAR NAME="materials" --></td> + <td style="text-align : center;"><span style="padding: 0 1em;"> + <!-- TMPL_IF Name="renew_error_too_many"--><span class="problem"><!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="renewals" -->/<!-- TMPL_VAR NAME="renewalsallowed" --> + <!-- TMPL_IF Name="renew_error_too_many"--></span><!-- /TMPL_IF --> + </span> + <!-- TMPL_UNLESS NAME="can_renew" --> + <span class="renewals-allowed" style="display: none"> + <!-- /TMPL_UNLESS --> + <input type="checkbox" id="renew_<!--TMPL_VAR NAME="itemnumber"-->" name="items[]" value="<!-- TMPL_VAR NAME="itemnumber" -->" /> + <!-- TMPL_UNLESS NAME="can_renew" --> + </span> + <!-- /TMPL_UNLESS --> + <!-- TMPL_IF NAME="renew_error"--> + <br/> + <span class="renewals-disabled problem"> + <!-- TMPL_IF NAME="renew_error_on_reserve" --> On Hold <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="renew_error_overdue" --> Overdue <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="renew_error_too_many" --> Not Renewable <!-- /TMPL_IF --> + </span> <!-- /TMPL_IF --> - <!-- /TMPL_IF --> </td> - <!-- /TMPL_IF --> <!-- TMPL_IF NAME="return_failed" --> <td class="problem">Checkin Failed</td> - <!--TMPL_ELSE--> - <td><input type="checkbox" class="radio" name="barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" /> - <input type="checkbox" name="all_barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" checked="checked" style="display: none;" /> + <!--TMPL_ELSE--> + <td style="text-align : center;"><input type="checkbox" id="return_<!--TMPL_VAR NAME="itemnumber"-->" name="barcodes[]" value="<!-- TMPL_VAR NAME="barcode" -->" onclick="uncheck_sibling(this);" /> + <!-- TMPL_IF Name="reserved"--><br/><a href="javascript:void(0);" onclick="window.open('/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->')">On Hold</a><!-- /TMPL_IF --> </td> <!-- /TMPL_IF --> </tr> @@ -771,20 +837,81 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> </table> <!--TMPL_IF NAME="issuecount"--> <fieldset class="action"> - <!-- TMPL_IF NAME="CAN_user_circulate_override_renewals" --> - <!-- TMPL_IF NAME="AllowRenewalLimitOverride" --> - <label for="override_limit">Override Renewal Limit:</label> - <input type="checkbox" name="override_limit" id="override_limit" value="1" /> - <!-- /TMPL_IF --> - <!-- /TMPL_IF --> <input type="submit" name="renew_checked" value="Renew or Return checked items" /> - <input type="submit" id="renew_all" name="renew_all" value="Renew all" /> </fieldset> <!-- /TMPL_IF --> </form> <!-- TMPL_ELSE --> <p>Patron has nothing checked out.</p> <!-- /TMPL_IF --> + + +<!-- TMPL_IF NAME="displayrelissues" --> +<h2>Relatives issues</h2> + <table id="relissuest"> + <thead> + <tr> + <th scope="col">Due date</th> + <th scope="col">Title</th> + <th scope="col">Item Type</th> + <th scope="col">Branch</th> + <th scope="col">Checked out on</th> + <th scope="col">Charge</th> + <th scope="col">Borrower</th> + <th scope="col">Material</th> + </tr> + </thead> +<!-- TMPL_IF NAME="relissues" --> <tbody> + + <!-- TMPL_LOOP NAME="relissues" --> + <!-- TMPL_IF NAME="__odd__" --> + <tr> + <!-- TMPL_ELSE --> + <tr class="highlight"> + <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="dd" --></td> + <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --><!-- TMPL_IF NAME="itemnotes" -->- <span class="circ-hlt"><!-- TMPL_VAR name="itemnotes" --></span><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> + <td><!-- TMPL_UNLESS NAME="noItemTypeImages" --> <!-- TMPL_IF NAME="itemtype_image" --><img src="<!-- TMPL_VAR NAME="itemtype_image" -->" alt="" /><!-- /TMPL_IF --><!-- /TMPL_UNLESS --><!-- TMPL_VAR NAME="itemtype" --></td> + <td><!-- TMPL_VAR NAME="branchdisplay" --> + <!--TMPL_IF Name="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> + <td><!-- TMPL_VAR NAME="displaydate" --></td> + <td><!-- TMPL_VAR NAME="charge" --></td> + <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="borrowername" --></a></td> + <td><!-- TMPL_VAR NAME="materials" --></td> + </tr> + <!-- /TMPL_LOOP --> <!-- /loop todayissues --> + <!-- /if todayissues --><!-- /TMPL_IF --> +<!-- TMPL_IF NAME="relprevissues" --> +<tr><th class="{sorter: false}" colspan="10"><a name="relprevious" id="relprevious"></a>Previous checkouts</th></tr> + <!-- TMPL_LOOP NAME="relprevissues" --> + <!-- TMPL_IF NAME="__odd__" --> + <tr> + <!-- TMPL_ELSE --> + <tr class="highlight"> + <!-- /TMPL_IF --> + <!-- TMPL_IF NAME="overdue" --><td class="od"><!-- TMPL_ELSE --><td><!-- /TMPL_IF --> + <!-- TMPL_VAR NAME="dd" --> + </td> + <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&type=intra"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --> <!-- TMPL_IF NAME="itemnotes" -->- <!-- TMPL_VAR name="itemnotes" --><!-- /TMPL_IF --> <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR NAME="itemnumber" -->#item<!-- TMPL_VAR NAME="itemnumber" -->"><!-- TMPL_VAR NAME="barcode" --></a></td> + <td> + <!-- TMPL_VAR NAME="itemtype" --> + </td> + <td><!-- TMPL_VAR NAME="branchdisplay" --> + <!--TMPL_IF NAME="itemcallnumber"-->(<!-- TMPL_VAR NAME="itemcallnumber" -->)<!--/TMPL_IF--></td> + <td><!-- TMPL_VAR NAME="displaydate" --></td> + <!-- TMPL_IF NAME="multiple_borrowers" --><td><!-- TMPL_VAR NAME="borrowername" --></td><!-- /TMPL_IF --> + <td><!-- TMPL_VAR NAME="charge" --></td> + <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=<!-- TMPL_VAR NAME="borrowernumber" -->"><!-- TMPL_VAR NAME="borrowername" --></a></td> + <td><!-- TMPL_VAR NAME="materials" --></td> + </tr> + <!-- /loop previssues --><!-- /TMPL_LOOP --> +<!--/if previssues --><!-- /TMPL_IF --> + </tbody> + </table> +</form> +<!-- /TMPL_IF --><!-- end displayrelissues --> + </div> @@ -808,7 +935,7 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span> <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->"><strong><!-- TMPL_VAR NAME="title" escape="html" --></strong></a><!-- TMPL_IF NAME="author" -->, by <!-- TMPL_VAR NAME="author" --><!-- /TMPL_IF --></td> <td><!-- TMPL_VAR NAME="itemcallnumber" --></td> <td><em><!-- TMPL_IF name="barcodereserv" -->Item <!-- TMPL_VAR NAME="barcodereserv" --> - <!-- /TMPL_IF --><!-- TMPL_IF name="waiting" --> <strong>waiting at <!-- TMPL_VAR NAME="waitingat" --></strong> + <!-- /TMPL_IF --><!-- TMPL_IF name="waiting" --> <strong>waiting at <!-- TMPL_VAR NAME="waitingat" --> <!-- TMPL_IF name="formattedwaitingdate" --> until <!-- TMPL_VAR NAME="formattedwaitingdate" --><!--/TMPL_IF--></strong> <!-- /TMPL_IF --> <!-- TMPL_IF name="transfered" --> <strong>in transit</strong> from <!-- TMPL_VAR NAME="frombranch" --> since <!-- TMPL_VAR NAME="datesent" --> 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 ba8d117..e1896a5 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl @@ -1,6 +1,9 @@ <!-- TMPL_INCLUDE NAME="doc-head-open.inc" --> <title>Koha › Circulation › Check In <!-- TMPL_VAR Name="title" escape="html" --> + > + > + > + > - - + @@ -709,6 +698,10 @@ function unHideSubfield(index,labelindex) { // FIXME :: is it used ? // YUI Toolbar Functions + var onSaveClick = function (e){ + return Check(e); + } + function yuiToolbar() { // new YAHOO.widget.Button("addbiblio"); @@ -734,10 +727,10 @@ function unHideSubfield(index,labelindex) { // FIXME :: is it used ? //]]> -
      -
    • +
    • +
    -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:15 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:15 +0100 Subject: [Koha-patches] [PATCH 09/17] update some unimarc plugins In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-9-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain - 010 (isbn) now don't care wether you've - or no in the isbn - 210 just documented & reindented - 210c_bis: Adds an alternative cataloguing plugin for 210$c - 225 : popup window larger --- cataloguing/value_builder/unimarc_field_010.pl | 3 +- cataloguing/value_builder/unimarc_field_210c.pl | 217 ++++++++++---------- .../value_builder/unimarc_field_210c_bis.pl | 109 ++++++++++ cataloguing/value_builder/unimarc_field_225a.pl | 2 +- cataloguing/ysearchzebra.pl | 52 +++++ 5 files changed, 274 insertions(+), 109 deletions(-) create mode 100755 cataloguing/value_builder/unimarc_field_210c_bis.pl create mode 100644 cataloguing/ysearchzebra.pl diff --git a/cataloguing/value_builder/unimarc_field_010.pl b/cataloguing/value_builder/unimarc_field_010.pl index 19dbb9f..681df31 100755 --- a/cataloguing/value_builder/unimarc_field_010.pl +++ b/cataloguing/value_builder/unimarc_field_010.pl @@ -67,6 +67,7 @@ sub plugin_javascript { } function Clic$field_number() { + Blur$field_number(); return 1; } @@ -91,7 +92,7 @@ sub plugin { my $dbh = C4::Context->dbh; my $len = 0; - my $sth = $dbh->prepare('SELECT publishercode FROM biblioitems WHERE isbn LIKE ? OR isbn LIKE ? LIMIT 1'); + my $sth = $dbh->prepare('SELECT publishercode FROM biblioitems WHERE REPLACE(isbn, "-", "") LIKE ? OR REPLACE(isbn, "-", "") LIKE ? LIMIT 1'); $isbn =~ s/-//g; if (length ($isbn) == 13){ diff --git a/cataloguing/value_builder/unimarc_field_210c.pl b/cataloguing/value_builder/unimarc_field_210c.pl index 8ecaeab..0f896b8 100755 --- a/cataloguing/value_builder/unimarc_field_210c.pl +++ b/cataloguing/value_builder/unimarc_field_210c.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl - # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. @@ -37,9 +36,10 @@ use C4::Koha; plugin_parameters : other parameters added when the plugin is called by the dopop function =cut + sub plugin_parameters { -my ($dbh,$record,$tagslib,$i,$tabloop) = @_; -return ""; + my ( $dbh, $record, $tagslib, $i, $tabloop ) = @_; + return ""; } =head1 @@ -56,18 +56,19 @@ returns : the 3 scripts are inserted after the in the html code =cut + sub plugin_javascript { -my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; -my $function_name= $field_number; -#---- build editors list. -#---- the editor list is built from the "EDITORS" thesaurus -#---- this thesaurus category must be filled as follow : -#---- 200$a for isbn -#---- 200$b for editor -#---- 200$c (repeated) for collections + my ( $dbh, $record, $tagslib, $field_number, $tabloop ) = @_; + my $function_name = $field_number; + #---- build editors list. + #---- the editor list is built from the "EDITORS" thesaurus + #---- this thesaurus category must be filled as follow : + #---- 200$a for isbn + #---- 200$b for editor + #---- 200$c (repeated) for collections -my $res = " + my $res = " "; -return ($function_name,$res); + return ( $function_name, $res ); } =head1 @@ -93,136 +94,138 @@ plugin : the true value_builded. The screen that is open in the popup window. =cut sub plugin { -my ($input) = @_; - my $query=new CGI; - my $op = $query->param('op'); + my ($input) = @_; + my $query = new CGI; + my $op = $query->param('op'); my $authtypecode = $query->param('authtypecode'); - my $index = $query->param('index'); - my $category = $query->param('category'); + my $index = $query->param('index'); + my $category = $query->param('category'); my $resultstring = $query->param('result'); - my $dbh = C4::Context->dbh; + my $dbh = C4::Context->dbh; - my $startfrom=$query->param('startfrom'); - $startfrom=0 if(!defined $startfrom); - my ($template, $loggedinuser, $cookie); + my $startfrom = $query->param('startfrom'); + $startfrom = 0 if ( !defined $startfrom ); + my ( $template, $loggedinuser, $cookie ); my $resultsperpage; my $authtypes = getauthtypes; my @authtypesloop; - foreach my $thisauthtype (keys %$authtypes) { + foreach my $thisauthtype ( keys %$authtypes ) { my $selected = 1 if $thisauthtype eq $authtypecode; - my %row =(value => $thisauthtype, - selected => $selected, - authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, - index => $index, - ); + my %row = ( + value => $thisauthtype, + selected => $selected, + authtypetext => $authtypes->{$thisauthtype}{'authtypetext'}, + index => $index, + ); push @authtypesloop, \%row; } - if ($op eq "do_search") { - my @marclist = $query->param('marclist'); - my @and_or = $query->param('and_or'); + if ( $op eq "do_search" ) { + my @marclist = $query->param('marclist'); + my @and_or = $query->param('and_or'); my @excluding = $query->param('excluding'); - my @operator = $query->param('operator'); - my @value = $query->param('value'); + my @operator = $query->param('operator'); + my @value = $query->param('value'); my $orderby = $query->param('orderby'); - $resultsperpage= $query->param('resultsperpage'); - $resultsperpage = 19 if(!defined $resultsperpage); + $resultsperpage = $query->param('resultsperpage'); + $resultsperpage = 19 if ( !defined $resultsperpage ); # builds tag and subfield arrays my @tags; - my ($results,$total) = SearchAuthorities( \@tags,\@and_or, - \@excluding, \@operator, \@value, - $startfrom*$resultsperpage, $resultsperpage,$authtypecode, $orderby); - - # Getting the $b if it exists - for (@$results) { - my $authority = GetAuthority($_->{authid}); - if ($authority->field('200') and $authority->subfield('200','b')) { - $_->{to_report} = $authority->subfield('200','b'); - } - } - - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "cataloguing/value_builder/unimarc_field_210c.tmpl", - query => $query, - type => 'intranet', - authnotrequired => 0, - flagsrequired => {editcatalogue => '*'}, - debug => 1, - }); + my ( $results, $total ) = SearchAuthorities( \@tags, \@and_or, \@excluding, \@operator, \@value, $startfrom * $resultsperpage, $resultsperpage, $authtypecode, $orderby ); + + for (@$results) { + my $authority = GetAuthority($_->{authid}); + if ($authority->field('200') and $authority->subfield('200','b')) { + $_->{to_report} = $authority->subfield('200','b'); + } + } + + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => "cataloguing/value_builder/unimarc_field_210c.tmpl", + query => $query, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { editcatalogue => '*' }, + debug => 1, + } + ); # multi page display gestion - my $displaynext=0; - my $displayprev=$startfrom; - if(($total - (($startfrom+1)*($resultsperpage))) > 0 ) { + my $displaynext = 0; + my $displayprev = $startfrom; + if ( ( $total - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) { $displaynext = 1; } my @numbers = (); - if ($total>$resultsperpage) { - for (my $i=1; $i<$total/$resultsperpage+1; $i++) { - if ($i<16) { - my $highlight=0; - ($startfrom==($i-1)) && ($highlight=1); - push @numbers, { number => $i, - highlight => $highlight , - startfrom => ($i-1)}; + if ( $total > $resultsperpage ) { + for ( my $i = 1 ; $i < $total / $resultsperpage + 1 ; $i++ ) { + if ( $i < 16 ) { + my $highlight = 0; + ( $startfrom == ( $i - 1 ) ) && ( $highlight = 1 ); + push @numbers, + { number => $i, + highlight => $highlight, + startfrom => ( $i - 1 ) + }; } } } - my $from = $startfrom*$resultsperpage+1; + my $from = $startfrom * $resultsperpage + 1; my $to; - if($total < (($startfrom+1)*$resultsperpage)) { + if ( $total < ( ( $startfrom + 1 ) * $resultsperpage ) ) { $to = $total; } else { - $to = (($startfrom+1)*$resultsperpage); + $to = ( ( $startfrom + 1 ) * $resultsperpage ); } - my $link="../cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_210c.pl&authtypecode=EDITORS&and_or=$and_or&marclist=$marclist&operator=$operator&orderby=$orderby&excluding=$excluding&".join("&",map {"value=".$_} @value)."&op=do_search&type=intranet&index=$index"; - - $template->param(result => $results) if $results; - $template->param('index' => $query->param('index')); - $template->param(startfrom=> $startfrom, - displaynext=> $displaynext, - displayprev=> $displayprev, - resultsperpage => $resultsperpage, - startfromnext => $startfrom+1, - startfromprev => $startfrom-1, - total=>$total, - from=>$from, - to=>$to, - numbers=>\@numbers, - authtypecode =>$authtypecode, - resultstring =>$value[0], - pagination_bar => pagination_bar( - $link, - getnbpages($total, $resultsperpage), - $startfrom, - 'startfrom' - ), - ); + my $link = +"../cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_210c.pl&authtypecode=EDITORS&and_or=$and_or&marclist=$marclist&operator=$operator&orderby=$orderby&excluding=$excluding&" + . join( "&", map { "value=" . $_ } @value ) + . "&op=do_search&type=intranet&index=$index"; + + $template->param( result => $results ) if $results; + $template->param( 'index' => $query->param('index') ); + $template->param( + startfrom => $startfrom, + displaynext => $displaynext, + displayprev => $displayprev, + resultsperpage => $resultsperpage, + startfromnext => $startfrom + 1, + startfromprev => $startfrom - 1, + total => $total, + from => $from, + to => $to, + numbers => \@numbers, + authtypecode => $authtypecode, + resultstring => $value[0], + pagination_bar => pagination_bar( $link, getnbpages( $total, $resultsperpage ), $startfrom, 'startfrom' ), + ); } else { - ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "cataloguing/value_builder/unimarc_field_210c.tmpl", - query => $query, - type => 'intranet', - authnotrequired => 0, - flagsrequired => {editcatalogue => '*'}, - debug => 1, - }); - - $template->param(index => $index, - resultstring => $resultstring - ); + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => "cataloguing/value_builder/unimarc_field_210c.tmpl", + query => $query, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { editcatalogue => '*' }, + debug => 1, + } + ); + + $template->param( + index => $index, + resultstring => $resultstring + ); } - $template->param(authtypesloop => \@authtypesloop); - $template->param(category => $category); + $template->param( authtypesloop => \@authtypesloop ); + $template->param( category => $category ); # Print the page output_html_with_http_headers $query, $cookie, $template->output; diff --git a/cataloguing/value_builder/unimarc_field_210c_bis.pl b/cataloguing/value_builder/unimarc_field_210c_bis.pl new file mode 100755 index 0000000..5ecaf83 --- /dev/null +++ b/cataloguing/value_builder/unimarc_field_210c_bis.pl @@ -0,0 +1,109 @@ +#!/usr/bin/perl + +# 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., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=head1 SYNOPSIS + +This plugin is used to map isbn/editor with collection. +It need : + in thesaurus, a category named EDITORS + in this category, datas must be entered like following : + isbn separator editor separator collection. + for example : + 2204 -- Cerf -- Cogitatio fidei + 2204 -- Cerf -- Le Magistere de l'Eglise + 2204 -- Cerf -- Lectio divina + 2204 -- Cerf -- Lire la Bible + 2204 -- Cerf -- Pour lire + 2204 -- Cerf -- Sources chretiennes + + when the user clic on ... on 225a line, the popup shows the list of collections from the selected editor + if the biblio has no isbn, then the search if done on editor only + If the biblio ha an isbn, the search is done on isbn and editor. It's faster. + +=over 2 + +=cut + +use strict; + +#use warnings; FIXME - Bug 2505 +use C4::Auth; +use CGI; +use C4::Context; + +use C4::AuthoritiesMarc; +use C4::Output; + +=head1 + +plugin_parameters : other parameters added when the plugin is called by the dopop function + +=cut + +sub plugin_parameters { + my ( $dbh, $record, $tagslib, $i, $tabloop ) = @_; + return ""; +} + +sub plugin_javascript { + my ( $dbh, $record, $tagslib, $field_number, $tabloop ) = @_; + my $function_name = $field_number; + my $res = " + +"; + + return ( $function_name, $res ); +} + +sub plugin { + my ($input) = @_; + my $index = $input->param('index'); + my $result = $input->param('result'); + my $editor_found = $input->param('editor_found'); + my $authoritysep = C4::Context->preference("authoritysep"); + + my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { template_name => "cataloguing/value_builder/unimarc_field_210c_bis.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { editcatalogue => '*' }, + debug => 1, + } + ); + + $template->param( + index => $index, + ); + output_html_with_http_headers $input, $cookie, $template->output; +} + +1; diff --git a/cataloguing/value_builder/unimarc_field_225a.pl b/cataloguing/value_builder/unimarc_field_225a.pl index acd02e1..daba32e 100755 --- a/cataloguing/value_builder/unimarc_field_225a.pl +++ b/cataloguing/value_builder/unimarc_field_225a.pl @@ -94,7 +94,7 @@ sub plugin_javascript { } defaultvalue = document.getElementById(\"$field_number\").value; - window.open(\"../cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_225a.pl&index=\"+index+\"&result=\"+defaultvalue+\"&editor_found=\"+editor_found,\"unimarc225a\",'width=500,height=200,toolbar=false,scrollbars=no'); + window.open(\"../cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_225a.pl&index=\"+index+\"&result=\"+defaultvalue+\"&editor_found=\"+editor_found,\"unimarc225a\",'width=500,height=400,toolbar=false,scrollbars=no'); } diff --git a/cataloguing/ysearchzebra.pl b/cataloguing/ysearchzebra.pl new file mode 100644 index 0000000..3a626fd --- /dev/null +++ b/cataloguing/ysearchzebra.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl + +# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) + +# Copyright 2010 BibLibre +# +# 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., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +=head1 ysearch.pl + + +=cut + +use strict; + +use CGI; +use C4::Context; +use C4::Search; +use C4::Auth qw/check_cookie_auth/; + +my $input = new CGI; +my $query = $input->param('query'); +my $index = $input->param('index'); + +#binmode STDOUT, ":utf8"; +print $input->header( -type => 'text/plain', -charset => 'UTF-8' ); + +my ( $auth_status, $sessionID ) = check_cookie_auth( $input->cookie('CGISESSID'), { cataloguing => '*' } ); +if ( $auth_status ne "ok" ) { + exit 0; +} + +my $results = GetDistinctValues($index, $query); + +foreach (@$results) { + print $_->{'value'} . "\n"; + +} + -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:19 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:19 +0100 Subject: [Koha-patches] [PATCH 13/17] missing french permission to deal with edit_items In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-13-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../mysql/fr-FR/1-Obligatoire/userpermissions.sql | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql index 7f67d1b..06541f5 100644 --- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql +++ b/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql @@ -4,6 +4,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES ( 6, 'place_holds', 'R??server pour des adh??rents'), ( 6, 'modify_holds_priority', 'Modifier la priorit?? des r??servations'), ( 9, 'edit_catalogue', 'Ajouter et modifier les notices du catalogue'), + ( 9, 'edit_items', 'Editer les exemplaires'), ( 9, 'fast_cataloging', 'Catalogage rapide'), ( 9, 'edit_items', 'Modification des exemplaires'), (13, 'edit_news', 'Ecrire des nouvelles pour l''OPAC et l''interface professionnelle'), -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:17 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:17 +0100 Subject: [Koha-patches] [PATCH 11/17] unimarc plugin 210c bis to fixup In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-11-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../value_builder/unimarc_field_210c_bis.tmpl | 73 ++++++++++++++++++++ .../prog/en/modules/cataloguing/z3950_search.tmpl | 2 +- 2 files changed, 74 insertions(+), 1 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c_bis.tmpl diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c_bis.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c_bis.tmpl new file mode 100644 index 0000000..93f986e --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c_bis.tmpl @@ -0,0 +1,73 @@ + + + + UNIMARC_Field 225a builder + + + + + /css/staff-global.css" /> + + + +
    + + + + + + + + + + + + + + + +
    BiblionumberTitleAuthor Status
    + + + + OK + Nothing done + Some Actions failed. List Follow :
    +
    + + + +
    All operations processed
    + + +
    +

    Modification rules:

    + + +" /> + + + + + + + + + + + + + + + + + + + +
    FieldSubfieldActionCondition ValueValue 
    + + + + + + + + All + + +
    + +
    + + + + + + + + diff --git a/tools/batchedit.pl b/tools/batchedit.pl new file mode 100755 index 0000000..c1a5f52 --- /dev/null +++ b/tools/batchedit.pl @@ -0,0 +1,222 @@ +#!/usr/bin/perl + + +# Copyright 2010 SARL BibLibre +# +# 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 CGI; +use strict; +use C4::Output; +use C4::Auth; +use C4::Branch; +use C4::Koha; +use C4::Biblio; +use C4::Context; +use C4::Debug; +use JSON; + +my $input = new CGI; +my $dbh = C4::Context->dbh; + +my $filefh = $input->param('uploadfile'); +my $recordslist = $input->param('recordslist'); +my $bib_list = $input->param('bib_list'); +my @biblionumbers; + +if ($filefh) { + while ( my $biblionumber = <$filefh> ) { + $biblionumber =~ s/[\r\n]*$//g; + push @biblionumbers, $biblionumber if $biblionumber; + } +} elsif ($recordslist) { + push @biblionumbers, split( /\s\n/, $recordslist ); +} elsif ($bib_list) { + push @biblionumbers, split('/', $bib_list); +} + +my $op = $input->param('op'); +my ($template, $loggedinuser, $cookie); + +my $frameworkcode=""; +my $tagslib = &GetMarcStructure(1,$frameworkcode); +my %report_actions; + +if($input->param('field') and not defined $op){ + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "acqui/ajax.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => "batchedit", + }); + + + my $tag = $input->param('field'); + my $subfield = $input->param('subfield'); + + if($input->param('subfield')){ + my $branches = GetBranchesLoop(); + + my @authorised_values; + if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { + if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) { + foreach my $thisbranch (@$branches) { + push @authorised_values, { + code => $thisbranch->{value}, + value => $thisbranch->{branchname}, + }; + # $value = $thisbranch->{value} if $thisbranch->{selected}; + } + }elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { + my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description"); + $sth->execute(); + while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) { + push @authorised_values, { + code => $itemtype, + value => $description, + }; + } + + }else { + # Getting the fields where the item location is + my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode); + + # Getting the name of the authorised values' category for item location + my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'}; + # Are we dealing with item location ? + my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0; + + # If so, we sort by authorised_value, else by libelle + my $orderby = $item_location ? 'authorised_value' : 'lib'; + + my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby"); + + $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value}); + + + while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { + push @authorised_values, { + code => $value, + value => ($item_location) ? $value . " - " . $lib : $lib, + }; + + } + } + } + $template->param('return' => to_json(\@authorised_values)); + }else{ + my @modifiablesubf; + + foreach my $subfield (sort keys %{$tagslib->{$tag}}) { + next if subfield_is_koha_internal_p($subfield); + next if $subfield eq "@"; + next if ($tagslib->{$tag}->{$subfield}->{'tab'} eq "10"); + my %subfield_data; + $subfield_data{subfield} = $subfield; + push @modifiablesubf, \%subfield_data; + } + $template->param('return' => to_json(\@modifiablesubf)); + } + + + output_html_with_http_headers $input, $cookie, $template->output; + exit; +}else{ + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "tools/batchedit.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => "batchedit", + }); + + $template->param( inputform => 1, ) unless @biblionumbers; + + if(!defined $op) { + my @modifiablefields; + + foreach my $tag (sort keys %{$tagslib}) { + my %subfield_data; + foreach my $subfield (sort keys %{$tagslib->{$tag}}) { + next if $subfield_data{tag}; + next if subfield_is_koha_internal_p($subfield); + next if ($tagslib->{$tag}->{$subfield}->{'tab'} eq "10"); + + $subfield_data{tag} = $tag; + + push @modifiablefields, \%subfield_data; + } + } + + $template->param( marcfields => \@modifiablefields, + bib_list => $input->param('bib_list'), + ); + + }else{ + my @fields = $input->param('field'); + my @subfields = $input->param('subfield'); + my @actions = $input->param('action'); + my @condvals = $input->param('condval'); + my @nocondvals = $input->param('nocondval'); + my @repvals = $input->param('repval'); + foreach my $biblionumber ( @biblionumbers ){ + my $record = GetMarcBiblio($biblionumber); + my $biblio = GetBiblio($biblionumber); + my $report = 0; + my @failed_actions; + for(my $i = 0 ; $i < scalar(@fields) ; $i++ ){ + my $field = $fields[$i]; + my $subfield = $subfields[$i]; + my $action = $actions[$i]; + my $condval = $condvals[$i]; + my $nocond = $nocondvals[$i]; + my $repval = $repvals[$i]; + + my ($result,$record) = BatchModField($record, $field, $subfield, $action, $condval, $nocond, $repval); + push @failed_actions, {action=>"$field $subfield $action ".($nocond eq "true"?"all":$condval)." $repval"} if ($result<=0); + } + if (@failed_actions == scalar(@fields)){ + $report_actions{$biblionumber}->{status}="No_Actions"; + } + elsif (@failed_actions>0 and @failed_actions < scalar(@fields)){ + $report_actions{$biblionumber}->{status}="Actions_Failed"; + $report_actions{$biblionumber}->{failed_actions}=\@failed_actions; + } + elsif (@failed_actions == 0){ + $report_actions{$biblionumber}->{status}="OK"; + } + ModBiblio($record, $biblionumber, $biblio->{frameworkcode}) unless ($report); + } + $template->param('moddone' => 1); + } + +} + +my @biblioinfos; + +for my $biblionumber (@biblionumbers){ + my $biblio = GetBiblio($biblionumber); + if (defined $op){ + $biblio->{$report_actions{$biblionumber}->{status}}=1; + $biblio->{failed_actions}=$report_actions{$biblionumber}->{failed_actions}; + } + push @biblioinfos, $biblio; +} + +$template->param(biblioinfos => \@biblioinfos); +output_html_with_http_headers $input, $cookie, $template->output; +exit; -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:21 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:21 +0100 Subject: [Koha-patches] [PATCH 15/17] MT #4931 add the ability to choose home or holding branch in stocktaking In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-15-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain This add radio box in stocktaking to base it on home or holdingbranch --- .../prog/en/modules/tools/inventory.tmpl | 6 ++++++ tools/inventory.pl | 4 +++- 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tmpl index 0b35000..480441d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/inventory.tmpl @@ -76,6 +76,10 @@ $(document).ready(function(){
    Select items you want to check
    1. + + Home Branch + Holding Branch +
    2. " /> " /> " /> " /> @@ -241,6 +246,7 @@ $(document).ready(function(){
      + " /> " /> " /> " /> diff --git a/tools/inventory.pl b/tools/inventory.pl index c87a7e9..f8903e5 100755 --- a/tools/inventory.pl +++ b/tools/inventory.pl @@ -49,6 +49,7 @@ $offset=0 unless $offset; my $pagesize = $input->param('pagesize'); $pagesize=50 unless $pagesize; my $branchcode = $input->param('branchcode'); +my $branch = $input->param('branch'); my $op = $input->param('op'); my $res; #contains the results loop # warn "uploadbarcodes : ".$uploadbarcodes; @@ -129,6 +130,7 @@ $template->param(branchloop => \@branch_loop, location=>$location, ignoreissued=>$ignoreissued, branchcode=>$branchcode, + branch => $branch, offset => $offset, pagesize => $pagesize, datelastseen => $datelastseen, @@ -183,7 +185,7 @@ if ( ! ($uploadbarcodes && length($uploadbarcodes)>0 ) || ( $input->param('compa } } if ($markseen or $op) { - $res = GetItemsForInventory($minlocation,$maxlocation,$location, $ignoreissued,$itemtype,$datelastseen,$branchcode,$offset,$pagesize,$staton); + $res = GetItemsForInventory( $minlocation, $maxlocation, $location, $ignoreissued, $itemtype, $datelastseen, $branchcode, $branch, $offset, $pagesize, $staton ); $template->param(loop =>$res, nextoffset => ($offset+$pagesize), prevoffset => ($offset?$offset-$pagesize:0), -- 1.7.1 From paul.poulain at biblibre.com Thu Dec 16 15:11:23 2010 From: paul.poulain at biblibre.com (paul.poulain at biblibre.com) Date: Thu, 16 Dec 2010 15:11:23 +0100 Subject: [Koha-patches] [PATCH 17/17] Add link to Fast cataloguing in case the scanned barcode don't exist in circulation In-Reply-To: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> References: <1292508683-16141-1-git-send-email-paul.poulain@biblibre.com> Message-ID: <1292508683-16141-17-git-send-email-paul.poulain@biblibre.com> From: Paul Poulain --- .../prog/en/modules/circ/circulation.tmpl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 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 20b3650..81bb215 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -301,6 +301,7 @@ function refocus(calendar) {
    3. The barcode was not found
    4. +
    5. Fast cataloging
    6. -- 1.7.1 From nengard at bywatersolutions.com Thu Dec 16 00:48:27 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Wed, 15 Dec 2010 18:48:27 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5373: Adds cardnumber to the field list of the Import Patrons NOTES. Message-ID: <1292456907-2922-1-git-send-email-nengard@bywatersolutions.com> From: Garry Collum Adds 'cardnumber' as an option to the list of possible fields in the NOTES section of the patron import tool. Signed-off-by: Nicole Engard --- .../prog/en/modules/tools/import_borrowers.tmpl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl index 510c8d7..80d7979 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl @@ -144,8 +144,8 @@
      • The first line in the file must be a header row defining which columns you are supplying in the import file.
      • Download a starter CSV file with all the columns here. Values are comma-separated.
      • -
      • OR choose which fields you want to supply from the following list:
        • - '', +
        • OR choose which fields you want to supply from the following list:
            +
          • 'cardnumber', ''
        • If loading patron attributes, the 'patron_attributes' field should contain a comma-separated list of attribute types and values. The attribute type code and a colon should precede each value. For example: INSTID:12345,LANG:fr or STARTDATE:January 1 2010,TRACK:Day. If an input record has more than one attribute, the fields should either be entered as an unquoted string (previous examples), or with each field wrapped in separate double quotes and delimited by a comma: "STARTDATE:January 1, 2010","TRACK:Day". The second syntax would be required if the data might have a comma in it, like a date string. -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 02:05:07 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Wed, 15 Dec 2010 20:05:07 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5375 (Update date/time last transaction (MARC 005) when saving authority record) Message-ID: <1292461507-3412-1-git-send-email-nengard@bywatersolutions.com> From: Marcel de Rooy Update 005 date/time when saving authority record for MARC21 and UNIMARC. --- C4/AuthoritiesMarc.pm | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index d07cca4..9421be9 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -610,6 +610,16 @@ sub AddAuthority { $format= 'MARC21'; } + #update date/time to 005 for marc and unimarc + my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); + my $f5=$record->field('005'); + if (!$f5) { + $record->insert_fields_ordered( MARC::Field->new('005',$time.".0") ); + } + else { + $f5->update($time.".0"); + } + if ($format eq "MARC21") { if (!$record->leader) { $record->leader($leader); @@ -619,12 +629,6 @@ sub AddAuthority { MARC::Field->new('003',C4::Context->preference('MARCOrgCode')) ); } - my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); - if (!$record->field('005')) { - $record->insert_fields_ordered( - MARC::Field->new('005',$time.".0") - ); - } my $date=POSIX::strftime("%y%m%d",localtime); if (!$record->field('008')) { $record->insert_fields_ordered( -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 02:10:12 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Wed, 15 Dec 2010 20:10:12 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5294 - Unescape vendor name when pushing back Message-ID: <1292461812-3514-1-git-send-email-nengard@bywatersolutions.com> From: Srdjan Jankovic Signed-off-by: Robin Sheat Signed-off-by: Nicole Engard --- .../en/modules/serials/acqui-search-result.tmpl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/acqui-search-result.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/acqui-search-result.tmpl index bacd1a9..f5a1577 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/acqui-search-result.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/acqui-search-result.tmpl @@ -6,7 +6,7 @@ function GetIt(aqbooksellerid,name) { opener.document.f.aqbooksellerid.value = aqbooksellerid; - opener.document.f.aqbooksellername.value = name; + opener.document.f.aqbooksellername.value = unescape(name); window.close(); } -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 02:12:28 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Wed, 15 Dec 2010 20:12:28 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5375 (Update date/time last transaction (MARC 005) when saving authority record) Message-ID: <1292461948-3606-1-git-send-email-nengard@bywatersolutions.com> From: Marcel de Rooy Update 005 date/time when saving authority record for MARC21 and UNIMARC. Signed-off-by: Nicole Engard --- C4/AuthoritiesMarc.pm | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index d07cca4..9421be9 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -610,6 +610,16 @@ sub AddAuthority { $format= 'MARC21'; } + #update date/time to 005 for marc and unimarc + my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); + my $f5=$record->field('005'); + if (!$f5) { + $record->insert_fields_ordered( MARC::Field->new('005',$time.".0") ); + } + else { + $f5->update($time.".0"); + } + if ($format eq "MARC21") { if (!$record->leader) { $record->leader($leader); @@ -619,12 +629,6 @@ sub AddAuthority { MARC::Field->new('003',C4::Context->preference('MARCOrgCode')) ); } - my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); - if (!$record->field('005')) { - $record->insert_fields_ordered( - MARC::Field->new('005',$time.".0") - ); - } my $date=POSIX::strftime("%y%m%d",localtime); if (!$record->field('008')) { $record->insert_fields_ordered( -- 1.5.6.5 From nengard at gmail.com Thu Dec 16 17:12:02 2010 From: nengard at gmail.com (Nicole Engard) Date: Thu, 16 Dec 2010 11:12:02 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5375 (Update date/time last transaction (MARC 005) when saving authority record) In-Reply-To: <1292461507-3412-1-git-send-email-nengard@bywatersolutions.com> References: <1292461507-3412-1-git-send-email-nengard@bywatersolutions.com> Message-ID: Forgot sign off - resending. On Wed, Dec 15, 2010 at 8:05 PM, Nicole Engard wrote: > From: Marcel de Rooy > > Update 005 date/time when saving authority record for MARC21 and UNIMARC. > --- > ?C4/AuthoritiesMarc.pm | ? 16 ++++++++++------ > ?1 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm > index d07cca4..9421be9 100644 > --- a/C4/AuthoritiesMarc.pm > +++ b/C4/AuthoritiesMarc.pm > @@ -610,6 +610,16 @@ sub AddAuthority { > ? ? ? ? $format= 'MARC21'; > ? ? } > > + ? ?#update date/time to 005 for marc and unimarc > + ? ?my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); > + ? ?my $f5=$record->field('005'); > + ? ?if (!$f5) { > + ? ? ?$record->insert_fields_ordered( MARC::Field->new('005',$time.".0") ); > + ? ?} > + ? ?else { > + ? ? ?$f5->update($time.".0"); > + ? ?} > + > ? ? ? ?if ($format eq "MARC21") { > ? ? ? ? ? ? ? ?if (!$record->leader) { > ? ? ? ? ? ? ? ? ? ? ? ?$record->leader($leader); > @@ -619,12 +629,6 @@ sub AddAuthority { > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MARC::Field->new('003',C4::Context->preference('MARCOrgCode')) > ? ? ? ? ? ? ? ? ? ? ? ?); > ? ? ? ? ? ? ? ?} > - ? ? ? ? ? ? ? my $time=POSIX::strftime("%Y%m%d%H%M%S",localtime); > - ? ? ? ? ? ? ? if (!$record->field('005')) { > - ? ? ? ? ? ? ? ? ? ? ? $record->insert_fields_ordered( > - ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MARC::Field->new('005',$time.".0") > - ? ? ? ? ? ? ? ? ? ? ? ); > - ? ? ? ? ? ? ? } > ? ? ? ? ? ? ? ?my $date=POSIX::strftime("%y%m%d",localtime); > ? ? ? ? ? ? ? ?if (!$record->field('008')) { > ? ? ? ? ? ? ? ? ? ? ? ?$record->insert_fields_ordered( > -- > 1.5.6.5 > > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > From mdhafen at tech.washk12.org Thu Dec 16 17:16:33 2010 From: mdhafen at tech.washk12.org (Mike Hafen) Date: Thu, 16 Dec 2010 09:16:33 -0700 Subject: [Koha-patches] [PATCH 12/54] MT2263 Change debarring system In-Reply-To: <1292496888-12128-12-git-send-email-paul.poulain@biblibre.com> References: <1292496888-12128-1-git-send-email-paul.poulain@biblibre.com> <1292496888-12128-12-git-send-email-paul.poulain@biblibre.com> Message-ID: > +tast Looks like a debugging line there, in koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl Should that be there? On Thu, Dec 16, 2010 at 3:54 AM, wrote: > From: Paul Poulain > > Now when a user is debarred, you set a end date, and can put a comment. > This patch is the first, it need some improvement, but works globaly > well. > If an overdue generate a debar, the debar date is set to 9999-12-31. > > show debar date on member detail > This patch show debar date, if the member is debarred, and he have a > valid date(not unlimited debar). > > add debar date in circulation > This patch add the debar date if it's not unlimited, in circulation.pl > > rework on member edition > This change the way to edit user debar date/comment, to follow nicolas' > mockup. > > (bug #MT2263) fix functions for debarring > > this fix ismemberblock and patronflags for new debarring system > > Signed-off-by: Henri-Damien LAURENT > > MT4096: Adults can also be added to an organization > > MT4584 Add duplicate support for borrowers > --- > .../prog/en/modules/members/memberentrygen.tmpl | 191 > ++++++++++++++------ > members/memberentry.pl | 60 +++++-- > members/setdebar.pl | 61 ------- > members/setstatus.pl | 13 +- > 4 files changed, 188 insertions(+), 137 deletions(-) > delete mode 100755 members/setdebar.pl > > diff --git > a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl > b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl > index 4ecc0cb..4c455d7 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tmpl > @@ -1,11 +1,13 @@ > > Koha › Patrons › > -<!-- TMPL_IF NAME="opadd" --> Add<!-- TMPL_ELSE --> Modify<!--/TMPL_IF--> > <!--TMPL_IF Name="categoryname"--> <!--TMPL_VAR Name="categoryname"--> > patron<!-- TMPL_ELSE --><!--TMPL_IF Name="I"--> Organization > patron<!--/TMPL_IF --><!--TMPL_IF Name="A"--> Adult patron<!--/TMPL_IF > --><!--TMPL_IF Name="C"--> Child patron<!--/TMPL_IF --><!--TMPL_IF > Name="P"--> Professional patron<!--/TMPL_IF --><!--TMPL_IF Name="S"--> Staff > patron<!--/TMPL_IF --><!--/TMPL_IF --><!--TMPL_UNLESS Name="opadd"--> <!-- > TMPL_VAR NAME="surname" -->, <!-- TMPL_VAR name="firstname" > --><!--/TMPL_UNLESS--> > + AddDuplicate Modify patron Organization patron Adult patron Child patron Professional > patron Staff patron , > > > > +
          > + > + name="debarredcomment" value="" onclick="this.value=''" class="debarred" size="150"/> > + > + > +
        • > +
    >
    > > > @@ -976,7 +1049,7 @@ > > > " > - id="" > name="" /> > + id="" > name="" > onclick="this.value=''" /> > > > (Password: value="" > @@ -1048,7 +1121,7 @@ > > >

    > - " /> > + " > onclick="this.value=''" /> >

    > > > diff --git a/members/memberentry.pl b/members/memberentry.pl > index fbd8538..f9a75e0 100755 > --- a/members/memberentry.pl > +++ b/members/memberentry.pl > @@ -70,7 +70,8 @@ my $destination = $input->param('destination'); > my $cardnumber = $input->param('cardnumber'); > my $check_member = $input->param('check_member'); > my $nodouble = $input->param('nodouble'); > -$nodouble = 1 if $op eq 'modify'; # FIXME hack to represent fact that if > we're > +my $duplicate = $input->param('duplicate'); > +$nodouble = 1 if ($op eq 'modify' or $op eq 'duplicate'); # FIXME hack > to represent fact that if we're > # modifying an existing patron, it ipso > facto > # isn't a duplicate. Marking FIXME > because this > # script needs to be refactored. > @@ -99,8 +100,9 @@ foreach (@field_check) { > $template->param( "mandatory$_" => 1); > } > $template->param("add"=>1) if ($op eq 'add'); > +$template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' ); > $template->param("checked" => 1) if (defined($nodouble) && $nodouble eq > 1); > -($borrower_data = GetMember( 'borrowernumber'=>$borrowernumber )) if ($op > eq 'modify' or $op eq 'save'); > +( $borrower_data = GetMember( 'borrowernumber' => $borrowernumber ) ) if ( > $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ); > my $categorycode = $input->param('categorycode') || > $borrower_data->{'categorycode'}; > my $category_type = $input->param('category_type'); > my $new_c_type = $category_type; #if we have input param, then we've > already chosen the cat_type. > @@ -117,7 +119,8 @@ $category_type="A" unless $category_type; # FIXME we > should display a error mess > > # initialize %newdata > my %newdata; # comes from $input->param() > -if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') { > +if ( $op eq 'insert' || $op eq 'modify' || $op eq 'save' || $op eq > 'duplicate' ) { > + > my @names= ($borrower_data && $op ne 'save') ? keys %$borrower_data : > $input->param(); > foreach my $key (@names) { > if (defined $input->param($key)) { > @@ -125,10 +128,26 @@ if ($op eq 'insert' || $op eq 'modify' || $op eq > 'save') { > $newdata{$key} =~ s/\"/"/g unless $key eq 'borrowernotes' > or $key eq 'opacnote'; > } > } > + > + ## Manipulate debarred > + if($newdata{debarred}){ > + $newdata{debarred} = $newdata{datedebarred} ? > $newdata{datedebarred} : "9999-12-31"; > + }elsif (exists ($newdata{debarred}) && !($newdata{debarred})){ > + undef ($newdata{debarred}); > + undef ($newdata{debarredcomment}); > + }elsif (exists ($newdata{debarredcomment}) && > $newdata{debarredcomment} eq ""){ > + undef($newdata{debarredcomment}); > + } > + > + # Manipulate flags : > + # Delete comment if flag set to no > + $newdata{gonenoaddresscomment} = "" if (defined > $newdata{gonenoaddress} && $newdata{gonenoaddress} == 0); > + $newdata{lostcomment} = "" if (defined $newdata{lost} && > $newdata{lost} == 0); > + > my $dateobject = C4::Dates->new(); > my $syspref = $dateobject->regexp(); # same syspref > format for all 3 dates > my $iso = $dateobject->regexp('iso'); # > - foreach (qw(dateenrolled dateexpiry dateofbirth)) { > + foreach (qw(dateenrolled dateexpiry dateofbirth debarred)) { > next unless exists $newdata{$_}; > my $userdate = $newdata{$_} or next; > if ($userdate =~ /$syspref/) { > @@ -198,15 +217,16 @@ if (($op eq 'insert') and !$nodouble){ > } > > #recover all data from guarantor address phone ,fax... > -if ( defined($guarantorid) and > - ( $category_type eq 'C' || $category_type eq 'P' ) and > - $guarantorid ne '' and > +if ( defined($guarantorid) > + and ( $category_type eq 'C' || $category_type eq 'P' || $category_type > eq 'A' ) > + and $guarantorid ne '' and > $guarantorid ne '0' ) { > if (my $guarantordata=GetMember(borrowernumber => $guarantorid)) { > $guarantorinfo=$guarantordata->{'surname'}." , > ".$guarantordata->{'firstname'}; > if ( !defined($data{'contactname'}) or $data{'contactname'} eq '' > or > $data{'contactname'} ne $guarantordata->{'surname'} ) { > $newdata{'contactfirstname'}= $guarantordata->{'firstname'}; > + $data{'contactname'} = $guarantordata->{'surname'}; > $newdata{'contactname'} = $guarantordata->{'surname'}; > $newdata{'contacttitle'} = $guarantordata->{'title'}; > foreach (qw(streetnumber address streettype address2 > @@ -278,7 +298,7 @@ if ($op eq 'save' || $op eq 'insert'){ > } > } > > -if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save') and ($step == 0 > or $step == 3 )){ > +if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq > 'duplicate') and ($step == 0 or $step == 3 )){ > if (exists ($newdata{'dateexpiry'}) && !($newdata{'dateexpiry'})){ > my $arg2 = $newdata{'dateenrolled'} || C4::Dates->today('iso'); > $newdata{'dateexpiry'} = > GetExpiryDate($newdata{'categorycode'},$arg2); > @@ -387,6 +407,11 @@ if ($op eq "modify") { > $template->param( updtype => 'M',modify => 1 ); > $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => > 1, step_6 => 1) unless $step; > } > +if ( $op eq "duplicate" ) { > + $template->param( updtype => 'I' ); > + $template->param( step_1 => 1, step_2 => 1, step_3 => 1, step_4 => 1, > step_5 => 1, step_6 => 1 ) unless $step; > +} > + > # my $cardnumber=$data{'cardnumber'}; > $data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if $op eq 'add'; > if(!defined($data{'sex'})){ > @@ -481,7 +506,7 @@ my $borrotitlepopup = CGI::popup_menu(-name=>'title', > -default=>$default_borrowertitle > ); > > -my @relationships = split /,|\|/, > C4::Context->preference('BorrowerRelationship'); > +my @relationships = split (/,|\|/, > C4::Context->preference('BorrowerRelationship')); > my @relshipdata; > while (@relationships) { > my $relship = shift @relationships || ''; > @@ -495,10 +520,9 @@ while (@relationships) { > } > > my %flags = ( 'gonenoaddress' => ['gonenoaddress' ], > - 'lost' => ['lost'], > - 'debarred' => ['debarred']); > + 'lost' => ['lost']); > + > > - > my @flagdata; > foreach (keys(%flags)) { > my $key = $_; > @@ -533,6 +557,13 @@ for my $branch (sort { $branches->{$a}->{branchname} > cmp $branches->{$b}->{branc > $select_branches{$branch} = $branches->{$branch}->{'branchname'}; > $default = C4::Context->userenv->{'branch'} if (C4::Context->userenv && > C4::Context->userenv->{'branch'}); > } > + > +if ($category_type eq 'A' || $category_type eq 'P') { > + $template->param( > + addtoorganization => 1 > + ); > +} > + > # > -------------------------------------------------------------------------------------------------------- > #in modify mod :default value from $CGIbranch comes from borrowers table > #in add mod: default value come from branches table (ip correspendence) > @@ -599,7 +630,10 @@ if (C4::Context->preference('uppercasesurnames')) { > $data{'surname'} =uc($data{'surname'} ); > $data{'contactname'}=uc($data{'contactname'}); > } > -foreach (qw(dateenrolled dateexpiry dateofbirth)) { > + > +$data{debarred} = C4::Overdues::CheckBorrowerDebarred($borrowernumber); > +$data{datedebarred} = $data{debarred} if ($data{debarred} ne > "9999-12-31"); > +foreach (qw(dateenrolled dateexpiry dateofbirth debarred)) { > $data{$_} = format_date($data{$_}); # back to syspref for > display > $template->param( $_ => $data{$_}); > } > diff --git a/members/setdebar.pl b/members/setdebar.pl > deleted file mode 100755 > index b12ab57..0000000 > --- a/members/setdebar.pl > +++ /dev/null > @@ -1,61 +0,0 @@ > -#!/usr/bin/perl > - > -# 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., > -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > - > - > -=head1 setdebar.pl > - > -script to set or lift debarred status > -written 2/8/04 > -by oleonard at athenscounty.lib.oh.us > - > -=cut > - > -use strict; > -use warnings; > - > -use CGI; > -use C4::Context; > -use C4::Auth; > - > -my $input = new CGI; > - > -my $flagsrequired; > -$flagsrequired->{borrowers} = 1; > -my ( $loggedinuser, $cookie, $sessionID ) = > - checkauth( $input, 0, $flagsrequired ); > - > -my $destination = $input->param("destination") || ''; > -my $cardnumber = $input->param("cardnumber"); > -my $borrowernumber = $input->param('borrowernumber'); > -my $status = $input->param('status'); > - > -my $dbh = C4::Context->dbh; > -my $sth = > - $dbh->prepare("Update borrowers set debarred = ? where borrowernumber = > ?"); > -$sth->execute( $status, $borrowernumber ); > -$sth->finish; > - > -if ( $destination eq "circ" ) { > - print $input->redirect( > - "/cgi-bin/koha/circ/circulation.pl?findborrower=".$cardnumber); > -} > -else { > - print $input->redirect( > - "/cgi-bin/koha/members/ > moremember.pl?borrowernumber=$borrowernumber"); > -} > diff --git a/members/setstatus.pl b/members/setstatus.pl > index 2a3947c..47c71ee 100755 > --- a/members/setstatus.pl > +++ b/members/setstatus.pl > @@ -43,6 +43,7 @@ my $borrowernumber=$input->param('borrowernumber'); > my $status = $input->param('status'); > my $reregistration = $input->param('reregistration') || ''; > > +undef $status unless ($status); > my $dbh = C4::Context->dbh; > my $dateexpiry; > > @@ -50,7 +51,7 @@ if ( $reregistration eq 'y' ) { > # re-reregistration function to automatic calcul of date expiry > $dateexpiry = ExtendMemberSubscriptionTo( $borrowernumber ); > } else { > - my $sth=$dbh->prepare("Update borrowers set debarred = ? where > borrowernumber = ?"); > + my $sth=$dbh->prepare("UPDATE borrowers SET debarred = ?, > debarredcomment = '' WHERE borrowernumber = ?"); > $sth->execute($status,$borrowernumber); > $sth->finish; > } > @@ -59,12 +60,16 @@ if($destination eq "circ"){ > if($dateexpiry){ > print $input->redirect("/cgi-bin/koha/circ/ > circulation.pl?findborrower=$cardnumber&dateexpiry=$dateexpiry"); > } else { > - print $input->redirect("/cgi-bin/koha/circ/ > circulation.pl?findborrower=$cardnumber"); > + if($cardnumber){ > + print $input->redirect("/cgi-bin/koha/circ/ > circulation.pl?findborrower=$cardnumber"); > + }else{ > + print $input->redirect("/cgi-bin/koha/circ/ > circulation.pl?borrowernumber=$borrowernumber"); > + } > } > } else { > if($dateexpiry){ > - print $input->redirect("/cgi-bin/koha/members/ > moremember.pl?bornum=$borrowernumber&dateexpiry=$dateexpiry"); > + print $input->redirect("/cgi-bin/koha/members/ > moremember.pl?borrowernumber=$borrowernumber&dateexpiry=$dateexpiry"); > } else { > - print $input->redirect("/cgi-bin/koha/members/ > moremember.pl?bornum=$borrowernumber"); > + print $input->redirect("/cgi-bin/koha/members/ > moremember.pl?borrowernumber=$borrowernumber"); > } > } > -- > 1.7.1 > > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nengard at bywatersolutions.com Thu Dec 16 02:41:52 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Wed, 15 Dec 2010 20:41:52 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5283 NEWS ITEM FOR RECEIPT SLIP Message-ID: <1292463712-3803-1-git-send-email-nengard@bywatersolutions.com> From: koha There is no on-off global parameter for it since if a library does not want to use it, then the library will not use the "slip" category in news - this is similar to the OPAC news and Staff news categories in the news feature. We have been using this for months in Koha 3.0 and the librarians like it and so does PR as it gives a way to advertise events and news to patrons with every checkout. The files modified are: koha-news.tmpl moremember-receipt.tmpl moremember.pl Darrell Ulm Signed-off-by: Nicole Engard --- .../en/modules/members/moremember-receipt.tmpl | 16 +++++++++++++++- .../prog/en/modules/tools/koha-news.tmpl | 10 +++++++++- members/moremember.pl | 10 ++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-receipt.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-receipt.tmpl index 83bd151..4a4d23a 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-receipt.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-receipt.tmpl @@ -2,7 +2,8 @@ Print Receipt for <!-- TMPL_VAR NAME="cardnumber" --> /includes/favicon.ico" type="image/x-icon" /> -/css/print.css" /> + /css/print.css" /> + > > @@ -68,13 +69,18 @@ > > > > > > - > + >

    Check the boxes for the libraries you accept to checkin > items from.

    >
    For all s: > Check All | href="#">Uncheck All
    > > @@ -99,11 +105,11 @@ > > > > - > + > > - > - type="checkbox" id="row" name="_" checked="checked" /> > + > + type="checkbox" id="row" name="_" checked="checked" > /> > > > > @@ -121,6 +127,7 @@ > > > > + >
    > >
    > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl > b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl > index ad675d1..dcb57a2 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/clone-rules.tmpl > @@ -24,7 +24,8 @@ > >
    Cloning of issuing rules failed!
    > > -

    The rules have been > cloned.

    > + > + > > Return to Issuing > rules > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl > b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl > index 895ceb9..03a6de9 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/smart-rules.tmpl > @@ -9,7 +9,7 @@ > // $(document).ready(function() { > $('#selectlibrary').find("input:submit").hide(); > - $('#branch').change(function() { > + $('#branchcode').change(function() { > $('#selectlibrary').submit(); > }); > $('#filter').keyup(function() { > @@ -19,6 +19,9 @@ $(document).ready(function() { > $('.issues').show(); > $('.fines').show(); > $('.reserves').show(); > + $('.issues :input').removeAttr('disabled',true); > + $('.fines :input').removeAttr('disabled',true); > + $('.reserves :input').removeAttr('disabled',true); > $(this).parent().attr('class','ui-tabs-selected'); > $('#issuesfilter').parent().attr('class',null); > $('#finesfilter').parent().attr('class',null); > @@ -28,6 +31,9 @@ $(document).ready(function() { > $('.issues').show(); > $('.fines').hide(); > $('.reserves').hide(); > + $('.issues :input').removeAttr('disabled',true); > + $('.fines :input').attr('disabled',true); > + $('.reserves :input').attr('disabled',true); > $(this).parent().attr('class','ui-tabs-selected'); > $('#nofilter').parent().attr('class',null); > $('#finesfilter').parent().attr('class',null); > @@ -37,6 +43,9 @@ $(document).ready(function() { > $('.issues').hide(); > $('.fines').show(); > $('.reserves').hide(); > + $('.issues :input').attr('disabled',true); > + $('.fines :input').removeAttr('disabled',true); > + $('.reserves :input').attr('disabled',true); > $(this).parent().attr('class','ui-tabs-selected'); > $('#issuesfilter').parent().attr('class',null); > $('#nofilter').parent().attr('class',null); > @@ -46,11 +55,99 @@ $(document).ready(function() { > $('.issues').hide(); > $('.fines').hide(); > $('.reserves').show(); > + $('.issues :input').attr('disabled',true); > + $('.fines :input').attr('disabled',true); > + $('.reserves :input').removeAttr('disabled',true); > $(this).parent().attr('class','ui-tabs-selected'); > $('#issuesfilter').parent().attr('class',null); > $('#finesfilter').parent().attr('class',null); > $('#nofilter').parent().attr('class',null); > }); > + > + // Inline editor > + var editor = false; > + $('#smartrules>tbody>tr>td.editable').click(function() { > + if ( ! editor ) { > + var td = $(this); > + var tdvalue = td.text().trim(); > + td.text(''); > + > + var type; > + if ( $.inArray('boolean', td.attr('class').split(' ')) != > -1 ) { // If the td is boolean, we display a checkbox > + editor = $(' /\>'); > + editor.attr('checked', tdvalue == 'Yes' ? 'checked' : > ''); > + type = 'boolean'; > + } else if ( $.inArray('triple', td.attr('class').split(' > ')) != -1 ) { // else if it is a triple, we display a listbox > + var selectedn = tdvalue == '' ? > 'selected="selected"' : ''; > + var selected1 = tdvalue == 'Yes' ? > 'selected="selected"' : ''; > + var selected0 = tdvalue == 'No' ? > 'selected="selected"' : ''; > + var str = ''; > + editor = $(str); > + type = 'triple'; > + } else { // else we display a textbox > + editor = $(' size="4" /\>'); > + editor.attr('value', tdvalue); > + } > + > + editor.focus(); > + > + editor.keyup(function(e) { // on press > + if ( e.keyCode == 13 ) { // enter > + > + // let's build the atomic rule > + var branchcode = $('#branchcode').val(); > + var categorycode = > td.parent().children('td.categorycode').children('span').text(); > + var itemtype = > td.parent().children('td.itemtype').children('span').text(); > + var varname = td.attr('class').split(' ')[0]; > + var inputvalue; > + switch ( type ) { > + case 'boolean': > + inputvalue = editor.attr('checked') ? 1 : > 0; > + break; > + default: > + inputvalue = editor.val(); > + break; > + } > + > + // post it to the server > + $.ajax({ > + url: '/cgi-bin/koha/admin/ > smart-rules-service.pl', > + type: "POST", > + async: false, > + data: > "branchcode="+branchcode+"&categorycode="+categorycode+"&itemtype="+itemtype+"&varname="+varname+"&inputvalue="+inputvalue, > + success: function(result) { > + > + // repopulate the td with data > + switch ( type ) { > + case 'boolean': > + td.text(result == '1' ? 'Yes' : > 'No'); > + break; > + case 'triple': > + switch ( result ) { > + case '' : td.text(''); > break; > + case '1': td.text('Yes'); > break; > + case '0': td.text('No'); > break; > + } > + break; > + default: > + td.text(result); > + break; > + } > + > + editor.remove(); > + editor = false; > + } > + }); > + } > + }); > + > + td.append(editor); > + } > + }); > }); > //]]> > > @@ -74,24 +171,10 @@ $(document).ready(function() { > Defining default circulation and fine rules > > > -
    > -

    The rules are applied from most specific to less specific, > using the first found in this order:

    > -
      > -
    • same library, same patron type, same item type
    • > -
    • same library, same patron type, default item type
    • > -
    • same library, default patron type, same item type
    • > -
    • same library, default patron type, default item type
    • > -
    • default library, same patron type, same item type
    • > -
    • default library, same patron type, default item type
    • > -
    • default library, default patron type, same item type
    • > -
    • default library, default patron type, default item > type
    • > -
    > -

    To modify a rule, create a new one with the same patron type > and item type.

    > -
    >
    >
    id="selectlibrary"> > Select a library : > - > > > > @@ -107,288 +190,218 @@ $(document).ready(function() { >
  • Issues
  • >
  • Fines
  • >
  • Reserves
  • > -
    > +
    > + > + > +
    > >
    > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + action="/cgi-bin/koha/admin/smart-rules.pl"> > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > +
    Patron CategoryItem TypeCurrent Checkouts AllowedLoan Period (day)Fine AmountFine Charging IntervalFine Grace period (day)Suspension in Days (day)Renewals Allowed (count)Holds Allowed (count)Rental Discount (%) 
    > - > Default > - > - > > - > - > - > Default > - > - > > - > - class="issues"> > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -
    Patron categoryItem typeCurrent checkouts > allowedLoan period (day)Fine amountFine charging > intervalGrace period (day)Suspension duration > (day)Renewals allowed > (count)Renewals period > (days)Holds allowed > (count)Holds pickup delay > (day)Allow on shelf > holdsHolds restricted to > libraryRental Discount > (%) 
    > + > + > + Default > + > + > + > + > + > + > + Default > + > + > + > + > + > + > + > + > Unlimited > > > > class="issues"> > - class="button" href="/cgi-bin/koha/admin/ > smart-rules.pl?op=delete&itemtype=&categorycode=&branch=">Delete > -
    > - > - > - > - size="3" /> name="issuelength" size="3" /> size="4" /> name="chargeperiod" size="2" /> name="firstremind" size="2" /> size="3" /> name="renewalsallowed" size="2" /> name="reservesallowed" size="2" /> size="2" />"/> />
    > - > + > +
    > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + Yes > + > + No > + > + > + > + > + > + > + Yes > + > + No > + > + > + > + > + > + > + > + href="/cgi-bin/koha/admin/smart-rules.pl?op=delete&itemtype=&categorycode=&branchcode=">Delete > +
    > + > + > + > + name="maxissueqty" size="3" value=""/> name="issuelength" size="3" value=""/> > size="4" value=""/> name="chargeperiod" size="2" value=""/> name="firstremind" size="2" value=""/> > size="3" value=""/> name="renewalsallowed" size="2" value=""/> name="renewalperiod" size="2" value=""/> name="reservesallowed" size="2" value=""/> name="holdspickupdelay" size="2" value=""/> > + > + checked="checked" value="1"/> name="holdrestricted" value="1"/> name="rentaldiscount" size="2" /> value=""/> value="Add" class="submit" />
    >
    >
    > > -
    > -

    Defaults for this library

    > -

    You can set a default maximum number of checkouts and hold > policy that will be used if none is defined below for a particular item type > or category.

    > -
    > -
    > -
    > - > - "/> > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -
     Total Current Checkouts AllowedHold Policy  
    Defaults (not set) value=""/> > - > - /> > - ">Unset > -
    > -
    > -
    > - > -
    > -

    For this library, you can specify the maximum number of loans > that > - a patron of a given category can make, regardless of the item > type. > -

    > -

    If the total amount loanable for a given patron category is > left blank, > - no limit applies, except possibly for a limit you define for a > specific item type. > -

    > -
    > -
    > -
    > - > - "/> > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -
    Patron CategoryTotal Current Checkouts Allowed 
    > - Default > - > - > - > - > - Unlimited > - > - > - > - > - &branch=">Delete > -
    > - > - />
    > -
    > -
    > - > -
    > -

    > - For this library, you can edit rules for given itemtypes, > regardless > - of the patron's category. > -

    > -

    > - Currently, this means hold policies. > - The various policies have the following effects: > -

    > -
      > -
    • From Any Library: Patrons from any > library may put this item on hold. (default if none is > defined)
    • > -
    • From Home Library: Only patrons from the > item's home library may put this book on hold.
    • > -
    • No Holds Allowed: No patron may put this > book on hold.
    • > -
    > -

    > - Note that if the system preference > - AllowHoldPolicyOverride is enabled, these > policies can > - be overridden by your circulation staff. Also, these policies > are > - based on the patron's home branch, not the branch > that > - the reserving staff member is from. > -

    > -
    > -
    > -
    > - > - "/> > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > - > -
    Item TypeHold Policy 
    > - Default > - > - > - > - > - From Any Library > - > - From Home Library > - > - No Holds Allowed > - > - > - &branch=">Delete > -
    > - > - > - > - />
    > -
    > -
    > > > > 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 20b3650..6194a99 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl > @@ -9,6 +9,10 @@ > > > - > - > - > - onclick="this.form.barcode.focus();" name="stickyduedate" checked="checked" > /> > - > - onclick="this.form.barcode.focus();" name="stickyduedate" /> > +

    > + > + > + onclick="this.form.barcode.focus();" name="stickyduedate" checked="checked" > /> > + > + onclick="this.form.barcode.focus();" name="stickyduedate" /> > + > + name="cleardate" onclick="this.checked = false; this.form.duedatespec.value > = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); > return false;" /> > +

    > + > > - name="cleardate" onclick="this.checked = false; this.form.duedatespec.value > = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); > return false;" /> > - > value="" /> > " /> > " /> > @@ -485,7 +531,8 @@ No patron matched >
    > > > -

    Cannot Check Out!Attention:

    > +

    Cannot Check Out! > + Attention:

    >
      > > > @@ -509,16 +556,21 @@ No patron matched > > > > -
    • class="circ-hlt">Address: Patron's address in doubt
    • > +
    • Address: > Patron's address is in doubt ()
    • > > > > -
    • Lost: > Patron's card is lost
    • > +
    • Lost: > Patron's card is lost ()
    • > > > -
    • > - Restricted: Patron's account > is restricted &cardnumber=&destination=circ&status=0">Lift > restriction > -
    • > +
    • > + Restricted: Patron's account > is restricted until () > +
      > + value="" /> > + value="circ" /> > + > +
      > +
    • > >
    • Overdues: Patron has > ITEMS OVERDUE. See highlighted items href="#checkouts">below
    • > > @@ -552,7 +604,7 @@ No patron matched >

      Holds waiting:

      > >
        > -
      • href="/cgi-bin/koha/reserve/request.pl?biblionumber="> > (), by Hold placed on . > +
      • href="/cgi-bin/koha/reserve/request.pl?biblionumber="> > (), by Hold placed on waiting until > >
        Waiting at > > @@ -628,20 +680,58 @@ No patron matched > " /> > -->" /> > > - > + > + > > > > + > > - > + > > - > + > > > > - > - > - > + > + > + > + > + > + > + > + > + > + > > > > @@ -649,119 +739,95 @@ No patron matched > > > > - > + > > > - > - > + > + > + > > - > - > - > - > - > + > - > > > > - > > > > > > - > - > - > - > - > + > > > > > > > - > > > + > > - > + > > - > - > - > - > - > + > - > > > - > - > > > @@ -771,20 +837,81 @@ No patron matched >
        Due dateTitleItem TypeBranchChecked out onCall no scope="col">BorrowerChargePriceMaterialRenew

        id="CheckAllitems">select all | id="CheckNoitems">none

        Check in

        id="CheckAllreturns">select all | id="CheckNoreturns">none

        65" style="text-align: right; > font-weight:bold;">Totals: > +

        > + Renewal due date: id="newduedate" name="newduedate" value="" /> > + -->/lib/calendar/cal.gif" id="newduedate_button" alt="Show Calendar" /> > + > +

        > +

        > + > +

        > + > + > +

        > + > + id="override_limit" value="1" /> > +

        > + > + > +
        > + &type=intra">, > by - -->&itemnumber=#item"> " > alt="" /> > + ()Renewal Failed0 > - > - " checked="checked" style="display: none;" /> > - > - value="" checked="checked" /> > - > - value="" /> > - > - > - class="renewals-allowed" style="display: none"> > - " checked="checked" style="display: none;" /> > - > - value="" checked="checked" /> > - > - value="" /> > - > + > + class="problem"> > + / > + > > - > + > + > + > + > + > +
        > + > + On Hold > > + Overdue > > + Not Renewable > > + > > - > - On Hold > - > - > - Not Renewable > - > - > -
        > - > - >
        Checkin Failed value="" /> > - " checked="checked" style="display: none;" /> > + id="return_" name="barcodes[]" value="" /> > +
        href="javascript:void(0);" onclick="window.open('/cgi-bin/koha/reserve/ > request.pl?biblionumber=')">On > Hold >
        id="previous">Previous checkouts
        id="previous">Previous checkouts
        109"> name="previous" id="previous">Previous checkouts
        > + > > &type=intra">, > by - href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=&itemnumber=#item"> > > > + ()Renewal Failed0 > - > - " checked="checked" style="display: none;" /> > - > - value="" checked="checked" /> > - > - value="" /> > - > - > - class="renewals-allowed" style="display: none"> > - " checked="checked" style="display: none;" /> > - > - value="" checked="checked" /> > - > - value="" /> > - > - > - > - > - > - On Hold > - > - > - Not Renewable > - > - > - > + > + class="problem"> > + / > + > + > + > + > + > + > +
        > + > + On Hold > > + Overdue > > + Not Renewable > > + > > - >
        Checkin Failed value="" /> > - " checked="checked" style="display: none;" /> > + > + id="return_" name="barcodes[]" value="" onclick="uncheck_sibling(this);" /> > +
        href="javascript:void(0);" onclick="window.open('/cgi-bin/koha/reserve/ > request.pl?biblionumber=')">On > Hold >
        > >
        > - > - > - > - value="1" /> > - > - > > - >
        > > > >

        Patron has nothing checked out.

        > > + > + > + > +

        Relatives issues

        > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > + > +
        Due dateTitleItem TypeBranchChecked out onChargeBorrowerMaterial
        > + &type=intra">, > by - -->&itemnumber=#item"> " > alt="" /> > + ()">
        id="relprevious">Previous checkouts
        > + > + &type=intra">, > by - href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=&itemnumber=#item"> > + > + > + ()">
        > + > + > + >
    > > > @@ -808,7 +935,7 @@ No patron matched > -->">, by > > Item > - > waiting at > + > waiting at until > > in > transit from > since > 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 ba8d117..e1896a5 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tmpl > @@ -1,6 +1,9 @@ > > Koha › Circulation › Check In <!-- TMPL_VAR > Name="title" escape="html" --> > > + > + @@ -188,7 +207,21 @@
  • '); return false;"> Add to Your Cart
  • +
  • More searches
  • + + + +
    +
    +

    Search for this title in:

    +
      + + +
    +
    +
    +
    diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl index 88904da..d3ffecc 100755 --- a/opac/opac-ISBDdetail.pl +++ b/opac/opac-ISBDdetail.pl @@ -155,6 +155,16 @@ $template->param( reviews => $reviews, ); +#Search for title in links +if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ + $dat->{author} ? $search_for_title =~ s/{AUTHOR}/$dat->{author}/g : $search_for_title =~ s/{AUTHOR}//g; + $dat->{title} =~ s/\/+$//; # remove trailing slash + $dat->{title} =~ s/\s+$//; # remove trailing space + $dat->{title} ? $search_for_title =~ s/{TITLE}/$dat->{title}/g : $search_for_title =~ s/{TITLE}//g; + $isbn ? $search_for_title =~ s/{ISBN}/$isbn/g : $search_for_title =~ s/{ISBN}//g; + $template->param('OPACSearchForTitleIn' => $search_for_title); +} + ## Amazon.com stuff #not used unless preference set if ( C4::Context->preference("OPACAmazonEnabled") == 1 ) { diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index d127202..1a9dc34 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -269,6 +269,16 @@ if(C4::Context->preference("ISBD")) { $template->param(ISBD => 1); } +#Search for title in links +if (my $search_for_title = C4::Context->preference('OPACSearchForTitleIn')){ + $biblio->{author} ? $search_for_title =~ s/{AUTHOR}/$biblio->{author}/g : $search_for_title =~ s/{AUTHOR}//g; + $biblio->{title} =~ s/\/+$//; # remove trailing slash + $biblio->{title} =~ s/\s+$//; # remove trailing space + $biblio->{title} ? $search_for_title =~ s/{TITLE}/$biblio->{title}/g : $search_for_title =~ s/{TITLE}//g; + $biblio->{isbn} ? $search_for_title =~ s/{ISBN}/$biblio->{isbn}/g : $search_for_title =~ s/{ISBN}//g; + $template->param('OPACSearchForTitleIn' => $search_for_title); +} + $template->param( item_loop => \@item_value_loop, item_header_loop => \@header_value_loop, -- 1.5.6.5 From lrea at nekls.org Thu Dec 16 18:42:10 2010 From: lrea at nekls.org (Liz Rea) Date: Thu, 16 Dec 2010 11:42:10 -0600 Subject: [Koha-patches] [PATCH] [Bug 5143] Adding help text to point users to add keyword to MARC mappings for subtitle fields. Message-ID: <1292521330-18489-1-git-send-email-lrea@nekls.org> Seeking sign off LR --- .../prog/en/modules/help/circ/view_holdsqueue.tmpl | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl index b34b65c..7190fec 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl @@ -11,4 +11,11 @@
  • Get there: More > Administration > General Preferences > Circulation
  • - \ No newline at end of file +

    For optimum display and ease of picking items for holds, a superlibrarian will want to configure the Keyword to MARC Mappings for +the 245$b, 245$p, 245$n, and 245$h.

    +
      +
    • Get there: More > Administration > Keyword to MARC mapping
    • +
    + + + -- 1.5.6.5 From robin at catalyst.net.nz Fri Dec 17 00:16:17 2010 From: robin at catalyst.net.nz (Robin Sheat) Date: Fri, 17 Dec 2010 12:16:17 +1300 Subject: [Koha-patches] [PATCH] bug4891 - sort facets in search sidebar (OPAC and staff client) Message-ID: <1292541377-4592-1-git-send-email-robin@catalyst.net.nz> --- catalogue/search.pl | 6 ++++++ opac/opac-search.pl | 7 +++++++ 2 files changed, 13 insertions(+), 0 deletions(-) diff --git a/catalogue/search.pl b/catalogue/search.pl index ac2209a..8cb737d 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -499,6 +499,12 @@ if (C4::Context->preference('NoZebra')) { ($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan); }; } +# This sorts the facets into alphabetical order +if ($facets) { + foreach my $f (@$facets) { + $f->{facets} = [ sort { uc($a->{facet_title_value}) cmp uc($b->{facet_title_value}) } @{ $f->{facets} } ]; + } +} if ($@ || $error) { $template->param(query_error => $error.$@); output_html_with_http_headers $cgi, $cookie, $template->output; diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 88f3a2f..45cb766 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -422,6 +422,13 @@ elsif (C4::Context->preference('NoZebra')) { ($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan); }; } +# This sorts the facets into alphabetical order +if ($facets) { + foreach my $f (@$facets) { + $f->{facets} = [ sort { uc($a->{facet_title_value}) cmp uc($b->{facet_title_value}) } @{ $f->{facets} } ]; + } +} + # use Data::Dumper; print STDERR "-" x 25, "\n", Dumper($results_hashref); if ($@ || $error) { $template->param(query_error => $error.$@); -- 1.7.1 From f.demians at tamil.fr Fri Dec 17 10:08:02 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Fri, 17 Dec 2010 10:08:02 +0100 Subject: [Koha-patches] [PATCH] Bug 5446 Fix a bug introduces by previous patch Message-ID: <1292576882-31266-1-git-send-email-f.demians@tamil.fr> When AcqCreateItem was set to 'cataloguing' there was no items fields in the acq web form to validate in JS... So JS fails and the form was un-submittable. --- .../prog/en/modules/acqui/neworderempty.tmpl | 21 +++++++++++-------- 1 files changed, 12 insertions(+), 9 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl index 85ccb6f..0fda51d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl @@ -40,16 +40,19 @@ function Check(ff) { _(") exceeds budget available (") + actTotal+")"; } - var empty_item_mandatory = 0; - for (i = 0; i < ff.field_value.length; i++) { - if (ff.field_value[i].value.length == 0 && ff.mandatory[i].value == 1) { - empty_item_mandatory++; + if ( ff.field_value ) { + var empty_item_mandatory = 0; + for (i = 0; i < ff.field_value.length; i++) { + alert("i = " + i + " => " + ff.kohafield[i] ); + if (ff.field_value[i].value.length == 0 && ff.mandatory[i].value == 1) { + empty_item_mandatory++; + } + } + if (empty_item_mandatory > 0) { + ok = 1; + _alertString += + "\n- " + empty_item_mandatory + _(" item mandatory fields empty"); } - } - if (empty_item_mandatory > 0) { - ok = 1; - _alertString += - "\n- " + empty_item_mandatory + _(" item mandatory fields empty"); } if (ok) { -- 1.7.3.2 From colin.campbell at ptfs-europe.com Fri Dec 17 11:29:17 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Fri, 17 Dec 2010 10:29:17 +0000 Subject: [Koha-patches] [PATCH] Bug 4286 Allow receiving if subscription enddate not set Message-ID: <1292581757-20724-1-git-send-email-colin.campbell@ptfs-europe.com> HasSubscriptionExpired is not a boolean return it may also return that a valid subscription enddate is not set This should not block receipting of issues --- serials/serials-edit.pl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/serials/serials-edit.pl b/serials/serials-edit.pl index 90f3281..58936be 100755 --- a/serials/serials-edit.pl +++ b/serials/serials-edit.pl @@ -145,7 +145,7 @@ foreach my $tmpserialid (@serialids) { $data->{arriveddate}=$today->output('syspref'); $data->{'editdisable'} = ( ( - HasSubscriptionExpired( $data->{subscriptionid} ) + HasSubscriptionExpired( $data->{subscriptionid} ) == 1 && $data->{'status1'} ) || $data->{'cannotedit'} -- 1.7.3.3 From M.de.Rooy at rijksmuseum.nl Fri Dec 17 12:16:52 2010 From: M.de.Rooy at rijksmuseum.nl (Marcel de Rooy) Date: Fri, 17 Dec 2010 11:16:52 +0000 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5446 Fix a bug introduces by previous patch Message-ID: <809BE39CD64BFD4EB9036172EBCCFA311AA4FF@S-MAIL-1B.rijksmuseum.intra> From: Fr?d?ric Demians When AcqCreateItem was set to 'cataloguing' there was no items fields in the acq web form to validate in JS... Alert commented. Signed-off-by: Marcel de Rooy --- .../prog/en/modules/acqui/neworderempty.tmpl | 21 +++++++++++-------- 1 files changed, 12 insertions(+), 9 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl index 85ccb6f..a76cb5c 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/neworderempty.tmpl @@ -40,16 +40,19 @@ function Check(ff) { _(") exceeds budget available (") + actTotal+")"; } - var empty_item_mandatory = 0; - for (i = 0; i < ff.field_value.length; i++) { - if (ff.field_value[i].value.length == 0 && ff.mandatory[i].value == 1) { - empty_item_mandatory++; + if ( ff.field_value ) { + var empty_item_mandatory = 0; + for (i = 0; i < ff.field_value.length; i++) { + //alert("i = " + i + " => " + ff.kohafield[i] ); + if (ff.field_value[i].value.length == 0 && ff.mandatory[i].value == 1) { + empty_item_mandatory++; + } + } + if (empty_item_mandatory > 0) { + ok = 1; + _alertString += + "\n- " + empty_item_mandatory + _(" item mandatory fields empty"); } - } - if (empty_item_mandatory > 0) { - ok = 1; - _alertString += - "\n- " + empty_item_mandatory + _(" item mandatory fields empty"); } if (ok) { -- 1.6.0.6 From serhijdubyk at gmail.com Thu Dec 16 00:49:51 2010 From: serhijdubyk at gmail.com (=?UTF-8?q?Serhij=20Dubyk=20=7B=D0=A1=D0=B5=D1=80=D0=B3=D1=96=D0=B9=20=D0=94=D1=83=D0=B1=D0=B8=D0=BA=7D?=) Date: Thu, 16 Dec 2010 01:49:51 +0200 Subject: [Koha-patches] =?utf-8?q?=5BPATCH=5D_Deleted_old_sample_budget_sq?= =?utf-8?q?l-data_for_Ukrainian_and_Russian?= Message-ID: <1292456991-5021-1-git-send-email-serhijdubyk@gmail.com> --- .../mysql/ru-RU/optional/acqusion_book_funds.sql | 12 ------------ .../mysql/ru-RU/optional/acqusion_book_funds.txt | 1 - .../mysql/uk-UA/optional/acqusion_book_funds.sql | 12 ------------ .../mysql/uk-UA/optional/acqusion_book_funds.txt | 1 - 4 files changed, 0 insertions(+), 26 deletions(-) delete mode 100644 installer/data/mysql/ru-RU/optional/acqusion_book_funds.sql delete mode 100644 installer/data/mysql/ru-RU/optional/acqusion_book_funds.txt delete mode 100644 installer/data/mysql/uk-UA/optional/acqusion_book_funds.sql delete mode 100644 installer/data/mysql/uk-UA/optional/acqusion_book_funds.txt diff --git a/installer/data/mysql/ru-RU/optional/acqusion_book_funds.sql b/installer/data/mysql/ru-RU/optional/acqusion_book_funds.sql deleted file mode 100644 index 00c67b1..0000000 --- a/installer/data/mysql/ru-RU/optional/acqusion_book_funds.sql +++ /dev/null @@ -1,12 +0,0 @@ -TRUNCATE aqbookfund; -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('CHILD','??????? ?????????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('DISK','??????????? ????????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('GEN','????? ?????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('REF','?????????? ?????????',NULL,'STL'); - -TRUNCATE aqbudget; -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('CHILD','2008-01-01','2008-12-31','5000.00',1,''); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('GEN','2008-01-01','2008-12-31','20000.00',2,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('REF','2008-01-01','2008-12-31','5000.00',3,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('GEN','2008-01-01','2008-12-31','10000.00',4,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('DISK','2008-02-01','2008-07-25','2000.00',5,'STL'); diff --git a/installer/data/mysql/ru-RU/optional/acqusion_book_funds.txt b/installer/data/mysql/ru-RU/optional/acqusion_book_funds.txt deleted file mode 100644 index 62bfacc..0000000 --- a/installer/data/mysql/ru-RU/optional/acqusion_book_funds.txt +++ /dev/null @@ -1 +0,0 @@ -?????? ????????. diff --git a/installer/data/mysql/uk-UA/optional/acqusion_book_funds.sql b/installer/data/mysql/uk-UA/optional/acqusion_book_funds.sql deleted file mode 100644 index 7132c83..0000000 --- a/installer/data/mysql/uk-UA/optional/acqusion_book_funds.sql +++ /dev/null @@ -1,12 +0,0 @@ -TRUNCATE aqbookfund; -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('CHILD','?????? ?????????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('DISK','?????????? ?????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('GEN','????????? ?????',NULL,'STL'); -INSERT INTO `aqbookfund` (`bookfundid`, `bookfundname`, `bookfundgroup`, `branchcode`) VALUES ('REF','????????? ?????????',NULL,'STL'); - -TRUNCATE aqbudget; -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('CHILD','2008-01-01','2008-12-31','5000.00',1,''); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('GEN','2008-01-01','2008-12-31','20000.00',2,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('REF','2008-01-01','2008-12-31','5000.00',3,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('GEN','2008-01-01','2008-12-31','10000.00',4,'STL'); -INSERT INTO `aqbudget` (`bookfundid`, `startdate`, `enddate`, `budgetamount`, `aqbudgetid`, `branchcode`) VALUES ('DISK','2008-02-01','2008-07-25','2000.00',5,'STL'); diff --git a/installer/data/mysql/uk-UA/optional/acqusion_book_funds.txt b/installer/data/mysql/uk-UA/optional/acqusion_book_funds.txt deleted file mode 100644 index 7b27807..0000000 --- a/installer/data/mysql/uk-UA/optional/acqusion_book_funds.txt +++ /dev/null @@ -1 +0,0 @@ -?????? ?????? ??????. -- 1.7.2.3 From ybeddyj at gmail.com Fri Dec 17 03:57:19 2010 From: ybeddyj at gmail.com (Edward Allen) Date: Thu, 16 Dec 2010 21:57:19 -0500 Subject: [Koha-patches] [PATCH] bug 5516: Corrected git url in Install Documentation Corrected the git clone url for INSTALL.ubuntu, INSTALL.ubuntu.lucid In-Reply-To: References: Message-ID: <1292554639-13405-1-git-send-email-ybeddyj@gmail.com> --- INSTALL.ubuntu | 2 +- INSTALL.ubuntu.lucid | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.ubuntu b/INSTALL.ubuntu index 3a33799..58220ca 100644 --- a/INSTALL.ubuntu +++ b/INSTALL.ubuntu @@ -52,7 +52,7 @@ Run the following command to update your system: 1.4.1 Option A: Download Koha via Git (optional) $ sudo apt-get install git-core git-email - $ git clone git://git.koha-community.org/pub/scm/koha.git kohaclone + $ git clone git://git.koha-community.org/koha.git kohaclone $ cd kohaclone $ git checkout -b myinstall origin diff --git a/INSTALL.ubuntu.lucid b/INSTALL.ubuntu.lucid index 0ee096e..4d77227 100644 --- a/INSTALL.ubuntu.lucid +++ b/INSTALL.ubuntu.lucid @@ -45,7 +45,7 @@ IMPORTANT: You _MUST_ follow all the steps outlined there for 1.3.1 Option A: Download Koha via Git (optional) $ sudo apt-get install git-core git-email - $ git clone git://git.koha-community.org/pub/scm/koha.git kohaclone + $ git clone git://git.koha-community.org/koha.git kohaclone $ cd kohaclone $ git checkout -b myinstall origin -- 1.7.1 From oleonard at myacpl.org Fri Dec 17 15:46:40 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 09:46:40 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 5513 - staff client display screwy if you don't have all permissions Message-ID: <1292597200-24998-1-git-send-email-oleonard@myacpl.org> The cause of this bug was the removal of a closing in a recent commit. --- .../intranet-tmpl/prog/en/includes/header.inc | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc index be4e1b8..4a81e97 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc @@ -24,6 +24,7 @@
  • Authorities
  • +
  • Serials
  • -- 1.7.1 From oleonard at myacpl.org Fri Dec 17 16:37:32 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 10:37:32 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 3262 - OPAC needs syspref to show homebranch on detail page Message-ID: <1292600252-25343-1-git-send-email-oleonard@myacpl.org> Revised version of Liz Rea's fix adding homebranch by default. This revision displays the homebranch name instead of branchcode. --- catalogue/detail.pl | 2 ++ .../prog/en/modules/catalogue/detail.tmpl | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/catalogue/detail.pl b/catalogue/detail.pl index abf71ad..e32170c 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -139,6 +139,8 @@ my $authvalcode_items_itemlost = GetAuthValCode('items.itemlost',$fw); my $authvalcode_items_damaged = GetAuthValCode('items.damaged', $fw); foreach my $item (@items) { + $item->{homebranch} = GetBranchName($item->{homebranch}); + # can place holds defaults to yes $norequests = 0 unless ( ( $item->{'notforloan'} > 0 ) || ( $item->{'itemnotforloan'} > 0 ) ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl index db6fe31..d925eef 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl @@ -215,7 +215,8 @@ function verify_images() { - + + @@ -242,7 +243,8 @@ function verify_images() { - +
    Item typeLocationCurrent LocationHome Library Collection Call Number Status + -- 1.7.1 From nengard at bywatersolutions.com Thu Dec 16 08:34:47 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 02:34:47 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 3987 - New Sys Prefs Branch - Alphabetize prefs in sections Message-ID: <1292484887-5082-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Adding jquery tablesorter, sorting on sys pref variable by default Signed-off-by: Nicole Engard --- .../intranet-tmpl/prog/en/js/pages/preferences.js | 7 +++++++ .../prog/en/modules/admin/preferences.tmpl | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js b/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js index 6f0d064..cbf98b8 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/pages/preferences.js @@ -1,3 +1,10 @@ +$(document).ready(function() { + $("table.preferences").tablesorter({ + sortList: [[0,0]], + headers: { 1: { sorter:false}} + }); +}); + // We can assume 'KOHA' exists, as we depend on KOHA.AJAX KOHA.Preferences = { diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tmpl index b9bfd4f..3ae0281 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences.tmpl @@ -1,6 +1,7 @@ Koha › Administration › System Preferences + /css/preferences.css" /> /css/humanmsg.css" /> @@ -48,11 +49,12 @@
    -

    +

    +
    -
    PreferenceValue
    +
    PreferenceValue
    PreferenceValue
    -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 08:50:08 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 02:50:08 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] bug4891 - sort facets in search sidebar (OPAC and staff client) Message-ID: <1292485808-5228-1-git-send-email-nengard@bywatersolutions.com> From: Robin Sheat Signed-off-by: Nicole Engard --- catalogue/search.pl | 6 ++++++ opac/opac-search.pl | 7 +++++++ 2 files changed, 13 insertions(+), 0 deletions(-) diff --git a/catalogue/search.pl b/catalogue/search.pl index ac2209a..8cb737d 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -499,6 +499,12 @@ if (C4::Context->preference('NoZebra')) { ($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan); }; } +# This sorts the facets into alphabetical order +if ($facets) { + foreach my $f (@$facets) { + $f->{facets} = [ sort { uc($a->{facet_title_value}) cmp uc($b->{facet_title_value}) } @{ $f->{facets} } ]; + } +} if ($@ || $error) { $template->param(query_error => $error.$@); output_html_with_http_headers $cgi, $cookie, $template->output; diff --git a/opac/opac-search.pl b/opac/opac-search.pl index 88f3a2f..45cb766 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -422,6 +422,13 @@ elsif (C4::Context->preference('NoZebra')) { ($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan); }; } +# This sorts the facets into alphabetical order +if ($facets) { + foreach my $f (@$facets) { + $f->{facets} = [ sort { uc($a->{facet_title_value}) cmp uc($b->{facet_title_value}) } @{ $f->{facets} } ]; + } +} + # use Data::Dumper; print STDERR "-" x 25, "\n", Dumper($results_hashref); if ($@ || $error) { $template->param(query_error => $error.$@); -- 1.5.6.5 From oleonard at myacpl.org Fri Dec 17 17:03:05 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 11:03:05 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 5470 - improvements to results display in the staff client Message-ID: <1292601785-25515-1-git-send-email-oleonard@myacpl.org> --- .../prog/en/modules/catalogue/results.tmpl | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl index f833f33..36b1fb7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl @@ -426,13 +426,10 @@ function GetZ3950Terms(){   - - - Edition: Description: - ; - , - , + + + Edition: : ; ISBN: -- 1.7.1 From nengard at bywatersolutions.com Thu Dec 16 08:57:42 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 02:57:42 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5513 - staff client display screwy if you don't have all permissions Message-ID: <1292486262-5320-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard The cause of this bug was the removal of a closing in a recent commit. Signed-off-by: Nicole Engard --- .../intranet-tmpl/prog/en/includes/header.inc | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc index be4e1b8..4a81e97 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc @@ -24,6 +24,7 @@
  • Authorities
  • +
  • Serials
  • -- 1.5.6.5 From oleonard at myacpl.org Fri Dec 17 17:11:58 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 11:11:58 -0500 Subject: [Koha-patches] [PATCH] Follow-up fix for Bug 5285, adding missing CSS Message-ID: <1292602318-25640-1-git-send-email-oleonard@myacpl.org> --- .../intranet-tmpl/prog/en/css/pages/batchMod.css | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css b/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css new file mode 100644 index 0000000..c8d6bfb --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css @@ -0,0 +1,7 @@ +#jobpanel,#jobstatus,#jobfailed { display : none; } +#jobstatus { margin:.4em; } +#jobprogress{ width:200px;height:10px;border:1px solid #666;background:url('/intranet-tmpl/prog/img/progress.png') -300px 0px no-repeat; } +#selections { width : 100%; white-space : normal; } +#selections span { margin:3px;padding:3px;background-color:#EBF3FF;-moz-border-radius:5px;border-radius:5px;white-space:nowrap;line-height:240%;font-size:75%; } +#selections span.selected { background-color : #CCE0FC; } +#selections input { vertical-align:middle;margin:0 2px; } \ No newline at end of file -- 1.7.1 From nengard at gmail.com Fri Dec 17 17:14:38 2010 From: nengard at gmail.com (Nicole Engard) Date: Fri, 17 Dec 2010 11:14:38 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5513 - staff client display screwy if you don't have all permissions In-Reply-To: <1292486262-5320-1-git-send-email-nengard@bywatersolutions.com> References: <1292486262-5320-1-git-send-email-nengard@bywatersolutions.com> Message-ID: Ignore this please - there is still an issue to be addressed. On Thu, Dec 16, 2010 at 2:57 AM, Nicole Engard wrote: > From: Owen Leonard > > The cause of this bug was the removal of a closing > in a recent commit. > > Signed-off-by: Nicole Engard > --- > ?.../intranet-tmpl/prog/en/includes/header.inc ? ? ?| ? ?1 + > ?1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > index be4e1b8..4a81e97 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc > @@ -24,6 +24,7 @@ > ? ? ? ? ? ? ? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • Authorities
  • > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? ? ? ? ? ? ? ? > ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • Serials
  • > ? ? ? ? ? ? ? ? ? ? ? ? ? ? > -- > 1.5.6.5 > > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > From nengard at bywatersolutions.com Thu Dec 16 09:02:53 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 03:02:53 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5470 - improvements to results display in the staff client Message-ID: <1292486573-5416-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Signed-off-by: Nicole Engard --- .../prog/en/modules/catalogue/results.tmpl | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl index f833f33..36b1fb7 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/results.tmpl @@ -426,13 +426,10 @@ function GetZ3950Terms(){   - - - Edition: Description: - ; - , - , + + + Edition: : ; ISBN: -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 09:09:01 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 03:09:01 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Follow-up fix for Bug 5285, adding missing CSS Message-ID: <1292486941-5514-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Signed-off-by: Nicole Engard --- .../intranet-tmpl/prog/en/css/pages/batchMod.css | 7 +++++++ 1 files changed, 7 insertions(+), 0 deletions(-) create mode 100644 koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css b/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css new file mode 100644 index 0000000..c8d6bfb --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/css/pages/batchMod.css @@ -0,0 +1,7 @@ +#jobpanel,#jobstatus,#jobfailed { display : none; } +#jobstatus { margin:.4em; } +#jobprogress{ width:200px;height:10px;border:1px solid #666;background:url('/intranet-tmpl/prog/img/progress.png') -300px 0px no-repeat; } +#selections { width : 100%; white-space : normal; } +#selections span { margin:3px;padding:3px;background-color:#EBF3FF;-moz-border-radius:5px;border-radius:5px;white-space:nowrap;line-height:240%;font-size:75%; } +#selections span.selected { background-color : #CCE0FC; } +#selections input { vertical-align:middle;margin:0 2px; } \ No newline at end of file -- 1.5.6.5 From nengard at gmail.com Fri Dec 17 17:23:20 2010 From: nengard at gmail.com (Nicole Engard) Date: Fri, 17 Dec 2010 11:23:20 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5513 - staff client display screwy if you don't have all permissions In-Reply-To: References: <1292486262-5320-1-git-send-email-nengard@bywatersolutions.com> Message-ID: Sorry All!! The trouble with multi-tasking is that you screw things up - this patch works and my sign off stands!! On Fri, Dec 17, 2010 at 11:14 AM, Nicole Engard wrote: > Ignore this please - there is still an issue to be addressed. > > On Thu, Dec 16, 2010 at 2:57 AM, Nicole Engard > wrote: >> From: Owen Leonard >> >> The cause of this bug was the removal of a closing >> in a recent commit. >> >> Signed-off-by: Nicole Engard >> --- >> ?.../intranet-tmpl/prog/en/includes/header.inc ? ? ?| ? ?1 + >> ?1 files changed, 1 insertions(+), 0 deletions(-) >> >> diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc >> index be4e1b8..4a81e97 100644 >> --- a/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc >> +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/header.inc >> @@ -24,6 +24,7 @@ >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • Authorities
  • >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> ? ? ? ? ? ? ? ? ? ? ? ? ? ?
  • Serials
  • >> ? ? ? ? ? ? ? ? ? ? ? ? ? ? >> -- >> 1.5.6.5 >> >> _______________________________________________ >> Koha-patches mailing list >> Koha-patches at lists.koha-community.org >> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches >> website : http://www.koha-community.org/ >> git : http://git.koha-community.org/ >> bugs : http://bugs.koha-community.org/ >> > From oleonard at myacpl.org Fri Dec 17 17:54:28 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 11:54:28 -0500 Subject: [Koha-patches] [PATCH] Follow-up patch for Bug 4908, show patron's home library in OPAC Message-ID: <1292604868-25867-1-git-send-email-oleonard@myacpl.org> Adding home library to list of details when OPACPatronDetails pref is set to "don't allow" --- .../opac-tmpl/prog/en/modules/opac-userupdate.tmpl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 24c3068..f806754 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -149,6 +149,7 @@ Library Use:
    1. Card number:
    2. +
    3. Home library:
    4. Patron Number:
    5. Patron Category: ()
    6. Joined:
    7. -- 1.7.1 From oleonard at myacpl.org Fri Dec 17 18:10:16 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Fri, 17 Dec 2010 12:10:16 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 5518 - Add to shelf icon doesn't appear in OPAC results page Message-ID: <1292605816-26000-1-git-send-email-oleonard@myacpl.org> --- .../opac-tmpl/prog/en/modules/opac-results.tmpl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl index cfd5e36..fb47c37 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -502,7 +502,7 @@ $(document).ready(function(){ - " onclick="Dopop('opac-addbybiblionumber.pl?biblionumber='); return false;">Save to Lists + " onclick="Dopop('opac-addbybiblionumber.pl?biblionumber='); return false;">Save to Lists '); return false;">Add to Cart -- 1.7.1 From nengard at bywatersolutions.com Thu Dec 16 10:15:53 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 04:15:53 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Follow-up patch for Bug 4908, show patron's home library in OPAC Message-ID: <1292490953-5722-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Adding home library to list of details when OPACPatronDetails pref is set to "don't allow" Signed-off-by: Nicole Engard --- .../opac-tmpl/prog/en/modules/opac-userupdate.tmpl | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl index 24c3068..f806754 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-userupdate.tmpl @@ -149,6 +149,7 @@ Library Use:
      1. Card number:
      2. +
      3. Home library:
      4. Patron Number:
      5. Patron Category: ()
      6. Joined:
      7. -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 10:20:01 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 04:20:01 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5518 - Add to shelf icon doesn't appear in OPAC results page Message-ID: <1292491201-5841-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Signed-off-by: Nicole Engard --- .../opac-tmpl/prog/en/modules/opac-results.tmpl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl index cfd5e36..fb47c37 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -502,7 +502,7 @@ $(document).ready(function(){ - " onclick="Dopop('opac-addbybiblionumber.pl?biblionumber='); return false;">Save to Lists + " onclick="Dopop('opac-addbybiblionumber.pl?biblionumber='); return false;">Save to Lists '); return false;">Add to Cart -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 10:59:34 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 04:59:34 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 4286 Allow receiving if subscription enddate not set Message-ID: <1292493574-5984-1-git-send-email-nengard@bywatersolutions.com> From: Colin Campbell HasSubscriptionExpired is not a boolean return it may also return that a valid subscription enddate is not set This should not block receipting of issues Signed-off-by: Nicole Engard --- serials/serials-edit.pl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/serials/serials-edit.pl b/serials/serials-edit.pl index 90f3281..58936be 100755 --- a/serials/serials-edit.pl +++ b/serials/serials-edit.pl @@ -145,7 +145,7 @@ foreach my $tmpserialid (@serialids) { $data->{arriveddate}=$today->output('syspref'); $data->{'editdisable'} = ( ( - HasSubscriptionExpired( $data->{subscriptionid} ) + HasSubscriptionExpired( $data->{subscriptionid} ) == 1 && $data->{'status1'} ) || $data->{'cannotedit'} -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 12:42:51 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 06:42:51 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 3262 - OPAC needs syspref to show homebranch on detail page Message-ID: <1292499771-6365-1-git-send-email-nengard@bywatersolutions.com> From: Owen Leonard Revised version of Liz Rea's fix adding homebranch by default. This revision displays the homebranch name instead of branchcode. Signed-off-by: Nicole Engard --- catalogue/detail.pl | 2 ++ .../prog/en/modules/catalogue/detail.tmpl | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/catalogue/detail.pl b/catalogue/detail.pl index abf71ad..e32170c 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -139,6 +139,8 @@ my $authvalcode_items_itemlost = GetAuthValCode('items.itemlost',$fw); my $authvalcode_items_damaged = GetAuthValCode('items.damaged', $fw); foreach my $item (@items) { + $item->{homebranch} = GetBranchName($item->{homebranch}); + # can place holds defaults to yes $norequests = 0 unless ( ( $item->{'notforloan'} > 0 ) || ( $item->{'itemnotforloan'} > 0 ) ); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl index db6fe31..d925eef 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl @@ -215,7 +215,8 @@ function verify_images() { - + + @@ -242,7 +243,8 @@ function verify_images() { - + @@ -198,7 +198,7 @@

        - &amp;startfrom=&amp;search=&amp;resultsperpage=&amp;type=intranet&amp;op=do_search"> + &amp;startfrom=&amp;search=&amp;resultsperpage=&amp;type=intranet&amp;op=do_search"> << Previous @@ -209,14 +209,14 @@ - &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> + &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> - &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> + &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> Next>> -- 1.7.1 From M.de.Rooy at rijksmuseum.nl Mon Dec 20 14:22:42 2010 From: M.de.Rooy at rijksmuseum.nl (Marcel de Rooy) Date: Mon, 20 Dec 2010 13:22:42 +0000 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] bug 5035 remove default opaccolorstylesheet value for new installs Message-ID: <809BE39CD64BFD4EB9036172EBCCFA311AAC99@S-MAIL-1B.rijksmuseum.intra> From: Nicole Engard Per the bug, the color.css file is blank and so this preference should have no value by default. This patch only fixes this for new installs. There is no way to know if people have added values to the color.css file in existing installs, so removing that value in those cases might break things. This patch does not remove the blank color.css file, it only edits the default system preference. Signed-off-by: Marcel de Rooy --- installer/data/mysql/en/mandatory/sysprefs.sql | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql index 1806657..94d5de1 100644 --- a/installer/data/mysql/en/mandatory/sysprefs.sql +++ b/installer/data/mysql/en/mandatory/sysprefs.sql @@ -68,7 +68,7 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('intranetbookbag','1','If ON, enables display of Cart feature in the intranet','','YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacBrowser',0,'If ON, enables subject authorities browser on OPAC (needs to set misc/cronjob/sbuild_browser_and_cloud.pl)',NULL,'YesNo'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('OpacCloud',0,'If ON, enables subject cloud on OPAC',NULL,'YesNo'); -INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaccolorstylesheet','colors.css','Define the color stylesheet to use in the OPAC','','free'); +INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaccolorstylesheet','','Define the color stylesheet to use in the OPAC','','free'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opaccredits','','Define HTML Credits at the bottom of the OPAC page','70|10','Textarea'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacSerialDefaultTab', 'subscriptions', 'Define the default tab for serials in OPAC.', 'holdings|serialcollection|subscriptions', 'Choice'); INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES('opacheader','','Add HTML to be included as a custom header in the OPAC','70|10','Textarea'); -- 1.6.0.6 From M.de.Rooy at rijksmuseum.nl Mon Dec 20 14:35:12 2010 From: M.de.Rooy at rijksmuseum.nl (Marcel de Rooy) Date: Mon, 20 Dec 2010 13:35:12 +0000 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Proposed fix for Bug 5106 - Simplify MARC view choices in the OPAC Message-ID: <809BE39CD64BFD4EB9036172EBCCFA311AACD0@S-MAIL-1B.rijksmuseum.intra> From: Owen Leonard - Eliminates the "Extended MARC View" tab - Points the "MARC View" tab to opac-MARCDetail.pl as it is when XSLT is off - Offers a "view plain" link on opac-MARCDetail.pl. Clicking this link replaces the standard labeled MARC view with an unformatted view similar to the one displayed in the pop-up modal MARC view. - When viewing the "plain view," clicking the "view labeled" link will return you to the standard labeled MARC view. - Adds a new XSL file for displaying MARC data in a slightly-more-formatted manner (compared to one big

         block).
        
        Signed-off-by: Marcel de Rooy 
        ---
         koha-tmpl/opac-tmpl/prog/en/css/opac.css           |    4 +
         .../opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl |   22 +---
         .../opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl |  104 ++++++++++++--------
         .../opac-tmpl/prog/en/modules/opac-detail.tmpl     |    8 --
         .../prog/en/xslt/MARC21slim2OPACDetail.xsl         |    5 +-
         .../prog/en/xslt/MARC21slim2OPACMARCdetail.xsl     |   55 ++++++++++
         koha-tmpl/opac-tmpl/prog/images/loading.gif        |  Bin 0 -> 3208 bytes
         opac/opac-showmarc.pl                              |   35 +++++--
         8 files changed, 154 insertions(+), 79 deletions(-)
         create mode 100644 koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACMARCdetail.xsl
         create mode 100644 koha-tmpl/opac-tmpl/prog/images/loading.gif
        
        diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        index bfff594..bfebba9 100644
        --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        @@ -2000,3 +2000,7 @@ div.ft {
         	background-color : rgb(239, 254, 213);
         	background-color : rgba(239, 254, 213, 0.4);
         }
        +#plainmarc table { border: 0; margin: .7em 0 0 0; font-family: monospace; font-size: 95%; }
        +#plainmarc th { background-color : #FFF; border: 0; white-space: nowrap; text-align:left; vertical-align: top; padding: 2px; }
        +#plainmarc td { border: 0; padding : 2px; vertical-align: top; }
        +>>>>>>> Proposed fix for Bug 5106 - Simplify MARC view choices in the OPAC
        diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        index 475d681..305dfce 100644
        --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        @@ -21,14 +21,6 @@
              });
         //]]>
         
        -
        -
        -
        -
        -
        -
         
         
         
        @@ -38,21 +30,17 @@
         
         
             
        -
        +
        + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl index 8f5182e..fba0c08 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl @@ -17,16 +17,42 @@ YAHOO.widget.Overlay.windowResizeEvent.subscribe(positionfurthersearchesMenu); }); - var GB_ROOT_DIR = "/opac-tmpl/prog/en/lib/greybox/"; +$(document).ready(function(){ + $.ajaxSetup({ + error:function(x,e){ + switch (x.status) { + case 200: break; + default: + $('#switchview').parent().html("
        "+_("Sorry, plain view is temporarily unavailable")+".
        "); + $("#plainmarc").hide(); + $("#labeledmarc").show(); + break; + } + } + }); + + var loaded = 0; + $("#switchview").toggle( + function () { + $(this).text(_("view labeled")); + $("#labeledmarc").hide(); + if(!loaded){ + $("#plainmarc").show().html("
        "+_("Loading")+"...
        ").load("/cgi-bin/koha/opac-showmarc.pl","id=&viewas=html"); + loaded = 1; + } else { + $("#plainmarc").show(); + } + }, + function () { + $(this).text(_("view plain")); + $("#labeledmarc").show(); + $("#plainmarc").hide(); + } + ); +}); //]]> - - - - - - @@ -34,28 +60,25 @@
        -
        -

        MARC View

        -
        - ">Normal View - - -" title="MARC" rel="gb_page_center[600,500]">MARC View - Expanded MARC View - -MARC View - +

        MARC View

        + -

        (Record no. )

        -
        Item typeLocationCurrent LocationHome Library Collection Call Number Status + -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 12:47:17 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 06:47:17 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5489: Send hold email to branch email address if it exists instead of koha email address Message-ID: <1292500037-6451-1-git-send-email-nengard@bywatersolutions.com> From: Amit Gupta Signed-off-by: Nicole Engard --- C4/Reserves.pm | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index e15d32f..2dd2688 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -194,7 +194,9 @@ sub AddReserve { my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); my $biblio = GetBiblioData($biblionumber); my $letter = C4::Letters::getletter( 'reserves', 'HOLDPLACED'); - my $admin_email_address = C4::Context->preference('KohaAdminEmailAddress'); + my $branchcode = $borrower->{branchcode}; + my $branch_details = C4::Branch::GetBranchDetail($branchcode); + my $admin_email_address =$branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress'); my %keys = (%$borrower, %$biblio); foreach my $key (keys %keys) { -- 1.5.6.5 From dschust1 at gmail.com Fri Dec 17 21:40:47 2010 From: dschust1 at gmail.com (David Schuster) Date: Fri, 17 Dec 2010 14:40:47 -0600 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5489: Send hold email to branch email address if it exists instead of koha email address In-Reply-To: <1292500037-6451-1-git-send-email-nengard@bywatersolutions.com> References: <1292500037-6451-1-git-send-email-nengard@bywatersolutions.com> Message-ID: This is an enhancement I know but something I've been thinking about... When someone submits a "review" and/or "suggestion" I would like to see a similar interaction that it emailed the branch librarian about it rather than just having the central repository for review. David Schuster On Thu, Dec 16, 2010 at 5:47 AM, Nicole Engard wrote: > From: Amit Gupta > > > Signed-off-by: Nicole Engard > --- > C4/Reserves.pm | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/C4/Reserves.pm b/C4/Reserves.pm > index e15d32f..2dd2688 100644 > --- a/C4/Reserves.pm > +++ b/C4/Reserves.pm > @@ -194,7 +194,9 @@ sub AddReserve { > my $borrower = C4::Members::GetMember(borrowernumber => > $borrowernumber); > my $biblio = GetBiblioData($biblionumber); > my $letter = C4::Letters::getletter( 'reserves', 'HOLDPLACED'); > - my $admin_email_address = > C4::Context->preference('KohaAdminEmailAddress'); > + my $branchcode = $borrower->{branchcode}; > + my $branch_details = C4::Branch::GetBranchDetail($branchcode); > + my $admin_email_address =$branch_details->{'branchemail'} || > C4::Context->preference('KohaAdminEmailAddress'); > > my %keys = (%$borrower, %$biblio); > foreach my $key (keys %keys) { > -- > 1.5.6.5 > > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ > -- David Schuster Plano ISD Library Technology Coordinator -------------- next part -------------- An HTML attachment was scrubbed... URL: From lrea at nekls.org Fri Dec 17 21:52:28 2010 From: lrea at nekls.org (Liz Rea) Date: Fri, 17 Dec 2010 14:52:28 -0600 Subject: [Koha-patches] [PATCH] [Bug 5143] Help file revisions per Owen Leonard Message-ID: <1292619148-27617-1-git-send-email-lrea@nekls.org> Nice changes, thanks. :) LR --- .../prog/en/modules/help/circ/view_holdsqueue.tmpl | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl index b34b65c..b563230 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl @@ -10,5 +10,9 @@
        • Get there: More > Administration > General Preferences > Circulation
        - - \ No newline at end of file +

        For optimum display and ease of picking items for holds, a superlibrarian will want to configure Keyword to +MARC Mappings linking the keyword "subtitle" to 245$b, 245$p, 245$n, and 245$h.

        +
          +
        • Get there: More > Administration > Keyword to MARC mapping, and add entries for those four fields.
        • +
        + -- 1.5.6.5 From nengard at bywatersolutions.com Thu Dec 16 14:26:08 2010 From: nengard at bywatersolutions.com (Nicole Engard) Date: Thu, 16 Dec 2010 08:26:08 -0500 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Help file revisions per Owen Leonard Message-ID: <1292505968-6691-1-git-send-email-nengard@bywatersolutions.com> From: Liz Rea Nice changes, thanks. :) LR Signed-off-by: Nicole Engard --- .../prog/en/modules/help/circ/view_holdsqueue.tmpl | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl index b34b65c..b563230 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/help/circ/view_holdsqueue.tmpl @@ -10,5 +10,9 @@
        • Get there: More > Administration > General Preferences > Circulation
        - - \ No newline at end of file +

        For optimum display and ease of picking items for holds, a superlibrarian will want to configure Keyword to +MARC Mappings linking the keyword "subtitle" to 245$b, 245$p, 245$n, and 245$h.

        +
          +
        • Get there: More > Administration > Keyword to MARC mapping, and add entries for those four fields.
        • +
        + -- 1.5.6.5 From Katrin.Fischer.83 at web.de Sat Dec 18 20:05:50 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Sat, 18 Dec 2010 20:05:50 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] bug 5516: Corrected git url in Install Documentation Corrected the git clone url for INSTALL.ubuntu, INSTALL.ubuntu.lucid Message-ID: <1292699150-21136-1-git-send-email-Katrin.Fischer.83@web.de> From: Edward Allen Signed-off-by: Katrin Fischer --- INSTALL.ubuntu | 2 +- INSTALL.ubuntu.lucid | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/INSTALL.ubuntu b/INSTALL.ubuntu index 3a33799..58220ca 100644 --- a/INSTALL.ubuntu +++ b/INSTALL.ubuntu @@ -52,7 +52,7 @@ Run the following command to update your system: 1.4.1 Option A: Download Koha via Git (optional) $ sudo apt-get install git-core git-email - $ git clone git://git.koha-community.org/pub/scm/koha.git kohaclone + $ git clone git://git.koha-community.org/koha.git kohaclone $ cd kohaclone $ git checkout -b myinstall origin diff --git a/INSTALL.ubuntu.lucid b/INSTALL.ubuntu.lucid index 0ee096e..4d77227 100644 --- a/INSTALL.ubuntu.lucid +++ b/INSTALL.ubuntu.lucid @@ -45,7 +45,7 @@ IMPORTANT: You _MUST_ follow all the steps outlined there for 1.3.1 Option A: Download Koha via Git (optional) $ sudo apt-get install git-core git-email - $ git clone git://git.koha-community.org/pub/scm/koha.git kohaclone + $ git clone git://git.koha-community.org/koha.git kohaclone $ cd kohaclone $ git checkout -b myinstall origin -- 1.7.1 From pianohacker at gmail.com Sun Dec 19 03:23:37 2010 From: pianohacker at gmail.com (Jesse Weaver) Date: Sat, 18 Dec 2010 19:23:37 -0700 Subject: [Koha-patches] [PATCH] Add .packages file for Ubuntu 10.10 Maverick Message-ID: <1292725417-15266-1-git-send-email-pianohacker@gmail.com> Ubuntu 10.10 has all of Koha's Perl dependencies packaged (aside from a couple small version issues); add a dpkg --set-selections compatible file to reflect that. --- install_misc/ubuntu_maverick.packages | 128 +++++++++++++++++++++++++++++++++ 1 files changed, 128 insertions(+), 0 deletions(-) create mode 100644 install_misc/ubuntu_maverick.packages diff --git a/install_misc/ubuntu_maverick.packages b/install_misc/ubuntu_maverick.packages new file mode 100644 index 0000000..103a0d1 --- /dev/null +++ b/install_misc/ubuntu_maverick.packages @@ -0,0 +1,128 @@ + +apache2 install +at install +daemon install +gcc install +gettext install +make install + +# mysql packages + +mysql-server install +libmysqlclient16 install +libmysqlclient16-dev install + +# yaz packages + +yaz install +yaz-doc install +libyaz3 install +libyaz3-dev install + +# zebra packages + +idzebra-2.0 install +idzebra-2.0-common install +idzebra-2.0-doc install +idzebra-2.0-utils install +libidzebra-2.0-0 install +libidzebra-2.0-dev install +libidzebra-2.0-mod-alvis install +libidzebra-2.0-mod-grs-marc install +libidzebra-2.0-mod-grs-regx install +libidzebra-2.0-mod-grs-xml install +libidzebra-2.0-mod-text install +libidzebra-2.0-modules install + +# crypto packages + +libgcrypt11 install +libgcrypt11-dev install + +# xml/xslt packages + +libxml2 install +libxml2-dev install +libxml2-utils install +libxslt1.1 install +libxslt1-dev install + +# perl packages + +libalgorithm-checkdigits-perl install +libauthen-cas-client-perl install +libbiblio-endnotestyle-perl install +libbusiness-isbn-perl install +libcgi-session-perl install +libcgi-session-serialize-yaml-perl install +libclass-factory-util-perl install +libdata-ical-perl install +libdate-calc-perl install +libdate-ical-perl install +libdate-manip-perl install +libdatetime-perl install +libdatetime-format-mail-perl install +libdatetime-format-strptime-perl install +libdatetime-format-w3cdtf-perl install +libdatetime-locale-perl install +libdatetime-timezone-perl install +libdbd-mysql-perl install +libdbd-sqlite2-perl install +libdbi-perl install +libemail-date-perl install +libgd-barcode-perl install +libgraphics-magick-perl install +libhtml-scrubber-perl install +libhtml-template-pro-perl install +libhttp-oai-perl install +liblingua-ispell-perl install +liblingua-stem-perl install +liblingua-stem-snowball-perl install +liblist-moreutils-perl install +liblocale-currency-format-perl install +liblocale-gettext-perl install +liblocale-po-perl install +libmail-sendmail-perl install +libmarc-charset-perl install +libmarc-crosswalk-dublincore-perl install +libmarc-record-perl install +libmarc-xml-perl install +libmemoize-memcached-perl install +libmime-lite-perl install +libmodule-install-perl install +libnet-ldap-perl install +libnet-server-perl install +libnet-z3950-zoom-perl install +libnumber-format-perl install +libpdf-api2-perl install +libpdf-reuse-perl install +libpdf-api2-simple-perl install +libpdf-reuse-barcode-perl install +libpdf-table-perl install +libpoe-perl install +libschedule-at-perl install +libsms-send-perl install +libtext-charwidth-perl install +libtext-csv-encoded-perl install +libtext-csv-perl install +libtext-iconv-perl install +libtext-wrapi18n-perl install +libtimedate-perl install +libtime-duration-perl install +libtime-format-perl install +libuniversal-require-perl install +libunix-syslog-perl install +libxml-perl install +libxml-dom-perl install +libxml-dumper-perl install +libxml-libxml-perl install +libxml-libxslt-perl install +libxml-namespacesupport-perl install +libxml-parser-perl install +libxml-regexp-perl install +libxml-rss-perl install +libxml-sax-writer-perl install +libxml-simple-perl install +libxml-xslt-perl install +libyaml-perl install +libyaml-syck-perl install -- 1.7.1 From f.demians at tamil.fr Sun Dec 19 10:44:31 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Sun, 19 Dec 2010 10:44:31 +0100 Subject: [Koha-patches] [PATCH] Bug 5406 Improve translation script Message-ID: <1292751871-31029-1-git-send-email-f.demians@tamil.fr> [1] Update all .po files in once with this command: translate update [2] For sysprefs, quoted text wasn't properly retrieved from .po file and so quoted strings wasn't translatable. [3] The install process (translate -p install de-DE) was rewriting syspref .po file which isn't required anymore. MUST be applied to [3.2] to get all syspref proper translation. --- misc/translator/LangInstaller.pm | 44 +++++++++++++++++++++++++++---------- 1 files changed, 32 insertions(+), 12 deletions(-) diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index a1fef0f..010b4a7 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -21,6 +21,8 @@ use strict; use warnings; use C4::Context; +# WARNING: Any other tested YAML library fails to work properly in this +# script content use YAML::Syck qw( Dump LoadFile ); use Locale::PO; use FindBin qw( $Bin ); @@ -172,7 +174,8 @@ sub update_tab_prefs { } } elsif ( $element ) { - my $text = $self->get_trans_text( $self->{file} . "#$pref_name# $element" ); + my $id = $self->{file} . "#$pref_name# $element"; + my $text = $self->get_trans_text( $id ); $p->[$i] = $text if $text; } } @@ -186,7 +189,6 @@ sub get_po_from_prefs { for my $file ( @{$self->{pref_files}} ) { my $pref = LoadFile( $self->{path_pref_en} . "/$file" ); $self->{file} = $file; - #print Dump($pref), "\n"; while ( my ($tab, $tab_content) = each %$pref ) { if ( ref($tab_content) eq 'ARRAY' ) { $self->add_prefs( $tab, $tab_content ); @@ -210,10 +212,9 @@ sub save_po { } -sub update_prefs { +sub get_po_merged_with_en { my $self = shift; - print "Update '", $self->{lang}, "' preferences .po file from 'en' .pref files\n"; # Get po from current 'en' .pref files $self->get_po_from_prefs(); my $po_current = $self->{po}; @@ -222,12 +223,19 @@ sub update_prefs { my $po_previous = Locale::PO->load_file_ashash( $self->po_filename ); for my $id ( keys %$po_current ) { - my $po = $po_previous->{'"'.$id.'"'}; + my $po = $po_previous->{Locale::PO->quote($id)}; next unless $po; my $text = Locale::PO->dequote( $po->msgstr ); $po_current->{$id}->msgstr( $text ); } +} + +sub update_prefs { + my $self = shift; + print "Update '", $self->{lang}, + "' preferences .po file from 'en' .pref files\n"; + $self->get_po_merged_with_en(); $self->save_po(); } @@ -240,9 +248,8 @@ sub install_prefs { exit; } - # Update the language .po file with last modified 'en' preferences - # and load it. - $self->update_prefs(); + # Get the language .po file merged with last modified 'en' preferences + $self->get_po_merged_with_en(); for my $file ( @{$self->{pref_files}} ) { my $pref = LoadFile( $self->{path_pref_en} . "/$file" ); @@ -257,7 +264,8 @@ sub install_prefs { } my $ntab = {}; for my $section ( keys %$tab_content ) { - my $text = $self->get_trans_text($self->{file} . " $section"); + my $id = $self->{file} . " $section"; + my $text = $self->get_trans_text($id); my $nsection = $text ? $text : $section; $ntab->{$nsection} = $tab_content->{$section}; } @@ -347,11 +355,23 @@ sub install { } +sub get_all_langs { + my $self = shift; + opendir( my $dh, $self->{path_po} ); + my @files = grep { $_ =~ /-i-opac-t-prog-v-3002000.po$/ } + readdir $dh; + @files = map { $_ =~ s/-i-opac-t-prog-v-3002000.po$//; $_ } @files; +} + + sub update { my $self = shift; - return unless $self->{lang}; - $self->update_tmpl() unless $self->{pref_only}; - $self->update_prefs(); + my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs(); + for my $lang ( @langs ) { + $self->set_lang( $lang ); + $self->update_tmpl() unless $self->{pref_only}; + $self->update_prefs(); + } } -- 1.7.3.2 From f.demians at tamil.fr Sun Dec 19 10:57:51 2010 From: f.demians at tamil.fr (=?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Demians?=) Date: Sun, 19 Dec 2010 10:57:51 +0100 Subject: [Koha-patches] [PATCH] Bug 5506 Improve translation script Message-ID: <1292752671-1574-1-git-send-email-f.demians@tamil.fr> [1] Update all .po files in once with this command: translate update [2] For sysprefs, quoted text wasn't properly retrieved from .po file and so quoted strings wasn't translatable. [3] The install process (translate -p install de-DE) was rewriting syspref .po file which isn't required anymore. MUST be applied to [3.2] to get all syspref proper translation. --- misc/translator/LangInstaller.pm | 44 +++++++++++++++++++++++++++---------- 1 files changed, 32 insertions(+), 12 deletions(-) diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index a1fef0f..010b4a7 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -21,6 +21,8 @@ use strict; use warnings; use C4::Context; +# WARNING: Any other tested YAML library fails to work properly in this +# script content use YAML::Syck qw( Dump LoadFile ); use Locale::PO; use FindBin qw( $Bin ); @@ -172,7 +174,8 @@ sub update_tab_prefs { } } elsif ( $element ) { - my $text = $self->get_trans_text( $self->{file} . "#$pref_name# $element" ); + my $id = $self->{file} . "#$pref_name# $element"; + my $text = $self->get_trans_text( $id ); $p->[$i] = $text if $text; } } @@ -186,7 +189,6 @@ sub get_po_from_prefs { for my $file ( @{$self->{pref_files}} ) { my $pref = LoadFile( $self->{path_pref_en} . "/$file" ); $self->{file} = $file; - #print Dump($pref), "\n"; while ( my ($tab, $tab_content) = each %$pref ) { if ( ref($tab_content) eq 'ARRAY' ) { $self->add_prefs( $tab, $tab_content ); @@ -210,10 +212,9 @@ sub save_po { } -sub update_prefs { +sub get_po_merged_with_en { my $self = shift; - print "Update '", $self->{lang}, "' preferences .po file from 'en' .pref files\n"; # Get po from current 'en' .pref files $self->get_po_from_prefs(); my $po_current = $self->{po}; @@ -222,12 +223,19 @@ sub update_prefs { my $po_previous = Locale::PO->load_file_ashash( $self->po_filename ); for my $id ( keys %$po_current ) { - my $po = $po_previous->{'"'.$id.'"'}; + my $po = $po_previous->{Locale::PO->quote($id)}; next unless $po; my $text = Locale::PO->dequote( $po->msgstr ); $po_current->{$id}->msgstr( $text ); } +} + +sub update_prefs { + my $self = shift; + print "Update '", $self->{lang}, + "' preferences .po file from 'en' .pref files\n"; + $self->get_po_merged_with_en(); $self->save_po(); } @@ -240,9 +248,8 @@ sub install_prefs { exit; } - # Update the language .po file with last modified 'en' preferences - # and load it. - $self->update_prefs(); + # Get the language .po file merged with last modified 'en' preferences + $self->get_po_merged_with_en(); for my $file ( @{$self->{pref_files}} ) { my $pref = LoadFile( $self->{path_pref_en} . "/$file" ); @@ -257,7 +264,8 @@ sub install_prefs { } my $ntab = {}; for my $section ( keys %$tab_content ) { - my $text = $self->get_trans_text($self->{file} . " $section"); + my $id = $self->{file} . " $section"; + my $text = $self->get_trans_text($id); my $nsection = $text ? $text : $section; $ntab->{$nsection} = $tab_content->{$section}; } @@ -347,11 +355,23 @@ sub install { } +sub get_all_langs { + my $self = shift; + opendir( my $dh, $self->{path_po} ); + my @files = grep { $_ =~ /-i-opac-t-prog-v-3002000.po$/ } + readdir $dh; + @files = map { $_ =~ s/-i-opac-t-prog-v-3002000.po$//; $_ } @files; +} + + sub update { my $self = shift; - return unless $self->{lang}; - $self->update_tmpl() unless $self->{pref_only}; - $self->update_prefs(); + my @langs = $self->{lang} ? ($self->{lang}) : $self->get_all_langs(); + for my $lang ( @langs ) { + $self->set_lang( $lang ); + $self->update_tmpl() unless $self->{pref_only}; + $self->update_prefs(); + } } -- 1.7.3.2 From cnighswonger at foundations.edu Sun Dec 19 20:26:47 2010 From: cnighswonger at foundations.edu (Chris Nighswonger) Date: Sun, 19 Dec 2010 14:26:47 -0500 Subject: [Koha-patches] [PATCH] Bug 5373: Adds cardnumber to the field list of the Import Patrons NOTES. In-Reply-To: <1291586864-10023-1-git-send-email-gcollum@gmail.com> References: <1291586864-10023-1-git-send-email-gcollum@gmail.com> Message-ID: I was just doing a bit of cherry-picking for 3.2.x and noticed this patch which has been committed to HEAD. This is not the correct way to fix this "bug." Cardnumber is one of two fields stripped by line 64 in tools/import_borrowers.pl. If it is desirable to include 'cardnumber' in the field list, it should be removed from the grep in the underlying script at the above mentioned line. Doing this at the template level just results in an unnecessary remove and re-addition. Kind Regards, Chris On Sun, Dec 5, 2010 at 5:07 PM, Garry Collum wrote: > Adds 'cardnumber' as an option to the list of possible fields in the NOTES section of the patron import tool. > --- > ?.../prog/en/modules/tools/import_borrowers.tmpl ? ?| ? ?4 ++-- > ?1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl > index 0e409b6..2bec508 100644 > --- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl > +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/import_borrowers.tmpl > @@ -144,8 +144,8 @@ > ?
        - &biblionumber=&type=intranet&op=fillinput')">Choose + &biblionumber=&type=intranet&op=fillinput')">Choose - &type=intranet&op=fillinput')">Clear Field + &type=intranet&op=fillinput')">Clear Field
        +

        (Record no. )

        + + +
        +
        +
        @@ -155,9 +178,10 @@
        + - + + + + + + + + + + + + + + + + + + _ + +
        +
        + + \ No newline at end of file diff --git a/koha-tmpl/opac-tmpl/prog/images/loading.gif b/koha-tmpl/opac-tmpl/prog/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c2f7c058836808f7f1f5f9a4bdf37d4e5f9284a GIT binary patch literal 3208 zcmc(ic~Dc=9>*`aOO|`};l05I0veErPzymNWmO?SfPgFlg5pAq3huH91c9)G1Y`|i z4JZjDhG<1Z5!{L(f?6D`8``H2sCB`;j(xVT^L)Wphk5_LnZEPqnRDmP=X1Wl at 66!` z`n$Ttvj7(G763kc_y7RFrAwCz3JSWqx*8f9xLj^@boA)x=);E(&z?OyXU-f5f{bVW zSl0ix;3aK}PuV15r6r~$u;RDIr*GdCFLF%Wxp^00{VN2}j0dehpey_$SMt2W{1!QK zKojHE!m014ehNU3O@{&#81Ry?oX#6DZ$$v0J3e>A35z_WBvJ<_#BKo;WU| zlhe}qUa=5u3mwW&3lJ7s?M1x36dY=FTw|QvgGz$IR&C=!53NBJpfA=OKGM`_RmbT% znZm9NNG{r+6zds~vIJC01Jq2Sfd~xI=Y0{MfaQy zn2ZzlCpfx2_e$RKF6Y3;lDC^Ctng6>y!>|IX5edIqlS+PO-?8+ z`B&W3L?HdjNFjrNI!Jn^_xX`vLz8IS;`MxK?2dHilQLyLW(Kk1FgksCojERsJ!?iEkw+`1cDYq6akXxle%?Jr<{{=0nz`Kk-S^@n0J8?VXMIkDd80qP5Zm)#`}B9q`aYD-x25 zc at QMAn3TmSh+$G`MJqYrrZlSzXqzXwkxe}q+R{=~MXl6{TMe0tZ;lxDwHaEwS~Tn) z%Z4-bbN=m#CC+_Hj=V at B(_K9qdqPDt^t)b6FaB0hLKPppyu1i6y5o8OFfai$3|@Hf z;}f9$JoCBho5!)9?In}=Wi7?^t?W>oEX>UIsE7wEM6JuV|urBCNX|~_fosA>efw^cee6+8#zdilg;yU=9%o2Tr8vKU(UXB z3kWh_IQ#Dlz2mDX28*Vsv~^2N0 at -2rA5dndqT#a_FD7Mja*;&mNGTuQl4hBa#RlbU zyNJdn0&7;IFttot;-xlVx#2#Rt0hHS8Yc?$hTuI$Ax^85FTg>Ou?^asn^v zc4TamL;dN)1SL|wK5J+}IUv2WZek)s&{URu5`W(KbZO#xJ-h7I%bmY at -Nh&FUD-3b zWYh3hA$_f%(+^E&|9Jfl`pIECdq1scZFL2~(DjE!P`xQick6HdB~DW0RW%CJs%Egc z5*vQ&0+H<+8=2yLP{*8J|AcQU5HKERhC^Yc8+NlT`wE?W{KMilM$MR*u`F^Vg|y0P zH$vvm4^8ofIt;5X%DqHWn*2F7FBENb*Qjev#6oN7p$rX0Wr+o zs`8{oPY+ryQp?#Sq!&YSG)vgY_Gs^!%G7))-)}L!8*2e#qa^10fs}hSj~-QC at -4P~ z6qFe9!gDNk%%gbp7$K<>c~-GPNqH$TKYQ-6`*N1g%+J>kPgn4EssJL|j0Ip5#AY?s zRM6Erzwp(Dilg}V_^V)%qWGU*#U9ns-X-MKYl| zwFePZV^uR!FKtm8+&~Gt)DlKfaDSp(XD8Bx>sdSsxd$cN6#7_!m=A>Xob*j5%IRbb zL+IeOburN9EZZ>Z9V|2W!Ll&m3Wh3Gp-TYt&PcD{jknNG3RUzoTSoVzE3-^Q04Zo> zo;@!8+wSODeZ97yngE&Z;n_3~QezZYX6lH()hmh|!W>Kvk9*v*4a;;;uE^_s5$88j z at v}80$2lr=(S2WP{rV(s;4ea&y7i}<7XxY=T&X^_9 at OJUZ0sn8#??REOF5?yT1o`- zcy532%O{1)9c9x=V!U)kdGqd6mgst zjK)D-dV{YE!y_F;(H;WUcZBDP7GSpl>Q%HuunND8;a5kUr6+R98O-cNL&bM=ik$%oZJ^bN~{`Ou$DNS at CB>aXDEiy1~>dAVzrxJXf|%q~{3 zV+sT$5OlN3ch~51Ia#f2Dy#?LDRKz$p>(uvXKchk3lKrb!5U$BE`ni$=yiZPfK&CDbpRi{y#a8x>Lvn-cH8Z2YFcxCWPvAg{g4_(vBgWOcI!oCDiIr*tgFD z0>S>ZbG=}lo*<*B9x-NM2+WPPzk!bHFPppF5E{UBX{72*x15C{|HfBzB=y)?!u4((=0EgFLA_ z6`T@*qVPu%h`}%=g4~IcPci+B9 at -2D7oZGStf5opdO-$lH-c!vJHV>+`Sv#v^E=-M zy2;5mj{xJ#ck$qxWMVRMnc%^tr=x`E2j(mK&uiab at cCNZ3*; z{}ciWc1dFPu?S2#l*O}QL#Hy~RyUEaitnx6%8J5aG?N#&&2ooOFi*BoP^rKruGE6e zcty2q{Z3UiqprS6E6a4e(ctyDh^*`q;E_{?+fE^2WEl1@`Khci${^T>BfB-uBvB zWRm+Rso1^=^H?Vo|byTTbgxVWRzkrjj8ud(@m}8ax_s zY?YdiajB#$UkG9tIz0b*bBDr_s}UX3GqXvExGLdpADx_i0config('opachtdocs')."/prog/en/xslt/compact.xsl"; -my $parser = XML::LibXML->new(); -my $xslt = XML::LibXSLT->new(); -my $source = $parser->parse_string($xmlrecord); -my $style_doc = $parser->parse_file($xslfile); -my $stylesheet = $xslt->parse_stylesheet($style_doc); -my $results = $stylesheet->transform($source); -my $newxmlrecord = $stylesheet->output_string($results); -#warn $newxmlrecord; -print $input->header(), $newxmlrecord; + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/compact.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; + exit; +} elsif ($view eq 'html'){ + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/MARC21slim2OPACMARCdetail.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; exit; } else { $record =GetMarcBiblio($biblionumber) unless $record; -- 1.6.0.6 From chrisc at catalyst.net.nz Mon Dec 20 14:58:46 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Tue, 21 Dec 2010 02:58:46 +1300 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Proposed fix for Bug 5106 - Simplify MARC view choices in the OPAC In-Reply-To: <809BE39CD64BFD4EB9036172EBCCFA311AACD0@S-MAIL-1B.rijksmuseum.intra> References: <809BE39CD64BFD4EB9036172EBCCFA311AACD0@S-MAIL-1B.rijksmuseum.intra> Message-ID: <20101220135846.GZ27877@rorohiko> Hi Marcel This signed off patch contains a conflict marker in opac.css Not sure if the original does or not, but either way, needs to be fixed. Chris -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From henridamien.laurent at biblibre.com Mon Dec 20 15:02:19 2010 From: henridamien.laurent at biblibre.com (henridamien.laurent at biblibre.com) Date: Mon, 20 Dec 2010 15:02:19 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 5480 Some usual UNIMARC cataloguing plugins doesn't work anymore Message-ID: <1292853739-3814-1-git-send-email-henridamien.laurent@biblibre.com> From: Fr?d?ric Demians [3.2] To be applied Signed-off-by: Henri-Damien LAURENT --- .../value_builder/unimarc_field_210c.tmpl | 2 +- .../value_builder/unimarc_field_4XX.tmpl | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c.tmpl index 9eb49fe..6cf50f2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_210c.tmpl @@ -7,7 +7,7 @@

        Search for authority type: EDITORS

        - + " /> diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_4XX.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_4XX.tmpl index 696af43..5cc16a2 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_4XX.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/value_builder/unimarc_field_4XX.tmpl @@ -107,10 +107,10 @@
        @@ -198,7 +198,7 @@

        - &amp;startfrom=&amp;search=&amp;resultsperpage=&amp;type=intranet&amp;op=do_search"> + &amp;startfrom=&amp;search=&amp;resultsperpage=&amp;type=intranet&amp;op=do_search"> << Previous @@ -209,14 +209,14 @@ - &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> + &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> - &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> + &startfrom=&search=&resultsperpage=&type=intranet&op=do_search"> Next>> -- 1.7.1 From henridamien.laurent at biblibre.com Mon Dec 20 15:09:49 2010 From: henridamien.laurent at biblibre.com (henridamien.laurent at biblibre.com) Date: Mon, 20 Dec 2010 15:09:49 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Bug 4838 Allow to choose which authority heading to copy into biblio record Message-ID: <1292854189-4991-1-git-send-email-henridamien.laurent@biblibre.com> From: Fr?d?ric Demians With this patch, in biblio record data entry form, when ... is clicked for an authority controlled field, it's possible to select which heading repetion to copy if the authority has repeated headings. When there is just one authority repetition, the first one is displayed to choose, as previously. This patch is REQUIRED by French libraries following SUDOC UNIMARC format, and cataloguing multilingual materials ie all Higher Educational and Research libraries. Signed-off-by: Henri-Damien LAURENT --- authorities/auth_finder.pl | 14 ++++++ authorities/blinddetail-biblio-search.pl | 47 ++++++-------------- .../authorities/blinddetail-biblio-search.tmpl | 15 +++--- .../modules/authorities/searchresultlist-auth.tmpl | 6 +++ 4 files changed, 41 insertions(+), 41 deletions(-) diff --git a/authorities/auth_finder.pl b/authorities/auth_finder.pl index 89f632f..99ac2c1 100755 --- a/authorities/auth_finder.pl +++ b/authorities/auth_finder.pl @@ -70,6 +70,20 @@ if ( $op eq "do_search" ) { SearchAuthorities( \@marclist, \@and_or, \@excluding, \@operator, \@value, $startfrom * $resultsperpage, $resultsperpage, $authtypecode, $orderby); + + # If an authority heading is repeated, add an arrayref to those repetions + # First heading -- Second heading + for my $heading ( @$results ) { + my @repets = split / -- /, $heading->{summary}; + if ( @repets > 1 ) { + my @repets_loop; + for (my $i = 0; $i < @repets; $i++) { + push @repets_loop, + { index => $index, repet => $i+1, value => $repets[$i] }; + } + $heading->{repets} = \@repets_loop; + } + } # multi page display gestion my $displaynext = 0; my $displayprev = $startfrom; diff --git a/authorities/blinddetail-biblio-search.pl b/authorities/blinddetail-biblio-search.pl index 1495348..0f734b2 100755 --- a/authorities/blinddetail-biblio-search.pl +++ b/authorities/blinddetail-biblio-search.pl @@ -75,46 +75,27 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( ); # fill arrays -my @loop_data = (); +my @subfield_loop; if ($authid) { - foreach my $field ( $record->field( $auth_type->{auth_tag_to_report} ) ) { - my @subfields_data; - my @subf = $field->subfields; - - # loop through each subfield - my %result; - for my $i ( 0 .. $#subf ) { - $subf[$i][0] = "@" unless $subf[$i][0]; - $result{ $subf[$i][0] } .= $subf[$i][1] . "|"; - } - foreach ( keys %result ) { - my %subfield_data; - chop $result{$_}; - $subfield_data{marc_value} = $result{$_}; - $subfield_data{marc_subfield} = $_; - - # $subfield_data{marc_tag}=$field->tag(); - push( @subfields_data, \%subfield_data ); - } - if ( $#subfields_data >= 0 ) { - my %tag_data; - $tag_data{tag} = $field->tag() . ' -' . $tagslib->{ $field->tag() }->{lib}; - $tag_data{subfield} = \@subfields_data; - push( @loop_data, \%tag_data ); - } + my @fields = $record->field( $auth_type->{auth_tag_to_report} ); + my $repet = ($query->param('repet') || 1) - 1; + my $field = $fields[$repet]; + for ( $field->subfields ) { + my ($letter, $value) = @$_; + $letter = '@' unless $letter; + push @subfield_loop, { marc_subfield => $letter, marc_value => $value }; } -} else { +} +else { # authid is empty => the user want to empty the entry. $template->param( "clear" => 1 ); -# warn Data::Dumper::Dumper(\@loop_data); } -$template->param( "0XX" => \@loop_data ); - $template->param( - authid => $authid ? $authid : "", - index => $index, - tagid => $tagid, + authid => $authid ? $authid : "", + index => $index, + tagid => $tagid, + SUBFIELD_LOOP => \@subfield_loop, ); output_html_with_http_headers $query, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl index a6e4723..a9753b3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/blinddetail-biblio-search.tmpl @@ -19,19 +19,18 @@ if(subfields[i].getAttribute('name').match(re)){ // it s a subfield var code = subfields[i]; // code is the first input var subfield = subfields[i+1]; // subfield the second + if (subfield){subfield.value="" ;} - - - if (code.value == ""){ + + if (code.value == ""){ subfield.value = ""; - } - - - if(code.value=='9'){ - subfield.value = ""; } + + if(code.value=='9'){ + subfield.value = ""; + } } } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl index e327451..5d1f9a4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/authorities/searchresultlist-auth.tmpl @@ -70,7 +70,13 @@ function jumpfull(page)

        -- 1.7.1 From oleonard at myacpl.org Mon Dec 20 16:10:19 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Mon, 20 Dec 2010 10:10:19 -0500 Subject: [Koha-patches] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name Message-ID: <1292857819-29323-1-git-send-email-oleonard@myacpl.org> --- C4/VirtualShelves.pm | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/C4/VirtualShelves.pm b/C4/VirtualShelves.pm index 715cace..ee8d5c1 100644 --- a/C4/VirtualShelves.pm +++ b/C4/VirtualShelves.pm @@ -116,9 +116,9 @@ sub GetShelves ($$$$) { $query .= ($mincategory == 1) ? "WHERE owner=? AND category=?" : "WHERE category>=?"; $query .= qq( GROUP BY virtualshelves.shelfnumber - ORDER BY virtualshelves.category - DESC + ORDER BY virtualshelves.shelfname LIMIT ?, ?); + warn $query; my $sth2 = $dbh->prepare($query); $sth2->execute(@params); my %shelflist; -- 1.7.1 From lrea at nekls.org Mon Dec 20 16:56:11 2010 From: lrea at nekls.org (Liz Rea) Date: Mon, 20 Dec 2010 09:56:11 -0600 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Fix for Bug 5526, List of lists should be in alphabetical order by list name Message-ID: <1292860571-16767-1-git-send-email-lrea@nekls.org> From: Owen Leonard Signed-off-by: Liz Rea --- C4/VirtualShelves.pm | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/C4/VirtualShelves.pm b/C4/VirtualShelves.pm index 715cace..ee8d5c1 100644 --- a/C4/VirtualShelves.pm +++ b/C4/VirtualShelves.pm @@ -116,9 +116,9 @@ sub GetShelves ($$$$) { $query .= ($mincategory == 1) ? "WHERE owner=? AND category=?" : "WHERE category>=?"; $query .= qq( GROUP BY virtualshelves.shelfnumber - ORDER BY virtualshelves.category - DESC + ORDER BY virtualshelves.shelfname LIMIT ?, ?); + warn $query; my $sth2 = $dbh->prepare($query); $sth2->execute(@params); my %shelflist; -- 1.5.6.5 From henridamien.laurent at biblibre.com Mon Dec 20 17:28:32 2010 From: henridamien.laurent at biblibre.com (LAURENT Henri-Damien) Date: Mon, 20 Dec 2010 17:28:32 +0100 Subject: [Koha-patches] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name In-Reply-To: <1292857819-29323-1-git-send-email-oleonard@myacpl.org> References: <1292857819-29323-1-git-send-email-oleonard@myacpl.org> Message-ID: <4D0F8430.5020505@biblibre.com> Le 20/12/2010 16:10, Owen Leonard a ?crit : > --- > C4/VirtualShelves.pm | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/C4/VirtualShelves.pm b/C4/VirtualShelves.pm > index 715cace..ee8d5c1 100644 > --- a/C4/VirtualShelves.pm > +++ b/C4/VirtualShelves.pm > @@ -116,9 +116,9 @@ sub GetShelves ($$$$) { > $query .= ($mincategory == 1) ? "WHERE owner=? AND category=?" : "WHERE category>=?"; > $query .= qq( > GROUP BY virtualshelves.shelfnumber > - ORDER BY virtualshelves.category > - DESC > + ORDER BY virtualshelves.shelfname > LIMIT ?, ?); > + warn $query; Unconditional warn detected.... > my $sth2 = $dbh->prepare($query); > $sth2->execute(@params); > my %shelflist; From Katrin.Fischer.83 at web.de Mon Dec 20 19:36:32 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 20 Dec 2010 19:36:32 +0100 Subject: [Koha-patches] [PATCH] Bug 2965: Follow up - fixing problem with barcode field Message-ID: <1292870192-12996-1-git-send-email-Katrin.Fischer.83@web.de> The scanned barcode stayed in the checkout field instead of being deleted after checkout or confirmation. This patch reverts the template change, so the barcode is deleted. Please test! --- .../prog/en/modules/circ/circulation.tmpl | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) 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 f9db03c..9dda50d 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -10,7 +10,7 @@ - - - - - - @@ -38,21 +30,17 @@
        -
        +
        + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl index 8f5182e..fba0c08 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl @@ -17,16 +17,42 @@ YAHOO.widget.Overlay.windowResizeEvent.subscribe(positionfurthersearchesMenu); }); - var GB_ROOT_DIR = "/opac-tmpl/prog/en/lib/greybox/"; +$(document).ready(function(){ + $.ajaxSetup({ + error:function(x,e){ + switch (x.status) { + case 200: break; + default: + $('#switchview').parent().html("
        "+_("Sorry, plain view is temporarily unavailable")+".
        "); + $("#plainmarc").hide(); + $("#labeledmarc").show(); + break; + } + } + }); + + var loaded = 0; + $("#switchview").toggle( + function () { + $(this).text(_("view labeled")); + $("#labeledmarc").hide(); + if(!loaded){ + $("#plainmarc").show().html("
        "+_("Loading")+"...
        ").load("/cgi-bin/koha/opac-showmarc.pl","id=&viewas=html"); + loaded = 1; + } else { + $("#plainmarc").show(); + } + }, + function () { + $(this).text(_("view plain")); + $("#labeledmarc").show(); + $("#plainmarc").hide(); + } + ); +}); //]]> - - - - - - @@ -34,28 +60,25 @@
        -
        -

        MARC View

        -
        - ">Normal View - - -" title="MARC" rel="gb_page_center[600,500]">MARC View - Expanded MARC View - -MARC View - +

        MARC View

        + -

        (Record no. )

        -
        CopiesCopies
        @@ -176,23 +200,23 @@ -
        -
        +
        + -
        + + + +
        + +
        - &biblionumber=&type=intranet&op=fillinput')">Choose + &biblionumber=&type=intranet&op=fillinput')">Choose - &type=intranet&op=fillinput')">Clear Field + &type=intranet&op=fillinput')">Clear Field
        times + + + &index=&repet=')" title=""> + + &index=')">choose + ">Edit authority
        +

        (Record no. )

        + + +
        +
        +
        @@ -155,9 +178,10 @@
        + - +
        CopiesCopies
        @@ -176,23 +200,23 @@ -
        -
        +
        + -
        - - - + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl index e83ea3a..931153b 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -47,14 +47,6 @@ YAHOO.util.Event.onContentReady("furtherm", function () { - - - - - - diff --git a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl index 24326f2..5703059 100755 --- a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl +++ b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACDetail.xsl @@ -181,10 +181,9 @@ diff --git a/opac/opac-showmarc.pl b/opac/opac-showmarc.pl index b379917..9c70d56 100755 --- a/opac/opac-showmarc.pl +++ b/opac/opac-showmarc.pl @@ -63,17 +63,30 @@ if ($importid) { } if ($view eq 'card') { -$xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; -my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/compact.xsl"; -my $parser = XML::LibXML->new(); -my $xslt = XML::LibXSLT->new(); -my $source = $parser->parse_string($xmlrecord); -my $style_doc = $parser->parse_file($xslfile); -my $stylesheet = $xslt->parse_stylesheet($style_doc); -my $results = $stylesheet->transform($source); -my $newxmlrecord = $stylesheet->output_string($results); -#warn $newxmlrecord; -print $input->header(), $newxmlrecord; + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/compact.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; + exit; +} elsif ($view eq 'html'){ + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/MARC21slim2OPACMARCdetail.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; exit; } else { $record =GetMarcBiblio($biblionumber) unless $record; -- 1.6.0.6 From m.de.rooy at rijksmuseum.nl Mon Dec 20 20:11:26 2010 From: m.de.rooy at rijksmuseum.nl (Marcel de Rooy) Date: Mon, 20 Dec 2010 20:11:26 +0100 Subject: [Koha-patches] [PATCH] [SIGNED-OFF] Proposed fix for Bug 5106 - Simplify MARC view choices in the OPAC (Conflict marker fix 2nd try) Message-ID: <1292872286-23644-1-git-send-email-m.de.rooy@rijksmuseum.nl> From: Owen Leonard - Eliminates the "Extended MARC View" tab - Points the "MARC View" tab to opac-MARCDetail.pl as it is when XSLT is off - Offers a "view plain" link on opac-MARCDetail.pl. Clicking this link replaces the standard labeled MARC view with an unformatted view similar to the one displayed in the pop-up modal MARC view. - When viewing the "plain view," clicking the "view labeled" link will return you to the standard labeled MARC view. - Adds a new XSL file for displaying MARC data in a slightly-more-formatted manner (compared to one big
         block).
        
        Removed a conflict marker line from Owen's patch (Marcel).
        
        Signed-off-by: Marcel de Rooy 
        ---
         koha-tmpl/opac-tmpl/prog/en/css/opac.css           |    5 +
         .../opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl |   22 +---
         .../opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl |  104 ++++++++++++--------
         .../opac-tmpl/prog/en/modules/opac-detail.tmpl     |    8 --
         .../prog/en/xslt/MARC21slim2OPACDetail.xsl         |    5 +-
         .../prog/en/xslt/MARC21slim2OPACMARCdetail.xsl     |   55 ++++++++++
         koha-tmpl/opac-tmpl/prog/images/loading.gif        |  Bin 0 -> 3208 bytes
         opac/opac-showmarc.pl                              |   35 +++++--
         8 files changed, 155 insertions(+), 79 deletions(-)
         create mode 100644 koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slim2OPACMARCdetail.xsl
         create mode 100644 koha-tmpl/opac-tmpl/prog/images/loading.gif
        
        diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        index bfff594..68cc572 100644
        --- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        +++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
        @@ -2000,3 +2000,8 @@ div.ft {
         	background-color : rgb(239, 254, 213);
         	background-color : rgba(239, 254, 213, 0.4);
         }
        +
        +#plainmarc table { border: 0; margin: .7em 0 0 0; font-family: monospace; font-size: 95%; }
        +#plainmarc th { background-color : #FFF; border: 0; white-space: nowrap; text-align:left; vertical-align: top; padding: 2px; }
        +#plainmarc td { border: 0; padding : 2px; vertical-align: top; }
        +
        diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        index 475d681..305dfce 100644
        --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-ISBDdetail.tmpl
        @@ -21,14 +21,6 @@
              });
         //]]>
         
        -
        -
        -
        -
        -
        -
         
         
         
        @@ -38,21 +30,17 @@
         
         
             
        -
        +
        + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl index 8f5182e..fba0c08 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-MARCdetail.tmpl @@ -17,16 +17,42 @@ YAHOO.widget.Overlay.windowResizeEvent.subscribe(positionfurthersearchesMenu); }); - var GB_ROOT_DIR = "/opac-tmpl/prog/en/lib/greybox/"; +$(document).ready(function(){ + $.ajaxSetup({ + error:function(x,e){ + switch (x.status) { + case 200: break; + default: + $('#switchview').parent().html("
        "+_("Sorry, plain view is temporarily unavailable")+".
        "); + $("#plainmarc").hide(); + $("#labeledmarc").show(); + break; + } + } + }); + + var loaded = 0; + $("#switchview").toggle( + function () { + $(this).text(_("view labeled")); + $("#labeledmarc").hide(); + if(!loaded){ + $("#plainmarc").show().html("
        "+_("Loading")+"...
        ").load("/cgi-bin/koha/opac-showmarc.pl","id=&viewas=html"); + loaded = 1; + } else { + $("#plainmarc").show(); + } + }, + function () { + $(this).text(_("view plain")); + $("#labeledmarc").show(); + $("#plainmarc").hide(); + } + ); +}); //]]> - - - - - - @@ -34,28 +60,25 @@
        -
        -

        MARC View

        -
        - ">Normal View - - -" title="MARC" rel="gb_page_center[600,500]">MARC View - Expanded MARC View - -MARC View - +

        MARC View

        + -

        (Record no. )

        - +

        (Record no. )

        + + +
        +
        +
        @@ -155,9 +178,10 @@
        +
        - + + + + + + + + + + + + + + + + + + _ + +
        +
        + + \ No newline at end of file diff --git a/koha-tmpl/opac-tmpl/prog/images/loading.gif b/koha-tmpl/opac-tmpl/prog/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c2f7c058836808f7f1f5f9a4bdf37d4e5f9284a GIT binary patch literal 3208 zcmc(ic~Dc=9>*`aOO|`};l05I0veErPzymNWmO?SfPgFlg5pAq3huH91c9)G1Y`|i z4JZjDhG<1Z5!{L(f?6D`8``H2sCB`;j(xVT^L)Wphk5_LnZEPqnRDmP=X1Wl at 66!` z`n$Ttvj7(G763kc_y7RFrAwCz3JSWqx*8f9xLj^@boA)x=);E(&z?OyXU-f5f{bVW zSl0ix;3aK}PuV15r6r~$u;RDIr*GdCFLF%Wxp^00{VN2}j0dehpey_$SMt2W{1!QK zKojHE!m014ehNU3O@{&#81Ry?oX#6DZ$$v0J3e>A35z_WBvJ<_#BKo;WU| zlhe}qUa=5u3mwW&3lJ7s?M1x36dY=FTw|QvgGz$IR&C=!53NBJpfA=OKGM`_RmbT% znZm9NNG{r+6zds~vIJC01Jq2Sfd~xI=Y0{MfaQy zn2ZzlCpfx2_e$RKF6Y3;lDC^Ctng6>y!>|IX5edIqlS+PO-?8+ z`B&W3L?HdjNFjrNI!Jn^_xX`vLz8IS;`MxK?2dHilQLyLW(Kk1FgksCojERsJ!?iEkw+`1cDYq6akXxle%?Jr<{{=0nz`Kk-S^@n0J8?VXMIkDd80qP5Zm)#`}B9q`aYD-x25 zc at QMAn3TmSh+$G`MJqYrrZlSzXqzXwkxe}q+R{=~MXl6{TMe0tZ;lxDwHaEwS~Tn) z%Z4-bbN=m#CC+_Hj=V at B(_K9qdqPDt^t)b6FaB0hLKPppyu1i6y5o8OFfai$3|@Hf z;}f9$JoCBho5!)9?In}=Wi7?^t?W>oEX>UIsE7wEM6JuV|urBCNX|~_fosA>efw^cee6+8#zdilg;yU=9%o2Tr8vKU(UXB z3kWh_IQ#Dlz2mDX28*Vsv~^2N0 at -2rA5dndqT#a_FD7Mja*;&mNGTuQl4hBa#RlbU zyNJdn0&7;IFttot;-xlVx#2#Rt0hHS8Yc?$hTuI$Ax^85FTg>Ou?^asn^v zc4TamL;dN)1SL|wK5J+}IUv2WZek)s&{URu5`W(KbZO#xJ-h7I%bmY at -Nh&FUD-3b zWYh3hA$_f%(+^E&|9Jfl`pIECdq1scZFL2~(DjE!P`xQick6HdB~DW0RW%CJs%Egc z5*vQ&0+H<+8=2yLP{*8J|AcQU5HKERhC^Yc8+NlT`wE?W{KMilM$MR*u`F^Vg|y0P zH$vvm4^8ofIt;5X%DqHWn*2F7FBENb*Qjev#6oN7p$rX0Wr+o zs`8{oPY+ryQp?#Sq!&YSG)vgY_Gs^!%G7))-)}L!8*2e#qa^10fs}hSj~-QC at -4P~ z6qFe9!gDNk%%gbp7$K<>c~-GPNqH$TKYQ-6`*N1g%+J>kPgn4EssJL|j0Ip5#AY?s zRM6Erzwp(Dilg}V_^V)%qWGU*#U9ns-X-MKYl| zwFePZV^uR!FKtm8+&~Gt)DlKfaDSp(XD8Bx>sdSsxd$cN6#7_!m=A>Xob*j5%IRbb zL+IeOburN9EZZ>Z9V|2W!Ll&m3Wh3Gp-TYt&PcD{jknNG3RUzoTSoVzE3-^Q04Zo> zo;@!8+wSODeZ97yngE&Z;n_3~QezZYX6lH()hmh|!W>Kvk9*v*4a;;;uE^_s5$88j z at v}80$2lr=(S2WP{rV(s;4ea&y7i}<7XxY=T&X^_9 at OJUZ0sn8#??REOF5?yT1o`- zcy532%O{1)9c9x=V!U)kdGqd6mgst zjK)D-dV{YE!y_F;(H;WUcZBDP7GSpl>Q%HuunND8;a5kUr6+R98O-cNL&bM=ik$%oZJ^bN~{`Ou$DNS at CB>aXDEiy1~>dAVzrxJXf|%q~{3 zV+sT$5OlN3ch~51Ia#f2Dy#?LDRKz$p>(uvXKchk3lKrb!5U$BE`ni$=yiZPfK&CDbpRi{y#a8x>Lvn-cH8Z2YFcxCWPvAg{g4_(vBgWOcI!oCDiIr*tgFD z0>S>ZbG=}lo*<*B9x-NM2+WPPzk!bHFPppF5E{UBX{72*x15C{|HfBzB=y)?!u4((=0EgFLA_ z6`T@*qVPu%h`}%=g4~IcPci+B9 at -2D7oZGStf5opdO-$lH-c!vJHV>+`Sv#v^E=-M zy2;5mj{xJ#ck$qxWMVRMnc%^tr=x`E2j(mK&uiab at cCNZ3*; z{}ciWc1dFPu?S2#l*O}QL#Hy~RyUEaitnx6%8J5aG?N#&&2ooOFi*BoP^rKruGE6e zcty2q{Z3UiqprS6E6a4e(ctyDh^*`q;E_{?+fE^2WEl1@`Khci${^T>BfB-uBvB zWRm+Rso1^=^H?Vo|byTTbgxVWRzkrjj8ud(@m}8ax_s zY?YdiajB#$UkG9tIz0b*bBDr_s}UX3GqXvExGLdpADx_i0config('opachtdocs')."/prog/en/xslt/compact.xsl"; -my $parser = XML::LibXML->new(); -my $xslt = XML::LibXSLT->new(); -my $source = $parser->parse_string($xmlrecord); -my $style_doc = $parser->parse_file($xslfile); -my $stylesheet = $xslt->parse_stylesheet($style_doc); -my $results = $stylesheet->transform($source); -my $newxmlrecord = $stylesheet->output_string($results); -#warn $newxmlrecord; -print $input->header(), $newxmlrecord; + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/compact.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; + exit; +} elsif ($view eq 'html'){ + $xmlrecord = GetXmlBiblio($biblionumber) unless $xmlrecord; + my $xslfile = C4::Context->config('opachtdocs')."/prog/en/xslt/MARC21slim2OPACMARCdetail.xsl"; + my $parser = XML::LibXML->new(); + my $xslt = XML::LibXSLT->new(); + my $source = $parser->parse_string($xmlrecord); + my $style_doc = $parser->parse_file($xslfile); + my $stylesheet = $xslt->parse_stylesheet($style_doc); + my $results = $stylesheet->transform($source); + my $newxmlrecord = $stylesheet->output_string($results); + #warn $newxmlrecord; + print $input->header(), $newxmlrecord; exit; } else { $record =GetMarcBiblio($biblionumber) unless $record; -- 1.6.0.6 From Katrin.Fischer.83 at web.de Mon Dec 20 20:24:31 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Mon, 20 Dec 2010 20:24:31 +0100 Subject: [Koha-patches] [PATCH] Bug 2965: Follow up - fixing problem with barcode field Message-ID: <1292873071-20743-1-git-send-email-Katrin.Fischer.83@web.de> The scanned barcode stayed in the checkout field instead of being deleted after checkout or confirmation. This patch reverts the template change, so the barcode is deleted. Please test! --- .../prog/en/modules/circ/circulation.tmpl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) 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 f9db03c..9663e02 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tmpl @@ -418,7 +418,7 @@ No patron matched - "/> + -- 1.7.1 From nengard at gmail.com Tue Dec 21 03:39:20 2010 From: nengard at gmail.com (Nicole Engard) Date: Mon, 20 Dec 2010 20:39:20 -0600 Subject: [Koha-patches] [SIGNED-OFF] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name Message-ID: Hotel internet not letting me send this any other way. -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001--SIGNED-OFF-Fix-for-Bug-5526-List-of-lists-should.patch Type: application/octet-stream Size: 1017 bytes Desc: not available URL: From chrisc at catalyst.net.nz Tue Dec 21 03:47:57 2010 From: chrisc at catalyst.net.nz (Chris Cormack) Date: Tue, 21 Dec 2010 15:47:57 +1300 Subject: [Koha-patches] [SIGNED-OFF] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name In-Reply-To: References: Message-ID: <20101221024757.GP27877@rorohiko> * Nicole Engard (nengard at gmail.com) wrote: > Hotel internet not letting me send this any other way. Did you see Henri-Damien's comment? There is an unconditional warn in this patch, that will need to be removed before it can be accepted. If you want I can let the signed-off one stand if you follow it up with a patch to remove the warn. Alternatively, if you don't have time, I can do that, just let me know Chris > _______________________________________________ > Koha-patches mailing list > Koha-patches at lists.koha-community.org > http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches > website : http://www.koha-community.org/ > git : http://git.koha-community.org/ > bugs : http://bugs.koha-community.org/ -- Chris Cormack Catalyst IT Ltd. +64 4 803 2238 PO Box 11-053, Manners St, Wellington 6142, New Zealand -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: Digital signature URL: From Katrin.Fischer.83 at web.de Tue Dec 21 08:46:47 2010 From: Katrin.Fischer.83 at web.de (Katrin Fischer) Date: Tue, 21 Dec 2010 08:46:47 +0100 Subject: [Koha-patches] [PATCH] Bug 5527: Fix some problems in inactive borrowers report Message-ID: <1292917607-11322-1-git-send-email-Katrin.Fischer.83@web.de> - 'Not checked out since:' date was not added to query - borrowers with only checkouts and no returns since this date were considered inactive --- reports/borrowers_out.pl | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/reports/borrowers_out.pl b/reports/borrowers_out.pl index 0502dc6..0a135e1 100755 --- a/reports/borrowers_out.pl +++ b/reports/borrowers_out.pl @@ -181,7 +181,7 @@ sub calculate { $colorder .= $column; my $strsth2; - $strsth2 .= "select distinctrow $colfield FROM borrowers LEFT JOIN `old_issues` USING(borrowernumber)"; + $strsth2 .= "select distinct $colfield FROM borrowers WHERE 1"; if ($colfilter[0]) { $colfilter[0] =~ s/\*/%/g; $strsth2 .= " and $column LIKE '$colfilter[0]' " ; @@ -229,10 +229,18 @@ sub calculate { $strcalc .= "WHERE 1 "; @$filters[0]=~ s/\*/%/g if (@$filters[0]); $strcalc .= " AND borrowers.categorycode like '" . @$filters[0] ."'" if ( @$filters[0] ); - my $strqueryfilter = "SELECT DISTINCT borrowernumber FROM old_issues WHERE borrowernumber IS NOT NULL "; - if (@$filters[1]){ - my $strqueryfilter .= "AND old_issues.timestamp> @$filters[1] "; + + my $strqueryfilter = "SELECT DISTINCT borrowernumber FROM "; + $strqueryfilter .= "(SELECT borrowernumber from old_issues WHERE borrowernumber IS NOT NULL "; + if ($filters->[1]){ + $strqueryfilter .= "AND old_issues.timestamp> '$filters->[1]' "; + } + $strqueryfilter .= "UNION SELECT borrowernumber FROM issues WHERE 1 "; + if ($filters->[1]){ + $strqueryfilter .= "AND issues.timestamp> '$filters->[1]' "; } + $strqueryfilter .= ") active_borrowers"; + $strcalc .= " AND borrowers.borrowernumber not in ($strqueryfilter)"; $strcalc .= " group by borrowers.borrowernumber"; $strcalc .= ", $colfield" if ($column); -- 1.7.1 From colin.campbell at ptfs-europe.com Tue Dec 21 11:19:47 2010 From: colin.campbell at ptfs-europe.com (Colin Campbell) Date: Tue, 21 Dec 2010 10:19:47 +0000 Subject: [Koha-patches] [PATCH] Bug 5026 Undefined dates formatted poorly in serials-edit Message-ID: <1292926787-28620-1-git-send-email-colin.campbell@ptfs-europe.com> Don't display junk in empty fields Don't generate errors Merged some changes to make variable names moremeaningful in loops ( within loops) --- C4/Serials.pm | 13 +++++- serials/serials-edit.pl | 97 +++++++++++++++++++++++++---------------------- 2 files changed, 62 insertions(+), 48 deletions(-) diff --git a/C4/Serials.pm b/C4/Serials.pm index 1abebb4..62f7382 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -724,9 +724,16 @@ sub GetSerials2 { my @serials; while ( my $line = $sth->fetchrow_hashref ) { - $line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list - $line->{"planneddate"} = format_date( $line->{"planneddate"} ); - $line->{"publisheddate"} = format_date( $line->{"publisheddate"} ); + $line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list + # Format dates for display + for my $datefield ( qw( planneddate publisheddate ) ) { + if ($line->{$datefield} =~m/^00/) { + $line->{$datefield} = q{}; + } + else { + $line->{"planneddate"} = format_date( $line->{$datefield} ); + } + } push @serials, $line; } return @serials; diff --git a/serials/serials-edit.pl b/serials/serials-edit.pl index 58936be..c61fa86 100755 --- a/serials/serials-edit.pl +++ b/serials/serials-edit.pl @@ -92,19 +92,18 @@ my @errseq; # If user comes from subscription details unless (@serialids) { - foreach my $subscriptionid (@subscriptionids) { - my $serstatus = $query->param('serstatus'); - if ($serstatus) { + my $serstatus = $query->param('serstatus'); + if ($serstatus) { + foreach my $subscriptionid (@subscriptionids) { my @tmpser = GetSerials2( $subscriptionid, $serstatus ); - foreach (@tmpser) { - push @serialids, $_->{'serialid'}; - } + @serialids = map { $_->{serialid} } @tmpser; } } } -unless ( scalar(@serialids) ) { - my $string = "serials-collection.pl?subscriptionid=" . join( ",", uniq @subscriptionids ); +unless ( @serialids ) { + my $string = + 'serials-collection.pl?subscriptionid=' . join ',', uniq @subscriptionids; $string =~ s/,$//; print $query->redirect($string); @@ -112,12 +111,12 @@ unless ( scalar(@serialids) ) { my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "serials/serials-edit.tmpl", - query => $query, - type => "intranet", - authnotrequired => 0, - flagsrequired => {serials => 'receive_serials'}, - debug => 1, + template_name => 'serials/serials-edit.tmpl', + query => $query, + type => 'intranet', + authnotrequired => 0, + flagsrequired => { serials => 1 }, + debug => 1, } ); @@ -125,36 +124,37 @@ my @serialdatalist; my %processedserialid; my $today = C4::Dates->new(); -foreach my $tmpserialid (@serialids) { +foreach my $serialid (@serialids) { #filtering serialid for duplication #NEW serial should appear only once and are created afterwards - if ( defined($tmpserialid) - && $tmpserialid =~ /^[0-9]+$/ - && !$processedserialid{$tmpserialid} ) + if ( $serialid + && $serialid =~ /^[0-9]+$/ + && !$processedserialid{$serialid} ) { - my $data = GetSerialInformation($tmpserialid); - for my $datefield ( qw( publisheddate planneddate) ) { - if ($data->{$datefield} && $data->{$datefield}!~m/^00/) { - $data->{$datefield} = format_date( $data->{$datefield} ); + my $serinfo = GetSerialInformation($serialid); #TODO duplicates work done by GetSerials2 above + for my $d ( qw( publisheddate planneddate )){ + if ( $serinfo->{$d} =~m/^00/ ) { + $serinfo->{$d} = q{}; } else { - $data->{$datefield} = q{}; + $serinfo->{$d} = format_date( $serinfo->{$d} ); } } - $data->{arriveddate}=$today->output('syspref'); - $data->{'editdisable'} = ( + $serinfo->{arriveddate}=$today->output('syspref'); + + $serinfo->{'editdisable'} = ( ( - HasSubscriptionExpired( $data->{subscriptionid} ) == 1 - && $data->{'status1'} + HasSubscriptionExpired( $serinfo->{subscriptionid} ) + && $serinfo->{'status1'} ) - || $data->{'cannotedit'} + || $serinfo->{'cannotedit'} ); - push @serialdatalist, $data; - $processedserialid{$tmpserialid} = 1; + push @serialdatalist, $serinfo; + $processedserialid{$serialid} = 1; } } -my $bibdata = GetBiblioData( $serialdatalist[0]->{'biblionumber'} ); +my $biblio = GetBiblioData( $serialdatalist[0]->{'biblionumber'} ); my @newserialloop; my @subscriptionloop; @@ -164,8 +164,7 @@ my %processedsubscriptionid; foreach my $subscriptionid (@subscriptionids) { #Do not process subscriptionid twice if it was already processed. - if ( defined($subscriptionid) - && !$processedsubscriptionid{$subscriptionid} ) + if ( $subscriptionid && !$processedsubscriptionid{$subscriptionid} ) { my $cell; if ( $serialdatalist[0]->{'serialsadditems'} ) { @@ -177,8 +176,8 @@ foreach my $subscriptionid (@subscriptionids) { $cell->{serialsadditems} = 1; } $cell->{'subscriptionid'} = $subscriptionid; - $cell->{'itemid'} = "NNEW"; - $cell->{'serialid'} = "NEW"; + $cell->{'itemid'} = 'NNEW'; + $cell->{'serialid'} = 'NEW'; $cell->{'issuesatonce'} = 1; $cell->{arriveddate}=$today->output('syspref'); @@ -199,8 +198,16 @@ if ( $op and $op eq 'serialchangestatus' ) { my $newserial; for ( my $i = 0 ; $i <= $#serialids ; $i++ ) { + my ($plan_date, $pub_date); + + if (defined $planneddates[$i] && $planneddates[$i] ne 'XXX') { + $plan_date = format_date_in_iso( $planneddates[$i] ); + } + if (defined $publisheddates[$i] && $publisheddates[$i] ne 'XXX') { + $pub_date = format_date_in_iso( $publisheddates[$i] ); + } - if ( $serialids[$i] && $serialids[$i] eq "NEW" ) { + if ( $serialids[$i] && $serialids[$i] eq 'NEW' ) { if ( $serialseqs[$i] ) { #IF newserial was provided a name Then we have to create a newSerial @@ -210,8 +217,8 @@ if ( $op and $op eq 'serialchangestatus' ) { $subscriptionids[0], $serialdatalist[0]->{'biblionumber'}, $status[$i], - format_date_in_iso( $planneddates[$i] ), - format_date_in_iso( $publisheddates[$i] ), + $plan_date, + $pub_date, $notes[$i] ); } @@ -220,8 +227,8 @@ if ( $op and $op eq 'serialchangestatus' ) { ModSerialStatus( $serialids[$i], $serialseqs[$i], - format_date_in_iso( $planneddates[$i] ), - format_date_in_iso( $publisheddates[$i] ), + $plan_date, + $pub_date, $status[$i], $notes[$i] ); @@ -300,14 +307,14 @@ if ( $op and $op eq 'serialchangestatus' ) { $serialdatalist[0]->{'biblionumber'} ) ); - if ( C4::Context->preference("autoBarcode") eq + if ( C4::Context->preference('autoBarcode') eq 'incremental' ) { if ( !$bib_record->field($barcodetagfield) ->subfield($barcodetagsubfield) ) { my $sth_barcode = $dbh->prepare( - "select max(abs(barcode)) from items"); + 'select max(abs(barcode)) from items'); $sth_barcode->execute; my ($newbarcode) = $sth_barcode->fetchrow; @@ -365,8 +372,8 @@ if ( $op and $op eq 'serialchangestatus' ) { } } else { - my $redirect = "serials-collection.pl?"; - $redirect .= join( '&', map { "subscriptionid=" . $_ } sort @subscriptionids );# ID The sort necessary + my $redirect = 'serials-collection.pl?'; + $redirect .= join( '&', map { 'subscriptionid=' . $_ } @subscriptionids ); print $query->redirect($redirect); } } @@ -380,7 +387,7 @@ my $default_bib_view = get_default_view(); $template->param( serialsadditems => $serialdatalist[0]->{'serialsadditems'}, callnumber => $serialdatalist[0]->{'callnumber'}, - bibliotitle => $bibdata->{'title'}, + bibliotitle => $biblio->{'title'}, biblionumber => $serialdatalist[0]->{'biblionumber'}, serialslist => \@serialdatalist, default_bib_view => $default_bib_view, -- 1.7.3.3 From nengard at gmail.com Tue Dec 21 14:24:38 2010 From: nengard at gmail.com (Nicole Engard) Date: Tue, 21 Dec 2010 07:24:38 -0600 Subject: [Koha-patches] [SIGNED-OFF] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name In-Reply-To: <20101221024757.GP27877@rorohiko> References: <20101221024757.GP27877@rorohiko> Message-ID: Hmm, I wasn't warned ... so you can go ahead and remove that. Sorry I missed the note. Nicole On Mon, Dec 20, 2010 at 8:47 PM, Chris Cormack wrote: > * Nicole Engard (nengard at gmail.com) wrote: >> Hotel internet not letting me send this any other way. > > > Did you see Henri-Damien's comment? > > There is an unconditional warn in this patch, that will need to be > removed before it can be accepted. > > If you want I can let the signed-off one stand if you follow it up with > a patch to remove the warn. > Alternatively, if you don't have time, I can do that, just let me know > > Chris > >> _______________________________________________ >> Koha-patches mailing list >> Koha-patches at lists.koha-community.org >> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches >> website : http://www.koha-community.org/ >> git : http://git.koha-community.org/ >> bugs : http://bugs.koha-community.org/ > > > -- > Chris Cormack > Catalyst IT Ltd. > +64 4 803 2238 > PO Box 11-053, Manners St, Wellington 6142, New Zealand > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.10 (GNU/Linux) > > iEYEARECAAYFAk0QFV0ACgkQZgbcHEvgMLP9LACdHvwdiLTYNAJnAoHqpVp9fL6a > WKcAn2jhGMDDVIeGI5HkNPwliyVNTD/x > =xzwN > -----END PGP SIGNATURE----- > > From nengard at gmail.com Tue Dec 21 14:26:06 2010 From: nengard at gmail.com (Nicole Engard) Date: Tue, 21 Dec 2010 07:26:06 -0600 Subject: [Koha-patches] [SIGNED-OFF] [PATCH] Fix for Bug 5526, List of lists should be in alphabetical order by list name In-Reply-To: References: <20101221024757.GP27877@rorohiko> Message-ID: Oh I see what you mean (I didn't read the patch email, just the bug report). I can get to it tonight - or if you want it approved ASAP you're welcome to do so. Sorry about that. Nicole On Tue, Dec 21, 2010 at 7:24 AM, Nicole Engard wrote: > Hmm, I wasn't warned ... so you can go ahead and remove that. ?Sorry I > missed the note. > > Nicole > > On Mon, Dec 20, 2010 at 8:47 PM, Chris Cormack wrote: >> * Nicole Engard (nengard at gmail.com) wrote: >>> Hotel internet not letting me send this any other way. >> >> >> Did you see Henri-Damien's comment? >> >> There is an unconditional warn in this patch, that will need to be >> removed before it can be accepted. >> >> If you want I can let the signed-off one stand if you follow it up with >> a patch to remove the warn. >> Alternatively, if you don't have time, I can do that, just let me know >> >> Chris >> >>> _______________________________________________ >>> Koha-patches mailing list >>> Koha-patches at lists.koha-community.org >>> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches >>> website : http://www.koha-community.org/ >>> git : http://git.koha-community.org/ >>> bugs : http://bugs.koha-community.org/ >> >> >> -- >> Chris Cormack >> Catalyst IT Ltd. >> +64 4 803 2238 >> PO Box 11-053, Manners St, Wellington 6142, New Zealand >> >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1.4.10 (GNU/Linux) >> >> iEYEARECAAYFAk0QFV0ACgkQZgbcHEvgMLP9LACdHvwdiLTYNAJnAoHqpVp9fL6a >> WKcAn2jhGMDDVIeGI5HkNPwliyVNTD/x >> =xzwN >> -----END PGP SIGNATURE----- >> >> > From oleonard at myacpl.org Tue Dec 21 16:54:16 2010 From: oleonard at myacpl.org (Owen Leonard) Date: Tue, 21 Dec 2010 10:54:16 -0500 Subject: [Koha-patches] [PATCH] Fix for bug 5451, can add tags with userlogin turned off Message-ID: <1292946856-633-1-git-send-email-oleonard@myacpl.org> --- .../opac-tmpl/prog/en/includes/doc-head-close.inc | 2 +- koha-tmpl/opac-tmpl/prog/en/includes/usermenu.inc | 4 +- .../opac-tmpl/prog/en/modules/opac-basket.tmpl | 47 +++++----- .../opac-tmpl/prog/en/modules/opac-detail.tmpl | 24 +++-- .../opac-tmpl/prog/en/modules/opac-results.tmpl | 98 ++++++++++---------- .../opac-tmpl/prog/en/modules/opac-shelves.tmpl | 52 +++++------ koha-tmpl/opac-tmpl/prog/en/modules/opac-tags.tmpl | 9 +- 7 files changed, 119 insertions(+), 117 deletions(-) diff --git a/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc b/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc index fe7e7db..beda270 100644 --- a/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc +++ b/koha-tmpl/opac-tmpl/prog/en/includes/doc-head-close.inc @@ -37,7 +37,7 @@ - + @@ -141,13 +137,14 @@ function tagAdded() {

        Select All Clear All | Selected items : Remove - - | Add to a list + + + | Add to a list + + | Place hold + + | Tag - - | Place hold - - | Tag

        CopiesCopies
        @@ -176,23 +200,23 @@ -
        -
        +
        + -
        + + + +
        + +
        @@ -356,7 +355,7 @@ function tagAdded() { &rft.btitle=&rft.date=&rft.tpages=&rft.isbn=&rft.aucorp=&rft.place=&rft.pub=&rft.edition=&rft.series=&rft.genre="> -
        _status" class="tagstatus results_summary" style="display:none">Tag status here.
        +
        _status" class="tagstatus results_summary" style="display:none">Tag status here.
        diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl index c45f0df..81fbfc8 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -4,9 +4,9 @@ - + @@ -226,6 +226,7 @@ YAHOO.util.Event.onContentReady("furtherm", function () { +
        @@ -234,9 +235,14 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
      8. &q="> ()
      9. Tags from this library:
        No tags from this library for this title.
        - - - + +
        + + + + + +
        Add " method="post" action="/cgi-bin/koha/opac-tags.pl" id="tagform"> " id="newtag" maxlength="100" /> @@ -253,6 +259,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
        + + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl index fb47c37..c561f67 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -13,7 +13,7 @@ - - + @@ -141,13 +137,14 @@ function tagAdded() {

        Select All Clear All | Selected items : Remove - - | Add to a list + + + | Add to a list + + | Place hold + + | Tag - - | Place hold - - | Tag

        @@ -356,7 +355,7 @@ function tagAdded() { &rft.btitle=&rft.date=&rft.tpages=&rft.isbn=&rft.aucorp=&rft.place=&rft.pub=&rft.edition=&rft.series=&rft.genre="> -
        _status" class="tagstatus results_summary" style="display:none">Tag status here.
        +
        _status" class="tagstatus results_summary" style="display:none">Tag status here.
        diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl index c45f0df..81fbfc8 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl @@ -4,9 +4,9 @@ - + @@ -226,6 +226,7 @@ YAHOO.util.Event.onContentReady("furtherm", function () { +
        @@ -234,9 +235,14 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
      10. &q="> ()
      11. Tags from this library:
        No tags from this library for this title.
        - - - + +
        + + + + + +
        Add " method="post" action="/cgi-bin/koha/opac-tags.pl" id="tagform"> " id="newtag" maxlength="100" /> @@ -253,6 +259,8 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
        + + diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl index fb47c37..c561f67 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl @@ -13,7 +13,7 @@ - + +