########################################################################### # # 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' => ["assoc", "compute-font"] }, }; sub new { my $class = shift (@_); my ($gsdl_cgi,$iis6_mode) = @_; my $self = new baseaction($action_table,$gsdl_cgi,$iis6_mode); return bless $self, $class; } ## # Subroutine for writing a collection.inf file - # this is just so that when we load GlamED, it will # only try to process framesets containing this file. ## sub write_collection_info { my ($output_dir,$collect) = @_; my $filename = &util::filename_cat($output_dir,"collection.inf"); my $status = undef; if(open(FNOUT,">$filename")){ binmode(FNOUT,":utf8"); print FNOUT "$collect"; close(FNOUT); $status =1; }else{ print STDERR "Failed to open $filename for outputting collection info\n"; $status = 0; } return $status; } 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'}; my $assoc = $self->{'assoc'}; my $compute_font = $self->{'compute-font'}; print STDERR "Wil send compute_font... $compute_font\n\n"; # 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; #if (!-d $output_dir) { #&util::mk_dir($output_dir); #} #Check for export directory. If it doesn't exist, create it. my $export_dir = &util::filename_cat($collect_dir,$collect,"export"); if(!-d $export_dir){ &util::mk_dir($export_dir); } #create output subdirectory within export directory. my $output_dir = &util::filename_cat($collect_dir,$collect,"export",$collect); if(!-d $output_dir){ &util::mk_dir($output_dir); } my $expeditee_frame_io = new ExpediteeFrameIO($output_dir); $expeditee_frame_io->buildFrame($exp_frame_tree,$compute_font); if ($expeditee_frame_io->saveFrame("$fn.exp",$assoc)) { # write out next free frame num $expeditee_frame_io->saveLastFrameNumber($fn,$collect); # TODO: Have a parameter so that this file is only written out if requested. write_collection_info($output_dir,$collect); $gsdl_cgi->generate_message("html-to-expeditee saved frame $fn"); } else { $gsdl_cgi->generate_error("Failed to save frame number $fn"); } } 1;