wiki-archive/twiki/lib/TWiki/UI/ChangeForm.pm

109 lines
3.5 KiB
Perl

# Module of TWiki Enterprise Collaboration Platform, http://TWiki.org/
#
# Copyright (C) 1999-2007 Peter Thoeny, peter@thoeny.org
# and TWiki Contributors. All Rights Reserved. TWiki Contributors
# are listed in the AUTHORS file in the root of this distribution.
# NOTE: Please extend that file, not this notice.
#
# This program is free software; you can redistribute 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. For
# more details read LICENSE in the root of this distribution.
#
# 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.
#
# As per the GPL, removal of this notice is prohibited.
=pod
---+ package TWiki::UI::ChangeForm
Service functions used by the UI packages
=cut
package TWiki::UI::ChangeForm;
use strict;
use Error qw( :try );
use Assert;
use CGI::Carp qw( fatalsToBrowser );
use CGI qw( :cgi -any );
use TWiki;
use TWiki::OopsException;
=pod
---+ ClassMethod generate( $session, $theWeb, $theTopic, $editaction )
Generate the page that supports selection of the form.
=cut
sub generate {
my( $session, $web, $topic, $editaction ) = @_;
ASSERT($session->isa( 'TWiki')) if DEBUG;
my $page = $session->{templates}->readTemplate( 'changeform' );
my $q = $session->{cgiQuery};
my $store = $session->{store};
my $formName = $q->param( 'formtemplate' ) || '';
unless( $formName ) {
my( $meta, $tmp ) = $store->readTopic( undef, $web, $topic, undef );
my $form = $meta->get( 'FORM' );
$formName = $form->{name} if $form;
}
$formName = 'none' if( !$formName );
my $prefs = $session->{prefs};
my $legalForms = $prefs->getWebPreferencesValue( 'WEBFORMS', $web );
$legalForms =~ s/^\s*//;
$legalForms =~ s/\s*$//;
my @forms = split( /[,\s]+/, $legalForms );
unshift @forms, 'none';
my $formList = '';
my $formElemCount = 0;
foreach my $form ( @forms ) {
$formElemCount++;
$formList .= CGI::br() if( $formList );
my $formElemId = 'formtemplateelem' . $formElemCount;
my $props = {
type => 'radio',
name => 'formtemplate',
id => $formElemId,
value => $form
};
$props->{checked} = 'checked' if $form eq $formName;
$formList .= CGI::input( $props );
my ($formWeb, $formTopic) = $session->normalizeWebTopicName($web, $form);
my $formLabelContent = ' ' . ( $store->topicExists( $formWeb, $formTopic ) ?
'[['.$formWeb.'.'.$formTopic.']['.$form.']]' : $form );
$formList .= CGI::label( { for => $formElemId}, $formLabelContent );
}
$page =~ s/%FORMLIST%/$formList/go;
my $parent = $q->param( 'topicparent' ) || '';
$page =~ s/%TOPICPARENT%/$parent/go;
my $redirectTo = $q->param( 'redirectto' ) || '';
$page =~ s/%REDIRECTTO%/$redirectTo/go;
$page = $session->handleCommonTags( $page, $web, $topic );
$page = $session->{renderer}->getRenderedVersion( $page, $web, $topic );
my $text = CGI::hidden( -name => 'text', -value => $q->param( 'text' ) );
$page =~ s/%TEXT%/$text/go;
$text = '';
#$text = CGI::hidden( -name => 'action', -value => $editaction ) if $editaction;
$text .= "<input type=\"hidden\" name=\"action\" value=\"$editaction\" />" if $editaction;
$page =~ s/%EDITACTION%/$text/go;
return $page;
}
1;