Bug 39834: Replace some tabs with spaces

In order to remove false positives with the QA script we should replace some tabs with spaces.

There are more but I wanted to make sure no regression would be
introduced

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
(cherry picked from commit 492e6814a1)
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
This commit is contained in:
Jonathan Druart 2025-05-05 15:33:46 +02:00 committed by Paul Derscheid
parent 975ccc604b
commit 83a96dd270
No known key found for this signature in database
GPG Key ID: C25F9FD44CED595B
37 changed files with 299 additions and 298 deletions

View File

@ -457,90 +457,90 @@ C4::Auth - Authenticates Koha users
=head1 LDAP Configuration
This module is specific to LDAP authentication. It requires Net::LDAP package and one or more
working LDAP servers.
To use it :
* Modify ldapserver element in KOHA_CONF
* Establish field mapping in <mapping> element.
working LDAP servers.
To use it :
* Modify ldapserver element in KOHA_CONF
* Establish field mapping in <mapping> element.
For example, if your user records are stored according to the inetOrgPerson schema, RFC#2798,
the username would match the "uid" field, and the password should match the "userpassword" field.
For example, if your user records are stored according to the inetOrgPerson schema, RFC#2798,
the username would match the "uid" field, and the password should match the "userpassword" field.
Make sure that ALL required fields are populated by your LDAP database (and mapped in KOHA_CONF).
What are the required fields? Well, in mysql you can check the database table "borrowers" like this:
Make sure that ALL required fields are populated by your LDAP database (and mapped in KOHA_CONF).
What are the required fields? Well, in mysql you can check the database table "borrowers" like this:
mysql> show COLUMNS from borrowers;
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| borrowernumber | int(11) | NO | PRI | NULL | auto_increment |
| cardnumber | varchar(16) | YES | UNI | NULL | |
| surname | mediumtext | NO | | NULL | |
| firstname | text | YES | | NULL | |
| title | mediumtext | YES | | NULL | |
| othernames | mediumtext | YES | | NULL | |
| initials | text | YES | | NULL | |
| streetnumber | varchar(10) | YES | | NULL | |
| streettype | varchar(50) | YES | | NULL | |
| address | mediumtext | NO | | NULL | |
| address2 | text | YES | | NULL | |
| city | mediumtext | NO | | NULL | |
| state | mediumtext | YES | | NULL | |
| zipcode | varchar(25) | YES | | NULL | |
| country | text | YES | | NULL | |
| email | mediumtext | YES | | NULL | |
| phone | text | YES | | NULL | |
| mobile | varchar(50) | YES | | NULL | |
| fax | mediumtext | YES | | NULL | |
| emailpro | text | YES | | NULL | |
| phonepro | text | YES | | NULL | |
| B_streetnumber | varchar(10) | YES | | NULL | |
| B_streettype | varchar(50) | YES | | NULL | |
| B_address | varchar(100) | YES | | NULL | |
| B_address2 | text | YES | | NULL | |
| B_city | mediumtext | YES | | NULL | |
| B_state | mediumtext | YES | | NULL | |
| B_zipcode | varchar(25) | YES | | NULL | |
| B_country | text | YES | | NULL | |
| B_email | text | YES | | NULL | |
| B_phone | mediumtext | YES | | NULL | |
| dateofbirth | date | YES | | NULL | |
| branchcode | varchar(10) | NO | MUL | | |
| categorycode | varchar(10) | NO | MUL | | |
| dateenrolled | date | YES | | NULL | |
| dateexpiry | date | YES | | NULL | |
| gonenoaddress | tinyint(1) | YES | | NULL | |
| lost | tinyint(1) | YES | | NULL | |
| debarred | date | YES | | NULL | |
| debarredcomment | varchar(255) | YES | | NULL | |
| contactname | mediumtext | YES | | NULL | |
| contactfirstname | text | YES | | NULL | |
| contacttitle | text | YES | | NULL | |
| borrowernotes | mediumtext | YES | | NULL | |
| relationship | varchar(100) | YES | | NULL | |
| ethnicity | varchar(50) | YES | | NULL | |
| ethnotes | varchar(255) | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| password | varchar(30) | YES | | NULL | |
| flags | int(11) | YES | | NULL | |
| userid | varchar(30) | YES | MUL | NULL | |
| opacnote | mediumtext | YES | | NULL | |
| contactnote | varchar(255) | YES | | NULL | |
| sort1 | varchar(80) | YES | | NULL | |
| sort2 | varchar(80) | YES | | NULL | |
| altcontactfirstname | varchar(255) | YES | | NULL | |
| altcontactsurname | varchar(255) | YES | | NULL | |
| altcontactaddress1 | varchar(255) | YES | | NULL | |
| altcontactaddress2 | varchar(255) | YES | | NULL | |
| altcontactaddress3 | varchar(255) | YES | | NULL | |
| altcontactstate | mediumtext | YES | | NULL | |
| altcontactzipcode | varchar(50) | YES | | NULL | |
| altcontactcountry | text | YES | | NULL | |
| altcontactphone | varchar(50) | YES | | NULL | |
| smsalertnumber | varchar(50) | YES | | NULL | |
| privacy | int(11) | NO | | 1 | |
+---------------------+--------------+------+-----+---------+----------------+
66 rows in set (0.00 sec)
Where Null="NO", the field is required.
mysql> show COLUMNS from borrowers;
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| borrowernumber | int(11) | NO | PRI | NULL | auto_increment |
| cardnumber | varchar(16) | YES | UNI | NULL | |
| surname | mediumtext | NO | | NULL | |
| firstname | text | YES | | NULL | |
| title | mediumtext | YES | | NULL | |
| othernames | mediumtext | YES | | NULL | |
| initials | text | YES | | NULL | |
| streetnumber | varchar(10) | YES | | NULL | |
| streettype | varchar(50) | YES | | NULL | |
| address | mediumtext | NO | | NULL | |
| address2 | text | YES | | NULL | |
| city | mediumtext | NO | | NULL | |
| state | mediumtext | YES | | NULL | |
| zipcode | varchar(25) | YES | | NULL | |
| country | text | YES | | NULL | |
| email | mediumtext | YES | | NULL | |
| phone | text | YES | | NULL | |
| mobile | varchar(50) | YES | | NULL | |
| fax | mediumtext | YES | | NULL | |
| emailpro | text | YES | | NULL | |
| phonepro | text | YES | | NULL | |
| B_streetnumber | varchar(10) | YES | | NULL | |
| B_streettype | varchar(50) | YES | | NULL | |
| B_address | varchar(100) | YES | | NULL | |
| B_address2 | text | YES | | NULL | |
| B_city | mediumtext | YES | | NULL | |
| B_state | mediumtext | YES | | NULL | |
| B_zipcode | varchar(25) | YES | | NULL | |
| B_country | text | YES | | NULL | |
| B_email | text | YES | | NULL | |
| B_phone | mediumtext | YES | | NULL | |
| dateofbirth | date | YES | | NULL | |
| branchcode | varchar(10) | NO | MUL | | |
| categorycode | varchar(10) | NO | MUL | | |
| dateenrolled | date | YES | | NULL | |
| dateexpiry | date | YES | | NULL | |
| gonenoaddress | tinyint(1) | YES | | NULL | |
| lost | tinyint(1) | YES | | NULL | |
| debarred | date | YES | | NULL | |
| debarredcomment | varchar(255) | YES | | NULL | |
| contactname | mediumtext | YES | | NULL | |
| contactfirstname | text | YES | | NULL | |
| contacttitle | text | YES | | NULL | |
| borrowernotes | mediumtext | YES | | NULL | |
| relationship | varchar(100) | YES | | NULL | |
| ethnicity | varchar(50) | YES | | NULL | |
| ethnotes | varchar(255) | YES | | NULL | |
| sex | varchar(1) | YES | | NULL | |
| password | varchar(30) | YES | | NULL | |
| flags | int(11) | YES | | NULL | |
| userid | varchar(30) | YES | MUL | NULL | |
| opacnote | mediumtext | YES | | NULL | |
| contactnote | varchar(255) | YES | | NULL | |
| sort1 | varchar(80) | YES | | NULL | |
| sort2 | varchar(80) | YES | | NULL | |
| altcontactfirstname | varchar(255) | YES | | NULL | |
| altcontactsurname | varchar(255) | YES | | NULL | |
| altcontactaddress1 | varchar(255) | YES | | NULL | |
| altcontactaddress2 | varchar(255) | YES | | NULL | |
| altcontactaddress3 | varchar(255) | YES | | NULL | |
| altcontactstate | mediumtext | YES | | NULL | |
| altcontactzipcode | varchar(50) | YES | | NULL | |
| altcontactcountry | text | YES | | NULL | |
| altcontactphone | varchar(50) | YES | | NULL | |
| smsalertnumber | varchar(50) | YES | | NULL | |
| privacy | int(11) | NO | | 1 | |
+---------------------+--------------+------+-----+---------+----------------+
66 rows in set (0.00 sec)
Where Null="NO", the field is required.
=head1 KOHA_CONF and field mapping
@ -678,11 +678,11 @@ sprintf()
# Using attrs instead of {asn}->attributes
# ========================================
#
# LDAP key: ->{ cn} = ARRAY w/ 3 members.
# LDAP key: ->{ cn}->{ sss} = sss
# LDAP key: ->{ cn}->{ Steve Smith} = Steve Smith
# LDAP key: ->{ cn}->{Steve S. Smith} = Steve S. Smith
# LDAP key: ->{ cn} = ARRAY w/ 3 members.
# LDAP key: ->{ cn}->{ sss} = sss
# LDAP key: ->{ cn}->{ Steve Smith} = Steve Smith
# LDAP key: ->{ cn}->{Steve S. Smith} = Steve S. Smith
#
# LDAP key: ->{ givenname} = ARRAY w/ 1 members.
# LDAP key: ->{ givenname}->{Steve} = Steve
# LDAP key: ->{ givenname} = ARRAY w/ 1 members.
# LDAP key: ->{ givenname}->{Steve} = Steve
#

