# $Id: Image.pm,v 1.7 2001/01/29 11:09:35 joern Exp $ package NewSpirit::Object::Image; $VERSION = "0.01"; @ISA = qw( NewSpirit::Object ); use strict; use Carp; use NewSpirit::Object; use NewSpirit; use File::Copy; sub init { my $self = shift; # this module depends on the correct definition of # the _image_filename meta data field. If actually # no meta data exists for this object, we define # this field with a convenient default value. my $meta_data = $self->get_meta_data; my $image_filename = $meta_data->{_image_filename}; # maybe the object has no properties, so no _image_filename # is available. Instead we take the object_basename assuming # that it has the correct extension and save the meta data, # so this object has a well defined state. if ( not $image_filename ) { $image_filename = $self->{object_basename}; $meta_data->{_image_filename} = $image_filename; $self->save_meta_data ($meta_data); } 1; } sub convert_data_from_spirit1 { my $self = shift; 1; } sub edit_ctrl { my $self = shift; $self->editor_header ('edit'); my $img_html_code = $self->gen_img_html_code; print <<__HTML;
$img_html_code

$CFG::FONT Image File Upload $CFG::FONT
__HTML $self->editor_footer; } sub download_ctrl { my $self = shift; my $mime_type = 'image/'.$self->{object_ext}; $self->SUPER::download_ctrl ($mime_type); } sub save_file { my $self = shift; my $q = $self->{q}; my $image_fh = $q->param('cipp_file_upload'); return if not $image_fh; # save the uploaded file to the object file my $object_file = $self->{object_file}; binmode $image_fh; my $fh = new FileHandle; open ($fh, "> $object_file") or croak "can't write $object_file"; binmode $fh; while (<$image_fh>) { print $fh $_; } close $image_fh; close $fh; # now save the original filename into the meta data hash my $meta_data = $self->get_meta_data; $meta_data->{_image_filename} = "$image_fh"; $self->save_meta_data ($meta_data); # check if the extension of the file has changed my ($new_ext) = $image_fh =~ m!([^\.]+)$!; $new_ext =~ tr/A-Z/a-z/; my ($old_ext) = $self->{object_ext}; $old_ext =~ tr/A-Z/a-z/; if ( $new_ext ne $old_ext ) { # uh oh, file extension has changed, we must rename # the object my $new_object_basename = $self->{object_basename}; $new_object_basename =~ s![^\.]+$!!; $new_object_basename .= $new_ext; $self->rename ($new_object_basename); } # return true if the extension has changed, so the # project browser will be reloaded by $self->save_ctrl $old_ext ne $new_ext; } sub view_ctrl { my $self = shift; $self->view_header; my $version = $self->{q}->param('version'); my $img_html_code = $self->gen_img_html_code ($version); print <<__HTML;
$img_html_code

__HTML $self->view_footer; } sub restore { my $self = shift; # we overload the NewSpirit::Object::restore method to # check if the file extension changes due to the restore my ($version) = @_; # store actual extension my $old_ext = $self->{object_ext}; $old_ext =~ tr/A-Z/a-z/; # first we do the restore and then check file extensions # and eventually rename the object $self->SUPER::restore ($version); my $meta_data = $self->get_meta_data; my $image_filename = $meta_data->{_image_filename}; my ($new_ext) = $image_filename =~ m!([^\.]+)$!; $new_ext =~ tr/A-Z/a-z/; if ( $old_ext ne $new_ext ) { # uh oh, file extension has changed, we must rename # the object my $new_object_basename = $self->{object_basename}; $new_object_basename =~ s![^\.]+$!!; $new_object_basename .= $new_ext; $self->rename ($new_object_basename); } # return true if the extension has changed, so the # project browser will be reloaded by $self->restore_ctrl $old_ext ne $new_ext; } sub get_install_filename { my $self = shift; return $self->{project_htdocs_dir}.'/'. $self->{object}; } sub gen_img_html_code { my $self = shift; my ($version) = @_; my $download_url; my $basename = $self->{object_basename}; my $random = int(rand(10000000)); my $filename = $self->{object_file}; if ( $version ) { $filename = "$self->{object_history_dir}/$version"; } if ( -z $filename ) { return qq{$CFG::FONTImage file is empty}; } if ( $version ) { $download_url = $self->{object_url}. '&e=download&no_http_header=1'. '&history_warp=1&version='.$version. '&RANDOM='.(int(rand(10000000))); $download_url =~ s!\?!/$random/$basename?!; } else { $download_url = $self->{object_url}. '&e=download&no_http_header=1'. '&RANDOM='.(int(rand(10000000))); $download_url =~ s!\?!/$random/$basename?!; } return qq{}; } 1;