X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FInterface%2FCLI.pm;h=5faa8ca083638802c18789c3c45271a91c2f8d52;hp=a3bf92d5fde33faed6cae921ee9484a3df49e7cb;hb=919e930aa9279b3c5cd12b593889cd6de79d67bf;hpb=3ef62a0570055da710328937e7f65dbb2c027c62 diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm index a3bf92d5f..5faa8ca08 100644 --- a/rt/lib/RT/Interface/CLI.pm +++ b/rt/lib/RT/Interface/CLI.pm @@ -1,25 +1,58 @@ -# $Header: /home/cvs/cvsroot/freeside/rt/lib/RT/Interface/CLI.pm,v 1.1 2002-08-12 06:17:08 ivan Exp $ -# RT is (c) 1996-2001 Jesse Vincent +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +# +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Interface::CLI; - use strict; +use warnings; +use RT; - -BEGIN { - use Exporter (); - use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - - # set the version for version checking - $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker - - @ISA = qw(Exporter); - - # your exported package globals go here, - # as well as any optionally exported functions - @EXPORT_OK = qw(&CleanEnv &LoadConfig &DBConnect - &GetCurrentUser &GetMessageContent &debug); -} +use base 'Exporter'; +our @EXPORT_OK = qw(CleanEnv GetCurrentUser GetMessageContent debug loc); =head1 NAME @@ -27,43 +60,40 @@ BEGIN { =head1 SYNOPSIS - use lib "!!RT_LIB_PATH!!"; - use lib "!!RT_ETC_PATH!!"; + use lib "/path/to/rt/libraries/"; - use RT::Interface::CLI qw(CleanEnv LoadConfig DBConnect - GetCurrentUser GetMessageContent); + use RT::Interface::CLI qw(CleanEnv + GetCurrentUser GetMessageContent loc); #Clean out all the nasties from the environment CleanEnv(); - #Load etc/config.pm and drop privs - LoadConfig(); + #let's talk to RT' + use RT; - #Connect to the database and get RT::SystemUser and RT::Nobody loaded - DBConnect(); + #Load RT's config file + RT::LoadConfig(); + # Connect to the database. set up loggign + RT::Init(); #Get the current user all loaded my $CurrentUser = GetCurrentUser(); + print loc('Hello!'); # Synonym of $CuurentUser->loc('Hello!'); + =head1 DESCRIPTION =head1 METHODS -=begin testing - -ok(require RT::TestHarness); -ok(require RT::Interface::CLI); - -=end testing =cut =head2 CleanEnv -Removes some of the nastiest nasties from the user\'s environment. +Removes some of the nastiest nasties from the user's environment. =cut @@ -77,37 +107,11 @@ sub CleanEnv { -=head2 LoadConfig - -Loads RT's config file and then drops setgid privileges. - -=cut - -sub LoadConfig { - - #This drags in RT's config.pm - use config; - -} +{ + my $CurrentUser; # shared betwen GetCurrentUser and loc -=head2 DBConnect - - Calls RT::Init, which creates a database connection and then creates $RT::Nobody - and $RT::SystemUser - -=cut - - -sub DBConnect { - use RT; - RT::Init(); -} - - - -# {{{ sub GetCurrentUser =head2 GetCurrentUser @@ -115,30 +119,44 @@ sub DBConnect { loaded with that user. if the current user isn't found, returns a copy of RT::Nobody. =cut + sub GetCurrentUser { - my ($Gecos, $CurrentUser); - require RT::CurrentUser; #Instantiate a user object - $Gecos=(getpwuid($<))[0]; + my $Gecos= ($^O eq 'MSWin32') ? Win32::LoginName() : (getpwuid($<))[0]; #If the current user is 0, then RT will assume that the User object #is that of the currentuser. - $CurrentUser = new RT::CurrentUser(); + $CurrentUser = RT::CurrentUser->new(); $CurrentUser->LoadByGecos($Gecos); unless ($CurrentUser->Id) { $RT::Logger->debug("No user with a unix login of '$Gecos' was found. "); } + return($CurrentUser); } -# }}} -# {{{ sub GetMessageContent + + +=head2 loc + + Synonym of $CurrentUser->loc(). + +=cut + +sub loc { + die "No current user yet" unless $CurrentUser ||= RT::CurrentUser->new; + return $CurrentUser->loc(@_); +} + +} + + =head2 GetMessageContent @@ -165,9 +183,9 @@ sub GetMessageContent { #Load the sourcefile, if it's been handed to us if ($source) { - open (SOURCE, "<$source"); - @lines = (); - close (SOURCE); + open( SOURCE, '<', $source ) or die $!; + @lines = () or die $!; + close (SOURCE) or die $!; } elsif ($args{'Content'}) { @lines = split('\n',$args{'Content'}); @@ -179,36 +197,34 @@ sub GetMessageContent { for (@lines) { print $fh $_; } - close ($fh); + close ($fh) or die $!; #Edit the file if we need to if ($edit) { unless ($ENV{'EDITOR'}) { - $RT::Logger->crit('No $EDITOR variable defined'. "\n"); + $RT::Logger->crit('No $EDITOR variable defined'); return undef; } system ($ENV{'EDITOR'}, $filename); } - open (READ, "<$filename"); + open( READ, '<', $filename ) or die $!; my @newlines = (); - close (READ); + close (READ) or die $!; unlink ($filename) unless (debug()); return(\@newlines); } -# }}} -# {{{ sub debug sub debug { my $val = shift; my ($debug); if ($val) { - $RT::Logger->debug($val."\n"); + $RT::Logger->debug($val); if ($debug) { print STDERR "$val\n"; } @@ -218,7 +234,21 @@ sub debug { } } -# }}} +sub ShowHelp { + my $self = shift; + my %args = @_; + require Pod::Usage; + Pod::Usage::pod2usage( + -message => $args{'Message'}, + -exitval => $args{'ExitValue'} || 0, + -verbose => 99, + -sections => $args{'Sections'} || ($args{'ExitValue'} + ? 'NAME|USAGE' + : 'NAME|USAGE|OPTIONS|DESCRIPTION' + ), + ); +} +RT::Base->_ImportOverlays(); 1;