adding seealso feature in MARC searches

This commit is contained in:
tipaul 2004-03-06 20:26:13 +00:00
parent 97e878c514
commit 1498ce1415
4 changed files with 64 additions and 271 deletions

View file

@ -231,7 +231,7 @@ sub MARCgettagslib {
$res->{$tag}->{mandatory}=$mandatory; $res->{$tag}->{mandatory}=$mandatory;
} }
$sth=$dbh->prepare("select tagfield,tagsubfield,$libfield as lib,tab, mandatory, repeatable,authorised_value,thesaurus_category,value_builder,kohafield from marc_subfield_structure order by tagfield,tagsubfield"); $sth=$dbh->prepare("select tagfield,tagsubfield,$libfield as lib,tab, mandatory, repeatable,authorised_value,thesaurus_category,value_builder,kohafield,seealso from marc_subfield_structure order by tagfield,tagsubfield");
$sth->execute; $sth->execute;
my $subfield; my $subfield;
@ -239,7 +239,8 @@ sub MARCgettagslib {
my $thesaurus_category; my $thesaurus_category;
my $value_builder; my $value_builder;
my $kohafield; my $kohafield;
while ( ($tag, $subfield, $lib, $tab, $mandatory, $repeatable,$authorised_value,$thesaurus_category,$value_builder,$kohafield) = $sth->fetchrow) { my $seealso;
while ( ($tag, $subfield, $lib, $tab, $mandatory, $repeatable,$authorised_value,$thesaurus_category,$value_builder,$kohafield,$seealso) = $sth->fetchrow) {
$res->{$tag}->{$subfield}->{lib}=$lib; $res->{$tag}->{$subfield}->{lib}=$lib;
$res->{$tag}->{$subfield}->{tab}=$tab; $res->{$tag}->{$subfield}->{tab}=$tab;
$res->{$tag}->{$subfield}->{mandatory}=$mandatory; $res->{$tag}->{$subfield}->{mandatory}=$mandatory;
@ -248,6 +249,7 @@ sub MARCgettagslib {
$res->{$tag}->{$subfield}->{thesaurus_category}=$thesaurus_category; $res->{$tag}->{$subfield}->{thesaurus_category}=$thesaurus_category;
$res->{$tag}->{$subfield}->{value_builder}=$value_builder; $res->{$tag}->{$subfield}->{value_builder}=$value_builder;
$res->{$tag}->{$subfield}->{kohafield}=$kohafield; $res->{$tag}->{$subfield}->{kohafield}=$kohafield;
$res->{$tag}->{$subfield}->{seealso}=$seealso;
} }
return $res; return $res;
} }
@ -2191,6 +2193,9 @@ Paul POULAIN paul.poulain@free.fr
# $Id$ # $Id$
# $Log$ # $Log$
# Revision 1.81 2004/03/06 20:26:13 tipaul
# adding seealso feature in MARC searches
#
# Revision 1.80 2004/02/12 13:40:56 tipaul # Revision 1.80 2004/02/12 13:40:56 tipaul
# deleting subs duplicated by error # deleting subs duplicated by error
# #

View file

