road to 1.3.1
authortipaul <tipaul>
Sat, 26 Oct 2002 17:57:18 +0000 (17:57 +0000)
committertipaul <tipaul>
Sat, 26 Oct 2002 17:57:18 +0000 (17:57 +0000)
thesaurus / authorities support

admin/thesaurus.pl [new file with mode: 0755]
koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl
koha-tmpl/intranet-tmpl/default/en/parameters/thesaurus.tmpl [new file with mode: 0644]

diff --git a/admin/thesaurus.pl b/admin/thesaurus.pl
new file mode 100755 (executable)
index 0000000..699bab2
--- /dev/null
@@ -0,0 +1,261 @@
+#!/usr/bin/perl
+
+# Copyright 2000-2002 Katipo Communications
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# 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
+
+use strict;
+use CGI;
+use C4::Context;
+use C4::Output;
+use C4::Search;
+use HTML::Template;
+use C4::Context;
+
+
+sub StringSearch  {
+       my ($env,$category,$toponly,$branch,$searchstring,$type)=@_;
+       my $dbh = C4::Context->dbh;
+       $searchstring=~ s/\'/\\\'/g;
+       my $query="Select distinct stdlib,id,hierarchy,level from bibliothesaurus where (category like \"$category%\")";
+       $query .= " and hierarchy='$branch'" if ($branch && $toponly);
+       $query .= " and hierarchy like \"$branch%\"" if ($branch && !$toponly);
+       $query .= " and hierarchy=''" if (!$branch & $toponly);
+       $query .= " and stdlib like \"$searchstring%\"" if ($searchstring);
+       $query .= " order by category,stdlib";
+       my $sth=$dbh->prepare($query);
+       $sth->execute;
+       my @results;
+       my $cnt=0;
+       my $old_stdlib="";
+       while (my $data=$sth->fetchrow_hashref){
+       if ($old_stdlib ne $data->{'stdlib'}) {
+               $cnt ++;
+               push(@results,$data);
+       }
+       $old_stdlib = $data->{'stdlib'};
+       }
+       $sth->finish;
+       return ($cnt,\@results);
+}
+
+my $input = new CGI;
+my $search_category=$input->param('search_category');
+my $toponly = $input->param('toponly');
+my $branch = $input->param('branch');
+my $searchstring = $input->param('searchstring');
+$searchstring=~ s/\,//g;
+my $id = $input->param('id');
+my $reqsel="select category,stdlib,freelib from authorised_values where id='$id'";
+my $reqdel="delete from authorised_values where id='$id'";
+my $offset=$input->param('offset');
+my $script_name="/cgi-bin/koha/admin/thesaurus.pl";
+my $dbh = C4::Context->dbh;
+
+my $template = gettemplate("parameters/thesaurus.tmpl",0);
+my $pagesize=20;
+my $op = $input->param('op');
+
+if ($op) {
+$template->param(script_name => $script_name,
+                                               $op              => 1); # we show only the TMPL_VAR names $op
+} else {
+$template->param(script_name => $script_name,
+                                               else              => 1); # we show only the TMPL_VAR names $op
+}
+################## ADD_FORM ##################################
+# called by default. Used to create form to add or  modify a record
+if ($op eq 'add_form') {
+       my $data;
+       if ($id) {
+               my $dbh = C4::Context->dbh;
+               my $sth=$dbh->prepare("select id,category,freelib,stdlib from bibliothesaurus where id='$id'");
+               $sth->execute;
+               $data=$sth->fetchrow_hashref;
+               $sth->finish;
+       } else {
+               $data->{'category'} = $input->param('category');
+               $data->{'stdlib'} = $input->param('stdlib');
+       }
+       if ($search_category) {
+               $template->param(action => "Modify authorised value");
+       } else {
+               $template->param(action => "Add authorised value");
+       }
+       $template->param(category => $data->{'category'},
+                                                       stdlib => $data->{'stdlib'},
+                                                       freelib => $data->{'freelib'},
+                                                       id => $data->{'id'}
+                                                       );
+       if ($data->{'category'}) {
+               $template->param(category => "<input type=\"hidden\" name=\"category\" value='$data->{'category'}'>$data->{'category'}");
+       } else {
+               $template->param(category => "<input type=text name=\"category\" size=8 maxlength=8>");
+       }
+################## ADD_VALIDATE ##################################
+# called by add_form, used to insert/modify data in DB
+} elsif ($op eq 'add_validate') {
+       my $dbh = C4::Context->dbh;
+       my $sth=$dbh->prepare("replace bibliothesaurus (id,category,stdlib,freelib) values (?,?,?,?)");
+       $sth->execute($input->param('id'), $input->param('category'), $input->param('stdlib'), $input->param('freelib'));
+       $sth->finish;
+       print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=thesaurus.pl?search_category=".$input->param('category')."\"></html>";
+       exit;
+################## DELETE_CONFIRM ##################################
+# called by default form, used to confirm deletion of data in DB
+} elsif ($op eq 'delete_confirm') {
+       my $dbh = C4::Context->dbh;
+       my $sth=$dbh->prepare($reqsel);
+       $sth->execute;
+       my $data=$sth->fetchrow_hashref;
+       $sth->finish;
+       $template->param(search_category => $search_category,
+                                                       Tvalue => $data->{'stdlib'},
+                                                       id =>$id,
+                                                       );
+
+                                                                                                       # END $OP eq DELETE_CONFIRM
+################## DELETE_CONFIRMED ##################################
+# called by delete_confirm, used to effectively confirm deletion of data in DB
+} elsif ($op eq 'delete_confirmed') {
+       my $dbh = C4::Context->dbh;
+       my $sth=$dbh->prepare($reqdel);
+       $sth->execute;
+       $sth->finish;
+       print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=thesaurus.pl?search_category=$search_category\"></html>";
+       exit;
+                                                                                                       # END $OP eq DELETE_CONFIRMED
+################## DETAIL_FORM ##################################
+} elsif ($op eq 'detail_form') {
+       # build categories list
+       my $sth = $dbh->prepare("select distinct category from bibliothesaurus");
+       $sth->execute;
+       my @category_list;
+       while ( my ($category) = $sth->fetchrow_array) {
+               push(@category_list,$category);
+       }
+       my $tab_list = CGI::scrolling_list(-name=>'search_category',
+                       -values=> \@category_list,
+                       -default=>"",
+                       -size=>1,
+                       -multiple=>0,
+                       );
+       if (!$search_category) {
+               $search_category=$category_list[0];
+       }
+       my $env;
+       my $sth = $dbh->prepare("select stdlib,category from bibliothesaurus where id=?");
+       $sth->execute($id);
+       my ($stdlib,$category) = $sth->fetchrow_array;
+       warn "ID : $id / $stdlib / $category";
+       $sth->finish;
+       $sth= $dbh->prepare("select id,freelib from bibliothesaurus where stdlib=?");
+       $sth->execute($stdlib);
+       my $toggle="white";
+       # builds value list
+       my @loop_data;
+       while ( my ($id,$freelib) = $sth->fetchrow_array) {
+               if ($toggle eq 'white'){
+                       $toggle="#ffffcc";
+               } else {
+                       $toggle="white";
+               }
+               my %row_data;  # get a fresh hash for the row data
+               $row_data{freelib} = $freelib;
+               $row_data{edit} = "$script_name?op=add_form&id=$id";
+               $row_data{delete} = "$script_name?op=delete_confirm&search_category=$search_category&id=$id";
+               push(@loop_data, \%row_data);
+       }
+
+       $template->param(loop => \@loop_data,
+                                                       tab_list => $tab_list,
+                                                       category => $search_category,
+                                                       toponly => $toponly,
+                                                       searchstring => $searchstring,
+                                                       stdlib => $stdlib,
+                                                       category => $category);
+################## DEFAULT ##################################
+} else { # DEFAULT
+       # build categories list
+       my $sth = $dbh->prepare("select distinct category from bibliothesaurus");
+       $sth->execute;
+       my @category_list;
+       while ( my ($category) = $sth->fetchrow_array) {
+               push(@category_list,$category);
+       }
+       my $tab_list = CGI::scrolling_list(-name=>'search_category',
+                       -values=> \@category_list,
+                       -default=>"",
+                       -size=>1,
+                       -multiple=>0,
+                       );
+       if (!$search_category) {
+               $search_category=$category_list[0];
+       }
+       my $env;
+       my ($count,$results)=StringSearch($env,$search_category,$toponly,$branch,$searchstring,'web');
+       my $toggle="white";
+       my @loop_data = ();
+       # builds value list
+       for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){
+               if ($toggle eq 'white'){
+                       $toggle="#ffffcc";
+               } else {
+                       $toggle="white";
+               }
+               my %row_data;  # get a fresh hash for the row data
+               $row_data{category} = $results->[$i]{'category'};
+               $row_data{stdlib} = ("&nbsp;&nbsp;&nbsp;&nbsp;" x $results->[$i]{'level'}).$results->[$i]{'stdlib'};
+               $row_data{stdlib} = $results->[$i]{'stdlib'};
+               $row_data{dig} ="<a href=thesaurus.pl?branch=$results->[$i]{'hierarchy'}".($results->[$i]{'hierarchy'}?"|":"")."$results->[$i]{'id'}&toponly=$toponly>";
+               $row_data{related} ="<a href=thesaurus.pl?id=$results->[$i]{'id'}&op=detail_form>";
+               $row_data{edit} = "$script_name?op=add_form&id=".$results->[$i]{'id'};
+               $row_data{delete} = "$script_name?op=delete_confirm&search_category=$search_category&id=".$results->[$i]{'id'};
+               push(@loop_data, \%row_data);
+       }
+       # rebuild coplete hierarchy
+       my  $sth = $dbh->prepare("select stdlib from bibliothesaurus where id=?");
+       my @hierarchy = split(/\|/,$branch);
+       my @hierarchy_loop;
+       warn "total : $#hierarchy";
+       my $x;
+       for (my $xi=0;$xi<=$#hierarchy;$xi++) {
+               my %link;
+               $sth->execute($hierarchy[$xi]);
+               my ($t) = $sth->fetchrow_array;
+               $x.=$hierarchy[$xi];
+               $link{'string'}=$t;
+               $link{'branch'}=$x;
+               push (@hierarchy_loop, \%link);
+               $x.='|';
+       }
+       $template->param(loop => \@loop_data,
+                                                       tab_list => $tab_list,
+                                                       category => $search_category,
+                                                       toponly => $toponly,
+                                                       searchstring => $searchstring,
+                                                       hierarchy_loop => \@hierarchy_loop);
+       if ($offset>0) {
+               my $prevpage = $offset-$pagesize;
+               $template->param(previous => "<a href=$script_name?branch=$branch&toponly=$toponly&category=$search_category&searchstring=$searchstring&offset=$prevpage>&lt;&lt; Prev</a>");
+       }
+       if ($offset+$pagesize<$count) {
+               my $nextpage =$offset+$pagesize;
+               $template->param(next => "<a href=$script_name?branch=$branch&toponly=$toponly&category=$search_category&searchstring=$searchstring&offset=$nextpage>Next &gt;&gt;</a>");
+       }
+} #---- END $OP eq DEFAULT
+
+print "Content-Type: text/html\n\n", $template->output;
index 1ced59c..ec6e23c 100644 (file)
@@ -1,55 +1,74 @@
 <TMPL_INCLUDE NAME="cat-top.inc">
 <center>
 <FONT SIZE=6><em>Koha admin page</em></FONT><br><br><br>
