remove incomplete bib bulk editing code

Per discussion I had with Henri, removing experimental
bulk editing from the staff search results code, as
feature is incomplete and can be dangerous if
one tries to use it on a large search result
set.

Signed-off-by: Galen Charlton <galen.charlton@liblime.com>
This commit is contained in:
Galen Charlton 2009-04-06 09:45:56 -05:00
parent 502a8cb7e2
commit 2e08f626f5
6 changed files with 0 additions and 233 deletions

View file

@ -52,7 +52,6 @@ BEGIN {
&GetAuthorisedValueCategories
&GetKohaAuthorisedValues
&GetAuthValCode
&GetManagedTagSubfields
&GetNormalizedUPC
&GetNormalizedISBN
&GetNormalizedEAN
@ -1069,49 +1068,6 @@ sub GetKohaAuthorisedValues {
}
}
=head2 GetManagedTagSubfields
=over 4
$res = GetManagedTagSubfields();
=back
Returns a reference to a big hash of hash, with the Marc structure fro the given frameworkcode
NOTE: This function is used only by the (incomplete) bulk editing feature. Since
that feature currently does not deal with items and biblioitems changes
correctly, those tags are specifically excluded from the list prepared
by this function.
For future reference, if a bulk item editing feature is implemented at some point, it
needs some design thought -- for example, circulation status fields should not
be changed willy-nilly.
=cut
sub GetManagedTagSubfields{
my $dbh=C4::Context->dbh;
my $rq=$dbh->prepare(qq|
SELECT
DISTINCT CONCAT( marc_subfield_structure.tagfield, tagsubfield ) AS tagsubfield,
marc_subfield_structure.liblibrarian as subfielddesc,
marc_tag_structure.liblibrarian as tagdesc
FROM marc_subfield_structure
LEFT JOIN marc_tag_structure
ON marc_tag_structure.tagfield = marc_subfield_structure.tagfield
AND marc_tag_structure.frameworkcode = marc_subfield_structure.frameworkcode
WHERE marc_subfield_structure.tab>=0
AND marc_tag_structure.tagfield NOT IN (SELECT tagfield FROM marc_subfield_structure WHERE kohafield like 'items.%')
AND marc_tag_structure.tagfield NOT IN (SELECT tagfield FROM marc_subfield_structure WHERE kohafield = 'biblioitems.itemtype')
AND marc_subfield_structure.kohafield <> 'biblio.biblionumber'
AND marc_subfield_structure.kohafield <> 'biblioitems.biblioitemnumber'
ORDER BY marc_subfield_structure.tagfield, tagsubfield|);
$rq->execute;
my $data=$rq->fetchall_arrayref({});
return $data;
}
=head2 display_marc_indicators
=over 4

View file

@ -61,7 +61,6 @@ This module provides searching functions for Koha's bibliographic databases
&getRecords
&buildQuery
&NZgetRecords
&ModBiblios
);
# make all your functions, whether exported or not;
@ -2139,130 +2138,6 @@ sub NZorder {
}
}
=head2 ModBiblios
($countchanged,$listunchanged) = ModBiblios($listbiblios, $tagsubfield,$initvalue,$targetvalue,$test);
this function changes all the values $initvalue in subfield $tag$subfield in any record in $listbiblios
test parameter if set donot perform change to records in database.
=over 2
=item C<input arg:>
* $listbiblios is an array ref to marcrecords to be changed
* $tagsubfield is the reference of the subfield to change.
* $initvalue is the value to search the record for
* $targetvalue is the value to set the subfield to
* $test is to be set only not to perform changes in database.
=item C<Output arg:>
* $countchanged counts all the changes performed.
* $listunchanged contains the list of all the biblionumbers of records unchanged.
=item C<usage in the script:>
=back
my ($countchanged, $listunchanged) = EditBiblios($results->{RECORD}, $tagsubfield,$initvalue,$targetvalue);;
#If one wants to display unchanged records, you should get biblios foreach @$listunchanged
$template->param(countchanged => $countchanged, loopunchanged=>$listunchanged);
=cut
sub ModBiblios {
my ( $listbiblios, $tagsubfield, $initvalue, $targetvalue, $test ) = @_;
my $countmatched;
my @unmatched;
my ( $tag, $subfield ) = ( $1, $2 )
if ( $tagsubfield =~ /^(\d{1,3})([a-z0-9A-Z@])?$/ );
if ( ( length($tag) < 3 ) && $subfield =~ /0-9/ ) {
$tag = $tag . $subfield;
undef $subfield;
}
my ( $bntag, $bnsubf ) = GetMarcFromKohaField('biblio.biblionumber', '');
my ( $itemtag, $itemsubf ) = GetMarcFromKohaField('items.itemnumber', '');
if ($tag eq $itemtag) {
# do not allow the embedded item tag to be
# edited from here
warn "Attempting to edit item tag via C4::Search::ModBiblios -- not allowed";
return (0, []);
}
foreach my $usmarc (@$listbiblios) {
my $record;
$record = eval { MARC::Record->new_from_usmarc($usmarc) };
my $biblionumber;
if ($@) {
# usmarc is not a valid usmarc May be a biblionumber
# FIXME - sorry, please let's figure out whether
# this function is to be passed a list of
# record numbers or a list of MARC::Record
# objects. The former is probably better
# because the MARC records supplied by Zebra
# may be not current.
$record = GetMarcBiblio($usmarc);
$biblionumber = $usmarc;
}
else {
if ( $bntag >= 010 ) {
$biblionumber = $record->subfield( $bntag, $bnsubf );
}
else {
$biblionumber = $record->field($bntag)->data;
}
}
#GetBiblionumber is to be written.
#Could be replaced by TransformMarcToKoha (But Would be longer)
if ( $record->field($tag) ) {
my $modify = 0;
foreach my $field ( $record->field($tag) ) {
if ($subfield) {
if (
$field->delete_subfield(
'code' => $subfield,
'match' => qr($initvalue)
)
)
{
$countmatched++;
$modify = 1;
$field->update( $subfield, $targetvalue )
if ($targetvalue);
}
}
else {
if ( $tag >= 010 ) {
if ( $field->delete_field($field) ) {
$countmatched++;
$modify = 1;
}
}
else {
$field->data = $targetvalue
if ( $field->data =~ qr($initvalue) );
}
}
}
# warn $record->as_formatted;
if ($modify) {
ModBiblio( $record, $biblionumber,
GetFrameworkCode($biblionumber) )
unless ($test);
}
else {
push @unmatched, $biblionumber;
}
}
else {
push @unmatched, $biblionumber;
}
}
return ( $countmatched, \@unmatched );
}
END { } # module clean-up code here (global destructor)
1;