View File

@ -388,18 +388,18 @@ sub GuessAuthTypeCode {
'185' => { authtypecode => 'FORM_SUBD' },
},
#200 Personal name 700, 701, 702 4-- with embedded 700, 701, 702 600
#200 Personal name 700, 701, 702 4-- with embedded 700, 701, 702 600
# 604 with embedded 700, 701, 702
#210 Corporate or meeting name 710, 711, 712 4-- with embedded 710, 711, 712 601 604 with embedded 710, 711, 712
#215 Territorial or geographic name 710, 711, 712 4-- with embedded 710, 711, 712 601, 607 604 with embedded 710, 711, 712
#216 Trademark 716 [Reserved for future use]
#220 Family name 720, 721, 722 4-- with embedded 720, 721, 722 602 604 with embedded 720, 721, 722
#230 Title 500 4-- with embedded 500 605
#240 Name and title (embedded 200, 210, 215, or 220 and 230) 4-- with embedded 7-- and 500 7-- 604 with embedded 7-- and 500 500
#245 Name and collective title (embedded 200, 210, 215, or 220 and 235) 4-- with embedded 7-- and 501 604 with embedded 7-- and 501 7-- 501
#250 Topical subject 606
#260 Place access 620
#280 Form, genre or physical characteristics 608
#210 Corporate or meeting name 710, 711, 712 4-- with embedded 710, 711, 712 601 604 with embedded 710, 711, 712
#215 Territorial or geographic name 710, 711, 712 4-- with embedded 710, 711, 712 601, 607 604 with embedded 710, 711, 712
#216 Trademark 716 [Reserved for future use]
#220 Family name 720, 721, 722 4-- with embedded 720, 721, 722 602 604 with embedded 720, 721, 722
#230 Title 500 4-- with embedded 500 605
#240 Name and title (embedded 200, 210, 215, or 220 and 230) 4-- with embedded 7-- and 500 7-- 604 with embedded 7-- and 500 500
#245 Name and collective title (embedded 200, 210, 215, or 220 and 235) 4-- with embedded 7-- and 501 604 with embedded 7-- and 501 7-- 501
#250 Topical subject 606
#260 Place access 620
#280 Form, genre or physical characteristics 608
#
#
# Could also be represented with :

View File