-<table cellspacing=0 cellpadding=3 width=60%>
-<th width="30%" background="/images/background-mem.gif">Table</th><th width="70%" background="/images/background-mem.gif">Meaning</th>
+<table width=100% cellspacing=0 cellpadding=5 border=1>
+<tr background="/images/background-mem.gif">
+       <th>Biblio related parameters </th>
+</tr>
+</table>
+<table cellspacing=0 cellpadding=3 width=80%>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/branches.pl>libraries branches</a></td>
-       <td>the differents branches you manage with this koha server</td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/itemtypes.pl>Item types</a></td>
+       <td>the supports of an item.</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/aqbudget.pl>budget</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/aqbudget.pl>budget</a></td>
        <td>the budgets allowed to differents book funds.</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/aqbookfund.pl>book funds</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/aqbookfund.pl>book funds</a></td>
        <td>the differents book funds.</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/categorie.pl>categories</a></td>
-       <td>the differents types of borrowers.</td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/authorised_values.pl>authorised values</a></td>
+       <td>Define here categories and authorised values for them.
+                       Authorised values are used in MARC form to limit/help editing MARC biblios</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/itemtypes.pl>Item types</a></td>
-       <td>the supports of an item.</td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/thesaurus.pl>Thesaurus</a></td>
+       <td>Thesaurus management. You can define as many thesaurus as needed, through definiitions of thesaurus "category"</td>
+</tr>
+
+<table width=100% cellspacing=0 cellpadding=5 border=1>
+<tr background="/images/background-mem.gif">
+       <th>MARC related parameters </th>
+</tr>
+</table>
+<table cellspacing=0 cellpadding=3 width=80%>
+<tr><td valign="top" width="25%"><a href=/cgi-bin/koha/admin/marctagstructure.pl>MARC tag structure</a></td><td>MARC structure : tag then subfields</td></tr>
+<tr><td valign="top" width="25%"><a href=/cgi-bin/koha/admin/koha2marclinks.pl>Links koha - MARC DB</a></td><td>Define links between the koha standard DB and the MARC one. Note those links can be defined through MARC structure. This tool is just a shortcut to speed up linkage</td></tr>
+</table>
+<table width=100% cellspacing=0 cellpadding=5 border=1>
+<tr background="/images/background-mem.gif">
+       <th>Various datas : </th>
+</tr>
+</table>
+<table cellspacing=0 cellpadding=3 width="80%">
+<tr>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/branches.pl>libraries branches</a></td>
+       <td>the differents branches you manage with this koha server</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/currency.pl>Currencies</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/categorie.pl>categories</a></td>
+       <td>the differents types of borrowers.</td>
+</tr>
+<tr>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/currency.pl>Currencies</a></td>
        <td>Currencies of booksellers.</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/printers.pl>Printers</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/printers.pl>Printers</a></td>
        <td>Printers (UNIX paths).</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/stopwords.pl>stopwords</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/stopwords.pl>stopwords</a></td>
        <td>Words deleted during searches</td>
 </tr>
 <tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/systempreferences.pl>systempreferences</a></td>