View file

@ -481,37 +481,6 @@ if ($@ || $error) {
exit;
}
# FIXME: This belongs in tools/ not in the primary search results page
my $op=$cgi->param("operation");
if ($op eq "bulkedit"){
my ($countchanged,$listunchanged)=
ModBiblios($results_hashref->{'biblioserver'}->{"RECORDS"},
$params->{"tagsubfield"},
$params->{"inputvalue"},
$params->{"targetvalue"},
$params->{"test"}
);
$template->param(bulkeditresults=>1,
tagsubfield=>$params->{"tagsubfield"},
inputvalue=>$params->{"inputvalue"},
targetvalue=>$params->{"targetvalue"},
countchanged=>$countchanged,
countunchanged=>scalar(@$listunchanged),
listunchanged=>$listunchanged);
if (C4::Context->userenv->{'flags'}==1 ||(C4::Context->userenv->{'flags'} & ( 2**9 ) )){
#Edit Catalogue Permissions
my $editable_subfields = GetManagedTagSubfields();
# change '--' to '&mdash;' to avoid escaping issues
for (my $i = 0; $i <= $#{$editable_subfields}; $i++) {
$editable_subfields->[$i]->{subfielddesc} =~ s/--/&mdash;/g;
$editable_subfields->[$i]->{tagdesc} =~ s/--/&mdash;/g;
}
$template->param(bulkedit => 1);
$template->param(tagsubfields=>$editable_subfields);
}
}
# At this point, each server has given us a result set
# now we build that set for template display
my @sup_results_array;

View file

@ -194,37 +194,6 @@ $(window).load(function() {
<!-- /TMPL_IF -->
<!-- FACETS END -->
<!-- /TMPL_IF --> <!-- NoZebra -->
<!-- BULKEDIT START -->
<!--TMPL_IF Name="bulkedit"-->
<dt id="hbulkedit" onclick="var Elt=document.getElementById('parambulkedit');if (Elt.style.display!='block'){Elt.style.display='block';} else {Elt.style.display='none';}">
Bulk edit
</dt>
<dd id="parambulkedit" style="display:none;">
<form name="bulkedit" action="search.pl">
<input type="hidden" name="q" value="<!-- TMPL_VAR NAME="searchdesc" -->" />
<input type="hidden" name="operation" value="bulkedit" />
Search for Value :<input type="text" name="inputvalue" value="" /><br />
Subfield <select name="tagsubfield">
<!--TMPL_LOOP Name="tagsubfields"-->
<option value="<!--TMPL_VAR Name="tagsubfield"-->"> <!--TMPL_VAR Name="tagsubfield"-->
<!-- --<TMPL_VAR Name="tagdesc">--<TMPL_VAR Name="subfielddesc">-->
</option>
<!--/TMPL_LOOP -->
</select><br />
Change to : <input type="text" name="targetvalue" value="" /><br />
Test only : <input type="checkbox" name="test" value="1" /><br />
<input type="Submit" name="Edit" value="Edit" />
</form>
</dd>
<!-- TMPL_IF NAME="bulkeditresults" -->
<dd>
tagsubfield : <!-- TMPL_VAR NAME="countchanged" --> Change <!-- TMPL_VAR NAME="countchanged" --> To <!-- TMPL_VAR NAME="countchanged" --><br />
<!-- TMPL_VAR NAME="countchanged" --> biblios changed <br />
<!--TMPL_VAR Name="countunchanged"--> biblios unchanged<br />
</dd>
<!-- /TMPL_IF -->
<!--/TMPL_IF-->
<!-- BULKEDIT END -->
</dl>
</div>
<!-- ######### -->

View file

@ -41,7 +41,6 @@ sub methods : Test( 1 ) {
GetAuthorisedValues
GetAuthorisedValueCategories
GetKohaAuthorisedValues
GetManagedTagSubfields
display_marc_indicators
);

View file

@ -29,7 +29,6 @@ sub methods : Test( 1 ) {
NZoperatorOR
NZoperatorNOT
NZorder
ModBiblios
);
can_ok( $self->testing_class, @methods );