Verletzung von NOT NULL Constraints
[kivitendo-erp.git] / SL / Presenter.pm
index 6658184..61ddab4 100644 (file)
@@ -14,6 +14,8 @@ use SL::Presenter::Invoice;
 use SL::Presenter::Order;
 use SL::Presenter::Project;
 use SL::Presenter::Record;
+use SL::Presenter::Text;
+use SL::Presenter::Tag;
 
 sub get {
   return $::request->presenter;
@@ -41,6 +43,7 @@ sub render {
   croak "Unsupported type: " . $options->{type} unless $options->{type} =~ m/^(?:html|js|json)$/;
 
   # The "template" argument must be a string or a reference to one.
+  $template = ${ $template }                                       if ((ref($template) || '') eq 'REF') && (ref(${ $template }) eq 'SL::Presenter::EscapedText');
   croak "Unsupported 'template' reference type: " . ref($template) if ref($template) && (ref($template) !~ m/^(?:SCALAR|SL::Presenter::EscapedText)$/);
 
   # Look for the file given by $template if $template is not a reference.
@@ -61,7 +64,9 @@ sub render {
   # If no processing is requested then return the content.
   if (!$options->{process}) {
     # If $template is a reference then don't try to read a file.
-    return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if ref $template;
+    my $ref = ref $template;
+    return $template                                                                if $ref eq 'SL::Presenter::EscapedText';
+    return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if $ref eq 'SCALAR';
 
     # Otherwise return the file's content.
     my $file    = IO::File->new($source, "r") || croak("Template file ${source} could not be read");
@@ -121,6 +126,16 @@ sub escaped_text {
   return SL::Presenter::EscapedText->new(text => $text, is_escaped => 1);
 }
 
+sub escape_js {
+  my ($self, $text) = @_;
+
+  $text =~ s|\\|\\\\|g;
+  $text =~ s|\"|\\\"|g;
+  $text =~ s|\n|\\n|g;
+
+  return SL::Presenter::EscapedText->new(text => $text, is_escaped => 1);
+}
+
 1;
 
 __END__
@@ -194,6 +209,11 @@ If C<$template> is a reference to a scalar then the referenced
 scalar's content is used as the content to process. The C<type> option
 is not considered in this case.
 
+C<$template> can also be an instance of L<SL::Presenter::EscapedText>
+or a reference to such an instance. Both of these cases are handled
+the same way as if C<$template> were a reference to a scalar: its
+content is processed, and C<type> is not considered.
+
 Other reference types, unknown options and unknown arguments to the
 C<type> option cause the function to L<croak>.
 
@@ -282,6 +302,16 @@ It is safe to call C<escaped_text> on an instance of
 L<SL::Presenter::EscapedText>. This is a no-op (the same instance will
 be returned).
 
+=item C<escape_js $text>
+
+Returns a JavaScript-escaped version of C<$text>. Instead of a string
+an instance of the thin proxy-object L<SL::Presenter::EscapedText> is
+returned.
+
+It is safe to call C<escape> on an instance of
+L<SL::Presenter::EscapedText>. This is a no-op (the same instance will
+be returned).
+
 =item C<get_template>
 
 Returns the global instance of L<Template> and creates it if it