diff --git a/addons/member_extra_info/conf/info.xml b/addons/member_extra_info/conf/info.xml index 0e9d7ad8e..0f234084c 100644 --- a/addons/member_extra_info/conf/info.xml +++ b/addons/member_extra_info/conf/info.xml @@ -1,11 +1,12 @@ - 이미지 이름 애드온 + 회원 추가 정보 노출 제로 - 사용자의 이름을 이미지로 대체하거나 마크이미지를 나타내는 애드온입니다. - 회원 관리에서 이미지이름이나 마크이미지를 설정하여야 한다. + 사용자의 정보중 이미지이름, 이미지마크, 서명등을 화면에 출력해주는 애드온입니다. + 이런 정보들을 사용하지 않을 경우를 대비하여 별도의 애드온으로 빼어서 실행시간을 줄여줍니다. + 이미지이름, 이미지마크, 서명등을 노출하고 싶다면 이 애드온을 활성화 시키세요. diff --git a/addons/member_extra_info/image_name.addon.php b/addons/member_extra_info/member_extra_info.addon.php similarity index 60% rename from addons/member_extra_info/image_name.addon.php rename to addons/member_extra_info/member_extra_info.addon.php index cdf4e08c0..63bbedc69 100644 --- a/addons/member_extra_info/image_name.addon.php +++ b/addons/member_extra_info/member_extra_info.addon.php @@ -8,9 +8,10 @@ * * 이 addOn은 모든 처리가 끝나고 화면에 출력하기 바로 전에 요청이 되어서 * 사용자의 이름으로 등록된 부분을 찾아서 정규표현식으로 변환을 합니다. - * 사용자의 이름은
....
로 정의가 되어야 합니다. - * 이렇게 정의된 부분의 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 - * 내용을 변경해버립니다. + * 1. 사용자의 이름은
....
로 정의가 되어야 합니다. + * 이렇게 정의된 부분의 회원번호를 구해서 이미지이름, 이미지마크가 있는지를 확인하여 있으면 내용을 변경해버립니다. + * + * 2. 사용자의 서명을
...
로 정의된 곳이 글의 내용이라 판단, 하단에 서명을 추가합니다. * * 내용 변경은 MemberController::transImageName method를 이용해서 변경합니다. **/ @@ -18,7 +19,12 @@ // 출력 되기 바로 직전이 아니라면 모두 무시 if($called_position != "before_display_content") return; - // 출력문서중에서
content
를 찾아 MemberController::transImageName() 를 이용하여 변경 + // 기본적인 기능이라 MemberController 에 변경 코드가 있음 $oMemberController = &getController('member'); + + // 출력문서중에서
content
를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경 $output = preg_replace_callback('!]*)member_([0-9]*)([^\>]*)>(.*?)\<\/div\>!is', array($oMemberController, 'transImageName'), $output); + + // 출력문서중에
내용
를 찾아서 member_controller::transSignature()를 이용해서 서명을 추가 + $output = preg_replace_callback('!]*)document_([0-9]*)([^\>]*)>(.*?)\<\/div\>!is', array($oMemberController, 'transSignature'), $output); ?> diff --git a/common/css/default.css b/common/css/default.css index 27bc0f208..19fffd86f 100644 --- a/common/css/default.css +++ b/common/css/default.css @@ -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; diff --git a/modules/member/member.class.php b/modules/member/member.class.php index d8cd39318..ba2f4b79c 100644 --- a/modules/member/member.class.php +++ b/modules/member/member.class.php @@ -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(); } diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 25baa7d28..24f5df857 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -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('%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].'
'.$signature.'
'; + + $GLOBALS['_transSignatureList'][$member_srl] = $document; + } + } + + return $GLOBALS['_transSignatureList'][$member_srl]; + } + } ?> diff --git a/modules/member/member.model.php b/modules/member/member.model.php index c66b3a44b..d26560f42 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -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); + } } ?> diff --git a/modules/member/member.view.php b/modules/member/member.view.php index cbf1b97c5..ea74a58a9 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -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');