@ -245,19 +245,19 @@ The default behavior here in Barcodes should be essentially a more flexible vers
To add a new barcode format, a developer should:
create a module in C4/Barcodes/, like C4/Barcodes/my_new_format.pm;
add to the $types hashref in this file;
add tests under the "t" directory; and
edit autoBarcode syspref to include new type.
create a module in C4/Barcodes/, like C4/Barcodes/my_new_format.pm;
add to the $types hashref in this file;
add tests under the "t" directory; and
edit autoBarcode syspref to include new type.
=head2 Adding a new module
Each new module that needs differing behavior must override these subs:
new_object
initial
db_max
parse
new_object
initial
db_max
parse
Or else the CLASS subs will be used.

View File

@ -620,7 +620,7 @@ sub DelBudgetPeriod {
## get information about the record that will be deleted
my $sth = $dbh->prepare(
qq|
DELETE
DELETE
FROM aqbudgetperiods
WHERE budget_period_id=? |
);

View File

@ -196,7 +196,7 @@ sub NormalizeString {
=head2 MarcToUTF8Record
($marc_record, $converted_from, $errors_arrayref) = MarcToUTF8Record($marc_blob,
$marc_flavour, [, $source_encoding]);
$marc_flavour, [, $source_encoding]);
Given a MARC blob or a C<MARC::Record>, the MARC flavour, and an
optional source encoding, return a C<MARC::Record> that is

View File

@ -4191,10 +4191,11 @@ Missing POD for CheckValidBarcode.
sub CheckValidBarcode {
my ($barcode) = @_;
my $dbh = C4::Context->dbh;
my $query = qq|SELECT count(*)
FROM items
WHERE barcode=?
|;
my $query = q|
SELECT count(*)
FROM items
WHERE barcode=?
|;
my $sth = $dbh->prepare($query);
$sth->execute($barcode);
my $exist = $sth->fetchrow;

View File

@ -46,7 +46,7 @@ sub _initialize {
"https://contentcafe2.btol.com/ContentCafe/Jacket.aspx?UserID=$user&Password=$pass&Options=Y&Return=T&Type=S&Value=";
$agent = "Koha/$VERSION [en] (Linux)";
#"Mozilla/4.76 [en] (Win98; U)", # if for some reason you want to go stealth, you might prefer this
#"Mozilla/4.76 [en] (Win98; U)", # if for some reason you want to go stealth, you might prefer this
}
sub image_url {

View File

@ -731,8 +731,8 @@ sub changeEncoding {
if ( lc($format) =~ /^marc$/o ) {
# if we're converting encoding of an ISO2709 file, we need to roundtrip through XML
# because MARC::Record doesn't directly provide us with an encoding method
# It's definitely less than idea and should be fixed eventually - kados
# because MARC::Record doesn't directly provide us with an encoding method
# It's definitely less than idea and should be fixed eventually - kados
my $marcxml; # temporary storage of MARCXML scalar
( $error, $marcxml ) = marc2marcxml( $record, $to_encoding, $flavour );
unless ($error) {

View File

@ -2241,7 +2241,7 @@ sub HasItems {
my $query = q|
SELECT COUNT(serialitems.itemnumber)
FROM serial
LEFT JOIN serialitems USING(serialid)
LEFT JOIN serialitems USING(serialid)
WHERE subscriptionid=? AND serialitems.serialid IS NOT NULL
|;
my $sth = $dbh->prepare($query);

View File

@ -63,12 +63,12 @@ to take into account.
foreach (@items) {
# These won't format well like this, but here are the fields
print $_->{title};
print $_->{biblionumber};
print $_->{itemnumber};
print $_->{browser_normalized_upc};
print $_->{browser_normalized_oclc};
print $_->{browser_normalized_isbn};
print $_->{title};
print $_->{biblionumber};
print $_->{itemnumber};
print $_->{browser_normalized_upc};
print $_->{browser_normalized_oclc};
print $_->{browser_normalized_isbn};
print $_->{browser_normalized_ean};
}

View File

@ -87,8 +87,8 @@ sub get_filters {
return $sth->fetchall_arrayref( {} );
}
# (SELECT count(*) FROM tags_all ) as tags_all,
# (SELECT count(*) FROM tags_index ) as tags_index,
# (SELECT count(*) FROM tags_all ) as tags_all,
# (SELECT count(*) FROM tags_index ) as tags_index,
=head2 approval_counts
@ -98,10 +98,10 @@ Missing POD for approval_counts.
sub approval_counts {
my $query = "SELECT
(SELECT count(*) FROM tags_approval WHERE approved= 1) as approved_count,
(SELECT count(*) FROM tags_approval WHERE approved=-1) as rejected_count,
(SELECT count(*) FROM tags_approval WHERE approved= 0) as unapproved_count
";
(SELECT count(*) FROM tags_approval WHERE approved= 1) as approved_count,
(SELECT count(*) FROM tags_approval WHERE approved=-1) as rejected_count,
(SELECT count(*) FROM tags_approval WHERE approved= 0) as unapproved_count
";
my $sth = C4::Context->dbh->prepare($query);
$sth->execute;
my $result = $sth->fetchrow_hashref();
@ -261,11 +261,11 @@ sub get_tags { # i.e., from tags_index
}
}
my $query = "
SELECT tags_index.term as term,biblionumber,weight,weight_total
FROM tags_index
LEFT JOIN tags_approval
ON tags_index.term = tags_approval.term
" . ( $wheres || '' ) . $order . $limit;
SELECT tags_index.term as term,biblionumber,weight,weight_total
FROM tags_index
LEFT JOIN tags_approval
ON tags_index.term = tags_approval.term
" . ( $wheres || '' ) . $order . $limit;
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
$sth->execute(@exe_args);
@ -332,15 +332,15 @@ sub get_approval_rows { # i.e., from tags_approval
}
}
my $query = "
SELECT tags_approval.term AS term,
tags_approval.approved AS approved,
tags_approval.date_approved AS date_approved,
tags_approval.approved_by AS approved_by,
tags_approval.weight_total AS weight_total,
CONCAT(borrowers.surname, ', ', borrowers.firstname) AS approved_by_name
FROM tags_approval
LEFT JOIN borrowers
ON tags_approval.approved_by = borrowers.borrowernumber ";
SELECT tags_approval.term AS term,
tags_approval.approved AS approved,
tags_approval.date_approved AS date_approved,
tags_approval.approved_by AS approved_by,
tags_approval.weight_total AS weight_total,
CONCAT(borrowers.surname, ', ', borrowers.firstname) AS approved_by_name
FROM tags_approval
LEFT JOIN borrowers
ON tags_approval.approved_by = borrowers.borrowernumber ";
$query .= ( $wheres || '' ) . $order . $limit;
my $sth = C4::Context->dbh->prepare($query);
if (@exe_args) {
@ -599,21 +599,21 @@ sub decrement_weight {
sub _set_weight_total {
my $sth = C4::Context->dbh->prepare( "
UPDATE tags_approval
SET weight_total=" . (shift) . "
WHERE term=?
" ); # note: CANNOT use "?" for weight_total (see the args above).
UPDATE tags_approval
SET weight_total=" . (shift) . "
WHERE term=?
" ); # note: CANNOT use "?" for weight_total (see the args above).
$sth->execute(shift); # just the term
}
sub _set_weight {
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare( "
UPDATE tags_index
SET weight=" . (shift) . "
WHERE term=?
AND biblionumber=?
" );
UPDATE tags_index
SET weight=" . (shift) . "
WHERE term=?
AND biblionumber=?
" );
$sth->execute(@_);
}
@ -627,8 +627,8 @@ sub add_tag { # biblionumber,term,[borrowernumber,approvernumber]
my $rows =
get_tag_rows( { biblionumber => $biblionumber, borrowernumber => $borrowernumber, term => $term, limit => 1 } );
my $query = "INSERT INTO tags_all
(borrowernumber,biblionumber,term,date_created)
VALUES (?,?,?,NOW())";
(borrowernumber,biblionumber,term,date_created)
VALUES (?,?,?,NOW())";
if ( scalar @$rows ) {
return;
@ -726,10 +726,10 @@ instructions.
=head2 Table Structure
The tables used by tags are:
tags_all
tags_index
tags_approval
tags_blacklist
tags_all
tags_index
tags_approval
tags_blacklist
Your first thought may be that this looks a little complicated. It is, but only because
it has to be. I'll try to explain.
@ -737,21 +737,21 @@ it has to be. I'll try to explain.
tags_all - This table would be all we really need if we didn't care about moderation or
performance or tags disappearing when borrowers are removed. Too bad, we do. Otherwise
though, it contains all the relevant info about a given tag:
tag_id - unique id number for it
borrowernumber - user that entered it
biblionumber - book record it is attached to
term - tag "term" itself
language - perhaps used later to influence weighting
date_created - date and time it was created
tag_id - unique id number for it
borrowernumber - user that entered it
biblionumber - book record it is attached to
term - tag "term" itself
language - perhaps used later to influence weighting
date_created - date and time it was created
tags_approval - Since we need to provide moderation, this table is used to track it. If no
external dictionary is used, this table is the sole reference for approval and rejection.
With an external dictionary, it tracks pending terms and past whitelist/blacklist actions.
This could be called an "approved terms" table. See above regarding the External Dictionary.
term - tag "term" itself
approved - Negative, 0 or positive if tag is rejected, pending or approved.
date_approved - date of last action
approved_by - staffer performing the last action
term - tag "term" itself
approved - Negative, 0 or positive if tag is rejected, pending or approved.
date_approved - date of last action
approved_by - staffer performing the last action
weight_total - total occurrence of term in any biblio by any users
tags_index - This table is for performance, because by far the most common operation will
@ -759,9 +759,9 @@ be fetching tags for a list of search results. We will have a set of biblios, a
want ONLY their approved tags and overall weighting. While we could implement a query that
would traverse tags_all filtered against tags_approval, the performance implications of
trying to calculate that and the "weight" (number of times a tag appears) on the fly are drastic.
term - approved term as it appears in tags_approval
biblionumber - book record it is attached to
weight - number of times tag applied by any user
term - approved term as it appears in tags_approval
biblionumber - book record it is attached to
weight - number of times tag applied by any user
tags_blacklist - A set of regular expression filters. Unsurprisingly, these should be perl-
compatible (PCRE) for your version of perl. Since this is a blacklist, a term will be

View File

@ -71,7 +71,7 @@ Makefile.PL - Koha packager and installer
=head2 CLEANING UP
make clean
make clean
=head2 CLI PARAMETERS

View File

@ -26,17 +26,17 @@ script to administer the budget periods table
ALGO :
this script use an $op to know what to do.
if $op is empty or none of the above values,
- the default screen is build (with all records, or filtered datas).
- the user can clic on add, modify or delete record.
- the default screen is build (with all records, or filtered datas).
- the user can clic on add, modify or delete record.
if $op=add_form
- if primkey exists, this is a modification,so we read the $primkey record
- builds the add/modify form
- if primkey exists, this is a modification,so we read the $primkey record
- builds the add/modify form
if $op=add_validate
- the user has just send datas, so we create/modify the record
- the user has just send datas, so we create/modify the record
if $op=delete_confirm
- we show the record having primkey=$primkey and ask for deletion validation form
- we show the record having primkey=$primkey and ask for deletion validation form
if $op=delete_confirmed
- we delete the record having primkey=$primkey
- we delete the record having primkey=$primkey
if $op=duplicate_form
- displays the duplication of budget period form (allowing specification of dates)
if $op=duplicate_budget

View File

@ -84,7 +84,6 @@ foreach my $field (@fields) {
# if tag <10, there's no subfield, use the "@" trick
if ( $field->tag() < 10 ) {
# next if ($tagslib->{$field->tag()}->{'@'}->{tab} ne $tabloop);
next if ( $tagslib->{ $field->tag() }->{'@'}->{hidden} );
my %subfield_data;
$subfield_data{marc_lib} = $tagslib->{ $field->tag() }->{'@'}->{lib};
@ -99,7 +98,6 @@ foreach my $field (@fields) {
for my $i ( 0 .. $#subf ) {
$subf[$i][0] = "@" unless defined $subf[$i][0];
# next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne $tabloop);
next if ( $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{hidden} );
my %subfield_data;
$subfield_data{marc_lib} = $tagslib->{ $field->tag() }->{ $subf[$i][0] }->{lib};

View File

@ -19,8 +19,6 @@
=head1 cataloguing:addbooks.pl
TODO
=cut
use Modern::Perl;

View File

@ -120,7 +120,7 @@ while ( my $library = $libraries->next ) {
push( @transferloop, \%getransf );
}
# If we have a return of reservloop we put it in the branchloop sequence
# If we have a return of reservloop we put it in the branchloop sequence
$branchloop{'reserve'} = \@transferloop;
}
push( @branchesloop, \%branchloop ) if %branchloop;

View File

@ -164,7 +164,7 @@ sub cancel {
my ( $messages, $nextreservinfo ) = ModReserveCancelAll( $itemnumber, $borrowernumber );
# if the document is not in his homebranch location and there is not reservation after, we transfer it
# if the document is not in his homebranch location and there is not reservation after, we transfer it
if ( $transfer && !$nextreservinfo && !$item->itemlost ) {
ModItemTransfer( $itemnumber, $fbr, $tbr, 'CancelReserve' );
}

View File

@ -164,10 +164,11 @@
</li>
[% END %]
<!-- // Removing freight input until shipping can be proplerly handled .
<li>
<label for="freight">Shipping:</label>
<input type="text" size="20" id="freight" name="freight" />
</li> -->
<li>
<label for="freight">Shipping:</label>
<input type="text" size="20" id="freight" name="freight" />
</li>
-->
<li>
<label for="shipmentdate">Shipment date: </label>
<input type="text" id="shipmentdate" name="shipmentdate" maxlength="10" size="10" value="[% shipmentdate_today | html %]" class="flatpickr" />

View File

@ -340,10 +340,11 @@
<fieldset class="action">
[% IF op != 'cud-saveitem' %]
<input type="submit" name="phony_submit" value="phony_submit" id="phony_submit" style="display:none;" onclick="return false;" />
<!-- Note : We use here a false submit button because we have several submit buttons and we don't want the user to believe they validated the adding of multiple items
when pressing the enter key, while in fact it is the first submit button that is validated, in our case the "add (single) item" button.
It is a bit tricky, but necessary in the sake of UI correctness.
-->
<!-- Note:
We use here a false submit button because we have several submit buttons and we do not want the user to believe they validated the adding of multiple items
when pressing the enter key, while in fact it is the first submit button that is validated, in our case the "add (single) item" button.
It is a bit tricky, but necessary in the sake of UI correctness.
-->
<span id="addsingle">
<input type="submit" name="add_submit" value="Add item" onclick="return Check(this.form)" />
<input type="submit" name="add_duplicate_submit" value="Add and duplicate" onclick="return Check(this.form)" />

View File

@ -175,10 +175,12 @@
<option value="15">15</option>
<option value="20">20</option>
<option value="">No limit</option>
<!-- <option value ="25">25</option>
<option value ="40">40</option>
<option value ="50">50</option>
<option value ="100">100</option>-->
<!--
<option value ="25">25</option>
<option value ="40">40</option>
<option value ="50">50</option>
<option value ="100">100</option>
-->
</select></li
>
<li

View File

@ -213,10 +213,10 @@
<label class="inline" for="basename">Named:</label>
<input type="text" name="basename" id="basename" value="Export" />
<!--
<label for="MIME" class="inline">Into an application:</label>
[% CGIextChoice | html %]
[% CGIsepChoice | html %]
-->
<label for="MIME" class="inline">Into an application:</label>
[% CGIextChoice | html %]
[% CGIsepChoice | html %]
-->
<input type="hidden" name="report_name" value="[% report_name | html %]" />
</li>
</ol>

View File

@ -77,7 +77,7 @@ if ( $issues == 1 ) {
# Inserting missing issue
my $insert =
"INSERT INTO statistics (datetime, branch, value, type, other, itemnumber, itemtype, borrowernumber)
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
$substh = $dbh->prepare($insert);
my $item = Koha::Items->find( $hashref->{'itemnumber'} );
my $itemtype = $item->effective_itemtype;
@ -119,7 +119,7 @@ if ( $issues == 1 ) {
# Inserting missing renewals
my $insert =
"INSERT INTO statistics (datetime, branch, value, type, other, itemnumber, itemtype, borrowernumber)
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
$substh = $dbh->prepare($insert);
my $item = Koha::Items->find( $hashref->{'itemnumber'} );
my $itemtype = $item->effective_itemtype;
@ -164,7 +164,7 @@ if ( $returns == 1 ) {
# Inserting missing issue
my $insert =
"INSERT INTO statistics (datetime, branch, value, type, other, itemnumber, itemtype, borrowernumber)
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
VALUES(?, ?, ?, ?, ?, ?, ?, ?)";
$substh = $dbh->prepare($insert);
my $item = Koha::Items->find( $hashref->{'itemnumber'} );
my $itemtype = $item->effective_itemtype;

View File

@ -47,15 +47,15 @@ sub SYNTAXERROR_P () { 'syntaxerror-p' }
sub FILENAME () { 'input' }
#sub HANDLE () {'handle'}
#sub HANDLE () {'handle'}
#sub READAHEAD () {'readahead'}
#sub READAHEAD () {'readahead'}
sub LINENUM_START () { 'lc_0' }
sub LINENUM () { 'lc' }
sub CDATA_MODE_P () { 'cdata-mode-p' }
sub CDATA_CLOSE () { 'cdata-close' }
#sub PCDATA_MODE_P () {'pcdata-mode-p'} # additional submode for CDATA
#sub PCDATA_MODE_P () {'pcdata-mode-p'} # additional submode for CDATA
sub JS_MODE_P () { 'js-mode-p' } # cdata-mode-p must also be true
sub ALLOW_CFORMAT_P () { 'allow-cformat-p' }

View File

@ -204,7 +204,7 @@ EOF
$fmt =~ s/^%/%$n\$/;
if ( $type == C4::TmplTokenType::DIRECTIVE ) {
# $type = "Template::Toolkit Directive";
# $type = "Template::Toolkit Directive";
$type = $param->string =~ /\[%(.*?)%\]/is ? $1 : 'ERROR';
my $name = $param->string =~ /\bname=(["']?)([^\s"']+)\1/is ? $2 : undef;
printf $OUTPUT "#. %s: %s\n", $fmt,
@ -473,7 +473,7 @@ The JavaScript must actually define a _ function
so that the code remains correct JavaScript.
A suitable definition of such a function can be
function _(s) { return s } // dummy function for gettext
function _(s) { return s } // dummy function for gettext
=head1 SEE ALSO

View File

@ -45,24 +45,24 @@ my $cgi = CGI->new;
my @services = (
'Describe', # Not part of ILS-DI, online API doc
# Level 1: Basic Discovery Interfaces
# 'HarvestBibliographicRecords', # OAI-PMH
# 'HarvestExpandedRecords', # OAI-PMH
# Level 1: Basic Discovery Interfaces
# 'HarvestBibliographicRecords', # OAI-PMH
# 'HarvestExpandedRecords', # OAI-PMH
'GetAvailability', # FIXME Add bibliographic level
# 'GoToBibliographicRequestPage' # I don't understant this one
# Level 2: Elementary OPAC supplement
# 'HarvestAuthorityRecords', # OAI-PMH
# 'HarvestHoldingsRecords', # OAI-PMH
# 'GoToBibliographicRequestPage' # I don't understant this one
# Level 2: Elementary OPAC supplement
# 'HarvestAuthorityRecords', # OAI-PMH
# 'HarvestHoldingsRecords', # OAI-PMH
'GetRecords', # Note that we can use OAI-PMH for this too
# 'Search', # TODO
# 'Scan', # TODO
# 'Search', # TODO
# 'Scan', # TODO
'GetAuthorityRecords',
# 'OutputRewritablePage', # I don't understant this one
# 'OutputIntermediateFormat', # I don't understant this one
# Level 3: Elementary OPAC alternative
# 'OutputRewritablePage', # I don't understant this one
# 'OutputIntermediateFormat', # I don't understant this one
# Level 3: Elementary OPAC alternative
'LookupPatron',
'AuthenticatePatron',
'GetPatronInfo',
@ -73,11 +73,11 @@ my @services = (
'HoldItem', # FIXME Add dates support
'CancelHold',
# 'RecallItem', # Not supported by Koha
# 'CancelRecall', # Not supported by Koha
# Level 4: Robust/domain specific discovery platforms
# 'SearchCourseReserves', # TODO
# 'Explain' # TODO
# 'RecallItem', # Not supported by Koha
# 'CancelRecall', # Not supported by Koha
# Level 4: Robust/domain specific discovery platforms
# 'SearchCourseReserves', # TODO
# 'Explain' # TODO
);
# List of required arguments

View File

@ -358,15 +358,15 @@ __END__
=head1 EXAMPLE AJAX POST PARAMETERS
CGISESSID 7c6288263107beb320f70f78fd767f56
newtag396 fire,+<a+href="foobar.html">foobar</a>,+<img+src="foo.jpg"+/>
CGISESSID 7c6288263107beb320f70f78fd767f56
newtag396 fire,+<a+href="foobar.html">foobar</a>,+<img+src="foo.jpg"+/>
So this request is trying to add 3 tags to biblio #396. The CGISESSID is the same as that the browser would
typically communicate using cookies. If it is valid, the server will split the value of "newtag396" and
process the components for addition. In this case the intended tags are:
fire
<a+href="foobar.html">foobar</a>
<img src="foo.jpg" />
fire
<a+href="foobar.html">foobar</a>
<img src="foo.jpg" />
The first tag is acceptable. The second will be scrubbed of markup, resulting in the tag "foobar".
The third tag is all markup, and will be rejected.
@ -374,13 +374,13 @@ The third tag is all markup, and will be rejected.
=head1 EXAMPLE AJAX JSON response
response = {
added: 2,
deleted: 0,
errors: 2,
alerts: [
KOHA.Tags.tag_message.scrubbed("foobar"),
KOHA.Tags.tag_message.scrubbed_all_bad("1"),
],
added: 2,
deleted: 0,
errors: 2,
alerts: [
KOHA.Tags.tag_message.scrubbed("foobar"),
KOHA.Tags.tag_message.scrubbed_all_bad("1"),
],
};
=cut

View File

@ -282,10 +282,10 @@ sub calculate {
my %patrons = ();
# DATA STRUCTURE is going to look like this:
# (2253=> {name=>"John Doe",
# allcols=>{MAIN=>12, MEDIA_LIB=>3}
# },
# )
# (2253=> {name=>"John Doe",
# allcols=>{MAIN=>12, MEDIA_LIB=>3}
# },
# )
while ( my @data = $dbcalc->fetchrow ) {
my ( $row, $rank, $id, $col ) = @data;
$col = "zzEMPTY" if ( !defined($col) );

View File

@ -164,7 +164,7 @@ sub calculate {
my @colfilter;
$colfilter[0] = @$filters[0] if ( $column =~ /category/ );
# $colfilter[0] = @$filters[11] if ($column =~ /sort2/ ) ;
# $colfilter[0] = @$filters[11] if ($column =~ /sort2/ ) ;
#warn "filtre col ".$colfilter[0]." ".$colfilter[1];
# loop cols.
@ -189,25 +189,25 @@ sub calculate {
while ( my ($celvalue) = $sth2->fetchrow ) {
my %cell;
# my %ft;
# warn "coltitle :".$celvalue;
# my %ft;
# warn "coltitle :".$celvalue;
$cell{coltitle} = $celvalue;
# $ft{totalcol} = 0;
# $ft{totalcol} = 0;
push @loopcol, \%cell;
}
# warn "fin des titres colonnes";
# warn "fin des titres colonnes";
}
my $i = 0;
# my @totalcol;
# my @totalcol;
#Initialization of cell values.....
my @table;
# warn "init table";
# warn "init table";
if ($line) {
for ( my $i = 1 ; $i <= $line ; $i++ ) {
foreach my $col (@loopcol) {
@ -262,7 +262,7 @@ sub calculate {
my $dbcalc = $dbh->prepare($strcalc);
$dbcalc->execute(@query_args);
# warn "filling table";
# warn "filling table";
my $previous_col;
$i = 1;
while ( my @data = $dbcalc->fetchrow ) {
@ -271,7 +271,7 @@ sub calculate {
$i = 1 if ( ($previous_col) and not( $col eq $previous_col ) );
$table[$i]->{$col} = $row;
# warn " $i $col $row";
# warn " $i $col $row";
$i++;
$previous_col = $col;
}
@ -311,7 +311,7 @@ sub calculate {
$globalline{looprow} = \@looprow;
$globalline{loopcol} = \@loopcol;
# # the foot (totals by borrower type)
# # the foot (totals by borrower type)
$globalline{loopfooter} = \@loopfooter;
$globalline{total} = $grantotal;
$globalline{line} = $line;

View File

@ -322,7 +322,7 @@ sub calculate {
#Initialization of cell values.....
my %table;
# warn "init table";
# warn "init table";
foreach my $row (@loopline) {
foreach my $col (@loopcol) {
my $rowtitle = $row->{rowtitle} // '';
@ -415,7 +415,7 @@ sub calculate {
my $emptycol;
while ( my ( $row, $col, $value ) = $dbcalc->fetchrow ) {
# warn "filling table $row / $col / $value ";
# warn "filling table $row / $col / $value ";
$emptycol = 1 if ( !defined($col) );
$col = "zzEMPTY" if ( !defined($col) );
$row = "zzEMPTY" if ( !defined($row) );
@ -456,10 +456,10 @@ sub calculate {
$total += $table{$rowtitle}->{$coltitle} || 0;
# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle};
# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle};
}
# warn "summ for column ".$col->{coltitle}." = ".$total;
# warn "summ for column ".$col->{coltitle}." = ".$total;
push @loopfooter, { 'totalcol' => $total };
}
@ -470,7 +470,7 @@ sub calculate {
$globalline{looprow} = \@looprow;
$globalline{loopcol} = \@loopcol;
# # the foot (totals by borrower type)
# # the foot (totals by borrower type)
$globalline{loopfooter} = \@loopfooter;
$globalline{total} = $grantotal;
$globalline{line} = ($line_attribute_type) ? $line_attribute_type : $line;

View File

@ -282,22 +282,22 @@ sub calculate {
push @loopcol, \%cell;
}
# warn "fin des titres colonnes";
# warn "fin des titres colonnes";
}
my $i = 0;
# my @totalcol;
# my @totalcol;
my $highlighted = -1;
#Initialization of cell values.....
my @table;
# warn "init table";
# warn "init table";
for ( my $i = 1 ; $i <= $line ; $i++ ) {
foreach my $col (@loopcol) {
# warn " init table : $row->{rowtitle} / $col->{coltitle} ";
# warn " init table : $row->{rowtitle} / $col->{coltitle} ";
$table[$i]->{ ( $col->{coltitle} ) ? $col->{coltitle} : "total" }->{'name'} = 0;
}
}
@ -421,7 +421,7 @@ sub calculate {
$globalline{looprow} = \@looprow;
$globalline{loopcol} = \@loopcol;
# # the foot (totals by borrower type)
# # the foot (totals by borrower type)
$globalline{total} = $grantotal;
$globalline{line} = $line;
$globalline{column} = $column;

View File

@ -129,7 +129,7 @@ sub calculate {
LEFT JOIN old_issues USING (itemnumber)
WHERE issues.itemnumber IS NULL
AND old_issues.itemnumber IS NULL
";
";
if ( $filters->[0] ) {
$filters->[0] =~ s/\*/%/g;
push @exe_args, $filters->[0];

View File

@ -207,10 +207,10 @@ sub calculate {
my @linefilter;
# warn "filtres ".@filters[0];
# warn "filtres ".@filters[1];
# warn "filtres ".@filters[2];
# warn "filtres ".@filters[3];
# warn "filtres ".@filters[0];
# warn "filtres ".@filters[1];
# warn "filtres ".@filters[2];
# warn "filtres ".@filters[3];
$line = "old_issues." . $line if ( $line =~ /branchcode/ ) or ( $line =~ /timestamp/ );
if ( $line =~ /itemtype/ ) { $line = $itype; }
$linefilter[0] = @$filters[0] if ( $line =~ /timestamp/ );
@ -378,13 +378,13 @@ sub calculate {
my %cell;
my %ft;
# warn "coltitle :".$celvalue;
# warn "coltitle :".$celvalue;
$cell{coltitle} = $celvalue;
$ft{totalcol} = 0;
push @loopcol, \%cell;
}
# warn "fin des titres colonnes";
# warn "fin des titres colonnes";
my $i = 0;
my $highlighted = -1;
@ -394,11 +394,11 @@ sub calculate {
my %wgttable;
my %cnttable;
# warn "init table";
# warn "init table";
foreach my $row (@loopline) {
foreach my $col (@loopcol) {
# warn " init table : $row->{rowtitle} / $col->{coltitle} ";
# warn " init table : $row->{rowtitle} / $col->{coltitle} ";
$table{ $row->{rowtitle} }->{ $col->{coltitle} } = 0;
}
$table{ $row->{rowtitle} }->{totalrow} = 0;
@ -440,7 +440,7 @@ sub calculate {
my $dbcalc = $dbh->prepare($strcalc);
$dbcalc->execute;
# warn "filling table";
# warn "filling table";
my $issues_count = 0;
my $loanlength;
my $emptycol;
@ -448,7 +448,7 @@ sub calculate {
while ( my @data = $dbcalc->fetchrow ) {
my ( $row, $col, $issuedate, $returndate, $weight ) = @data;
# warn "filling table $row / $col / $issuedate / $returndate /$weight";
# warn "filling table $row / $col / $issuedate / $returndate /$weight";
$emptycol = 1 if ( !defined($col) );
$col = "zzEMPTY" if ( !defined($col) );
$row = "zzEMPTY" if ( !defined($row) );
@ -457,11 +457,11 @@ sub calculate {
# and seconds between the two
$loanlength = Delta_Days( split( /-/, $issuedate ), split( /-/, $returndate ) );
# warn "512 Same row and col DateCalc returns :$loanlength with return ". $returndate ."issue ". $issuedate ."weight : ". $weight;
# warn "513 row :".$row." column :".$col;
# warn "512 Same row and col DateCalc returns :$loanlength with return ". $returndate ."issue ". $issuedate ."weight : ". $weight;
# warn "513 row :".$row." column :".$col;
$table{$row}->{$col} += $weight * $loanlength;
# $table{$row}->{totalrow}+=$weight*$loanlength;
# $table{$row}->{totalrow}+=$weight*$loanlength;
$cnttable{$row}->{$col} = 1;
$wgttable{$row}->{$col} += $weight;
}
@ -523,7 +523,7 @@ sub calculate {
$highlighted = -$highlighted;
}
#
# # warn "footer processing";
# # warn "footer processing";
foreach my $col (@loopcol) {
my $total = 0;
my $nbrow = 0;
@ -536,10 +536,10 @@ sub calculate {
$nbrow += $cnttable{ ( $row->{rowtitle} eq "NULL" ) ? "zzEMPTY" : $row->{rowtitle} }
->{ ( $col->{coltitle} eq "NULL" ) ? "zzEMPTY" : $col->{coltitle} };
# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle};
# warn "value added ".$table{$row->{rowtitle}}->{$col->{coltitle}}. "for line ".$row->{rowtitle};
}
# warn "summ for column ".$col->{coltitle}." = ".$total;
# warn "summ for column ".$col->{coltitle}." = ".$total;
$total = $total / $nbrow if ($nbrow);
push @loopfooter, { 'totalcol' => ($total) ? sprintf( "%.2f", $total ) : 0 };
@ -552,7 +552,7 @@ sub calculate {
$globalline{looprow} = \@looprow;
$globalline{loopcol} = \@loopcol;
# # the foot (totals by borrower type)
# # the foot (totals by borrower type)
$globalline{loopfooter} = \@loopfooter;
$globalline{total} = $grantotal;
$globalline{line} = $line;

View File

@ -217,7 +217,7 @@ sub calculate {
$strcalc .= "
FROM (select * from reserves union select * from old_reserves) reserves
LEFT JOIN borrowers USING (borrowernumber)
";
";
$strcalc .= "LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber "
if ( $linefield =~ /^biblio\./ or $colfield =~ /^biblio\./ or any { $_ =~ /biblio/ } keys %$filters_hashref );
$strcalc .= "LEFT JOIN items ON reserves.itemnumber=items.itemnumber "
@ -279,7 +279,7 @@ sub calculate {
push @loopcell, {
value => ( $$data{$row}{$col}{calculation} or "" ),
# url_complement=>($urlbase=~/&amp;$/?$urlbase."&amp;":$urlbase)."filter_$linefield=$row&amp;filter_$colfield=$col"
# url_complement=>($urlbase=~/&amp;$/?$urlbase."&amp;":$urlbase)."filter_$linefield=$row&amp;filter_$colfield=$col"
};
}
push @looprow, {
@ -308,7 +308,7 @@ sub calculate {
$globalline{looprow} = \@looprow;
$globalline{loopcol} = \@loopcol;
# # the foot (totals by borrower type)
# # the foot (totals by borrower type)
$globalline{loopfooter} = \@loopfooter;
$globalline{total} = $grantotal;
$globalline{line} = $linefield;

View File

@ -143,7 +143,7 @@ if ($do_it) {
LEFT JOIN aqbooksellers ON (subscription.aqbooksellerid=aqbooksellers.id )
GROUP BY aqbooksellerid, aqbooksellers.name
ORDER BY aqbooksellers.name ASC
"
"
);
$sth->execute();

View File

@ -17,7 +17,7 @@
#
# Current maintainer MJR http://mjr.towers.org.uk/
#
# 2007/11/12 Added DB_PORT and changed other keywords to reflect multi-dbms support. -fbcit
# 2007/11/12 Added DB_PORT and changed other keywords to reflect multi-dbms support. -fbcit
use Modern::Perl;
use Sys::Hostname;
@ -29,7 +29,7 @@ rewrite-config.PL - helper for the Koha packager and installer
=head1 SYNOPSIS
perl rewrite-config.PL configurationfile
perl rewrite-config.PL configurationfile
=head1 DESCRIPTION
@ -52,8 +52,8 @@ WEBSERVER_HOST, WEBSERVER_IP, WEBSERVER_PORT, WEBSERVER_PORT_LIBRARIAN, ZEBRA_PA
To override the guessed hostname and email address, run:
WEBSERVER_HOST=mysecrethostname.com.invalid \
WEBMASTER_EMAIL=webmaster@publichost.com make install
WEBSERVER_HOST=mysecrethostname.com.invalid \
WEBMASTER_EMAIL=webmaster@publichost.com make install
Note that if WEBSERVER_HOST does not resolve to an IP address, you will
also need to override WEBSERVER_IP.

View File

@ -98,8 +98,8 @@ ok(
ok( !$error, 'no errors in conversion' );
#FIXME This test fails
# $marcxml =~ s/\n//g;
# $marcxml =~ s/v\/ s/v\/s/g; # FIXME: bug in new_from_xml_record!!
#\t$marcxml =~ s/\n//g;
#\t$marcxml =~ s/v\/ s/v\/s/g; # FIXME: bug in new_from_xml_record!!
#is ($marcxml,$marcxml_utf8, 'record matches antitype');
ok(
@ -109,8 +109,8 @@ ok(
ok( !$error, 'no errors in conversion' );
#FIXME This test fails
# $marcxml =~ s/\n//g;
# $marcxml =~ s/v\/ s/v\/s/g;
#\t$marcxml =~ s/\n//g;
#\t$marcxml =~ s/v\/ s/v\/s/g;
#is ($marcxml,$marcxml_utf8, 'record matches antitype');
print "\n2. checking binary MARC21 records with combining characters to MARCXML\n";

View File

@ -22,18 +22,18 @@
ALGO :
this script use an $op to know what to do.
if $op is empty or none of the values listed below,
- the default screen is built (with all or filtered (if search string is set) records).
- the user can click on add, modify or delete record.
- the default screen is built (with all or filtered (if search string is set) records).
- the user can click on add, modify or delete record.
- filtering is done on the code field
if $op=add_form
- if primary key (module + code) exists, this is a modification,so we read the required record
- builds the add/modify form
- if primary key (module + code) exists, this is a modification,so we read the required record
- builds the add/modify form
if $op=add_validate
- the user has just send data, so we create/modify the record
- the user has just send data, so we create/modify the record
if $op=delete_form
- we show the record selected and ask for confirmation
- we show the record selected and ask for confirmation
if $op=delete_confirm
- we delete the designated record
- we delete the designated record
=cut