衝突画面からの直接編集を可能にします。
[direct edit conflict]
更新の衝突時に、自分が追加したテキストおよび、衝突時の差分を表示し、
その画面から直接編集することが可能になります。
conflict.txtの修正
例)
更新の衝突が発生しました。 他の人が、このページを更新してしまったようです。 以下に、 あなたの追加したテキストがありますので、 再度編集し直してください。
conflict()内の変更
sub conflict { my ($page, $rawmsg) = @_; if ($form{myLastModified} eq &get_info($page, $info_LastModified)) { return 0; # Walrus add [ignore comment conflict] start } elsif ($ignore_comment_conflict and $form{mycmd} eq 'comment') { return 0; # Walrus add [allow comment in frozen] end } open(FILE, $file_conflict) or &print_error("(conflict)"); my $content = join('', <FILE>); &code_convert(\$content, $kanjicode); close(FILE); # yakty add [direct edit conflict] start # refresh database &close_db; &open_db; # diff text my @msg1 = split(/\x0D\x0A|\x0D|\x0A/, $database{$form{mypage}}); my @msg2 = split(/\x0D\x0A|\x0D|\x0A/, $rawmsg); my $diffmsg = &difftext(\@msg1, \@msg2); my @addtxt; foreach (split(/\n/, $diffmsg)){ if(/^\+(.*)$/){ push(@addtxt, ' ' . $1) } elsif(@addtxt[-1] ne ''){ push(@addtxt, ''); } } $content .= "\n" . join("\n", @addtxt) . "\n"; # yakty add [direct edit conflict] end &print_header($page); &print_content($content); # yakty add [direct edit conflict] start &open_diff; $_ = &escape($diffbase{$form{mypage}}); &close_diff; print qq(<h3>$resource{difftitle}</h3>); print qq($resource{diffnotice}); print qq(<pre class="diff">); foreach (split(/\n/, $_)) { if (/^\+(.*)/) { print qq(<b class="added">$1</b>\n); } elsif (/^\-(.*)/) { print qq(<s class="deleted">$1</s>\n); } elsif (/^\=(.*)/) { #print qq(<span class="same">$1</span>\n); } else { print qq|??? $_\n|; } } print qq(</pre>); print qq(<hr>); $content .= "\n" . join("\n", @addtxt) . "\n"; my $admin = &valid_password($form{mypassword}) ? 1 : 0; $form{mypreview} = 0; undef $form{mypart}; &print_editform($database{$form{mypage}}, &get_info($page, $info_LastModified), admin => $admin); # yakty add [direct edit conflict] end #&print_editform($rawmsg, $form{myLastModified}, frozen=>0, conflict=>1); # yakty del [direct edit conflict] &print_footer($page); return 1; }