source: main/trunk/package-kits/scripts/perllib/Greenstone/Directory.pm@ 29683

Last change on this file since 29683 was 29683, checked in by Jeremy Symon, 9 years ago

Added option to delete sites/interfaces

File size: 1.9 KB
Line 
1package Greenstone::Directory;
2
3use strict;
4use warnings;
5use utf8;
6use base 'Exporter';
7
8use File::Path 'remove_tree';
9use Greenstone::Config;
10
11our $VERSION = 1.00;
12our @EXPORT = ( );
13
14sub new {
15 my ($parent, $class, $name, %args) = @_;
16 ref $class and die "Constructor used as object method\n";
17 defined $name or die "Must have a name\n";
18 my $self = bless (
19 {
20 name => $name,
21 parent => $parent,
22 },
23 $class
24 );
25 for my $param (keys %args) {
26 $self->{$param} = $args{$param};
27 }
28 return $self;
29}
30
31sub list {
32 my $parent = shift;
33 ref $parent and die "Static method called on object\n";
34 my $dirs = {};
35 my $dir = "$Greenstone::Config::GSDL3HOME/$parent";
36 opendir DH, $dir or die "Could not open directory '$dir'\n";
37 while (my $entry = readdir DH) {
38 # skip hidden files and current/parent directory
39 $entry =~ /^\./ and next;
40 # skip non-directories
41 -d "$dir/$entry" or next;
42 # We don't really need to store anything more than the fact that the directory exists
43 # So we just store nothing, which is enough to put the key in the hash
44 # (i.e. it acts as a hashset)
45 $dirs->{$entry} = ();
46 }
47 closedir DH;
48 return $dirs;
49}
50
51sub exists {
52 my $self = shift;
53 my $dirs = list $self->{parent};
54 return exists $dirs->{$self->{name}};
55}
56
57sub dir {
58 my $self = shift;
59 return "$Greenstone::Config::GSDL3HOME/$self->{parent}/$self->{name}";
60}
61
62sub create {
63 my $self = shift;
64 if ($self->exists) {
65 print STDERR "Site already exists\n";
66 return 0;
67 }
68 mkdir $self->dir or die "Failed to create directory: $!\n";
69 return 1;
70}
71
72sub delete {
73 my $self = shift;
74 unless ($self->exists) {
75 print STDERR "Site doesn't exist\n";
76 return 0;
77 }
78 remove_tree $self->dir or die "Failed to remove directory: $!\n";
79 return 1;
80}
81
821;
Note: See TracBrowser for help on using the repository browser.