Example #1
0
 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;
 }
Example #2
0
 /**
  * @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');
 }
Example #3
0
/**
 * @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] . '>';
}
Example #4
0
 /**
  * @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);
 }
Example #5
0
 /**
  * @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');
 }
Example #6
0
 /**
  * @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');
 }
Example #7
0
 /**
  * @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);
     }
 }
Example #8
0
 /**
  * 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;
 }
Example #11
0
 /**
  * @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');
 }
Example #12
0
/**
 * @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;
 }
Example #14
0
 /**
  * @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] . '>';
}
Example #16
0
 /**
  * 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');
 }
Example #20
0
 /**
  * @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('&amp;', '&', $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);
 }
Example #27
0
 /**
  * @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('&amp;', '&qout;'), $src);
     $src = str_replace('&amp;amp;', '&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);
 }
Example #30
0
 /**
  * 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;
 }