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