bug 3242: insert new HOLDPLACED letter template (DBrev 124)
[koha.git] / admin / auth_subfields_structure.pl
1 #!/usr/bin/perl
2
3 # Copyright 2000-2002 Katipo Communications
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA  02111-1307 USA
19
20 use strict;
21 use C4::Output;
22 use C4::Auth;
23 use CGI;
24 use C4::Context;
25
26
27 sub string_search  {
28         my ($searchstring,$authtypecode)=@_;
29         my $dbh = C4::Context->dbh;
30         $searchstring=~ s/\'/\\\'/g;
31         my @data=split(' ',$searchstring);
32         my $sth=$dbh->prepare("Select * from auth_subfield_structure where (tagfield like ? and authtypecode=?) order by tagfield");
33         $sth->execute("$searchstring%",$authtypecode);
34         my $results = $sth->fetchall_arrayref({});
35         return (scalar(@$results), $results);
36 }
37
38 sub auth_subfield_structure_exists {
39         my ($authtypecode, $tagfield, $tagsubfield) = @_;
40         my $dbh  = C4::Context->dbh;
41         my $sql  = "select tagfield from auth_subfield_structure where authtypecode = ? and tagfield = ? and tagsubfield = ?";
42         my $rows = $dbh->selectall_arrayref($sql, {}, $authtypecode, $tagfield, $tagsubfield);
43         return @$rows > 0;
44 }
45
46 my $input        = new CGI;
47 my $tagfield     = $input->param('tagfield');
48 my $tagsubfield  = $input->param('tagsubfield');
49 my $authtypecode = $input->param('authtypecode');
50 my $offset       = $input->param('offset');
51 my $op           = $input->param('op') || '';
52 my $script_name  = "/cgi-bin/koha/admin/auth_subfields_structure.pl";
53
54 my ($template, $borrowernumber, $cookie) = get_template_and_user(
55     {   template_name   => "admin/auth_subfields_structure.tmpl",
56         query           => $input,
57         type            => "intranet",
58         authnotrequired => 0,
59         flagsrequired   => { parameters => 1 },
60         debug           => 1,
61     }
62 );
63 my $pagesize = 30;
64 $tagfield =~ s/\,//g;
65
66 if ($op) {
67 $template->param(script_name => $script_name,
68                                                 tagfield =>$tagfield,
69                                                 authtypecode => $authtypecode,
70                                                 $op              => 1); # we show only the TMPL_VAR names $op
71 } else {
72 $template->param(script_name => $script_name,
73                                                 tagfield =>$tagfield,
74                                                 authtypecode => $authtypecode,
75                                                 else              => 1); # we show only the TMPL_VAR names $op
76 }
77
78 my $dbh = C4::Context->dbh;
79 ################## ADD_FORM ##################################
80 # called by default. Used to create form to add or  modify a record
81 if ($op eq 'add_form') {
82         my $data;
83         my $more_subfields = $input->param("more_subfields")+1;
84         # builds kohafield tables
85         my @kohafields;
86         push @kohafields, "";
87         my $sth2=$dbh->prepare("SHOW COLUMNS from auth_header");
88         $sth2->execute;
89         while ((my $field) = $sth2->fetchrow_array) {
90                 push @kohafields, "auth_header.".$field;
91         }
92         
93         # build authorised value list
94         $sth2 = $dbh->prepare("select distinct category from authorised_values");
95         $sth2->execute;
96         my @authorised_values;
97         push @authorised_values,"";
98         while ((my $category) = $sth2->fetchrow_array) {
99                 push @authorised_values, $category;
100         }
101         push (@authorised_values,"branches");
102         push (@authorised_values,"itemtypes");
103     
104     # build thesaurus categories list
105     $sth2 = $dbh->prepare("select authtypecode from auth_types");
106     $sth2->execute;
107     my @authtypes;
108     push @authtypes, "";
109     while ( ( my $authtypecode ) = $sth2->fetchrow_array ) {
110         push @authtypes, $authtypecode;
111     }
112
113         # build value_builder list
114         my @value_builder=('');
115
116         # read value_builder directory.
117         # 2 cases here : on CVS install, $cgidir does not need a /cgi-bin
118         # on a standard install, /cgi-bin need to be added. 
119         # test one, then the other
120         my $cgidir = C4::Context->intranetdir ."/cgi-bin";
121         unless (opendir(DIR, "$cgidir/cataloguing/value_builder")) {
122                 $cgidir = C4::Context->intranetdir;
123                 opendir(DIR, "$cgidir/cataloguing/value_builder") || die "can't opendir $cgidir/value_builder: $!";
124         } 
125         while (my $line = readdir(DIR)) {
126                 if ($line =~ /\.pl$/) {
127                         push (@value_builder,$line);
128                 }
129         }
130         @value_builder= sort {$a cmp $b} @value_builder;
131         closedir DIR;
132
133         # build values list
134         my $sth=$dbh->prepare("select * from auth_subfield_structure where tagfield=? and authtypecode=?"); # and tagsubfield='$tagsubfield'");
135         $sth->execute($tagfield,$authtypecode);
136         my @loop_data = ();
137         my $i=0;
138         while ($data =$sth->fetchrow_hashref) {
139
140                 my %row_data;  # get a fresh hash for the row data
141                 $row_data{tab} = CGI::scrolling_list(-name=>'tab',
142                                         -id=>"tab$i",
143                                         -values =>
144                                         [ '-1', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ],
145                                         -labels => {
146                                             '-1' => 'ignore',
147                                             '0'  => '0',
148                                             '1'  => '1',
149                                             '2'  => '2',
150                                             '3'  => '3',
151                                             '4'  => '4',
152                                             '5'  => '5',
153                                             '6'  => '6',
154                                             '7'  => '7',
155                                             '8'  => '8',
156                                             '9'  => '9',
157                                         },
158                                         -default=>$data->{'tab'},
159                                         -size=>1,
160                                         -tabindex=>'',
161                                         -multiple=>0,
162                                         );
163                 $row_data{ohidden} = CGI::scrolling_list(-name=>'ohidden',
164                                         -id=>"ohidden$i",
165                                         #-values=>['0','1','2'],
166                                         #-labels => {'0'=>'Show','1'=>'Show Collapsed',
167                                         #                               '2' =>'Hide',
168                                         #                               },
169                                         -values=>['0','-5'],
170                                         -labels => {'0'=>'Show All','-5'=>'Hide All',},
171                                         -default=>$data->{'hidden'},
172                                         #-default=>"-5",
173                                         -size=>1,
174                                         -multiple=>0,
175                                         );
176                 #$row_data{ihidden} = CGI::scrolling_list(-name=>'ihidden',
177                 #                       -id=>"ihidden$i",
178                 #                       -values=>['0','1','2'],
179                 #                       -labels => {'0'=>'Show','1'=>'Show Collapsed',
180                 #                                                       '2' =>'Hide',
181                 #                                                       },
182                 #                       -default=>substr($data->{'hidden'},1,1),
183                 #                       -size=>1,
184                 #                       -multiple=>0,
185                 #                       );
186                 #$row_data{ehidden} = CGI::scrolling_list(-name=>'ehidden',
187                 #                       -id=>"ehidden$i",
188                 #                       -values=>['0','1','2'],
189                 #                       -labels => {'0'=>'Show','1'=>'Show Collapsed',
190                 #                                                       '2' =>'Hide',
191                 #                                                       },
192                 #                       -default=>substr($data->{'hidden'}."  ",2,1),
193                 #                       -size=>1,
194                 #                       -multiple=>0,
195                 #                       );
196                 $row_data{tagsubfieldinput} = "<input type=\"hidden\" name=\"tagsubfield\" value=\"".$data->{'tagsubfield'}."\" id=\"tagsubfield\" />";
197                 $row_data{tagsubfield} = $data->{'tagsubfield'};
198                 $row_data{liblibrarian} = CGI::escapeHTML($data->{'liblibrarian'});
199                 $row_data{libopac} = CGI::escapeHTML($data->{'libopac'});
200                 $row_data{seealso} = CGI::escapeHTML($data->{'seealso'});
201                 $row_data{kohafield}= CGI::scrolling_list( -name=>"kohafield",
202                                         -id=>"kohafield$i",
203                                         -values=> \@kohafields,
204                                         -default=> "$data->{'kohafield'}",
205                                         -size=>1,
206                                         -multiple=>0,
207                                         );
208                 $row_data{authorised_value}  = CGI::scrolling_list(-name=>'authorised_value',
209                                         -id=>"authorised_value$i",
210                                         -values=> \@authorised_values,
211                                         -default=>$data->{'authorised_value'},
212                                         -size=>1,
213                                         -tabindex=>'',
214                                         -multiple=>0,
215                                         );
216                 $row_data{frameworkcode}  = CGI::scrolling_list(-name=>'frameworkcode',
217                                         -id=>"frameworkcode$i",
218                                         -values=> \@authtypes,
219                                         -default=>$data->{'frameworkcode'},
220                                         -size=>1,
221                                         -tabindex=>'',
222                                         -multiple=>0,
223                                         );
224                 $row_data{value_builder}  = CGI::scrolling_list(-name=>'value_builder',
225                                         -id=>"value_builder$i",
226                                         -values=> \@value_builder,
227                                         -default=>$data->{'value_builder'},
228                                         -size=>1,
229                                         -tabindex=>'',
230                                         -multiple=>0,
231                                         );
232                 
233                 $row_data{repeatable} = CGI::checkbox(-name=>"repeatable$i",
234         -checked => $data->{'repeatable'}?'checked':'',
235         -value => 1,
236         -label => '',
237         -id => "repeatable$i");
238                 $row_data{mandatory} = CGI::checkbox(-name => "mandatory$i",
239         -checked => $data->{'mandatory'}?'checked':'',
240         -value => 1,
241         -label => '',
242         -id => "mandatory$i");
243                 $row_data{hidden} = CGI::escapeHTML($data->{hidden}) ;
244                 $row_data{isurl} = CGI::checkbox( -name => "isurl$i",
245                         -id => "isurl$i",
246                         -checked => $data->{'isurl'}?'checked':'',
247                         -value => 1,
248                         -label => '');
249                 $row_data{row} = $i;
250                 push(@loop_data, \%row_data);
251                 $i++;
252         }
253         # add more_subfields empty lines for add if needed
254         for (my $i=1;$i<=$more_subfields;$i++) {
255                 my %row_data;  # get a fresh hash for the row data
256         $row_data{'new_subfield'} = 1;
257                 $row_data{tab} = CGI::scrolling_list(-name=>'tab',
258                                         -id => "tab$i",
259                                         -values =>
260                                         [ '-1', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ],
261                                         -labels => {
262                                             '-1' => 'ignore',
263                                             '0'  => '0',
264                                             '1'  => '1',
265                                             '2'  => '2',
266                                             '3'  => '3',
267                                             '4'  => '4',
268                                             '5'  => '5',
269                                             '6'  => '6',
270                                             '7'  => '7',
271                                             '8'  => '8',
272                                             '9'  => '9',
273                                         },
274                                         -default=>"",
275                                         -size=>1,
276                                         -tabindex=>'',
277                                         -multiple=>0,
278                                         );
279                 $row_data{ohidden} = CGI::scrolling_list(-name=>'ohidden',
280                                         -id=>"ohidden$i",
281                                         #-values=>['0','1','2'],
282                                         #-labels => {'0'=>'Show','1'=>'Show Collapsed',
283                                         #                               '2' =>'Hide',
284                                         #                               },
285                                         -values=>['0','-5'],
286                                         -labels => {'0'=>'Show All','-5'=>'Hide All',},
287                                         #-default=>"0",
288                                         -default=>$data->{'hidden'},
289                                         #-default=>"-5",
290                                         -size=>1,
291                                         -multiple=>0,
292                                         );
293
294                 #$row_data{ihidden} = CGI::scrolling_list(-name=>'ihidden',
295                 #                       -id=>"ihidden$i",
296                 #                       -values=>['0','1','2'],
297                 #                       -labels => {'0'=>'Show','1'=>'Show Collapsed',
298                 #                                                       '2' =>'Hide',
299                 #                                                       },
300                 #                       -default=>"0",
301                 #                       -size=>1,
302                 #                       -multiple=>0,
303                 #                       );
304                 #$row_data{ehidden} = CGI::scrolling_list(-name=>'ehidden',
305                 #                       -id=>"ehidden$i",
306                 #                       -values=>['0','1','2'],
307                 #                       -labels => {'0'=>'Show','1'=>'Show Collapsed',
308                 #                                                       '2' =>'Hide',
309                 #                                                       },
310                 #                       -default=>"0",
311                 #                       -size=>1,
312                 #                       -multiple=>0,
313                 #                       );
314                 $row_data{tagsubfieldinput} = "<input type=\"text\" name=\"tagsubfield\" value=\"".$data->{'tagsubfield'}."\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" />";
315                 $row_data{tagsubfieldinput} = 
316                         "<label><input type=\"text\" name=\"tagsubfield\" value=\""
317                         . $data->{'tagsubfield'}
318                         . "\" size=\"1\" id=\"tagsubfield\" maxlength=\"1\" /></label>";
319                 $row_data{tagsubfield} = $data->{'tagsubfield'};
320                 $row_data{liblibrarian} = "";
321                 $row_data{libopac} = "";
322                 $row_data{seealso} = "";
323                 $row_data{hidden} = "000";
324                 $row_data{repeatable} = CGI::checkbox( -name=> 'repeatable',
325                                 -id => "repeatable$i",
326                                 -checked => '',
327                                 -value => 1,
328                                 -label => '');
329                 $row_data{mandatory} = CGI::checkbox( -name=> 'mandatory',
330                         -id => "mandatory$i",
331                         -checked => '',
332                         -value => 1,
333                         -label => '');
334                 $row_data{isurl} = CGI::checkbox(-name => 'isurl',
335                         -id => "isurl$i",
336                         -checked => '',
337                         -value => 1,
338                         -label => '');
339                 $row_data{kohafield}= CGI::scrolling_list( -name=>'kohafield',
340                                         -id => "kohafield$i",
341                                         -values=> \@kohafields,
342                                         -default=> "",
343                                         -size=>1,
344                                         -multiple=>0,
345                                         );
346                 $row_data{frameworkcode}  = CGI::scrolling_list(-name=>'frameworkcode',
347                                         -id=>'frameworkcode',
348                                         -values=> \@authtypes,
349                                         -default=>$data->{'frameworkcode'},
350                                         -size=>1,
351                                         -tabindex=>'',
352                                         -multiple=>0,
353                                         );
354                 $row_data{authorised_value}  = CGI::scrolling_list(-name=>'authorised_value',
355                                         -id => 'authorised_value',
356                                         -values=> \@authorised_values,
357                                         -size=>1,
358                                         -tabindex=>'',
359                                         -multiple=>0,
360                                         );
361                 $row_data{value_builder}  = CGI::scrolling_list(-name=>'value_builder',
362                                         -id=>'value_builder',
363                                         -values=> \@value_builder,
364                                         -default=>$data->{'value_builder'},
365                                         -size=>1,
366                                         -tabindex=>'',
367                                         -multiple=>0,
368                                         );
369                 $row_data{row} = $i;
370                 push(@loop_data, \%row_data);
371         }
372         $template->param('use-heading-flags-p' => 1);
373         $template->param('heading-edit-subfields-p' => 1);
374         $template->param(action => "Edit subfields",
375                                                         tagfield => $tagfield,
376                                                         tagfieldinput => "<input type=\"hidden\" name=\"tagfield\" value=\"$tagfield\" />",
377                                                         loop => \@loop_data,
378                                                         more_subfields => $more_subfields,
379                                                         more_tag => $tagfield);
380
381                                                                                                 # END $OP eq ADD_FORM
382 ################## ADD_VALIDATE ##################################
383 # called by add_form, used to insert/modify data in DB
384 } elsif ($op eq 'add_validate') {
385         $template->param(tagfield => "$input->param('tagfield')");
386 #       my $sth=$dbh->prepare("replace auth_subfield_structure (authtypecode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,seealso,authorised_value,frameworkcode,value_builder,hidden,isurl)
387 #                                                                       values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
388         my $sth_insert = $dbh->prepare("insert into auth_subfield_structure (authtypecode,tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,seealso,authorised_value,frameworkcode,value_builder,hidden,isurl)
389                                                                         values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
390         my $sth_update = $dbh->prepare("update auth_subfield_structure set authtypecode=?, tagfield=?, tagsubfield=?, liblibrarian=?, libopac=?, repeatable=?, mandatory=?, kohafield=?, tab=?, seealso=?, authorised_value=?, frameworkcode=?, value_builder=?, hidden=?, isurl=?
391                                                                         where authtypecode=? and tagfield=? and tagsubfield=?");
392         my @tagsubfield = $input->param('tagsubfield');
393         my @liblibrarian        = $input->param('liblibrarian');
394         my @libopac             = $input->param('libopac');
395         my @kohafield           = ''.$input->param('kohafield');
396         my @tab                         = $input->param('tab');
397         my @seealso             = $input->param('seealso');
398         my @hidden;
399         my @ohidden             = $input->param('ohidden');
400         #my @ihidden            = $input->param('ihidden');
401         #my @ehidden            = $input->param('ehidden');
402         my @authorised_values   = $input->param('authorised_value');
403         my $authtypecode        = $input->param('authtypecode');
404         my @frameworkcodes      = $input->param('frameworkcode');
405         my @value_builder       =$input->param('value_builder');
406         for (my $i=0; $i<= $#tagsubfield ; $i++) {
407                 my $tagfield                    =$input->param('tagfield');
408                 my $tagsubfield         =$tagsubfield[$i];
409                 $tagsubfield="@" unless $tagsubfield ne '';
410                 my $liblibrarian                =$liblibrarian[$i];
411                 my $libopac                     =$libopac[$i];
412                 my $repeatable          =$input->param("repeatable$i")?1:0;
413                 my $mandatory           =$input->param("mandatory$i")?1:0;
414                 my $kohafield           =$kohafield[$i];
415                 my $tab                         =$tab[$i];
416                 my $seealso                             =$seealso[$i];
417                 my $authorised_value            =$authorised_values[$i];
418                 my $frameworkcode               =$frameworkcodes[$i];
419                 my $value_builder=$value_builder[$i];
420                 #my $hidden = $ohidden[$i].$ihidden[$i].$ehidden[$i]; #collate from 3 hiddens;
421                 my $hidden = $ohidden[$i]; #collate from 3 hiddens;
422                 my $isurl = $input->param("isurl$i")?1:0;
423                 if ($liblibrarian) {
424                         unless (C4::Context->config('demo') eq 1) {
425                                 if (auth_subfield_structure_exists($authtypecode, $tagfield, $tagsubfield)) {
426                                         $sth_update->execute(
427                                                 $authtypecode,
428                                                 $tagfield,
429                                                 $tagsubfield,
430                                                 $liblibrarian,
431                                                 $libopac,
432                                                 $repeatable,
433                                                 $mandatory,
434                                                 $kohafield,
435                                                 $tab,
436                                                 $seealso,
437                                                 $authorised_value,
438                                                 $frameworkcode,
439                                                 $value_builder,
440                                                 $hidden,
441                                                 $isurl,
442                                                 (
443                                                         $authtypecode,
444                                                         $tagfield,
445                                                         $tagsubfield
446                                                 ),
447                                         );
448                                 } else {
449                                         $sth_insert->execute(
450                                                 $authtypecode,
451                                                 $tagfield,
452                                                 $tagsubfield,
453                                                 $liblibrarian,
454                                                 $libopac,
455                                                 $repeatable,
456                                                 $mandatory,
457                                                 $kohafield,
458                                                 $tab,
459                                                 $seealso,
460                                                 $authorised_value,
461                                                 $frameworkcode,
462                                                 $value_builder,
463                                                 $hidden,
464                                                 $isurl,
465                                         );
466                                 }
467                         }
468                 }
469         }
470         print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=auth_subfields_structure.pl?tagfield=$tagfield&authtypecode=$authtypecode\"></html>";
471         exit;
472
473                                                                                                         # END $OP eq ADD_VALIDATE
474 ################## DELETE_CONFIRM ##################################
475 # called by default form, used to confirm deletion of data in DB
476 } elsif ($op eq 'delete_confirm') {
477         my $sth=$dbh->prepare("select * from auth_subfield_structure where tagfield=? and tagsubfield=? and authtypecode=?");
478         $sth->execute($tagfield,$tagsubfield,$authtypecode);
479         my $data=$sth->fetchrow_hashref;
480         $template->param(liblibrarian => $data->{'liblibrarian'},
481                                                         tagsubfield => $data->{'tagsubfield'},
482                                                         delete_link => $script_name,
483                                                         tagfield      =>$tagfield,
484                                                         tagsubfield => $tagsubfield,
485                                                         authtypecode => $authtypecode,
486                                                         );
487                                                                                                         # END $OP eq DELETE_CONFIRM
488 ################## DELETE_CONFIRMED ##################################
489 # called by delete_confirm, used to effectively confirm deletion of data in DB
490 } elsif ($op eq 'delete_confirmed') {
491         unless (C4::Context->config('demo') eq 1) {
492                 my $sth=$dbh->prepare("delete from auth_subfield_structure where tagfield=? and tagsubfield=? and authtypecode=?");
493                 $sth->execute($tagfield,$tagsubfield,$authtypecode);
494         }
495         print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=auth_subfields_structure.pl?tagfield=$tagfield&authtypecode=$authtypecode\"></html>";
496         exit;
497         $template->param(tagfield => $tagfield);
498                                                                                                         # END $OP eq DELETE_CONFIRMED
499 ################## DEFAULT ##################################
500 } else { # DEFAULT
501         my ($count,$results)=string_search($tagfield,$authtypecode);
502         my @loop_data = ();
503         for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){
504                 my %row_data;  # get a fresh hash for the row data
505                 $row_data{tagfield} = $results->[$i]{'tagfield'};
506                 $row_data{tagsubfield} = $results->[$i]{'tagsubfield'};
507                 $row_data{liblibrarian} = $results->[$i]{'liblibrarian'};
508                 $row_data{kohafield} = $results->[$i]{'kohafield'};
509                 $row_data{repeatable} = $results->[$i]{'repeatable'};
510                 $row_data{mandatory} = $results->[$i]{'mandatory'};
511                 $row_data{tab} = $results->[$i]{'tab'};
512                 $row_data{seealso} = $results->[$i]{'seealso'};
513                 $row_data{authorised_value} = $results->[$i]{'authorised_value'};
514                 $row_data{authtypecode} = $results->[$i]{'authtypecode'};
515                 $row_data{value_builder}        = $results->[$i]{'value_builder'};
516                 $row_data{hidden}       = $results->[$i]{'hidden'} if($results->[$i]{'hidden'} gt "000") ;
517                 $row_data{isurl}        = $results->[$i]{'isurl'};
518                 $row_data{delete} = "$script_name?op=delete_confirm&amp;tagfield=$tagfield&amp;tagsubfield=".$results->[$i]{'tagsubfield'}."&amp;authtypecode=$authtypecode";
519                 if ($row_data{tab} eq -1) {
520                         $row_data{subfield_ignored} = 1;
521                 }
522
523                 push(@loop_data, \%row_data);
524         }
525         $template->param(loop => \@loop_data);
526         $template->param(edit_tagfield => $tagfield,
527                 edit_authtypecode => $authtypecode);
528         
529         if ($offset>0) {
530                 my $prevpage = $offset-$pagesize;
531                 $template->param(prev =>"<a href=\"$script_name?offset=$prevpage\">");
532         }
533         if ($offset+$pagesize<$count) {
534                 my $nextpage =$offset+$pagesize;
535                 $template->param(next => "<a href=\"$script_name?offset=$nextpage\">");
536         }
537 } #---- END $OP eq DEFAULT
538 output_html_with_http_headers $input, $cookie, $template->output;