@ -21,6 +21,7 @@ use strict;
require Exporter; require Exporter;
use DBI; use DBI;
use C4::Context; use C4::Context;
use C4::Biblio;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
@ -51,14 +52,25 @@ on what is passed to it, it calls the appropriate search function.
=cut =cut
@ISA = qw(Exporter); @ISA = qw(Exporter);
@EXPORT = qw(&catalogsearch); @EXPORT = qw(&catalogsearch &findseealso);
# make all your functions, whether exported or not; # make all your functions, whether exported or not;
sub findseealso {
my ($dbh, $fields) = @_;
my $tagslib = MARCgettagslib ($dbh,1);
for (my $i=0;$i<=$#{$fields};$i++) {
my ($tag) =substr(@$fields[$i],1,4);
my ($subfield) =substr(@$fields[$i],4,1);
warn "$tag / $subfield =>".$tagslib->{$tag}->{$subfield}->{seealso};
}
}
# marcsearch : search in the MARC biblio table. # marcsearch : search in the MARC biblio table.
# everything is choosen by the user : what to search, the conditions... # everything is choosen by the user : what to search, the conditions...
sub catalogsearch { sub catalogsearch {
my ($dbh, $tags, $subfields, $and_or, $excluding, $operator, $value, $offset,$length) = @_; my ($dbh, $tags, $and_or, $excluding, $operator, $value, $offset,$length) = @_;
warn "=>@$tags / @$and_or, $excluding = $operator / $value";
# build the sql request. She will look like : # build the sql request. She will look like :
# select m1.bibid # select m1.bibid
# from marc_subfield_table as m1, marc_subfield_table as m2 # from marc_subfield_table as m1, marc_subfield_table as m2
@ -67,14 +79,13 @@ sub catalogsearch {
# "Normal" statements # "Normal" statements
my @normal_tags = (); my @normal_tags = ();
my @normal_subfields = (); # my @normal_subfields = ();
my @normal_and_or = (); my @normal_and_or = ();
my @normal_operator = (); my @normal_operator = ();
my @normal_value = (); my @normal_value = ();
# Extracts the NOT statements from the list of statements # Extracts the NOT statements from the list of statements
my @not_tags = (); my @not_tags = ();
my @not_subfields = (); # my @not_subfields = ();
my @not_and_or = (); my @not_and_or = ();
my @not_operator = (); my @not_operator = ();
my @not_value = (); my @not_value = ();
@ -91,7 +102,7 @@ sub catalogsearch {
{ {
unless (C4::Context->stopwords->{uc($word)}) { #it's NOT a stopword => use it. Otherwise, ignore unless (C4::Context->stopwords->{uc($word)}) { #it's NOT a stopword => use it. Otherwise, ignore
push @not_tags, @$tags[$i]; push @not_tags, @$tags[$i];
push @not_subfields, @$subfields[$i]; # push @not_subfields, @$subfields[$i];
push @not_and_or, "or"; # as request is negated, finds "foo" or "bar" if final request is NOT "foo" and "bar" push @not_and_or, "or"; # as request is negated, finds "foo" or "bar" if final request is NOT "foo" and "bar"
push @not_operator, @$operator[$i]; push @not_operator, @$operator[$i];
push @not_value, $word; push @not_value, $word;
@ -101,7 +112,7 @@ sub catalogsearch {
else else
{ {
push @not_tags, @$tags[$i]; push @not_tags, @$tags[$i];
push @not_subfields, @$subfields[$i]; # push @not_subfields, @$subfields[$i];
push @not_and_or, "or"; # as request is negated, finds "foo" or "bar" if final request is NOT "foo" and "bar" push @not_and_or, "or"; # as request is negated, finds "foo" or "bar" if final request is NOT "foo" and "bar"
push @not_operator, @$operator[$i]; push @not_operator, @$operator[$i];
push @not_value, @$value[$i]; push @not_value, @$value[$i];
@ -115,7 +126,7 @@ sub catalogsearch {
{ {
unless (C4::Context->stopwords->{uc($word)}) { #it's NOT a stopword => use it. Otherwise, ignore unless (C4::Context->stopwords->{uc($word)}) { #it's NOT a stopword => use it. Otherwise, ignore
push @normal_tags, @$tags[$i]; push @normal_tags, @$tags[$i];
push @normal_subfields, @$subfields[$i]; # push @normal_subfields, @$subfields[$i];
push @normal_and_or, "and"; # assumes "foo" and "bar" if "foo bar" is entered push @normal_and_or, "and"; # assumes "foo" and "bar" if "foo bar" is entered
push @normal_operator, @$operator[$i]; push @normal_operator, @$operator[$i];
push @normal_value, $word; push @normal_value, $word;
@ -125,7 +136,7 @@ sub catalogsearch {
else else
{ {
push @normal_tags, @$tags[$i]; push @normal_tags, @$tags[$i];
push @normal_subfields, @$subfields[$i]; # push @normal_subfields, @$subfields[$i];
push @normal_and_or, @$and_or[$i]; push @normal_and_or, @$and_or[$i];
push @normal_operator, @$operator[$i]; push @normal_operator, @$operator[$i];
push @normal_value, @$value[$i]; push @normal_value, @$value[$i];
@ -134,18 +145,15 @@ sub catalogsearch {
} }
# Finds the basic results without the NOT requests # Finds the basic results without the NOT requests
my ($sql_tables, $sql_where1, $sql_where2) = create_request(\@normal_tags, \@normal_subfields, \@normal_and_or, \@normal_operator, \@normal_value); my ($sql_tables, $sql_where1, $sql_where2) = create_request(\@normal_tags, \@normal_and_or, \@normal_operator, \@normal_value);
my $sth; my $sth;
# warn "HERE (NORMAL)";
if ($sql_where2) { if ($sql_where2) {
$sth = $dbh->prepare("select distinct m1.bibid from $sql_tables where $sql_where2 and ($sql_where1)"); $sth = $dbh->prepare("select distinct m1.bibid from $sql_tables where $sql_where2 and ($sql_where1)");
# warn("-->select m1.bibid from $sql_tables where $sql_where2 and ($sql_where1)");
} else { } else {
$sth = $dbh->prepare("select distinct m1.bibid from $sql_tables where $sql_where1"); $sth = $dbh->prepare("select distinct m1.bibid from $sql_tables where $sql_where1");
# warn("==>select m1.bibid from $sql_tables where $sql_where1");
} }
warn "===> select distinct m1.bibid from $sql_tables where $sql_where2 and ($sql_where1)";
$sth->execute(); $sth->execute();
my @result = (); my @result = ();
@ -154,7 +162,7 @@ sub catalogsearch {
if( ($sth->rows) && $any_not ) # some results to tune up and some NOT statements if( ($sth->rows) && $any_not ) # some results to tune up and some NOT statements
{ {
($not_sql_tables, $not_sql_where1, $not_sql_where2) = create_request(\@not_tags, \@not_subfields, \@not_and_or, \@not_operator, \@not_value); ($not_sql_tables, $not_sql_where1, $not_sql_where2) = create_request(\@not_tags, \@not_and_or, \@not_operator, \@not_value);
my @tmpresult; my @tmpresult;
@ -162,13 +170,10 @@ sub catalogsearch {
push @tmpresult,$bibid; push @tmpresult,$bibid;
} }
my $sth_not; my $sth_not;
# warn "HERE (NOT)";
if ($not_sql_where2) { if ($not_sql_where2) {
$sth_not = $dbh->prepare("select distinct m1.bibid from $not_sql_tables where $not_sql_where2 and ($not_sql_where1)"); $sth_not = $dbh->prepare("select distinct m1.bibid from $not_sql_tables where $not_sql_where2 and ($not_sql_where1)");
# warn("-->select m1.bibid from $not_sql_tables where $not_sql_where2 and ($not_sql_where1)");
} else { } else {
$sth_not = $dbh->prepare("select distinct m1.bibid from $not_sql_tables where $not_sql_where1"); $sth_not = $dbh->prepare("select distinct m1.bibid from $not_sql_tables where $not_sql_where1");
# warn("==>select m1.bibid from $not_sql_tables where $not_sql_where1");
} }
$sth_not->execute(); $sth_not->execute();
@ -219,7 +224,7 @@ sub catalogsearch {
# Creates the SQL Request # Creates the SQL Request
sub create_request { sub create_request {
my ($tags, $subfields, $and_or, $operator, $value) = @_; my ($tags, $and_or, $operator, $value) = @_;
my $sql_tables; # will contain marc_subfield_table as m1,... my $sql_tables; # will contain marc_subfield_table as m1,...
my $sql_where1; # will contain the "true" where my $sql_where1; # will contain the "true" where
@ -235,21 +240,21 @@ sub create_request {
$sql_tables .= "marc_subfield_table as m$nb_table,"; $sql_tables .= "marc_subfield_table as m$nb_table,";
$sql_where1 .= "(m1.subfieldvalue like '@$value[$i]%'"; $sql_where1 .= "(m1.subfieldvalue like '@$value[$i]%'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m1.tag=@$tags[$i] and m1.subfieldcode='@$subfields[$i]'"; $sql_where1 .=" and m1.tag+m1.subfieldcode in (@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
} elsif (@$operator[$i] eq "contains") { } elsif (@$operator[$i] eq "contains") {
$sql_tables .= "marc_word as m$nb_table,"; $sql_tables .= "marc_word as m$nb_table,";
$sql_where1 .= "(m1.word like '@$value[$i]%'"; $sql_where1 .= "(m1.word like '@$value[$i]%'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m1.tag=@$tags[$i] and m1.subfieldid='@$subfields[$i]'"; $sql_where1 .=" and m1.tag+m1.subfieldid in (@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
} else { } else {
$sql_tables .= "marc_subfield_table as m$nb_table,"; $sql_tables .= "marc_subfield_table as m$nb_table,";
$sql_where1 .= "(m1.subfieldvalue @$operator[$i] '@$value[$i]' "; $sql_where1 .= "(m1.subfieldvalue @$operator[$i] '@$value[$i]' ";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m1.tag=@$tags[$i] and m1.subfieldcode='@$subfields[$i]'"; $sql_where1 .=" and m1.tag+m1.subfieldcode in (@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
} }
@ -259,7 +264,7 @@ sub create_request {
$sql_tables .= "marc_subfield_table as m$nb_table,"; $sql_tables .= "marc_subfield_table as m$nb_table,";
$sql_where1 .= "@$and_or[$i] (m$nb_table.subfieldvalue like '@$value[$i]%'"; $sql_where1 .= "@$and_or[$i] (m$nb_table.subfieldvalue like '@$value[$i]%'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m$nb_table.tag=@$tags[$i] and m$nb_table.subfieldcode='@$subfields[$i]'"; $sql_where1 .=" and m$nb_table.tag+m$nb_table.subfieldcode in (@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
$sql_where2 .= "m1.bibid=m$nb_table.bibid and "; $sql_where2 .= "m1.bibid=m$nb_table.bibid and ";
@ -269,14 +274,14 @@ sub create_request {
$sql_tables .= "marc_word as m$nb_table,"; $sql_tables .= "marc_word as m$nb_table,";
$sql_where1 .= "@$and_or[$i] (m$nb_table.word like '@$value[$i]%'"; $sql_where1 .= "@$and_or[$i] (m$nb_table.word like '@$value[$i]%'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m$nb_table.tag=@$tags[$i] and m$nb_table.subfieldid='@$subfields[$i]'"; $sql_where1 .=" and m$nb_table.tag+m$nb_table.subfieldid in(@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
$sql_where2 .= "m1.bibid=m$nb_table.bibid and "; $sql_where2 .= "m1.bibid=m$nb_table.bibid and ";
} else { } else {
$sql_where1 .= "@$and_or[$i] (m$nb_table.word like '@$value[$i]%'"; $sql_where1 .= "@$and_or[$i] (m$nb_table.word like '@$value[$i]%'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m$nb_table.tag=@$tags[$i] and m$nb_table.subfieldid='@$subfields[$i]'"; $sql_where1 .=" and m$nb_table.tag+m$nb_table.subfieldid in (@$tags[$i])";
} }
$sql_where1.=")"; $sql_where1.=")";
$sql_where2 .= "m1.bibid=m$nb_table.bibid and "; $sql_where2 .= "m1.bibid=m$nb_table.bibid and ";
@ -286,7 +291,7 @@ sub create_request {
$sql_tables .= "marc_subfield_table as m$nb_table,"; $sql_tables .= "marc_subfield_table as m$nb_table,";
$sql_where1 .= "@$and_or[$i] (m$nb_table.subfieldvalue @$operator[$i] '@$value[$i]'"; $sql_where1 .= "@$and_or[$i] (m$nb_table.subfieldvalue @$operator[$i] '@$value[$i]'";
if (@$tags[$i]) { if (@$tags[$i]) {
$sql_where1 .=" and m$nb_table.tag=@$tags[$i] and m$nb_table.subfieldcode='@$subfields[$i]'"; $sql_where1 .=" and m$nb_table.tag+m$nb_table.subfieldcode in (@$tags[$i])";
} }
$sql_where2 .= "m1.bibid=m$nb_table.bibid and "; $sql_where2 .= "m1.bibid=m$nb_table.bibid and ";
$sql_where1.=")"; $sql_where1.=")";

View file

@ -111,15 +111,14 @@ if ($op eq "do_search") {
# builds tag and subfield arrays # builds tag and subfield arrays
my @tags; my @tags;
my @subfields;
foreach my $marc (@marclist) { foreach my $marc (@marclist) {
push @tags, substr($marc,0,3); push @tags, $dbh->quote(substr($marc,0,4));
push @subfields, substr($marc,3,1);
} }
my ($results,$total) = catalogsearch($dbh, \@tags, \@subfields, \@and_or, findseealso($dbh,\@tags);
\@excluding, \@operator, \@value, my ($results,$total) = catalogsearch($dbh, \@tags,\@and_or,
$startfrom*$resultsperpage, $resultsperpage); \@excluding, \@operator, \@value,
$startfrom*$resultsperpage, $resultsperpage);
($template, $loggedinuser, $cookie) ($template, $loggedinuser, $cookie)
= get_template_and_user({template_name => "search.marc/result.tmpl", = get_template_and_user({template_name => "search.marc/result.tmpl",

View file

@ -248,6 +248,7 @@ my %requirefields = (
'type' => 'char(20)', 'type' => 'char(20)',
'options' => 'text' }, 'options' => 'text' },
z3950servers => { 'syntax' => 'char(80)' }, z3950servers => { 'syntax' => 'char(80)' },
marc_subfield_structure =>{'seealso' => 'char(80)'},
); );
my %dropable_table = ( my %dropable_table = (
@ -546,6 +547,24 @@ my %tabledata = (
explanation => 'the gist rate. NOT in %, but in numeric form (0.12 for 12%)', explanation => 'the gist rate. NOT in %, but in numeric form (0.12 for 12%)',
type => 'free' type => 'free'
}, },
{
uniquefieldrequired => 'variable',
variable => 'ldapserver',
forceupdate => { 'explanation' => 1,
'type' => 1 },
value => '',
explanation => 'your ldap server',
type => 'free'
},
{
uniquefieldrequired => 'variable',
variable => 'ldapinfos',
forceupdate => { 'explanation' => 1,
'type' => 1 },
value => '',
explanation => 'ldap info. The ldap will be used in dn : uid=xxx, <ldapinfos>',
type => 'free'
},
], ],
); );
@ -996,241 +1015,6 @@ $sth->finish;
exit; exit;
# $Log$ # $Log$
# Revision 1.72 2004/02/11 08:44:29 tipaul # Revision 1.73 2004/03/06 20:26:13 tipaul
# synch'ing 2.0.0 branch (RC4 tag) and head # adding seealso feature in MARC searches
#
# Revision 1.70.2.2 2004/01/20 09:46:53 tipaul
# new index in z3950results table
#
# Revision 1.70.2.1 2003/12/18 17:22:24 tipaul
# fix for 625
#
# Revision 1.70 2003/12/15 14:40:09 tipaul
# OPAC now show a systempref variable in main/home screen => easier to change for a library.
#
# Revision 1.69 2003/12/04 12:51:41 tipaul
# setting default acquisition to NORMAL, which is better, imho (it's always possible to add a biblio directly through catalogue menu entry)
#
# Revision 1.68 2003/12/03 17:47:14 tipaul
# bugfixes for biblio deletion
#
# Revision 1.67 2003/11/28 10:08:33 tipaul
# * removing too verbose messages.
# * creating a fulltext index on bibliothesaurus
#
# Revision 1.66 2003/11/12 16:14:42 slef
# lengthen cardnumber to 16 and make it unique
#
# Revision 1.65 2003/11/06 15:07:11 tipaul
# adding marc fields in deletedbiblio & deleteditems
#
# Revision 1.64 2003/10/23 20:33:53 rangi
# Making the borrowenumber an auto_increment field
#
# Revision 1.63 2003/10/20 16:13:01 slef
# Omitted annotation added. Closes: 624
#
# Revision 1.62 2003/10/20 16:10:19 slef
# Adding USMARC to LOC z3950 entry
#
# Revision 1.61 2003/10/01 15:03:45 tipaul
# oups... typo fix in z3950random field definition
#
# Revision 1.59 2003/09/30 16:22:05 tipaul
# adding barcode NOT mandatory feature. Just run updatedatabase to get it.
# Note it's impossible to issue an item without barcode, as issue/returns is based on barcode...
#
# Revision 1.58 2003/07/16 04:08:29 acli
# Minor spelling correction
#
# Revision 1.57 2003/07/11 11:50:29 tipaul
# fixing a bug that occured when adding a field into a table.
#
# Revision 1.56 2003/07/07 15:37:20 tipaul
# *** empty log message ***
#
# Revision 1.53 2003/07/07 14:11:16 tipaul
# fixing bug #526 : gst rate is now calculated through systempref gist entry.
# Before this fix :
# * was harcoded to 12,5%
# * some bugs in template parameters prevented the javascript to work.
# * some bugs prevented some calculations to be done properly.
#
# Revision 1.52 2003/06/23 15:54:32 tipaul
# *** empty log message ***
#
# Revision 1.51 2003/06/23 11:27:29 tipaul
# *** empty log message ***
#
# Revision 1.50 2003/06/11 21:28:22 tonnesen
# Added modifications required to the systempreferences table by the new
# systempreferences.pl script. The systempreferences.pl script will not work
# properly until this table is updated.
#
# Revision 1.49 2003/05/26 10:41:53 tipaul
# bugfix : borrowers modifs overwritten by stupid hash entry existing twice.
#
# Revision 1.48 2003/05/20 19:50:45 slef
# Initial fix to bug 456: hardwired paths
#
# Revision 1.47 2003/05/15 12:23:33 tipaul
# adding zipcode and homezipcode into borrowers table (bug #246
#
# Revision 1.46 2003/05/08 12:48:24 wolfpac444
# Added "noissuescharge" parameter
#
# Revision 1.45 2003/05/08 12:26:16 wolfpac444
# Bug fixes
#
# Revision 1.44 2003/05/03 05:39:57 rangi
# Fixing bug 429
# (Wording changes in the explanation fields in system preferences)
#
# Revision 1.43 2003/05/02 23:01:09 rangi
# Adding the textmessaging column to the borrowers table.
# insertdata.pl is expecting this to exist, and hence modifying/adding
# borrowers was broken.
#
# Also ran they script thru perltidy
#
# Revision 1.42 2003/04/29 16:53:25 tipaul
# really proud of this commit :-)
# z3950 search and import seems to works fine.
# Let me explain how :
# * a "search z3950" button is added in the addbiblio template.
# * when clicked, a popup appears and z3950/search.pl is called
# * z3950/search.pl calls addz3950search in the DB
# * the z3950 daemon retrieve the records and stores them in z3950results AND in marc_breeding table.
# * as long as there as searches pending, the popup auto refresh every 2 seconds, and says how many searches are pending.
# * when the user clicks on a z3950 result => the parent popup is called with the requested biblio, and auto-filled
#
# Note :
# * character encoding support : (It's a nightmare...) In the z3950servers table, a "encoding" column has been added. You can put "UNIMARC" or "USMARC" in this column. Depending on this, the char_decode in C4::Biblio.pm replaces marc-char-encode by an iso 8859-1 encoding. Note that in the breeding import this value has been added too, for a better support.
# * the marc_breeding and z3950* tables have been modified : they have an encoding column and the random z3950 number is stored too for convenience => it's the key I use to list only requested biblios in the popup.
#
# Revision 1.41 2003/04/29 08:09:44 tipaul
# z3950 support is coming...
# * adding a syntax column in z3950 table = this column will say wether the z3950 must be called with PerferedRecordsyntax => USMARC or PerferedRecordsyntax => UNIMARC. I tried some french UNIMARC z3950 servers, and some only send USMARC, some only UNIMARC, some can answer with both.
# Note this is a 1st draft. More to follow (today ? I hope).
#
# Revision 1.40 2003/04/22 10:48:27 wolfpac444
# Added "father" column to bibliothesaurus table
#
# Revision 1.39 2003/04/04 08:45:00 tipaul
# last commits before 1.9.1
#
# Revision 1.38 2003/03/18 10:58:19 tipaul
# adding checkdigit parameter that choose how to check the members cardnumber.
# At the moment :
# * none = no checking
# * katipo = checked as before
#
# Revision 1.37 2003/01/30 01:47:48 acli
# Corrected syntax error reported by Benedict
#
# Made the indentation somewhat easier to read; the messiness probably caused
# the original syntax error.
#
# Revision 1.36 2003/01/28 15:13:30 tipaul
# userflag table now created in upgrade script (bugfix #171)
#
# Revision 1.35 2003/01/27 03:12:49 acli
# Reworded the description for "acquisitions" to make it fit on the screen
#
# Added "iso" to dateformat, since dateformat is not yet being used anyway
#
# Revision 1.34 2003/01/23 12:30:02 tipaul
# introducint marcflavour in systempref file : used for character decoding
#
# Revision 1.33 2003/01/21 09:03:27 tipaul
# bugfix (NOTE : this bugs makes installation of the 1.3.3 a little fuzzy. Please fix your DB if you installed 1.3.3)
#
# Revision 1.32 2003/01/16 10:29:45 tipaul
# adding a MARC parameter in systempref ( which is ON or OFF)
# the search will be a marc search if MARC=ON
# and a standard (v1.2) search if MARC=OFF
#
# Revision 1.31 2003/01/06 13:32:43 tipaul
# *** empty log message ***
#
# Revision 1.29 2003/01/06 11:14:11 tipaul
# last bugfixes before 1.3.3 : systempref table correctly filled
#
# Revision 1.28 2002/12/10 13:27:47 tipaul
# bugfixes (davide mails in koha-dev)
#
# Revision 1.27 2002/11/26 15:04:54 tipaul
# road to 1.3.2. Updating db structure during installation
#
# Revision 1.26 2002/11/12 17:42:40 tonnesen
# Merged some features over from rel-1-2, including primary key checking.
#
# Revision 1.25 2002/11/12 16:44:38 tipaul
# road to 1.3.2 :
# * many bugfixes
# * adding value_builder : you can map a subfield in the marc_subfield_structure to a sub stored in "value_builder" directory. In this directory you can create screen used to build values with any method. In this commit is a 1st draft of the builder for 100$a unimarc french subfield, which is composed of 35 digits, with 12 differents values (only the 4th first are provided for instance)
#
# Revision 1.24 2002/10/30 14:00:23 arensb
# (bug fix): Fixed typo.
#
# Revision 1.23 2002/10/25 10:55:46 tipaul
# Road to 1.3.2
# * bugfixes and improvements
# * manage mandatory MARC subfields
# * new table : authorised_values. this table contains categories and authorised values for the category. On MARC management, you can map a subfield to a authorised_values category. If you do this, the subfield can only be filled with a authorised_value of the selected category.
# this submit contains everything needed :
# * updatedatabase
# * admin screens
# * "links" management
# * creation of a html-list if a subfield is mapped to an authorised value.
#
# Note this is different from authorities support, which will come soon.
# The authorised_values is supposed to contains a "small" number of authorised values for a category (less than 50-100). If you enter more authorised values than this, it should be hard to find what you want in a BIG list...
#
# Revision 1.22 2002/10/15 10:08:19 tipaul
# fixme corrected, re-indent and adding the marc_breeding table (see commit of marcimport.pl for more explanations about breeding)
#
# Revision 1.21 2002/10/14 11:48:59 tipaul
# bugfix
#
# Revision 1.20 2002/10/10 04:49:41 arensb
# Added some FIXME comments.
#
# Revision 1.19 2002/10/05 10:17:17 arensb
# Merged with arensb-context branch: use C4::Context->dbh instead of
# &C4Connect, and generally prefer C4::Context over C4::Database.
#
# Revision 1.18.2.2 2002/10/05 06:18:43 arensb
# Added a whole mess of FIXME comments.
#
# Revision 1.18.2.1 2002/10/04 02:46:00 arensb
# Use C4::Connect instead of C4::Database, C4::Connect->dbh instead
# C4Connect.
#
# Revision 1.18 2002/09/24 13:50:55 tipaul
# long WAS the road to 1.3.0...
# coming VERY SOON NOW...
# modifying installer and buildrelease to update the DB
#
# Revision 1.17 2002/09/24 12:57:35 tipaul
# long WAS the road to 1.3.0...
# coming VERY SOON NOW...
# modifying installer and buildrelease to update the DB
#
# Revision 1.16 2002/07/31 02:34:27 finlayt
#
# added "notforloan" field to the itemtypes table.
#
# Revision 1.15 2002/07/20 22:30:06 rangi
# Making sure fix makes it into the main branch as well
# Fix for bug 69
#
# Revision 1.14 2002/07/08 16:20:26 tonnesen
# Added sessionqueries table and password/userid fields to borrowers table
#
# Revision 1.13 2002/07/04 18:05:36 tonnesen
# bug fix
#
# Revision 1.12 2002/07/04 16:41:06 tonnesen
# Merged changes from rel-1-2. Abstracted table structure changes by alan.
# #