updated mig export to use xml and mig import supports libraries and preferences
[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"); } 
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         $backupfile = $MIGGITDIR . 'authorised_value_categories' . '.' . $timestamp . '.xml';
42         backup_authorised_value_categories($dbh,$backupfile);
43     }
44     if ($backup eq 'borrowerattributes') {
45         $backupfile = $MIGGITDIR . 'borrower_attribute_types' . '.' . $timestamp . '.xml';
46         backup_borrower_attribute_types($dbh,$backupfile);
47         $backupfile = $MIGGITDIR . 'authorised_values_by_bat' . '.' . $timestamp . '.xml';
48         backup_authorised_values_by_bat($dbh,$backupfile);
49         $backupfile = $MIGGITDIR . 'authorised_value_categories_by_bat' . '.' . $timestamp . '.xml';
50         backup_authorised_value_categories_by_bat($dbh,$backupfile);
51     }
52     if ($backup eq 'libraries') {
53         $backupfile = $MIGGITDIR . 'libraries' . '.' . $timestamp . '.xml';
54         backup_libraries($dbh,$backupfile);
55     }
56 }
57
58 sub backup_authorised_values {
59     my $dbh = shift;
60     my $backupfile = shift;
61
62     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
63     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
64     $xml->xmlDecl('UTF-8');
65     $xml->startTag('authorised_values');
66     my $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values";
67     my $sth = $dbh->prepare($query);
68     $sth->execute();
69     while (my @row = $sth->fetchrow_array) {
70         $xml->startTag('value');
71         $xml->dataElement('category', $row[0]); 
72         $xml->dataElement('authvalue', $row[1]); 
73         $xml->dataElement('lib', $row[2]); 
74         $xml->dataElement('lib_opac', $row[3]); 
75         $xml->dataElement('image_url', $row[4]); 
76         $xml->endTag('value');        
77     }
78     $xml->endTag('authorised_values');
79     $xml->end();
80     close $fh;
81     return;
82 }
83
84 sub backup_authorised_values_by_bat {
85     my $dbh = shift;
86     my $backupfile = shift;
87
88     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
89     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
90     $xml->xmlDecl('UTF-8');
91     $xml->startTag('authorised_values');
92     my $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values where category in (select category_code 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('category', $row[0]);
98         $xml->dataElement('authvalue', $row[1]);
99         $xml->dataElement('lib', $row[2]);
100         $xml->dataElement('lib_opac', $row[3]);
101         $xml->dataElement('image_url', $row[4]);
102         $xml->endTag('value');
103     }
104     $xml->endTag('authorised_values');
105     $xml->end();
106     close $fh;
107     return;
108 }
109
110 sub backup_authorised_value_categories {
111     my $dbh = shift;
112     my $backupfile = shift;
113
114     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
115     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
116     $xml->xmlDecl('UTF-8');
117     $xml->startTag('authorised_value_categories');
118     my $query = "SELECT category_name FROM authorised_value_categories";
119     my $sth = $dbh->prepare($query);
120     $sth->execute();
121     while (my @row = $sth->fetchrow_array) {
122         $xml->dataElement('value', $row[0]);
123     }
124     $xml->endTag('authorised_value_categories');
125     $xml->end();
126     close $fh;
127     return;
128 }
129
130 sub backup_authorised_value_categories_by_bat {
131     my $dbh = shift;
132     my $backupfile = shift;
133
134     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
135     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
136     $xml->xmlDecl('UTF-8');
137     $xml->startTag('authorised_value_categories');
138     my $query = "SELECT category_name FROM authorised_value_categories WHERE category_name IN (select category_name from borrower_attribute_types)";
139     my $sth = $dbh->prepare($query);
140     $sth->execute();
141     while (my @row = $sth->fetchrow_array) {
142         $xml->dataElement('value', $row[0]);
143     }
144     $xml->endTag('authorised_value_categories');
145     $xml->end();
146     close $fh;
147     return;
148 }
149
150 sub backup_borrower_attribute_types {
151     my $dbh = shift;
152     my $backupfile = shift;
153
154     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
155     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
156     $xml->xmlDecl('UTF-8');
157     $xml->startTag('borrower_attribute_types');
158     my $query = "SELECT code,description,repeatable,opac_display,opac_editable,staff_searchable,authorised_value_category,display_checkout,category_code,class FROM borrower_attribute_types";
159     my $sth = $dbh->prepare($query);
160     $sth->execute();
161     while (my @row = $sth->fetchrow_array) {
162         $xml->startTag('value');
163         $xml->dataElement('code', $row[0]);
164         $xml->dataElement('description', $row[1]);
165         $xml->dataElement('repeat', $row[2]);
166         $xml->dataElement('opac_display', $row[3]);
167         $xml->dataElement('staff_searchable', $row[4]);
168         $xml->dataElement('auth_value_cat', $row[5]);
169         $xml->dataElement('display_checkout', $row[6]);
170         $xml->dataElement('category_code', $row[7]);
171         $xml->dataElement('class', $row[8]);
172         $xml->endTag('value');
173     }
174     $xml->endTag('borrower_attribute_types');
175     $xml->end();
176     close $fh;
177     return;
178 }
179
180 sub backup_libraries {
181     my $dbh = shift;
182     my $backupfile = shift;
183
184     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
185     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
186     $xml->xmlDecl('UTF-8');
187     $xml->startTag('libraries');
188     my $query = "SELECT id,parent_id,branchcode,title,description,ft_hide_patron_info,ft_search_groups_opac,ft_search_groups_staff FROM library_groups";
189     my $sth = $dbh->prepare($query);
190     $sth->execute();
191     while (my @row = $sth->fetchrow_array) {
192         $xml->startTag('library');
193         $xml->dataElement('id',$row[0]);
194         $xml->dataElement('parent_id',$row[1]);
195         $xml->dataElement('branchcode',$row[2]);
196         $xml->dataElement('title',$row[3]);
197         $xml->dataElement('description',$row[4]);
198         $xml->dataElement('ft_hide_patron_info',$row[5]);
199         $xml->dataElement('ft_search_groups_opac',$row[6]);
200         $xml->dataElement('ft_search_groups_staff',$row[7]);
201         $xml->endTag('library');
202     }
203     $xml->endTag('libraries');
204     $xml->end();
205     close $fh;
206     return;
207 }
208
209 sub backup_preferences {
210     my $dbh = shift;
211     my $backupfile = shift;
212
213     open(my $fh, '>', $backupfile) or die "Could not open $backupfile!";
214     my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, );
215     $xml->xmlDecl('UTF-8');
216     $xml->startTag('preferences');
217     my $query = "SELECT variable,value FROM systempreferences WHERE value != '' AND value IS NOT NULL";
218     my $sth = $dbh->prepare($query);
219     $sth->execute();
220     while (my @row = $sth->fetchrow_array) {
221         $xml->startTag('pref');
222         $xml->dataElement('variable',$row[0]);
223         $xml->dataElement('value',$row[1]);
224         $xml->endTag('pref');
225     }
226     $xml->endTag('preferences');
227     $xml->end();
228     close $fh;
229     return;
230 }
231
232 sub create_timestamp {
233     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
234     $year += 1900;
235     $mon = sprintf("%02s",$mon);
236     $mday = sprintf("%02s",$mday);
237     $hour = sprintf("%02s",$hour);
238     $min = sprintf("%02s",$min);
239     $sec = sprintf("%02s",$sec);
240     my $str = "$year$mon$mday$hour$min$sec";
241     return $str;
242 }
243
244 sub abort {
245     my $msg = shift;
246     print STDERR "$0: $msg", "\n";
247     print_usage();
248     exit 1;
249 }
250
251 sub print_usage {
252     print <<_USAGE_;
253
254     mig export foo_a foo_b foo_c
255
256 _USAGE_
257 }
258