#!/usr/bin/perl use strict; use warnings; use DBI; use Data::Dumper; use Env qw( HOME MYSQL_HOST MYSQL_TCP_PORT MYSQL_USER MYSQL_DATABASE MYSQL_PW MIGSCHEMA MIGBASEWORKDIR MIGBASEGITDIR MIGGITDIR MIGWORKDIR ); use open ':encoding(utf8)'; use Cwd 'abs_path'; use Cwd qw(getcwd); use FindBin; my $mig_bin = "$FindBin::Bin/"; use lib "$FindBin::Bin/"; use XML::Writer; use KMig; my $dbh = KMig::db_connect(); #to do check for array passed and if not present then use tags my @taglist = @ARGV; my $arg_list_length = scalar @taglist; if($arg_list_length < 1) { @taglist = ("preferences","authorisedvalues","libraries","borrowerattributes"); } $MIGGITDIR =~ s/\/\//\//; my $timestamp = create_timestamp(); foreach my $backup (@taglist) { my $backupfile; if ($backup eq 'preferences') { $backupfile = $MIGGITDIR . 'systempreferences' . '.' . $timestamp . '.xml'; backup_preferences($dbh,$backupfile); } if ($backup eq 'authorisedvalues') { $backupfile = $MIGGITDIR . 'authorised_values' . '.' . $timestamp . '.xml'; backup_authorised_values($dbh,$backupfile); $backupfile = $MIGGITDIR . 'authorised_value_categories' . '.' . $timestamp . '.xml'; backup_authorised_value_categories($dbh,$backupfile); } if ($backup eq 'borrowerattributes') { $backupfile = $MIGGITDIR . 'borrower_attribute_types' . '.' . $timestamp . '.xml'; backup_borrower_attribute_types($dbh,$backupfile); $backupfile = $MIGGITDIR . 'authorised_values_by_bat' . '.' . $timestamp . '.xml'; backup_authorised_values_by_bat($dbh,$backupfile); $backupfile = $MIGGITDIR . 'authorised_value_categories_by_bat' . '.' . $timestamp . '.xml'; backup_authorised_value_categories_by_bat($dbh,$backupfile); } if ($backup eq 'libraries') { $backupfile = $MIGGITDIR . 'libraries' . '.' . $timestamp . '.xml'; backup_libraries($dbh,$backupfile); } } sub backup_authorised_values { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('authorised_values'); my $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->startTag('value'); $xml->dataElement('category', $row[0]); $xml->dataElement('authvalue', $row[1]); $xml->dataElement('lib', $row[2]); $xml->dataElement('lib_opac', $row[3]); $xml->dataElement('image_url', $row[4]); $xml->endTag('value'); } $xml->endTag('authorised_values'); $xml->end(); close $fh; return; } sub backup_authorised_values_by_bat { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('authorised_values'); my $query = "SELECT category,authorised_value,lib,lib_opac,imageurl FROM authorised_values where category in (select category_code from borrower_attribute_types);"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->startTag('value'); $xml->dataElement('category', $row[0]); $xml->dataElement('authvalue', $row[1]); $xml->dataElement('lib', $row[2]); $xml->dataElement('lib_opac', $row[3]); $xml->dataElement('image_url', $row[4]); $xml->endTag('value'); } $xml->endTag('authorised_values'); $xml->end(); close $fh; return; } sub backup_authorised_value_categories { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('authorised_value_categories'); my $query = "SELECT category_name FROM authorised_value_categories"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->dataElement('value', $row[0]); } $xml->endTag('authorised_value_categories'); $xml->end(); close $fh; return; } sub backup_authorised_value_categories_by_bat { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('authorised_value_categories'); my $query = "SELECT category_name FROM authorised_value_categories WHERE category_name IN (select category_name from borrower_attribute_types)"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->dataElement('value', $row[0]); } $xml->endTag('authorised_value_categories'); $xml->end(); close $fh; return; } sub backup_borrower_attribute_types { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('borrower_attribute_types'); my $query = "SELECT code,description,repeatable,opac_display,opac_editable,staff_searchable,authorised_value_category,display_checkout,category_code,class FROM borrower_attribute_types"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->startTag('value'); $xml->dataElement('code', $row[0]); $xml->dataElement('description', $row[1]); $xml->dataElement('repeat', $row[2]); $xml->dataElement('opac_display', $row[3]); $xml->dataElement('staff_searchable', $row[4]); $xml->dataElement('auth_value_cat', $row[5]); $xml->dataElement('display_checkout', $row[6]); $xml->dataElement('category_code', $row[7]); $xml->dataElement('class', $row[8]); $xml->endTag('value'); } $xml->endTag('borrower_attribute_types'); $xml->end(); close $fh; return; } sub backup_libraries { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('libraries'); my $query = "SELECT id,parent_id,branchcode,title,description,ft_hide_patron_info,ft_search_groups_opac,ft_search_groups_staff FROM library_groups"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->startTag('library'); $xml->dataElement('id',$row[0]); $xml->dataElement('parent_id',$row[1]); $xml->dataElement('branchcode',$row[2]); $xml->dataElement('title',$row[3]); $xml->dataElement('description',$row[4]); $xml->dataElement('ft_hide_patron_info',$row[5]); $xml->dataElement('ft_search_groups_opac',$row[6]); $xml->dataElement('ft_search_groups_staff',$row[7]); $xml->endTag('library'); } $xml->endTag('libraries'); $xml->end(); close $fh; return; } sub backup_preferences { my $dbh = shift; my $backupfile = shift; open(my $fh, '>', $backupfile) or die "Could not open $backupfile!"; my $xml = XML::Writer->new(OUTPUT => $fh, DATA_MODE => 1, DATA_INDENT => 2, ); $xml->xmlDecl('UTF-8'); $xml->startTag('preferences'); my $query = "SELECT variable,value FROM systempreferences WHERE value != '' AND value IS NOT NULL"; my $sth = $dbh->prepare($query); $sth->execute(); while (my @row = $sth->fetchrow_array) { $xml->startTag('pref'); $xml->dataElement('variable',$row[0]); $xml->dataElement('value',$row[1]); $xml->endTag('pref'); } $xml->endTag('preferences'); $xml->end(); close $fh; return; } sub create_timestamp { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon = sprintf("%02s",$mon); $mday = sprintf("%02s",$mday); $hour = sprintf("%02s",$hour); $min = sprintf("%02s",$min); $sec = sprintf("%02s",$sec); my $str = "$year$mon$mday$hour$min$sec"; return $str; } sub abort { my $msg = shift; print STDERR "$0: $msg", "\n"; print_usage(); exit 1; } sub print_usage { print <<_USAGE_; mig export foo_a foo_b foo_c _USAGE_ }