rt 3.8.11
[freeside.git] / rt / lib / RT.pm
index ddfb041..4a20f9b 100644 (file)
@@ -1,40 +1,40 @@
 # BEGIN BPS TAGGED BLOCK {{{
-# 
+#
 # COPYRIGHT:
-# 
-# This software is Copyright (c) 1996-2009 Best Practical Solutions, LLC
-#                                          <jesse@bestpractical.com>
-# 
+#
+# This software is Copyright (c) 1996-2011 Best Practical Solutions, LLC
+#                                          <sales@bestpractical.com>
+#
 # (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
@@ -43,7 +43,7 @@
 # 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 }}}
 
 use strict;
@@ -57,39 +57,39 @@ use Cwd ();
 
 use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_INSTALL_MODE);
 
-our $VERSION = '3.8.8';
+our $VERSION = '3.8.11';
 
 
 
 our $BasePath = '/opt/rt3';
-our $EtcPath = 'etc';
-our $BinPath = 'bin';
-our $SbinPath = 'sbin';
-our $VarPath = 'var';
-our $PluginPath = 'plugins';
-our $LocalPath = 'local';
-our $LocalEtcPath = 'local/etc';
-our $LocalLibPath        =    'local/lib';
-our $LocalLexiconPath = 'local/po';
+our $EtcPath = '/opt/rt3/etc';
+our $BinPath = '/opt/rt3/bin';
+our $SbinPath = '/opt/rt3/sbin';
+our $VarPath = '/opt/rt3/var';
+our $PluginPath = '';
+our $LocalPath = '/opt/rt3/local';
+our $LocalEtcPath = '/opt/rt3/local/etc';
+our $LocalLibPath        =    '/opt/rt3/local/lib';
+our $LocalLexiconPath = '/opt/rt3/local/po';
 our $LocalPluginPath = $LocalPath."/plugins";
 
 
 # $MasonComponentRoot is where your rt instance keeps its mason html files
 
-our $MasonComponentRoot = 'share/html';
+our $MasonComponentRoot = '/var/www/freeside/rt';
 
 # $MasonLocalComponentRoot is where your rt instance keeps its site-local
 # mason html files.
 
-our $MasonLocalComponentRoot = 'local/html';
+our $MasonLocalComponentRoot = '/opt/rt3/local/html';
 
 # $MasonDataDir Where mason keeps its datafiles
 
-our $MasonDataDir = 'var/mason_data';
+our $MasonDataDir = '/usr/local/etc/freeside/masondata';
 
 # RT needs to put session data (for preserving state between connections
 # via the web interface)
