--- /dev/null
+#!/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} = (" " 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><< 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 >></a>");
+ }
+} #---- END $OP eq DEFAULT
+
+print "Content-Type: text/html\n\n", $template->output;
<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">
--- /dev/null
+<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"> </td>
+ <td background="/images/background-mem.gif"> </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> </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%"> </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%"> </td>
+ <td background="/images/background-mem.gif" width="10%"> </td>
+<TMPL_LOOP name="loop">
+</tr valign=top bgcolor='<TMPL_VAR name="bgcolor">'>
+ <td> </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">