function getLoginUrl($provider) { $result = new Object(); // 제공하는 서비스인지 확인 if (!$this->providerManager->inProvider($provider)) { $result->setError(-1); $result->setMessage('msg_invalid_provider'); return $result; } // 요청 토큰을 얻는다. $output = $this->getRequestToken(); if ($output->error) { $result->setError($output->error); $result->setMessage($output->message); return $result; } $request_token = $output->request_token; if (!$request_token) { $result->setError(-1); $result->setMessage('msg_request_error'); return $result; } // 요청 토큰을 세션에 저장한다. $this->session->setSession('request_token', $request_token); // 요청 URL 생성 $xe = preg_replace('@^https?://[^/]+/?@', '', Context::getRequestUri()); $data = array('provider' => $provider, 'request_token' => $request_token, 'xe' => $xe); $url = $this->getURL('login', $data); $result->add('url', $url); return $result; }
/** * @brief Message output **/ function dispMessage() { // Get configurations (using module model object) $oModuleModel = getModel('module'); $config = $oModuleModel->getModuleConfig('message'); if (!$config->mskin) { $config->mskin = 'default'; } // Set the template path $template_path = sprintf('%sm.skins/%s', $this->module_path, $config->mskin); // Get the member configuration $oModuleModel = getModel('module'); $member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; if ($member_config->enable_ssl == 'Y') { if (strncasecmp('https://', Context::getRequestUri(), 8) === 0) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); Context::set('system_message', nl2br($this->getMessage())); Context::set('act', 'procMemberLogin'); Context::set('mid', ''); $this->setTemplatePath($template_path); $this->setTemplateFile('system_message'); }
/** * @brief If member_srl exists in the div or span, replace to image name or nick image for each member_srl * */ function memberTransImageName($matches) { // If member_srl < 0, then return text only in the body $member_srl = $matches[3]; if ($member_srl < 0) { return $matches[5]; } // If member_srl=o(not a member), return the entire body if (!$member_srl) { return $matches[0]; } $oMemberModel = getModel('member'); $nick_name = $matches[5]; // Initialize global variable for cache if (!isset($GLOBALS['_transImageNameList'][$member_srl])) { $GLOBALS['_transImageNameList'][$member_srl] = new stdClass(); } $_tmp =& $GLOBALS['_transImageNameList'][$member_srl]; // If pre-defined data in the global variables, return it if (!$_tmp->cached) { $_tmp->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(_XE_PATH_ . $image_name_file)) { $_tmp->image_name_file = $image_name_file . '?' . date('YmdHis', filemtime(_XE_PATH_ . $image_name_file)); $image_name_file = $_tmp->image_name_file; } else { $image_name_file = ''; } if (file_exists(_XE_PATH_ . $image_mark_file)) { $_tmp->image_mark_file = $image_mark_file . '?' . date('YmdHis', filemtime(_XE_PATH_ . $image_mark_file)); $image_mark_file = $_tmp->image_mark_file; } else { $image_mark_file = ''; } $site_module_info = Context::get('site_module_info'); $group_image = $oMemberModel->getGroupImageMark($member_srl, $site_module_info->site_srl); $_tmp->group_image = $group_image; } else { $group_image = $_tmp->group_image; $image_name_file = $_tmp->image_name_file; $image_mark_file = $_tmp->image_mark_file; } // If image name and mark doesn't exist, set the original information if (!$image_name_file && !$image_mark_file && !$group_image) { return $matches[0]; } // check member_config $config = $oMemberModel->getMemberConfig(); if ($config->image_name == 'Y' && $image_name_file) { $nick_name = sprintf('<img src="%s%s" alt="id: %s" title="id: %s" style="border:0;vertical-align:middle;margin-right:3px" />', Context::getRequestUri(), $image_name_file, strip_tags($nick_name), strip_tags($nick_name)); } if ($config->image_mark == 'Y' && $image_mark_file) { $nick_name = sprintf('<img src="%s%s" alt="id: %s" title="id : %s" style="border:0;vertical-align:middle;margin-right:3px"/>%s', Context::getRequestUri(), $image_mark_file, strip_tags($nick_name), strip_tags($nick_name), $nick_name); } if ($group_image) { $nick_name = sprintf('<img src="%s" style="border:0;max-height:16px;vertical-align:middle;margin-right:3px" alt="%s" title="%s" />%s', $group_image->src, $group_image->title, $group_image->description, $nick_name); } return preg_replace('/' . preg_quote($matches[5], '/') . '<\\/' . $matches[6] . '>$/', '', $matches[0]) . $nick_name . '</' . $matches[6] . '>'; }
/** * @brief Widget execution * Get extra_vars declared in ./widgets/widget/conf/info.xml as arguments * After generating the result, do not print but return it. */ function proc($args) { // Set a path of the template skin (values of skin, colorset settings) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); Context::set('colorset', $args->colorset); // Specify a template file if (Context::get('is_logged')) { $tpl_file = 'login_info'; } else { $tpl_file = 'login_form'; } // Get the member configuration $oModuleModel = getModel('module'); $this->member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $this->member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; $useSsl = Context::getSslStatus(); if ($useSsl != 'none') { if (strncasecmp('https://', Context::getRequestUri(), 8) === 0) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); // Compile a template $oTemplate =& TemplateHandler::getInstance(); return $oTemplate->compile($tpl_path, $tpl_file); }
/** * @brief 메세지 출력 **/ function dispMessage() { // 설정 정보를 받아옴 (module model 객체를 이용) $oModuleModel =& getModel('module'); $config = $oModuleModel->getModuleConfig('message'); if (!$config->skin) { $config->skin = 'default'; } // 템플릿 경로를 지정 $template_path = sprintf('%sskins/%s', $this->module_path, $config->skin); // 회원 관리 정보를 받음 $oModuleModel =& getModel('module'); $member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $member_config); // ssl 사용시 현재 https접속상태인지에 대한 flag및 https url 생성 $ssl_mode = false; if ($member_config->enable_ssl == 'Y') { if (preg_match('/^https:\\/\\//i', Context::getRequestUri())) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); Context::set('system_message', nl2br($this->getMessage())); $this->setTemplatePath($template_path); $this->setTemplateFile('system_message'); }
/** * @brief Display messages **/ function dispMessage() { // Get configurations (using module model object) $oModuleModel =& getModel('module'); $this->module_config = $config = $oModuleModel->getModuleConfig('message', $this->module_info->site_srl); if (!$config->skin) { $config->skin = 'default'; $template_path = sprintf('%sskins/%s', $this->module_path, $config->skin); } else { //check theme $config_parse = explode('|@|', $config->skin); if (count($config_parse) > 1) { $template_path = sprintf('./themes/%s/modules/message/', $config_parse[0]); } else { $template_path = sprintf('%sskins/%s', $this->module_path, $config->skin); } } // Template path $this->setTemplatePath($template_path); // Get the member configuration $member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; if ($member_config->enable_ssl == 'Y') { if (preg_match('/^https:\\/\\//i', Context::getRequestUri())) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); Context::set('system_message', nl2br($this->getMessage())); $this->setTemplateFile('system_message'); }
/** * @brief Display messages */ function dispMessage($detail = null) { // Get configurations (using module model object) $oModuleModel = getModel('module'); $this->module_config = $config = $oModuleModel->getModuleConfig('message', $this->module_info->site_srl); if (!$config) { $config = new stdClass(); } if (!$config->skin) { $config->skin = 'xedition'; } $template_path = sprintf('%sskins/%s', $this->module_path, $config->skin); // Template path $this->setTemplatePath($template_path); // Get the member configuration $member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; if ($member_config->enable_ssl == 'Y') { if (strncasecmp('https://', Context::getRequestUri(), 8) === 0) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); Context::set('system_message', nl2br($this->getMessage())); Context::set('system_message_detail', nl2br($detail)); $this->setTemplateFile('system_message'); // Default 403 Error if ($this->getHttpStatusCode() === 200) { $this->setHttpStatusCode(403); } }
/** * Check whether to use RSS rss url by adding * * @return Object */ function triggerRssUrlInsert() { $oModuleModel = getModel('module'); $total_config = $oModuleModel->getModuleConfig('rss'); $current_module_srl = Context::get('module_srl'); $site_module_info = Context::get('site_module_info'); if (is_array($current_module_srl)) { unset($current_module_srl); } if (!$current_module_srl) { $current_module_info = Context::get('current_module_info'); $current_module_srl = $current_module_info->module_srl; } if (!$current_module_srl) { return new Object(); } // Imported rss settings of the selected module $oRssModel = getModel('rss'); $rss_config = $oRssModel->getRssModuleConfig($current_module_srl); if ($rss_config->open_rss != 'N') { Context::set('rss_url', $oRssModel->getModuleFeedUrl(Context::get('vid'), Context::get('mid'), 'rss')); Context::set('atom_url', $oRssModel->getModuleFeedUrl(Context::get('vid'), Context::get('mid'), 'atom')); } if (Context::isInstalled() && $site_module_info->mid == Context::get('mid') && $total_config->use_total_feed != 'N') { if (Context::isAllowRewrite() && !Context::get('vid')) { $request_uri = Context::getRequestUri(); Context::set('general_rss_url', $request_uri . 'rss'); Context::set('general_atom_url', $request_uri . 'atom'); } else { Context::set('general_rss_url', getUrl('', 'module', 'rss', 'act', 'rss')); Context::set('general_atom_url', getUrl('', 'module', 'rss', 'act', 'atom')); } } return new Object(); }
/** * @brief 위젯의 실행 부분 * ./widgets/위젯/conf/info.xml에 선언한 extra_vars를 args로 받는다 * 결과를 만든후 print가 아니라 return 해주어야 한다 **/ function proc($args) { // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); Context::set('colorset', $args->colorset); // 템플릿 파일을 지정 if (Context::get('is_logged')) { $tpl_file = 'login_info'; } else { $tpl_file = 'login_form'; } // 회원 관리 정보를 받음 $oModuleModel =& getModel('module'); $this->member_config = $oModuleModel->getModuleConfig('member'); Context::set('member_config', $this->member_config); // ssl 사용시 현재 https접속상태인지에 대한 flag및 https url 생성 $ssl_mode = false; if ($this->member_config->enable_ssl == 'Y') { if (preg_match('/^https:\\/\\//i', Context::getRequestUri())) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); // 템플릿 컴파일 $oTemplate =& TemplateHandler::getInstance(); return $oTemplate->compile($tpl_path, $tpl_file); }
/** * @brief 쪽지 발송 **/ function procCommunicationSendMessage() { // 로그인 정보 체크 if (!Context::get('is_logged')) { return new Object(-1, 'msg_not_logged'); } $logged_info = Context::get('logged_info'); // 변수 검사 $receiver_srl = Context::get('receiver_srl'); if (!$receiver_srl) { return new Object(-1, 'msg_not_exists_member'); } $title = trim(Context::get('title')); if (!$title) { return new Object(-1, 'msg_title_is_null'); } $content = trim(Context::get('content')); if (!$content) { return new Object(-1, 'msg_content_is_null'); } $send_mail = Context::get('send_mail'); if ($send_mail != 'Y') { $send_mail = 'N'; } // 받을 회원이 있는지에 대한 검사 $oMemberModel =& getModel('member'); $oCommunicationModel =& getModel('communication'); $receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl); if ($receiver_member_info->member_srl != $receiver_srl) { return new Object(-1, 'msg_not_exists_member'); } // 받을 회원의 쪽지 수신여부 검사 (최고관리자이면 패스) if ($logged_info->is_admin != 'Y') { if ($receiver_member_info->allow_message == 'F') { if (!$oCommunicationModel->isFriend($receiver_member_info->member_srl)) { return new object(-1, 'msg_allow_message_to_friend'); } } elseif ($receiver_member_info->allow_messge == 'N') { return new object(-1, 'msg_disallow_message'); } } // 쪽지 발송 $output = $this->sendMessage($logged_info->member_srl, $receiver_srl, $title, $content); // 메일로도 발송 if ($output->toBool() && $send_mail == 'Y') { $view_url = Context::getRequestUri(); $content = sprintf("%s<br /><br />From : <a href=\"%s\" target=\"_blank\">%s</a>", $content, $view_url, $view_url); $oMail = new Mail(); $oMail->setTitle($title); $oMail->setContent($content); $oMail->setSender($logged_info->user_name, $logged_info->email_address); $oMail->setReceiptor($receiver_member_info->user_name, $receiver_member_info->email_address); $oMail->send(); } return $output; }
/** * @brief 카페 메인 출력 **/ function dispHomepageIndex() { $oHomepageAdminModel =& getAdminModel('homepage'); $oHomepageModel =& getModel('homepage'); $oModuleModel =& getModel('module'); $template_path = sprintf("%sskins/%s/", $this->module_path, $this->module_info->skin); if (!is_dir($template_path) || !$this->module_info->skin) { $this->module_info->skin = 'xe_default'; $template_path = sprintf("%sskins/%s/", $this->module_path, $this->module_info->skin); } $this->setTemplatePath($template_path); // 카페 목록을 구함 $page = Context::get('page'); $output = $oHomepageAdminModel->getHomepageList($page); if ($output->data && count($output->data)) { foreach ($output->data as $key => $val) { $banner_src = 'files/attach/cafe_banner/' . $val->site_srl . '.jpg'; if (file_exists(_XE_PATH_ . $banner_src)) { $output->data[$key]->cafe_banner = $banner_src . '?rnd=' . filemtime(_XE_PATH_ . $banner_src); } $url = getSiteUrl($val->domain, ''); if (substr($url, 0, 1) == '/') { $url = substr(Context::getRequestUri(), 0, -1) . $url; } $output->data[$key]->url = $url; } } Context::set('total_count', $output->total_count); Context::set('total_page', $output->total_page); Context::set('page', $output->page); Context::set('homepage_list', $output->data); Context::set('page_navigation', $output->page_navigation); // 카페 생성 권한 세팅 if ($oHomepageModel->isCreationGranted()) { Context::set('isEnableCreateCafe', true); Context::addJsFilter($this->module_path . 'tpl/filter', 'cafe_creation.xml'); } // 카페의 최신 글 추출 $output = executeQueryArray('homepage.getNewestDocuments'); Context::set('newest_documents', $output->data); // 카페의 최신 댓글 추출 $output = executeQueryArray('homepage.getNewestComments'); Context::set('newest_comments', $output->data); $logged_info = Context::get('logged_info'); if ($logged_info->member_srl) { $myargs->member_srl = $logged_info->member_srl; $output = executeQueryArray('homepage.getMyCafes', $myargs); Context::set('my_cafes', $output->data); } $homepage_info = $oModuleModel->getModuleConfig('homepage'); if ($homepage_info->use_rss == 'Y') { Context::set('rss_url', getUrl('', 'mid', $this->module_info->mid, 'act', 'rss')); } $this->setTemplateFile('index'); }
/** * @brief Function to change point icon. */ function pointLevelIconTrans($matches, $addon_info) { $member_srl = $matches[3]; // If anonymous or not member_srl go to Hide Point Icon if ($member_srl < 1 || !$member_srl) { return $matches[0]; } if ($addon_info->icon_duplication != 'N') { // Check Group Image Mark $oMemberModel = getModel('member'); if ($oMemberModel->getGroupImageMark($member_srl)) { return $matches[0]; } } $orig_text = preg_replace('/' . preg_quote($matches[5], '/') . '<\\/' . $matches[6] . '>$/', '', $matches[0]); if (!isset($GLOBALS['_pointLevelIcon'][$member_srl])) { // Get point configuration if (!$GLOBALS['_pointConfig']) { $oModuleModel = getModel('module'); $GLOBALS['_pointConfig'] = $oModuleModel->getModuleConfig('point'); } $config = $GLOBALS['_pointConfig']; // Get point model if (!$GLOBALS['_pointModel']) { $GLOBALS['_pointModel'] = getModel('point'); } $oPointModel =& $GLOBALS['_pointModel']; // Get points if (!$oPointModel->isExistsPoint($member_srl)) { return $matches[0]; } $point = $oPointModel->getPoint($member_srl); // Get level $level = $oPointModel->getLevel($point, $config->level_step); $text = $matches[5]; // Get a path where level icon is $level_icon = sprintf('%smodules/point/icons/%s/%d.gif', Context::getRequestUri(), $config->level_icon, $level); // Get per to go to the next level if not a top level $per = NULL; if ($level < $config->max_level) { $next_point = $config->level_step[$level + 1]; $present_point = $config->level_step[$level]; if ($next_point > 0) { $per = (int) (($point - $present_point) / ($next_point - $present_point) * 100); $per = $per . '%'; } } $title = sprintf('%s:%s%s%s, %s:%s/%s', lang('point'), $point, $config->point_name, $per ? ' (' . $per . ')' : '', lang('level'), $level, $config->max_level); $alt = sprintf('[%s:%s]', lang('level'), $level); $GLOBALS['_pointLevelIcon'][$member_srl] = sprintf('<img src="%s" alt="%s" title="%s" class="xe_point_level_icon" style="vertical-align:middle;margin-right:3px;" />', $level_icon, $alt, $title); } $text = $GLOBALS['_pointLevelIcon'][$member_srl]; return $orig_text . $text . $matches[5] . '</' . $matches[6] . '>'; }
function getThumbnailByUrl($image_url, $width = 80, $height = 0, $thumbnail_type = '') { if (!$height) { $height = $width; } if (!in_array($thumbnail_type, array('crop', 'ratio'))) { $config = $GLOBALS['__document_config__']; if (!$config) { $oDocumentModel = getModel('document'); $config = $oDocumentModel->getDocumentConfig(); $GLOBALS['__document_config__'] = $config; } $thumbnail_type = $config->thumbnail_type; } if (!is_dir('./files/thumbnails/magiccontent_thumbnail')) { FileHandler::makeDir('./files/thumbnails/magiccontent_thumbnail'); } $thumbnail_path = sprintf('files/thumbnails/magiccontent_thumbnail/%s', base64_encode($image_url)); $thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height, $thumbnail_type); $thumbnail_url = Context::getRequestUri() . $thumbnail_file; if (file_exists($thumbnail_file)) { if (filesize($thumbnail_file) < 1) { return false; } else { return $thumbnail_url; } } $tmp_file = sprintf('./files/cache/tmp/%s', md5(rand(111111, 999999) . $image_url)); if (!is_dir('./files/cache/tmp')) { FileHandler::makeDir('./files/cache/tmp'); } if (!preg_match('/^(http|https):\\/\\//i', $image_url)) { $image_url = Context::getRequestUri() . $image_url; } FileHandler::getRemoteFile($image_url, $tmp_file); if (!file_exists($tmp_file)) { return false; } else { list($_w, $_h, $_t, $_a) = @getimagesize($tmp_file); if (!in_array($_t, array(1, 2, 3, 6, 7, 8))) { FileHandler::writeFile($thumbnail_file, '', 'w'); return false; } $source_file = $tmp_file; } $output = FileHandler::createImageFile($source_file, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type); FileHandler::removeFile($source_file); if ($output) { return $thumbnail_url; } else { FileHandler::writeFile($thumbnail_file, '', 'w'); } return false; }
/** * @brief Widget execution * Get extra_vars declared in ./widgets/widget/conf/info.xml as arguments * After generating the result, do not print but return it. */ function proc($args) { // Set a path of the template skin (values of skin, colorset settings) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); Context::set('colorset', $args->colorset); $is_logged = Context::get('is_logged'); $oMemberModel = getModel('member'); $memberConfig = $oMemberModel->getMemberConfig(); $oNcenterliteModel = getModel('ncenterlite'); $ncenter_config = $oNcenterliteModel->getConfig(); if ($is_logged) { if (!empty($ncenter_config->use) && $args->ncenter_use == 'yes') { $logged_info = Context::get('logged_info'); $ncenter_list = $oNcenterliteModel->getMyNotifyList($logged_info->member_srl); $_latest_notify_id = array_slice($ncenter_list->data, 0, 1); $_latest_notify_id = $_latest_notify_id[0]->notify; if ($memberConfig->profile_image == 'Y') { $profileImage = $oMemberModel->getProfileImage($logged_info->member_srl); Context::set('profileImage', $profileImage); } Context::set('ncenterlite_latest_notify_id', $_latest_notify_id); if ($_COOKIE['_ncenterlite_hide_id'] && $_COOKIE['_ncenterlite_hide_id'] == $_latest_notify_id) { return; } setcookie('_ncenterlite_hide_id', '', 0, '/'); } $tpl_file = 'login_info'; } else { $tpl_file = 'login_form'; } // Get the member configuration $oModuleModel = getModel('module'); $this->member_config = $oModuleModel->getModuleConfig('member'); if ($ncenter_config->zindex) { Context::set('ncenterlite_zindex', ' style="z-index:' . $ncenter_config->zindex . ';" '); } Context::set('useProfileImage', $memberConfig->profile_image == 'Y' ? true : false); Context::set('ncenterlite_list', $ncenter_list->data); Context::set('ncenterlite_page_navigation', $ncenter_list->page_navigation); Context::set('_ncenterlite_num', $ncenter_list->page_navigation->total_count); Context::set('member_config', $this->member_config); // Set a flag to check if the https connection is made when using SSL and create https url $ssl_mode = false; $useSsl = Context::getSslStatus(); if ($useSsl != 'none') { if (strncasecmp('https://', Context::getRequestUri(), 8) === 0) { $ssl_mode = true; } } Context::set('ssl_mode', $ssl_mode); // Compile a template $oTemplate =& TemplateHandler::getInstance(); return $oTemplate->compile($tpl_path, $tpl_file); }
/** * @brief div 또는 span에 member_번호 가 있을때 해당 회원 번호에 맞는 이미지이름이나 닉이미지를 대체 **/ function memberTransImageName($matches) { // 회원번호를 추출하여 0보다 찾으면 본문중 text만 return $member_srl = $matches[3]; if ($member_srl < 0) { return $matches[5]; } $site_module_info = Context::get('site_module_info'); $oMemberModel =& getModel('member'); $group_image = $oMemberModel->getGroupImageMark($member_srl, $site_module_info->site_srl); // 회원이 아닐경우(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 && !$group_image) { return $matches[0]; } if ($image_name_file) { $nick_name = sprintf('<img src="%s%s" border="0" alt="id: %s" title="id: %s" style="vertical-align:middle;margin-right:3px" />', Context::getRequestUri(), $image_name_file, strip_tags($nick_name), strip_tags($nick_name)); } if ($image_mark_file) { $nick_name = sprintf('<img src="%s%s" border="0" alt="id: %s" title="id : %s" style="vertical-align:middle;margin-right:3px"/>%s', Context::getRequestUri(), $image_mark_file, strip_tags($nick_name), strip_tags($nick_name), $nick_name); } if ($group_image) { $nick_name = sprintf('<img src="%s" border="0" style="vertical-align:middle;margin-right:3px"/>%s', $group_image->src, $nick_name); } $orig_text = preg_replace('/' . preg_quote($matches[5], '/') . '<\\/' . $matches[6] . '>$/', '', $matches[0]); return $orig_text . $nick_name . '</' . $matches[6] . '>'; }
/** * Create the Feed url. * * @param string $vid Vid * @param string $mid mid * @param string $format Feed format. ef)xe, atom, rss1.0 * @return string **/ function getModuleFeedUrl($vid = null, $mid, $format) { if (Context::isAllowRewrite()) { $request_uri = Context::getRequestUri(); // If the virtual site variable exists and it is different from mid (vid and mid should not be the same) if ($vid && $vid != $mid) { return $request_uri . $vid . '/' . $mid . '/' . $format; } else { return $request_uri . $mid . '/' . $format; } } else { return getUrl('', 'mid', $mid, 'act', $format); } }
function getNotEncodedFullUrl() { $num_args = func_num_args(); $args_list = func_get_args(); $request_uri = Context::getRequestUri(); if (!$num_args) { return $request_uri; } $url = Context::getUrl($num_args, $args_list, null, false); if (!preg_match('/^http/i', $url)) { preg_match('/^(http|https):\\/\\/([^\\/]+)\\//', $request_uri, $match); $url = Context::getUrl($num_args, $args_list, null, false); return substr($match[0], 0, -1) . $url; } return $url; }
/** * @brief openid로그인 **/ function procMemberOpenIDLogin($validator = "procMemberOpenIDValidate") { $oModuleModel =& getModel('module'); $config = $oModuleModel->getModuleConfig('member'); if ($config->enable_openid != 'Y') { $this->stop('msg_invalid_request'); } ob_start(); require './modules/member/openid_lib/class.openid.php'; require_once './modules/member/openid_lib/libcurlemu.inc.php'; $user_id = Context::get('user_id'); if (!$user_id) { $user_id = Context::get('openid'); } $referer_url = Context::get('referer_url'); if (!$referer_url) { $referer_url = $_SERVER['HTTP_REFERER']; } if (!$referer_url) { $referer_url = htmlspecialchars_decode(getRequestUri(RELEASE_SSL)); } $openid = new SimpleOpenID(); $openid->SetIdentity($user_id); $openid->SetTrustRoot('http://' . $_SERVER["HTTP_HOST"]); $openid->SetRequiredFields(array('email')); $openid->SetOptionalFields(array('dob')); if (!$openid->GetOpenIDServer()) { $error = $openid->GetError(); $this->setError(-1); $this->setMessage($error['description']); if (Context::getRequestMethod() == 'POST') { header("location:" . $referer_url); } } else { $goto = urlencode($referer_url); $ApprovedURL = Context::getRequestUri(RELEASE_SSL) . "?module=member&act=" . $validator . "&goto=" . $goto; $openid->SetApprovedURL($ApprovedURL); $url = $openid->GetRedirectURL(); $this->add('redirect_url', $url); if (Context::getRequestMethod() == 'POST') { header("location:" . $url); } } ob_clean(); }
/** * @brief 입력받은 정보로 설치를 함 **/ function procInstall() { // 설치가 되어 있는지에 대한 체크 if (Context::isInstalled()) { return new Object(-1, 'msg_already_installed'); } // 설치시 임시로 최고관리자로 지정 $logged_info->is_admin = 'Y'; $_SESSION['logged_info'] = $logged_info; Context::set('logged_info', $logged_info); // DB와 관련된 변수를 받음 $db_info = Context::gets('db_type', 'db_port', 'db_hostname', 'db_userid', 'db_password', 'db_database', 'db_table_prefix', 'time_zone', 'use_rewrite'); if ($db_info->use_rewrite != 'Y') { $db_info->use_rewrite = 'N'; } if (!$db_info->default_url) { $db_info->default_url = Context::getRequestUri(); } $db_info->lang_type = Context::getLangType(); // DB의 타입과 정보를 등록 Context::setDBInfo($db_info); // DB Instance 생성 $oDB =& DB::getInstance(); // DB접속이 가능한지 체크 $output = $oDB->getError(); if (!$oDB->isConnected()) { return $oDB->getError(); } // firebird는 설치시에 트랜젝션을 사용하지 않음 if ($db_info->db_type != "firebird") { $oDB->begin(); } // 모든 모듈의 설치 $this->installDownloadedModule(); if ($db_info->db_type != "firebird") { $oDB->commit(); } // config 파일 생성 if (!$this->makeConfigFile()) { return new Object(-1, 'msg_install_failed'); } // 설치 완료 메세지 출력 $this->setMessage('msg_install_completed'); }
/** * @brief RSS 사용 유무를 체크하여 rss url 추가 **/ function triggerRssUrlInsert() { $oModuleModel =& getModel('module'); $total_config = $oModuleModel->getModuleConfig('rss'); $current_module_srl = Context::get('module_srl'); $site_module_info = Context::get('site_module_info'); if (!$current_module_srl) { $current_module_info = Context::get('current_module_info'); $current_module_srl = $current_module_info->module_srl; } if (!$current_module_srl) { return new Object(); } // 선택된 모듈의 rss설정을 가져옴 $oRssModel =& getModel('rss'); $rss_config = $oRssModel->getRssModuleConfig($current_module_srl); if ($rss_config->open_rss != 'N') { if (Context::isAllowRewrite()) { $request_uri = Context::getRequestUri(); // 가상 사이트 변수가 있고 이 변수가 mid와 다를때. (vid와 mid는 같을 수 없다고 함) if (Context::get('vid') && Context::get('vid') != Context::get('mid')) { Context::set('rss_url', Context::getRequestUri() . Context::get('vid') . '/' . Context::get('mid') . '/rss'); Context::set('atom_url', Context::getRequestUri() . Context::get('vid') . '/' . Context::get('mid') . '/atom'); } else { Context::set('rss_url', $request_uri . Context::get('mid') . '/rss'); Context::set('atom_url', $request_uri . Context::get('mid') . '/atom'); } } else { Context::set('rss_url', getUrl('', 'mid', Context::get('mid'), 'act', 'rss')); Context::set('atom_url', getUrl('', 'mid', Context::get('mid'), 'act', 'atom')); } } if (Context::isInstalled() && $site_module_info->mid == Context::get('mid') && $total_config->use_total_feed != 'N') { if (Context::isAllowRewrite() && !Context::get('vid')) { $request_uri = Context::getRequestUri(); Context::set('general_rss_url', $request_uri . 'rss'); Context::set('general_atom_url', $request_uri . 'atom'); } else { Context::set('general_rss_url', getUrl('', 'module', 'rss', 'act', 'rss')); Context::set('general_atom_url', getUrl('', 'module', 'rss', 'act', 'atom')); } } return new Object(); }
/** * @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('%smodules/point/icons/%s/%d.gif', Context::getRequestUri(), $config->level_icon, $level); // 최고 레벨이 아니면 다음 레벨로 가기 위한 per을 구함 :: 주석과 실제 내용이 맞지 않아 실제 내용을 수정 if ($level < $config->max_level) { $next_point = $config->level_step[$level + 1]; $present_point = $config->level_step[$level]; if ($next_point > 0) { $per = (int) (($point - $present_point) / ($next_point - $present_point) * 100); $per = $per . '%'; } } $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); $alt = sprintf('[%s:%s]', Context::getLang('level'), $level); $GLOBALS['_pointLevelIcon'][$member_srl] = sprintf('<img src="%s" alt="%s" title="%s" style="vertical-align:middle; margin-right:3px;" />', $level_icon, $alt, $title); } $text = $GLOBALS['_pointLevelIcon'][$member_srl]; $orig_text = preg_replace('/' . preg_quote($matches[5], '/') . '<\\/' . $matches[6] . '>$/', '', $matches[0]); return $orig_text . $text . $matches[5] . '</' . $matches[6] . '>'; }
/** * @brief bookmark url return **/ function getBookmarkUrl($member_srl) { if (!$member_srl) { return ''; } $base_url = Context::getDefaultUrl(); if (!$base_url) { $base_url = Context::getRequestUrl(); } $html_url = str_replace('&', '&', $base_url . '?act=dispMaterialPopup&module=material'); $js_url = Context::getRequestUri() . 'modules/material/tpl/js/material_grabber.js'; $auth = $this->getAuthByMemberSrl($member_srl); if (!$auth) { $oMaterialController =& getController('material'); $output = $oMaterialController->insertMaterialAuth($member_srl); $auth = $this->getAuthByMemberSrl($member_srl); } $bookmark_url = "javascript:(function(){var w=window,d=document,x=w.open('about:blank','XE_materialGrabWin','width=300,height=0,location=0,scrollbars=0,toolbar=0,status=0,menubar=0,resizable'),s=d.createElement('script');s.setAttribute('src','" . $js_url . "');w.auth='" . $auth . "';w.__xe_root='" . $html_url . "';d.body.appendChild(s);w.setTimeout(function(){x.focus()},100);})();"; return $bookmark_url; }
/** * Produce virtualXML compliant content given a module object.\n * @param ModuleObject $oModule the module object * @return string */ function toDoc(&$oModule) { $error = $oModule->getError(); $message = $oModule->getMessage(); $redirect_url = $oModule->get('redirect_url'); $request_uri = Context::get('xeRequestURI'); $request_url = Context::getRequestUri(); $output = new stdClass(); if (substr_compare($request_url, '/', -1) !== 0) { $request_url .= '/'; } if ($error === 0) { if ($redirect_url) { $output->url = $redirect_url; } else { $output->url = $request_uri; } } else { $output->message = $message; } $html = array(); $html[] = '<html>'; $html[] = '<head>'; $html[] = '<script>'; if ($output->message) { $html[] = 'alert(' . json_encode($output->message) . ');'; } if ($output->url) { $output->url = preg_replace('/#(.+)$/', '', $output->url); $html[] = 'if (opener) {'; $html[] = ' opener.location.href = ' . json_encode($output->url) . ';'; $html[] = '} else {'; $html[] = ' parent.location.href = ' . json_encode($output->url) . ';'; $html[] = '}'; } $html[] = '</script>'; $html[] = '</head><body></body></html>'; return join(PHP_EOL, $html); }
/** * Produce virtualXML compliant content given a module object.\n * @param ModuleObject $oModule the module object * @return string */ function toDoc(&$oModule) { $error = $oModule->getError(); $message = $oModule->getMessage(); $redirect_url = $oModule->get('redirect_url'); $request_uri = Context::get('xeRequestURI'); $request_url = Context::getRequestUri(); $output = new stdClass(); if (substr_compare($request_url, '/', -1) !== 0) { $request_url .= '/'; } if ($error === 0) { if ($message != 'success') { $output->message = $message; } if ($redirect_url) { $output->url = $redirect_url; } else { $output->url = $request_uri; } } else { if ($message != 'fail') { $output->message = $message; } } $html = array(); $html[] = '<script type="text/javascript">'; $html[] = '//<![CDATA['; if ($output->message) { $html[] = 'alert("' . $output->message . '");'; } if ($output->url) { $url = preg_replace('/#(.+)$/i', '', $output->url); $html[] = 'self.location.href = "' . $request_url . 'common/tpl/redirect.html?redirect_url=' . urlencode($url) . '";'; } $html[] = '//]]>'; $html[] = '</script>'; return join(PHP_EOL, $html); }
function getThumbnail($file_srl = null, $width = 80, $height = 0, $thumbnail_type = 'crop') { $oFileModel = getModel('file'); if (!$file_srl) { return; } if (!$height) { $height = $width; } // Define thumbnail information $thumbnail_path = sprintf('files/cache/thumbnails/%s', getNumberingPath($file_srl, 3)); $thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height, $thumbnail_type); $thumbnail_url = Context::getRequestUri() . $thumbnail_file; // Return false if thumbnail file exists and its size is 0. Otherwise, return its path if (file_exists($thumbnail_file)) { if (filesize($thumbnail_file) < 1) { return false; } else { return $thumbnail_url; } } // Target File $source_file = NULL; $file = $oFileModel->getFile($file_srl); if ($file) { $source_file = $file->uploaded_filename; } if ($source_file) { $output = FileHandler::createImageFile($source_file, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type); } // Return its path if a thumbnail is successfully genetated if ($output) { return $thumbnail_url; } else { FileHandler::writeFile($thumbnail_file, '', 'w'); } return; }
/** * @brief 위젯의 실행 부분 * * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다 * 결과를 만든후 print가 아니라 return 해주어야 한다 **/ function proc($args) { // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); $colorset = $args->colorset; // 템플릿 파일을 지정 $tpl_file = 'clock'; $clock_width = $args->clock_width; if (!$clock_width) { $clock_width = 150; } $clock_height = $args->clock_height; if (!$clock_height) { $clock_height = 64; } $widget_info->clock_width = $clock_width; $widget_info->clock_height = $clock_height; $widget_info->src = sprintf("%s%s/%s/clock.swf", Context::getRequestUri(), $tpl_path, $colorset); Context::set('widget_info', $widget_info); // 템플릿 컴파일 $oTemplate =& TemplateHandler::getInstance(); return $oTemplate->compile($tpl_path, $tpl_file); }
/** * @brief Editor of the components separately if you use a unique code to the html code for a method to change * * Images and multimedia, seolmundeung unique code is required for the editor component added to its own code, and then * DocumentModule:: transContent() of its components transHtml() method call to change the html code for your own **/ function transHTML($xml_obj) { $src = $xml_obj->attrs->multimedia_src; $style = $xml_obj->attrs->style; preg_match_all('/(width|height)([^[:digit:]]+)([0-9]+)/i', $style, $matches); $width = trim($matches[3][0]); $height = trim($matches[3][1]); if (!$width) { $width = 400; } if (!$height) { $height = 400; } $auto_start = $xml_obj->attrs->auto_start; if ($auto_start != "true") { $auto_start = "false"; } else { $auto_start = "true"; } $wmode = $xml_obj->attrs->wmode; if ($wmode == 'window') { $wmode = 'window'; } elseif ($wmode == 'opaque') { $wmode = 'opaque'; } else { $wmode = 'transparent'; } $caption = $xml_obj->body; $src = str_replace(array('&', '"'), array('&', '&qout;'), $src); $src = str_replace('&amp;', '&', $src); if (Context::getResponseMethod() != "XMLRPC") { return sprintf("<script type=\"text/javascript\">displayMultimedia(\"%s\", \"%s\",\"%s\", { \"autostart\" : %s, \"wmode\" : \"%s\" });</script>", $src, $width, $height, $auto_start, $wmode); } else { return sprintf("<div style=\"width: %dpx; height: %dpx;\"><span style=\"position:relative; top:%dpx;left:%d\"><img src=\"%s\" /><br />Attached Multimedia</span></div>", $width, $height, $height / 2 - 16, $width / 2 - 31, Context::getRequestUri() . './modules/editor/components/multimedia_link/tpl/multimedia_link_component.gif'); } }
/** * @brief faceoff의 관리자 layout 수정 **/ function dispLayoutAdminLayoutModify() { //layout_srl 를 가져온다 $current_module_info = Context::get('current_module_info'); $layout_srl = $current_module_info->layout_srl; // 파일로 임시저장을 하기때문에 남아 있을지 모르는 tmp를 지운다 // to do 개선이 필요 $delete_tmp = Context::get('delete_tmp'); if ($delete_tmp == 'Y') { $oLayoutAdminController =& getAdminController('layout'); $oLayoutAdminController->deleteUserLayoutTempFile($layout_srl); } $oLayoutModel =& getModel('layout'); // layout file들은 temp로 사용한다. $oLayoutModel->setUseUserLayoutTemp(); // css 를 inline style로 뽑는다 $faceoffcss = $oLayoutModel->_getUserLayoutFaceOffCss($current_module_info->layout_srl); $css = FileHandler::readFile($faceoffcss); $match = null; preg_match_all('/([^\\{]+)\\{([^\\}]*)\\}/is', $css, $match); for ($i = 0, $c = count($match[1]); $i < $c; $i++) { $name = trim($match[1][$i]); $css = trim($match[2][$i]); if (!$css) { continue; } $css = str_replace('./images/', Context::getRequestUri() . $oLayoutModel->getUserLayoutImagePath($layout_srl), $css); $style[] .= sprintf('"%s":"%s"', $name, $css); } if (count($style)) { $script = '<script type="text/javascript"> var faceOffStyle = {' . implode(',', $style) . '}; </script>'; Context::addHtmlHeader($script); } $oTemplate =& TemplateHandler::getInstance(); Context::set('content', $oTemplate->compile($this->module_path . 'tpl', 'about_faceoff')); // 위젯 코드를 Javascript 수정모드로 변경 $oWidgetController =& getController('widget'); $oWidgetController->setWidgetCodeInJavascriptMode(); // 템플릿 파일 지정 $this->setTemplateFile('faceoff_layout_edit'); }
/** * @ 실행된 모듈의 컨텐츠를 출력 **/ function displayContent($oModule = NULL) { // 설정된 모듈이 정상이지 않을 경우 message 모듈 객체 생성 if (!$oModule || !is_object($oModule)) { $this->error = 'msg_module_is_not_exists'; } // install 모듈이 아닐 때 DB 접속에 문제가 있으면 오류 if ($this->module != 'install' && $GLOBALS['__DB__'][Context::getDBType()]->is_connected == false) { $this->error = 'msg_dbconnect_failed'; } // 모듈 동작을 마친 후 trigger call $output = ModuleHandler::triggerCall('moduleHandler.proc', 'after', $oModule); if (!$output->toBool()) { $this->error = $output->getMessage(); } // HTML call 이면 message view 객체 이용하도록 if (!in_array(Context::getRequestMethod(), array('XMLRPC', 'JSON'))) { // 에러가 발생하였을시 처리 if ($this->error) { // message 모듈 객체를 생성해서 컨텐츠 생성 $oMessageView =& getView('message'); $oMessageView->setError(-1); $oMessageView->setMessage($this->error); $oMessageView->dispMessage(); // 정상적으로 호출된 객체가 있을 경우 해당 객체의 template를 변경 if ($oModule) { $oModule->setTemplatePath($oMessageView->getTemplatePath()); $oModule->setTemplateFile($oMessageView->getTemplateFile()); // 그렇지 않으면 message 객체를 호출된 객체로 지정 } else { $oModule = $oMessageView; } } // 해당 모듈에 layout_srl이 있는지 확인 if ($oModule->module_info->layout_srl && !$oModule->getLayoutFile()) { // layout_srl이 있으면 해당 레이아웃 정보를 가져와 layout_path/ layout_file 위치 변경 $oLayoutModel =& getModel('layout'); $layout_info = $oLayoutModel->getLayout($oModule->module_info->layout_srl); if ($layout_info) { // 레이아웃 정보중 extra_vars의 이름과 값을 $layout_info에 입력 if ($layout_info->extra_var_count) { foreach ($layout_info->extra_var as $var_id => $val) { if ($val->type == 'image') { if (preg_match('/^\\.\\/files\\/attach\\/images\\/(.+)/i', $val->value)) { $val->value = Context::getRequestUri() . substr($val->value, 2); } } $layout_info->{$var_id} = $val->value; } } // 레이아웃 정보중 menu를 Context::set if ($layout_info->menu_count) { foreach ($layout_info->menu as $menu_id => $menu) { if (file_exists($menu->php_file)) { @(include $menu->php_file); } Context::set($menu_id, $menu); } } // 레이아웃 정보를 Context::set Context::set('layout_info', $layout_info); $oModule->setLayoutPath($layout_info->path); $oModule->setLayoutFile('layout'); // 레이아웃이 수정되었을 경우 수정본을 지정 $edited_layout = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl); if (file_exists($edited_layout)) { $oModule->setEditedLayoutFile($edited_layout); } } } } // 컨텐츠 출력 $oDisplayHandler = new DisplayHandler(); $oDisplayHandler->printContent($oModule); }
/** * Log-in * * @param string $user_id * @param string $password * @param boolean $keep_signed * * @return Object */ function doLogin($user_id, $password = '', $keep_signed = false) { $user_id = strtolower($user_id); if (!$user_id) { return new Object(-1, 'null_user_id'); } // Call a trigger before log-in (before) $trigger_obj = new stdClass(); $trigger_obj->user_id = $user_id; $trigger_obj->password = $password; $trigger_output = ModuleHandler::triggerCall('member.doLogin', 'before', $trigger_obj); if (!$trigger_output->toBool()) { return $trigger_output; } // Create a member model object $oMemberModel = getModel('member'); // check IP access count. $config = $oMemberModel->getMemberConfig(); $args = new stdClass(); $args->ipaddress = $_SERVER['REMOTE_ADDR']; // check identifier if ($config->identifier == 'email_address' || strpos($user_id, '@') !== false) { // Get user_id information $this->memberInfo = $oMemberModel->getMemberInfoByEmailAddress($user_id); // Set an invalid user if no value returned if (!$user_id || strtolower($this->memberInfo->email_address) != strtolower($user_id)) { return $this->recordLoginError(-1, 'invalid_email_address'); } } else { // Get user_id information $this->memberInfo = $oMemberModel->getMemberInfoByUserID($user_id); // Set an invalid user if no value returned if (!$user_id || strtolower($this->memberInfo->user_id) != strtolower($user_id)) { return $this->recordLoginError(-1, 'invalid_user_id'); } } $output = executeQuery('member.getLoginCountByIp', $args); $errorCount = $output->data->count; if ($errorCount >= $config->max_error_count) { $last_update = strtotime($output->data->last_update); $term = intval($_SERVER['REQUEST_TIME'] - $last_update); if ($term < $config->max_error_count_time) { $term = $config->max_error_count_time - $term; if ($term < 60) { $term = intval($term) . lang('unit_sec'); } elseif (60 <= $term && $term < 3600) { $term = intval($term / 60) . lang('unit_min'); } elseif (3600 <= $term && $term < 86400) { $term = intval($term / 3600) . lang('unit_hour'); } else { $term = intval($term / 86400) . lang('unit_day'); } return new Object(-1, sprintf(lang('excess_ip_access_count'), $term)); } else { $args->ipaddress = $_SERVER['REMOTE_ADDR']; $output = executeQuery('member.deleteLoginCountByIp', $args); } } // Password Check if ($password && !$oMemberModel->isValidPassword($this->memberInfo->password, $password, $this->memberInfo->member_srl)) { return $this->recordMemberLoginError(-1, 'invalid_password', $this->memberInfo); } // If denied == 'Y', notify if ($this->memberInfo->denied == 'Y') { $args->member_srl = $this->memberInfo->member_srl; $output = executeQuery('member.chkAuthMail', $args); if ($output->toBool() && $output->data->count != '0') { $_SESSION['auth_member_srl'] = $this->memberInfo->member_srl; $redirectUrl = getUrl('', 'act', 'dispMemberResendAuthMail'); return $this->setRedirectUrl($redirectUrl, new Object(-1, 'msg_user_not_confirmed')); } $refused_reason = $this->memberInfo->refused_reason ? '<br>' . lang('refused_reason') . ': ' . $this->memberInfo->refused_reason : ''; return new Object(-1, lang('msg_user_denied') . $refused_reason); } // Notify if user is limited if ($this->memberInfo->limit_date && substr($this->memberInfo->limit_date, 0, 8) >= date("Ymd")) { $limited_reason = $this->memberInfo->limited_reason ? '<br>' . lang('refused_reason') . ': ' . $this->memberInfo->limited_reason : ''; return new Object(-9, sprintf(lang('msg_user_limited'), zdate($this->memberInfo->limit_date, "Y-m-d")) . $limited_reason); } // Do not allow login as admin if not in allowed IP list if ($this->memberInfo->is_admin === 'Y' && $this->act === 'procMemberLogin') { $oMemberAdminModel = getAdminModel('member'); if (!$oMemberAdminModel->getMemberAdminIPCheck()) { return new Object(-1, 'msg_admin_ip_not_allowed'); } } // Update the latest login time $args->member_srl = $this->memberInfo->member_srl; $output = executeQuery('member.updateLastLogin', $args); $site_module_info = Context::get('site_module_info'); $this->_clearMemberCache($args->member_srl, $site_module_info->site_srl); // Check if there is recoding table. $oDB =& DB::getInstance(); if ($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N') { // check if there is login fail records. $output = executeQuery('member.getLoginCountHistoryByMemberSrl', $args); if ($output->data && $output->data->content) { $title = lang('login_fail_report'); $message = '<ul>'; $content = unserialize($output->data->content); if (count($content) > $config->max_error_count) { foreach ($content as $val) { $message .= '<li>' . lang('regdate') . ': ' . date('Y-m-d h:i:sa', $val[2]) . '<ul><li>' . lang('ipaddress') . ': ' . $val[0] . '</li><li>' . lang('message') . ': ' . $val[1] . '</li></ul></li>'; } $message .= '</ul>'; $content = sprintf(lang('login_fail_report_contents'), $message, date('Y-m-d h:i:sa')); //send message $oCommunicationController = getController('communication'); $oCommunicationController->sendMessage($args->member_srl, $args->member_srl, $title, $content, true); if ($this->memberInfo->email_address && $this->memberInfo->allow_mailing == 'Y') { $view_url = Context::getRequestUri(); $content = sprintf("%s<hr /><p>From: <a href=\"%s\" target=\"_blank\">%s</a><br />To: %s(%s)</p>", $content, $view_url, $view_url, $this->memberInfo->nick_name, $this->memberInfo->email_id); $oMail = new Mail(); $oMail->setTitle($title); $oMail->setContent($content); $oMail->setSender($config->webmaster_name ? $config->webmaster_name : 'webmaster', $config->webmaster_email); $oMail->setReceiptor($this->memberInfo->email_id . '(' . $this->memberInfo->nick_name . ')', $this->memberInfo->email_address); $oMail->send(); } $output = executeQuery('member.deleteLoginCountHistoryByMemberSrl', $args); } } } // Call a trigger after successfully log-in (after) ModuleHandler::triggerCall('member.doLogin', 'after', $this->memberInfo); // When user checked to use auto-login if ($keep_signed) { // Key generate for auto login $random_key = Rhymix\Framework\Security::getRandom(32, 'hex'); $extra_key = strtolower($user_id) . $this->memberInfo->password . $_SERVER['HTTP_USER_AGENT']; $extra_key = substr(hash_hmac('sha256', $extra_key, $random_key), 0, 32); $autologin_args = new stdClass(); $autologin_args->autologin_key = $random_key . $extra_key; $autologin_args->member_srl = $this->memberInfo->member_srl; executeQuery('member.deleteAutologin', $autologin_args); $autologin_output = executeQuery('member.insertAutologin', $autologin_args); if ($autologin_output->toBool()) { setCookie('xeak', $autologin_args->autologin_key, $_SERVER['REQUEST_TIME'] + 31536000, '/'); } } $this->setSessionInfo(); return $output; }