git-svn-id: http://xe-core.googlecode.com/svn/trunk@897 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-04-02 08:20:13 +00:00
parent 42e082b725
commit 058bb08ec4
7 changed files with 103 additions and 12 deletions

View file

@ -1,11 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<addon version="0.1">
<title xml:lang="ko">이미지 이름 애드온</title>
<title xml:lang="ko">회원 추가 정보 노출</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<description xml:lang="ko">
사용자의 이름을 이미지로 대체하거나 마크이미지를 나타내는 애드온입니다.
회원 관리에서 이미지이름이나 마크이미지를 설정하여야 한다.
사용자의 정보중 이미지이름, 이미지마크, 서명등을 화면에 출력해주는 애드온입니다.
이런 정보들을 사용하지 않을 경우를 대비하여 별도의 애드온으로 빼어서 실행시간을 줄여줍니다.
이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요.
</description>
</author>
</addon>

View file

@ -8,9 +8,10 @@
*
* addOn은 모든 처리가 끝나고 화면에 출력하기 바로 전에 요청이 되어서
* 사용자의 이름으로 등록된 부분을 찾아서 정규표현식으로 변환을 합니다.
* 사용자의 이름은 <div class="member_회원번호">....</div> 정의가 되어야 합니다.
* 이렇게 정의된 부분의 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면
* 내용을 변경해버립니다.
* 1. 사용자의 이름은 <div class="member_회원번호">....</div> 정의가 되어야 합니다.
* 이렇게 정의된 부분의 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다.
*
* 2. 사용자의 서명을 <div class="document_회원번호">...</div> 정의된 곳이 글의 내용이라 판단, 하단에 서명을 추가합니다.
*
* 내용 변경은 MemberController::transImageName method를 이용해서 변경합니다.
**/
@ -18,7 +19,12 @@
// 출력 되기 바로 직전이 아니라면 모두 무시
if($called_position != "before_display_content") return;
// 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 변경
// 기본적인 기능이라 MemberController 에 변경 코드가 있음
$oMemberController = &getController('member');
// 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경
$output = preg_replace_callback('!<div([^\>]*)member_([0-9]*)([^\>]*)>(.*?)\<\/div\>!is', array($oMemberController, 'transImageName'), $output);
// 출력문서중에 <div class="document_번호">내용</div> 를 찾아서 member_controller::transSignature()를 이용해서 서명을 추가
$output = preg_replace_callback('!<div([^\>]*)document_([0-9]*)([^\>]*)>(.*?)\<\/div\>!is', array($oMemberController, 'transSignature'), $output);
?>

View file

@ -73,6 +73,12 @@ h6 {
font-weight:normal;
}
.member_signature {
margin-top:10px;
border:1px solid #DDDDDD;
padding:10px;
}
#waitingforserverresponse {
display:inline;
border:2px solid #444444;

View file

@ -86,6 +86,7 @@
// member 에서 사용할 cache디렉토리 생성
FileHandler::makeDir('./files/attach/image_name');
FileHandler::makeDir('./files/attach/image_mark');
FileHandler::makeDir('./files/attach/signature');
return new Object();
}

View file

