Merge branch 'develop' into fix/thumbnail-race-condition

This commit is contained in:
Kijin Sung 2015-09-17 14:23:38 +09:00
commit 8d92b0eeb9
16 changed files with 139 additions and 84 deletions

View file

@ -27,4 +27,5 @@ script:
- if [ $(phpenv version-name) != "5.3" ]; then ./vendor/bin/codecept run -d --fail-fast --env travis; fi - if [ $(phpenv version-name) != "5.3" ]; then ./vendor/bin/codecept run -d --fail-fast --env travis; fi
notifications: notifications:
slack: slack:
secure: 0HhwktIb65zfge56E4yMfYj0Xj4GeYIaxvh/Obb13BK1/C8RdWBy6u213N5MQ2UHsxYk8wXXzynaCh4psegi2iPy9dbKmkdAdEQMzYoKE2xYVSqZveeVQm0sqFVXAlzggpgs/j5vtvKYjRkQKtTrz0C+p0uJ0bkLcyWGezWTpGc= secure: jpoMjtkveVuPZM4JXJETAPv8QUCtTbI/ZTixdS9HUgxSb9tD2DkoekMaRzXYnXA82Les/gGxTC0fQFcFrls6Ypkbvp1udBPggmAdLiBHubBIz+yd1BGIf/l4I6MY1QmGe1Lx4xlnVlEgLnKXHn+W+ENep4/MzpCEaR9Vw8wfGqY=
secure: "gPv4qFmGcXimNlI/OeVk5n4VtRCWbAe7VUtw7Inb3A/ZZaVDo11gtMNkwo/JVKSnXqFkaCQYebcNpj2D9Rb2ZCwgjMSX6wxvpA4/8OLOZpbWqFW6Hz2RKNggubXlnalXkIwFcsvj70rKctbcJFk2C1G9rVvYWdVGD9X4/ozQtAc="

View file

@ -666,9 +666,20 @@ class Context
{ {
$url = base64_decode(self::get('default_url')); $url = base64_decode(self::get('default_url'));
$url_info = parse_url($url); $url_info = parse_url($url);
$oModuleModel = getModel('module');
$site_info = $oModuleModel->getSiteInfoByDomain($url_info['host']);
if(!$site_info->site_srl) {
$oModuleObject = new ModuleObject();
$oModuleObject->stop('msg_invalid_request');
return false;
}
$url_info['query'].= ($url_info['query'] ? '&' : '') . 'SSOID=' . session_id(); $url_info['query'].= ($url_info['query'] ? '&' : '') . 'SSOID=' . session_id();
$redirect_url = sprintf('%s://%s%s%s?%s', $url_info['scheme'], $url_info['host'], $url_info['port'] ? ':' . $url_info['port'] : '', $url_info['path'], $url_info['query']); $redirect_url = sprintf('%s://%s%s%s?%s', $url_info['scheme'], $url_info['host'], $url_info['port'] ? ':' . $url_info['port'] : '', $url_info['path'], $url_info['query']);
header('location:' . $redirect_url); header('location:' . $redirect_url);
return FALSE; return FALSE;
} }
// for sites requesting SSO validation // for sites requesting SSO validation
@ -1658,6 +1669,7 @@ class Context
'document_srl.mid' => "$mid/$srl", 'document_srl.mid' => "$mid/$srl",
'document_srl.vid' => "$vid/$srl", 'document_srl.vid' => "$vid/$srl",
'document_srl.mid.vid' => "$vid/$mid/$srl", 'document_srl.mid.vid' => "$vid/$mid/$srl",
'act' => ($is_feed && $act !== 'api') ? $act : '',
'act.mid' => $is_feed ? "$mid/$act" : '', 'act.mid' => $is_feed ? "$mid/$act" : '',
'act.mid.vid' => $is_feed ? "$vid/$mid/$act" : '', 'act.mid.vid' => $is_feed ? "$vid/$mid/$act" : '',
'act.document_srl.key' => ($act == 'trackback') ? "$srl/$key/$act" : '', 'act.document_srl.key' => ($act == 'trackback') ? "$srl/$key/$act" : '',

View file

