회원 이미지이름/마크이미지/서명과 포인트 레벨 아이콘 표시하는 애드온을 더 가볍게 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3529 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-01-15 10:55:38 +00:00
parent 502b5a7a88
commit 0f9ec51d0a
12 changed files with 147 additions and 135 deletions

View file

@ -2,6 +2,7 @@ RewriteEngine On
# image...
RewriteRule ^([a-zA-Z0-9_]+)/files/attach/images/(.*) ./files/attach/images/$2 [L]
RewriteRule ^([a-zA-Z0-9_]+)/files/member_extra_info/(.*) ./files/member_extra_info/$2 [L]
RewriteRule ^([a-zA-Z0-9_]+)/modules/(.*) ./modules/$2 [L]
RewriteRule ^([a-zA-Z0-9_]+)/common/(.*) ./common/$2 [L]
RewriteRule ^([a-zA-Z0-9_]+)/widgets/(.*) ./widgets/$2 [L]

View file

@ -26,14 +26,14 @@
**/
if($called_position == "before_display_content") {
// 기본적인 기능이라 MemberController 에 변경 코드가 있음
$oMemberController = &getController('member');
// 회원 이미지이름/ 마크/ 서명을 찾아서 대체할 함수를 담고 있는 파일을 include
require_once('./addons/member_extra_info/member_extra_info.lib.php');
// 1. 출력문서중에서 <div class="member_번호">content</div>를 찾아 MemberController::transImageName() 를 이용하여 이미지이름/마크로 변경
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', array($oMemberController, 'transImageName'), $output);
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', 'memberTransImageName', $output);
// 2. 출력문서중에 <!--AfterDocument(문서번호,회원번호)--> 를 찾아서 member_controller::transSignature()를 이용해서 서명을 추가
$output = preg_replace_callback('/<!--AfterDocument\(([0-9]+),([0-9]+)\)-->/i', array($oMemberController, 'transSignature'), $output);
$output = preg_replace_callback('/<!--AfterDocument\(([0-9]+),([0-9]+)\)-->/i', "memberTransSignature", $output);
/**
* 3 기능 수행 : 시작할때 새쪽지가 왔는지 검사

View file

@ -0,0 +1,85 @@
<?php
/**
* @brief div 또는 span에 member_번호 있을때 해당 회원 번호에 맞는 이미지이름이나 닉이미지를 대체
**/
function memberTransImageName($matches) {
// 회원번호를 추출하여 0보다 찾으면 본문중 text만 return
$member_srl = $matches[3];
if($member_srl<0) return $matches[5];
// 회원이 아닐경우(member_srl = 0) 본문 전체를 return
$nick_name = $matches[5];
if(!$member_srl) return $matches[0];
// 전역변수에 미리 설정한 데이터가 있다면 그걸 return
if(!$GLOBALS['_transImageNameList'][$member_srl]->cached) {
$GLOBALS['_transImageNameList'][$member_srl]->cached = true;
$image_name_file = sprintf('./files/member_extra_info/image_name/%s%d.gif', getNumberingPath($member_srl), $member_srl);
$image_mark_file = sprintf('./files/member_extra_info/image_mark/%s%d.gif', getNumberingPath($member_srl), $member_srl);
if(file_exists($image_name_file)) $GLOBALS['_transImageNameList'][$member_srl]->image_name_file = $image_name_file;
else $image_name_file = '';
if(file_exists($image_mark_file)) $GLOBALS['_transImageNameList'][$member_srl]->image_mark_file = $image_mark_file;
else $image_mark_file = '';
} else {
$image_name_file = $GLOBALS['_transImageNameList'][$member_srl]->image_name_file;
$image_mark_file = $GLOBALS['_transImageNameList'][$member_srl]->image_mark_file;
}
// 이미지이름이나 마크가 없으면 원본 정보를 세팅
if(!$image_name_file && !$image_mark_file) return $matches[0];
$nick_name = htmlspecialchars(strip_tags($nick_name));
// 이미지 이름이 있을 경우
if($image_name_file) $text = sprintf('<img src="%s" border="0" alt="id: %s" title="id: %s" style="vertical-align:middle;margin-right:3px" />', $image_name_file, $nick_name, $nick_name);
if($image_mark_file) $text = sprintf('<img src="%s" border="0" alt="id: %s" title="id : %s" style="vertical-align:middle;margin-right:3px"/>%s', $image_mark_file, $nick_name, $nick_name, $text);
return sprintf('<span class="nowrap member_%d" style="cursor:pointer">%s</span>',$member_srl, $text);
}
/**
* @brief 게시글의 하단에 서명을 추가하는 코드
**/
function memberTransSignature($matches) {
$member_srl = $matches[2];
if(!$member_srl) return $matches[0];
if(!$GLOBALS['_memberModuleConfig_']) {
$oModuleModel = &getModel('module');
$GLOBALS['_memberModuleConfig_'] = $oModuleModel->getModuleConfig('member');
}
$memberModuleConfig = $GLOBALS['_memberModuleConfig_'];
// 전역변수에 미리 설정한 데이터가 있다면 그걸 return
if(!$GLOBALS['_transSignatureList'][$member_srl]->cached) {
$GLOBALS['_transSignatureList'][$member_srl]->cached = true;
// 서명을 구해옴
$signature = null;
$signature_file = sprintf('files/member_extra_info/signature/%s%d.signature.php', getNumberingPath($member_srl), $member_srl);
if(file_exists($signature_file)) $signature = trim(substr(FileHandler::readFile($signature_file),40));
// 프로필 이미지를 구해옴
$exts = array('gif','jpg','png');
for($i=0;$i<3;$i++) {
$profile_file = sprintf('files/member_extra_info/profile_image/%s%d.%s', getNumberingPath($member_srl), $member_srl, $exts[$i]);
if(file_exists($profile_file)) {
$signature = sprintf('<img src="%s" alt="" class="member_profile_image" />%s', $profile_file, $signature);
break;
}
}
$GLOBALS['_transSignatureList'][$member_srl]->signature = $signature;
} else $signature = $GLOBALS['_transSignatureList'][$member_srl]->signature;
if(!$signature) return $matches[0];
// 서명 높이 제한 값이 있으면 표시 높이 제한
if($memberModuleConfig->signature_max_height) {
return sprintf('<div class="member_signature" style="max-height: %spx; overflow: auto; height: expression(this.scrollHeight > %s? \'%spx\': \'auto\');">%s<div class="clear"></div></div>', $memberModuleConfig->signature_max_height, $memberModuleConfig->signature_max_height, $memberModuleConfig->signature_max_height, $signature);
} else {
return sprintf('<div class="member_signature">%s<div class="clear"></div></div>', $signature);
}
}
?>

View file

@ -12,6 +12,8 @@
// before_display_content 가 아니면 return
if($called_position != "before_display_content") return;
require_once('./addons/point_level_icon/point_level_icon.lib.php');
$oPointController = &getController('point');
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', array($oPointController, 'transLevelIcon'), $output);
$output = preg_replace_callback('!<(div|span)([^\>]*)member_([0-9\-]+)([^\>]*)>(.*?)\<\/(div|span)\>!is', 'pointLevelIconTrans', $output);
?>

View file

@ -0,0 +1,46 @@
<?php
/**
* @brief 포인트 아이콘 변경을 위한 함수.
**/
function pointLevelIconTrans($matches) {
$member_srl = $matches[3];
if($member_srl<1) return $matches[0];
if(!isset($GLOBALS['_pointLevelIcon'][$member_srl])) {
// 포인트 설정을 구해옴
if(!$GLOBALS['_pointConfig']) {
$oModuleModel = &getModel('module');
$GLOBALS['_pointConfig'] = $oModuleModel->getModuleConfig('point');
}
$config = $GLOBALS['_pointConfig'];
// 포인트 모델을 구해 놓음
if(!$GLOBALS['_pointModel']) $GLOBALS['_pointModel'] = getModel('point');
$oPointModel = &$GLOBALS['_pointModel'];
// 포인트를 구함
$point = $oPointModel->getPoint($member_srl);
// 레벨을 구함
$level = $oPointModel->getLevel($point, $config->level_step);
$text = $matches[5];
// 레벨 아이콘의 위치를 구함
$level_icon = sprintf("./modules/point/icons/%s/%d.gif", $config->level_icon, $level);
// 최고 레벨이 아니면 다음 레벨로 가기 위한 per을 구함
if($level < $config->max_level) {
$next_point = $config->level_step[$level+1];
if($next_point > 0) $per = (int)($point / $next_point*100);
}
$title = sprintf("%s:%s%s %s, %s:%s/%s", Context::getLang('point'), $point, $config->point_name, $per?"(".$per."%)":"", Context::getLang('level'), $level, $config->max_level);
$text = sprintf('<span class="nowrap member_%s" style="cursor:pointer"><img src="%s" alt="%s" title="%s" style="vertical-align:middle;margin-right:3px"/>%s</span>', $member_srl, $level_icon, $title, $title, $text);
$GLOBALS['_pointLevelIcon'][$member_srl] = $text;
}
return $GLOBALS['_pointLevelIcon'][$member_srl];
}
?>

View file

@ -263,7 +263,7 @@
}
// 디렉토리 생성
$path = preg_replace('/\/([^\.^\/]*)\.(gif|png|jpeg|bmp|wbmp)$/i','',$target_file);
$path = preg_replace('/\/([^\.^\/]*)\.(gif|png|jpg|jpeg|bmp|wbmp)$/i','',$target_file);
FileHandler::makeDir($path);
// 원본 이미지의 크기를 조절해서 임시 이미지에 넣음

