diff --git a/lib/WebGUI/PassiveAnalytics/Flow.pm b/lib/WebGUI/PassiveAnalytics/Flow.pm
index 02e7fed8c..10a4c33ea 100644
--- a/lib/WebGUI/PassiveAnalytics/Flow.pm
+++ b/lib/WebGUI/PassiveAnalytics/Flow.pm
@@ -12,6 +12,7 @@ use WebGUI::HTMLForm;
use WebGUI::Workflow;
use WebGUI::Workflow::Instance;
use WebGUI::User;
+use WebGUI::Text;
=head1 NAME
@@ -56,6 +57,44 @@ sub canView {
return $user->isInGroup( 3 );
}
+#----------------------------------------------------------------------------
+
+=head2 exportSomething ( session, sth, filename )
+
+Generates CSV data from the supplied statement handle and generates
+a temporary WebGUI::Storage object containing that data in the requested
+filename.
+
+This subroutine also does a setRedirect to the URL of the file in
+the storage object.
+
+=head3 session
+
+Session variable, to set the http redirect correctly.
+
+=head3 sth
+
+Statement handle for reading data and getting column names
+
+=head3 filename
+
+The name of the file to create inside the storage object.
+
+=cut
+
+sub exportSomething {
+ my ($session, $sth, $filename) = @_;
+ my $storage = WebGUI::Storage->createTemp($session);
+ my @columns = $sth->getColumnNames;
+ my $csvData = WebGUI::Text::joinCSV( @columns ). "\n";
+ while (my $row = $sth->hashRef()) {
+ my @row = @{ $row }{@columns};
+ $csvData .= WebGUI::Text::joinCSV(@row) . "\n";
+ }
+ $storage->addFileFromScalar($filename, $csvData);
+ $session->http->setRedirect($storage->getUrl($filename));
+}
+
#-------------------------------------------------------------------
=head2 www_deleteRule ( )
@@ -161,6 +200,11 @@ EOD
$steps .= '
| | Other | ';
my $ac = WebGUI::AdminConsole->new($session,'passiveAnalytics');
$ac->addSubmenuItem($session->url->page('op=passiveAnalytics;func=settings'), $i18n->get('Passive Analytics Settings'));
+ if (!$running) {
+ $ac->addSubmenuItem($session->url->page('op=passiveAnalytics;func=exportBucketData'), $i18n->get('Export bucket data'));
+ $ac->addSubmenuItem($session->url->page('op=passiveAnalytics;func=exportDeltaData'), $i18n->get('Export delta data'));
+ $ac->addSubmenuItem($session->url->page('op=passiveAnalytics;func=exportLogs'), $i18n->get('Export raw logs'));
+ }
return $ac->render($error.$f->print.$addmenu.$steps, 'Passive Analytics');
}
@@ -277,6 +321,51 @@ sub www_editRuleSave {
return www_editRuleflow($session);
}
+#-------------------------------------------------------------------
+
+=head2 www_exportBucketData ( )
+
+Dump the contents of the bucket log.
+
+=cut
+
+sub www_exportBucketData {
+ my ($session) = @_;
+ my $bucket = $session->db->read('select * from bucketLog order by userId, Bucket, timeStamp');
+ exportSomething($session, $bucket, 'bucketData.csv');
+ return "redirect";
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_exportDeltaData ( )
+
+Dump the contents of the delta log.
+
+=cut
+
+sub www_exportDeltaData {
+ my ($session) = @_;
+ my $delta = $session->db->read('select * from deltaLog order by userId, timeStamp');
+ exportSomething($session, $delta, 'deltaData.csv');
+ return "redirect";
+}
+
+#-------------------------------------------------------------------
+
+=head2 www_exportLogs ( )
+
+Dump the contents of the raw log.
+
+=cut
+
+sub www_exportLogs {
+ my ($session) = @_;
+ my $raw = $session->db->read('select * from passiveLog order by userId, timeStamp');
+ exportSomething($session, $raw, 'passiveData.csv');
+ return "redirect";
+}
+
#------------------------------------------------------------------
=head2 www_promoteRule ( session )
diff --git a/lib/WebGUI/i18n/English/PassiveAnalytics.pm b/lib/WebGUI/i18n/English/PassiveAnalytics.pm
index 01747ca57..1a0e9367e 100644
--- a/lib/WebGUI/i18n/English/PassiveAnalytics.pm
+++ b/lib/WebGUI/i18n/English/PassiveAnalytics.pm
@@ -129,6 +129,24 @@ home\?func=match, or
context => q|Error displayed when a user enters in a bad regular expression. This label will be followed by the error from perl.|
},
+ 'Export bucket data' => {
+ message => q|Export bucket data|,
+ lastUpdated => 0,
+ context => q|URL label to export data in CSV format|,
+ },
+
+ 'Export delta data' => {
+ message => q|Export delta data|,
+ lastUpdated => 0,
+ context => q|URL label to export data in CSV format|,
+ },
+
+ 'Export raw logs' => {
+ message => q|Export raw logs|,
+ lastUpdated => 0,
+ context => q|URL label to raw log data in CSV format|,
+ },
+
};
1;