관리자 페이지 패키지별 UI 적용을 위한 1차 작업 마무리

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4616 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-10-15 11:10:08 +00:00
parent 856ab513ec
commit ba4e9e26e2
248 changed files with 3520 additions and 3424 deletions

View file

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.2">
<title xml:lang="ko">LDAP 인증 연동 모듈</title>
<name xml:lang="ko">zero</name>
<description xml:lang="ko">
LDAP 인증 연동하는 모듈입니다.
적수님(http://ggang.net)님이 매우 큰 도움 주셨습니다.
</description>
<version>0.1</version>
<date>2007-07-28</date>
<category>accessory</category>
<author email_address="zero@zeroboard.com" link="blog.nzeo.com">
<name xml:lang="ko">zero</name>
</author>
</module>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<actions>
<action name="dispLdapAdminConfig" type="view" admin_index="true" standalone="true" />
<action name="procLdapAdminInsertConfig" type="controller" standalone="true" />
</actions>
</module>

View file

@ -0,0 +1,31 @@
<?php
/**
* @file modules/ldap/lang/ko.lang.php
* @author zero <zero@nzeo.com>
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->ldap = 'LDAP 인증 연동';
$lang->use_ldap = 'LDAP 인증 사용';
$lang->ldap_server = 'LDAP 서버 주소';
$lang->ldap_port = 'LDAP 서버 포트번호';
$lang->ldap_userdn_suffix = '사용자 접미사';
$lang->ldap_basedn = 'base DN';
$lang->ldap_email_entry = 'Email 대상 컬럼';
$lang->ldap_nickname_entry = '닉네임 대상 컬럼';
$lang->ldap_username_entry = '사용자 이름 대상 컬럼';
$lang->ldap_group_entry = '그룹 대상 컬럼';
$lang->about_use_ldap = 'LDAP 인증 연동을 위해서는 서버 정보등을 입력 후 사용에 체크를 하셔야 합니다';
$lang->about_ldap_server = '인증과 정보를 요청할 수 있는 LDAP 서버 정보를 입력해주세요';
$lang->about_ldap_port = 'LDAP 서버의 port 정보를 입력해주세요';
$lang->about_ldap_userdn_suffix = '인증을 위한 사용자 접미사를 입력해주세요. (예: @abc.com)';
$lang->about_ldap_basedn = '디렉토리의 base DN을 입력해주세요. (예: dc=abc,dc=com)';
$lang->about_ldap_email_entry = 'LDAP정보중 이메일 정보로 사용할 컬럼명을 입력해주세요. (중복 금지)';
$lang->about_ldap_username_entry = 'LDAP정보중 사용자 이름 사용할 컬럼명을 입력해주세요. (중복 가능)';
$lang->about_ldap_nickname_entry = 'LDAP정보중 닉네임으로 사용할 컬럼명을 입력해주세요. (중복 금지)';
$lang->about_ldap_group_entry = 'LDAP정보중 사용자의 그룹으로 지정될 컬럼명을 입력해주세요.';
?>

View file

@ -0,0 +1,31 @@
<?php
/**
* @class ldapAdminController
* @author zero (zero@nzeo.com)
* @brief ldap 모듈의 admin controller class
**/
class ldapAdminController extends ldap {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief LDAP 인증 연동 설정
**/
function procLdapAdminInsertConfig() {
// 기본 정보를 받음
$args = Context::gets('use_ldap','ldap_server','ldap_port','ldap_userdn_suffix','ldap_basedn','ldap_email_entry','ldap_nickname_entry','ldap_username_entry','ldap_group_entry');
if($args->use_ldap !='Y') $args->use_ldap = 'N';
if(!$args->ldap_port) $args->ldap_port = 389;
// module Controller 객체 생성하여 입력
$oModuleController = &getController('module');
$output = $oModuleController->insertModuleConfig('ldap',$args);
return $output;
}
}
?>

View file

@ -0,0 +1,29 @@
<?php
/**
* @class ldapAdminView
* @author zero (zero@nzeo.com)
* @brief ldap 모듈의 admin view class
**/
class ldapAdminView extends ldap {
/**
* @brief 초기화
**/
function init() {
// 템플릿 경로 지정
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief 스팸필터의 설정 화면
**/
function dispLdapAdminConfig() {
$oModel = &getModel('ldap');
Context::set('config',$oModel->getConfig());
// 템플릿 파일 지정
$this->setTemplateFile('index');
}
}
?>

View file

@ -0,0 +1,57 @@
<?php
/**
* @class ldap
* @author zero (zero@nzeo.com)
* @brief ldap 모듈의 high class
**/
class ldap extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oModuleController->insertActionForward('ldap', 'view', 'dispLdapAdminConfig');
// 로그인 연동 트리거
$oModuleController->insertTrigger('member.doLogin', 'ldap', 'controller', 'triggerLdapLogin', 'before');
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oModuleModel = &getModel('module');
if(!$oModuleModel->getActionForward('dispLdapAdminConfig')) return true;
if(!$oModuleModel->getTrigger('member.doLogin', 'ldap', 'controller', 'triggerLdapLogin', 'before')) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
if(!$oModuleModel->getActionForward('dispLdapAdminConfig'))
$oModuleController->insertActionForward('ldap', 'view', 'dispLdapAdminConfig');
if(!$oModuleModel->getTrigger('member.doLogin', 'ldap', 'controller', 'triggerLdapLogin', 'before'))
$oModuleController->insertTrigger('member.doLogin', 'ldap', 'controller', 'triggerLdapLogin', 'before');
return new Object(0,'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>

View file

@ -0,0 +1,110 @@
<?php
/**
* @class ldapController
* @author zero (zero@nzeo.com)
* @brief ldap 모듈의 controller class
**/
class ldapController extends ldap {
/**
* @brief 초기화
**/
function init() {
}
/**
/**
* @brief LDAP 연동하여 정보를 return하는 method
**/
function triggerLdapLogin(&$obj) {
// ldap 관련 설정 정보를 구함
$oLdapModel = &getModel('ldap');
$config = $oLdapModel->getConfig();
if($config->use_ldap != 'Y') return new Object();
// 사용자 아이디와 비밀번호를 trigger obj 변수에서 구함
$user_id = $obj->user_id;
$password = $obj->password;
// 인증 시도
$output = $oLdapModel->ldap_conn($user_id, $password, $config->ldap_userdn_suffix, $config->ldap_basedn, $config->ldap_server, $config->ldap_port);
// 인증 실패시 아무 event없이 그냥 return하여 기존 인증을 계속 유지
if(!$output->toBool()) return new Object();
// 설정정보를 바탕으로 기본 정보를 구함
$ldap_info = $output->getVariables();
$info->user_id = $user_id;
$info->password = md5($password);
$info->email_address = $ldap_info[$config->ldap_email_entry];
$info->nick_name = $ldap_info[$config->ldap_nickname_entry];
$info->user_name = $ldap_info[$config->ldap_username_entry];
list($info->email_id, $info->email_host) = explode('@', $info->email_address);
$group = $ldap_info[$config->ldap_group_entry];
// 이미 존재하는 회원인지 확인
$oMemberModel = &getModel('member');
$member = $oMemberModel->getMemberInfoByUserID($info->user_id);
// 이미 존재하면 메일주소/닉네임/사용자이름/그룹중에 변경된 것이 있는지 확인
if($member->user_id == $info->user_id) {
$info->member_srl = $member->member_srl;
if($info->password != $member->password || $info->email_address != $member->email_address || $info->nick_name != $member->nick_name || $info->user_name != $member->user_name) {
$output = executeQuery('member.updateMember', $info);
} else $output = new Object();
// 존재하지 않으면 회원정보 추가
} else {
$info->member_srl = getNextSequence();
$info->allow_mailing = 'Y';
$info->allow_message = 'Y';
$info->denied = 'N';
$info->is_admin = 'N';
// 아이디, 닉네임, email address 의 중복 체크
$member_srl = $oMemberModel->getMemberSrlByNickName($info->nick_name);
if($member_srl) return new Object(-1,'msg_exists_nick_name');
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($info->email_address);
if($member_srl) return new Object(-1,'msg_exists_email_address');
$output = executeQuery('member.insertMember', $info);
}
if(!$output->toBool()) return new Object();
$group_list = $member->group_list;
if(!$group_list || !is_array($group_list)) $group_list = array();
// 수정 또는 입력 결과가 이상없다면 그룹 정보 작업
if($group && !in_array($group, $group_list)) {
$group_srl = 0;
$groups = $oMemberModel->getGroups();
foreach($groups as $k => $v) {
if($v->title == $group) {
$group_srl = $v->group_srl;
break;
}
}
// 그룹 추가
if(!$group_srl) {
$oMemberAdminController = &getAdminController('member');
$group_srl = $group_args->group_srl = getNextSequence();
$group_args->title = $group;
$oMemberAdminController->insertGroup($group_args);
}
// 그룹 설정
$oMemberController = &getController('member');
$oMemberController->addMemberToGroup($info->member_srl, $group_srl);
}
return new Object();
}
}
?>

View file

@ -0,0 +1,66 @@
<?php
/**
* @class ldapModel
* @author zero (zero@nzeo.com)
* @brief ldap 모듈의 Model class
**/
class ldapModel extends ldap {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief LDAP 설정 정보 return
**/
function getConfig() {
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('ldap');
if(!$config->ldap_port) $config->ldap_port = 389;
if(!$config->ldap_email_entry) $config->ldap_email_entry = 'mail';
if(!$config->ldap_nickname_entry) $config->ldap_nickname_entry = 'displayname';
if(!$config->ldap_username_entry) $config->ldap_username_entry = 'description';
if(!$config->ldap_group_entry) $config->ldap_group_entry = 'department';
return $config;
}
/**
* @brief LDAP 연동하여 정보를 return하는 method
**/
function ldap_conn($user_id, $password, $ldap_userdn_suffix, $base_dn, $ldap_server, $ldap_port = 389) {
if(!function_exists('ldap_connect')) return new Object(-1,'ldap module is not exists');
$ds = @ldap_connect($ldap_server, $ldap_port);
if(!$ds) return new Object(-1,'server not connected');
if(!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3)) return new Object(-1,'fail to set option');
$userdn = $user_id.$ldap_userdn_suffix;
if(!@ldap_bind($ds, $userdn, $password)) return new Object(-1,'fail to bind');
$ldap_sr = @ldap_search($ds, $base_dn, '(cn='.$user_id.')', array ('*'));
if(!$ldap_sr) return new Object(-1,'fail to search');
$info = ldap_get_entries($ds, $ldap_sr);
if($info['count']<1 || !is_array($info) || !count($info[0]) ) return new Object(-1,'not found');
$obj = new Object();
foreach($info[0] as $key => $val) {
if(preg_match('/^[0-9]*$/',$key) || $key == 'objectclass') continue;
$obj->add($key, $val[0]);
}
return $obj;
}
}
?>

View file

@ -0,0 +1,7 @@
<filter name="insert_config" module="ldap" act="procLdapAdminInsertConfig" confirm_msg_code="confirm_submit">
<form />
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,78 @@
<!--%import("filter/insert_config.xml")-->
<h3>{$lang->ldap} <span class="gray">{$lang->cmd_management}</span></h3>
<form action="./" method="get" onsubmit="return procFilter(this, insert_config)">
<table cellspacing="0" class="adminTable topGap">
<tr>
<th scope="col"><div>{$lang->use_ldap}</div></th>
<td>
<input type="checkbox" name="use_ldap" value="Y" <!--@if($config->use_ldap == 'Y')-->checked="checked"<!--@end--> />
<p>{$lang->about_use_ldap}</p>
</td>
</tr>
<tr class="row2">
<th scope="col"><div>{$lang->ldap_server}</div></th>
<td>
<input type="text" name="ldap_server" value="{$config->ldap_server}" class="inputTypeText w400" />
<p>{$lang->about_ldap_server}</p>
</td>
</tr>
<tr>
<th scope="col"><div>{$lang->ldap_port}</div></th>
<td>
<input type="text" name="ldap_port" value="{$config->ldap_port}" class="inputTypeText w80" />
<p>{$lang->about_ldap_port}</p>
</td>
</tr>
<tr class="row2">
<th scope="col"><div>{$lang->ldap_userdn_suffix}</div></th>
<td>
<input type="text" name="ldap_userdn_suffix" value="{$config->ldap_userdn_suffix}" class="inputTypeText w400" />
<p>{$lang->about_ldap_userdn_suffix}</p>
</td>
</tr>
<tr>
<th scope="col"><div>{$lang->ldap_basedn}</div></th>
<td>
<input type="text" name="ldap_basedn" value="{$config->ldap_basedn}" class="inputTypeText w400" />
<p>{$lang->about_ldap_basedn}</p>
</td>
</tr>
<tr class="row2">
<th scope="col"><div>{$lang->ldap_email_entry}</div></th>
<td>
<input type="text" name="ldap_email_entry" value="{$config->ldap_email_entry}" class="inputTypeText w400" />
<p>{$lang->about_ldap_email_entry}</p>
</td>
</tr>
<tr>
<th scope="col"><div>{$lang->ldap_nickname_entry}</div></th>
<td>
<input type="text" name="ldap_nickname_entry" value="{$config->ldap_nickname_entry}" class="inputTypeText w400" />
<p>{$lang->about_ldap_nickname_entry}</p>
</td>
</tr>
<tr class="row2">
<th scope="col"><div>{$lang->ldap_username_entry}</div></th>
<td>
<input type="text" name="ldap_username_entry" value="{$config->ldap_username_entry}" class="inputTypeText w400" />
<p>{$lang->about_ldap_username_entry}</p>
</td>
</tr>
<tr>
<th scope="col"><div>{$lang->ldap_group_entry}</div></th>
<td>
<input type="text" name="ldap_group_entry" value="{$config->ldap_group_entry}" class="inputTypeText w400" />
<p>{$lang->about_ldap_group_entry}</p>
</td>
</tr>
<tr class="row2">
<td colspan="2" class="right">
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</td>
</tr>
</table>
</form>