Pref MergeAuthoritiesOnUpdate does not exist; should be dontmerge.
In: C4/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.

Commented the line destroying the Zconn object in merge(). This made the second 
call to merge crash.

July 25, 2011: Adjusted. Test this patch by applying the db revision first from 
the corresponding dbrev patch.
---
 C4/AuthoritiesMarc.pm                   |   37 ++++++++++++++++--------------
 misc/migration_tools/merge_authority.pl |   19 ++++++----------
 2 files changed, 27 insertions(+), 29 deletions(-)

diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index fa2ef00..a5a5a6e 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;
@@ -1323,7 +1326,7 @@ sub merge {
             push @reccache, $marcdata;
             $z++;
         }
-        $oConnection->destroy();    
+        #$oConnection->destroy(); #see Bugzilla 6094 Uncommenting this line 
makes that the second subsequent call of merge crashes on the Zconn call line 
little before this line
     }
     #warn scalar(@reccache)." biblios to update";
     # Get All candidate Tags for the change 
diff --git a/misc/migration_tools/merge_authority.pl 
b/misc/migration_tools/merge_authority.pl
index b99591f..9ee0da7 100755
--- a/misc/migration_tools/merge_authority.pl
+++ b/misc/migration_tools/merge_authority.pl
@@ -44,6 +44,7 @@ SAMPLE :
 ./merge_authority.pl -f 2457 -t 531
 
 Before doing anything, the script will show both authorities and ask for 
confirmation. Of course, you can merge only 2 authorities of the same kind.
+Make sure that if this script runs in batch mode, the process has sufficient 
permissions for removing files from /var/tmp/modified_authorities.
 EOF
 ;#
 die;
@@ -75,23 +76,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

_______________________________________________
Koha-patches mailing list
Koha-patches@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/

Reply via email to