View file

@ -343,10 +343,7 @@
@include($compiled_tpl_file);
}
$output = ob_get_contents();
ob_end_clean();
return $output;
return ob_get_clean();
}
}
?>

View file

@ -23,7 +23,7 @@
* 2 : 1 + DB 쿼리
* 3 : 모든 로그
**/
define('__DEBUG__', 3);
define('__DEBUG__', 0);
/**
* @brief 디버그 메세지의 출력 장소

View file

@ -1081,8 +1081,7 @@
}
fclose($fp);
$output = ob_get_contents();
ob_end_clean();
$output = ob_get_clean();
$this->add('is_finished','1');
$this->add('total_count',$total_count);

View file

@ -895,7 +895,7 @@
if(!$max_height) $max_height = "20";
// 저장할 위치 구함
$target_path = sprintf('files/member_extra_info/profile_image/%s/', getNumberingPath($member_srl));
$target_path = sprintf('files/member_extra_info/profile_image/%s', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
// 파일 정보 구함
@ -1417,6 +1417,7 @@
// 수정하려는 대상의 원래 정보 가져오기
$member_info = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl);
if(!$args->user_id) $args->user_id = $member_info->user_id;
// 필수 변수들의 조절
if($args->allow_mailing!='Y') $args->allow_mailing = 'N';
@ -1568,79 +1569,6 @@
return $output;
}
/**
* @brief 최종 출력물에서 이미지 이름을 변경
* member_extra_info 애드온에서 요청이
**/
function transImageName($matches) {
$member_srl = $matches[3];
if($member_srl<0) return $matches[5];
$text = $matches[5];
if(!$member_srl) return $matches[0];
// 전역변수에 미리 설정한 데이터가 있다면 그걸 return
if(!$GLOBALS['_transImageNameList'][$member_srl]) {
$oMemberModel = &getModel('member');
$GLOBALS['_transImageNameList'][$member_srl]['image_name'] = $oMemberModel->getImageName($member_srl);
$GLOBALS['_transImageNameList'][$member_srl]['image_mark'] = $oMemberModel->getImageMark($member_srl);
}
$image_name = $GLOBALS['_transImageNameList'][$member_srl]['image_name'];
$image_mark = $GLOBALS['_transImageNameList'][$member_srl]['image_mark'];
// 이미지이름이나 마크가 없으면 원본 정보를 세팅
if(!$image_name && !$image_mark) return $matches[0];
if($image_name->width) {
$text = sprintf('<img src="%s" border="0" alt="id: %s" title="id: %s" width="%s" height="%s" style="vertical-align:middle;margin-right:3px" />', Context::getRequestUri().$image_name->file, htmlspecialchars(strip_tags($matches[5])), htmlspecialchars(strip_tags($matches[5])), $image_name->width, $image_name->height);
}
if($image_mark->width) {
$text = sprintf('<img src="%s" border="0" alt="id: %s" title="id : %s" width="%s" height="%s" style="vertical-align:middle;margin-right:3px"/>%s', Context::getRequestUri().$image_mark->file, htmlspecialchars(strip_tags($matches[5])), htmlspecialchars(strip_tags($matches[5])), $image_mark->width, $image_mark->height, $text);
}
return sprintf('<span class="nowrap member_%d" style="cursor:pointer">%s</span>',$member_srl, $text);
}
/**
* @brief 최종 출력물에서 서명을 변경, 프로필 이미지도 같이 적용함
* member_extra_info 애드온에서 요청이
**/
function transSignature($matches) {
$oModuleModel = &getModel('module');
$memberModuleConfig = $oModuleModel->getModuleConfig('member');
$member_srl = $matches[2];
if(!$member_srl) return $matches[0];
// 전역변수에 미리 설정한 데이터가 있다면 그걸 return
if(!isset($GLOBALS['_transSignatureList'][$member_srl])) {
$oMemberModel = &getModel('member');
// 서명을 구해옴
$signature = $oMemberModel->getSignature($member_srl);
// 프로필 이미지를 구해옴
$profile_image = $oMemberModel->getProfileImage($member_srl);
if($profile_image->src) $signature = sprintf('<img src="%s" width="%d" height="%d" alt="" class="member_profile_image" />%s', $profile_image->src, $profile_image->width, $profile_image->height, $signature);
// 서명이 있으면 반환
if($signature) {
// 서명 높이 제한 값이 있으면 표시 높이 제한
if($memberModuleConfig->signature_max_height) {
$GLOBALS['_transSignatureList'][$member_srl] = sprintf('<div class="member_signature" style="max-height: %spx; overflow: auto; height: expression(this.scrollHeight > %s? \'%spx\': \'auto\');">%s<div class="clear"></div></div>', $memberModuleConfig->signature_max_height, $memberModuleConfig->signature_max_height, $memberModuleConfig->signature_max_height, $signature);
} else {
$GLOBALS['_transSignatureList'][$member_srl] = sprintf('<div class="member_signature">%s<div class="clear"></div></div>', $signature);
}
} else {
$GLOBALS['_transSignatureList'][$member_srl] = null;
}
}
return $GLOBALS['_transSignatureList'][$member_srl].$matches[0];
}
/**
* @brief 모든 세션 정보 파기
**/

