4b0cb19ae5fc546d2b0f770487cea1b9354d60d6
[migration-tools.git] / kmig.d / bin / mig-export
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use DBI;
7 use Data::Dumper;
8 use Env qw(
9     HOME MYSQL_HOST MYSQL_TCP_PORT MYSQL_USER MYSQL_DATABASE MYSQL_PW
10         MIGSCHEMA MIGBASEWORKDIR MIGBASEGITDIR MIGGITDIR MIGWORKDIR
11 );
12 use open ':encoding(utf8)';
13 use Cwd 'abs_path';
14 use Cwd qw(getcwd);
15 use FindBin;
16 my $mig_bin = "$FindBin::Bin/";
17 use lib "$FindBin::Bin/";
18 use XML::Writer;
19 use KMig;
20
21 my $dbh = KMig::db_connect();
22
23 #to do check for array passed and if not present then use tags 
24
25 my @taglist = @ARGV;
26 my $arg_list_length = scalar @taglist;
27 if($arg_list_length < 1) { @taglist = ("preferences","authorisedvalues","libraries","borrowerattributes","itemtypes"); } 
28 $MIGGITDIR =~ s/\/\//\//;
29
30 my $timestamp = create_timestamp();
31
32 foreach my $backup (@taglist) {
33     my $backupfile;
34     if ($backup eq 'preferences') {
35         $backupfile = $MIGGITDIR . 'systempreferences' . '.' . $timestamp . '.xml';
36         backup_preferences($dbh,$backupfile);
37     }
38     if ($backup eq 'authorisedvalues') {
39         $backupfile = $MIGGITDIR . 'authorised_values' . '.' . $timestamp . '.xml';
40         backup_authorised_values($dbh,$backupfile);
41     }
42     if ($backup eq 'borrowerattributes') {
43         $backupfile = $MIGGITDIR . 'borrower_attributes' . '.' . $timestamp . '.xml';
44         backup_borrower_attributes($dbh,$backupfile);
45     }
46     if ($backup eq 'libraries') {
47         $backupfile = $MIGGITDIR . 'libraries' . '.' . $timestamp . '.xml';
48         backup_libraries($dbh,$backupfile);
49     }
50     if ($backup eq 'itemtypes') {
51         $backupfile = $MIGGITDIR . 'itemtypes' . '.' . $timestamp . '.xml'; 
52         backup_itemtypes($dbh,$backupfile);
53     }
54 }
55
56 sub backup_authorised_values {
57     my $dbh = shift;
58     my $backupfile = shift;
59
60     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
61     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
62     $xml->xmlDecl('UTF-8');
63     $xml->startTag('authorised_values');
64     my $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values";
65     my $sth = $dbh->prepare($query);
66     $sth->execute();
67     while (my @row = $sth->fetchrow_array) {
68         $xml->startTag('value');
69         $xml->dataElement('category', $row[0]); 
70         $xml->dataElement('authvalue', $row[1]); 
71         $xml->dataElement('lib', $row[2]); 
72         $xml->dataElement('lib_opac', $row[3]); 
73         $xml->dataElement('image_url', $row[4]); 
74         $xml->endTag('value');        
75     }
76     $xml->endTag('authorised_values');
77     $xml->end();
78     close $fh;
79     return;
80 }
81
82 sub backup_borrower_attributes {
83     my $dbh = shift;
84     my $backupfile = shift;
85
86     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
87     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
88     $xml->xmlDecl('UTF-8');
89     $xml->startTag('document');
90
91     $xml->startTag('borrower_attribute_types');
92     my $query = "SELECT code,description,repeatable,opac_display,opac_editable,staff_searchable,authorised_value_category,display_checkout,category_code,class FROM borrower_attribute_types";
93     my $sth = $dbh->prepare($query);
94     $sth->execute();
95     while (my @row = $sth->fetchrow_array) {
96         $xml->startTag('value');
97         $xml->dataElement('code', $row[0]);
98         $xml->dataElement('description', $row[1]);
99         $xml->dataElement('repeat', $row[2]);
100         $xml->dataElement('opac_display', $row[3]);
101         $xml->dataElement('staff_searchable', $row[4]);
102         $xml->dataElement('auth_value_cat', $row[5]);
103         $xml->dataElement('display_checkout', $row[6]);
104         $xml->dataElement('category_code', $row[7]);
105         $xml->dataElement('class', $row[8]);
106         $xml->endTag('value');
107     }
108     $xml->endTag('borrower_attribute_types');
109
110     $xml->startTag('authorised_value_categories');
111     $query = "SELECT category_name FROM authorised_value_categories WHERE category_name IN (select category_name from borrower_attribute_types)";
112     $sth = $dbh->prepare($query);
113     $sth->execute();
114     while (my @row = $sth->fetchrow_array) {
115         $xml->dataElement('value', $row[0]);
116     }
117     $xml->endTag('authorised_value_categories');
118
119     $xml->startTag('authorised_values');
120     $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values where category in (select category_code from borrower_attribute_types);";
121     $sth = $dbh->prepare($query);
122     $sth->execute();
123     while (my @row = $sth->fetchrow_array) {
124         $xml->startTag('value');
125         $xml->dataElement('category', $row[0]);
126         $xml->dataElement('authvalue', $row[1]);
127         $xml->dataElement('lib', $row[2]);
128         $xml->dataElement('lib_opac', $row[3]);
129         $xml->dataElement('image_url', $row[4]);
130         $xml->endTag('value');
131     }
132     $xml->endTag('authorised_values');
133
134     $xml->endTag('document');
135     $xml->end();
136     close $fh;
137     return;
138 }
139
140 sub backup_itemtypes {
141     my $dbh = shift;
142     my $backupfile = shift;
143
144     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
145     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
146     $xml->xmlDecl('UTF-8');
147     $xml->startTag('document');
148
149     $xml->startTag('itemtypes');
150     my $query = "SELECT itemtype, description, rentalcharge, rentalcharge_daily, rentalcharge_hourly, defaultreplacecost, processfee, notforloan, imageurl, summary, checkinmsg, checkinmsgtype, sip_media_type, hideinopac, searchcategory FROM itemtypes";
151     my $sth = $dbh->prepare($query);
152     $sth->execute();
153     while (my @row = $sth->fetchrow_array) {
154         $xml->startTag('value');
155         $xml->dataElement('itemtype', $row[0]);
156         $xml->dataElement('description', $row[1]);
157         $xml->dataElement('rentalcharge', $row[2]);
158         $xml->dataElement('rentalcharge_daily', $row[3]);
159         $xml->dataElement('rentalcharge_hourly', $row[4]);
160         $xml->dataElement('defaultreplacementcost', $row[5]);
161         $xml->dataElement('processfee', $row[6]);
162         $xml->dataElement('notforloan', $row[7]);
163         $xml->dataElement('imageurl', $row[8]);
164         $xml->dataElement('summary', $row[9]);
165         $xml->dataElement('checkinmsg', $row[10]);
166         $xml->dataElement('checkinmsgtype', $row[11]);
167         $xml->dataElement('sip_media_type', $row[12]);
168         $xml->dataElement('hideinopac', $row[13]);
169         $xml->dataElement('searchcategory', $row[14]);
170         $xml->endTag('value');
171     }
172     $xml->endTag('itemtypes');
173
174     $xml->startTag('authorised_values');
175     $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values where category = 'ITEMTYPECAT';";
176     $sth = $dbh->prepare($query);
177     $sth->execute();
178     while (my @row = $sth->fetchrow_array) {
179         $xml->startTag('value');
180         $xml->dataElement('category', $row[0]);
181         $xml->dataElement('authvalue', $row[1]);
182         $xml->dataElement('lib', $row[2]);
183         $xml->dataElement('lib_opac', $row[3]);
184         $xml->dataElement('image_url', $row[4]);
185         $xml->endTag('value');
186     }
187     $xml->endTag('authorised_values');
188
189     $xml->endTag('document');
190     $xml->end();
191     close $fh;
192     return;
193 }
194
195 sub backup_libraries {
196     my $dbh = shift;
197     my $backupfile = shift;
198
199     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
200     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
201     $xml->xmlDecl('UTF-8');
202     $xml->startTag('libraries');
203     my $query = "SELECT id,parent_id,branchcode,title,description,ft_hide_patron_info,ft_search_groups_opac,ft_search_groups_staff FROM library_groups";
204     my $sth = $dbh->prepare($query);
205     $sth->execute();
206     while (my @row = $sth->fetchrow_array) {
207         $xml->startTag('library');
208         $xml->dataElement('id',$row[0]);
209         $xml->dataElement('parent_id',$row[1]);
210         $xml->dataElement('branchcode',$row[2]);
211         $xml->dataElement('title',$row[3]);
212         $xml->dataElement('description',$row[4]);
213         $xml->dataElement('ft_hide_patron_info',$row[5]);
214         $xml->dataElement('ft_search_groups_opac',$row[6]);
215         $xml->dataElement('ft_search_groups_staff',$row[7]);
216         $xml->endTag('library');
217     }
218     $xml->endTag('libraries');
219     $xml->end();
220     close $fh;
221     return;
222 }
223
224 sub backup_preferences {
225     my $dbh = shift;
226     my $backupfile = shift;
227
228     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
229     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
230     $xml->xmlDecl('UTF-8');
231     $xml->startTag('preferences');
232     my $query = "SELECT variable,value FROM systempreferences WHERE value != '' AND value IS NOT NULL";
233     my $sth = $dbh->prepare($query);
234     $sth->execute();
235     while (my @row = $sth->fetchrow_array) {
236         $xml->startTag('pref');
237         $xml->dataElement('variable',$row[0]);
238         $xml->dataElement('value',$row[1]);
239         $xml->endTag('pref');
240     }
241     $xml->endTag('preferences');
242     $xml->end();
243     close $fh;
244     return;
245 }
246
247 sub create_timestamp {
248     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
249     $year += 1900;
250     $mon = sprintf("%02s",$mon);
251     $mday = sprintf("%02s",$mday);
252     $hour = sprintf("%02s",$hour);
253     $min = sprintf("%02s",$min);
254     $sec = sprintf("%02s",$sec);
255     my $str = "$year$mon$mday$hour$min$sec";
256     return $str;
257 }
258
259 sub abort {
260     my $msg = shift;
261     print STDERR "$0: $msg", "\n";
262     print_usage();
263     exit 1;
264 }
265
266 sub print_usage {
267     print <<_USAGE_;
268
269     mig export foo_a foo_b foo_c
270
271 _USAGE_
272 }
273