@ -75,7 +75,7 @@
**/
function procMemberAdminInsert() {
// 필수 정보들을 미리 추출
$args = Context::gets('member_srl','user_id','user_name','nick_name','email_address','password','allow_mailing','denied','is_admin','description','group_srl_list','signature');
$args = Context::gets('member_srl','user_id','user_name','nick_name','email_address','password','allow_mailing','denied','is_admin','description','group_srl_list');
// 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
$all_args = Context::getRequestVars();
@ -109,6 +109,11 @@
if(!$output->toBool()) return $output;
// 서명 저장
$signature = Context::get('signature');
$this->putSignature($args->member_srl, $signature);
// 결과 리턴
$this->add('member_srl', $args->member_srl);
$this->setMessage($msg_code);
}
@ -286,7 +291,7 @@
**/
function procMemberInsert() {
// 필수 정보들을 미리 추출
$args = Context::gets('user_id','user_name','nick_name','email_address','password','allow_mailing','signature');
$args = Context::gets('user_id','user_name','nick_name','email_address','password','allow_mailing');
$args->member_srl = getNextSequence();
// 넘어온 모든 변수중에서 몇가지 불필요한 것들 삭제
@ -316,7 +321,7 @@
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
// 필수 정보들을 미리 추출
$args = Context::gets('nick_name','email_address','allow_mailing','signature');
$args = Context::gets('nick_name','email_address','allow_mailing');
// 로그인 정보
$logged_info = Context::get('logged_info');
@ -341,6 +346,11 @@
$output = $this->updateMember($args);
if(!$output->toBool()) return $output;
// 서명 저장
$signature = Context::get('signature');
$this->putSignature($args->member_srl, $signature);
// 결과 리턴
$this->add('member_srl', $args->member_srl);
$this->setMessage('success_updated');
}
@ -468,6 +478,25 @@
return new Object(0,'success');
}
/**
* @brief 서명을 파일로 저장
**/
function putSignature($member_srl, $signature) {
$filename = sprintf('files/attach/signature/%s%d.gif', getNumberingPath($member_srl), $member_srl);
if(!$signature) return @unlink($filename);
$buff = sprintf('<?php if(!__ZBXE__) exit();?>%s', $signature);
FileHandler::writeFile($filename, $buff);
}
/**
* @brief 서명 파일 삭제
**/
function delSignature($member_srl) {
$filename = sprintf('files/attach/signature/%s%d.gif', getNumberingPath($member_srl), $member_srl);
@unlink($filename);
}
/**
* @brief 관리자를 추가한다
**/
@ -621,9 +650,10 @@
$output = executeQuery('member.deleteMemberGroupMember', $args);
if(!$output->toBool()) return $output;
// 이름이미지, 이미지마크 삭제
// 이름이미지, 이미지마크, 서명 삭제
$this->procMemberDeleteImageName();
$this->procMemberDeleteImageMark();
$this->delSignature($member_srl);
// member 테이블에서 삭제
return executeQuery('member.deleteMember', $args);
@ -824,7 +854,7 @@
/**
* @brief 최종 출력물에서 이미지 이름을 변경
* imgae_name 애드온에서 요청이
* member_extra_info 애드온에서 요청이
**/
function transImageName($matches) {
$member_srl = $matches[2];
@ -861,5 +891,36 @@
return $GLOBALS['_transImageNameList'][$member_srl];
}
/**
* @brief 최종 출력물에서 서명을 변경
* member_extra_info 애드온에서 요청이
**/
function transSignature($matches) {
$member_srl = $matches[2];
$text = $matches[4];
if(!$member_srl) return $matches[0];
// 전역변수에 미리 설정한 데이터가 있다면 그걸 return
if(!$GLOBALS['_transSignatureList'][$member_srl]) {
$oMemberModel = &getModel('member');
$signature = $oMemberModel->getSignature($member_srl);
// 서명이 없으면 빈 내용을 등록
if(!$signature) {
$GLOBALS['_transSignatureList'][$member_srl] = $matches[0];
// 서명이 있으면 글의 내용 다음에 추가
} else {
$document = $matches[0].'<div class="member_signature">'.$signature.'</div>';
$GLOBALS['_transSignatureList'][$member_srl] = $document;
}
}
return $GLOBALS['_transSignatureList'][$member_srl];
}
}
?>

View file

@ -467,5 +467,16 @@
$info->file = './'.$image_mark_file;
return $info;
}
/**
* @brief 사용자의 signature를 구함
**/
function getSignature($member_srl) {
$filename = sprintf('files/attach/signature/%s%d.gif', getNumberingPath($member_srl), $member_srl);
if(!file_exists($filename)) return '';
$buff = FileHandler::readFile($filename);
return substr($buff, 29);29);
}
}
?>

View file

@ -123,6 +123,7 @@
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$member_info->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$member_info);
// 추가 가입폼 목록을 받음
@ -241,6 +242,10 @@
$oMemberModel = &getModel('member');
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->member_info));
$member_info = Context::get('member_info');
$member_info->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info');
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
if($this->member_info->member_srl) {
$oEditorModel = &getModel('editor');