--- suikawiki/script/wiki.cgi 2002/12/04 12:00:42 1.34 +++ suikawiki/script/wiki.cgi 2002/12/05 04:32:27 1.35 @@ -50,6 +50,7 @@ # # You MAY modify following variables. # +$SuikaWiki::Plugin::plugin_directory = q(./SuikaWiki/Plugin/); my $file_touch = "$modifier_dir_data/touched.txt"; my $file_resource = "$modifier_dir_data/resource.txt"; my $file_FrontPage = "$modifier_dir_data/frontpage.txt"; @@ -118,6 +119,7 @@ $CompletedSuccessfully => 1, #$FrontPage => 1, WikiUserAgentList => 1, + WikiPluginInfo => 1, ); my %form; my %database; @@ -133,6 +135,7 @@ $RssPage => 'rss', $AdminChangePassword => 'adminchangepasswordform', #$FrontPage => 'FrontPage', + WikiPluginInfo => 'x_WikiPluginInfo', ); my %command_do = ( read => \&do_read, @@ -154,14 +157,13 @@ diff => \&do_diff, interwikibox => \&do_interwiki_box, # Walrus add (5) wikiform => \&do_wikiform, + x_WikiPluginInfo => \&do_wikiplugininfo, ); ############################## my $walversion = '2.0.beta1.wal.1'; # Walrus add (1) ############################## # &test_convert; my $UA = ''; ## User agent name -&main; -exit(0); ############################## sub main { @@ -578,8 +580,8 @@ my $epage = &encode ($page); $walrus_log = ($walrus_debugging) ? &text_to_html("----\n$walrus_log") : ''; # Walrus add (debug) # Walrus mod (1) start - my $cvslog1 = q$Revision: 1.34 $; - my $cvslog2 = q$Date: 2002/12/04 12:00:42 $; + my $cvslog1 = q$Revision: 1.35 $; + my $cvslog2 = q$Date: 2002/12/05 04:32:27 $; print_navigate_links ($page); print <<"EOD"; @{[ $lm ? qq(
Last modified: $lm
) : '' ]} @@ -848,7 +850,7 @@ } my $FormIndex = 0; -sub make_custom_form ($$$) { +sub make_custom_form ($$$$) { my ($wfname, $definition, $template, $option) = @_; ## $template and $option is currently not used in this procedure. unless ($main::_EMBEDED) { @@ -856,28 +858,26 @@ if (length $definition) { my $param = bless {}, 'SuikaWiki::Plugin'; my $lastmodified = &get_info($form{mypage}, $info_LastModified); + &load_formatter (qw/form_input form_option/); + $definition = &unescape ($definition); $definition =~ s/\\(.)/$1/g; $definition .= ' %submit;' if $definition !~ /%submit/; - unless ($fmt{form_option}) { - $fmt{form_option} = Message::Util::Formatter->new; - for (@{$SuikaWiki::Plugin::List{wikiform_option}||[]}) { - $_->load_formatter ($fmt{form_option}, type => 'wikiform_option'); - } - } $option = &unescape ($option); $option =~ s/\\(.)/$1/g; $fmt{form_option}->replace ($option, $param); + my $target_page = $param->{output}->{page} || $form{mypage}; + $param->{form_disabled} = 1 if $fixedpage{$target_page}; my $target_form = $param->{output}->{id}; my $r = < - - + + EOH $r .= qq() if $UA =~ m#Mozilla/[12]\.#; - $r .= $fmt{form_input}->replace (&unescape ($definition), $param); + $r .= $fmt{form_input}->replace ($definition, $param); $r .= < EOH @@ -1285,11 +1285,6 @@ $s = qq([[$s]]) if $s !~ /^[A-Z][a-z]+(?:[A-Z][a-z]+)+$/; &encode (&code_convert (\$p->{name}, $o->{charset} || 'shift_jis')); }; - - $fmt{form_input} = Message::Util::Formatter->new; - for (@{$SuikaWiki::Plugin::List{wikiform_input}||[]}) { - $_->load_formatter ($fmt{form_input}, type => 'wikiform_input'); - } } @@ -1455,10 +1450,8 @@ } } -sub do_wikiform { - my $content = $database{$form{mypage}}; - my $anchor = &get_new_anchor_index ($content); - for my $t (qw/form_template form_option/) { +sub load_formatter (@) { + for my $t (@_) { unless ($fmt{$t}) { $fmt{$t} = Message::Util::Formatter->new; for (@{$SuikaWiki::Plugin::List{'wiki'.$t}||[]}) { @@ -1466,6 +1459,12 @@ } } } +} + +sub do_wikiform { + my $content = $database{$form{mypage}}; + my $anchor = &get_new_anchor_index ($content); + &load_formatter (qw/form_template form_option/); my $write = 0; my $i = 1; $content =~ s{$embed_command{form}}{ @@ -1705,6 +1704,12 @@ sub __get_database ($) { $database{ $_[0] } } sub __set_database ($$) { $database{ $_[0] } = $_[1] } +sub do_wikiplugininfo { + &print_header (q(WikiPluginInfo)); + print text_to_html (&SuikaWiki::Plugin::make_info_page); + &print_footer (q(WikiPluginInfo)); +} + package wiki::referer; sub add ($$) { my $page = shift; @@ -1808,6 +1813,7 @@ } package SuikaWiki::Plugin; + our $plugin_directory; # defined in top of this file. our %List; sub escape ($$) { main::escape ($_[1]) } @@ -1823,7 +1829,51 @@ } } -use SuikaWiki::Plugin::WikiFormBasic; +sub import_plugins () { + opendir PDIR, $plugin_directory; + my @plugin = grep {s/\.pm$//} readdir (PDIR); + closedir PDIR; + for (@plugin) { + eval qq{ use SuikaWiki::Plugin::$_ } unless /[^A-Za-z0-9_]/; + push @{$List{_all}}, qq(SuikaWiki::Plugin::$_); + } +} + +sub make_info_page () { + my $r = <property (); + $r .= <{name}''' (Version $prop->{version}) +<$prop->{uri}> + +Provide: +@{[do{my $t = ''; for my $f (@{$prop->{provide}||[]}) { + $t .= qq(-''$f''\n); + for (sort grep m#^\Q$f\E/#, keys %{$prop->{partinfo}}) { + $t .= qq(--''$_'' -- $prop->{partinfo}->{$_}\n); + } +}$t}]} + +EOH + } + } + $r; +} + +&import_plugins (); + +package main; +&main; +exit 0; 1; __END__