그럭저럭 달력 매크로를 만들었습니다. Perl 의 날짜처리 함수의 한계 때문에 1902년 정도에서 2037 년까지만 안전하게 출력할 수 있습니다. 그 이상의 범위에서는 에러가 나던가, 엉뚱한 달력이 출력됩니다. 사실 1902년의 달력도 정확한지 확인해본건 아니지만... /TestCalendar 에서 페이지소스와 출력결과를 볼 수 있습니다.
== # 로그아웃시 상단 메뉴의 '로그아웃'링크가 남는 문제 ==
로그아웃할때 화면상에 로그아웃했다는 메세지가 뜨면서 메뉴항목은 로그인으로 다시 바껴야 하는데 로그아웃으로 그대로 남아있습니다. 아래와 같이 하면 일단 로그아웃할때 메뉴이름도 "로그인"으로 바로 바뀝니다. 꽁수이긴 합니다만은...
#로긴/로그아웃꽁수
{{{perl
sub GetGotoBar {
....(중간생략)
# if (($UserID eq "113") || ($UserID eq "112")) {
if (($UserID eq "113") || ($UserID eq "112") || ($UserID eq "")) { # "",그니깐 NULL 추가
$bartext .= ' ' . &ScriptLink("action=login", T('Login'));
}
else {
$bartext .= ' | ' . &ScriptLink("action=logout", T('Logout'));
}
....(이하생략)
}
sub DoLogout { ## 이하 주석(#)처리된 구문은 원래코드이며, 통째로 갈아치운다.
<--- 함수내용을 통째로 바꾼다. --->
# my ($uid); ## 사실은 저도 몰라여-_-;; 판단 기준을 $UserID = NULL (or) not NULL 로 뒀음.
# $SetCookie{'id'} = "";
# $SetCookie{'randkey'} = $UserData{'randkey'};
# $SetCookie{'rev'} = 1;
# print &GetHeader('', T('Logout Results'), '');
# if (($UserID ne "113") && ($UserID ne "112")) {
# print Ts('Logout for user ID %s complete.', $UserID);
# print &ScriptLink("처음", T(' 첫화면으로.. '));
# print " \n";
# %UserCookie = %SetCookie;
# $UserID = "";
# #print &GetGotoBar('');
# print $q->endform;
# print &GetMinimumFooter();
my ($uid);
$uid = "";
$UserID = $uid;
&LoadUserData();
$SetCookie{'id'} = "";
print &GetHeader('', T('로그아웃'), '');
print Ts('로그아웃 하였습니다. ');
print &ScriptLink("처음", T('첫화면으로.. '));
%UserCookie = "";
print " \n";
print $q->endform;
print &GetMinimumFooter();
<--- 여기까지 함수내용을 통째로 바꾼다. --->
}
}}}
#아이디 길이제한 : 위와 같이 했을경우 아이디의 길이가 0, 즉 이름이 없는(NULL인) 아이디가 만들어질 경우 난감해집니다. 지양님 위키의 Userdata 디렉에 아마도 '.db' 화일이 있을것입니다. 본인이 장난쳤습니다. 죄송합니다..-_-;
{{{perl
어차피 3글자 이하는 잘 쓰지 않는다는 생각에 저는 영문 4글자 이상으로 아이디 제한을 둬서 쓰고 있습니다.
sub DoUpdatePrefs {
....
# if ($username eq "") { ## 위와 같은 이유로 이 부분은 일단 주석처리 해버린다. db화일이 지워지지도 않았던 것 같다.
# print T('UserName removed.'), ' ';
# undef $UserData{'username'};
# } elsif ((!$FreeLinks) && (!($username =~ /^$LinkPattern$/))) {
<--- 추가 --->
if (length($username) < 4) { # Too long
print T('사용자명은 영문 3글자 이상, 한글 2글자 이상이어야 함. 저장하지 않음.'), " \n";
$UserID = 0;
print "
".&ScriptLink("action=editprefs", T('다시신청'));
return;
<--- 추가 --->
} elsif ((!$FreeLinks) && (!($username =~ /^$LinkPattern$/))) {
print Ts('Invalid UserName %s: not saved.', $username), " \n";
....
}
근데 sub DoUpdatePrefs()를 보시면 아이디를 50자이하로 제한하게끔 한 IF 구문을 볼 수 있을 것입니다.
위의 것을 추가하지 않고
# } elsif (length($username) > 50) { # Too long <-- 이것을
} elsif (length($username) > 50 || length($username) <4) { # Too long <-- 이렇게 해도 됩니다.
}}}
{{{perl
sub dologin {
(중간생략)...
$success = 1;
}
else {
$SetCookie{'id'} = "";
$UserID = ""; ### 추가한다.
&LoadUserData(); ### 추가한다.
}
(이하생략)...
}
}}}
: 감사합니다. 연구실에 가서 살펴보도록 하겠습니다.
: 아이디 길이 제한은 좋은 생각입니다. NULL 아이디 문제 말고도, 아이디를 113 이나 112 라고 지을 경우도 문제를 일으켰었거든요. (악용할지 몰라서 밝힐 수는 없었지만 ^^;) 아이디의 최소 길이를 제한 하는 것은 [[UseModWiki소스수정]]에 반영했습니다.
: 그리고 로그아웃 직후에도 여전히 로그아웃 링크가 남아 있는 문제는, 말 그대로 '꽁수'를 써서 일단 고쳐 두었습니다. [[Bab2]] 님께서 작성하신 패치도 괜찮은 것 같긴 한데, 제가 소스를 제대로 이해하기 전까지는 사용자ID 를 다루는 부분은 웬만하면 건드리지 않으려고 합니다. K3 버전에서 사용되는 아이디는 오리지널 위키에서는 단지 필명일 뿐이고, 진짜 ID 는 숫자로만 구성되어 임의로 할당되는 것이었는데, Luke 님이 이 숫자아이디와 문자필명과의 관계를 어느 정도나 뜯어 고친 건지 알 수가 없어서 말이죠.
:: dologin부분을 추가했습니다.(역시나 꽁수입니다. :) ) $LoadUserData 함수가 $UserID에 해당하는 화일을 부르는 것을 이용했습니다.($UserID는 NULL로) 아마 이게 추가되면 로그인할때 존재하는 아이디 이면서 잘못된 비밀번호 입력시 로그인실패 메세지와 메뉴에 로그아웃, 관리자메뉴가 뜨는 문제도 해결될겁니다.
::: 그런 문제가 있는 줄도 모르고 있었네요. 로그인을 일부로 실패해봐야 발견하는 거라.. :-) 관리자 아이디가 무엇인지는 사실 쉽게 알 수 있는 건데 (잠겨 있는 페이지를 수시로 고치는 걸 보면...) 위키태그까지 붙인채로 말씀하시니 큰 헛점이 있는 줄 알고 순간 깜짝 놀랐습니다. ^^ (어차피 이 UseModWiki 에서는 철저한 보안 같은 것은 기대하지 말아야 할 듯 합니다) 로그인 실패 후 잘못 출력된 관리 메뉴를 클릭해봤자 권한이 없다고 나올테지만, 확실히 보기에 안 좋군요. [[UseModWiki소스수정]]에 반영했습니다. 생각 같아서는 ID 를 다루는 방식을 완전히 뜯어고쳐서 깔끔하게 만들고 싶은데, 위키 소스만 들여다보며 시간을 보낼 수도 없다보니 소소한 작업 말고는 엄두가 나지 않는군요.
== # 페이지 Link ==
현재 UseModWiki 내에 존재하지 않는 페이지에 대해서는 TestPageTest 페이지 이름 다음에 ? 가 나와서 그 ?를 누르면 새 페이지를 만드는 형식으로 되어 있습니다. 이걸 wikiX 에서 사용하는 방식처럼 첫 문자에 Link를 거는 방식으로 바꾸는게 어떨까요?
페이지를 보다가 마우스로 긁어서 다른데로 옮기는 경우에 지금의 방식은 ? 가 나와서 상당히 귀찮더군요.
: 음... 전 WikiX 의 방식이 링크가 눈에 띄지 않는다고 생각해서 덜 선호하는 편입니다만... config 에서 결정할 수 있게 하면 되겠네요. 방금 슬쩍 만져봤는데... 학교 가서 조금 더 손을 보면 될 것 같습니다.
----
[[위키위키분류]]
UseModWiki소스수정/반영된사용자의견archive01 페이지로 돌아가기 | 다른 수정본 보기
|