cvsuser 05/10/28 10:18:55
Modified: App-Widget/lib/App Widget.pm
Log:
added set_alternative_content()
Revision Changes Path
1.8 +54 -4 p5ee/App-Widget/lib/App/Widget.pm
Index: Widget.pm
===================================================================
RCS file: /cvs/public/p5ee/App-Widget/lib/App/Widget.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Widget.pm 9 Aug 2005 19:21:27 -0000 1.7
+++ Widget.pm 28 Oct 2005 17:18:54 -0000 1.8
@@ -111,8 +111,8 @@
sub content {
&App::sub_entry if ($App::trace);
my $self = shift;
-
my ($html);
+
eval {
$html = $self->html();
};
@@ -147,6 +147,13 @@
EOF
}
+ if (defined $self->{content}) {
+ my $content = $self->{content};
+ $self->{content} = "";
+ &App::sub_exit($content) if ($App::trace);
+ return($content);
+ }
+
my ($title, $bodyoptions, $w, $var, $value);
$title = "Widget";
@@ -240,6 +247,33 @@
}
#############################################################################
+# set_alternative_content()
+#############################################################################
+
+=head2 set_alternative_content()
+
+ * Signature: $service->set_alternative_content($content, $extension);
+ * Param: $content string
+ * Param: $extension string
+ * Return: void
+ * Throws: App::Exception
+ * Since: 0.01
+
+ Sample Usage:
+
+ $service->set_alternative_content("red,green,blue\n1,2,3\n", "csv");
+
+=cut
+
+sub set_alternative_content {
+ &App::sub_entry if ($App::trace);
+ my ($self, $content, $extension) = @_;
+ $self->{content} = $content;
+ $self->{extension} = $extension;
+ &App::sub_exit() if ($App::trace);
+}
+
+#############################################################################
# content_type()
#############################################################################
@@ -257,9 +291,25 @@
=cut
+my %content_type = (
+ html => "text/html",
+ txt => "text/plain",
+ pdf => "application/pdf\nContent-disposition: attachment;
filename=\"data.pdf\"",
+ xls => "application/vnd.ms-excel\nContent-disposition: attachment;
filename=\"data.xls\"",
+ xml => "application/xml",
+ csv => "application/octet-stream\nContent-disposition: attachment;
filename=\"data.csv\"",
+ bin => "application/octet-stream\nContent-disposition: attachment;
filename=\"data.bin\"",
+);
+
sub content_type {
&App::sub_entry if ($App::trace);
- my $content_type = 'text/html';
+ my ($self) = @_;
+ my $extension = $self->{extension} || "html";
+ delete $self->{extension} if (!defined $self->{content});
+ my $content_type = $content_type{$extension};
+ if (!$content_type) {
+ $content_type = $content_type{bin};
+ }
&App::sub_exit($content_type) if ($App::trace);
return($content_type);
}