# small script that builds the tag cloud
use strict;
+#use warnings; FIXME - Bug 2505
BEGIN {
# find Koha's Perl modules
# test carefully before changing this
eval { require "$FindBin::Bin/../kohalib.pl" };
}
+use Koha::Script -cron;
use C4::Koha;
use C4::Context;
-use C4::Biblio;
+use C4::Biblio qw( GetMarcBiblio );
use Date::Calc;
use Time::HiRes qw(gettimeofday);
use ZOOM;
use MARC::File::USMARC;
use Getopt::Long;
+use C4::Log;
+
my ( $input_marc_file, $number) = ('',0);
-my ($version, $confirm,$test_parameter,$field,$batch,$max_digits,$cloud_tag);
+my ($version, $confirm,$field,$batch,$max_digits,$cloud_tag);
GetOptions(
'c' => \$confirm,
'h' => \$version,
$field =~ /(\d\d\d)(.?)/;
my $browser_tag = $1;
my $browser_subfield = $2;
-warn "browser : $browser_tag / $browser_subfield";
+warn "browser : $browser_tag / $browser_subfield" unless $batch;
die "no cloud or browser field/subfield defined : nothing to do !" unless $browser_tag or $cloud_tag;
+cronlogaction();
+
my $dbh = C4::Context->dbh;
my $i=0;
# the result hash for the cloud table
my %cloud_result;
+
while ((my ($biblionumber)= $sth->fetchrow)) {
$i++;
print "." unless $batch;
#now, parse the record, extract the item fields, and store them in somewhere else.
my $Koharecord;
eval{
- $Koharecord = GetMarcBiblio($biblionumber);
+ $Koharecord = GetMarcBiblio({ biblionumber => $biblionumber });
};
if($@){
warn 'pb when getting biblio '.$i.' : '.$@;
next;
}
# deal with BROWSER part
- if ($browser_tag) {
+ if ($browser_tag && $Koharecord) {
foreach my $browsed_field ($Koharecord->subfield($browser_tag,$browser_subfield)) {
$browsed_field =~ s/\.//g;
my $upto = length($browsed_field)<=$max_digits?length($browsed_field):$max_digits;
}
}
#deal with CLOUD part
- if ($cloud_tag) {
- foreach ($Koharecord->field($cloud_tag)) {
- my $line;
- foreach ($_->subfields()) {
- next if $_->[0]=~ /\d/;
- $line .= $_->[1].' ';
+ if ($cloud_tag && $Koharecord) {
+ if($Koharecord->field($cloud_tag)){
+ foreach ($Koharecord->field($cloud_tag)) {
+ my $line;
+ foreach ($_->subfields()) {
+ next if $_->[0]=~ /\d/;
+ $line .= $_->[1].' ';
+ }
+ $line =~ s/ $//;
+ $cloud_result{$line}++;
}
- $line =~ s/ $//;
- $cloud_result{$line}++;
+ }else{
+ print "!" unless $batch;
}
}
# fills the browser table
if ($browser_tag) {
- print "inserting datas in browser table\n";
+ print "inserting datas in browser table\n" unless $batch;
# read existing classification table is possible
my $classification;
- if (C4::Context->preference('opaclanguages') =~ m/^fr/i && $browser_tag eq '676' & $browser_subfield eq 'a') {
+ if (C4::Context->preference('OPACLanguages') =~ m/^fr/i && $browser_tag eq '676' & $browser_subfield eq 'a') {
$classification = dewey_french();
}
}
# fills the cloud (tags) table
+my $sthver = $dbh->prepare("SELECT weight FROM tags WHERE entry = ? ");
+my $sthins = $dbh->prepare("insert into tags (entry,weight) values (?,?)");
+my $sthup = $dbh->prepare("UPDATE tags SET weight = ? WHERE entry = ?");
if ($cloud_tag) {
$dbh->do("truncate tags");
- my $sth = $dbh->prepare("insert into tags (entry,weight) values (?,?)");
- foreach (keys %cloud_result) {
- $sth->execute($_,$cloud_result{$_});
+ foreach my $key (keys %cloud_result) {
+ $sthver->execute($key);
+ if(my $row = $sthver->fetchrow_hashref){
+ my $count = $row->{weight} + $cloud_result{$key};
+ $sthup->execute($count, $key);
+ }else{
+ $sthins->execute($key,$cloud_result{$key});
+ }
}
}
# $dbh->do("unlock tables");