Merge remote branch 'kc/new/bug_5957' into kcmaster
[koha.git] / cataloguing / value_builder / unimarc_field_4XX.pl
index cb40921..84a6208 100755 (executable)
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-# $Id$
 
 use strict;
-require Exporter;
+#use warnings; FIXME - Bug 2505
+
 use CGI;
 use C4::Output;
 use C4::Context;
@@ -32,6 +32,7 @@ use C4::Biblio;
 use C4::Koha;
 use MARC::Record;
 use C4::Branch;    # GetBranches
+use C4::ItemType;
 
 sub plugin_parameters {
     my ( $dbh, $record, $tagslib, $i, $tabloop ) = @_;
@@ -53,7 +54,7 @@ sub plugin_javascript {
 
         function Clic$function_name(i) {
             defaultvalue=document.getElementById(\"$field_number\").value;
-            window.open(\"/cgi-bin/koha/cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_4XX.pl&index=$field_number&result=\"+defaultvalue,\"unimarc field 4\"+i+\"\",'width=900,height=700,toolbar=false,scrollbars=yes');
+            window.open(\"/cgi-bin/koha/cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_4XX.pl&index=\" + i + \"&result=\"+defaultvalue,\"unimarc_field_4\"+i+\"\",'width=900,height=700,toolbar=false,scrollbars=yes');
 
         }
     </script>
@@ -64,11 +65,11 @@ sub plugin_javascript {
 
 # sub plugin
 #
-# input arg : 
+# input arg :
 # -- op could be equals to
-# * fillinput : 
-# * do_search : 
-# 
+# * fillinput :
+# * do_search :
+#
 
 sub plugin {
     my ($input)   = @_;
@@ -83,7 +84,7 @@ sub plugin {
     my $searchdesc;
 
     if ( $op eq "fillinput" ) {
-        my $bibnum = $query->param('bibnum');
+        my $biblionumber = $query->param('biblionumber');
         my $index  = $query->param('index');
         my $marcrecord;
 
@@ -95,15 +96,15 @@ sub plugin {
                 query           => $query,
                 type            => "intranet",
                 authnotrequired => 0,
-                flagsrequired   => { editcatalogue => 1 },
+                flagsrequired   => { editcatalogue => '*' },
                 debug           => 1,
             }
         );
 
         #get marc record
-        $marcrecord = GetMarcBiblio($bibnum);
+        $marcrecord = GetMarcBiblio($biblionumber);
 
-        my $subfield_value_9 = $bibnum;
+        my $subfield_value_9 = $biblionumber;
         my $subfield_value_0;
         $subfield_value_0 = $marcrecord->field('001')->data
           if $marcrecord->field('001');
@@ -290,35 +291,51 @@ sub plugin {
         if   ( $marcrecord->field('010') ) {
             $subfield_value_y = $marcrecord->field('010')->subfield("a");
         }
+        # escape the 's
+        $subfield_value_9 =~ s/'/\\'/g;
+        $subfield_value_0 =~ s/'/\\'/g;
+        $subfield_value_a =~ s/'/\\'/g;
+        $subfield_value_c =~ s/'/\\'/g;
+        $subfield_value_d =~ s/'/\\'/g;
+        $subfield_value_e =~ s/'/\\'/g;
+        $subfield_value_h =~ s/'/\\'/g;
+        $subfield_value_i =~ s/'/\\'/g;
+        $subfield_value_p =~ s/'/\\'/g;
+        $subfield_value_t =~ s/'/\\'/g;
+        $subfield_value_u =~ s/'/\\'/g;
+        $subfield_value_v =~ s/'/\\'/g;
+        $subfield_value_x =~ s/'/\\'/g;
+        $subfield_value_y =~ s/'/\\'/g;
         $template->param(
             fillinput        => 1,
             index            => $query->param('index') . "",
-            biblionumber     => $bibnum ? $bibnum : "",
-            subfield_value_9 => $subfield_value_9,
-            subfield_value_0 => $subfield_value_0,
-            subfield_value_a => $subfield_value_a,
-            subfield_value_c => $subfield_value_c,
-            subfield_value_d => $subfield_value_d,
-            subfield_value_e => $subfield_value_e,
-            subfield_value_h => $subfield_value_h,
-            subfield_value_i => $subfield_value_i,
-            subfield_value_p => $subfield_value_p,
-            subfield_value_t => $subfield_value_t,
-            subfield_value_u => $subfield_value_u,
-            subfield_value_v => $subfield_value_v,
-            subfield_value_x => $subfield_value_x,
-            subfield_value_y => $subfield_value_y,
+            biblionumber     => $biblionumber ? $biblionumber : "",
+            subfield_value_9 => "$subfield_value_9",
+            subfield_value_0 => "$subfield_value_0",
+            subfield_value_a => "$subfield_value_a",
+            subfield_value_c => "$subfield_value_c",
+            subfield_value_d => "$subfield_value_d",
+            subfield_value_e => "$subfield_value_e",
+            subfield_value_h => "$subfield_value_h",
+            subfield_value_i => "$subfield_value_i",
+            subfield_value_p => "$subfield_value_p",
+            subfield_value_t => "$subfield_value_t",
+            subfield_value_u => "$subfield_value_u",
+            subfield_value_v => "$subfield_value_v",
+            subfield_value_x => "$subfield_value_x",
+            subfield_value_y => "$subfield_value_y",
         );
 ###############################################################
     }
     elsif ( $op eq "do_search" ) {
         my $search         = $query->param('search');
+        my $itype          = $query->param('itype');
         my $startfrom      = $query->param('startfrom');
-        my $resultsperpage = $query->param('resultsperpage');
+        my $resultsperpage = $query->param('resultsperpage') || 20;
         my $orderby;
-        my ( $errors, $results ) = SimpleSearch($search);
+        $search = 'kw,wrdl='.$search.' and mc-itemtype='.$itype if $itype;
+        my ( $errors, $results, $total_hits ) = SimpleSearch($search, $startfrom * $resultsperpage, $resultsperpage );
         my $total = scalar(@$results);
-        $resultsperpage = 20 unless $resultsperpage;
 
         #        warn " biblio count : ".$total;
 
@@ -328,7 +345,7 @@ sub plugin {
                   "cataloguing/value_builder/unimarc_field_4XX.tmpl",
                 query           => $query,
                 type            => 'intranet',
-                authnotrequired => 1,
+                authnotrequired => 0,
                 debug           => 1,
             }
         );
@@ -336,21 +353,18 @@ sub plugin {
         # multi page display gestion
         my $displaynext = 0;
         my $displayprev = $startfrom;
-        if ( ( $total - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) {
+
+        if( ( $total_hits - ( ( $startfrom + 1 ) * ($resultsperpage) ) ) > 0 ) {
             $displaynext = 1;
         }
         my @arrayresults;
         my @field_data = ($search);
-        for (
-            my $i = $startfrom ;
-            $i <= (
-                  ( $startfrom + $resultsperpage ) < scalar(@$results)
-                ? ( $startfrom + $resultsperpage )
-                : scalar(@$results)
-            ) ;
-            $i++
-          )
-        {
+         for (
+             my $i = 0 ;
+             $i < $resultsperpage ;
+             $i++
+           )
+         {
             my $record = MARC::Record::new_from_usmarc( $results->[$i] );
             my $rechash = TransformMarcToKoha( $dbh, $record );
             my $pos;
@@ -370,7 +384,7 @@ sub plugin {
             $CN =~ s/ \|$//;
             $rechash->{CN} = $CN;
             push @arrayresults, $rechash;
-        }
+         }
 
    #         for(my $i = 0 ; $i <= $#marclist ; $i++)
    #         {
@@ -402,14 +416,25 @@ sub plugin {
         my $from = $startfrom * $resultsperpage + 1;
         my $to;
 
-        if ( $total < ( ( $startfrom + 1 ) * $resultsperpage ) ) {
-            $to = $total;
-        }
-        else {
-            $to = ( ( $startfrom + 1 ) * $resultsperpage );
+        if ( $total_hits < $from + $resultsperpage ) {
+            $to = $total_hits;
+        }else{
+            $to = $from + $resultsperpage ;
         }
         my $defaultview =
           'BiblioDefaultView' . C4::Context->preference('BiblioDefaultView');
+#         my $link="/cgi-bin/koha/cataloguing/value_builder/unimarc4XX.pl?op=do_search&q=$search_desc&resultsperpage=$resultsperpage&startfrom=$startfrom&search=$search";
+#           foreach my $sort (@sort_by){
+#             $link.="&sort_by=".$sort."&";
+#           }
+#           $template->param(
+#             pagination_bar => pagination_bar(
+#                     $link,
+#                     getnbpages($hits, $results_per_page),
+#                     $page,
+#                     'page'
+#             ),
+#           );
         $template->param(
             result         => \@arrayresults,
             index          => $query->param('index') . "",
@@ -421,7 +446,7 @@ sub plugin {
             startfromnext  => $startfrom + 1,
             startfromprev  => $startfrom - 1,
             searchdata     => \@field_data,
-            total          => $total,
+            total          => $total_hits,
             from           => $from,
             to             => $to,
             numbers        => \@numbers,
@@ -438,7 +463,7 @@ sub plugin {
                   "cataloguing/value_builder/unimarc_field_4XX.tmpl",
                 query           => $query,
                 type            => "intranet",
-                authnotrequired => 1,
+                authnotrequired => 0,
             }
         );
 
@@ -509,10 +534,13 @@ sub plugin {
 #         }
 #         $sth->finish;
 
+        my @itemtypes = C4::ItemType->all;
+
         $template->param(    #classlist => $classlist,
             CGIitemtype  => $CGIitemtype,
             CGIbranch    => $CGIbranch,
             CGIPublisher => $CGIpublisher,
+            itypeloop    => \@itemtypes,
             index        => $query->param('index'),
             Search       => 1,
         );