plugin/RecentChanges.php에 버그가 있다. 아래와 같이 수정한다.
- $user = $DBInfo->user 를 $userinfo = $DBInfo->user 로 수정
- $user-> 부분을 $userinfo->로 수정
plugin/RecentChanges.php에 버그가 있다. 아래와 같이 수정한다.
private/으로 시작하는 페이지는 로그인한 사용자만 접근하게 수정하는 방법을 기술한다.
if ($DBInfo->control_read and !$DBInfo->security->is_allowed('read',$options))
이 줄을 찾아서 아래처럼 수정한다.
if (!$DBInfo->security->is_allowed('read',$options))
사용중인 security pluin을 찾아서 아래 함수를 추가한다.
function may_read($action,$options) {
return 1;
}
is_allow() 함수 를 아래처럼 수정한다.
function is_allowed($action="read",$options) {
if (eregi('private/',$options['page']))
{
if ($options['id'] == 'Anonymous') {
$options['err']=sprintf(_("You are not allowed to '%s' on this page."),$action);
return 0;
}
}
Moniwiki의 기본 보안 플러그인을 살짝 수정해서 단일 사용자용 보안 플러그인을 작성했다.
수정에 관련된 내용은 로그인 한 후에만 할 수 있고, 로그인 하지 않은 상태에서도 기본적인 동작을 수행할 수 있다.
아래 소스를 plugin/security 디렉토리에 singlelogin.php로 저장하고 config.php에
$security_class = 'singlelogin';
로 지정하면 된다.
<?php
# a singletologin security plugin for the MoniWiki
class Security_singlelogin extends Security {
var $DB;
function Security_singlelogin($DB="") {
$this->DB=$DB;
}
# $options[page]: pagename
# $options[id]: user id
function writable($options="") {
return $this->DB->_isWritable($options['page']);
}
function may_edit($action,$options) {
$public_pages=array('WikiSandBox','WikiSandbox','GuestBook','SandBox');
if (!$options['page']) return 0; # XXX
//if (in_array($options['page'],$public_pages)) return 1;
if ($options['id']=='Anonymous') {
$options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
$options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
return 0;
}
return 1;
}
function may_blog($action,$options) {
if (!$options['page']) return 0; # XXX
if ($options['id']=='Anonymous') {
$options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
$options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
return 0;
}
return 1;
}
function may_uploadfile($action,$options) {
if (!$options['page']) return 0;
if ($options['id']=='Anonymous') {
$options['err']=sprintf(_("You are not allowed to '%s' on this page"),$action);
$options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
return 0;
}
return 1;
}
function is_allowed($action="read",$options) {
$allowed_actions=array("userform","download", "fullsearch", "goto", "blogchanges", "highlight", "titlesearch", "rss_rc", "info", "diff", "print");
if (in_array($action,$allowed_actions)) return 1;
$method='may_'.$action;
if (method_exists($this, $method)) {
return $this->$method ($action,&$options);
}
if ($options['id']=='Anonymous') {
$options['err']=sprintf(_("You are not allowed to '%s' on this page."),$action);
$options['err'].="\n"._("Please Login or make your ID on this Wiki ;)");
return 0;
}
return 1;
}
}
?>
Moniwiki의 RecentChanges 매크로에는 이름만 표시하는 옵션이 없다. RecentChanges 매크로에 바뀐 글의 제목만 표시하는 옵션을 'nameonly' 로 해서 추가하는 방법에 대해 설명한다.
plugin/RecentChanges.php의 macro_RecentChanges() 함수에 아래 내용을 삽입한다.
} else if ($arg=="moztab") {
이 부분을 찾아서 위에 아래 코드를 추가해준다.
}else if (in_array ("nameonly", $args)) {
$use_day = 0;
$template='$out.= "$title<br />\n";';
}else if ($arg=="moztab") {
1. plugin/userform.php에서
# create profile
이 있는 code block을 주석 처리 한다.
2. wikilib.php의 macro_UserPreferences 함수에서 아래 내용을 주석 처리한다.
FORM;
if ($user->id == 'Anonymouse') {
이 블럭을 통채로 주석처리한다.
} else {
$button=_("Save");
$css=$user->info['email'];
...