X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=misc%2Fcronjobs%2Fbuild_browser_and_cloud.pl;h=d3ead43c3096c2fd68fa986f28fcba63603df75e;hb=bd73c9f9ce8d161a1ed0f2e1205e5c0c8eecb0ae;hp=dea5318f2ed81f81169d8e109b82f846b5b95587;hpb=8ee881174fbb75e983e9ea09f70b2fcecee396ab;p=koha.git diff --git a/misc/cronjobs/build_browser_and_cloud.pl b/misc/cronjobs/build_browser_and_cloud.pl index dea5318f2e..d3ead43c30 100755 --- a/misc/cronjobs/build_browser_and_cloud.pl +++ b/misc/cronjobs/build_browser_and_cloud.pl @@ -2,6 +2,13 @@ # 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 + use FindBin; + eval { require "$FindBin::Bin/../kohalib.pl" }; +} use C4::Koha; use C4::Context; @@ -34,10 +41,10 @@ if ($version || (!$confirm)) { -t TTT to define the MARC fields/subfield to use to fill the tag cloud. If not defined, the cloud table won't be filled. example : - export PERL5LIB=/path/to/koha;export KOHA_CONF=/etc/koha.xml;./build_browser_and_cloud.pl -b -f 676a -t 606 -c + export PERL5LIB=/path/to/koha;export KOHA_CONF=/etc/koha/koha-conf.xml;./build_browser_and_cloud.pl -b -f 676a -t 606 -c EOF ; -die; +exit; } ################################## @@ -50,7 +57,7 @@ $max_digits=3 unless $max_digits; $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; my $dbh = C4::Context->dbh; @@ -73,6 +80,7 @@ my %browser_result; # the result hash for the cloud table my %cloud_result; + while ((my ($biblionumber)= $sth->fetchrow)) { $i++; print "." unless $batch; @@ -86,7 +94,7 @@ while ((my ($biblionumber)= $sth->fetchrow)) { 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; @@ -97,15 +105,19 @@ while ((my ($biblionumber)= $sth->fetchrow)) { } } #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; } } @@ -115,16 +127,13 @@ while ((my ($biblionumber)= $sth->fetchrow)) { # 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') eq 'fr' && $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(); } - $classification = dewey_french(); - # calculate end node... - #use Data::Dumper; - #warn "==>".Dumper(%browser_result); + foreach (keys %browser_result) { my $father = substr($_,0,-1); $browser_result{$father}->{notendnode}=1; @@ -132,16 +141,24 @@ if ($browser_tag) { $dbh->do("truncate browser"); my $sth = $dbh->prepare("insert into browser (level,classification,description,number,endnode) values (?,?,?,?,?)"); foreach (keys %browser_result) { - $sth->execute(length($_),$_,$classification->{$_}?$classification->{$_}:"classification $_",$browser_result{$_}->{value},$browser_result{$_}->{notendnode}?0:1); + $sth->execute(length($_),$_,$classification->{$_}?$classification->{$_}:"classification $_",$browser_result{$_}->{value},$browser_result{$_}->{notendnode}?0:1) if $browser_result{$_}->{value}; } } # 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");