merging of rel-1-2 and main branch
[koha.git] / admin / marctagstructure.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use C4::Output;
5 use CGI;
6 use C4::Search;
7 use C4::Database;
8
9 sub StringSearch  {
10         my ($env,$searchstring,$type)=@_;
11         my $dbh = &C4Connect;
12         $searchstring=~ s/\'/\\\'/g;
13         my @data=split(' ',$searchstring);
14         my $count=@data;
15         my $query="Select tagfield,liblibrarian,libopac,repeatable,mandatory from marc_tag_structure where (tagfield like \"$data[0]%\") order by tagfield";
16         my $sth=$dbh->prepare($query);
17         $sth->execute;
18         my @results;
19         my $cnt=0;
20         while (my $data=$sth->fetchrow_hashref){
21         push(@results,$data);
22         $cnt ++;
23         }
24         #  $sth->execute;
25         $sth->finish;
26         $dbh->disconnect;
27         return ($cnt,\@results);
28 }
29
30 my $input = new CGI;
31 my $searchfield=$input->param('searchfield');
32 my $pkfield="tagfield";
33 my $reqsel="select tagfield,liblibrarian,libopac,repeatable,mandatory from marc_tag_structure where $pkfield='$searchfield'";
34 my $reqdel="delete from marc_tag_structure where $pkfield='$searchfield'";
35 my $offset=$input->param('offset');
36 my $script_name="/cgi-bin/koha/admin/marctagstructure.pl";
37
38 my $pagesize=20;
39 my $op = $input->param('op');
40 $searchfield=~ s/\,//g;
41 print $input->header;
42
43 #start the page and read in includes
44 print startpage();
45 print startmenu('admin');
46
47 ################## ADD_FORM ##################################
48 # called by default. Used to create form to add or  modify a record
49 if ($op eq 'add_form') {
50         #---- if primkey exists, it's a modify action, so read values to modify...
51         my $data;
52         if ($searchfield) {
53                 my $dbh = &C4Connect;
54                 my $sth=$dbh->prepare("select tagfield,liblibrarian,libopac,repeatable,mandatory from marc_tag_structure where $pkfield='$searchfield'");
55                 $sth->execute;
56                 $data=$sth->fetchrow_hashref;
57                 $sth->finish;
58         }
59         print <<printend
60         <script>
61         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
62         function isNotNull(f,noalert) {
63                 if (f.value.length ==0) {
64    return false;
65                 }
66                 return true;
67         }
68         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
69         function toUC(f) {
70                 var x=f.value.toUpperCase();
71                 f.value=x;
72                 return true;
73         }
74         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
75         function isNum(v,maybenull) {
76         var n = new Number(v.value);
77         if (isNaN(n)) {
78                 return false;
79                 }
80         if (maybenull==0 && v.value=='') {
81                 return false;
82         }
83         return true;
84         }
85         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
86         function isDate(f) {
87                 var t = Date.parse(f.value);
88                 if (isNaN(t)) {
89                         return false;
90                 }
91         }
92         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
93         function Check(f) {
94                 var ok=1;
95                 var _alertString="";
96                 var alertString2;
97                 if (f.tagfield.value.length==0) {
98                         _alertString += "- tagfield missing\\n";
99                 }
100                 if (f.repeatable.value!=0 && f.repeatable.value!=1) {
101                         _alertString += "- repeatable must be 0 or 1\\n";
102                 }
103                 if (f.mandatory.value!=0 && f.mandatory.value!=1) {
104                         _alertString += "- mandatory must be 0 or 1\\n";
105                 }
106                 if (_alertString.length==0) {
107                         document.Aform.submit();
108                 } else {
109                         alertString2 = "Form not submitted because of the following problem(s)\\n";
110                         alertString2 += "------------------------------------------------------------------------------------\\n\\n";
111                         alertString2 += _alertString;
112                         alert(alertString2);
113                 }
114         }
115         </SCRIPT>
116 printend
117 ;#/
118         if ($searchfield) {
119                 print "<h1>Modify tag</h1>";
120         } else {
121                 print "<h1>Add tag</h1>";
122         }
123         print "<form action='$script_name' name=Aform method=post>";
124         print "<input type=hidden name=op value='add_validate'>";
125         print "<table>";
126         if ($searchfield) {
127                 print "<tr><td>Tag</td><td><input type=hidden name=tagfield value='$searchfield'>$searchfield</td></tr>";
128         } else {
129                 print "<tr><td>Tag</td><td><input type=text name=tagfield size=5 maxlength=3></td></tr>";
130         }
131         print "<tr><td>Value</td><td><input type=text name=liblibrarian size=80 maxlength=255 value='$data->{'liblibrarian'}'></td></tr>";
132         print "<tr><td>Value</td><td><input type=text name=libopac size=80 maxlength=255 value='$data->{'libopac'}'></td></tr>";
133         print "<tr><td>Value</td><td><input type=text name=repeatable value='$data->{'repeatable'}'></td></tr>";
134         print "<tr><td>Value</td><td><input type=text name=mandatory value='$data->{'mandatory'}'></td></tr>";
135         print "<tr><td>&nbsp;</td><td><INPUT type=button value='OK' onClick='Check(this.form)'></td></tr>";
136         print "</table>";
137         print "</form>";
138 ;
139                                                                                                         # END $OP eq ADD_FORM
140 ################## ADD_VALIDATE ##################################
141 # called by add_form, used to insert/modify data in DB
142 } elsif ($op eq 'add_validate') {
143         my $dbh=C4Connect;
144         my $query = "replace marc_tag_structure (tagfield,liblibrarian,libopac,repeatable,mandatory) values (";
145         $query.= $dbh->quote($input->param('tagfield')).",";
146         $query.= $dbh->quote($input->param('liblibrarian')).",";
147         $query.= $dbh->quote($input->param('libopac')).",";
148         $query.= $dbh->quote($input->param('repeatable')).",";
149         $query.= $dbh->quote($input->param('mandatory')).")";
150         my $sth=$dbh->prepare($query);
151         $sth->execute;
152         $sth->finish;
153         print "data recorded";
154         print "<form action='$script_name' method=post>";
155         print "<input type=submit value=OK>";
156         print "</form>";
157                                                                                                         # END $OP eq ADD_VALIDATE
158 ################## DELETE_CONFIRM ##################################
159 # called by default form, used to confirm deletion of data in DB
160 } elsif ($op eq 'delete_confirm') {
161         my $dbh = &C4Connect;
162         my $sth=$dbh->prepare($reqsel);
163         $sth->execute;
164         my $data=$sth->fetchrow_hashref;
165         $sth->finish;
166         print mktablehdr;
167         print mktablerow(2,'#99cc33',bold('Tag'),bold("$searchfield"),'/images/background-mem.gif');
168         print "<tr><td>liblibrarian</td><td>$data->{'liblibrarian'}</td></tr>";
169         print "<form action='$script_name' method=post><input type=hidden name=op value=delete_confirmed><input type=hidden name=searchfield value='$searchfield'>";
170         print "<tr><td colspan=2 align=center>CONFIRM DELETION</td></tr>";
171         print "<tr><td><INPUT type=submit value='YES'></form></td><td><form action='$script_name' method=post><input type=submit value=NO></form></td></tr>";
172                                                                                                         # END $OP eq DELETE_CONFIRM
173 ################## DELETE_CONFIRMED ##################################
174 # called by delete_confirm, used to effectively confirm deletion of data in DB
175 } elsif ($op eq 'delete_confirmed') {
176         my $dbh=C4Connect;
177 #       my $searchfield=$input->param('branchcode');
178         my $sth=$dbh->prepare($reqdel);
179         $sth->execute;
180         $sth->finish;
181         print "data deleted";
182         print "<form action='$script_name' method=post>";
183         print "<input type=submit value=OK>";
184         print "</form>";
185                                                                                                         # END $OP eq DELETE_CONFIRMED
186 ################## DEFAULT ##################################
187 } else { # DEFAULT
188         my @inputs=(["text","searchfield",$searchfield],
189                 ["reset","reset","clr"]);
190         print mkheadr(2,'System preferences admin');
191         print mkformnotable("$script_name",@inputs);
192         print <<printend
193 printend
194         ;
195         if  ($searchfield ne '') {
196                 print "You Searched for <b>$searchfield<b><p>";
197         }
198         print mktablehdr;
199         print mktablerow(5,'#99cc33',bold('Tag'),bold('Value'),
200         '&nbsp;','&nbsp;','&nbsp;','/images/background-mem.gif');
201         my $env;
202         my ($count,$results)=StringSearch($env,$searchfield,'web');
203         my $toggle="white";
204         for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){
205                 if ($toggle eq 'white'){
206                         $toggle="#ffffcc";
207                 } else {
208                         $toggle="white";
209                 }
210                 print mktablerow(5,$toggle,$results->[$i]{'tagfield'},$results->[$i]{'liblibrarian'},mklink('','subfields_not_done'),
211                 mklink("$script_name?op=add_form&searchfield=".$results->[$i]{'tagfield'},'Edit'),
212                 mklink("$script_name?op=delete_confirm&searchfield=".$results->[$i]{'tagfield'},'Delete',''));
213         }
214         print mktableft;
215         print "<form action='$script_name' method=post>";
216         print "<input type=hidden name=op value=add_form>";
217         if ($offset>0) {
218                 my $prevpage = $offset-$pagesize;
219                 print mklink("$script_name?offset=".$prevpage,'&lt;&lt; Prev');
220         }
221         print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
222         if ($offset+$pagesize<$count) {
223                 my $nextpage =$offset+$pagesize;
224                 print mklink("$script_name?offset=".$nextpage,'Next &gt;&gt;');
225         }
226         print "<br><input type=image src=\"/images/button-add-variable.gif\"  WIDTH=188  HEIGHT=44  ALT=\"Add budget\" BORDER=0 ></a><br>";
227         print "</form>";
228 } #---- END $OP eq DEFAULT
229 print endmenu('admin');
230 print endpage();