Web Diary Professional 改造記録
http://www.web-liberty.net/
ここのCGIに関するもの。
入力項目追加プラグイン(http://www.web-liberty.net/download/diarypro/plugin/index.html#input)で追加した入力項目は、基本は一行テキストで複数行対応にしても、改行が反映されない。
ので。
/lib/webliberty/Plugin/Input.pmを
package webliberty::Plugin::Input; use strict; use base qw(webliberty::Basis); use webliberty::String; ### コンストラクタ sub new { my $class = shift; my $self = { init => shift, config => shift, query => shift, agent => undef }; bless $self, $class; require $self->{init}->{plugin_dir} . 'Input/init.cgi'; $self->{plugin} = &webliberty::Plugin::Input::init::get_init; if ($ENV{'HTTP_USER_AGENT'} =~ /(DoCoMo|SoftBank|Vodafone|J-PHONE|KDDI-|UP\.Browser|DDIPOCKET|WILLCOM)/i) { require Jcode; $self->{agent} = 'mobile'; } return $self; } ### 表示用データ作成処理 sub run { my $self = shift; my $result; if (!$self->{query}->{plugin} and $self->{query}->{mode} eq 'admin') { if ($self->{query}->{exec_preview}) { my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_line; } elsif ($self->{query}->{work} eq 'edit' and -e "$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") { open(FH, "$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") or $self->error("Read Error : $self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); $result = <FH>; close(FH); } } return $result; } ### 入力データ記録処理 sub complete { my $self = shift; if ($self->{query}->{mode} ne 'admin') { return; } if ($self->{query}->{work} ne 'new' and $self->{query}->{work} ne 'edit') { return; } if (!$self->{query}->{exec_regist} and !$self->{query}->{exec_del}) { return; } require webliberty::App::Admin; my $app_ins = new webliberty::App::Admin($self->{init}, $self->{config}, $self->{query}); if (!$app_ins->check_password) { $self->error('管理者ページにログインしてください。'); } if ($self->{agent} eq 'mobile') { $self->{query}->{Input} = Jcode->new($self->{query}->{Input}, 'sjis')->utf8; } my $input_ins = new webliberty::String($self->{query}->{Input}); $input_ins->create_line; if ($self->{query}->{work} eq 'new' and $self->{query}->{exec_regist} and $input_ins->get_string ne '') { open(FH, $self->{init}->{data_diary_index}) or $self->error("Read Error : $self->{init}->{data_diary_index}"); my @index = <FH>; close(FH); my @numbers = map { (split(/\t/))[1] } @index; @index = @index[sort { $numbers[$b] <=> $numbers[$a] } (0 .. $#numbers)]; my $last_no = (split(/\t/, $index[0]))[1]; open(FH, ">$self->{plugin}->{data_dir}$last_no\.$self->{plugin}->{data_ext}") or $self->error("Write Error : $self->{plugin}->{data_dir}$last_no\.$self->{plugin}->{data_ext}"); print FH $input_ins->get_string; close(FH); } elsif ($self->{query}->{work} eq 'edit' and $self->{query}->{exec_regist}) { if ($input_ins->get_string) { open(FH, ">$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") or $self->error("Write Error : $self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); print FH $input_ins->get_string; close(FH); } else { unlink("$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); } } elsif ($self->{query}->{work} eq 'edit' and $self->{query}->{exec_del} and $self->{query}->{del}) { foreach (split(/\n/, $self->{query}->{del})) { unlink("$self->{plugin}->{data_dir}$_\.$self->{plugin}->{data_ext}"); } } return; } ### 記事表示処理 sub article { my $self = shift; my %args = @_; my $result; if ($args{'type'} eq 'diary') { if ($self->{query}->{mode} eq 'admin' and $self->{query}->{exec_preview}) { my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_line; } elsif (-e "$self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}") { open(FH, "$self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}") or $self->error("Read Error : $self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}"); $result = <FH>; close(FH); } } return $result; } 1;
を
package webliberty::Plugin::Input; use strict; use base qw(webliberty::Basis); use webliberty::String; ### コンストラクタ sub new { my $class = shift; my $self = { init => shift, config => shift, query => shift, agent => undef }; bless $self, $class; require $self->{init}->{plugin_dir} . 'Input/init.cgi'; $self->{plugin} = &webliberty::Plugin::Input::init::get_init; if ($ENV{'HTTP_USER_AGENT'} =~ /(DoCoMo|SoftBank|Vodafone|J-PHONE|KDDI-|UP\.Browser|DDIPOCKET|WILLCOM)/i) { require Jcode; $self->{agent} = 'mobile'; } return $self; } ### 表示用データ作成処理 sub run { my $self = shift; my $result; if (!$self->{query}->{plugin} and $self->{query}->{mode} eq 'admin') { if ($self->{query}->{exec_preview}) { my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_text; $result = $input_ins->permit_html; } elsif ($self->{query}->{work} eq 'edit' and -e "$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") { open(FH, "$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") or $self->error("Read Error : $self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); $result = <FH>; $result =~ s/<br \/>/\n/g; close(FH); } } return $result; } ### 入力データ記録処理 sub complete { my $self = shift; if ($self->{query}->{mode} ne 'admin') { return; } if ($self->{query}->{work} ne 'new' and $self->{query}->{work} ne 'edit') { return; } if (!$self->{query}->{exec_regist} and !$self->{query}->{exec_del}) { return; } require webliberty::App::Admin; my $app_ins = new webliberty::App::Admin($self->{init}, $self->{config}, $self->{query}); if (!$app_ins->check_password) { $self->error('管理者ページにログインしてください。'); } if ($self->{agent} eq 'mobile') { $self->{query}->{Input} = Jcode->new($self->{query}->{Input}, 'sjis')->utf8; } my $input_ins = new webliberty::String($self->{query}->{Input}); $input_ins->create_text; $input_ins->permit_html; if ($self->{query}->{work} eq 'new' and $self->{query}->{exec_regist} and $input_ins->get_string ne '') { open(FH, $self->{init}->{data_diary_index}) or $self->error("Read Error : $self->{init}->{data_diary_index}"); my @index = <FH>; close(FH); my @numbers = map { (split(/\t/))[1] } @index; @index = @index[sort { $numbers[$b] <=> $numbers[$a] } (0 .. $#numbers)]; my $last_no = (split(/\t/, $index[0]))[1]; open(FH, ">$self->{plugin}->{data_dir}$last_no\.$self->{plugin}->{data_ext}") or $self->error("Write Error : $self->{plugin}->{data_dir}$last_no\.$self->{plugin}->{data_ext}"); print FH $input_ins->get_string; close(FH); } elsif ($self->{query}->{work} eq 'edit' and $self->{query}->{exec_regist}) { if ($input_ins->get_string) { open(FH, ">$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}") or $self->error("Write Error : $self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); print FH $input_ins->get_string; close(FH); } else { unlink("$self->{plugin}->{data_dir}$self->{query}->{edit}\.$self->{plugin}->{data_ext}"); } } elsif ($self->{query}->{work} eq 'edit' and $self->{query}->{exec_del} and $self->{query}->{del}) { foreach (split(/\n/, $self->{query}->{del})) { unlink("$self->{plugin}->{data_dir}$_\.$self->{plugin}->{data_ext}"); } } return; } ### 記事表示処理 sub article { my $self = shift; my %args = @_; my $result; if ($args{'type'} eq 'diary') { if ($self->{query}->{mode} eq 'admin' and $self->{query}->{exec_preview}) { my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_text; $result = $input_ins->permit_html; } elsif (-e "$self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}") { open(FH, "$self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}") or $self->error("Read Error : $self->{plugin}->{data_dir}$args{'no'}\.$self->{plugin}->{data_ext}"); $result = <FH>; close(FH); } } return $result; } 1;
に書き換える。
具体的には、
line43- 表示作成用データのところ
my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_line;
を
my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_text; $result = $input_ins->permit_html;
にする。
line78- 入力データ記録処理部分
my $input_ins = new webliberty::String($self->{query}->{Input}); $input_ins->create_line;
を
my $input_ins = new webliberty::String($self->{query}->{Input}); $input_ins->create_text; $input_ins->permit_html;
にする。
line120- 記事表示処理部分
my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_line;
を
my $input_ins = new webliberty::String($self->{query}->{Input}); $result = $input_ins->create_text; $result = $input_ins->permit_html;
にする。
あと、実際の入力フォーム部分である /skin/admin_form.htmlでの入力部分をテキストエリアに変更しておくこと。
参考:TADA-Cの秘密基地 様 http://tada-c.nema-gakki.com/archives/46.html