f5e7f8afa7c72d7da6ef00b28956dc9fa2b728fc
[migration-tools.git] / kmig.d / bin / mig-import
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 use XML::LibXML;
17 use List::Util qw( min max );
18 my $mig_bin = "$FindBin::Bin/";
19 use lib "$FindBin::Bin/";
20 use KMig;
21
22 my $dbh = KMig::db_connect();
23
24 #to do check for array passed and if not present then use tags 
25
26 my @taglist = @ARGV;
27 my $arg_list_length = scalar @taglist;
28 if($arg_list_length < 1) { @taglist = ("preferences","libraries"); } 
29 $MIGGITDIR =~ s/\/\//\//;
30
31 foreach my $restore (@taglist) {
32     my $restorefile;
33     if ($restore eq 'preferences') {
34         my $timestamp = most_recent_single($MIGGITDIR,'systempreferences');
35         $restorefile = $MIGGITDIR . 'systempreferences' . '.' . $timestamp . '.xml';
36         restore_preferences($dbh,$restorefile);
37     }
38 }
39
40 sub most_recent_single {
41     my $MGIGITDIR = shift;
42     my $str = shift;
43     my @files;
44     my @times;
45     opendir (DIR, $MIGGITDIR) or abort("could not open $MIGGITDIR");;
46     while (my $file = readdir(DIR)) {
47         if ($file =~ m/$str/) { push @files, $file; }
48     }
49     foreach my $file (@files) {
50         my @f = split /\./, $file;
51         push @times, $f[1];
52     }
53     closedir(DIR);
54     my $max = max @times; 
55     return $max;
56 }
57
58
59 sub restore_libraries {
60     my $dbh = shift;
61     my $restorefile = shift;
62     my $parser = XML::LibXML->new();
63     my $dom = $parser->parse_file($restore_file);
64
65     #with existant live data will probably need to put a truncate in here 
66
67     foreach my $node ($dom->findnodes('//library')) {
68         my $id = $node->findvalue('./id');
69         my $parent_id = $node->findvalue('./parent_id');
70         my $branchcode = sql_str($node->findvalue('./branchcode'));
71         my $title = sql_str($node->findvalue('./title'));
72         my $descr = sql_str($node->findvalue('./description'));
73         my $ft1 = $node->findvalue('./ft_hide_patron_info');
74         my $ft2 = $node->findvalue('./ft_search_groups_opac');
75         my $ft3 = $node->findvalue('./ft_search_groups_staff');
76         my $sth = $dbh->prepare($query);
77         my $query = "INSERT INTO library_groups (id,parent_id,branchcode,title,description,ft_hide_patron_info,ft_search_groups_opac,ft_search_groups_staff) VALUES ($id,$parent_id,$branchcode,$title,$descr,$ft1,$ft2,$ft3)";
78         $sth->execute();
79     }
80     return;
81 }
82
83 sub restore_preferences {
84     my $dbh = shift;
85     my $restore_file = shift;
86     my $parser = XML::LibXML->new();
87     my $dom = $parser->parse_file($restore_file);
88
89     foreach my $node ($dom->findnodes('//pref')) {
90         my $variable = sql_str($node->findvalue('./variable'));
91         my $value = sql_str($node->findvalue('./value'));
92         my $query = "UPDATE systempreferences SET value = $value WHERE variable = $variable";
93         my $sth = $dbh->prepare($query);
94         $sth->execute();
95     }
96     return;
97 }
98
99 sub sql_str {
100     my $str = shift;
101     if (!defined $str or $str eq '') { return ''; }
102     $str =~ s/'/''/g;
103     $str = '\'' . $str . '\'';
104     return $str;
105 }
106
107 sub abort {
108     my $msg = shift;
109     print STDERR "$0: $msg", "\n";
110     print_usage();
111     exit 1;
112 }
113
114 sub print_usage {
115     print <<_USAGE_;
116
117     mig import foo_a foo_b foo_c
118
119 _USAGE_
120 }
121