@ -116,7 +116,6 @@ class ModuleHandler extends Handler
* */ * */
function init() function init()
{ {
$oModuleModel = getModel('module'); $oModuleModel = getModel('module');
$site_module_info = Context::get('site_module_info'); $site_module_info = Context::get('site_module_info');
@ -317,13 +316,13 @@ class ModuleHandler extends Handler
function procModule() function procModule()
{ {
$oModuleModel = getModel('module'); $oModuleModel = getModel('module');
$display_mode = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
// If error occurred while preparation, return a message instance // If error occurred while preparation, return a message instance
if($this->error) if($this->error)
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view'; $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject = ModuleHandler::getModuleInstance('message', $type);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -359,8 +358,7 @@ class ModuleHandler extends Handler
$this->httpStatusCode = '404'; $this->httpStatusCode = '404';
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view'; $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject = ModuleHandler::getModuleInstance('message', $type);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -397,7 +395,7 @@ class ModuleHandler extends Handler
if(!in_array(strtoupper($_SERVER['REQUEST_METHOD']), $allowedMethodList)) if(!in_array(strtoupper($_SERVER['REQUEST_METHOD']), $allowedMethodList))
{ {
$this->error = "msg_invalid_request"; $this->error = "msg_invalid_request";
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view'); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -410,13 +408,24 @@ class ModuleHandler extends Handler
Mobile::setMobile(FALSE); Mobile::setMobile(FALSE);
} }
// Admin ip
$logged_info = Context::get('logged_info'); $logged_info = Context::get('logged_info');
// check CSRF for admin actions
if($kind === 'admin' && Context::getRequestMethod() === 'POST' && !checkCSRF()) {
$this->error = 'msg_invalid_request';
$oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage();
return $oMessageObject;
}
// Admin ip
if($kind == 'admin' && $_SESSION['denied_admin'] == 'Y') if($kind == 'admin' && $_SESSION['denied_admin'] == 'Y')
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$this->error = "msg_not_permitted_act"; $this->error = "msg_not_permitted_act";
$oMessageObject = ModuleHandler::getModuleInstance('message', $type); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -446,8 +455,7 @@ class ModuleHandler extends Handler
if(!is_object($oModule)) if(!is_object($oModule))
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view'; $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject = ModuleHandler::getModuleInstance('message', $type);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -466,7 +474,7 @@ class ModuleHandler extends Handler
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$this->error = 'msg_invalid_request'; $this->error = 'msg_invalid_request';
$oMessageObject = ModuleHandler::getModuleInstance('message', $type); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -495,7 +503,7 @@ class ModuleHandler extends Handler
else else
{ {
$this->error = 'msg_invalid_request'; $this->error = 'msg_invalid_request';
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view'); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -537,9 +545,8 @@ class ModuleHandler extends Handler
if(!is_object($oModule)) if(!is_object($oModule))
{ {
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$oMessageObject = ModuleHandler::getModuleInstance('message', $type); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage('msg_module_is_not_exists'); $oMessageObject->setMessage('msg_module_is_not_exists');
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -569,7 +576,7 @@ class ModuleHandler extends Handler
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$this->error = 'msg_is_not_administrator'; $this->error = 'msg_is_not_administrator';
$oMessageObject = ModuleHandler::getModuleInstance('message', $type); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -583,7 +590,7 @@ class ModuleHandler extends Handler
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$this->error = 'msg_is_not_manager'; $this->error = 'msg_is_not_manager';
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view'); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();
@ -595,7 +602,7 @@ class ModuleHandler extends Handler
{ {
$this->_setInputErrorToContext(); $this->_setInputErrorToContext();
$this->error = 'msg_is_not_administrator'; $this->error = 'msg_is_not_administrator';
$oMessageObject = ModuleHandler::getModuleInstance('message', 'view'); $oMessageObject = ModuleHandler::getModuleInstance('message', $display_mode);
$oMessageObject->setError(-1); $oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error); $oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage(); $oMessageObject->dispMessage();

View file

@ -29,7 +29,7 @@ define('__ZBXE__', __XE__);
/** /**
* Display XE's full version. * Display XE's full version.
*/ */
define('__XE_VERSION__', '1.8.7'); define('__XE_VERSION__', '1.8.10');
define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false));
define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false));
define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false));

View file

@ -274,6 +274,7 @@ class documentController extends document
$obj->homepage = $logged_info->homepage; $obj->homepage = $logged_info->homepage;
} }
// If the tile is empty, extract string from the contents. // If the tile is empty, extract string from the contents.
$obj->title = htmlspecialchars($obj->title);
settype($obj->title, "string"); settype($obj->title, "string");
if($obj->title == '') $obj->title = cut_str(trim(strip_tags(nl2br($obj->content))),20,'...'); if($obj->title == '') $obj->title = cut_str(trim(strip_tags(nl2br($obj->content))),20,'...');
// If no tile extracted from the contents, leave it untitled. // If no tile extracted from the contents, leave it untitled.

View file

@ -43,18 +43,24 @@ class image_gallery extends EditorHandler
*/ */
function transHTML($xml_obj) function transHTML($xml_obj)
{ {
$gallery_info = new stdClass; $gallery_info = new stdClass();
$gallery_info->srl = rand(111111,999999); $gallery_info->srl = rand(111111, 999999);
$gallery_info->border_thickness = $xml_obj->attrs->border_thickness; $gallery_info->border_thickness = (int)$xml_obj->attrs->border_thickness;
$gallery_info->gallery_style = $xml_obj->attrs->gallery_style; $gallery_info->gallery_style = $xml_obj->attrs->gallery_style;
$color_preg = "/^([a-fA-F0-9]{6})/"; $color_preg = "/^([a-fA-F0-9]{6})/";
$gallery_info->border_color = preg_replace($color_preg,"#$1",$xml_obj->attrs->border_color); $gallery_info->border_color = preg_replace($color_preg,"#$1",$xml_obj->attrs->border_color);
$gallery_info->bg_color = preg_replace($color_preg,"#$1",$xml_obj->attrs->bg_color); $gallery_info->bg_color = preg_replace($color_preg,"#$1",$xml_obj->attrs->bg_color);
$gallery_info->gallery_align = $xml_obj->attrs->gallery_align; $gallery_info->gallery_align = $xml_obj->attrs->gallery_align;
if(!in_array($gallery_info->gallery_align, array('left', 'center', 'right'))) {
$gallery_info->gallery_align = 'center';
}
$images_list = $xml_obj->attrs->images_list; $images_list = $xml_obj->attrs->images_list;
$images_list = preg_replace('/\.(gif|jpg|jpeg|png) /i',".\\1\n",$images_list); $images_list = preg_replace('/\.(gif|jpe?g|png) /i', ".\\1\n", $images_list);
$gallery_info->images_list = explode("\n",trim($images_list)); $images_list = explode("\n", trim($images_list));
$gallery_info->images_list = preg_grep("/^[a-z0-9\/]+\.(gif|jpe?g|png)+$/", $images_list);
// If you set the output to output the XML code generated a list of the image // If you set the output to output the XML code generated a list of the image
if(Context::getResponseMethod() == 'XMLRPC') if(Context::getResponseMethod() == 'XMLRPC')
{ {

View file

@ -662,16 +662,17 @@ class fileController extends file
} }
} }
// https://github.com/xpressengine/xe-core/issues/1713
$file_info['name'] = preg_replace('/\.(php|phtm|phar|html?|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']);
$file_info['name'] = removeHackTag($file_info['name']);
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['name']);
// Get random number generator // Get random number generator
$random = new Password(); $random = new Password();
// Set upload path by checking if the attachement is an image or other kinds of file // Set upload path by checking if the attachement is an image or other kinds of file
if(preg_match("/\.(jpe?g|gif|png|wm[va]|mpe?g|avi|swf|flv|mp[1-4]|as[fx]|wav|midi?|moo?v|qt|r[am]{1,2}|m4v)$/i", $file_info['name'])) if(preg_match("/\.(jpe?g|gif|png|wm[va]|mpe?g|avi|swf|flv|mp[1-4]|as[fx]|wav|midi?|moo?v|qt|r[am]{1,2}|m4v)$/i", $file_info['name']))
{ {
// Immediately remove the direct file if it has any kind of extensions for hacking
$file_info['name'] = preg_replace('/\.(php|phtm|phar|html?|cgi|pl|exe|jsp|asp|inc)/i', '$0-x',$file_info['name']);
$file_info['name'] = str_replace(array('<','>'),array('%3C','%3E'),$file_info['name']);
$path = sprintf("./files/attach/images/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3)); $path = sprintf("./files/attach/images/%s/%s", $module_srl,getNumberingPath($upload_target_srl,3));
// special character to '_' // special character to '_'

View file

@ -220,6 +220,7 @@ class fileModel extends file
{ {
$file = $file_list[$i]; $file = $file_list[$i];
$file->source_filename = stripslashes($file->source_filename); $file->source_filename = stripslashes($file->source_filename);
$file->source_filename = htmlspecialchars($file->source_filename);
$file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl); $file->download_url = $this->getDownloadUrl($file->file_srl, $file->sid, $file->module_srl);
$file_list[$i] = $file; $file_list[$i] = $file;
} }

View file

@ -5,7 +5,7 @@
<value xml:lang="en"><![CDATA[XE Installation]]></value> <value xml:lang="en"><![CDATA[XE Installation]]></value>
<value xml:lang="jp"><![CDATA[XEのインストール]]></value> <value xml:lang="jp"><![CDATA[XEのインストール]]></value>
<value xml:lang="zh-CN"><![CDATA[安装XE]]></value> <value xml:lang="zh-CN"><![CDATA[安装XE]]></value>
<value xml:lang="zh-TW"><![CDATA[XE程式安裝]]></value> <value xml:lang="zh-TW"><![CDATA[安裝XE]]></value>
<value xml:lang="fr"><![CDATA[Installation du XE ]]></value> <value xml:lang="fr"><![CDATA[Installation du XE ]]></value>
<value xml:lang="ru"><![CDATA[Установка XE]]></value> <value xml:lang="ru"><![CDATA[Установка XE]]></value>
<value xml:lang="es"><![CDATA[Instalación de XE ]]></value> <value xml:lang="es"><![CDATA[Instalación de XE ]]></value>
@ -34,36 +34,51 @@
<item name="license_agreement"> <item name="license_agreement">
<value xml:lang="ko"><![CDATA[사용권 동의]]></value> <value xml:lang="ko"><![CDATA[사용권 동의]]></value>
<value xml:lang="en"><![CDATA[License agreement]]></value> <value xml:lang="en"><![CDATA[License agreement]]></value>
<value xml:lang="jp"><![CDATA[ライセンス契約]]></value>
<value xml:lang="zh-CN"><![CDATA[许可协议]]></value>
<value xml:lang="zh-TW"><![CDATA[許可協議]]></value>
</item> </item>
<item name="condition"> <item name="condition">
<value xml:lang="ko"><![CDATA[설치 조건 확인]]></value> <value xml:lang="ko"><![CDATA[설치 조건 확인]]></value>
<value xml:lang="en"><![CDATA[Check the installation conditions]]></value> <value xml:lang="en"><![CDATA[Check the installation conditions]]></value>
<value xml:lang="jp"><![CDATA[インストール条件確認]]></value> <value xml:lang="jp"><![CDATA[インストール条件確認]]></value>
<value xml:lang="zh-CN"><![CDATA[检查安装条件]]></value>
<value xml:lang="zh-TW"><![CDATA[檢查安裝條件]]></value>
</item> </item>
<item name="ftp"> <item name="ftp">
<value xml:lang="ko"><![CDATA[FTP 정보 입력]]></value> <value xml:lang="ko"><![CDATA[FTP 정보 입력]]></value>
<value xml:lang="en"><![CDATA[Input FTP information]]></value> <value xml:lang="en"><![CDATA[Input FTP information]]></value>
<value xml:lang="jp"><![CDATA[FTP情報入力]]></value> <value xml:lang="jp"><![CDATA[FTP情報入力]]></value>
<value xml:lang="zh-CN"><![CDATA[输入FTP信息]]></value>
<value xml:lang="zh-TW"><![CDATA[輸入FTP信息]]></value>
</item> </item>
<item name="dbSelect"> <item name="dbSelect">
<value xml:lang="ko"><![CDATA[DB 선택]]></value> <value xml:lang="ko"><![CDATA[DB 선택]]></value>
<value xml:lang="en"><![CDATA[Choose database type]]></value> <value xml:lang="en"><![CDATA[Choose database type]]></value>
<value xml:lang="jp"><![CDATA[DB選択]]></value> <value xml:lang="jp"><![CDATA[DB選択]]></value>
<value xml:lang="zh-CN"><![CDATA[选择DB]]></value>
<value xml:lang="zh-TW"><![CDATA[選擇DB]]></value>
</item> </item>
<item name="dbInfo"> <item name="dbInfo">
<value xml:lang="ko"><![CDATA[DB 정보 입력]]></value> <value xml:lang="ko"><![CDATA[DB 정보 입력]]></value>
<value xml:lang="en"><![CDATA[Input Database information]]></value> <value xml:lang="en"><![CDATA[Input Database information]]></value>
<value xml:lang="jp"><![CDATA[DB情報入力]]></value> <value xml:lang="jp"><![CDATA[DB情報入力]]></value>
<value xml:lang="zh-CN"><![CDATA[输入DB信息]]></value>
<value xml:lang="zh-TW"><![CDATA[輸入DB信息]]></value>
</item> </item>
<item name="configInfo"> <item name="configInfo">
<value xml:lang="ko"><![CDATA[환경 설정]]></value> <value xml:lang="ko"><![CDATA[환경 설정]]></value>
<value xml:lang="en"><![CDATA[Settings]]></value> <value xml:lang="en"><![CDATA[Settings]]></value>
<value xml:lang="jp"><![CDATA[環境設定]]></value> <value xml:lang="jp"><![CDATA[環境設定]]></value>
<value xml:lang="zh-CN"><![CDATA[环境设置]]></value>
<value xml:lang="zh-TW"><![CDATA[環境設置]]></value>
</item> </item>
<item name="adminInfo"> <item name="adminInfo">
<value xml:lang="ko"><![CDATA[관리자 정보 입력]]></value> <value xml:lang="ko"><![CDATA[관리자 정보 입력]]></value>
<value xml:lang="en"><![CDATA[Enter Administrator information]]></value> <value xml:lang="en"><![CDATA[Enter Administrator information]]></value>
<value xml:lang="jp"><![CDATA[管理者情報入力]]></value> <value xml:lang="jp"><![CDATA[管理者情報入力]]></value>
<value xml:lang="zh-CN"><![CDATA[输入管理员信息]]></value>
<value xml:lang="zh-TW"><![CDATA[輸入管理員信息]]></value>
</item> </item>
</item> </item>
<item name="install_condition_enable"> <item name="install_condition_enable">

View file

@ -543,6 +543,9 @@ class menuAdminController extends menu
if($request->menu_desc) $args->desc = $request->menu_desc; if($request->menu_desc) $args->desc = $request->menu_desc;
else $args->desc = ''; else $args->desc = '';
$args->name = strip_tags(removeHackTag($args->name));
$args->desc = strip_tags(removeHackTag($args->desc));
debugPrint($args);
if($request->module_id && strncasecmp('http', $request->module_id, 4) === 0) if($request->module_id && strncasecmp('http', $request->module_id, 4) === 0)
{ {
return new Object(-1, 'msg_invalid_request'); return new Object(-1, 'msg_invalid_request');
@ -646,7 +649,7 @@ class menuAdminController extends menu
public function procMenuAdminUpdateItem() public function procMenuAdminUpdateItem()
{ {
$request = Context::getRequestVars(); $request = Context::getRequestVars();
debugPrint($request);
if(!$request->menu_item_srl || !$request->menu_name) if(!$request->menu_item_srl || !$request->menu_name)
{ {
return new Object(-1, 'msg_invalid_request'); return new Object(-1, 'msg_invalid_request');
@ -729,10 +732,13 @@ class menuAdminController extends menu
if($request->menu_desc) $args->desc = $request->menu_desc; if($request->menu_desc) $args->desc = $request->menu_desc;
else $args->desc = ''; else $args->desc = '';
$args->name = removeHackTag($args->name);
$args->desc = removeHackTag($args->desc);
unset($args->group_srls); unset($args->group_srls);
$args->open_window = $request->menu_open_window; $args->open_window = $request->menu_open_window;
$args->expand = $request->menu_expand; $args->expand = $request->menu_expand;
$output = executeQuery('menu.updateMenuItem', $args); $output = $this->_updateMenuItem($args);
$this->makeXmlFile($args->menu_srl); $this->makeXmlFile($args->menu_srl);
@ -790,7 +796,7 @@ class menuAdminController extends menu
$item_info->active_btn = ''; $item_info->active_btn = '';
} }
$output = executeQuery('menu.updateMenuItem', $item_info); $output = $this->_updateMenuItem($item_info);
// recreate menu cache file // recreate menu cache file
$this->makeXmlFile($args->menu_srl); $this->makeXmlFile($args->menu_srl);
@ -798,13 +804,23 @@ class menuAdminController extends menu
public function updateMenuItem($itemInfo) public function updateMenuItem($itemInfo)
{ {
$output = executeQuery('menu.updateMenuItem', $itemInfo); $output = $this->_updateMenuItem($itemInfo);
// recreate menu cache file // recreate menu cache file
$this->makeXmlFile($itemInfo->menu_srl); $this->makeXmlFile($itemInfo->menu_srl);
return $output; return $output;
} }
public function _updateMenuItem($itemInfo)
{
$itemInfo->name = removeHackTag($itemInfo->name);
$itemInfo->desc = removeHackTag($itemInfo->desc);
$output = executeQuery('menu.updateMenuItem', $itemInfo);
return $output;
}
/** /**
* Delete menu item(menu of the menu) * Delete menu item(menu of the menu)
* @return void|Object * @return void|Object
@ -961,7 +977,7 @@ class menuAdminController extends menu
{ {
$output->data->url = ''; $output->data->url = '';
$referenceItem = $output->data; $referenceItem = $output->data;
$output = executeQuery('menu.updateMenuItem', $referenceItem); $output = $this->_updateMenuItem($referenceItem);
if(!$output->toBool()) if(!$output->toBool())
{ {
$oDB->rollback(); $oDB->rollback();
@ -1085,7 +1101,7 @@ class menuAdminController extends menu
$args = new stdClass(); $args = new stdClass();
$args->menu_srl = $menu_srl; $args->menu_srl = $menu_srl;
$args->menu_item_srl = $node['node_srl']; $args->menu_item_srl = $node['node_srl'];
$output = executeQuery('menu.updateMenuItemNode', $args); $output = $this->_updateMenuItem($args);
//module's menu_srl move also //module's menu_srl move also
if($node['is_shortcut'] == 'N' && !empty($node['url'])) if($node['is_shortcut'] == 'N' && !empty($node['url']))
@ -1249,7 +1265,7 @@ class menuAdminController extends menu
$update_item_info->normal_btn = $copied_info['normal_btn']; $update_item_info->normal_btn = $copied_info['normal_btn'];
$update_item_info->hover_btn = $copied_info['hover_btn']; $update_item_info->hover_btn = $copied_info['hover_btn'];
$update_item_info->active_btn = $copied_info['active_btn']; $update_item_info->active_btn = $copied_info['active_btn'];
executeQuery('menu.updateMenuItem', $update_item_info); $output = $this->_updateMenuItem($update_item_info);
} }
$this->insertedMenuItemSrlList[] = $insertedMenuItemSrl; $this->insertedMenuItemSrlList[] = $insertedMenuItemSrl;
} }
@ -1629,7 +1645,7 @@ class menuAdminController extends menu
// Update if exists // Update if exists
if($item_info->menu_item_srl == $args->menu_item_srl) if($item_info->menu_item_srl == $args->menu_item_srl)
{ {
$output = executeQuery('menu.updateMenuItem', $args); $output = $this->_updateMenuItem($args);
if(!$output->toBool()) return $output; if(!$output->toBool()) return $output;
} }
// Insert if not exist // Insert if not exist
@ -1680,7 +1696,7 @@ class menuAdminController extends menu
if($exposure) $args->group_srls = implode(',', $exposure); if($exposure) $args->group_srls = implode(',', $exposure);
} }
$output = executeQuery('menu.updateMenuItem', $args); $output = $this->_updateMenuItem($args);
if(!$output->toBool()) if(!$output->toBool())
{ {
return $output; return $output;

View file

@ -462,7 +462,7 @@ class moduleController extends module
$menuArgs->url = $args->mid; $menuArgs->url = $args->mid;
$menuArgs->expand = 'N'; $menuArgs->expand = 'N';
$menuArgs->is_shortcut = 'N'; $menuArgs->is_shortcut = 'N';
$menuArgs->name = $args->browser_title; $menuArgs->name = removeHackTag($args->browser_title);
$menuArgs->listorder = $args->menu_item_srl * -1; $menuArgs->listorder = $args->menu_item_srl * -1;
$menuItemOutput = executeQuery('menu.insertMenuItem', $menuArgs); $menuItemOutput = executeQuery('menu.insertMenuItem', $menuArgs);
@ -476,8 +476,9 @@ class moduleController extends module
} }
} }
$args->menu_srl = $menuArgs->menu_srl;
// Insert a module // Insert a module
$args->menu_srl = $menuArgs->menu_srl;
$args->browser_title = removeHackTag($args->browser_title);
$output = executeQuery('module.insertModule', $args); $output = executeQuery('module.insertModule', $args);
if(!$output->toBool()) if(!$output->toBool())
{ {
@ -520,6 +521,7 @@ class moduleController extends module
if(!$args->site_srl) $args->site_srl = (int)$module_info->site_srl; if(!$args->site_srl) $args->site_srl = (int)$module_info->site_srl;
if(!$args->browser_title) $args->browser_title = $module_info->browser_title; if(!$args->browser_title) $args->browser_title = $module_info->browser_title;
} }
$args->browser_title = removeHackTag($args->browser_title);
$output = executeQuery('module.isExistsModuleName', $args); $output = executeQuery('module.isExistsModuleName', $args);
if(!$output->toBool() || $output->data->count) if(!$output->toBool() || $output->data->count)

View file

@ -55,6 +55,7 @@ class rssAdminView extends rss
} }
} }
if(!$total_config->feed_document_count) $total_config->feed_document_count = 15; if(!$total_config->feed_document_count) $total_config->feed_document_count = 15;
$total_config->url = $oRssModel->getModuleFeedUrl(NULL, '', 'rss', true);
Context::set('feed_config', $feed_config); Context::set('feed_config', $feed_config);
Context::set('total_config', $total_config); Context::set('total_config', $total_config);

View file

@ -12,27 +12,19 @@ class rssModel extends rss
* *
* @param string $vid Vid * @param string $vid Vid
* @param string $mid mid * @param string $mid mid
* @param string $format Feed format. ef)xe, atom, rss1.0 * @param string $format Feed format. rss | atom
* @param bool $absolute_url
* @return string * @return string
*/ */
function getModuleFeedUrl($vid = null, $mid, $format) function getModuleFeedUrl($vid, $mid, $format = 'rss', $absolute_url = false)
{ {
if(Context::isAllowRewrite()) if($absolute_url)
{ {
$request_uri = Context::getRequestUri(); return getFullUrl('','vid',$vid, 'mid',$mid, 'act',$format);
// 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 else
{ {
return $request_uri.$mid.'/'.$format; return getUrl('','vid',$vid, 'mid',$mid, 'act',$format);
}
}
else
{
return getUrl('','mid',$mid,'act',$format);
} }
} }

View file

@ -172,7 +172,7 @@ class rssView extends rss
$info->id = $proctcl.$_SERVER['HTTP_HOST'].$info->id; $info->id = $proctcl.$_SERVER['HTTP_HOST'].$info->id;
} }
$info->language = Context::getLangType(); $info->language = str_replace('jp','ja',Context::getLangType());
// Set the variables used in the RSS output // Set the variables used in the RSS output
Context::set('info', $info); Context::set('info', $info);
Context::set('feed_config', $config); Context::set('feed_config', $config);

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ruleset version="1.5.0"> <ruleset version="1.5.0">
<customrules> <customrules>
<rule name="boolean" type="enum" test="Y,N" /> <rule name="boolean" type="enum" test="Y,N" />
@ -7,7 +7,7 @@
<field name="module" required="true" default="rss" /> <field name="module" required="true" default="rss" />
<field name="act" required="true" default="procRssAdminInsertConfig" /> <field name="act" required="true" default="procRssAdminInsertConfig" />
<field name="use_total_feed" required="true" default="Y" rule="boolean" /> <field name="use_total_feed" required="true" default="Y" rule="boolean" />
<field name="feed_title" required="true"> <field name="feed_title">
<title xml:lang="ko">피드(Feed) 제목</title> <title xml:lang="ko">피드(Feed) 제목</title>
<title xml:lang="en">Feed Title</title> <title xml:lang="en">Feed Title</title>
</field> </field>

View file

@ -12,7 +12,7 @@
<input type="hidden" name="xe_validator_id" value="modules/rss/tpl/rss_admin_index/1" /> <input type="hidden" name="xe_validator_id" value="modules/rss/tpl/rss_admin_index/1" />
<div class="x_control-group"> <div class="x_control-group">
<div class="x_control-label">{$lang->url}</div> <div class="x_control-label">{$lang->url}</div>
<div class="x_controls" style="padding-top:5px"><a href="{getFullSiteUrl()}rss" target="_blank">{getFullSiteUrl()}rss</a></div> <div class="x_controls" style="padding-top:5px"><a href="{$total_config->url}" target="_blank">{$total_config->url}</a></div>
</div> </div>
<div class="x_control-group"> <div class="x_control-group">
<label class="x_control-label">{$lang->total_feed}</label> <label class="x_control-label">{$lang->total_feed}</label>