########################################################################### # # HtmlToExpediteeAction.pm -- # A component of the Greenstone digital library software # from the New Zealand Digital Library Project at the # University of Waikato, New Zealand. # # Copyright (C) 2009 New Zealand Digital Library Project # # This program is free software; you can redistr te it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # ########################################################################### package HtmlToExpediteeAction; use strict; use cgiactions::baseaction; use ExpediteeFrameIO; use JSON; BEGIN { # unshift (@INC, "$ENV{'GSDLHOME'}/perllib/cpan/perl-5.8"); } @HtmlToExpediteeAction::ISA = ('baseaction'); # c=collect and site=xxxx implicitly handled by code # 'c' is handled by baseaction, site is tested for only if greenstone3 my $action_table = { "generate-frame" => { 'compulsory-args' => [ "fn", "json" ], 'optional-args' => [] }, }; sub new { my $class = shift (@_); my ($gsdl_cgi,$iis6_mode) = @_; my $self = new baseaction($action_table,$gsdl_cgi,$iis6_mode); return bless $self, $class; } sub generate_frame { my $self = shift @_; my $username = $self->{'username'}; my $collect = $self->{'collect'}; my $gsdl_cgi = $self->{'gsdl_cgi'}; my $gsdlhome = $self->{'gsdlhome'}; my $site = $self->{'site'}; my $collect_dir = $gsdl_cgi->get_collection_dir($site); my $fn = $self->{'fn'}; # no need to lock collection (??), the operation is read only my $json_str_unicode = $self->{'json'}; my $json_str_utf8 = Encode::encode("utf8",$json_str_unicode); my $exp_frame_tree = decode_json $json_str_utf8; my $output_dir = &util::filename_cat($collect_dir,$collect,"export"); if (!-d $output_dir) { &util::mk_dir($output_dir); } my $frame_filename = &util::filename_cat($output_dir,"$fn.exp"); my $expeditee_frame_io = new ExpediteeFrameIO(); $expeditee_frame_io->buildFrame($exp_frame_tree); if ($expeditee_frame_io->saveFrame($frame_filename)) { # write out next free frame num $expeditee_frame_io->saveNextFreeFrame($fn+1); $gsdl_cgi->generate_message("html-to-expeditee saved frame $fn"); } else { $gsdl_cgi->generate_error("Failed to open $frame_filename for output"); } } 1;