-our $MasonSessionDir = 'var/session_data';
+our $MasonSessionDir = '/opt/rt3/var/session_data';
 
 unless (  File::Spec->file_name_is_absolute($EtcPath) ) {
 
@@ -180,6 +180,8 @@ L<preloads classes /InitClasses> and L<set up logging /InitLogging>.
 
 sub Init {
 
+    my @arg = @_;
+
     CheckPerlRequirements();
 
     InitPluginPaths();
@@ -188,7 +190,7 @@ sub Init {
     ConnectToDatabase();
     InitSystemObjects();
     InitClasses();
-    InitLogging(); 
+    InitLogging(@arg); 
     InitPlugins();
     RT->Config->PostLoadCheck;
 
@@ -215,6 +217,8 @@ Create the Logger object and set up signal handlers.
 
 sub InitLogging {
 
+    my %arg = @_;
+
     # We have to set the record separator ($, man perlvar)
     # or Log::Dispatch starts getting
     # really pissy, as some other module we use unsets it.
@@ -350,39 +354,45 @@ sub InitLogging {
                          ));
         }
     }
-    InitSignalHandlers();
+    InitSignalHandlers(%arg);
 }
 
 sub InitSignalHandlers {
 
+    my %arg = @_;
+
 # Signal handlers
 ## This is the default handling of warnings and die'ings in the code
 ## (including other used modules - maybe except for errors catched by
 ## Mason).  It will log all problems through the standard logging
 ## mechanism (see above).
 
-    $SIG{__WARN__} = sub {
-        # The 'wide character' warnings has to be silenced for now, at least
-        # until HTML::Mason offers a sane way to process both raw output and
-        # unicode strings.
-        # use 'goto &foo' syntax to hide ANON sub from stack
-        if( index($_[0], 'Wide character in ') != 0 ) {
-            unshift @_, $RT::Logger, qw(level warning message);
-            goto &Log::Dispatch::log;
-        }
-    };
+    unless ( $arg{'NoSignalHandlers'} ) {
 
-#When we call die, trap it and log->crit with the value of the die.
+        $SIG{__WARN__} = sub {
+            # The 'wide character' warnings has to be silenced for now, at least
+            # until HTML::Mason offers a sane way to process both raw output and
+            # unicode strings.
+            # use 'goto &foo' syntax to hide ANON sub from stack
+            if( index($_[0], 'Wide character in ') != 0 ) {
+                unshift @_, $RT::Logger, qw(level warning message);
+                goto &Log::Dispatch::log;
+            }
+        };
 
-    $SIG{__DIE__}  = sub {
-        # if we are not in eval and perl is not parsing code
-        # then rollback transactions and log RT error
-        unless ($^S || !defined $^S ) {
-            $RT::Handle->Rollback(1) if $RT::Handle;
-            $RT::Logger->crit("$_[0]") if $RT::Logger;
-        }
-        die $_[0];
-    };
+        #When we call die, trap it and log->crit with the value of the die.
+
+        $SIG{__DIE__}  = sub {
+            # if we are not in eval and perl is not parsing code
+            # then rollback transactions and log RT error
+            unless ($^S || !defined $^S ) {
+                $RT::Handle->Rollback(1) if $RT::Handle;
+                $RT::Logger->crit("$_[0]") if $RT::Logger;
+            }
+            die $_[0];
+        };
+
+    }
 }
 
 
@@ -391,13 +401,20 @@ sub CheckPerlRequirements {
         die sprintf "RT requires Perl v5.8.3 or newer.  Your current Perl is v%vd\n", $^V; 
     }
 
-    local ($@);
-    eval { 
-        my $x = ''; 
-        my $y = \$x;
-        require Scalar::Util; Scalar::Util::weaken($y);
-    };
-    if ($@) {
+    # use $error here so the following "die" can still affect the global $@
+    my $error;
+    {
+        local $@;
+        eval {
+            my $x = '';
+            my $y = \$x;
+            require Scalar::Util;
+            Scalar::Util::weaken($y);
+        };
+        $error = $@;
+    }
+
+    if ($error) {
         die <<"EOF";
 
 RT requires the Scalar::Util module be built with support for  the 'weaken'
@@ -477,7 +494,10 @@ sub InitClasses {
         my $scrips = RT::Scrips->new($RT::SystemUser);
         $scrips->Limit( FIELD => 'Stage', OPERATOR => '!=', VALUE => 'Disabled' );
         while ( my $scrip = $scrips->Next ) {
-            $scrip->LoadModules;
+            local $@;
+            eval { $scrip->LoadModules } or
+                $RT::Logger->error("Invalid Scrip ".$scrip->Id.".  Unable to load the Action or Condition.  ".
+                                   "You should delete or repair this Scrip in the admin UI.\n$@\n");
         }
 
        foreach my $class ( grep $_, RT->Config->Get('CustomFieldValuesSources') ) {
@@ -693,9 +713,7 @@ L<DBIx::SearchBuilder>
 
 =cut
 
-eval "require RT_Vendor";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT_Vendor.pm});
-eval "require RT_Local";
-die $@ if ($@ && $@ !~ qr{^Can't locate RT_Local.pm});
+require RT::Base;
+RT::Base->_ImportOverlays();
 
 1;