webgui/sbin/installClass.pl

178 lines
4 KiB
Perl
Executable file

#!/usr/bin/env perl
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use strict;
use File::Basename ();
use File::Spec;
my $webguiRoot;
BEGIN {
$webguiRoot = File::Spec->rel2abs(File::Spec->catdir(File::Basename::dirname(__FILE__), File::Spec->updir));
unshift @INC, File::Spec->catdir($webguiRoot, 'lib');
}
use Getopt::Long;
use Pod::Usage;
use WebGUI::Pluggable;
use WebGUI::Session;
$|++;
# Get options
my ( $configFile, $remove, $check, $upgrade, $help, $man );
GetOptions(
'configFile=s' => \$configFile,
'remove' => \$remove,
'check' => \$check,
'upgrade' => \$upgrade,
'help' => \$help,
'man' => \$man,
);
# Get arguments
my $class = $ARGV[0];
pod2usage( -verbose => 1 )
if $help;
pod2usage( -verbose => 2 )
if $man;
pod2usage("$0: Must specify a configFile")
if !$configFile;
if( ! -e $configFile ) {
my $possible_configFile = File::Spec->catfile($webguiRoot, 'etc', $configFile);
$configFile = $possible_configFile if -e $possible_configFile;
}
die "Config file '$configFile' does not exist!\n" if ! -e $configFile;
foreach my $libDir ( readLines( "preload.custom" ) ) {
if ( !-d $libDir ) {
warn "WARNING: Not adding lib directory '$libDir' from preload.custom: Directory does not exist.\n";
next;
}
unshift @INC, $libDir;
}
# Open the session
my $session = WebGUI::Session->open( $webguiRoot, $configFile );
$session->user( { userId => 3 } );
# Install or uninstall the asset
WebGUI::Pluggable::load($class);
if ($check) {
if ( $class->isInstalled($session) ) {
print "$class is installed!\n";
}
else {
print "$class is NOT installed!\n";
}
}
elsif ($remove) {
print "Removing $class... ";
if ( !$class->isInstalled($session) ) {
die "Can't remove $class because: Not installed\n";
}
$class->uninstall($session);
print "DONE!\n";
print "Please restart Apache.\n";
}
elsif ( $upgrade || $class->isInstalled($session) ) {
print "Upgrading $class... ";
$class->upgrade($session);
print "DONE!\n";
print "Please restart Apache.\n";
}
else {
print "Installing $class... ";
$class->install($session);
print "DONE!\n";
print "Please restart Apache.\n";
}
# End the session
$session->var->end;
$session->close;
#-------------------------------------------------
sub readLines {
my $file = shift;
my @lines;
if (open(my $fh, '<', $file)) {
while (my $line = <$fh>) {
$line =~ s/#.*//;
$line =~ s/^\s+//;
$line =~ s/\s+$//;
next if !$line;
push @lines, $line;
}
close $fh;
}
return @lines;
}
__END__
=head1 NAME
installClass.pl -- Run class install methods
=head1 SYNOPSIS
installClass.pl [--remove|--check|--upgrade] <class> --configFile=<configFile>
=head1 DESCRIPTION
This helper script installs a class that is using the correct interface.
If your class has not told you to use this script, then it probably won't work!
=head1 ARGUMENTS
=over 4
=item class
The class name of the asset to install. Something like WebGUI::Asset::Yourasset
=back
=head1 OPTIONS
=over 4
=item check
If specified, will check if the class is installed or not.
=item upgrade
If specified, will upgrade the class.
=item remove
If specified, will uninstall the class.
=item configFile
The configuration file for the site to install the class into
=back
=head1 SEE ALSO
WebGUI::AssetAspect::Installable