package EPrints::Plugin::Screen::RequestTweetStreamExport; @ISA = ( 'EPrints::Plugin::Screen::Workflow' ); use strict; sub new { my( $class, %params ) = @_; my $self = $class->SUPER::new(%params); $self->{actions} = [qw/ queue_export export_redir export /]; $self->{icon} = "tweetstream_package.png"; $self->{appears} = [ { place => "dataobj_actions", position => 1600, }, { place => "tweepository_tools_on_summary_page", position => 300, }, ]; return $self; } sub can_be_viewed { my( $self ) = @_; return 0 unless $self->{processor}->{dataset}->id eq 'tweetstream'; return $self->allow( "tweetstream/export" ); } sub allow_export_redir { my ($self) = @_; return 0 unless (-e $self->{processor}->{dataobj}->export_package_filepath); return $self->can_be_viewed; } sub allow_export { my ($self) = @_; return 0 unless (-e $self->{processor}->{dataobj}->export_package_filepath); return $self->can_be_viewed; } sub allow_queue_export { my ($self) = @_; return 0 unless ($self->{processor}->{dataobj}->value('status') eq 'active'); return $self->can_be_viewed; } sub render { my( $self ) = @_; my $session = $self->{session}; my $ts = $self->{processor}->{dataobj}; if ($ts->value('status') eq 'active') { return $self->render_active; } else { return $self->render_non_active; } } sub render_active { my( $self ) = @_; my $session = $self->{session}; my $ts = $self->{processor}->{dataobj}; my $div = $session->make_element( "div", class=>"ep_block" ); $div->appendChild($self->html_phrase('preamble')); if ($ts->pending_package_request || $ts->running_package_request) { $div->appendChild($self->html_phrase('package_pending')); } else { my $file = $ts->export_package_filepath; if (-e $file) { $div->appendChild($self->_render_package_details); } else { $div->appendChild($self->html_phrase('package_absent')); } if ($self->allow_queue_export) { $div->appendChild( $self->html_phrase('generate_preamble')); $div->appendChild( $self->form_with_buttons(queue_export => $self->phrase('queue_export'))); } } # $div->appendChild( $self->html_phrase("sure_delete", # title=>$self->{processor}->{dataobj}->render_description() ) ); # return( $div ); } sub render_non_active { my ($self) = @_; my $session = $self->{session}; my $ts = $self->{processor}->{dataobj}; my $div = $session->make_element( "div", class=>"ep_block" ); $div->appendChild($self->html_phrase('non_active_preamble')); my $file = $ts->export_package_filepath; if (-e $file) { $div->appendChild($self->_render_package_details); } else { $div->appendChild($self->html_phrase('non_active_package_absent')); } return $div; } sub _render_package_details { my ($self) = @_; my $session = $self->{session}; my $ts = $self->{processor}->{dataobj}; my $file = $ts->export_package_filepath; #sanity check return $self->repository->xml->create_document_fragment unless -e $file; my $size = -s $file; if ($size >= (1024 * 1024)) { $size = sprintf("%.1f", ($size / (1024 * 1024))) . ' MB'; } elsif ($size >= 1024) { $size = sprintf("%.1f", ($size / 1024 )) . ' KB'; } $size = $session->make_text($size); my $mtime = (stat( $file ))[9]; my $date = $session->make_text(scalar localtime($mtime)); return $self->html_phrase('package_exists', filesize => $size, datestamp => $date, downloadbutton => $self->form_with_buttons( export_redir => $self->phrase('export_redir') ) ); } sub form_with_buttons { my ($self, %buttons) = @_; my $form= $self->render_form; $form->appendChild( $self->{session}->render_action_buttons( %buttons) ); return $form; } #Queue up the export of the tweetstream sub action_queue_export { my( $self ) = @_; my $ds = $self->repository->dataset('tsexport'); my $tweetstreamid = $self->{processor}->{dataobj}->id; $ds->create_object( $self->repository, { tweetstream => $tweetstreamid } ); $self->{processor}->add_message( "message", $self->html_phrase( "export_queued" ) ); #$self->{processor}->{screenid} = $self->{processor}->{dataobj}->view_screen; } sub action_export { my( $self ) = @_; $self->{processor}->{tweetstream_subscreen} = "export"; return; } sub wishes_to_export { my( $self ) = @_; return 0 unless $self->{processor}->{tweetstream_subscreen} eq "export"; return 1; } #Send the file sub export { my( $self ) = @_; my $tweetstream = $self->{processor}->{dataobj}; my $filepath = $tweetstream->export_package_filepath; return unless -e $filepath; my $buffer; open ZIP, $filepath || return; binmode ZIP; binmode STDOUT; while ( read (ZIP, $buffer, 655536) and print STDOUT $buffer ) {}; close ZIP; } sub export_mimetype { return "text/plain"; } sub action_export_redir { my( $self ) = @_; $self->{processor}->{redirect} = $self->export_url(); } sub export_url { my( $self ) = @_; my $url = URI->new( $self->{session}->get_uri() . "/export_" . $self->{session}->get_repository->get_id . ".zip" ); my $tweetstreamid = $self->{processor}->{dataobj}->id; $url->query_form( screen => $self->{processor}->{screenid}, dataset => "tweetstream", dataobj => $tweetstreamid, _action_export => 1, ); return $url; } 1; =head1 COPYRIGHT =for COPYRIGHT BEGIN Copyright 2000-2011 University of Southampton. =for COPYRIGHT END =for LICENSE BEGIN This file is part of EPrints L. EPrints is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. EPrints is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with EPrints. If not, see L. =for LICENSE END