-
- 1. 링크 변경 시 "/페이지이름" 형태의 하위페이지 링크도 변경
-
-
- 1.1. 부작용
-
- 1.2. wiki.pl 수정
-
- 1.3. 추가 업데이트 내역
-
- 1.4. 사용자 의견
-
1. 링크 변경 시 "/페이지이름" 형태의 하위페이지 링크도 변경
관리자 메뉴에서 페이지 이름을 변경하거나 링크를 변경할 때, "/하위페이지" 형태로만 되어 있는 링크가 제대로 변환되지 않는 문제 해결.
예를 들어 A페이지의 하위페이지로 A/a가 있을 때, A페이지나 A페이지의 하위페이지에서는 "/a"라고 링크를 할 수 있다. 이 때, A/a 페이지 이름을 A/b 페이지로 변경할 경우, "A/a"형태의 링크는 "A/b"로 잘 변경되지만, "/a"라고만 되어 있는 형태의 링크는 변경되지 않은채 남아 있었다. 이 문제를 해결하는 패치.
- 필수 요구 사항: 없음
- 선택 요구 사항: 없음
없을 것 같음...
1.2. wiki.pl 수정
페이지 이름 변경을 수행하기 전에 역링크 목록을 만드는 루틴에서, "/하위페이지" 형태의 링크를 "메인페이지/하위페이지" 형태로 복원하여 같이 처리.
sub BuildLinkIndexPage {
...
%seen = ();
foreach $link (@links) {
if ( $link =~ m!^/! ) {
$link = (split('/',$page))[0] . $link;
}
if (defined($LinkIndex{$link})) {
if (!$seen{$link}) {
...
}
.kp 파일의 내용에 있는 링크를 수정하는 루틴 수정
sub RenameKeepText {
...
if (!defined($tempSection{'keepts'})) {
return;
}
my ( $old_main, $old_sub ) = split("/", $old);
my ( $new_main, $new_sub ) = split("/", $new);
my $old_new_same_main = ( $old_main eq $new_main );
my ( $page_main, $page_sub) = split("/", $page);
my $old_page_same_main = ( $old_main eq $page_main );
$changed = 0;
foreach (@kplist) {
%tempSection = split(/$FS2/, $_, -1);
$sectName = $tempSection{'name'};
if ($sectName =~ /^(text_)/) {
%Text = split(/$FS3/, $tempSection{'data'}, -1);
$newText = &SubstituteTextLinks($old, $new, $Text{'text'});
if ( $old_page_same_main && $old_sub ) {
if ( $old_new_same_main && $new_sub ) {
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText);
}
else {
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText);
}
}
$changed = 1 if ($Text{'text'} ne $newText);
}
}
return if (!$changed);
open (OUT, ">$fname") or return;
foreach (@kplist) {
%tempSection = split(/$FS2/, $_, -1);
$sectName = $tempSection{'name'};
if ($sectName =~ /^(text_)/) {
%Text = split(/$FS3/, $tempSection{'data'}, -1);
$newText = &SubstituteTextLinks($old, $new, $Text{'text'});
if ( $old_page_same_main && $old_sub ) {
if ( $old_new_same_main && $new_sub ) {
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText);
}
else {
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText);
}
}
$Text{'text'} = $newText;
$tempSection{'data'} = join($FS3, %Text);
print OUT $FS1, join($FS2, %tempSection);
} else {
print OUT $FS1, $_;
}
}
close(OUT);
}
.db 파일의 텍스트를 수정하는 루틴 개선
sub RenameTextLinks {
...
$old =~ s/_/ /g;
$new =~ s/_/ /g;
my ( $old_main, $old_sub ) = split("/", $old);
my ( $new_main, $new_sub ) = split("/", $new);
my $old_new_same_main = ( $old_main eq $new_main );
return if (!defined($LinkIndex{$oldCanonical}));
@pageList = split(' ', $LinkIndex{$oldCanonical});
foreach $page (@pageList) {
my ( $page_main, $page_sub) = split("/", $page);
my $old_page_same_main = ( $old_main eq $page_main );
$changed = 0;
&OpenPage($page);
foreach $section (keys %Page) {
if ($section =~ /^text_/) {
&OpenSection($section);
%Text = split(/$FS3/, $Section{'data'}, -1);
$oldText = $Text{'text'};
$newText = &SubstituteTextLinks($old, $new, $oldText);
if ( $old_page_same_main && $old_sub ) {
if ( $old_new_same_main && $new_sub ) {
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText);
}
else {
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText);
}
}
if ($oldText ne $newText) {
$Text{'text'} = $newText;
$Section{'data'} = join($FS3, %Text);
$Page{$section} = join($FS2, %Section);
$changed = 1;
}
} elsif ($section =~ /^cache_diff/) {
$oldText = $Page{$section};
$newText = &SubstituteTextLinks($old, $new, $oldText);
if ( $old_page_same_main && $old_sub ) {
if ( $old_new_same_main && $new_sub ) {
$newText = &SubstituteTextLinks("/$old_sub", "/$new_sub", $newText);
}
else {
$newText = &SubstituteTextLinks("/$old_sub", $new, $newText);
}
}
if ($oldText ne $newText) {
$Page{$section} = $newText;
$changed = 1;
}
}
}
...
}
1.3. 추가 업데이트 내역
위키위키분류