[Koha-patches] [PATCH] [REBASED] 6094 Fixing ModAuthority problems
Marcel de Rooy
M.de.Rooy at rijksmuseum.nl
Thu Aug 4 09:19:28 CEST 2011
Pref MergeAuthoritiesOnUpdate does not exist; should be dontmerge (AuthoritiesMarc.pm).
Instead of folder modified_authorities, now introducing a table for this purpose: need_merge_authorities. This eliminates several permissions and security issues. This change applies to AuthoritiesMarc.pm and merge_authority.pl.
POD lines added for ModAuthority. Deprecated parameter $merge removed.
Test this patch by applying the db revision first from the second patch.
August 4, 2011: Rebased.
---
C4/AuthoritiesMarc.pm | 35 ++++++++++++++++--------------
misc/migration_tools/merge_authority.pl | 18 +++++----------
2 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index 0164c8d..d58798d 100644
--- a/C4/AuthoritiesMarc.pm
+++ b/C4/AuthoritiesMarc.pm
@@ -734,30 +734,33 @@ sub DelAuthority {
$sth->execute($authid);
}
+=head2 ModAuthority
+
+ $authid= &ModAuthority($authid,$record,$authtypecode)
+
+Modifies authority record, optionally updates attached biblios.
+
+=cut
+
sub ModAuthority {
- my ($authid,$record,$authtypecode,$merge)=@_;
+ my ($authid,$record,$authtypecode)=@_; # deprecated $merge parameter removed
+
my $dbh=C4::Context->dbh;
#Now rewrite the $record to table with an add
my $oldrecord=GetAuthority($authid);
$authid=AddAuthority($record,$authid,$authtypecode);
-### If a library thinks that updating all biblios is a long process and wishes to leave that to a cron job to use merge_authotities.p
-### they should have a system preference "dontmerge=1" otherwise by default biblios will be updated
-### the $merge flag is now depreceated and will be removed at code cleaning
- if (C4::Context->preference('MergeAuthoritiesOnUpdate') ){
+ # If a library thinks that updating all biblios is a long process and wishes
+ # to leave that to a cron job, use misc/migration_tools/merge_authority.pl.
+ # In that case set system preference "dontmerge" to 1. Otherwise biblios will
+ # be updated.
+ unless(C4::Context->preference('dontmerge') eq '1'){
&merge($authid,$oldrecord,$authid,$record);
} else {
- # save the file in tmp/modified_authorities
- my $cgidir = C4::Context->intranetdir ."/cgi-bin";
- unless (opendir(DIR,"$cgidir")) {
- $cgidir = C4::Context->intranetdir."/";
- closedir(DIR);
- }
-
- my $filename = $cgidir."/tmp/modified_authorities/$authid.authid";
- open AUTH, "> $filename";
- print AUTH $authid;
- close AUTH;
+ # save a record in need_merge_authorities table
+ my $sqlinsert="INSERT INTO need_merge_authorities (authid, done) ".
+ "VALUES (?,?)";
+ $dbh->do($sqlinsert,undef,($authid,0));
}
logaction( "AUTHORITIES", "MODIFY", $authid, "BEFORE=>" . $oldrecord->as_formatted ) if C4::Context->preference("AuthoritiesLog");
return $authid;
diff --git a/misc/migration_tools/merge_authority.pl b/misc/migration_tools/merge_authority.pl
index b99591f..8e09594 100755
--- a/misc/migration_tools/merge_authority.pl
+++ b/misc/migration_tools/merge_authority.pl
@@ -75,23 +75,17 @@ unless ($noconfirm || $batch) {
my $starttime = gettimeofday;
print "Merging\n" unless $noconfirm;
if ($batch) {
- my @authlist;
- my $cgidir = C4::Context->intranetdir ."/cgi-bin";
- unless (opendir(DIR, "$cgidir/tmp/modified_authorities")) {
- $cgidir = C4::Context->intranetdir;
- opendir(DIR, "$cgidir/tmp/modified_authorities") || die "can't opendir $cgidir/tmp/modified_authorities: $!";
- }
- while (my $authid = readdir(DIR)) {
- if ($authid =~ /\.authid$/) {
- $authid =~ s/\.authid$//;
+ my $authref;
+ $dbh->do("update need_merge_authorities set done=2 where done=0"); #temporary status 2 means: selected for merge
+ $authref=$dbh->selectall_arrayref("select distinct authid from need_merge_authorities where done=2");
+ foreach(@$authref) {
+ my $authid=$_->[0];
print "managing $authid\n" if $verbose;
my $MARCauth = GetAuthority($authid) ;
next unless ($MARCauth);
merge($authid,$MARCauth,$authid,$MARCauth) if ($MARCauth);
- unlink $cgidir.'/tmp/modified_authorities/'.$authid.'.authid';
- }
}
- closedir DIR;
+ $dbh->do("update need_merge_authorities set done=1 where done=2"); #DONE
} else {
my $MARCfrom = GetAuthority($mergefrom);
my $MARCto = GetAuthority($mergeto);
--
1.6.0.6
More information about the Koha-patches
mailing list