diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 5e29a3bff..3f5b6f030 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -22,7 +22,7 @@ $fp = fopen($file_name, "r"); $buff = ''; if($fp) { - while(!feof($fp) || strlen($buff)<$filesize) { + while(!feof($fp) && strlen($buff)<=$filesize) { $str = fgets($fp, 1024); $buff .= $str; } diff --git a/classes/page/PageHandler.class.php b/classes/page/PageHandler.class.php index b1f2a96b2..487ffc215 100644 --- a/classes/page/PageHandler.class.php +++ b/classes/page/PageHandler.class.php @@ -31,7 +31,7 @@ $first_page = $cur_page-(int)($page_count/2); if($first_page<1) $first_page = 1; - $last_page = $first_page+$page_count-1; + $last_page = $total_page; if($last_page>$total_page) $last_page = $total_page; $this->first_page = $first_page; diff --git a/modules/importer/importer.controller.php b/modules/importer/importer.controller.php index cee6ee9b1..c20897157 100644 --- a/modules/importer/importer.controller.php +++ b/modules/importer/importer.controller.php @@ -7,6 +7,10 @@ class importerController extends importer { + var $oXml = null; + var $oMemberController = null; + var $oDocumentController = null; + /** * @brief 초기화 **/ @@ -75,24 +79,127 @@ } /** - * @brief import xml file - * XML File을 읽어서 파싱 후 입력.. + * @brief import 실행 **/ function procImporterAdminImport() { set_time_limit(0); + // 변수 체크 $module_srl = Context::get('module_srl'); - $category_srl = Context::get('category_srl'); + $category_srl = Context::get('category_list'); $xml_file = Context::get('xml_file'); // 파일을 찾을 수 없으면 에러 표시 if(!file_exists($xml_file)) return new Object(-1,'msg_no_xml_file'); - // XML Parser로 XML을 읽음 - $xml_doc = XmlParser::loadXmlFile($xml_file); + $this->oXml = new XmlParser(); - $this->setError(-1); - $this->setMessage('haha'); + // module_srl이 있으면 module데이터로 판단하여 처리, 아니면 회원정보로.. + if($module_srl) return $this->importModule($xml_file, $module_srl, $category_srl); + return $this->importMember($xml_file); + } + + /** + * @brief 회원정보 import + **/ + function importMember($xml_file) { + $filesize = filesize($xml_file); + if($filesize<1) return; + + $this->oMemberController = &getController('member'); + + $fp = fopen($xml_file, "r"); + $readed_size = 0; + if($fp) { + while(!feof($fp) && $readed_size<=$filesize) { + $str = fgets($fp, 256); + $readed_size += strlen($str); + + $buff .= $str; + $buff = preg_replace_callback('!([^<]*)!is', array($this, '_importMember'), $buff); + + if(eregi('', $str)) break; + } + fclose($fp); + } + + return new Object(0,'msg_import_finished'); + } + + function _importMember($matches) { + $user_id = $matches[1]; + $buff = sprintf('%s',base64_decode($matches[2])); + $xml_doc = $this->oXml->parse($buff); + + $args->user_id = $xml_doc->member->user_id->body; + $args->user_name = $xml_doc->member->user_name->body; + $args->nick_name = $xml_doc->member->nick_name->body; + $args->homepage = $xml_doc->member->homepage->body; + $args->birthday = $xml_doc->member->birthday->body; + $args->email_address = $xml_doc->member->email_address->body; + $args->password = $xml_doc->member->password->body; + $args->regdate = $xml_doc->member->regdate->body; + $args->allow_mailing = $xml_doc->member->allow_mailing->body; + $args->allow_message = 'Y'; + $output = $this->oMemberController->insertMember($args); + + if($output->toBool()) { + $member_srl = $output->get('member_srl'); + if($xml_doc->member->image_nickname->body) { + $image_nickname = base64_decode($xml_doc->member->image_nickname->body); + $fp = fopen('./files/cache/tmp_imagefile','w'); + fwrite($fp, $image_nickname); + fclose($fp); + + $this->oMemberController->insertImageName($member_srl, './files/cache/tmp_imagefile'); + } + if($xml_doc->member->image_mark->body) { + $image_mark = base64_decode($xml_doc->member->image_mark->body); + $fp = fopen('./files/cache/tmp_imagefile','w'); + fwrite($fp, $image_mark); + fclose($fp); + + $this->oMemberController->insertImageMark($member_srl, './files/cache/tmp_imagefile'); + } + @unlink('./files/cache/tmp_imagefile'); + if($xml_doc->member->signature->body) { + $oMemberController->putSignature($member_srl, $xml_doc->member->signature->body); + } + } + + usleep(100); + return ''; + } + + /** + * @brief 게시물 import + **/ + function importModule($xml_file) { + $filesize = filesize($xml_file); + if($filesize<1) return; + + $this->oDocumentController = &getController('document'); + + $fp = fopen($xml_file, "r"); + $readed_size = 0; + if($fp) { + while(!feof($fp) && $readed_size<=$filesize) { + $str = fgets($fp, 1024); + $readed_size += strlen($str); + + $buff .= $str; + $buff = preg_replace_callback('!([^<]*)!is', array($this, '_importModule'), $buff); + } + fclose($fp); + } + + return new Object(-1,'haha'); + } + + function _importModule($matches) { + $user_id = $matches[1]; + $xml_doc = sprintf('%s',base64_decode($matches[2])); + return ''; } } ?> diff --git a/modules/importer/lang/ko.lang.php b/modules/importer/lang/ko.lang.php index 779d85809..702e47fae 100644 --- a/modules/importer/lang/ko.lang.php +++ b/modules/importer/lang/ko.lang.php @@ -35,6 +35,8 @@ // 안내/경고 $lang->msg_sync_member = '동기화 버튼을 클릭하시면 회원정보와 게시물정보의 동기화를 시작합니다.'; $lang->msg_no_xml_file = 'XML파일을 찾을 수 없습니다. 경로를 다시 확인해주세요'; + $lang->msg_invalid_xml_file = '잘못된 형식의 XML파일입니다'; + $lang->msg_import_finished = '데이터 입력이 완료되었습니다. 상황에 따라 입력되지 못한 데이터가 있을 수 있습니다.'; // 주절 주절.. $lang->about_type_member = '데이터 이전 대상이 회원정보일 경우 선택해주세요'; diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 70a60781d..3bbcab8d4 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -725,6 +725,16 @@ $config = $oModuleModel->getModuleConfig('member'); 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']); + + // 페이지 리프레쉬 + $this->setRefreshPage(); + } + + function insertImageName($member_srl, $target_file) { + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + // 정해진 사이즈를 구함 $max_width = $config->image_name_max_width; if(!$max_width) $max_width = "90"; @@ -732,10 +742,7 @@ if(!$max_height) $max_height = "20"; $target_filename = sprintf('files/attach/member_extra_info/image_name/%s%d.gif', getNumberingPath($member_srl), $member_srl); - FileHandler::createImageFile($file['tmp_name'], $target_filename, $max_width, $max_height, 'gif'); - - // 페이지 리프레쉬 - $this->setRefreshPage(); + FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, 'gif'); } /** @@ -778,6 +785,16 @@ $config = $oModuleModel->getModuleConfig('member'); 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']); + + // 페이지 리프레쉬 + $this->setRefreshPage(); + } + + function insertImageMark($member_srl, $target_file) { + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('member'); + // 정해진 사이즈를 구함 $max_width = $config->image_mark_max_width; if(!$max_width) $max_width = "20"; @@ -785,10 +802,8 @@ if(!$max_height) $max_height = "20"; $target_filename = sprintf('files/attach/member_extra_info/image_mark/%s%d.gif', getNumberingPath($member_srl), $member_srl); - FileHandler::createImageFile($file['tmp_name'], $target_filename, $max_width, $max_height, 'gif'); + FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, 'gif'); - // 페이지 리프레쉬 - $this->setRefreshPage(); } /** diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index 165704d49..b6fc98fa9 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -28,7 +28,7 @@ - {$val->member_srl} + {$no} {htmlspecialchars($val->user_id)} {htmlspecialchars($val->user_name)}
{htmlspecialchars($val->nick_name)}