package HTML::WebMake::CGI::EditBlock; use strict; use HTML::WebMake::CGI::Edit; use vars qw{ @ISA $OK_TMPL $ERRORS_TMPL $COULDNT_FIND_TMPL $PAGE_TITLE $PAGE_HEADER }; @ISA = qw(HTML::WebMake::CGI::Edit); ########################################################################### $PAGE_TITLE = q{ Edit Tagged Block: <__FNAME__> }; $PAGE_HEADER = q{ Edit Tagged Block }; $OK_TMPL = qq{
Your changes have been submitted. Thanks! Now return to the WebMake file.
}; $ERRORS_TMPL = qq{Some errors were encountered. Either go back and re-edit to fix them, or abandon the changes that could not be committed and return to the WebMake file.
}; $COULDNT_FIND_TMPL = qq{Failed to find a content block with ID "{id}". Return to the WebMake file.
}; #" ########################################################################### sub new { my $class = shift; $class = ref($class) || $class; my $self = $class->SUPER::new (@_); $self->{no_filename_needed} = 1; $self->{page_title} = $PAGE_TITLE; $self->{page_header} = $PAGE_HEADER; $self->{filename} = ''; bless ($self, $class); $self; } ########################################################################### sub subrun { my ($self, $q) = @_; my $form; if ($q->param ('dump')) { $form = $self->write_dump_page (); } elsif ($q->param ('Save')) { $form = $self->write_save_page (); # } elsif ($q->param ('Preview')) { # $form = $self->write_preview_page (); } else { $form = $self->write_edit_page (); } $form; } sub write_edit_page { my $self = shift; my $q = $self->{q}; my $text = $q->param ('filetext'); my $id = $q->param ('id'); if (!defined $text) { my $errs = $self->load_filetext_by_id ($id); if (defined $errs) { return $errs; } } $self->{task_breadcrumb} = qq{\<$self->{filename}\>
};#"
return $self->base_edit_form ($q);
}
# ---------------------------------------------------------------------------
sub cgi_hidden_items {
my ($self, $q) = @_;
my $id = $q->param ('id');
my $saveasid = $q->param ('saveasid');
$saveasid ||= $q->param ('id');
return $q->hidden(-name=>'editblock',-value=>'1')
. $q->hidden(-name=>'id',-value=>$id)
. $q->hidden (-name=>'f', -value=>$q->param ('f'))
. $q->hidden(-name=>'saveasid',-value=>$saveasid);
}
# ---------------------------------------------------------------------------
sub get_item_text {
my ($self, $q) = @_;
my $text = $q->param ('filetext');
# strip metadata from the text
return $self->strip_wmmetas ($text);
}
# ---------------------------------------------------------------------------
sub write_save_page
{
local ($_);
my $self = shift;
my $q = $self->{q};
my $form = '';
return unless $self->create_wmmetas ();
my $textfrom = $q->param ('text_from');
my $filename;
$_ = undef;
if ($q->param('upload')) {
my $infile = $q->upload ("upload_file");
if (!defined $infile) {
$self->warn ("Incomplete upload, didn't receive the new text!");
goto failed;
}
$_ = join ('', <$infile>);
} elsif ($textfrom eq 'Load from URL') {
my $url = $q->param ('upload_url');
$self->warn ("TODO: load from url");
} else {
$_ = $q->param ('upload_text');
}
my $newtext = $self->{wmmetas}.$_;
my $wmkf = $q->param ('wmkf');
$q->param ('f', $wmkf);
my $handler = new HTML::WebMake::CGI::Site($q);
$handler->set_file_base ($self->{file_base});
$form = $handler->modify_text_item ($newtext);
$self->{msgs} .= $handler->{msgs};
if ($self->{msgs} ne '') { goto failed; }
return $form.$self->subst_template ($OK_TMPL);
failed:
return $form.$self->subst_template ($ERRORS_TMPL);
}
###########################################################################
sub load_filetext_by_id {
my $self = shift;
my $id = shift;
my $q = $self->{q};
return unless $self->read_wmk_file ($self->{wmkfile});
my $dir = File::Basename::dirname ($self->{wmkfile});
my $item;
foreach my $it (@{$self->{items}}) {
if ($it->{id} eq $id) { $item = $it; last; }
}
if (!defined $item) {
return $self->subst_template ($COULDNT_FIND_TMPL, { id => $id });
}
my $name = $q->escape ($item->{name});
my $nametext = $item->{name}; $nametext =~ s/[\"\']//gs;
$q->param (-name=>'filetext', -value=>$item->{edituidata});
$q->param (-name=>'saveasid', -value=>$item->{id});
$q->param (-name=>'f', -value=>$nametext);
$self->{filename} = $nametext;
return;
}
###########################################################################
1;