package Gantry::Conf::Provider::PerlSetVar; ##################################################################### # # Name : Gantry::Conf::Provider::PerlSetVar; # Author : Frank Wiles # # Description : Provider that allows the application admin to # configure via PerlSetVar's in the httpd.conf. # ##################################################################### use strict; use warnings; use base qw(Gantry::Conf::Provider); use Carp; #------------------------------------------------ # config #------------------------------------------------ # This loads our configuration from the # httpd.conf's PerlSetVars #------------------------------------------------ sub config { my $self = shift; my $instance = shift; my $instance_ref = shift; # Make sure we have an instance croak "Gantry::Conf ERROR - No instance given to ". "Gantry::Conf::Provider::PerlSetVar::config()" if !$instance or $instance eq ''; my $load_parameters = $$instance_ref{LoadParameters}; croak "Gantry::Conf ERROR - No LoadParameters defined for instance ". "'$instance'" if !$load_parameters or $load_parameters eq ''; # Temp hash to return to caller my %return; # Check to see if we're in a mod_perl environment if( $ENV{MOD_PERL} ) { my $r; # Load the proper modules depending on if we're in mod_perl 1 or 2 if( $ENV{MOD_PERL_API_VERSION} >= 2 ) { require Apache2::RequestUtil; $r = Apache2::RequestUtil->request; # Give a meaningful error message if( !defined( $r ) ) { croak "Gantry::Conf ERROR - Unable to load request from ". "Apache2::RequestUtil->request. Perhaps you need ". "to set Options +GlobalRequest in httpd.conf?"; } } else { require Apache; $r = Apache->request; if( !defined( $r ) ) { croak "Gantry::Conf ERROR - Unable to load request from ". "Apache->request."; } } # Load each PerlSetVar defined in our instance foreach my $p ( split( /\s+/, $load_parameters ) ) { $return{$p} = $r->dir_config($p); } } else { ############################################### # Since we are not in a mod_perl environment # we need to parse the httpd.conf file and # determine what PerlSetVar's apply to this # application ############################################### # Make sure we have a config file to use and that it is # readable my $httpd_conf = $$instance_ref{ApacheConfigFile}; if( !-e $httpd_conf ) { croak "Gantry::Conf ERROR - ApacheConfigFile '$httpd_conf' for ". "instance '$instance' does not exist."; } if( !-r $httpd_conf ) { croak "Gantry::Conf ERROR - ApacheConfigFile '$httpd_conf' for ". "instance '$instance' is not readable. Check permissions."; } } return( \%return ); } # END config 1; __END__ =head1 NAME Gantry::Conf::Provider::PerlSetVar - Configure via PerlSetVar's in httpd.conf =head1 SYNOPSIS =head1 DESCRIPTION =head1 METHODS =over 4 =item config Returns config based on set vars in an httpd.conf excerpt. =back =head1 SEE ALSO Gantry(3), Gantry::Conf(3), Gantry::Conf::Tutorial(3), Ganty::Conf::FAQ(3), Apache2::RequestUtil(3), Apache2::ServerUtil(3) =head1 LIMITATIONS =head1 AUTHOR Frank Wiles =head1 COPYRIGHT and LICENSE Copyright (c) 2006, Revolution Systems, LLC. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available. =cut