회원 프로필 사진 업로드 시 파일 용량 제한 설정 추가

xpressengine/xe-core#2202

- 기본 값 : 용량 제한하지 않음
- KB 단위로 지정할 수 있으며
- 이미지가 리사이즈 과정을 거치는 경우 리사이즈 된 파일의 용량으로 적용 함
This commit is contained in:
bnu 2018-01-04 17:40:19 +09:00 committed by Kijin Sung
parent 4dede913e4
commit 2119c84b77
4 changed files with 175 additions and 48 deletions

View file

@ -1060,13 +1060,12 @@ class memberController extends member
$logged_info = Context::get('logged_info');
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_profile_image');
// Return if member module is set not to use an image name or the user is not an administrator ;
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
if($logged_info->is_admin != 'Y' && $config->profile_image != 'Y') return $this->stop('msg_not_uploaded_profile_image');
$this->insertProfileImage($member_srl, $file['tmp_name']);
// Page refresh
//$this->setRefreshPage();
$output = $this->insertProfileImage($member_srl, $file['tmp_name']);
if(!$output->toBool()) return $output;
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberModifyInfo');
$this->setRedirectUrl($returnUrl);
@ -1084,38 +1083,69 @@ class memberController extends member
{
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
// Get an image size
$max_width = $config->profile_image_max_width;
if(!$max_width) $max_width = "90";
$max_height = $config->profile_image_max_height;
if(!$max_height) $max_height = "90";
// Get a target path to save
$target_path = sprintf('files/member_extra_info/profile_image/%s', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
$max_filesize = $config->profile_image_max_filesize;
Context::loadLang(_XE_PATH_ . 'modules/file/lang');
// Get file information
list($width, $height, $type, $attrs) = @getimagesize($target_file);
FileHandler::clearStatCache($target_file);
list($width, $height, $type) = @getimagesize($target_file);
if(IMAGETYPE_PNG == $type) $ext = 'png';
elseif(IMAGETYPE_JPEG == $type) $ext = 'jpg';
elseif(IMAGETYPE_GIF == $type) $ext = 'gif';
else
{
return;
return $this->stop('msg_not_uploaded_profile_image');
}
FileHandler::removeFilesInDir($target_path);
$target_path = sprintf('files/member_extra_info/profile_image/%s', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
$target_filename = sprintf('%s%d.%s', $target_path, $member_srl, $ext);
// Convert if the image size is larger than a given size
if($width > $max_width || $height > $max_height)
{
FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, $ext);
$temp_filename = sprintf('files/cache/tmp/profile_image_%d.%s', $member_srl, $ext);
FileHandler::createImageFile($target_file, $temp_filename, $max_width, $max_height, $ext);
// 파일 용량 제한
FileHandler::clearStatCache($temp_filename);
$filesize = filesize($temp_filename);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
FileHandler::removeFile($temp_filename);
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_profile_image'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
FileHandler::moveFile($temp_filename, $target_filename);
FileHandler::clearStatCache($target_filename);
}
else
{
// 파일 용량 제한
$filesize = filesize($target_file);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_profile_image'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
@copy($target_file, $target_filename);
FileHandler::clearStatCache($target_filename);
}
return new BaseObject(0, 'success');
}
/**
@ -1135,11 +1165,13 @@ class memberController extends member
$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 if member module is set not to use an image name or the user is not an administrator ;
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
if($logged_info->is_admin != 'Y' && $config->image_name != 'Y') return $this->stop('msg_not_uploaded_image_name');
$this->insertImageName($member_srl, $file['tmp_name']);
$output = $this->insertImageName($member_srl, $file['tmp_name']);
if(!$output->toBool()) return $output;
// Page refresh
//$this->setRefreshPage();
@ -1157,23 +1189,63 @@ class memberController extends member
*/
function insertImageName($member_srl, $target_file)
{
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
// Get an image size
$max_width = $config->image_name_max_width;
if(!$max_width) $max_width = "90";
$max_height = $config->image_name_max_height;
if(!$max_height) $max_height = "20";
$max_filesize = $config->image_name_max_filesize;
Context::loadLang(_XE_PATH_ . 'modules/file/lang');
// Get a target path to save
$target_path = sprintf('files/member_extra_info/image_name/%s/', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
$target_filename = sprintf('%s%d.gif', $target_path, $member_srl);
// Get file information
list($width, $height, $type, $attrs) = @getimagesize($target_file);
list($width, $height, $type) = @getimagesize($target_file);
// Convert if the image size is larger than a given size or if the format is not a gif
if($width > $max_width || $height > $max_height || $type!=1) FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, 'gif');
else @copy($target_file, $target_filename);
if($width > $max_width || $height > $max_height || $type!=1)
{
$temp_filename = sprintf('files/cache/tmp/image_name_%d.gif', $member_srl, $ext);
FileHandler::createImageFile($target_file, $temp_filename, $max_width, $max_height, 'gif');
// 파일 용량 제한
FileHandler::clearStatCache($temp_filename);
$filesize = filesize($temp_filename);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
FileHandler::removeFile($temp_filename);
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_image_name'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
FileHandler::moveFile($temp_filename, $target_filename);
FileHandler::clearStatCache($target_filename);
}
else
{
// 파일 용량 제한
$filesize = filesize($target_file);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_image_name'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
@copy($target_file, $target_filename);
FileHandler::clearStatCache($target_filename);
}
return new BaseObject(0, 'success');
}
/**
@ -1244,13 +1316,12 @@ class memberController extends member
$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');
// Membership in the images mark the module using the ban was set by an administrator or return;
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
if($logged_info->is_admin != 'Y' && $config->image_mark != 'Y') return $this->stop('msg_not_uploaded_image_mark');
$this->insertImageMark($member_srl, $file['tmp_name']);
// Page refresh
//$this->setRefreshPage();
if(!$output->toBool()) return $output;
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', 'dispMemberModifyInfo');
$this->setRedirectUrl($returnUrl);
@ -1266,13 +1337,15 @@ class memberController extends member
*/
function insertImageMark($member_srl, $target_file)
{
$oModuleModel = getModel('module');
$config = $oModuleModel->getModuleConfig('member');
$oMemberModel = getModel('member');
$config = $oMemberModel->getMemberConfig();
// Get an image size
$max_width = $config->image_mark_max_width;
if(!$max_width) $max_width = "20";
$max_height = $config->image_mark_max_height;
if(!$max_height) $max_height = "20";
$max_filesize = $config->image_mark_max_filesize;
Context::loadLang(_XE_PATH_ . 'modules/file/lang');
$target_path = sprintf('files/member_extra_info/image_mark/%s/', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
@ -1281,8 +1354,45 @@ class memberController extends member
// Get file information
list($width, $height, $type, $attrs) = @getimagesize($target_file);
if($width > $max_width || $height > $max_height || $type!=1) FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, 'gif');
else @copy($target_file, $target_filename);
if($width > $max_width || $height > $max_height || $type!=1)
{
$temp_filename = sprintf('files/cache/tmp/image_mark_%d.gif', $member_srl);
FileHandler::createImageFile($target_file, $temp_filename, $max_width, $max_height, 'gif');
// 파일 용량 제한
FileHandler::clearStatCache($temp_filename);
$filesize = filesize($temp_filename);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
FileHandler::removeFile($temp_filename);
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_group_image_mark'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
FileHandler::moveFile($temp_filename, $target_filename);
FileHandler::clearStatCache($target_filename);
}
else
{
$filesize = filesize($target_file);
if($max_filesize && $filesize > ($max_filesize * 1024))
{
FileHandler::removeFile($target_file);
return $this->stop(implode(' ' , array(
Context::getLang('msg_not_uploaded_group_image_mark'),
Context::getLang('msg_exceeds_limit_size')
)));
}
FileHandler::removeFilesInDir($target_path);
@copy($target_file, $target_filename);
FileHandler::clearStatCache($target_filename);
}
return new BaseObject(0, 'success');
}
/**