diff --git a/classes/module/ModuleObject.class.php b/classes/module/ModuleObject.class.php index bf67c53bd..6c5840476 100644 --- a/classes/module/ModuleObject.class.php +++ b/classes/module/ModuleObject.class.php @@ -49,6 +49,17 @@ $this->add('redirect_url', $url); } + /** + * @brief 현재 페이지를 refresh시킴 + * + * 공통 tpl중 refresh.html을 실행할 뿐.. + **/ + function setRefreshPage() { + $this->setTemplatePath('./common/tpl'); + $this->setTemplateFile('refresh'); + } + + /** * @brief act값 지정 **/ diff --git a/common/js/xml_handler.js b/common/js/xml_handler.js index dbee5c73c..7e7546820 100644 --- a/common/js/xml_handler.js +++ b/common/js/xml_handler.js @@ -15,8 +15,10 @@ function exec_xml(module, act, params, callback_func, response_tags, callback_fu } oXml.addParam("module", module); oXml.addParam("act", act); + oXml.addParam("referer_url", location.href); if(typeof(response_tags)=="undefined" || response_tags.length<1) response_tags = new Array('error','message'); + response_tags[response_tags.length] = "redirect_url"; if(show_waiting_message) { diff --git a/common/tpl/refresh.html b/common/tpl/refresh.html new file mode 100644 index 000000000..2f4983d1d --- /dev/null +++ b/common/tpl/refresh.html @@ -0,0 +1,3 @@ + diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index f513e0df8..5fbf4d941 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -22,6 +22,8 @@ + + diff --git a/modules/member/lang/ko.lang.php b/modules/member/lang/ko.lang.php index 0d7e57ea3..58062ab1a 100644 --- a/modules/member/lang/ko.lang.php +++ b/modules/member/lang/ko.lang.php @@ -30,7 +30,11 @@ $lang->group_srl = '그룹번호'; $lang->image_name = '이미지 이름'; + $lang->image_name_max_width = '가로 제한 크기'; + $lang->image_name_max_height = '세로 제한 크기'; $lang->image_mark = '이미지 마크'; + $lang->image_mark_max_width = '가로 제한 크기'; + $lang->image_mark_max_height = '세로 제한 크기'; $lang->enable_join = '회원 가입 허가'; $lang->redirect_url = '회원 가입후 이동할 페이지'; $lang->agreement = '회원 가입 약관'; @@ -54,6 +58,9 @@ $lang->msg_exists_email_address = '이미 존재하는 메일주소입니다. 다른 메일주소를 입력해주세요'; $lang->msg_exists_nick_name = '이미 존재하는 닉네임입니다. 다른 닉네임을 입력해주세요'; + $lang->msg_not_uploaded_image_name = '이미지 이름을 등록할 수가 없습니다'; + $lang->msg_not_uploaded_image_mark = '이미지 마크를 등록할 수가 없습니다'; + $lang->about_user_id = '사용자 ID는 3~20자 사이의 영문+숫자로 이루어져야 하며 영문으로 시작되어야 합니다'; $lang->about_password = '비밀번호는 6~20자로 되어야 합니다'; $lang->about_user_name = '이름은 2~20자 이내여야 합니다'; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 56ca72ff0..7c342bdeb 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -135,8 +135,10 @@ **/ function procInsertConfig() { // 기본 정보를 받음 - $args = Context::gets('enable_join','redirect_url','agreement','image_name','image_mark'); + $args = Context::gets('enable_join','redirect_url','agreement','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height'); if($args->enable_join!='Y') $args->enable_join = 'N'; + if($args->image_name!='Y') $args->image_name = 'N'; + if($args->image_mark!='Y') $args->image_mark = 'N'; // module Controller 객체 생성하여 입력 $oModuleController = &getController('module'); @@ -648,6 +650,76 @@ return new Object(); } + /** + * @brief 이미지 이름을 추가 + **/ + function procInsertImageName() { + // 정상적으로 업로드 된 파일인지 검사 + $file = $_FILES['image_name']; + if(!is_uploaded_file($file['tmp_name'])) return $this->stop('msg_not_uploaded_image_name'); + + // 회원 정보를 검사해서 회원번호가 없거나 관리자가 아니고 회원번호가 틀리면 무시 + $member_srl = Context::get('member_srl'); + if(!$member_srl) return $this->stop('msg_not_uploaded_image_name'); + + $logged_info = Context::get('logged_info'); + if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_image_name'); + + // 회원 모듈 설정에서 이미지 이름 사용 금지를 하였을 경우 관리자가 아니면 return; + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + if($logged_info->is_admin != 'Y' && $config->image_name != 'Y') return $this->stop('msg_not_uploaded_image_name'); + + // 정해진 사이즈를 구함 + $max_width = $config->image_name_max_width; + if(!$max_width) $max_width = "80"; + $max_height = $config->image_name_max_height; + if(!$max_height) $max_height = "20"; + + // 이미지 정보를 구함 + list($width, $height, $type, $attrs) = getimagesize($file['tmp_name']); + + // 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 + if($width>$max_width) $new_width = $max_width; + else $new_width = $width; + if($height>$max_height) $new_height = $max_height; + else $new_height = $height; + + // 업로드한 파일을 옮기지 않고 gd를 이용해서 gif 이미지를 만듬 (gif, jpg, png, bmp가 아니면 역시 무시) + $thumb = imagecreatetruecolor($new_width, $new_height); + switch($type) { + // gif + case 1 : + $source = imagecreatefromgif($file['tmp_name']); + break; + // jpg + case 2 : + $source = imagecreatefromjpeg($file['tmp_name']); + break; + // png + case 3 : + $source = imagecreatefrompng($file['tmp_name']); + break; + // bmp + case 6 : + $source = imagecreatefromwbmp($file['tmp_name']); + break; + } + + if(!$source) return $this->stop('msg_not_uploaded_image_name'); + + if(function_exists('imagecopyresampled')) imagecopyresampled($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + else imagecopyresized($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + + // 파일을 쓰고 끝냄 + $target_filename = sprintf('files/attach/image_name/%s%d.gif', getNumberingPath($member_srl), $member_srl); + imagegif($thumb, $target_filename, 100); + @unlink($file['tmp_name']); + + // 페이지 리프레쉬 + $this->setRefreshPage(); + } + /** * @brief 이미지 이름을 삭제 **/ @@ -655,6 +727,10 @@ $member_srl = Context::get('member_srl'); if(!$member_srl) return new Object(0,'success'); + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + if($config->image_mark == 'N') return new Object(0,'success'); + $logged_info = Context::get('logged_info'); if($logged_info->is_admin == 'Y' || $logged_info->member_srl == $member_srl) { $oMemberModel = &getModel('member'); @@ -664,6 +740,75 @@ return new Object(0,'success'); } + /** + * @brief 이미지 마크를 추가 + **/ + function procInsertImageMark() { + // 정상적으로 업로드 된 파일인지 검사 + $file = $_FILES['image_mark']; + if(!is_uploaded_file($file['tmp_name'])) return $this->stop('msg_not_uploaded_image_mark'); + + // 회원 정보를 검사해서 회원번호가 없거나 관리자가 아니고 회원번호가 틀리면 무시 + $member_srl = Context::get('member_srl'); + if(!$member_srl) return $this->stop('msg_not_uploaded_image_mark'); + + $logged_info = Context::get('logged_info'); + if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_image_mark'); + + // 회원 모듈 설정에서 이미지 마크 사용 금지를 하였을 경우 관리자가 아니면 return; + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + if($logged_info->is_admin != 'Y' && $config->image_mark != 'Y') return $this->stop('msg_not_uploaded_image_mark'); + + // 정해진 사이즈를 구함 + $max_width = $config->image_mark_max_width; + if(!$max_width) $max_width = "80"; + $max_height = $config->image_mark_max_height; + if(!$max_height) $max_height = "20"; + + // 이미지 정보를 구함 + list($width, $height, $type, $attrs) = getimagesize($file['tmp_name']); + + // 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 + if($width>$max_width) $new_width = $max_width; + else $new_width = $width; + if($height>$max_height) $new_height = $max_height; + else $new_height = $height; + + // 업로드한 파일을 옮기지 않고 gd를 이용해서 gif 이미지를 만듬 (gif, jpg, png, bmp가 아니면 역시 무시) + $thumb = imagecreatetruecolor($new_width, $new_height); + switch($type) { + // gif + case 1 : + $source = imagecreatefromgif($file['tmp_name']); + break; + // jpg + case 2 : + $source = imagecreatefromjpeg($file['tmp_name']); + break; + // png + case 3 : + $source = imagecreatefrompng($file['tmp_name']); + break; + // bmp + case 6 : + $source = imagecreatefromwbmp($file['tmp_name']); + break; + } + + if(!$source) return $this->stop('msg_not_uploaded_image_mark'); + + if(function_exists('imagecopyresampled')) imagecopyresampled($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + else imagecopyresized($thumb, $source, 0, 0, 0, 0, $new_width, $new_height, $width, $height); + + // 파일을 쓰고 끝냄 + $target_filename = sprintf('files/attach/image_mark/%s%d.gif', getNumberingPath($member_srl), $member_srl); + imagegif($thumb, $target_filename, 100); + + // 페이지 리프레쉬 + $this->setRefreshPage(); + } + /** * @brief 이미지 마크를 삭제 **/ diff --git a/modules/member/member.view.php b/modules/member/member.view.php index b81f49211..2e8b73060 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -127,6 +127,10 @@ // 설정 정보를 받아옴 (module model 객체를 이용) $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('member'); + if(!$config->image_name_max_width) $config->image_name_max_width = 80; + if(!$config->image_name_max_height) $config->image_name_max_height = 20; + if(!$config->image_mark_max_width) $config->image_mark_max_width = 20; + if(!$config->image_mark_max_height) $config->image_mark_max_height = 20; Context::set('config',$config); // 회원 관리 모듈의 스킨 목록을 구함 diff --git a/modules/member/tpl.admin/member_config.html b/modules/member/tpl.admin/member_config.html index b2016daab..40d6c584c 100644 --- a/modules/member/tpl.admin/member_config.html +++ b/modules/member/tpl.admin/member_config.html @@ -22,14 +22,22 @@ {$lang->image_name} - image_name=='Y')-->checked="true"/> + + image_name=='Y')-->checked="true"/>
+ {$lang->image_name_max_width} : px
+ {$lang->image_name_max_height} : px
+ {$lang->about_image_name} {$lang->image_mark} - image_mark=='Y')-->checked="true"/> + + image_mark=='Y')-->checked="true"/>
+ {$lang->image_mark_max_width} : px
+ {$lang->image_mark_max_height} : px
+ {$lang->about_image_mark} diff --git a/modules/member/tpl.admin/member_info.html b/modules/member/tpl.admin/member_info.html index 5862a6a99..e01c0c7a4 100644 --- a/modules/member/tpl.admin/member_info.html +++ b/modules/member/tpl.admin/member_info.html @@ -24,18 +24,40 @@ {$lang->image_name} + +
+
+ + + + + +
+
{$lang->image_mark} + +
+
+ + + + + +
+
@@ -90,3 +112,5 @@ + +