RT# 38217 Fix msg_template freeside-upgrade bug
[freeside.git] / FS / FS / msg_template.pm
index 2388aba..3b7c3aa 100644 (file)
@@ -239,7 +239,7 @@ Options are passed as a list of name/value pairs:
 
 =item cust_main
 
-Customer object
+Customer object (optional)
 
 =item object
 
@@ -280,13 +280,18 @@ sub prepare {
   my $cust_main = $opt{'cust_main'}; # or die 'cust_main required';
   my $object = $opt{'object'}; # or die 'object required';
 
-  # localization
-  my $locale = $cust_main->locale || '';
+  my $locale = $cust_main ? $cust_main->locale : '';
+
   warn "no locale for cust#".$cust_main->custnum."; using default content\n"
-    if $DEBUG and !$locale;
-  my $content = $self->content($cust_main->locale);
-  warn "preparing template '".$self->msgname."' to cust#".$cust_main->custnum."\n"
-    if($DEBUG);
+    if $DEBUG and $cust_main and !$locale;
+
+  my $content = $self->content( $locale );
+
+  warn sprintf(
+    "preparing template '%s' to cust#%s\n",
+    $self->msgname,
+    $cust_main ? $cust_main->custnum : 'none'
+  ) if $DEBUG;
 
   my $subs = $self->substitutions;
 
@@ -294,8 +299,11 @@ sub prepare {
   # create substitution table
   ###  
   my %hash;
-  my @objects = ($cust_main);
-  my @prefixes = ('');
+  my ( @objects, @prefixes );
+  if ( $cust_main ) {
+    @objects  = ( $cust_main );
+    @prefixes = ( '' );
+  }
   my $svc;
   if( ref $object ) {
     if( ref($object) eq 'ARRAY' ) {
@@ -407,11 +415,11 @@ sub prepare {
   my $from_addr = $self->from_addr;
 
   if ( !$from_addr ) {
+    my @agentnum = ( $cust_main->agentnum ) if $cust_main;
     if ( $opt{'from_config'} ) {
-      $from_addr = scalar( $conf->config($opt{'from_config'}, 
-                                         $cust_main->agentnum) );
+      $from_addr = scalar( $conf->config( $opt{'from_config'}, @agentnum ));
     }
-    $from_addr ||= $conf->invoice_from_full($cust_main->agentnum);
+    $from_addr ||= $conf->invoice_from_full( @agentnum );
   }
 #  my @cust_msg = ();
 #  if ( $conf->exists('log_sent_mail') and !$opt{'preview'} ) {
@@ -429,11 +437,11 @@ sub prepare {
                       ->format( HTML::TreeBuilder->new_from_content($body) )
                   );
   (
-    'custnum' => $cust_main->custnum,
-    'msgnum'  => $self->msgnum,
-    'from' => $from_addr,
-    'to'   => \@to,
-    'bcc'  => $self->bcc_addr || undef,
+    'custnum'   => $cust_main ? $cust_main->custnum : undef,
+    'msgnum'    => $self->msgnum,
+    'from'      => $from_addr,
+    'to'        => \@to,
+    'bcc'       => $self->bcc_addr || undef,
     'subject'   => $subject,
     'html_body' => $body,
     'text_body' => $text_body,
@@ -879,6 +887,25 @@ sub _upgrade_data {
   ###
   $self->_populate_initial_data;
 
+  ### Fix dump-email_to (needs to happen after _populate_initial_data)
+  if ($conf->config('dump-email_to')) {
+    # anyone who still uses dump-email_to should have just had this created
+    my ($msg_template) = qsearch('msg_template',{ msgname => 'System log' });
+    if ($msg_template) {
+      eval "use FS::log_email;";
+      die $@ if $@;
+      my $log_email = new FS::log_email {
+        'context' => 'Cron::backup',
+        'min_level' => 1,
+        'msgnum' => $msg_template->msgnum,
+        'to_addr' => $conf->config('dump-email_to'),
+      };
+      my $error = $log_email->insert;
+      die $error if $error;
+      $conf->delete('dump-email_to');
+    }
+  }
+
 }
 
 sub _populate_initial_data { #class method
@@ -887,19 +914,24 @@ sub _populate_initial_data { #class method
 
   eval "use FS::msg_template::InitialData;";
   die $@ if $@;
+  eval "use FS::upgrade_journal;";
+  die $@ if $@;
 
   my $initial_data = FS::msg_template::InitialData->_initial_data;
 
   foreach my $hash ( @$initial_data ) {
 
     next if $hash->{_conf} && $conf->config( $hash->{_conf} );
+    next if $hash->{_upgrade_journal} && FS::upgrade_journal->is_done( $hash->{_upgrade_journal} );
 
     my $msg_template = new FS::msg_template($hash);
     my $error = $msg_template->insert( @{ $hash->{_insert_args} || [] } );
     die $error if $error;
 
     $conf->set( $hash->{_conf}, $msg_template->msgnum ) if $hash->{_conf};
-  
+    FS::upgrade_journal->set_done( $hash->{_upgrade_journal} )
+      if $hash->{_upgrade_journal};
+
   }
 
 }