+       <td valign="top" width="25%"><a href=/cgi-bin/koha/admin/systempreferences.pl>systempreferences</a></td>
        <td>System preferences</td>
 </tr>
-<tr>
-       <td valign="top"><a href=/cgi-bin/koha/admin/authorised_values.pl>authorised values</a></td>
-       <td>Define here categories and authorised values for them. 
-                       Authorised values are used in MARC form to limit/help editing MARC biblios</td>
-</tr>
-
-<th background="/images/background-mem.gif">Table</th><th background="/images/background-mem.gif">Meaning</th>
-<tr><td valign="top"><a href=/cgi-bin/koha/admin/marctagstructure.pl>MARC tag structure</a></td><td>MARC structure : tag then subfields</td></tr>
-<tr><td valign="top"><a href=/cgi-bin/koha/admin/koha2marclinks.pl>Links koha - MARC DB</a></td><td>Define links between the koha standard DB and the MARC one. Note those links can be defined through MARC structure. This tool is just a shortcut to speed up linkage</td></tr>
-
-
 </table>
+
 </center>
 <TMPL_INCLUDE NAME="cat-bottom.inc">
diff --git a/koha-tmpl/intranet-tmpl/default/en/parameters/thesaurus.tmpl b/koha-tmpl/intranet-tmpl/default/en/parameters/thesaurus.tmpl
new file mode 100644 (file)
index 0000000..d22add3
--- /dev/null
@@ -0,0 +1,133 @@
+<TMPL_INCLUDE NAME="cat-top.inc">
+
+<TMPL_IF name="detail_form">
+<!-------------------------------------------------------------------------------------------------->
+<font SIZE=6><em>Thesaurus management</em></font><br />
+<table border=0 cellspacing=0 cellpadding=5>
+<tr valign=top bgcolor=#99cc33>
+       <td  background="/images/background-mem.gif"><b>Values related to <TMPL_VAR name="stdlib"> (<TMPL_VAR name="category">)</b></td>
+</tr>
+</table>
+<br/><br/>
+<table border=0 cellspacing=0 cellpadding=5>
+<tr valign=top bgcolor=#99cc33>
+       <td background="/images/background-mem.gif"><b>Other forms</b></td>
+       <td background="/images/background-mem.gif">&nbsp;</td>
+       <td background="/images/background-mem.gif">&nbsp;</td>
+<TMPL_LOOP name="loop">
+</tr valign=top bgcolor='<TMPL_VAR name="bgcolor">'>
+       <td><TMPL_VAR name="freelib"></td>
+       <td><a href="<TMPL_VAR name="edit">">Edit</a></td>
+       <td><a href="<TMPL_VAR name="delete">">Delete</a></td>
+</tr>
+</TMPL_LOOP>
+<form action='<TMPL_VAR name="script_name">' method=post>
+<input type=hidden name=op value=add_form>
+</table>
+<form action='<TMPL_VAR name="script_name">' method=post>
+<input type="hidden" name="op" value="add_form">
+<input type="hidden" name="category" value="<TMPL_VAR name="category">">
+<input type="hidden" name="stdlib" value="<TMPL_VAR name="stdlib">">
+<br><input type=image src="/images/button-add-new.gif"  WIDTH=188  HEIGHT=44  ALT="Add budget" BORDER=0 ></a><br>
+</form>
+</TMPL_IF>
+
+<TMPL_IF name="add_form">
+<!-------------------------------------------------------------------------------------------------->
+       <H1><TMPL_VAR name="action"></H1>
+       <form action='<TMPL_VAR name="script_name">' name=Aform method=post>
+       <input type=hidden name=op value='add_validate'>
+       <table cellpadding=3 cellspacing=3>
+       <tr>
+               <td>Category</td>
+               <td><TMPL_VAR name="category"></td>
+       </tr>
+       <tr>
+               <td>Authority lib</td>
+               <td><input type=text name="stdlib" value='<TMPL_VAR name="stdlib">' maxlength="80" size="80"></td>
+       </tr>
+       <tr>
+               <td>Other lib</td>
+               <td><input type=text name="freelib" value='<TMPL_VAR name="freelib">' maxlength="80" size="80"></td>
+       </tr>
+       <tr>
+               <td>&nbsp;</td>
+               <td><input type="hidden" name="id" value="<TMPL_VAR name="id">">
+                       <INPUT type="submit" value='OK'></td>
+       </tr>
+       </table>
+       </form>
+</TMPL_IF>
+
+
+<TMPL_IF name="delete_confirm">
+<!-------------------------------------------------------------------------------------------------->
+<table border=0 cellspacing=0 cellpadding=5>
+       <tr valign=top bgcolor=#99cc33>
+               <td background="/images/background-mem.gif"><b>lib</b></td>
+               <td background="/images/background-mem.gif"><b><TMPL_VAR name="search_category"></b></td>
+       </tr>
+       <tr><td>Value</td><td><TMPL_VAR name="Tvalue"></td></tr>
+       <form action='<TMPL_VAR name="script_name">' method=post>
+               <input type=hidden name=op value=delete_confirmed>
+               <input type=hidden name=id value='<TMPL_VAR name="id">'>
+               <input type="hidden" name="search_category" value="<TMPL_VAR name="search_category">">
+       <tr><td colspan=2 align=center>CONFIRM DELETION</td></tr>
+       <tr><td><INPUT type=submit value='YES'></form></td>
+               <td><form action='<TMPL_VAR name="script_name">' method=post><input type=submit value=NO></form></td></tr>
+</TMPL_IF>
+
+<!-------------------------------------------------------------------------------------------------->
+<TMPL_IF name="else">
+<font SIZE=6><em>Thesaurus management</em></font>
+<p>Manages thesaurus and authorities files.<br />
+<ul>
+       <b>Dig</b> : see datas depending from this one<br />
+       <b>Related</b> : see other forms of this authority entry</p>
+</ul>
+<form action=/cgi-bin/koha/admin/thesaurus.pl method=post>
+       <TMPL_VAR name="tab_list">
+       <input type="checkbox" name="toponly" value="1" <TMPL_IF name="toponly">checked</TMPL_IF>>Top hierarchy only
+       <input type="text" name="searchstring" value="<TMPL_VAR name="searchstring">">
+       <input type="submit" value="OK">
+       <a href="thesaurus.pl?op=add_form">New category...</a>
+</form>
+<TMPL_VAR name="search_category">
+<TMPL_LOOP name="hierarchy_loop">
+       <a href="thesaurus.pl?branch=<TMPL_VAR name="branch">"><TMPL_VAR name="string"></a><br />
+</TMPL_LOOP>
+<table border=0 cellspacing=0 cellpadding=5>
+<tr valign=top bgcolor=#99cc33>
+       <td background="/images/background-mem.gif" width="10%">&nbsp;</td>
+       <td background="/images/background-mem.gif" width="50%"><b>Authority</b></td>
+       <td background="/images/background-mem.gif" width="10%"><b>Dig</b></td>
+       <td background="/images/background-mem.gif" width="10%"><b>Related</b></td>
+       <td background="/images/background-mem.gif" width="10%">&nbsp;</td>
+       <td background="/images/background-mem.gif" width="10%">&nbsp;</td>
+<TMPL_LOOP name="loop">
+</tr valign=top bgcolor='<TMPL_VAR name="bgcolor">'>
+       <td>&nbsp;</td>
+       <td><TMPL_VAR name="stdlib"></td>
+       <td><TMPL_VAR name="dig">Dig</a></td>
+       <td><TMPL_VAR name="related">Related</a></td>
+       <td><a href="<TMPL_VAR name="edit">">Edit</a></td>
+       <td><a href="<TMPL_VAR name="delete">">Delete</a></td>
+</tr>
+</TMPL_LOOP>
+<form action='<TMPL_VAR name="script_name">' method=post>
+<input type=hidden name=op value=add_form>
+</table>
+<table width=40%>
+       <tr>
+               <td width=50%><TMPL_VAR name="previous"></td>
+               <td width=50%><TMPL_VAR name="next"></td>
+       </tr>
+</table>
+<form action='<TMPL_VAR name="script_name">' method=post>
+<input type="hidden" name="op" value="add_form">
+<input type="hidden" name="category" value="<TMPL_VAR name="category">">
+<br><input type=image src="/images/button-add-new.gif"  WIDTH=188  HEIGHT=44  ALT="Add budget" BORDER=0 ></a><br>
+</form>
+</TMPL_IF>
+
+<TMPL_INCLUDE NAME="cat-bottom.inc">