View file

@ -106,8 +106,7 @@
// 일단 대상 파일을 읽어서 내용을 구함
ob_start();
@include($path);
$content = ob_get_contents();
ob_end_clean();
$content = ob_get_clean();
FileHandler::writeFile($cache_file, $content);
@ -127,8 +126,7 @@
ob_start();
@include($cache_file);
$content = ob_get_contents();
ob_end_clean();
$content = ob_get_clean();
return $content;
}

View file

@ -429,49 +429,5 @@
return $output;
}
/**
* @brief 포인트 레벨 아이콘 표시
**/
function transLevelIcon($matches) {
if(!$this->config) {
$oModuleModel = &getModel('module');
$this->config = $oModuleModel->getModuleConfig('point');
}
if(!$this->oPointModel) $this->oPointModel = &getModel('point');
$member_srl = $matches[3];
if($member_srl<1) return $matches[0];
if($this->member_code[$member_srl]) return $this->member_code[$member_srl];
$point = $this->oPointModel->getPoint($member_srl);
$level = $this->oPointModel->getLevel($point, $this->config->level_step);
$text = $matches[5];
$src = sprintf("modules/point/icons/%s/%d.gif", $this->config->level_icon, $level);
if(!$this->icon_width) {
$info = getimagesize($src);
$this->icon_width = $info[0];
$this->icon_height = $info[1];
}
if($level < $this->config->max_level) {
$next_point = $this->config->level_step[$level+1];
if($next_point > 0) {
$per = (int)($point / $next_point*100);
}
}
$title = sprintf("%s:%s%s %s, %s:%s/%s", Context::getLang('point'), $point, $this->config->point_name, $per?"(".$per."%)":"", Context::getLang('level'), $level, $this->config->max_level);
$text = sprintf('<span class="nowrap member_%s" style="cursor:pointer"><img src="%s" width="%s" height="%s" alt="%s" title="%s" style="vertical-align:middle;margin-right:3px"/>%s</span>', $member_srl, Context::getRequestUri().$src, $this->icon_width, $this->icon_height, $title, $title, $text);
$this->member_code[$member_srl] = $text;
return $this->member_code[$member_srl];
}
}
?>