RT# 81692 Update use of deprecated callback element in RT
authorMitch Jackson <mitch@freeside.biz>
Sun, 31 Mar 2019 16:26:28 +0000 (12:26 -0400)
committerMitch Jackson <mitch@freeside.biz>
Sun, 31 Mar 2019 16:51:41 +0000 (12:51 -0400)
rt/lib/RT/Interface/Web/Request.pm
rt/share/html/Elements/Header

index 1cd08df..9ed7610 100644 (file)
@@ -85,6 +85,12 @@ By default is false, otherwise runs callbacks only once per
 process of the server. Such callbacks can be used to fill
 structures.
 
+=item ReturnComponentOutput
+
+By default, callback returns the status codes of all rendered components, and
+prints the rendered components to STDOUT. If this argument is true, callback
+returns the rendered components instead of printing them to STDOUT.
+
 =back
 
 Searches for callback components in
@@ -102,6 +108,7 @@ sub callback {
 
     my $name = delete $args{'CallbackName'} || 'Default';
     my $page = delete $args{'CallbackPage'} || $self->callers(0)->path;
+    my $use_scomp = delete $args{'ReturnComponentOutput'} ? 1 : 0;
     unless ( $page ) {
         $RT::Logger->error("Couldn't get a page name for callbacks");
         return;
@@ -134,10 +141,16 @@ sub callback {
     }
 
     my @rv;
+    my $scomp_out;
     foreach my $cb ( @$callbacks ) {
-        push @rv, scalar $self->comp( $cb, %args );
+        if ( $use_scomp ) {
+            no warnings 'uninitialized';
+            $scomp_out .= $self->scomp( $cb, %args );
+        } else {
+            push @rv, scalar $self->comp( $cb, %args );
+        }
     }
-    return @rv;
+    return $use_scomp ? $scomp_out : @rv;
 }
 
 sub clear_callback_cache {
index 23007dd..58136c5 100755 (executable)
@@ -148,8 +148,11 @@ jQuery(document).ready(function(){
 
 }
 
-# $m->callback( %ARGS, CallbackName => 'Head' );
-$head .= $m->scomp( '/Elements/Callback', _CallbackName => 'Head', %ARGS );
+$head .= $m->callback(
+  %ARGS,
+  CallbackName => 'Head',
+  ReturnComponentOutput => 1,
+);
 
 #XXX $head .= <& /Elements/Framekiller &>;