/** * Make URL with args_list upon request URL * * @param int $num_args Arguments nums * @param array $args_list Argument list for set url * @param string $domain Domain * @param bool $encode If TRUE, use url encode. * @param bool $autoEncode If TRUE, url encode automatically, detailed. Use this option, $encode value should be TRUE * @return string URL */ public static function getUrl($num_args = 0, $args_list = array(), $domain = null, $encode = TRUE, $autoEncode = FALSE) { static $site_module_info = null; static $current_info = null; // retrieve virtual site information if (is_null($site_module_info)) { $site_module_info = self::get('site_module_info'); } // If $domain is set, handle it (if $domain is vid type, remove $domain and handle with $vid) if ($domain && isSiteID($domain)) { $vid = $domain; $domain = ''; } // If $domain, $vid are not set, use current site information if (!$domain && !$vid) { if ($site_module_info->domain && isSiteID($site_module_info->domain)) { $vid = $site_module_info->domain; } else { $domain = $site_module_info->domain; } } // if $domain is set, compare current URL. If they are same, remove the domain, otherwise link to the domain. if ($domain) { $domain_info = parse_url($domain); if (is_null($current_info)) { $current_info = parse_url((RX_SSL ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . RX_BASEURL); } if ($domain_info['host'] . $domain_info['path'] == $current_info['host'] . $current_info['path']) { unset($domain); } else { $domain = rtrim(preg_replace('/^(http|https):\\/\\//i', '', trim($domain)), '/') . '/'; } } $get_vars = array(); // If there is no GET variables or first argument is '' to reset variables if (!self::$_instance->get_vars || $args_list[0] == '') { // rearrange args_list if (is_array($args_list) && $args_list[0] == '') { array_shift($args_list); } } else { // Otherwise, make GET variables into array $get_vars = get_object_vars(self::$_instance->get_vars); } // arrange args_list for ($i = 0, $c = count($args_list); $i < $c; $i += 2) { $key = $args_list[$i]; $val = trim($args_list[$i + 1]); // If value is not set, remove the key if (!isset($val) || !strlen($val)) { unset($get_vars[$key]); continue; } // set new variables $get_vars[$key] = $val; } // remove vid, rnd unset($get_vars['rnd']); if ($vid) { $get_vars['vid'] = $vid; } else { unset($get_vars['vid']); } // for compatibility to lower versions $act = $get_vars['act']; $act_alias = array('dispMemberFriend' => 'dispCommunicationFriend', 'dispMemberMessages' => 'dispCommunicationMessages', 'dispDocumentAdminManageDocument' => 'dispDocumentManageDocument', 'dispModuleAdminSelectList' => 'dispModuleSelectList'); if (isset($act_alias[$act])) { $get_vars['act'] = $act_alias[$act]; } // organize URL $query = ''; if (count($get_vars) > 0) { // if using rewrite mod if (self::$_instance->allow_rewrite) { $var_keys = array_keys($get_vars); sort($var_keys); $target = join('.', $var_keys); $act = $get_vars['act']; $vid = $get_vars['vid']; $mid = $get_vars['mid']; $key = $get_vars['key']; $srl = $get_vars['document_srl']; $tmpArray = array('rss' => 1, 'atom' => 1, 'api' => 1); $is_feed = isset($tmpArray[$act]); $target_map = array('vid' => $vid, 'mid' => $mid, 'mid.vid' => "{$vid}/{$mid}", 'entry.mid' => "{$mid}/entry/" . $get_vars['entry'], 'entry.mid.vid' => "{$vid}/{$mid}/entry/" . $get_vars['entry'], 'document_srl' => $srl, 'document_srl.mid' => "{$mid}/{$srl}", 'document_srl.vid' => "{$vid}/{$srl}", 'document_srl.mid.vid' => "{$vid}/{$mid}/{$srl}", 'act' => $is_feed && $act !== 'api' ? $act : '', 'act.mid' => $is_feed ? "{$mid}/{$act}" : '', 'act.mid.vid' => $is_feed ? "{$vid}/{$mid}/{$act}" : '', 'act.document_srl.key' => $act == 'trackback' ? "{$srl}/{$key}/{$act}" : '', 'act.document_srl.key.mid' => $act == 'trackback' ? "{$mid}/{$srl}/{$key}/{$act}" : '', 'act.document_srl.key.vid' => $act == 'trackback' ? "{$vid}/{$srl}/{$key}/{$act}" : '', 'act.document_srl.key.mid.vid' => $act == 'trackback' ? "{$vid}/{$mid}/{$srl}/{$key}/{$act}" : ''); $query = $target_map[$target]; } if (!$query && count($get_vars) > 0) { $query = 'index.php?' . http_build_query($get_vars); } } // If using SSL always $_use_ssl = self::get('_use_ssl'); if ($_use_ssl == 'always') { $query = self::getRequestUri(ENFORCE_SSL, $domain) . $query; } elseif ($_use_ssl == 'optional') { $ssl_mode = self::get('module') === 'admin' || $get_vars['module'] === 'admin' || isset($get_vars['act']) && self::isExistsSSLAction($get_vars['act']) ? ENFORCE_SSL : RELEASE_SSL; $query = self::getRequestUri($ssl_mode, $domain) . $query; } else { // currently on SSL but target is not based on SSL if (RX_SSL) { $query = self::getRequestUri(ENFORCE_SSL, $domain) . $query; } else { if ($domain) { $query = self::getRequestUri(FOLLOW_REQUEST_SSL, $domain) . $query; } else { $query = RX_BASEURL . $query; } } } if (!$encode) { return $query; } if (!$autoEncode) { return htmlspecialchars($query, ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE); } $output = array(); $encode_queries = array(); $parsedUrl = parse_url($query); parse_str($parsedUrl['query'], $output); foreach ($output as $key => $value) { if (preg_match('/&([a-z]{2,}|#\\d+);/', urldecode($value))) { $value = urlencode(htmlspecialchars_decode(urldecode($value))); } $encode_queries[] = $key . '=' . $value; } return htmlspecialchars($parsedUrl['path'] . '?' . join('&', $encode_queries), ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE); }
/** * @brie display textule tool post manage write **/ function dispTextyleToolPostManageWrite() { // set filter Context::addJsFilter($this->module_path . 'tpl/filter', 'save_post.xml'); $oDocumentModel =& getModel('document'); $document_srl = Context::get('document_srl'); $material_srl = Context::get('material_srl'); if ($document_srl) { $oDocument = $oDocumentModel->getDocument($document_srl, false, false); } else { $document_srl = 0; $oDocument = $oDocumentModel->getDocument(0); if ($material_srl) { $oMaterialModel =& getModel('material'); $output = $oMaterialModel->getMaterial($material_srl); if ($output->data) { $material_content = $output->data[0]->content; Context::set('material_content', $material_content); } } } $category_list = $oDocumentModel->getCategoryList($this->module_srl); Context::set('category_list', $category_list); $oTagModel =& getModel('tag'); $args->module_srl = $this->module_srl; $args->list_count = 20; $output = $oTagModel->getTagList($args); Context::set('tag_list', $output->data); $oEditorModel =& getModel('editor'); $option->skin = $this->textyle->getPostEditorSkin(); $option->primary_key_name = 'document_srl'; $option->content_key_name = 'content'; $option->allow_fileupload = true; $option->enable_autosave = true; $option->enable_default_component = true; $option->enable_component = $option->skin == 'dreditor' ? false : true; $option->resizable = true; $option->height = 500; $option->content_font = $this->textyle->getFontFamily(); $option->content_font_size = $this->textyle->getFontSize(); $editor = $oEditorModel->getEditor($document_srl, $option); Context::set('editor', $editor); Context::set('editor_skin', $option->skin); // permalink $permalink = ''; if (isSiteID($this->textyle->domain)) { if (Context::isAllowRewrite()) { $permalink = getFullSiteUrl($this->textyle->domain, '') . '/entry/'; } else { $permalink = getFullSiteUrl($this->textyle->domain) . '?vid=' . $this->textyle->domain . '&mid=' . Context::get('mid') . '&entry='; } } else { if (Context::isAllowRewrite()) { $permalink = getFullSiteUrl($this->textyle->domain, '') . 'entry/'; } else { $premalink = getFullSiteUrl($this->textyle->domain, '', 'mid', Context::get('mid')) . '&entry='; } } Context::set('permalink', $permalink); $oTextyleModel =& getModel('textyle'); $alias = $oDocumentModel->getAlias($document_srl); Context::set('alias', $alias); $output = $oTextyleModel->getSubscriptionByDocumentSrl($document_srl); if ($output->data) { $publish_date = $output->data[0]->publish_date; $publish_date = sscanf($publish_date, '%04d%02d%02d%02d%02d'); Context::set('publish_date_yyyymmdd', sprintf("%s-%02d-%02d", $publish_date[0], $publish_date[1], $publish_date[2])); Context::set('publish_date_hh', sprintf("%02d", $publish_date[3])); Context::set('publish_date_ii', sprintf("%02d", $publish_date[4])); Context::set('subscription', 'Y'); } if ($oDocument->get('module_srl') != $this->module_srl && !$document_srl) { Context::set('from_saved', true); } $oPublish = $oTextyleModel->getPublishObject($this->module_srl, $oDocument->document_srl); if (count($oPublish->trackbacks)) { $trackbacks = $oPublish->getTrackbacks(); } if (count($oPublish->blogapis)) { $_apis = $oPublish->getApis(); } Context::set('oDocument', $oDocument); Context::set('oTextyle', $oTextyleModel->getTextyle($this->module_srl)); Context::set('oPublish', $oPublish); Context::set('category_list', $oDocumentModel->getCategoryList($this->module_srl)); Context::set('trackbacks', $trackbacks); Context::set('_apis', $_apis); }
/** * @brief modify virtual site **/ function updateSite($args) { $oModuleModel =& getModel('module'); $columnList = array('sites.site_srl', 'sites.domain'); $site_info = $oModuleModel->getSiteInfo($args->site_srl, $columnList); if ($site_info->domain != $args->domain) { $info = $oModuleModel->getSiteInfoByDomain($args->domain, $columnList); if ($info->site_srl && $info->site_srl != $args->site_srl) { return new Object(-1, 'msg_already_registed_domain'); } if (isSiteID($args->domain) && $oModuleModel->isIDExists($args->domain)) { return new Object(-1, 'msg_already_registed_vid'); } if ($args->domain && !isSiteID($args->domain)) { $args->domain = strtolower($args->domain); } } $output = executeQuery('module.updateSite', $args); //clear cache for default mid if ($args->site_srl == 0) { $vid = ''; } else { $vid = $args->domain; } $module_info = $oModuleModel->getModuleInfoByModuleSrl($args->index_module_srl); $mid = $module_info->mid; $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { if ($args->site_srl == 0) { $cache_key = 'object_default_mid:_'; $oCacheHandler->delete($cache_key); } $cache_key = 'object_default_mid:' . $vid . '_' . $mid; $oCacheHandler->delete($cache_key); } return $output; }
/** * @brief modify virtual site */ function updateSite($args) { $oModuleModel = getModel('module'); $columnList = array('sites.site_srl', 'sites.domain'); $site_info = $oModuleModel->getSiteInfo($args->site_srl, $columnList); if (!$args->domain && $site_info->site_srl == $args->site_srl) { $args->domain = $site_info->domain; } if ($site_info->domain != $args->domain) { $info = $oModuleModel->getSiteInfoByDomain($args->domain, $columnList); if ($info->site_srl && $info->site_srl != $args->site_srl) { return new Object(-1, 'msg_already_registed_domain'); } if (isSiteID($args->domain) && $oModuleModel->isIDExists($args->domain)) { return new Object(-1, 'msg_already_registed_vid'); } if ($args->domain && !isSiteID($args->domain)) { $args->domain = strlen($args->domain) >= 1 && substr_compare($args->domain, '/', -1) === 0 ? substr($args->domain, 0, -1) : $args->domain; } } $output = executeQuery('module.updateSite', $args); //clear cache for default mid if ($args->site_srl == 0) { $vid = ''; } else { $vid = $args->domain; } $module_info = $oModuleModel->getModuleInfoByModuleSrl($args->index_module_srl); $mid = $module_info->mid; Rhymix\Framework\Cache::clearGroup('site_and_module'); return $output; }
/** * Make URL with args_list upon request URL * * @param int $num_args Arguments nums * @param array $args_list Argument list for set url * @param string $domain Domain * @param bool $encode If true, use url encode. * @param bool $autoEncode If true, url encode automatically, detailed. Use this option, $encode value should be true * @return string URL */ function getUrl($num_args = 0, $args_list = array(), $domain = null, $encode = true, $autoEncode = false) { static $site_module_info = null; static $current_info = null; is_a($this, 'Context') ? $self =& $this : ($self =& Context::getInstance()); // retrieve virtual site information if (is_null($site_module_info)) { $site_module_info = Context::get('site_module_info'); } // If $domain is set, handle it (if $domain is vid type, remove $domain and handle with $vid) if ($domain && isSiteID($domain)) { $vid = $domain; $domain = ''; } // If $domain, $vid are not set, use current site information if (!$domain && !$vid) { if ($site_module_info->domain && isSiteID($site_module_info->domain)) { $vid = $site_module_info->domain; } else { $domain = $site_module_info->domain; } } // if $domain is set, compare current URL. If they are same, remove the domain, otherwise link to the domain. if ($domain) { $domain_info = parse_url($domain); if (is_null($current_info)) { $current_info = parse_url(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . getScriptPath()); } if ($domain_info['host'] . $domain_info['path'] == $current_info['host'] . $current_info['path']) { unset($domain); } else { $domain = preg_replace('/^(http|https):\\/\\//i', '', trim($domain)); if (substr($domain, -1) != '/') { $domain .= '/'; } } } $get_vars = null; // If there is no GET variables or first argument is '' to reset variables if (!$self->get_vars || $args_list[0] == '') { // rearrange args_list if (is_array($args_list) && $args_list[0] == '') { array_shift($args_list); } } else { // Otherwise, make GET variables into array $get_vars = get_object_vars($self->get_vars); } // arrange args_list for ($i = 0, $c = count($args_list); $i < $c; $i = $i + 2) { $key = $args_list[$i]; $val = trim($args_list[$i + 1]); // If value is not set, remove the key if (!isset($val) || !strlen($val)) { unset($get_vars[$key]); continue; } // set new variables $get_vars[$key] = $val; } // remove vid, rnd unset($get_vars['rnd']); if ($vid) { $get_vars['vid'] = $vid; } else { unset($get_vars['vid']); } // for compatibility to lower versions $act = $get_vars['act']; $act_alias = array('dispMemberFriend' => 'dispCommunicationFriend', 'dispMemberMessages' => 'dispCommunicationMessages', 'dispDocumentAdminManageDocument' => 'dispDocumentManageDocument', 'dispModuleAdminSelectList' => 'dispModuleSelectList'); if ($act_alias[$act]) { $get_vars['act'] = $act_alias[$act]; } // organize URL $query = ''; if (count($get_vars)) { // if using rewrite mod if ($self->allow_rewrite) { $var_keys = array_keys($get_vars); sort($var_keys); $target = implode('.', $var_keys); $act = $get_vars['act']; $vid = $get_vars['vid']; $mid = $get_vars['mid']; $key = $get_vars['key']; $srl = $get_vars['document_srl']; $tmpArray = array('rss' => 1, 'atom' => 1, 'api' => 1); $is_feed = isset($tmpArray[$act]); $target_map = array('vid' => $vid, 'mid' => $mid, 'mid.vid' => "{$vid}/{$mid}", 'entry.mid' => "{$mid}/entry/" . $get_vars['entry'], 'entry.mid.vid' => "{$vid}/{$mid}/entry/" . $get_vars['entry'], 'document_srl' => $srl, 'document_srl.mid' => "{$mid}/{$srl}", 'document_srl.vid' => "{$vid}/{$srl}", 'document_srl.mid.vid' => "{$vid}/{$mid}/{$srl}", 'act.mid' => $is_feed ? "{$mid}/{$act}" : '', 'act.mid.vid' => $is_feed ? "{$vid}/{$mid}/{$act}" : '', 'act.document_srl.key' => $act == 'trackback' ? "{$srl}/{$key}/{$act}" : '', 'act.document_srl.key.vid' => $act == 'trackback' ? "{$vid}/{$srl}/{$key}/{$act}" : ''); $query = $target_map[$target]; } if (!$query) { $queries = array(); foreach ($get_vars as $key => $val) { if (is_array($val) && count($val)) { foreach ($val as $k => $v) { $queries[] = $key . '[' . $k . ']=' . urlencode($v); } } else { $queries[] = $key . '=' . urlencode($val); } } if (count($queries)) { $query = 'index.php?' . implode('&', $queries); } } } // If using SSL always $_use_ssl = $self->get('_use_ssl'); if ($_use_ssl == 'always') { $query = $self->getRequestUri(ENFORCE_SSL, $domain) . $query; // optional SSL use } elseif ($_use_ssl == 'optional') { $ssl_mode = RELEASE_SSL; if ($get_vars['act'] && $self->isExistsSSLAction($get_vars['act'])) { $ssl_mode = ENFORCE_SSL; } $query = $self->getRequestUri($ssl_mode, $domain) . $query; // no SSL } else { // currently on SSL but target is not based on SSL if ($_SERVER['HTTPS'] == 'on') { $query = $self->getRequestUri(ENFORCE_SSL, $domain) . $query; } else { if ($domain) { $query = $self->getRequestUri(FOLLOW_REQUEST_SSL, $domain) . $query; } else { $query = getScriptPath() . $query; } } } if ($encode) { if ($autoEncode) { $parsedUrl = parse_url($query); parse_str($parsedUrl['query'], $output); $encode_queries = array(); foreach ($output as $key => $value) { if (preg_match('/&([a-z]{2,}|#\\d+);/', urldecode($value))) { $value = urlencode(htmlspecialchars_decode(urldecode($value))); } $encode_queries[] = $key . '=' . $value; } $encode_query = implode('&', $encode_queries); return htmlspecialchars($parsedUrl['path'] . '?' . $encode_query); } else { return htmlspecialchars($query); } } else { return $query; } }
function insertHomepage($title, $domain) { $oModuleController =& getController('module'); $oModuleModel =& getModel('module'); $info->title = $title; $info->domain = $domain; // 언어 코드 추출 $files = FileHandler::readDir('./modules/homepage/lang'); foreach ($files as $filename) { $lang_code = str_replace('.lang.php', '', $filename); $lang = null; @(include './modules/homepage/lang/' . $filename); if (count($lang->default_menus)) { foreach ($lang->default_menus as $key => $val) { $defined_lang[$lang_code]->{$key} = $val; } } } $lang = null; // virtual site 생성하고 site_srl을 보관 $output = $oModuleController->insertSite($domain, 0); if (!$output->toBool()) { return $output; } $info->site_srl = $output->get('site_srl'); // 언어 코드 등록 (홈, 공지사항, 등업신청, 자유게시판, 전체 글 보기, 한줄이야기, 카페앨범, 메뉴등) foreach ($defined_lang as $lang_code => $v) { foreach ($v as $key => $val) { unset($lang_args); $lang_args->site_srl = $info->site_srl; $lang_args->name = $key; $lang_args->lang_code = $lang_code; $lang_args->value = $val; executeQuery('module.insertLang', $lang_args); } } $oModuleAdminController =& getAdminController('module'); $oModuleAdminController->makeCacheDefinedLangCode($info->site_srl); $oHomepageModel =& getModel('homepage'); $homepage_config = $oHomepageModel->getConfig(0); if (!$homepage_config->default_layout) { $homepage_config->default_layout = 'cafeXE'; } // 레이아웃 생성 $info->layout_srl = $this->makeLayout($info->site_srl, $title, $homepage_config->default_layout); // 기본 게시판+페이지 생성 $info->module->home_srl = $this->makePage($info->site_srl, 'home', '$user_lang->home', $info->layout_srl, $this->getHomeContent()); $info->module->notice_srl = $this->makeBoard($info->site_srl, 'notice', '$user_lang->notice', $info->layout_srl); $info->module->notice_srl = $this->makeBoard($info->site_srl, 'levelup', '$user_lang->levelup', $info->layout_srl); $info->module->freeboard_srl = $this->makeBoard($info->site_srl, 'freeboard', '$user_lang->freeboard', $info->layout_srl); // 메뉴 생성 $info->menu_srl = $this->makeMenu($info->site_srl, $title, 'Main Menu'); // menu 설정 $this->insertMenuItem($info->menu_srl, 0, 'home', '$user_lang->home'); $this->insertMenuItem($info->menu_srl, 0, 'notice', '$user_lang->notice'); $this->insertMenuItem($info->menu_srl, 0, 'levelup', '$user_lang->levelup'); $this->insertMenuItem($info->menu_srl, 0, 'freeboard', '$user_lang->freeboard'); // layout의 설정 $oLayoutModel =& getModel('layout'); $layout_args = $oLayoutModel->getLayout($info->layout_srl); $layout->colorset = 'white'; // vid 형식일 경우 if (isSiteID($domain)) { $layout->index_url = getSiteUrl($domain, ''); } else { $layout->index_url = 'http://' . $domain; } $layout->main_menu = $info->menu_srl; $layout_args->extra_vars = serialize($layout); $oLayoutController =& getAdminController('layout'); $oLayoutController->updateLayout($layout_args); // 생성된 게시판/ 페이지들의 레이아웃 변경 $menu_args->menu_srl = $info->menu_srl; $output = executeQueryArray('layout.getLayoutModules', $menu_args); $modules = array(); foreach ($info->module as $module_srl) { $modules[] = $module_srl; } $layout_module_args->layout_srl = $info->layout_srl; $layout_module_args->module_srls = implode(',', $modules); $output = executeQuery('layout.updateModuleLayout', $layout_module_args); // 홈페이지 등록 $args->site_srl = $info->site_srl; $args->title = $info->title; $args->layout_srl = $info->layout_srl; $args->first_menu_srl = $info->menu_srl; $args->list_order = $info->site_srl * -1; $output = executeQuery('homepage.insertHomepage', $args); // site의 index_module_srl 을 변경 $site_args->site_srl = $info->site_srl; $site_args->index_module_srl = $info->module->home_srl; $oModuleController->updateSite($site_args); // 기본그룹 추가 $oMemberAdminController =& getAdminController('member'); unset($args); $args->title = '$user_lang->default_group1'; $args->is_default = 'Y'; $args->is_admin = 'N'; $args->site_srl = $info->site_srl; $oMemberAdminController->insertGroup($args); unset($args); $args->title = '$user_lang->default_group2'; $args->is_default = 'N'; $args->is_admin = 'N'; $args->site_srl = $info->site_srl; $oMemberAdminController->insertGroup($args); unset($args); $args->title = '$user_lang->default_group3'; $args->is_default = 'N'; $args->is_admin = 'N'; $args->site_srl = $info->site_srl; $oMemberAdminController->insertGroup($args); // 기본 애드온 On $oAddonController =& getAdminController('addon'); $oAddonController->doInsert('autolink', $info->site_srl); $oAddonController->doInsert('counter', $info->site_srl); $oAddonController->doInsert('member_communication', $info->site_srl); $oAddonController->doInsert('member_extra_info', $info->site_srl); $oAddonController->doInsert('referer', $info->site_srl); $oAddonController->doInsert('resize_image', $info->site_srl); $oAddonController->doActivate('autolink', $info->site_srl); $oAddonController->doActivate('counter', $info->site_srl); $oAddonController->doActivate('member_communication', $info->site_srl); $oAddonController->doActivate('member_extra_info', $info->site_srl); $oAddonController->doActivate('referer', $info->site_srl); $oAddonController->doActivate('resize_image', $info->site_srl); $oAddonController->makeCacheFile($info->site_srl); // 기본 에디터 컴포넌트 On $oEditorController =& getAdminController('editor'); $oEditorController->insertComponent('colorpicker_text', true, $info->site_srl); $oEditorController->insertComponent('colorpicker_bg', true, $info->site_srl); $oEditorController->insertComponent('emoticon', true, $info->site_srl); $oEditorController->insertComponent('url_link', true, $info->site_srl); $oEditorController->insertComponent('image_link', true, $info->site_srl); $oEditorController->insertComponent('multimedia_link', true, $info->site_srl); $oEditorController->insertComponent('quotation', true, $info->site_srl); $oEditorController->insertComponent('table_maker', true, $info->site_srl); $oEditorController->insertComponent('poll_maker', true, $info->site_srl); $oEditorController->insertComponent('image_gallery', true, $info->site_srl); // 메뉴 XML 파일 생성 $oMenuAdminController =& getAdminController('menu'); $oMenuAdminController->makeXmlFile($info->menu_srl, $info->site_srl); $this->add('site_srl', $info->site_srl); $this->add('url', getSiteUrl($info->domain, '')); }
/** * @brief virtual site 수정 **/ function updateSite($args) { $oModuleModel =& getModel('module'); $site_info = $oModuleModel->getSiteInfo($args->site_srl); if ($site_info->domain != $args->domain) { $info = $oModuleModel->getSiteInfoByDomain($args->domain); if ($info->site_srl && $info->site_srl != $args->site_srl) { return new Object(-1, 'msg_already_registed_domain'); } if (isSiteID($args->domain) && $oModuleModel->isIDExists($args->domain)) { return new Object(-1, 'msg_already_registed_vid'); } } $output = executeQuery('module.updateSite', $args); return $output; }
/** * @brief 요청받은 url에 args_list를 적용하여 return **/ function _getUrl($num_args = 0, $args_list = array(), $domain = null, $encode = true) { static $site_module_info = null; static $current_info = null; // 가상 사이트 정보를 구함 if (is_null($site_module_info)) { $site_module_info = Context::get('site_module_info'); } // SiteID 요청시 전처리 ($domain이 vid 형식일 경우 $domain값을 없애고 vid로 처리하도록 함) if ($domain && isSiteID($domain)) { $vid = $domain; $domain = ''; } // $domain, $vid값이 없을 경우(= 현재 사이트 정보를 이용함) if (!$domain && !$vid) { if ($site_module_info->domain && isSiteID($site_module_info->domain)) { $vid = $site_module_info->domain; } else { $domain = $site_module_info->domain; } } // $domain값이 있을 경우 현재 요청된 도메인과 비교해서 동일할 경우 제거 그렇지 않으면 http 프로토콜을 제거하고 제일 뒤에 / 를 붙임 if ($domain) { $domain_info = parse_url($domain); if (is_null($current_info)) { $current_info = parse_url(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . getScriptPath()); } if ($domain_info['host'] . $domain_info['path'] == $current_info['host'] . $current_info['path']) { unset($domain); } else { $domain = preg_replace('/^(http|https):\\/\\//i', '', trim($domain)); if (substr($domain, -1) != '/') { $domain .= '/'; } } } // 변수 정리 $get_vars = null; // GET 변수가 없거나 변수 초기화 지정이 되었을 경우 if (!$this->get_vars || $args_list[0] == '') { // 요청받은 변수가 있고 첫번째 인자가 '' 라서 초기화를 해야 할 경우 요청받은 변수를 정리 if (is_array($args_list) && $args_list[0] == '') { array_shift($args_list); } // 초기화를 원하지 않을 경우 GET 변수를 배열로 처리 } else { $get_vars = get_object_vars($this->get_vars); } // 새로 꾸미기를 원하는 변수를 정리 for ($i = 0, $c = count($args_list); $i < $c; $i = $i + 2) { $key = $args_list[$i]; $val = trim($args_list[$i + 1]); // 값이 없으면 GET변수에서 해당 키를 제거 if (!isset($val)) { unset($get_vars[$key]); continue; } // 새로운 변수를 정리 $get_vars[$key] = $val; } // 변수중 vid, rnd값 제거 unset($get_vars['rnd']); if ($vid) { $get_vars['vid'] = $vid; } else { unset($get_vars['vid']); } if (count($get_vars)) { foreach ($get_vars as $key => $val) { if (!trim($val)) { unset($get_vars[$key]); } } } // action명이 변경되었던 것에 대해 호환성을 유지하기 위한 강제 값 변경 switch ($get_vars['act']) { case 'dispMemberFriend': $get_vars['act'] = 'dispCommunicationFriend'; break; case 'dispMemberMessages': $get_vars['act'] = 'dispCommunicationMessages'; break; case 'dispDocumentAdminManageDocument': $get_vars['act'] = 'dispDocumentManageDocument'; break; case 'dispModuleAdminSelectList': $get_vars['act'] = 'dispModuleSelectList'; break; } // URL 구성 $query = null; if ($var_count = count($get_vars)) { // rewrite mod 사용시 if ($this->allow_rewrite) { $var_keys = array_keys($get_vars); asort($var_keys); $target = implode('.', $var_keys); switch ($target) { case 'vid': $query = $get_vars['vid']; break; case 'mid': $query = $get_vars['mid']; break; case 'document_srl': $query = $get_vars['document_srl']; break; case 'document_srl.mid': $query = $get_vars['mid'] . '/' . $get_vars['document_srl']; break; case 'entry.mid': $query = $get_vars['mid'] . '/entry/' . $get_vars['entry']; break; case 'act.document_srl.key': $query = $get_vars['act'] == 'trackback' ? $get_vars['document_srl'] . '/' . $get_vars['key'] . '/' . $get_vars['act'] : ''; break; case 'mid.vid': $query = $get_vars['vid'] . '/' . $get_vars['mid']; break; case 'document_srl.vid': $query = $get_vars['vid'] . '/' . $get_vars['document_srl']; break; case 'document_srl.mid.vid': $query = $get_vars['vid'] . '/' . $get_vars['mid'] . '/' . $get_vars['document_srl']; break; case 'entry.mid.vid': $query = $get_vars['vid'] . '/' . $get_vars['mid'] . '/entry/' . $get_vars['entry']; break; case 'act.document_srl.key.vid': $query = $get_vars['act'] == 'trackback' ? $get_vars['vid'] . '/' . $get_vars['document_srl'] . '/' . $get_vars['key'] . '/' . $get_vars['act'] : ''; break; } } // rewrite mod 미사용 또는 query값이 생성되지 않았을 경우 get argument로 생성 if (!$query) { foreach ($get_vars as $key => $val) { if (is_array($val) && count($val)) { foreach ($val as $k => $v) { $query .= ($query ? '&' : '') . $key . '[' . $k . ']=' . urlencode($v); } } else { $query .= ($query ? '&' : '') . $key . '=' . urlencode($val); } } if ($query) { $query = '?' . $query; } } } // 항상 SSL을 이용하고 현재 SSL이 아닌 경우 https에 대한 prefix를 붙임 if (Context::get('_use_ssl') == 'always') { $query = $this->getRequestUri(ENFORCE_SSL, $domain) . $query; // 상황에 따라 혹은 지정된 대상만 SSL 취급될 경우 } elseif (Context::get('_use_ssl') == 'optional') { $ssl_mode = RELEASE_SSL; if ($get_vars['act'] && $this->_isExistsSSLAction($get_vars['act'])) { $ssl_mode = ENFORCE_SSL; } $query = $this->getRequestUri($ssl_mode, $domain) . $query; // SSL 을 사용하지 않을 경우 } else { // SSL상태인데 대상이 SSL이 아닌 경우 if ($_SERVER['HTTPS'] == 'on') { $query = $this->getRequestUri(ENFORCE_SSL, $domain) . $query; } else { if ($domain) { $query = $this->getRequestUri(FOLLOW_REQUEST_SSL, $domain) . $query; } else { $query = getScriptPath() . $query; } } } if ($encode) { return htmlspecialchars($query); } return $query; }