웹마스터 팁
ZBXE용 도쿠위키 연동소스 코드
2007.10.29 22:45
본 문서는 제 블로그에 올린 글을 Copy & Paste한 관계로 경어체로 작성되었음을 양해바랍니다. 올린 글의 댓글이나 쪽지를 항상 확인할 수 없으므로 귀찮으시더라도 질문은 원문에 댓글로 남기시거나 게시판을 이용해주셨으면 합니다.
(죄송합니다만 '위키가 무엇인가요?'라던지 '도쿠위키는 어떻게 쓰나요?'라는 질문은 사양합니다. ^_^ 일단 본인의 홈페이지에 도쿠위키를 설치까지는 하시고나서 질문해주세요.)
원본 링크
우선 큰 유감은 없지만 회사 인트라넷을 '모니위키'로부터 도쿠위키로 이전시켰다. 미디어위키도 검토를 해보았었지만 좀 복잡하고 컨버전에 많은 시간을 쏟을 수 없어서 가장 짧은 시간안에 이전시킬 만한 툴을 선택하였다. 도쿠위키는 속도가 크게 느리지 않으면서도 체계적인 구조를 가졌고 위키로 유저들이 구축해놓은 팁이나 노하우도 꽤 있는 편이라서 개인적으로도 사용중이다.
그런 관계로 본의 아니게 제로보드 XE와 모니위키를 연동시키는 것에 이어 도쿠위키와 제로보드를 연동시키는 프로그램을 짜게 되었다. (개인적으로 모니위키를 회사용으로 사용하는 것에 대해서는 여러모로 말리고 싶다)
제로보드 XE와 도쿠위키를 연동시키는 것은 모니위키와 연동시키는 것보다 더 깔끔하다. 모니위키도 ACL을 지원하고 있지만 기본적인 수준인데다가 좀 더 복잡한 것을 하기 위해서는 배포본의 코드를 뜯어고치는 문제-그보다 더 심한건 너무나도 무심한 매뉴얼. DO IT YOURSELF라면 할말 없지만...-들이 있는 반면 도쿠위키는 기본 ACL의 설계가 외부 인증모듈과 결합하도록 무리가 없게 만들어져 있고 외부의 인증모듈이 namespace의 퍼미션들과 잘 연동되도록 고려되어 있는데다가 이미 많은 외국 솔루션들과의 통합을 유저들이 경험해본터라 참조해볼만한 문서들이 많았다.
zbxe.class.php의 구현은 외국 유저가 공개한 drupal.class.php을 기반으로 작성하였다.
zbxe.class.php의 구현은 아래와 같다.
/**
* ZBXE authentication backend
* DokuWiki용 제로보드 XE 인증 모듈
*
* @license Creative Commons 3.0 (원저작자 표시 조건 의무)
* @author Venister (Joongpil Cho) <venister@empal.com>
*/
class auth_zbxe extends auth_basic {
var $url = array();
function auth_zbxe() {
global $conf;
define('__ZBXE__', true);
$config_file = $conf['auth']['zbxe']['path']."files/config/db.config.php";
require_once ($config_file);
$this->url['path'] = $conf['auth']['zbxe']['path'];
$this->url['db_prefix'] = $db_info->db_table_prefix;
$this->url['host'] = $db_info->db_hostname;
$this->url['user'] = $db_info->db_userid;
$this->url['pass'] = $db_info->db_password;
$this->url['database'] = $db_info->db_database;
// 데이터베이스 연결
$this->url['link'] = mysql_connect($this->url['host'], $this->url['user'], $this->url['pass']);
if (!$this->url['link']) {
msg('데이터베이스 서버에 연결할 수 없습니다: ' . mysql_error());
$this->success = false;
return;
}
if (!mysql_select_db($this->url['database'], $this->url['link'])) {
msg('데이터베이스에 연결할 수 없습니다: ' . mysql_error());
$this->success = false;
return;
}
mysql_query("set names utf8");
// PHP 4때문에 destructor를 명시적 선언
register_shutdown_function("auth_zbxe_disconnect", $this);
}
// 패스워드 체크하는 함수
function checkPass($user, $pass) {
$query = "select count(*) from ".$this->url['db_prefix']."_member where user_id='$user' and password=MD5('$pass')";
$result = mysql_query($query);
if(!$result){
msg('잘못된 쿼리: ' . mysql_error());
return false;
}
$count = mysql_result($result, 0, 0);
return ($count == 1 ? true: false);
}
// 유저 정보를 리턴
//
// name : 문자열, 유저이름
// mail : 문자열, 메일주소
// grps : 배열, 유저의 그룹 목록
function getUserData($user) {
global $conf;
$query = "select user_name, email_address, member_srl from ".$this->url['db_prefix']."_member where user_id='$user'";
$result = mysql_query($query);
if(!$result) return null;
if($data = mysql_fetch_array($result)){
$info['name'] = $data[user_name];
$info['mail'] = $data[email_address];
$member_srl = $data[member_srl];
}
$group_table = $this->url['db_prefix']."_member_group";
$group_member_table = $this->url['db_prefix']."_member_group_member";
$query = "select g.title as title from ".$group_table." g, ".$group_member_table." gm where g.group_srl = gm.group_srl and gm.member_srl = '$member_srl'";
$result = mysql_query($query);
if (!$result){
msg('쿼리 실패: ' . mysql_error());
return false;
}
while($data = mysql_fetch_array($result)){
if(strpos($conf['auth']['zbxe']['user'], $data[title]) !== FALSE){
$info['grps'][] = 'user';
}
if(strpos($conf['auth']['zbxe']['admin'], $data[title]) !== FALSE){
$info['grps'][] = 'admin';
}
}
return $info;
}
}
function auth_zbxe_disconnect($obj) {
mysql_close($obj->url['link']);
}
?>
위 소스를 반드시 파일 zbxe.class.php로 저장하여 도쿠위키가 설치된 디렉토리 아래 inc/auth 밑에 복사해 넣는다.
그리고 위의 인증 백-엔드를 사용하기 위해 도쿠위키가 설치된 디렉토리 아래의 conf/local.php에 아래의 내용을 하단에 추가한다.
$conf['superuser'] = '@admin';
$conf['authtype'] = 'zbxe';
$conf['auth']['zbxe']['path'] = "제로보드 설치 전체경로(반드시 /로 끝나야한다)";
$conf['auth']['zbxe']['user'] = "user그룹에 포함될 ZBXE의 그룹명. 여러개는 ;로 구분한다.";
$conf['auth']['zbxe']['admin'] = "admin그룹에 포함될 ZBXE의 그룹명. 여러개는 ;로 구분한다.";
$conf['openregister']= 0;
$conf['autopasswd'] = 1;
$conf['resendpasswd']= 0;
위에서 노란 바탕의 줄은 반드시 추가해야 한다. (나머지는 없으면 추가한다.)
여 기서 몇가지 유의사항이 있는데 이 구현은 도쿠위키 ACL의 기본그룹만을 취급하고 있다는 것이다. (소스코드를 좀 더 고치면 커스텀한 그룹을 취급하는 것도 어려운 일은 아니다. 원래 구현은 그런식으로 처리하도록 하려 했는데 한글로 된 그룹명을 도쿠위키 ACL에서 지원하려면 urlencode를 해야하므로 귀차니즘 때문에 간단하게 구현했다)
때문에 'user'로 구분될 유저의 제로보드 그룹을 $conf['auth']['zbxe']['user'] 줄에 넣는데 각 그룹은 ;로 구분한다. 마찬가지로 admin 그룹은 $conf['auth']['zbxe']['admin']에 명시한다.
두번째 주의사항은 명시할 그룹명의 제한사항인데, 그룹명들이 서로 완전히 달라야 한다는 것이다. 위에서 그룹명을 ;로 구분한다고 했는데 귀차니즘 때문에 explode를 해서 각각을 비교하지 않고 그냥 strpos로 검사했기 때문에 문제가 발생될 소지가 있다.
예를 들면, 제로보드 그룹상에서 '비회원'은 user에 포함되면 안됨에도 불구하고 '예비회원'이라는 그룹이 $conf['auth']['zbxe']['user']안에 포함되어 있으면 '예비회원'이라는 문자열 속에 '비회원'이 포함되어 있으므로 비회원을 user로 처리해버린다.
마지막 주의사항은 local.php는 ANSI로 인코딩되어 있다. (영어로 되어 있으니... 인코딩 신경쓸 필요가 없었겠지...) 그러나 ANSI 인코딩에 그냥 한글로 된 그룹명을 쓰게 되면 절대 정상작동되지 않으므로 인코딩을 UTF-8(BOM코드가 없어야 한다)로 저장해야만 한다.
위의 소스코드를 사용할 분은 위의 주의사항을 숙지하고 쓰시던지 소스코드를 고치시던지 해야할 듯... (귀찮아서 업그레이드는 없다) 소스코드를 고치더라도 local.php를 UTF-8로 인코딩해야 함은 물론이다.
- [2014/08/29] 묻고답하기 게시판 페이지에 위젯 달기??? *2
- [2012/05/16] 묻고답하기 제로보드xe에서 레이아웃 편집창에 들어가면 이런 메시지가 뜹니다.
- [2011/04/18] 웹마스터 팁 XE 홈피에 예쁜 음악BGM 넣는 방법(프레임 분리형 플래시BGM)
- [2011/03/04] 묻고답하기 에디터 Auto Resize 기능 *1
- [2011/01/24] 웹마스터 팁 '대표도메인'연결후 '로그인'이 안될때,,(먹통)
댓글 7
-
주하니
2007.10.30 02:49
-
베니
2007.10.30 10:38
흐미... 연동 전문으로 접수받아서 소스코드 배포 의향은 없습니다. ^^;;;; 제가 쓰는 프로그램들과의 연동을 나중에 삽질하실분 수고를 좀 덜어드릴까하고 올린거구요. 쓰시다가 잘 안되시면 말씀해주세요. 셋팅을 다 맞게 하셨으면 큰 문제는 없습니다. (쓰고 있는거니깐...)
-
DroArc
2007.10.30 13:29
좋은 팁 감사합니다.
다만 위에서 틀린 부분이 있어서 덧글올립니다.
위에서 보면 auth_zbxe.class.php로 저장하라고 하셨는데 그렇게 하면 100% 에러가 납니다.
공식 백엔드 제작 문서에 보면 파일명은 <backend>.class.php 로 붙이도록 정의하고 있습니다.
근데 $conf['authtype'] = 'zbxe'; 일 경우 backend 명은 분명 zbxe 라야 합니다.
즉 파일 명도 zbxe.class.php라야 합니다.
auth_zbxe.class.php 로 파일 명을 정해줄 경우에는 authtype도 auth_zbxe가 되야 되겠죠.
그럴 경우에는 $conf['authtype'] = 'auth_zbxe'; 가 됩니다.
추가 : 위에서 backend 명을 그대로 auth_zbxe로 두고 conf에서 auth_zbxe로 바꾸어도 에러가 납니다.
역시 파일명을 수정하는 것이 에러가 없더군요.
추가2 : path를 지정함에 있어서 전체 경로는 서버기준의 전체경로를 적어야 합니다.
즉, 우리가 보통 쓰는 웹상의 전체 경로가 아니라 서버 root 기준의 전체 경로를 적어줘야 하지요.^^ -
베니
2007.10.31 15:05
아 -_-;;; 네. 지적하신대로 zbxe.class.php로 지정하셔야 합니다. 제가 헷갈려버렸네요. 지적 감사합니다. -
핑크플로이드
2007.10.30 19:51
오, 흥미로워요...
웹하드 프로그램을 만들어서 ZBXE랑 연동중인데...
다행히 ZBXE가 외부페이지랑 연동이 가능해서...
ZBXE에 맞게 소스코드를 수정중입니다...
어디 주어갈란게 있을라나...위키를 안써서...
없네...
ㅠ.ㅠ -
fthyne
2007.11.02 23:09
좋은 팁 감사합니다. 잘 쓰고 있습니다. 저도 처음에 그냥 auth_zbxe.class.php로 했다가 에러가 나서 아예 페이지가 안 떴다는. -
띵야
2009.01.14 10:28
이런 좋은 팁에는 추천 한방~! ^^
제목 | 글쓴이 | 날짜 |
---|---|---|
제로보드 소스 서버에 올릴때.. [3] | 남국 | 2007.10.17 |
최근 댓글 리스트에 & " < > 안 나오게 하기 [3] | 必得力 | 2007.10.18 |
관리자 페이지 모듈->댓글 내용에 & " < > 안 나오게 하기 [1] | 必得力 | 2007.10.18 |
답글 영역 안보이게 블로그에서 토글 방식 적용 [9] | 지허 | 2007.10.18 |
게시물 작성시 날짜 지정하기 [14] | JAMSUN2 | 2007.10.24 |
(글) 등록 시간을 변경해 봅시다. [4] | Simulz | 2007.10.26 |
(글) 서명 높이 줄이고 스크롤바 생성 [4] | Simulz | 2007.10.26 |
달력으로 게시판 글 검색하기(블로그 말고) [4] | 핑크플로이드 | 2007.10.27 |
ZBXE용 도쿠위키 연동소스 코드 [7] | 베니 | 2007.10.29 |
IIS 5.x 6.0 에서 PHP 성능을 높여보자... | 핑크플로이드 | 2007.10.30 |
게시판 상단의 css 옆의 마크 안나오게 하는방법좀 알려주세여! [4] | 홍제헌 | 2007.10.30 |
로그인/로그아웃 화면 첨부합니다. 이미지 변경법좀 ... [1] | 홍제헌 | 2007.10.30 |
댓글 입력폼이 너무 무겁게 느껴질때 [2] | 비지니스 | 2007.10.31 |
백지화면이 뜰때는~ | 하나로45 | 2007.11.02 |
메뉴에 "회원 정보 보기" 걸기. [4] | font | 2007.11.03 |
IE6 메인화면 밀리는 문제...우연히 해결...^^ | 김태상473 | 2007.11.03 |
제로보드xe 연동 프리하드2 설치방법 [8] | hoaopoyoy | 2007.11.03 |
UTF-8과 Euc-kr 동시에 사용하기 [10] | 써니a | 2007.11.05 |
아이디/비번 찾기 메일 깨지는 현상 해결 [3] | 짱돌의세상 | 2007.11.06 |
글을 읽을때마다 조회수 증가 하게 하는 팁 [19] | 비밀얌 | 2007.11.06 |
또 다른 위키 연동 소스를 올려주셨네요..
플그램을 모르는 갠적으론 님 실력이 참 부럽습니다. ^^;;
타 오픈소스와의 이런 연동소스가 많이 나왔으면 좋겠네요.
그누보드, 테크노트, 태터툴즈 등이나
해외소스로는 웹칼렌다, E-groupware, Sugar-CRM 등등등 인트라넷이나 그룹웨어류와
(사실 국내 오픈소스 중 이부분이 취약한 듯 합니다.)
다양한 연동소스가 나와서 각 보드의 유익하고 필요한 기능을 유기적으로 끌어다 쓸 수 있으면 좋겠네요.
혹시 연동전문으로 접수받아서 소스코드 배포 하실 의향은 없으신지요? ^^;;
암튼 님 소스보고 도쿠위키 또 시도 함 해봐야겠네요. ^^;;