File Coverage

blib/lib/WebEditor/OldFeatures/AdminExport.pm
Criterion Covered Total %
statement 12 64 18.7
branch 0 26 0.0
condition 0 6 0.0
subroutine 4 7 57.1
pod 0 3 0.0
total 16 106 15.0


line stmt bran cond sub pod time code
1             package WebEditor::OldFeatures::AdminExport;
2              
3 1     1   116727 use strict;
  1         3  
  1         38  
4 1     1   6 use vars qw($VERSION);
  1         2  
  1         67  
5             $VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);
6              
7 1     1   5 use CGI qw(param);
  1         2  
  1         9  
8 1     1   129 use Archive::Tar;
  1         2  
  1         843  
9              
10             sub do_export {
11 0     0 0   my $self = shift;
12 0           my $c = $self->C;
13              
14 0           my $tarfilename = "backup_".get_date().".tgz";
15 0           my $tarfile = $c->paths->cgidir."/backup/".$tarfilename;
16 0           my @files;
17             my $file;
18              
19 0 0         opendir DIR, $c->paths->database
20             or die "Can't open directory " . $c->paths->database . ": $!";
21 0           while (defined($file = readdir(DIR))) {
22 0 0         next if $file =~ /^\.|CVS/i; # ignore hidden files
23 0 0         push @files, $file if not -d $c->paths->database."/".$file;
24             }
25 0           closedir DIR;
26              
27 0 0         opendir DIR, $c->paths->database."/content"
28             or die "Can't open directory " . $c->paths->database . "/content: $!";
29 0           while (defined($file = readdir(DIR))) {
30 0 0         next if $file =~ /^\.|CVS/i; # ignore hidden files
31 0 0         push @files, "content/".$file if not -d $c->paths->database."/content/".$file;
32             }
33 0           closedir DIR;
34              
35 0           my $tar = Archive::Tar->new();
36 0 0         chdir $c->paths->database or die "Can't chdir: $!";
37 0           my $ok = $tar->add_files(@files);
38 0   0       $ok = $ok && $tar->add_data(".theanswer","42");
39 0 0 0       if (!$tar->write($tarfile,9) || !$ok) {
40 0           print "kann Archivdatei nicht erzeugen: ".$tar->error;
41             } else {
42 0           print "Archivdatei \"$tarfilename\" erzeugt.
\n";
43             #XXX kann man überhaupt auf dieses Verzeichnis zugreifen???
44 0           print "Bitte hier herunterladen und gut aufbewahren.
\n";
45             }
46 0           chdir $c->paths->cgidir;
47             }
48              
49             sub do_import {
50 0     0 0   my $self = shift;
51 0           my $c = $self->C;
52              
53 0 0         if (!param('tarfile')) {
54 0           print qq~
55 0          
56             Backup-Datei:
57            
58            
59            
60            
61            

~;
62             } else {
63 0           require Archive::Tar;
64 0           my $uploadfile = param('tarfile');
65 0           my $tarfile = $c->paths->cgidir."/backup/upload.tgz";
66 0 0         open(BACKUP,">$tarfile") or die "Can't write to $tarfile: $!";
67 0           binmode BACKUP;
68 0           while (<$uploadfile>) {
69 0           print BACKUP $_;
70             }
71 0           close BACKUP;
72 0           print "File-upload abgeschlossen. $tarfile
";
73 0           my $tar = Archive::Tar->new();
74 0           $tar->read($tarfile);
75 0 0         if ($tar->get_content(".theanswer") =~ "42") {
76 0           $tar->remove(".theanswer");
77 0 0         chdir $c->paths->database
78             or die "Can't chdir to " . $c->paths->database . ": $!";
79 0 0         if (!$tar->extract_archive($tarfile)) {
80 0           print "geht nich: " . $tar->error();
81             } else {
82 0           print "Datenfiles extrahiert.
";
83             };
84             } else {
85 0           print "Dies scheint keine gültige Backup-datei zu sein!
\n";
86 0           print "Es wurden keine Dateien extrahiert.
\n";
87             }
88 0           chdir $c->paths->cgidir;
89             }
90             }
91              
92             ####################################################################
93             #
94             # general subs
95             #
96             sub get_date {
97             # Return time as ISO 8601 date from given time in days
98 0     0 0   my $time = time;
99 0           my @l = localtime $time;
100 0           sprintf("%04d-%02d-%02d-%02d%02d",
101             $l[5]+1900, $l[4]+1, $l[3],
102             $l[2], $l[1], $l[0]);
103             }
104              
105             1;