From 15d93075c3b21af552f8a27f09bbe722e07583ef Mon Sep 17 00:00:00 2001 From: conory Date: Mon, 21 Dec 2015 15:36:05 +0900 Subject: [PATCH 001/189] =?UTF-8?q?php7=20=EC=A7=80=EC=9B=90=ED=95=98?= =?UTF-8?q?=EC=A7=80=EC=95=8A=EB=8A=94=20e=EC=98=B5=EC=85=98=20=EB=8C=80?= =?UTF-8?q?=EC=B2=B4=20=EC=B6=94=EA=B0=80=EB=90=9C=20=EA=B0=80=EC=9E=85?= =?UTF-8?q?=ED=8F=BC=20=EB=82=98=EC=98=A4=EC=A7=80=EC=95=8A=EB=8A=94=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/member/member.admin.view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index f6a59dadb..b25579b82 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -615,7 +615,7 @@ class memberAdminView extends member } $replace = array_merge($extentionReplace, $replace); - $inputTag = preg_replace('@%(\w+)%@e', '$replace[$1]', $template); + $inputTag = preg_replace_callback('@%(\w+)%@', function($n) { return $replace[$n[1]]; }, $template); if($extendForm->description) $inputTag .= '

'.$extendForm->description.'

'; From 3d4883ef798be971b72c8712ba872a6fcb3c0aaf Mon Sep 17 00:00:00 2001 From: conory Date: Mon, 21 Dec 2015 16:17:31 +0900 Subject: [PATCH 002/189] =?UTF-8?q?php7=EB=A5=BC=20=EC=9C=84=ED=95=9C=20ph?= =?UTF-8?q?pmailer=20=EC=88=98=EC=A0=95=20(=EC=B6=94=ED=9B=84=20phpmailer?= =?UTF-8?q?=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=EB=A5=BC=20=ED=95=98?= =?UTF-8?q?=EB=A9=B4=20=EC=A2=8B=EA=B2=A0=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/phpmailer/phpmailer.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/phpmailer/phpmailer.php b/libs/phpmailer/phpmailer.php index c36f7c9d8..9ac3ffde5 100644 --- a/libs/phpmailer/phpmailer.php +++ b/libs/phpmailer/phpmailer.php @@ -1724,10 +1724,10 @@ class PHPMailer { switch (strtolower($position)) { case 'phrase': - $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + $encoded = preg_replace_callback('/([^A-Za-z0-9!*+\/ -])/', function($n) { return '='.sprintf('%02X', ord('\\1')); }, $encoded); break; case 'comment': - $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); + $encoded = preg_replace_callback('/([\(\)\"])/', function($n) { return '='.sprintf('%02X', ord('\\1')); }, $encoded); case 'text': default: // Replace every high ascii, control =, ? and _ characters From dc4c22d64a5de39b677ae704e6e81177fdca91b0 Mon Sep 17 00:00:00 2001 From: conory Date: Fri, 18 Dec 2015 18:45:12 +0900 Subject: [PATCH 003/189] =?UTF-8?q?=EB=8B=A4=EC=8B=9C=20=EB=82=98=ED=83=80?= =?UTF-8?q?=EB=82=9C=20HTTP=5FRAW=5FPOST=5FDATA=20=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/context/Context.class.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 01e46b7db..2ad94ef30 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -201,9 +201,12 @@ class Context function init() { // fix missing HTTP_RAW_POST_DATA in PHP 5.6 and above - if(!isset($GLOBALS['HTTP_RAW_POST_DATA']) && version_compare(PHP_VERSION, '5.6.0', '>=') === true) { + if(!isset($GLOBALS['HTTP_RAW_POST_DATA']) && version_compare(PHP_VERSION, '5.6.0', '>=') === TRUE) + { $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input"); - if(!preg_match('/^[<\{\[]/', $GLOBALS['HTTP_RAW_POST_DATA'])) + + // If content is not XML JSON, unset + if(!preg_match('/^[\<\{\[]/', $GLOBALS['HTTP_RAW_POST_DATA']) && strpos($_SERVER['CONTENT_TYPE'], 'json') === FALSE && strpos($_SERVER['HTTP_CONTENT_TYPE'], 'json') === FALSE) { unset($GLOBALS['HTTP_RAW_POST_DATA']); } From d52ac010cd55333db82f17987bea76a0407d66f2 Mon Sep 17 00:00:00 2001 From: conory Date: Thu, 24 Dec 2015 11:15:54 +0900 Subject: [PATCH 004/189] Creating default object from empty value --- modules/editor/editor.admin.controller.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/editor/editor.admin.controller.php b/modules/editor/editor.admin.controller.php index 659132bea..baf7750a3 100644 --- a/modules/editor/editor.admin.controller.php +++ b/modules/editor/editor.admin.controller.php @@ -144,7 +144,8 @@ class editorAdminController extends editor { $oModuleController = getController('module'); $configVars = Context::getRequestVars(); - + + $config = new stdClass; if($configVars->font_defined != 'Y') $config->font_defined = $configVars->font_defined = 'N'; else $config->font_defined = 'Y'; From 803c5943d0c906af5e6174b43962487f789fe221 Mon Sep 17 00:00:00 2001 From: bnu Date: Mon, 18 Jan 2016 11:11:31 +0900 Subject: [PATCH 005/189] =?UTF-8?q?forum=20chak=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/addon/tpl/addon_list.html | 2 - modules/addon/tpl/setup_addon.html | 2 - modules/admin/tpl/_dashboard_default.html | 1 + modules/admin/tpl/_header.html | 2 - modules/admin/tpl/admin_setup.html | 2 - modules/admin/tpl/config_ftp.html | 2 - modules/admin/tpl/config_general.html | 1 - modules/admin/tpl/css/admin.css | 33 --------- modules/admin/tpl/img/chak_c.png | Bin 5176 -> 0 bytes modules/admin/tpl/js/admin.js | 64 ------------------ modules/autoinstall/tpl/index.html | 2 - modules/autoinstall/tpl/list.html | 18 +++++ modules/comment/tpl/comment_list.html | 2 - modules/comment/tpl/declared_list.html | 4 +- modules/document/tpl/declared_list.html | 4 +- modules/document/tpl/document_list.html | 2 - modules/editor/tpl/admin_index.html | 1 - modules/file/tpl/adminConfig.html | 2 - modules/file/tpl/file_list.html | 2 - modules/importer/tpl/index.html | 2 - modules/layout/tpl/installed_layout_list.html | 2 - .../layout/tpl/layout_all_instance_list.html | 2 - modules/layout/tpl/layout_edit.html | 2 - modules/layout/tpl/layout_instance_list.html | 2 - modules/layout/tpl/layout_modify.html | 2 - modules/member/tpl/default_config.html | 2 - modules/member/tpl/design_config.html | 2 - modules/member/tpl/group_list.html | 2 - modules/member/tpl/insert_member.html | 2 - modules/member/tpl/login_config.html | 2 - modules/member/tpl/member_list.html | 2 - modules/member/tpl/signup_config.html | 2 - modules/menu/tpl/sitemap.html | 5 -- modules/module/tpl/adminFileBox.html | 2 - modules/module/tpl/category_list.html | 2 - modules/module/tpl/category_update_form.html | 1 - modules/module/tpl/module_list.html | 4 +- modules/point/tpl/config.html | 4 +- modules/point/tpl/member_list.html | 2 - modules/point/tpl/module_config.html | 2 - modules/poll/tpl/poll_list.html | 2 - modules/rss/tpl/rss_admin_index.html | 2 - modules/spamfilter/tpl/footer.html | 1 - modules/trash/tpl/trash_list.html | 2 - modules/trash/tpl/trash_view.html | 1 - .../widget/tpl/downloaded_widget_list.html | 2 - modules/widget/tpl/widget_generate_code.html | 2 - 47 files changed, 23 insertions(+), 183 deletions(-) delete mode 100644 modules/admin/tpl/img/chak_c.png diff --git a/modules/addon/tpl/addon_list.html b/modules/addon/tpl/addon_list.html index 018fedb5e..7ce073955 100644 --- a/modules/addon/tpl/addon_list.html +++ b/modules/addon/tpl/addon_list.html @@ -61,5 +61,3 @@ - -
diff --git a/modules/addon/tpl/setup_addon.html b/modules/addon/tpl/setup_addon.html index 3922f27b2..399936fa6 100644 --- a/modules/addon/tpl/setup_addon.html +++ b/modules/addon/tpl/setup_addon.html @@ -120,5 +120,3 @@ }); })(jQuery); - -
diff --git a/modules/admin/tpl/_dashboard_default.html b/modules/admin/tpl/_dashboard_default.html index 32e4ae3e2..1028cc468 100644 --- a/modules/admin/tpl/_dashboard_default.html +++ b/modules/admin/tpl/_dashboard_default.html @@ -63,3 +63,4 @@

{$lang->more}

+ diff --git a/modules/admin/tpl/_header.html b/modules/admin/tpl/_header.html index ef2f95953..34b083724 100644 --- a/modules/admin/tpl/_header.html +++ b/modules/admin/tpl/_header.html @@ -1,7 +1,5 @@ - -

{$lang->skip_to_content}

diff --git a/modules/admin/tpl/admin_setup.html b/modules/admin/tpl/admin_setup.html index 758739f5c..a75dfc524 100644 --- a/modules/admin/tpl/admin_setup.html +++ b/modules/admin/tpl/admin_setup.html @@ -114,5 +114,3 @@ .adminMap .parent>.side{right:30px} .adminMap .placeholder{background:#000;border-radius:5px} - -
diff --git a/modules/admin/tpl/config_ftp.html b/modules/admin/tpl/config_ftp.html index 22e2c0a67..4208abd88 100644 --- a/modules/admin/tpl/config_ftp.html +++ b/modules/admin/tpl/config_ftp.html @@ -124,5 +124,3 @@ jQuery(function($){ }); }); - -
diff --git a/modules/admin/tpl/config_general.html b/modules/admin/tpl/config_general.html index 9ae57ce97..3ec964fd8 100644 --- a/modules/admin/tpl/config_general.html +++ b/modules/admin/tpl/config_general.html @@ -314,4 +314,3 @@ function doSubmitConfig() -
diff --git a/modules/admin/tpl/css/admin.css b/modules/admin/tpl/css/admin.css index 1de422984..674e20d79 100644 --- a/modules/admin/tpl/css/admin.css +++ b/modules/admin/tpl/css/admin.css @@ -908,9 +908,6 @@ margin-bottom: 10px; text-decoration: none; color: #666; } -.x>.header>.account>ul>li.forum-chak>a { - color: #FFF; -} .x>.header>.account>ul>li>a:hover, .x>.header>.account>ul>li>a:focus { text-decoration: underline; @@ -2390,33 +2387,3 @@ html[lang="mn"] .x .g11n.active>[disabled], height: 1px; overflow: hidden; } - - -.admin-forum-container { - clear: both; - margin: 10px 5px; - border: 0 solid #ddd; -} -.admin-forum-container.activated-forum { - margin-top: 30px; - padding: 15px; - background-color: #fbfbfb; - border-width: 3px 0; -} -.admin-forum-container .open-forum { - display: inline-block; - padding: 15px; - padding-left: 60px; - color: #0088cc; - font-size: 14px; - height: 20px; - line-height: 20px; - text-decoration: none; - background-image: url('../img/chak_c.png'); - background-repeat: no-repeat; - background-position: center left; -} -.admin-forum-container .open-forum:hover, -.admin-forum-container .open-forum:active { - text-decoration: underline; -} diff --git a/modules/admin/tpl/img/chak_c.png b/modules/admin/tpl/img/chak_c.png deleted file mode 100644 index c0ea44130ce82d62518e652917ad1c132ff6feb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5176 zcmeHLdo+~m9{$EIm2}n3j$@(=rZIPOX-q^(8HLGZcQa;;ennTIY|m*0I*ieDl7)=Xu`W`@Fy3yvv@I zE{@~$e%1p3V4TxZ2RG=G0KKM+)`i}Y)8sYK2TbbbxClroGI|4jfwPvn(E(uNTmT5! z2>_kYP)Gv+$k71s)&~G6F#s@Kd@RG23Qdd=FZGrJz*qzI3kDoHHUoNi$76WOyy(sp zmPla5WQ%-3D}_J|MFRj;L4h6xpo|Gu2>3!NMPXyAiJ(Bw>S2^AToWSOU}Ne4!t#Y)t)RGBE{(3JMCc3c^{5BwQ4ROeUkySQHkE zgd&jAV4;kuKnkU1eI#Fb96%{c!V}AQA|YJO%k&k=Wj3a!YN3I@zIDoYoIxd_v_CB< zL6mw1g|R}ThJuOxL^6@oPb3~#0t>#1#cK#^~|s^HfumoESK;#o5E(HKt3n{ zg)%9G!wk7z$eaP-H!D>z#lwn0AUgeD!vumM<)pI3fzXEc8#tt(lo2cjQEs4AB$u$j z#evZB2VI0rqN?|wqMql=)kdxo@?wL;q^YY0?zGt68bh|WMq;fXjv?cQ z_#KJ81ccyP6eJ{u%)mkv7z&Q4&7u|g9S5}kJWj9{$1uwn4Ev5iLoJdpL?S-TPTlI@ zE5DXJ+}<7z<%Wlw)0r%uP~8VC`m)jnealCuQUII<(~Yt_xyvh!tuY%<0djYN|`HWH5~V4<>u-q2VU4owDGSdcZa|61_jHTnzeKR2$g z6u)hYnhrZ;8>K>tKod?sHk7}Y*$?o+%=)RJy91XeWbz$EEV=rg)!(z&f4gV(Nen^r zgOrv;-~E{_VnH&4*AEv=WvAFv7h4l|Q zp2qa%y*!`GKF?jUPvjE&q*XZ=8_)Ipn6hwblI6VWt6#RvcUy<*JZuhgdvx`wOZer} z=VN+0W~9yfwCePRjxRYmIr7Vx^Li&eQUceXtv}yX_U7zFT^Rn=VwXm}o<`m||VjCZ|6W3vl6sW}Y|e!p8bA1%3g>U@G%gVPQFh*)}EY0UDY)ROg_ zx^2GRGasyL$i_uHn+966oZ`CaI9z$Q=P4;9D?GO*B=Ud=6A`8x>G|yWb5ZR%*L+5@ zzRRyi_+_f|O@=zgfAUq1+zE#H5%jpmi}gjoV{iN8JH*es)2g$!)I`&z)$L_EnG6?& zQ`r4^(f7NFY!>T6mlt>nu1L8yg$_RPp6pYN~W$ z*Q{kls(J9`A2KH!&YX$xF!ZkVdcWgBR$gd>XT_RbXCw_*?%%(^SeB8L8c?(3jhs4p z^oiT2y0&L@W}&Znr3c@;ka-y=05}TfoL3VwV!WjZ9T}f@j?kT!wvlzNt*vdsr7J$i zYu{C*wpixX)zw{2oNGqH7k1}46K|dHvuZ3ZEtRhRo#B7x?AfD6CMN4;`l^Jf`DvmT z)ltrKpKpi9)P&ciw_hqDVK4!Nq9~I_{0N4jN*HnN`Q(GD2(J%^-Q%YhMHd#92216R zmSK<9C6mezUXQ-ky3;UihEZGouFoDPzBol0MNWeGPF2=kx_kkN1Q8Ji*IX|z{8OOZ zXO4IVGwimq>zMQz5u!NsqP{1!`0xRzoR-=3b972{-nTf9TdLYMGPyP_Ee&r+8ljBB zrYh5-JQt2FaC*42EKySGZ1JZJvgD859>Dv&moIM?y@^{8bOvXAqIC|>bC;JtY|nf+ zLZ-OTa&ckkp^Yq)+M89kJ4vniK){Lz8vrrzY&vPHs$)xg>+D0@dXL@}`idA^<{w@F z-Zf9&XU30CKKL^7Ncugm3S#{FB*cfrgBQAz8Y9ZAuG-+b-nFb@uRF5LIoLQD7us`R z(hlh?U53ls@LvDB=~$oF6Ah2dMHGnTRQ=E`Mp-7gBJ;SQOXD#w#=f|ZDaAKp{_4>S z-RT$5F|t8g>#UpLxRoc7eEKOP|F})#uWeycMtkt`sKTU*j^vjQle(Y8C)q2NsfF$j z17DBQaT=Z3HKCa5cQoMP{hT6`@}Wp{ne zoxoEg8@qFwtLNfXkp&E3PW|N-wwnn?m*GIcm5jKtmW6q%fa3)ZTGkMcKUA9CZXA^+ zhFi{`N{?JBD5^4ly!P%U>-Vq{T~}TfaIr_?GrpYN7J|6-RqIaAZYBH~P|@{{ynnFV)5-nto!TlW5zUE6*!T_$@N z-xBWbzP{*lJ1uT@)oIsGi+wh>W2pI?CxC5ffwZ)c>joE5E9Z{d^VT}pcH$I$@OJpy zQ3k;`SCm;;WKJiU*f*g+HLr9$PAQJYO;x z{mW*^K4hY<>zkXW%ns!ceJG*H5kDP@s<8<09Cat{BW=61zNj0SEqSi#9XZSd2-wa@1wPGlp9vV7r& zt_*2}Cl3>0Qkx|1H}%wW2H&)j8Oe^a+mt6c%A~6aoWmq?IjvH#T$W|xyqJbRos1a wyL6xOW@_fMXGNL2N7wxFGAyjOBA@O51eR-%J^%m! diff --git a/modules/admin/tpl/js/admin.js b/modules/admin/tpl/js/admin.js index 1f3a60d20..0eee8ae5b 100644 --- a/modules/admin/tpl/js/admin.js +++ b/modules/admin/tpl/js/admin.js @@ -2471,67 +2471,3 @@ jQuery(function($){ } }); }); - - - -// Forum Chak -(function($){ - var chak = { - elClass: 'chak-comment', - group_id: 'xe1_official', - apikey: 'xe17935b49af5435d37f1cde130363db-forum' - }; - - $(function(){ - var $chakContainer = $('.admin-forum-container'); - - if($chakContainer.length) { - var $forumOpen = $('이 페이지에 대한 포럼 보기'); - var $headerButton = $('
  • Forum
  • '); - var $headerMenu = $('header.header .account ul'); - - (function(){var s=document.createElement('script');s.type='text/javascript';s.src='//chak.it/static/service.js';s.async=true;(document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(s);})(); - - $chakContainer.each(function(idx){ - var $el = $(this); - var elData = $el.data(); - elData.count = 0; - var $opener = $forumOpen.clone(); - var $button = $headerButton.clone(); - var forumId = 'inline-forum-' + idx; - - $el.append($opener); - - $button.find('a') - .attr('href', '#' + forumId) - .on('click', function(){ - var $target = $($.attr(this, 'href')); - $('html, body').animate({ - scrollTop: $target.offset().top - 20 - }, 500); - return false; - }) - .one('click', function() { - var $target = $($.attr(this, 'href')); - $target.find('a').click(); - }); - - $headerMenu.append($button); - $el.attr('id', forumId); - - $el.find('a').on('click', function(){ - var div = document.createElement("div"); - div.setAttribute("data-chak-apikey", chak.apikey); - div.setAttribute("data-chak-categories", elData.chakCategories); - - $opener.after(div); - $chakContainer.addClass('activated-forum'); - - manuallySetChakService(div); - - $opener.remove(); - }); - }); - } - }); -})(jQuery); diff --git a/modules/autoinstall/tpl/index.html b/modules/autoinstall/tpl/index.html index f40c74b3d..cb29354da 100644 --- a/modules/autoinstall/tpl/index.html +++ b/modules/autoinstall/tpl/index.html @@ -25,5 +25,3 @@ --> - -
    diff --git a/modules/autoinstall/tpl/list.html b/modules/autoinstall/tpl/list.html index b34fc9423..3004245cd 100644 --- a/modules/autoinstall/tpl/list.html +++ b/modules/autoinstall/tpl/list.html @@ -45,6 +45,16 @@

    {$item->category} {$item->title}

    +

    + + package_voted/$item->package_voter*20)}%">{sprintf("%0.1f",$item->package_voted/$item->package_voter*2)}{sprintf($lang->rate, $item->package_start)} + {sprintf("%0.1f",$item->package_voted/$item->package_voter*2)}/{number_format($item->package_voter)} + + + 0 + 0/0 + +

    {$lang->installed} {$lang->install} @@ -90,6 +100,14 @@

    {$item->category} {$item->title}

    {cut_str($item->package_description,200)}

    + + package_voted/$item->package_voter*20)}%">{sprintf("%0.1f",$item->package_voted/$item->package_voter*2)}{sprintf($lang->rate, $item->package_start)} + {sprintf("%0.1f",$item->package_voted/$item->package_voter*2)}/{number_format($item->package_voter)} + + + 0 + 0/0 + {$lang->package_update}: | {$lang->package_downloaded_count}: {number_format($item->package_downloaded)} diff --git a/modules/comment/tpl/comment_list.html b/modules/comment/tpl/comment_list.html index 7104adeb5..40f8be128 100644 --- a/modules/comment/tpl/comment_list.html +++ b/modules/comment/tpl/comment_list.html @@ -199,5 +199,3 @@ jQuery(function($){ }); }); - -

    diff --git a/modules/comment/tpl/declared_list.html b/modules/comment/tpl/declared_list.html index 9c627d151..34aa58508 100644 --- a/modules/comment/tpl/declared_list.html +++ b/modules/comment/tpl/declared_list.html @@ -115,6 +115,4 @@ jQuery(function($){ } }).change(); }); - - -
    + \ No newline at end of file diff --git a/modules/document/tpl/declared_list.html b/modules/document/tpl/declared_list.html index 0019b45f5..b9e94aeb6 100644 --- a/modules/document/tpl/declared_list.html +++ b/modules/document/tpl/declared_list.html @@ -200,6 +200,4 @@ jQuery(function($){ } }); }); - - -
    + \ No newline at end of file diff --git a/modules/document/tpl/document_list.html b/modules/document/tpl/document_list.html index ea13dc025..d9eca400e 100644 --- a/modules/document/tpl/document_list.html +++ b/modules/document/tpl/document_list.html @@ -216,5 +216,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/editor/tpl/admin_index.html b/modules/editor/tpl/admin_index.html index 2cf340627..00d055ab5 100644 --- a/modules/editor/tpl/admin_index.html +++ b/modules/editor/tpl/admin_index.html @@ -213,4 +213,3 @@ jQuery(function($){ }); -
    diff --git a/modules/file/tpl/adminConfig.html b/modules/file/tpl/adminConfig.html index 6ae5cb121..1d4bd8782 100644 --- a/modules/file/tpl/adminConfig.html +++ b/modules/file/tpl/adminConfig.html @@ -56,5 +56,3 @@
    - -
    diff --git a/modules/file/tpl/file_list.html b/modules/file/tpl/file_list.html index 1f00e2e6e..a11f42b82 100644 --- a/modules/file/tpl/file_list.html +++ b/modules/file/tpl/file_list.html @@ -207,5 +207,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/importer/tpl/index.html b/modules/importer/tpl/index.html index ab917cb21..cac85a045 100644 --- a/modules/importer/tpl/index.html +++ b/modules/importer/tpl/index.html @@ -105,5 +105,3 @@ jQuery('a.modalAnchor') return false; }); - -
    diff --git a/modules/layout/tpl/installed_layout_list.html b/modules/layout/tpl/installed_layout_list.html index efbb71cd4..2916eb953 100644 --- a/modules/layout/tpl/installed_layout_list.html +++ b/modules/layout/tpl/installed_layout_list.html @@ -52,5 +52,3 @@ - -
    diff --git a/modules/layout/tpl/layout_all_instance_list.html b/modules/layout/tpl/layout_all_instance_list.html index a6782fc14..bcc8394e3 100644 --- a/modules/layout/tpl/layout_all_instance_list.html +++ b/modules/layout/tpl/layout_all_instance_list.html @@ -43,5 +43,3 @@ - -
    diff --git a/modules/layout/tpl/layout_edit.html b/modules/layout/tpl/layout_edit.html index c180bf573..86a0f5690 100644 --- a/modules/layout/tpl/layout_edit.html +++ b/modules/layout/tpl/layout_edit.html @@ -94,5 +94,3 @@ - -
    diff --git a/modules/layout/tpl/layout_instance_list.html b/modules/layout/tpl/layout_instance_list.html index b67cbdc8d..702ea4fca 100644 --- a/modules/layout/tpl/layout_instance_list.html +++ b/modules/layout/tpl/layout_instance_list.html @@ -105,5 +105,3 @@ xe.lang.confirm_delete = '{$lang->confirm_delete}'; - -
    diff --git a/modules/layout/tpl/layout_modify.html b/modules/layout/tpl/layout_modify.html index 71b925a05..279f8196a 100644 --- a/modules/layout/tpl/layout_modify.html +++ b/modules/layout/tpl/layout_modify.html @@ -1,5 +1,3 @@ {$content} - -
    diff --git a/modules/member/tpl/default_config.html b/modules/member/tpl/default_config.html index 595d52b6f..d04032437 100644 --- a/modules/member/tpl/default_config.html +++ b/modules/member/tpl/default_config.html @@ -80,5 +80,3 @@ - -
    diff --git a/modules/member/tpl/design_config.html b/modules/member/tpl/design_config.html index f1f37e83f..a656e75fb 100644 --- a/modules/member/tpl/design_config.html +++ b/modules/member/tpl/design_config.html @@ -50,5 +50,3 @@ - -
    diff --git a/modules/member/tpl/group_list.html b/modules/member/tpl/group_list.html index 410ca70c6..93e6305c7 100644 --- a/modules/member/tpl/group_list.html +++ b/modules/member/tpl/group_list.html @@ -103,5 +103,3 @@

    {$lang->add_group_image_mark}: {$lang->link_file_box}

    - -
    diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index 2d39c5305..0991f6adc 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -129,5 +129,3 @@ }); })(jQuery); - -
    diff --git a/modules/member/tpl/login_config.html b/modules/member/tpl/login_config.html index 7daba7170..4a7d811d4 100644 --- a/modules/member/tpl/login_config.html +++ b/modules/member/tpl/login_config.html @@ -62,5 +62,3 @@ jQuery(function($){ }).change(); }); - -
    diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index 59380a2ac..921a188b3 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -202,5 +202,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/member/tpl/signup_config.html b/modules/member/tpl/signup_config.html index d4da6731f..3694ba5b6 100644 --- a/modules/member/tpl/signup_config.html +++ b/modules/member/tpl/signup_config.html @@ -198,5 +198,3 @@ #userDefine{max-width:60%;margin-left:-30%} } - -
    diff --git a/modules/menu/tpl/sitemap.html b/modules/menu/tpl/sitemap.html index 1528c6204..f5fa8a25b 100644 --- a/modules/menu/tpl/sitemap.html +++ b/modules/menu/tpl/sitemap.html @@ -352,8 +352,6 @@ - - @@ -4122,6 +4120,3 @@ jQuery.extend({ }); //]]> - -
    -
    diff --git a/modules/module/tpl/adminFileBox.html b/modules/module/tpl/adminFileBox.html index ff209ea07..7173737a2 100644 --- a/modules/module/tpl/adminFileBox.html +++ b/modules/module/tpl/adminFileBox.html @@ -116,5 +116,3 @@ - -
    diff --git a/modules/module/tpl/category_list.html b/modules/module/tpl/category_list.html index 4a25830aa..91c15adf3 100644 --- a/modules/module/tpl/category_list.html +++ b/modules/module/tpl/category_list.html @@ -58,5 +58,3 @@ - -
    diff --git a/modules/module/tpl/category_update_form.html b/modules/module/tpl/category_update_form.html index deb204e85..a91f3ad73 100644 --- a/modules/module/tpl/category_update_form.html +++ b/modules/module/tpl/category_update_form.html @@ -20,4 +20,3 @@ -
    diff --git a/modules/module/tpl/module_list.html b/modules/module/tpl/module_list.html index fcd075303..bbb989d8d 100644 --- a/modules/module/tpl/module_list.html +++ b/modules/module/tpl/module_list.html @@ -59,6 +59,4 @@ jQuery(function($){ $('.dsTg>tbody>tr[data-type1]').prependTo('tbody'); $('.dsTg>tbody>tr[data-type2]').prependTo('tbody'); }); - - -
    + \ No newline at end of file diff --git a/modules/point/tpl/config.html b/modules/point/tpl/config.html index da251cb0e..b9a79cb68 100644 --- a/modules/point/tpl/config.html +++ b/modules/point/tpl/config.html @@ -190,6 +190,4 @@ jQuery(function($){ } }); }); - - -
    + \ No newline at end of file diff --git a/modules/point/tpl/member_list.html b/modules/point/tpl/member_list.html index 0228696fc..447944c6d 100644 --- a/modules/point/tpl/member_list.html +++ b/modules/point/tpl/member_list.html @@ -145,5 +145,3 @@ - -
    diff --git a/modules/point/tpl/module_config.html b/modules/point/tpl/module_config.html index 5f30be3f7..07ee02cba 100644 --- a/modules/point/tpl/module_config.html +++ b/modules/point/tpl/module_config.html @@ -37,5 +37,3 @@ - -
    diff --git a/modules/poll/tpl/poll_list.html b/modules/poll/tpl/poll_list.html index 91e8f4aae..b0aae9a12 100644 --- a/modules/poll/tpl/poll_list.html +++ b/modules/poll/tpl/poll_list.html @@ -124,5 +124,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/rss/tpl/rss_admin_index.html b/modules/rss/tpl/rss_admin_index.html index 4342492c6..9055e894e 100644 --- a/modules/rss/tpl/rss_admin_index.html +++ b/modules/rss/tpl/rss_admin_index.html @@ -122,5 +122,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/spamfilter/tpl/footer.html b/modules/spamfilter/tpl/footer.html index 30961915b..e69de29bb 100644 --- a/modules/spamfilter/tpl/footer.html +++ b/modules/spamfilter/tpl/footer.html @@ -1 +0,0 @@ -
    diff --git a/modules/trash/tpl/trash_list.html b/modules/trash/tpl/trash_list.html index 04b66db88..802f5b69e 100644 --- a/modules/trash/tpl/trash_list.html +++ b/modules/trash/tpl/trash_list.html @@ -165,5 +165,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/trash/tpl/trash_view.html b/modules/trash/tpl/trash_view.html index 64c29d652..b1292c1a9 100644 --- a/modules/trash/tpl/trash_view.html +++ b/modules/trash/tpl/trash_view.html @@ -75,4 +75,3 @@ -
    diff --git a/modules/widget/tpl/downloaded_widget_list.html b/modules/widget/tpl/downloaded_widget_list.html index 920ed0f10..d33afbe22 100644 --- a/modules/widget/tpl/downloaded_widget_list.html +++ b/modules/widget/tpl/downloaded_widget_list.html @@ -39,5 +39,3 @@ - -
    diff --git a/modules/widget/tpl/widget_generate_code.html b/modules/widget/tpl/widget_generate_code.html index c9e400ec9..044278e22 100644 --- a/modules/widget/tpl/widget_generate_code.html +++ b/modules/widget/tpl/widget_generate_code.html @@ -17,5 +17,3 @@

    - -

    From ff3600b63ce7d9a3d363df26a113bda62306eb2b Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 2 Feb 2016 21:15:31 +0900 Subject: [PATCH 006/189] Add default configuration and converter --- common/defaults/config.php | 100 ++++++++++ common/framework/config.php | 358 ++++++++++++++++++++++++++++++++++++ 2 files changed, 458 insertions(+) create mode 100644 common/framework/config.php diff --git a/common/defaults/config.php b/common/defaults/config.php index 20c3d7894..7550f7af4 100644 --- a/common/defaults/config.php +++ b/common/defaults/config.php @@ -5,3 +5,103 @@ * * Copyright (c) Rhymix Developers and Contributors */ +return array( + 'config_version' => '2.0', + 'db' => array( + 'master' => array( + 'type' => 'mysql', + 'host' => 'localhost', + 'port' => 3306, + 'user' => null, + 'pass' => null, + 'database' => null, + 'prefix' => null, + 'charset' => null, + 'engine' => null, + ), + ), + 'cache' => array(), + 'ftp' => array( + 'host' => 'localhost', + 'port' => 21, + 'path' => null, + 'user' => null, + 'pass' => null, + 'pasv' => true, + 'sftp' => false, + ), + 'crypto' => array( + 'encryption_key' => null, + 'authentication_key' => null, + 'session_key' => null, + ), + 'locale' => array( + 'default_lang' => 'ko', + 'enabled_lang' => array('ko'), + 'default_timezone' => 'Asia/Seoul', + 'internal_timezone' => 32400, + ), + 'url' => array( + 'default' => null, + 'http_port' => null, + 'https_port' => null, + 'ssl' => 'none', + ), + 'session' => array( + 'delay' => false, + 'use_db' => false, + 'domain' => null, + 'path' => null, + 'lifetime' => 0, + 'refresh' => 300, + ), + 'file' => array( + 'umask' => '022', + ), + 'mail' => array( + 'transport' => 'mail', + 'smtp_host' => null, + 'smtp_port' => null, + 'smtp_security' => 'none', + 'smtp_user' => null, + 'smtp_pass' => null, + 'api_domain' => null, + 'api_token' => null, + 'api_user' => null, + 'api_pass' => null, + ), + 'view' => array( + 'minify_scripts' => 'common', + 'concat_scripts' => 'none', + 'use_gzip' => false, + ), + 'admin' => array( + 'allow' => array(), + 'deny' => array(), + ), + 'lock' => array( + 'locked' => false, + 'title' => 'Maintenance', + 'message' => '', + 'allow' => array(), + ), + 'debug' => array( + 'enabled' => true, + 'log_errors' => true, + 'log_queries' => false, + 'log_slow_queries' => 1, + 'log_slow_triggers' => 1, + 'log_slow_widgets' => 1, + 'display_type' => 'comment', + 'display_to' => 'admin', + 'allow' => array(), + ), + 'embedfilter' => array( + 'iframe' => array(), + 'object' => array(), + ), + 'use_mobile_view' => true, + 'use_prepared_statements' => true, + 'use_rewrite' => true, + 'use_sso' => false, +); diff --git a/common/framework/config.php b/common/framework/config.php new file mode 100644 index 000000000..aad54dc90 --- /dev/null +++ b/common/framework/config.php @@ -0,0 +1,358 @@ +master_db)) + { + $db_info->master_db = array(); + $db_info->master_db['db_type'] = $db_info->db_type; + $db_info->master_db['db_hostname'] = $db_info->db_hostname; + $db_info->master_db['db_port'] = $db_info->db_port; + $db_info->master_db['db_userid'] = $db_info->db_userid; + $db_info->master_db['db_password'] = $db_info->db_password; + $db_info->master_db['db_database'] = $db_info->db_database; + $db_info->master_db['db_table_prefix'] = $db_info->db_table_prefix; + } + + $config['db']['master']['type'] = strtolower($db_info->master_db['db_type']); + $config['db']['master']['host'] = $db_info->master_db['db_hostname']; + $config['db']['master']['port'] = $db_info->master_db['db_port']; + $config['db']['master']['user'] = $db_info->master_db['db_userid']; + $config['db']['master']['pass'] = $db_info->master_db['db_password']; + $config['db']['master']['database'] = $db_info->master_db['db_database']; + $config['db']['master']['prefix'] = $db_info->master_db['db_table_prefix']; + + if (substr($config['db']['master']['prefix'], -1) !== '_') + { + $config['db']['master']['prefix'] .= '_'; + } + + $config['db']['master']['charset'] = $db_info->master_db['db_charset'] ?: 'utf8'; + + if (strpos($config['db']['master']['type'], 'innodb') !== false) + { + $config['db']['master']['type'] = str_replace('_innodb', '', $config['db']['master']['type']); + $config['db']['master']['engine'] = 'innodb'; + } + elseif (strpos($config['db']['master']['type'], 'mysql') !== false) + { + $config['db']['master']['engine'] = 'myisam'; + } + + if (isset($db_info->slave_db) && count($db_info->slave_db)) + { + foreach ($db_info->slave_db as $slave_id => $slave_db) + { + if ($slave_db !== $db_info->master_db) + { + $slave_id = 'slave' . $slave_id; + $config['db'][$slave_id]['type'] = strtolower($slave_db['db_type']); + $config['db'][$slave_id]['host'] = $slave_db['db_hostname']; + $config['db'][$slave_id]['port'] = $slave_db['db_type']; + $config['db'][$slave_id]['user'] = $slave_db['db_userid']; + $config['db'][$slave_id]['pass'] = $slave_db['db_password']; + $config['db'][$slave_id]['database'] = $slave_db['db_database']; + $config['db'][$slave_id]['prefix'] = $slave_db['db_table_prefix']; + + if (substr($config['db'][$slave_id]['prefix'], -1) !== '_') + { + $config['db'][$slave_id]['prefix'] .= '_'; + } + + $config['db'][$slave_id]['charset'] = $slave_db['db_charset'] ?: 'utf8'; + + if (strpos($config['db'][$slave_id]['type'], 'innodb') !== false) + { + $config['db'][$slave_id]['type'] = str_replace('_innodb', '', $config['db'][$slave_id]['type']); + $config['db'][$slave_id]['engine'] = 'innodb'; + } + elseif (strpos($config['db'][$slave_id]['type'], 'mysql') !== false) + { + $config['db'][$slave_id]['engine'] = 'myisam'; + } + } + } + } + + // Convert cache configuration. + if (isset($db_info->use_object_cache)) + { + $config['cache'][] = $db_info->use_object_cache; + } + + // Convert FTP configuration. + if (isset($ftp_info)) + { + $config['ftp']['host'] = $ftp_info->ftp_host; + $config['ftp']['port'] = $ftp_info->ftp_port; + $config['ftp']['path'] = $ftp_info->ftp_root_path; + $config['ftp']['user'] = $ftp_info->ftp_user; + $config['ftp']['pasv'] = $ftp_info->ftp_pasv; + $config['ftp']['sftp'] = $ftp_info->sftp === 'Y' ? true : false; + } + + // Create new crypto keys. + $config['crypto']['encryption_key'] = \Password::createSecureSalt(64, 'alnum'); + $config['crypto']['authentication_key'] = \Password::createSecureSalt(64, 'alnum'); + $config['crypto']['session_key'] = \Password::createSecureSalt(64, 'alnum'); + + // Convert language configuration. + if (isset($db_info->lang_type)) + { + $config['locale']['default_lang'] = str_replace('jp', 'ja', strtolower($db_info->lang_type)); + } + elseif (count($lang_selected)) + { + $config['locale']['default_lang'] = array_first($lang_selected); + } + $config['locale']['enabled_lang'] = array_values($lang_selected); + + // Convert timezone configuration. + $old_timezone = intval(get_time_zone_offset($db_info->time_zone ?: '+0900') / 3600); + switch ($old_timezone) + { + case 9: + $config['locale']['default_timezone'] = 'Asia/Seoul'; break; + case 0: + $config['locale']['default_timezone'] = 'Etc/UTC'; break; + default: + $config['locale']['default_timezone'] = 'Etc/GMT' . ($old_timezone > 0 ? '-' : '+') . abs($old_timezone); + } + $config['locale']['internal_timezone'] = intval(date('Z')); + + // Convert URL configuration. + $config['url']['default'] = $db_info->default_url ?: \RX_BASEURL; + $config['url']['http_port'] = $db_info->http_port ?: null; + $config['url']['https_port'] = $db_info->https_port ?: null; + $config['url']['ssl'] = $db_info->use_ssl ?: 'none'; + + // Convert session configuration. + $config['session']['delay'] = $db_info->delay_session === 'Y' ? true : false; + $config['session']['use_db'] = $db_info->use_db_session === 'Y' ? true : false; + + // Convert view configuration. + $config['view']['minify_scripts'] = $db_info->minify_scripts ?: 'common'; + $config['view']['use_gzip'] = (defined('__OB_GZHANDLER_ENABLE__') && constant('__OB_GZHANDLER_ENABLE__')); + + // Convert admin IP whitelist. + if (isset($db_info->admin_ip_list) && is_array($db_info->admin_ip_list) && count($db_info->admin_ip_list)) + { + $config['admin']['allow'] = array_values($db_info->admin_ip_list); + } + + // Convert sitelock configuration. + $config['lock']['locked'] = $db_info->use_sitelock === 'Y' ? true : false; + $config['lock']['title'] = strval($db_info->sitelock_title); + $config['lock']['message'] = strval($db_info->sitelock_message); + $config['lock']['allow'] = is_array($db_info->sitelock_whitelist) ? array_values($db_info->sitelock_whitelist) : array(); + + // Convert debug configuration. + $config['debug']['enabled'] = true; + $config['debug']['log_errors'] = true; + $config['debug']['log_queries'] = (\__DEBUG__ & 4) ? true : false; + $config['debug']['log_slow_queries'] = floatval(\__LOG_SLOW_QUERY__); + $config['debug']['log_slow_triggers'] = floatval(\__LOG_SLOW_TRIGGER__ * 1000); + $config['debug']['log_slow_widgets'] = floatval(\__LOG_SLOW_WIDGET__ * 1000); + + // Convert embed filter configuration. + if (is_array($db_info->embed_white_iframe)) + { + $whitelist = array_unique(array_map(function($item) { + return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; + }, $db_info->embed_white_iframe)); + natcasesort($whitelist); + $config['embedfilter']['iframe'] = $whitelist; + } + if (is_array($db_info->embed_white_object)) + { + $whitelist = array_unique(array_map(function($item) { + return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; + }, $db_info->embed_white_object)); + natcasesort($whitelist); + $config['embedfilter']['object'] = $whitelist; + } + + // Convert miscellaneous configuration. + $config['use_mobile_view'] = $db_info->use_mobile_view === 'Y' ? true : false; + $config['use_prepared_statements'] = $db_info->use_prepared_statements === 'Y' ? true : false; + $config['use_rewrite'] = $db_info->use_rewrite === 'Y' ? true : false; + $config['use_sso'] = $db_info->use_sso === 'Y' ? true : false; + + // Return the new configuration. + return $config; + } + + /** + * Save the current system configuration. + * + * @return bool + */ + public static function save() + { + if (!count(self::$_config)) + { + self::init(); + } + $buff = '\s+array\(\n/', "=> array(\n", $value); + $value = preg_replace('/array\(\s*\n\s*\)/', 'array()', $value); + $value = preg_replace_callback('/\n(\x20+)/', function($m) { + return "\n" . str_repeat("\t", intval(strlen($m[1]) / 2)); + }, $value); + $value = preg_replace('/\n(\t+)[0-9]+ => /', "\n\$1", $value); + return $value; + } + else + { + return var_export($value, true); + } + } +} From 0fba6ea22617b9ecbc6752a17e465ee5fb38370a Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 11:16:49 +0900 Subject: [PATCH 007/189] Miscellaneous fixes to new config handling --- common/framework/config.php | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/common/framework/config.php b/common/framework/config.php index aad54dc90..3b8a0b190 100644 --- a/common/framework/config.php +++ b/common/framework/config.php @@ -28,6 +28,17 @@ class Config self::$_config = self::convert(); self::save(); } + return self::$_config; + } + + /** + * Get all system configuration. + * + * @return array + */ + public static function getAll() + { + return self::$_config; } /** @@ -42,18 +53,15 @@ class Config { self::init(); } - $data = &self::$_config; + $data = self::$_config; $key = explode('.', $key); foreach ($key as $step) { - if (isset($data[$step])) - { - $data = &$data[$step]; - } - else + if ($key === '' || !isset($data[$step])) { return null; } + $data = $data[$step]; } return $data; } @@ -273,7 +281,15 @@ class Config $config['lock']['locked'] = $db_info->use_sitelock === 'Y' ? true : false; $config['lock']['title'] = strval($db_info->sitelock_title); $config['lock']['message'] = strval($db_info->sitelock_message); - $config['lock']['allow'] = is_array($db_info->sitelock_whitelist) ? array_values($db_info->sitelock_whitelist) : array(); + if (!is_array($db_info->sitelock_whitelist)) + { + $db_info->sitelock_whitelist = array_map('trim', explode(',', trim($db_info->sitelock_whitelist))); + } + if (!in_array('127.0.0.1', $db_info->sitelock_whitelist)) + { + $db_info->sitelock_whitelist[] = '127.0.0.1'; + } + $config['lock']['allow'] = array_values($db_info->sitelock_whitelist); // Convert debug configuration. $config['debug']['enabled'] = true; From 3460f63741fb8eec393053be6f60e087b35198f7 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 11:17:09 +0900 Subject: [PATCH 008/189] Initial implementation of new config use in Context class --- classes/context/Context.class.php | 263 ++++++++++++++---------------- 1 file changed, 120 insertions(+), 143 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index adbe0269a..efb76097b 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -9,7 +9,6 @@ */ class Context { - /** * Allow rewrite * @var bool TRUE: using rewrite mod, FALSE: otherwise @@ -209,7 +208,7 @@ class Context */ public function init() { - // fix missing HTTP_RAW_POST_DATA in PHP 5.6 and above + // Fix missing HTTP_RAW_POST_DATA in PHP 5.6 and above. if(!isset($GLOBALS['HTTP_RAW_POST_DATA']) && version_compare(PHP_VERSION, '5.6.0', '>=') === TRUE) { $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input"); @@ -220,47 +219,27 @@ class Context unset($GLOBALS['HTTP_RAW_POST_DATA']); } } - - // set context variables in $GLOBALS (backward compatibility) + + // Set global variables for backward compatibility. $GLOBALS['__Context__'] = $this; $GLOBALS['lang'] = &$this->lang; $this->_COOKIE = $_COOKIE; - - // 20140429 editor/image_link + + // Set information about the current request. + $this->setRequestMethod(); $this->_checkGlobalVars(); - - $this->setRequestMethod(''); - $this->_setXmlRpcArgument(); $this->_setJSONRequestArgument(); $this->_setRequestArgument(); $this->_setUploadedArgument(); - + + // Load system configuration. $this->loadDBInfo(); - if($this->db_info->use_sitelock == 'Y') + + // If the site is locked, display the locked page. + if(Rhymix\Framework\Config::get('lock.locked')) { - if(is_array($this->db_info->sitelock_whitelist)) $whitelist = $this->db_info->sitelock_whitelist; - - if(!IpFilter::filter($whitelist)) - { - $title = ($this->db_info->sitelock_title) ? $this->db_info->sitelock_title : 'Maintenance in progress...'; - $message = $this->db_info->sitelock_message; - - define('_XE_SITELOCK_', TRUE); - define('_XE_SITELOCK_TITLE_', $title); - define('_XE_SITELOCK_MESSAGE_', $message); - - header("HTTP/1.1 403 Forbidden"); - if(FileHandler::exists(_XE_PATH_ . 'common/tpl/sitelock.user.html')) - { - include _XE_PATH_ . 'common/tpl/sitelock.user.html'; - } - else - { - include _XE_PATH_ . 'common/tpl/sitelock.html'; - } - exit; - } + self::enforceSiteLock(); } // If XE is installed, get virtual site information @@ -531,79 +510,62 @@ class Context */ public static function loadDBInfo() { - if(!self::isInstalled()) + // Load new configuration format. + $config = Rhymix\Framework\Config::init(); + if(!count($config)) { return; } - - $config_file = self::getConfigFile(); - if(is_readable($config_file)) - { - include($config_file); - } - - // If master_db information does not exist, the config file needs to be updated - if(!isset($db_info->master_db)) - { - $db_info->master_db = array(); - $db_info->master_db["db_type"] = $db_info->db_type; - unset($db_info->db_type); - $db_info->master_db["db_port"] = $db_info->db_port; - unset($db_info->db_port); - $db_info->master_db["db_hostname"] = $db_info->db_hostname; - unset($db_info->db_hostname); - $db_info->master_db["db_password"] = $db_info->db_password; - unset($db_info->db_password); - $db_info->master_db["db_database"] = $db_info->db_database; - unset($db_info->db_database); - $db_info->master_db["db_userid"] = $db_info->db_userid; - unset($db_info->db_userid); - $db_info->master_db["db_table_prefix"] = $db_info->db_table_prefix; - unset($db_info->db_table_prefix); - - if(isset($db_info->master_db["db_table_prefix"]) && substr_compare($db_info->master_db["db_table_prefix"], '_', -1) !== 0) - { - $db_info->master_db["db_table_prefix"] .= '_'; - } - - $db_info->slave_db = array($db_info->master_db); - self::setDBInfo($db_info); - - $oInstallController = getController('install'); - $oInstallController->makeConfigFile(); - } - - if(!$db_info->use_prepared_statements) - { - $db_info->use_prepared_statements = 'Y'; - } - - if(!$db_info->time_zone) - $db_info->time_zone = date('O'); - $GLOBALS['_time_zone'] = $db_info->time_zone; - $GLOBALS['_time_zone_offset'] = get_time_zone_offset($db_info->time_zone); - - if($db_info->qmail_compatibility != 'Y') - $db_info->qmail_compatibility = 'N'; - $GLOBALS['_qmail_compatibility'] = $db_info->qmail_compatibility; - - if(!$db_info->use_db_session) - $db_info->use_db_session = 'N'; - if(!$db_info->use_ssl) - $db_info->use_ssl = 'none'; + + // Copy to old format for backward compatibility. + $db_info = new stdClass; + $db_info->master_db = array( + 'db_type' => $config['db']['master']['type'] . ($config['db']['master']['engine'] === 'innodb' ? '_innodb' : ''), + 'db_hostname' => $config['db']['master']['host'], + 'db_port' => $config['db']['master']['port'], + 'db_userid' => $config['db']['master']['user'], + 'db_password' => $config['db']['master']['pass'], + 'db_database' => $config['db']['master']['database'], + 'db_table_prefix' => $config['db']['master']['prefix'], + 'db_charset' => $config['db']['master']['charset'], + ); + $db_info->slave_db = array($db_info->master_db); + $db_info->use_object_cache = count($config['cache']) ? array_first($config['cache']) : null; + $db_info->ftp_info = new stdClass; + $db_info->ftp_info->ftp_host = $config['ftp']['host']; + $db_info->ftp_info->ftp_port = $config['ftp']['port']; + $db_info->ftp_info->ftp_user = $config['ftp']['user']; + $db_info->ftp_info->ftp_pasv = $config['ftp']['pasv'] ? 'Y' : 'N'; + $db_info->ftp_info->ftp_root_path = $config['ftp']['path']; + $db_info->ftp_info->sftp = $config['ftp']['sftp'] ? 'Y' : 'N'; + $db_info->default_url = $config['url']['default']; + $db_info->http_port = $config['url']['http_port']; + $db_info->https_port = $config['url']['https_port']; + $db_info->use_ssl = $config['url']['ssl']; + self::set('_http_port', $db_info->http_port ?: null); + self::set('_https_port', $db_info->https_port ?: null); self::set('_use_ssl', $db_info->use_ssl); - self::set('_http_port', ($db_info->http_port) ? $db_info->http_port : NULL); - self::set('_https_port', ($db_info->https_port) ? $db_info->https_port : NULL); - - if(!$db_info->sitelock_whitelist) { - $db_info->sitelock_whitelist = '127.0.0.1'; - } - - if(is_string($db_info->sitelock_whitelist)) { - $db_info->sitelock_whitelist = explode(',', $db_info->sitelock_whitelist); - } - - self::setDBInfo($db_info); + $db_info->lang_type = $config['locale']['default_lang']; + $db_info->time_zone = $config['locale']['internal_timezone']; + $db_info->time_zone = sprintf('%s%02d%02d', $db_info->time_zone >= 0 ? '+' : '-', abs($db_info->time_zone) / 3600, (abs($db_info->time_zone) % 3600 / 60)); + $GLOBALS['_time_zone'] = $db_info->time_zone; + $GLOBALS['_time_zone_offset'] = $config['locale']['internal_timezone']; + $GLOBALS['_qmail_compatibility'] = 'N'; + $db_info->delay_session = $config['session']['delay'] ? 'Y' : 'N'; + $db_info->use_db_session = $config['session']['use_db'] ? 'Y' : 'N'; + $db_info->minify_scripts = $config['view']['minify_scripts'] ? 'Y' : 'N'; + $db_info->admin_ip_list = count($config['admin']['allow']) ? $config['admin']['allow'] : null; + $db_info->use_sitelock = $config['lock']['locked'] ? 'Y' : 'N'; + $db_info->sitelock_title = $config['lock']['title']; + $db_info->sitelock_message = $config['lock']['message']; + $db_info->sitelock_whitelist = count($config['lock']['allow']) ? $config['lock']['allow'] : array('127.0.0.1'); + $db_info->embed_white_iframe = $config['embedfilter']['iframe']; + $db_info->embed_white_object = $config['embedfilter']['object']; + $db_info->use_mobile_view = $config['use_mobile_view'] ? 'Y' : 'N'; + $db_info->use_prepared_statements = $config['use_prepared_statements'] ? 'Y' : 'N'; + $db_info->use_rewrite = $config['use_rewrite'] ? 'Y' : 'N'; + $db_info->use_sso = $config['use_sso'] ? 'Y' : 'N'; + self::$_instance->db_info = $db_info; } /** @@ -644,7 +606,7 @@ class Context */ public static function getSslStatus() { - return self::getDBInfo()->use_ssl; + return Rhymix\Framework\Config::get('url.ssl'); } /** @@ -654,7 +616,7 @@ class Context */ public static function getDefaultUrl() { - return self::getDBInfo()->default_url; + return Rhymix\Framework\Config::get('url.default'); } /** @@ -674,39 +636,14 @@ class Context */ public static function loadLangSelected() { - static $lang_selected = null; - if(!$lang_selected) + static $lang_selected = array(); + if(!count($lang_selected)) { - $selected_lang_file = _XE_PATH_ . 'files/config/lang_selected.info'; - if(!FileHandler::hasContent($selected_lang_file)) + $supported = Rhymix\Framework\Lang::getSupportedList(); + $selected = Rhymix\Framework\Config::get('locale.enabled_lang'); + foreach ($selected as $lang) { - $old_selected_lang_file = _XE_PATH_ . 'files/cache/lang_selected.info'; - FileHandler::moveFile($old_selected_lang_file, $selected_lang_file); - } - - if(!FileHandler::hasContent($selected_lang_file)) - { - $lang_selected = Rhymix\Framework\Lang::getSupportedList(); - $buff = ''; - foreach($lang_selected as $key => $val) - { - $buff .= "$key,$val\n"; - } - FileHandler::writeFile($selected_lang_file, $buff); - } - else - { - $langs = file($selected_lang_file); - foreach($langs as $val) - { - list($lang_prefix, $lang_text) = explode(',', $val); - if($lang_prefix === 'jp') - { - $lang_prefix = 'ja'; - } - $lang_text = trim($lang_text); - $lang_selected[$lang_prefix] = $lang_text; - } + $lang_selected[$lang] = $supported[$lang]; } } return $lang_selected; @@ -814,7 +751,8 @@ class Context */ public static function isFTPRegisted() { - return file_exists(self::getFTPConfigFile()); + $ftp_info = self::$_instance->db_info->ftp_info; + return ($ftp_info->ftp_user && $ftp_info->ftp_root_path); } /** @@ -824,11 +762,11 @@ class Context */ public static function getFTPInfo() { - if(!self::isFTPRegisted()) + $ftp_info = self::$_instance->db_info->ftp_info; + if (!$ftp_info->ftp_user || !$ftp_info->ftp_root_path) { return null; } - include(self::getFTPConfigFile()); return $ftp_info; } @@ -961,8 +899,14 @@ class Context */ public static function getLang($code) { - $lang = self::$_instance->lang; - return isset($lang->{$code}) ? $lang->{$code} : $code; + if (self::$_instance->lang) + { + return self::$_instance->lang->get($code); + } + else + { + return $code; + } } /** @@ -974,7 +918,10 @@ class Context */ public static function setLang($code, $val) { - self::$_instance->lang->{$code} = $val; + if (self::$_instance->lang) + { + self::$_instance->lang->set($code, $val); + } } /** @@ -1472,6 +1419,36 @@ class Context } } + /** + * Enforce site lock. + */ + private static function enforceSiteLock() + { + $allowed_list = Rhymix\Framework\Config::get('lock.allow'); + foreach ($allowed_list as $allowed_ip) + { + if (Rhymix\Framework\IpFilter::inRange(RX_CLIENT_IP, $allowed_ip)) + { + return; + } + } + + define('_XE_SITELOCK_', TRUE); + define('_XE_SITELOCK_TITLE_', Rhymix\Framework\Config::get('lock.title')); + define('_XE_SITELOCK_MESSAGE_', Rhymix\Framework\Config::get('lock.message')); + + header("HTTP/1.1 403 Forbidden"); + if(FileHandler::exists(RX_BASEDIR . 'common/tpl/sitelock.user.html')) + { + include RX_BASEDIR . 'common/tpl/sitelock.user.html'; + } + else + { + include RX_BASEDIR . 'common/tpl/sitelock.html'; + } + exit; + } + /** * Return request method * @return string Request method type. (Optional - GET|POST|XMLRPC|JSON) @@ -2462,7 +2439,7 @@ class Context */ public static function getConfigFile() { - return _XE_PATH_ . 'files/config/db.config.php'; + return RX_BASEDIR . 'files/config/config.php'; } /** @@ -2472,7 +2449,7 @@ class Context */ public static function getFTPConfigFile() { - return _XE_PATH_ . 'files/config/ftp.config.php'; + return RX_BASEDIR . 'files/config/config.php'; } /** From 80344155039620d6cc51bf8c9c2f3303f1e6b0a6 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 11:26:59 +0900 Subject: [PATCH 009/189] Miscellaneous fixes to Context::init() routine --- classes/context/Context.class.php | 65 +++++++++++-------------------- 1 file changed, 22 insertions(+), 43 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index efb76097b..67d3817d3 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -242,49 +242,33 @@ class Context self::enforceSiteLock(); } - // If XE is installed, get virtual site information + // If Rhymix is installed, get virtual site information. if(self::isInstalled()) { $oModuleModel = getModel('module'); - $site_module_info = $oModuleModel->getDefaultMid(); - - if(!isset($site_module_info)) - { - $site_module_info = new stdClass; - } - + $site_module_info = $oModuleModel->getDefaultMid() ?: new stdClass; + // if site_srl of site_module_info is 0 (default site), compare the domain to default_url of db_config if($site_module_info->site_srl == 0 && $site_module_info->domain != $this->db_info->default_url) { $site_module_info->domain = $this->db_info->default_url; } - + self::set('site_module_info', $site_module_info); if($site_module_info->site_srl && isSiteID($site_module_info->domain)) { self::set('vid', $site_module_info->domain, TRUE); } - - if(!isset($this->db_info)) - { - $this->db_info = new stdClass; - } - - $this->db_info->lang_type = $site_module_info->default_language; - if(!$this->db_info->lang_type) - { - $this->db_info->lang_type = 'ko'; - } - if(!$this->db_info->use_db_session) - { - $this->db_info->use_db_session = 'N'; - } + } + else + { + $site_module_info = new stdClass; } - // Load Language File - $lang_supported = self::loadLangSelected(); - - // Retrieve language type set in user's cookie + // Load language support. + $enabled_langs = self::loadLangSelected(); + self::set('lang_supported', $enabled_langs); + if($this->lang_type = self::get('l')) { if($_COOKIE['lang_type'] != $this->lang_type) @@ -296,31 +280,26 @@ class Context { $this->lang_type = $_COOKIE['lang_type']; } - - // If it's not exists, follow default language type set in db_info - if(!$this->lang_type) + elseif($site_module_info->default_language) + { + $this->lang_type = $this->db_info->lang_type = $site_module_info->default_language; + } + else { $this->lang_type = $this->db_info->lang_type; } - - // if still lang_type has not been set or has not-supported type , set as Korean. - if(!$this->lang_type) + + if(!$this->lang_type || !in_array($this->lang_type, $enabled_langs)) { $this->lang_type = 'ko'; } - if(is_array($lang_supported) && !isset($lang_supported[$this->lang_type])) - { - $this->lang_type = 'ko'; - } - - self::set('lang_supported', $lang_supported); + self::setLangType($this->lang_type); - - // Load languages + $this->lang = Rhymix\Framework\Lang::getInstance($this->lang_type); $this->lang->loadDirectory(RX_BASEDIR . 'common/lang', 'common'); $this->lang->loadDirectory(RX_BASEDIR . 'modules/module/lang', 'module'); - + // set session handler if(self::isInstalled() && $this->db_info->use_db_session == 'Y') { From 28af7b95cfbe7929b6c75c78168e3f0d2fc64c87 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 11:31:33 +0900 Subject: [PATCH 010/189] Do not attempt to save new config if loading failed --- common/framework/config.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/framework/config.php b/common/framework/config.php index 3b8a0b190..227b4a055 100644 --- a/common/framework/config.php +++ b/common/framework/config.php @@ -25,8 +25,10 @@ class Config } else { - self::$_config = self::convert(); - self::save(); + if (self::$_config = self::convert()) + { + self::save(); + } } return self::$_config; } From 0b1fa79f43e3f783bf0c88a719d10946d68b0903 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 15:39:58 +0900 Subject: [PATCH 011/189] Update installer to use new config format --- .gitignore | 3 +- classes/context/Context.class.php | 20 +- classes/module/ModuleHandler.class.php | 19 +- common/framework/config.php | 20 +- modules/admin/tpl/index.html | 2 +- modules/install/conf/module.xml | 12 +- modules/install/install.controller.php | 398 +++++++----------- modules/install/install.view.php | 191 +++------ modules/install/ruleset/install.xml | 1 - modules/install/script/ko.install.php | 4 +- modules/install/tpl/check_env.html | 4 +- .../tpl/{select_db.html => db_config.html} | 26 +- modules/install/tpl/license_agreement.html | 4 +- .../{admin_form.html => other_config.html} | 3 +- modules/install/tpl/progress_menu.html | 4 +- 15 files changed, 287 insertions(+), 424 deletions(-) rename modules/install/tpl/{select_db.html => db_config.html} (67%) rename modules/install/tpl/{admin_form.html => other_config.html} (95%) diff --git a/.gitignore b/.gitignore index 2917e66cb..1ab6c7b20 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ .DS_Store Thumbs.db -config.user.inc.php +/config/config.user.inc.php +/config/install.config.php /files/ /build/ /libs/ diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 67d3817d3..b11f9f593 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -487,11 +487,14 @@ class Context * * @return void */ - public static function loadDBInfo() + public static function loadDBInfo($config = null) { // Load new configuration format. - $config = Rhymix\Framework\Config::init(); - if(!count($config)) + if ($config === null) + { + $config = Rhymix\Framework\Config::init(); + } + if (!count($config)) { return; } @@ -620,9 +623,16 @@ class Context { $supported = Rhymix\Framework\Lang::getSupportedList(); $selected = Rhymix\Framework\Config::get('locale.enabled_lang'); - foreach ($selected as $lang) + if ($selected) { - $lang_selected[$lang] = $supported[$lang]; + foreach ($selected as $lang) + { + $lang_selected[$lang] = $supported[$lang]; + } + } + else + { + $lang_selected = $supported; } } return $lang_selected; diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 9e3c7807c..dfff58125 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -132,14 +132,21 @@ class ModuleHandler extends Handler { continue; } - + $urlInfo = parse_url($url); $host = $urlInfo['host']; - - $dbInfo = Context::getDBInfo(); - $defaultUrlInfo = parse_url($dbInfo->default_url); - $defaultHost = $defaultUrlInfo['host']; - + + $defaultUrl = Context::getDBInfo()->default_url; + if($defaultUrl) + { + $defaultUrlInfo = parse_url($defaultUrl); + $defaultHost = $defaultUrlInfo['host']; + } + else + { + $defaultHost = $_SERVER['HTTP_HOST']; + } + if($host && ($host != $defaultHost && $host != $site_module_info->domain)) { throw new Exception('msg_default_url_is_null'); diff --git a/common/framework/config.php b/common/framework/config.php index 227b4a055..414545d10 100644 --- a/common/framework/config.php +++ b/common/framework/config.php @@ -43,6 +43,16 @@ class Config return self::$_config; } + /** + * Get default system configuration. + * + * @return array + */ + public static function getDefaults() + { + return (include RX_BASEDIR . 'common/defaults/config.php'); + } + /** * Get a system configuration value. * @@ -332,15 +342,13 @@ class Config /** * Save the current system configuration. * + * @param array $config (optional) * @return bool */ - public static function save() + public static function save($config = null) { - if (!count(self::$_config)) - { - self::init(); - } - $buff = ' - + diff --git a/modules/install/conf/module.xml b/modules/install/conf/module.xml index d99d2cf41..786106893 100644 --- a/modules/install/conf/module.xml +++ b/modules/install/conf/module.xml @@ -3,15 +3,13 @@ - - + - - - - + + + - + diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index 771ce9dab..7ddfa5e92 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -7,8 +7,6 @@ */ class installController extends install { - var $db_tmp_config_file = ''; - var $etc_tmp_config_file = ''; var $flagLicenseAgreement = './files/env/license_agreement'; /** @@ -16,12 +14,12 @@ class installController extends install */ function init() { - // Error occurs if already installed - if(Context::isInstalled()) + // Stop if already installed. + if (Context::isInstalled()) { return new Object(-1, 'msg_already_installed'); } - + $this->db_tmp_config_file = _XE_PATH_.'files/config/tmpDB.config.php'; $this->etc_tmp_config_file = _XE_PATH_.'files/config/tmpEtc.config.php'; } @@ -29,30 +27,37 @@ class installController extends install /** * @brief division install step... DB Config temp file create */ - function procDBSetting() + function procDBConfig() { - // Get DB-related variables - $con_string = Context::gets('db_type','db_port','db_hostname','db_userid','db_password','db_database','db_table_prefix'); - $con_string->db_table_prefix = rtrim($con_string->db_table_prefix, '_'); - + // Get DB config variables. + $config = Context::gets('db_type', 'db_host', 'db_port', 'db_user', 'db_pass', 'db_database', 'db_prefix'); + + // Create a temporary setting object. $db_info = new stdClass(); - $db_info->master_db = get_object_vars($con_string); + $db_info->master_db = array(); + $db_info->master_db['db_type'] = $config->db_type; + $db_info->master_db['db_hostname'] = $config->db_host; + $db_info->master_db['db_port'] = $config->db_port; + $db_info->master_db['db_userid'] = $config->db_user; + $db_info->master_db['db_password'] = $config->db_pass; + $db_info->master_db['db_database'] = $config->db_database; + $db_info->master_db['db_table_prefix'] = $config->db_prefix; $db_info->slave_db = array($db_info->master_db); $db_info->default_url = Context::getRequestUri(); $db_info->lang_type = Context::getLangType(); $db_info->use_mobile_view = 'Y'; - - // Set DB type and information Context::setDBInfo($db_info); - - // Check if available to connect to the DB - $oDB = &DB::getInstance(); + + // Check connection to the DB. + $oDB = DB::getInstance(); $output = $oDB->getError(); - if(!$output->toBool()) return $output; - if(!$oDB->isConnected()) return $oDB->getError(); - - // Check if MySQL server supports InnoDB - if(stripos($con_string->db_type, 'innodb') !== false) + if (!$output->toBool() || !$oDB->isConnected()) + { + return $output; + } + + // Check if MySQL server supports InnoDB. + if(stripos($config->db_type, 'innodb') !== false) { $innodb_supported = false; $show_engines = $oDB->_fetch($oDB->_query('SHOW ENGINES')); @@ -63,100 +68,144 @@ class installController extends install $innodb_supported = true; } } - - // If server does not support InnoDB, fall back to default storage engine (usually MyISAM) + + // If server does not support InnoDB, fall back to default storage engine (usually MyISAM). if(!$innodb_supported) { - $con_string->db_type = str_ireplace('_innodb', '', $con_string->db_type); - $db_info->master_db['db_type'] = $con_string->db_type; - $db_info->slave_db[0]['db_type'] = $con_string->db_type; - Context::set('db_type', $con_string->db_type); - Context::setDBInfo($db_info); + $config->db_type = str_ireplace('_innodb', '', $config->db_type); } } - - // Create a db temp config file - if(!$this->makeDBConfigFile()) return new Object(-1, 'msg_install_failed'); - - if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) + + // Check if MySQL server supports utf8mb4. + if(stripos($config->db_type, 'mysql') !== false) { - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'act', 'dispInstallManagerForm'); - header('location:'.$returnUrl); - return; + $oDB->charset = $oDB->getBestSupportedCharset(); + $config->db_charset = $oDB->charset; + } + + // Save DB config in session. + $_SESSION['db_config'] = $config; + + // Continue the installation. + if(!in_array(Context::getRequestMethod(), array('XMLRPC','JSON'))) + { + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'act', 'dispInstallOtherConfig'); + $this->setRedirectUrl($returnUrl); } } /** * @brief Install with received information */ - function procInstall() + function procInstall($install_config = null) { // Check if it is already installed - if(Context::isInstalled()) + if (Context::isInstalled()) { return new Object(-1, 'msg_already_installed'); } - - // Save rewrite and time zone settings - if(!Context::get('install_config')) + + // Get install parameters. + $config = Rhymix\Framework\Config::getDefaults(); + if ($install_config) { - $config_info = Context::gets('use_rewrite','time_zone', 'use_ssl'); - if($config_info->use_rewrite!='Y') $config_info->use_rewrite = 'N'; - if(!$this->makeEtcConfigFile($config_info)) - { - return new Object(-1, 'msg_install_failed'); - } + $install_config = (array)$install_config; + $config['db']['master']['type'] = str_replace('_innodb', '', $install_config['db_type']); + $config['db']['master']['host'] = $install_config['db_hostname']; + $config['db']['master']['port'] = $install_config['db_port']; + $config['db']['master']['user'] = $install_config['db_userid']; + $config['db']['master']['pass'] = $install_config['db_password']; + $config['db']['master']['database'] = $install_config['db_database']; + $config['db']['master']['prefix'] = $install_config['db_table_prefix']; + $config['db']['master']['charset'] = $install_config['db_charset']; + $config['db']['master']['engine'] = strpos($install_config['db_type'], 'innodb') !== false ? 'innodb' : (strpos($install_config['db_type'], 'mysql') !== false ? 'myisam' : null); + $config['use_rewrite'] = $install_config['use_rewrite'] === 'Y' ? true : false; + $config['url']['ssl'] = $install_config['use_ssl'] ?: 'none'; + $time_zone = $install_config['time_zone']; + $user_info = new stdClass; + $user_info->email_address = $install_config['email_address']; + $user_info->password = $install_config['password']; + $user_info->nick_name = $install_config['nick_name']; + $user_info->user_id = $install_config['user_id']; } - - // Assign a temporary administrator when installing - $logged_info = new stdClass(); - $logged_info->is_admin = 'Y'; - Context::set('logged_info', $logged_info); - - // check install config - if(Context::get('install_config')) - { - $db_info = $this->_makeDbInfoByInstallConfig(); - } - // install by default XE UI else { - if(FileHandler::exists($this->db_tmp_config_file)) include $this->db_tmp_config_file; - if(FileHandler::exists($this->etc_tmp_config_file)) include $this->etc_tmp_config_file; + $config['db']['master']['type'] = str_replace('_innodb', '', $_SESSION['db_config']->db_type); + $config['db']['master']['host'] = $_SESSION['db_config']->db_host; + $config['db']['master']['port'] = $_SESSION['db_config']->db_port; + $config['db']['master']['user'] = $_SESSION['db_config']->db_user; + $config['db']['master']['pass'] = $_SESSION['db_config']->db_pass; + $config['db']['master']['database'] = $_SESSION['db_config']->db_database; + $config['db']['master']['prefix'] = $_SESSION['db_config']->db_prefix; + $config['db']['master']['charset'] = $_SESSION['db_config']->db_charset; + $config['db']['master']['engine'] = strpos($_SESSION['db_config']->db_type, 'innodb') !== false ? 'innodb' : (strpos($_SESSION['db_config']->db_type, 'mysql') !== false ? 'myisam' : null); + $config['use_rewrite'] = $_SESSION['use_rewrite'] === 'Y' ? true : false; + $config['url']['ssl'] = Context::get('use_ssl') ?: 'none'; + $time_zone = Context::get('time_zone'); + $user_info = Context::gets('email_address', 'password', 'nick_name', 'user_id'); } - - // Set DB type and information - Context::setDBInfo($db_info); - // Create DB Instance - $oDB = &DB::getInstance(); - // Check if available to connect to the DB - if(!$oDB->isConnected()) return $oDB->getError(); - - // Check DB charset if using MySQL - if(stripos($db_info->master_db['db_type'], 'mysql') !== false && !isset($db_info->master_db['db_charset'])) + + // Fix the database table prefix. + $config['db']['master']['prefix'] = rtrim($config['db']['master']['prefix'], '_'); + if ($config['db']['master']['prefix'] !== '') { - $oDB->charset = $oDB->getBestSupportedCharset(); - $db_info->master_db['db_charset'] = $oDB->charset; - $db_info->slave_db[0]['db_charset'] = $oDB->charset; - Context::setDBInfo($db_info); + $config['db']['master']['prefix'] .= '_'; } - - // Install all the modules - try { + + // Set the default language. + $config['locale']['default_lang'] = Context::getLangType(); + $config['locale']['enabled_lang'] = array($config['locale']['default_lang']); + + // Set the internal and default time zones. + $user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600); + switch ($user_timezone) + { + case 9: + $config['locale']['default_timezone'] = 'Asia/Seoul'; break; + case 0: + $config['locale']['default_timezone'] = 'Etc/UTC'; break; + default: + $config['locale']['default_timezone'] = 'Etc/GMT' . ($user_timezone > 0 ? '-' : '+') . abs($user_timezone); + } + $config['locale']['internal_timezone'] = intval(date('Z')); + + // Set the default URL. + $config['url']['default'] = Context::getRequestUri(); + + // Load the new configuration. + Context::loadDBInfo($config); + + // Check DB. + $oDB = DB::getInstance(); + if (!$oDB->isConnected()) + { + return $oDB->getError(); + } + + // Assign a temporary administrator while installing. + foreach ($user_info as $key => $val) + { + Context::set($key, $val, true); + } + $user_info->is_admin = 'Y'; + Context::set('logged_info', $user_info); + + // Install all the modules. + try + { $oDB->begin(); $this->installDownloadedModule(); $oDB->commit(); - } catch(Exception $e) { + } + catch(Exception $e) + { $oDB->rollback(); return new Object(-1, $e->getMessage()); } - - // Create a config file - if(!$this->makeConfigFile()) return new Object(-1, 'msg_install_failed'); - - // load script + + // Execute the install script. $scripts = FileHandler::readDir(_XE_PATH_ . 'modules/install/script', '/(\.php)$/'); - if(count($scripts)>0) + if(count($scripts)) { sort($scripts); foreach($scripts as $script) @@ -165,48 +214,23 @@ class installController extends install $output = include($script_path . $script); } } - - // save selected lang info - $oInstallAdminController = getAdminController('install'); - $oInstallAdminController->saveLangSelected(array(Context::getLangType())); - - // Display a message that installation is completed - $this->setMessage('msg_install_completed'); - + + // Save the new configuration. + Rhymix\Framework\Config::save($config); + + // Unset temporary session variables. unset($_SESSION['use_rewrite']); - + unset($_SESSION['db_config']); + + // Redirect to the home page. + $this->setMessage('msg_install_completed'); if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON'))) { $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl(''); - header('location:'.$returnUrl); - return new Object(); + $this->setRedirectUrl($returnUrl); } - } - - /** - * @brief Make DB Information by Install Config - */ - function _makeDbInfoByInstallConfig() - { - $db_info = new stdClass(); - $db_info->master_db = array( - 'db_type' => Context::get('db_type'), - 'db_port' => Context::get('db_port'), - 'db_hostname' => Context::get('db_hostname'), - 'db_userid' => Context::get('db_userid'), - 'db_password' => Context::get('db_password'), - 'db_database' => Context::get('db_database'), - 'db_table_prefix' => Context::get('db_table_prefix'), - 'db_charset' => Context::get('db_charset'), - ); - $db_info->slave_db = array($db_info->master_db); - $db_info->default_url = Context::getRequestUri(); - $db_info->lang_type = Context::get('lang_type') ? Context::get('lang_type') : Context::getLangType(); - Context::setLangType($db_info->lang_type); - $db_info->use_rewrite = Context::get('use_rewrite'); - $db_info->time_zone = Context::get('time_zone'); - - return $db_info; + + return new Object(); } /** @@ -436,7 +460,7 @@ class installController extends install /** * @brief License agreement */ - function procInstallLicenseAggrement() + function procInstallLicenseAgreement() { $vars = Context::getRequestVars(); @@ -575,134 +599,6 @@ class installController extends install if(method_exists($oModule, 'moduleInstall')) $oModule->moduleInstall(); return new Object(); } - - function _getDBConfigFileContents($db_info) - { - if(substr($db_info->master_db['db_table_prefix'], -1) != '_') - { - $db_info->master_db['db_table_prefix'] .= '_'; - } - - foreach($db_info->slave_db as &$slave) - { - if(substr($slave['db_table_prefix'], -1) != '_') - { - $slave['db_table_prefix'] .= '_'; - } - } - - $buff = array(); - $buff[] = 'db_tmp_config_file; - - $db_info = Context::getDBInfo(); - if(!$db_info) return; - - $buff = $this->_getDBConfigFileContents($db_info); - - FileHandler::writeFile($db_tmp_config_file, $buff); - - if(@file_exists($db_tmp_config_file)) return true; - return false; - } - - /** - * @brief Create etc config file - * Create the config file when all settings are completed - */ - function makeEtcConfigFile($config_info) - { - $etc_tmp_config_file = $this->etc_tmp_config_file; - - $buff = ' $val) - { - $buff .= sprintf("\$db_info->%s = '%s';\n", $key, str_replace("'","\\'",$val)); - } - - FileHandler::writeFile($etc_tmp_config_file, $buff); - - if(@file_exists($etc_tmp_config_file)) return true; - return false; - } - - /** - * @brief Create config file - * Create the config file when all settings are completed - */ - function makeConfigFile() - { - try { - $config_file = Context::getConfigFile(); - //if(file_exists($config_file)) return; - - $db_info = Context::getDBInfo(); - if(!$db_info) return; - - $buff = $this->_getDBConfigFileContents($db_info); - - FileHandler::writeFile($config_file, $buff); - - if(@file_exists($config_file)) - { - FileHandler::removeFile($this->db_tmp_config_file); - FileHandler::removeFile($this->etc_tmp_config_file); - return true; - } - return false; - } catch (Exception $e) { - return false; - } - } - - function installByConfig($install_config_file) - { - include $install_config_file; - if(!is_array($auto_config)) return false; - - $auto_config['module'] = 'install'; - $auto_config['act'] = 'procInstall'; - - $fstr = "<%s>\r\n"; - $fheader = "POST %s HTTP/1.1\r\nHost: %s\r\nContent-Type: application/xml\r\nContent-Length: %s\r\n\r\n%s\r\n"; - $body = "\r\n\r\n\r\n"; - foreach($auto_config as $k => $v) - { - if(!in_array($k,array('host','port','path'))) $body .= sprintf($fstr,$k,$v,$k); - } - $body .= "\r\n"; - - $header = sprintf($fheader,$auto_config['path'],$auto_config['host'],strlen($body),$body); - $fp = @fsockopen($auto_config['host'], $auto_config['port'], $errno, $errstr, 5); - - if($fp) - { - fputs($fp, $header); - while(!feof($fp)) - { - $line = trim(fgets($fp, 4096)); - if(strncmp('', $line, 7) === 0) - { - fclose($fp); - return false; - } - } - fclose($fp); - } - return true; - - } } /* End of file install.controller.php */ /* Location: ./modules/install/install.controller.php */ diff --git a/modules/install/install.view.php b/modules/install/install.view.php index 5f505ae78..aff654546 100644 --- a/modules/install/install.view.php +++ b/modules/install/install.view.php @@ -7,8 +7,7 @@ */ class installView extends install { - public $install_enable = false; - + public static $checkEnv = false; public static $rewriteCheckFilePath = 'files/cache/tmpRewriteCheck.txt'; public static $rewriteCheckString = ''; @@ -17,81 +16,56 @@ class installView extends install */ function init() { - // Set browser title + // Stop if already installed. + if (Context::isInstalled()) + { + return $this->stop('msg_already_installed'); + } + + // Set the browser title. Context::setBrowserTitle(Context::getLang('introduce_title')); - // Specify the template path + + // Specify the template path. $this->setTemplatePath($this->module_path.'tpl'); - // Error occurs if already installed - if(Context::isInstalled()) return $this->stop('msg_already_installed'); - // Install a controller + + // Check the environment. $oInstallController = getController('install'); - $this->install_enable = $oInstallController->checkInstallEnv(); - // If the environment is installable, execute installController::makeDefaultDirectory() - if($this->install_enable) $oInstallController->makeDefaultDirectory(); + self::$checkEnv = $oInstallController->checkInstallEnv(); + if (self::$checkEnv) + { + $oInstallController->makeDefaultDirectory(); + } } /** - * @brief Display license messages + * @brief Index page */ - function dispInstallIntroduce() + function dispInstallIndex() { - $install_config_file = FileHandler::getRealPath('./config/install.config.php'); - if(file_exists($install_config_file)) + // If there is an autoinstall config file, use it. + if (file_exists(RX_BASEDIR . 'config/install.config.php')) { - /** - * If './config/install.config.php' file created and write array shown in the example below, XE installed using config file. - * ex ) - $install_config = array( - 'db_type' =>'mysqli_innodb', - 'db_port' =>'3306', - 'db_hostname' =>'localhost', - 'db_userid' =>'root', - 'db_password' =>'root', - 'db_database' =>'rx_database', - 'db_table_prefix' =>'rx', - 'user_rewrite' =>'N', - 'time_zone' =>'0000', - 'email_address' =>'admin@admin.net', - 'password' =>'pass', - 'password2' =>'pass', - 'nick_name' =>'admin', - 'user_id' =>'admin', - 'lang_type' =>'ko', // en, jp, ... - ); - */ - include $install_config_file; - if(is_array($install_config)) + include RX_BASEDIR . 'config/install.config.php'; + + if (isset($install_config) && is_array($install_config)) { - foreach($install_config as $k => $v) - { - $v = ($k == 'db_table_prefix') ? $v.'_' : $v; - Context::set($k,$v,true); - } - unset($GLOBALS['__DB__']); - Context::set('install_config', true, true); $oInstallController = getController('install'); - $output = $oInstallController->procInstall(); - if (!$output->toBool()) return $output; - header("location: ./"); - Context::close(); - exit; + $output = $oInstallController->procInstall($install_config); + if (!$output->toBool()) + { + return $output; + } + else + { + header("location: ./"); + exit; + } } } - - Context::set('l', Context::getLangType()); - return $this->dispInstallLicenseAgreement(); - //$this->setTemplateFile('introduce'); - } - - /** - * @brief License agreement - */ - function dispInstallLicenseAgreement() - { + + // Otherwise, display the license agreement screen. + Context::set('lang_type', Context::getLangType()); $this->setTemplateFile('license_agreement'); - - $lang_type = Context::getLangType(); - Context::set('lang_type', $lang_type); } /** @@ -99,111 +73,82 @@ class installView extends install */ function dispInstallCheckEnv() { - $oInstallController = getController('install'); - + // Create a temporary file for mod_rewrite check. self::$rewriteCheckString = Password::createSecureSalt(32); FileHandler::writeFile(_XE_PATH_ . self::$rewriteCheckFilePath, self::$rewriteCheckString);; - Context::set('use_rewrite', $_SESSION['use_rewrite'] = 'N'); - Context::set('use_nginx', stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false); + // Check if the web server is nginx. + Context::set('use_nginx', stripos($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false); $this->setTemplateFile('check_env'); } /** - * @brief Choose a DB + * @brief Configure the database */ - function dispInstallSelectDB() + function dispInstallDBConfig() { // Display check_env if it is not installable - if(!$this->install_enable) return $this->dispInstallCheckEnv(); + if(!self::$checkEnv) + { + return $this->dispInstallCheckEnv(); + } // Delete mod_rewrite check file FileHandler::removeFile(_XE_PATH_ . self::$rewriteCheckFilePath); - // Save mod_rewrite check status + // Save mod_rewrite check status. if(Context::get('rewrite') === 'Y') { Context::set('use_rewrite', $_SESSION['use_rewrite'] = 'Y'); } - // Enter ftp information + // FTP config is disabled in Rhymix. + /* if(ini_get('safe_mode') && !Context::isFTPRegisted()) { Context::set('progressMenu', '3'); Context::set('server_ip_address', $_SERVER['SERVER_ADDR']); Context::set('server_ftp_user', get_current_user()); $this->setTemplateFile('ftp'); + return; } - else + */ + + $defaultDatabase = 'mysqli_innodb'; + $disableList = DB::getDisableList(); + if(is_array($disableList)) { - $defaultDatabase = 'mysqli_innodb'; - $disableList = DB::getDisableList(); - if(is_array($disableList)) + foreach($disableList as $key => $value) { - foreach($disableList AS $key=>$value) + if($value->db_type == $defaultDatabase) { - if($value->db_type == $defaultDatabase) - { - $defaultDatabase = 'mysql'; - break; - } + $defaultDatabase = 'mysqli'; + break; } } - Context::set('defaultDatabase', $defaultDatabase); - Context::set('progressMenu', '4'); - - $error_return_url = getNotEncodedUrl('', 'act', Context::get('act'), 'db_type', Context::get('db_type')); - if(RX_SSL) - { - // Error occured when using https protocol at "ModuleHandler::init() ' - $parsedUrl = parse_url($error_return_url); - $error_return_url = ''; - if(isset($parsedUrl['path'])) $error_return_url .= $parsedUrl['path']; - if(isset($parsedUrl['query'])) $error_return_url .= '?' . $parsedUrl['query']; - if(isset($parsedUrl['fragment'])) $error_return_url .= '?' . $parsedUrl['fragment']; - } - Context::set('error_return_url', $error_return_url); - - $this->setTemplateFile('select_db'); } + Context::set('defaultDatabase', $defaultDatabase); + + Context::set('progressMenu', '4'); + Context::set('error_return_url', getNotEncodedUrl('', 'act', Context::get('act'), 'db_type', Context::get('db_type'))); + $this->setTemplateFile('db_config'); } /** * @brief Display a screen to enter DB and administrator's information */ - function dispInstallManagerForm() + function dispInstallOtherConfig() { // Display check_env if not installable - if(!$this->install_enable) + if(!self::$checkEnv) { return $this->dispInstallCheckEnv(); } - - include _XE_PATH_.'files/config/tmpDB.config.php'; - + Context::set('use_rewrite', $_SESSION['use_rewrite']); Context::set('use_ssl', RX_SSL ? 'always' : 'none'); Context::set('time_zone', $GLOBALS['time_zone']); - Context::set('db_type', $db_info->db_type); - $this->setTemplateFile('admin_form'); - } - - /** - * @brief Check whether this server supports mod_rewrite - */ - function useRewriteModule() - { - if(function_exists('apache_get_modules') && in_array('mod_rewrite',apache_get_modules())) - { - return true; - } - - require_once(_XE_PATH_.'classes/httprequest/XEHttpRequest.class.php'); - $httpRequest = new XEHttpRequest($_SERVER['HTTP_HOST'], $_SERVER['SERVER_PORT']); - $xeInstallPath = substr($_SERVER['REQUEST_URI'], 0, strpos($_SERVER['REQUEST_URI'], 'index.php', 1)); - $output = $httpRequest->send($xeInstallPath.'modules/install/conf/info.xml'); - - return (strpos($output->body, 'setTemplateFile('other_config'); } } /* End of file install.view.php */ diff --git a/modules/install/ruleset/install.xml b/modules/install/ruleset/install.xml index 100f8b689..3ed218653 100644 --- a/modules/install/ruleset/install.xml +++ b/modules/install/ruleset/install.xml @@ -8,6 +8,5 @@ - diff --git a/modules/install/script/ko.install.php b/modules/install/script/ko.install.php index 485c8cb9b..e4f53e64b 100644 --- a/modules/install/script/ko.install.php +++ b/modules/install/script/ko.install.php @@ -269,7 +269,7 @@ $obj->email_address = $logged_info->email_address; $obj->module_srl = $module_srl; Context::set('version', __XE_VERSION__); -$obj->title = 'Welcome Rhymix'; +$obj->title = 'Welcome to Rhymix'; $obj->content = $oTemplateHandler->compile(_XE_PATH_ . 'modules/install/script/welcome_content', 'welcome_content_'.$lang); @@ -279,7 +279,7 @@ if(!$output->toBool()) return $output; $document_srl = $output->get('document_srl'); unset($obj->document_srl); -$obj->title = 'Welcome mobile Rhymix'; +$obj->title = 'Welcome to Mobile Rhymix'; $output = $oDocumentController->insertDocument($obj, true); if(!$output->toBool()) return $output; diff --git a/modules/install/tpl/check_env.html b/modules/install/tpl/check_env.html index aadff1a61..8bb498790 100644 --- a/modules/install/tpl/check_env.html +++ b/modules/install/tpl/check_env.html @@ -42,7 +42,7 @@ {$lang->disable_rewrite} -
    {$lang->about_nginx_rewrite}
    +
    {$lang->about_nginx_rewrite}

    {$lang->disable_rewrite_can_proceed} @@ -53,7 +53,7 @@ « {$lang->cmd_back} diff --git a/modules/install/tpl/select_db.html b/modules/install/tpl/db_config.html similarity index 67% rename from modules/install/tpl/select_db.html rename to modules/install/tpl/db_config.html index 0a52f8263..5baebc488 100644 --- a/modules/install/tpl/select_db.html +++ b/modules/install/tpl/db_config.html @@ -8,7 +8,7 @@ - +
    @@ -27,28 +27,28 @@

    {$lang->db_desc[$val->db_type]}

    - -
    + +
    - -
    + +
    - -
    + +
    - -
    + +
    - -
    + +
    - -
    + +

    {$lang->db_info_desc}
    {$lang->db_prefix_desc} diff --git a/modules/install/tpl/license_agreement.html b/modules/install/tpl/license_agreement.html index 2296de1ae..a13af53b4 100644 --- a/modules/install/tpl/license_agreement.html +++ b/modules/install/tpl/license_agreement.html @@ -7,7 +7,7 @@

    {$XE_VALIDATOR_MESSAGE}

    - +
    @@ -22,7 +22,7 @@
    - +
    diff --git a/modules/install/tpl/admin_form.html b/modules/install/tpl/other_config.html similarity index 95% rename from modules/install/tpl/admin_form.html rename to modules/install/tpl/other_config.html index 0694b43bd..012d1e52d 100644 --- a/modules/install/tpl/admin_form.html +++ b/modules/install/tpl/other_config.html @@ -7,7 +7,6 @@

    {$XE_VALIDATOR_MESSAGE}

    -
    @@ -61,7 +60,7 @@
    diff --git a/modules/install/tpl/progress_menu.html b/modules/install/tpl/progress_menu.html index 103437d45..6fb670a47 100644 --- a/modules/install/tpl/progress_menu.html +++ b/modules/install/tpl/progress_menu.html @@ -3,7 +3,7 @@
  • {$lang->install_progress_menu['license_agreement']}
  • {$lang->install_progress_menu['condition']}
  • {$lang->install_progress_menu['ftp']}
  • -
  • {$lang->install_progress_menu['dbInfo']}
  • -
  • {$lang->install_progress_menu['adminInfo']}
  • +
  • {$lang->install_progress_menu['dbInfo']}
  • +
  • {$lang->install_progress_menu['adminInfo']}
  • From 54d6385e2ab5844ccd93e79d25b0f37083d1842f Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 15:49:53 +0900 Subject: [PATCH 012/189] Update unit tests --- tests/Install/InstallCept.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/Install/InstallCept.php b/tests/Install/InstallCept.php index d4c2b15be..55d75b3b1 100644 --- a/tests/Install/InstallCept.php +++ b/tests/Install/InstallCept.php @@ -35,7 +35,7 @@ $I->amOnPage('/index.php?l=ko'); $I->setCookie('l', 'ko'); $I->seeElement('//div[@id="progress"]/ul/li[1][@class="active"]'); $I->seeElement('input[name="license_agreement"]'); -$I->submitForm('#body', ['act' => 'procInstallLicenseAggrement', 'license_agreement' => 'Y']); +$I->submitForm('#body', ['act' => 'procInstallLicenseAgreement', 'license_agreement' => 'Y']); // Step 2 : Environment Check $I->seeInCurrentUrl('act=dispInstallCheckEnv'); @@ -43,27 +43,26 @@ $I->seeElement('#task-checklist-confirm'); $I->click('#task-checklist-confirm'); // Step 3 : DB Setup -$I->seeInCurrentUrl('act=dispInstallSelectDB'); +$I->seeInCurrentUrl('act=dispInstallDBConfig'); $I->seeElement('select[name="db_type"]'); $I->submitForm('#body', [ - 'act' => 'procDBSetting', + 'act' => 'procDBConfig', 'db_type' => 'mysqli_innodb', - 'db_hostname' => $dbinfo['host'], + 'db_host' => $dbinfo['host'], 'db_port' => $dbinfo['port'], - 'db_userid' => $dbinfo['user'], - 'db_password' => $dbinfo['password'], + 'db_user' => $dbinfo['user'], + 'db_pass' => $dbinfo['password'], 'db_database' => $dbinfo['dbname'], - 'db_table_prefix' => 'rx' + 'db_prefix' => 'rx' ]); // Step 4 : Create Admin Account -$I->seeInCurrentUrl('act=dispInstallManagerForm'); +$I->seeInCurrentUrl('act=dispInstallOtherConfig'); $I->seeElement('select[name="time_zone"]'); $I->fillField('#aMail', 'admin@admin.net'); $I->submitForm('#body', [ 'act' => 'procInstall', 'time_zone' => '+0900', - 'db_type' => 'mysqli_innodb', 'email_address' => 'admin@admin.net', 'password' => 'admin', 'password2' => 'admin', From 3c8b586fac3e10136c60f4840a510ce07276d44a Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 16:23:32 +0900 Subject: [PATCH 013/189] Move module_extend cache file out of the config directory --- modules/module/module.controller.php | 4 ++-- modules/module/module.model.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index b23ca03e7..d817266f1 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -167,7 +167,7 @@ class moduleController extends module if(!in_array($type,array('model','controller','view','api','mobile'))) return false; if(in_array($parent_module, array('module','addon','widget','layout'))) return false; - $cache_file = './files/config/module_extend.php'; + $cache_file = './files/cache/common/module_extend.php'; FileHandler::removeFile($cache_file); $args = new stdClass; @@ -189,7 +189,7 @@ class moduleController extends module */ function deleteModuleExtend($parent_module, $extend_module, $type, $kind='') { - $cache_file = './files/config/module_extend.php'; + $cache_file = './files/cache/common/module_extend.php'; FileHandler::removeFile($cache_file); $args = new stdClass; diff --git a/modules/module/module.model.php b/modules/module/module.model.php index b04529b74..3d2b01827 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -714,7 +714,7 @@ class moduleModel extends module */ function loadModuleExtends() { - $cache_file = './files/config/module_extend.php'; + $cache_file = './files/cache/common/module_extend.php'; $cache_file = FileHandler::getRealPath($cache_file); if(!isset($GLOBALS['__MODULE_EXTEND__'])) From e971e7a725fa9481aedc2158d4f9f2474f7a9624 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Wed, 3 Feb 2016 17:54:47 +0900 Subject: [PATCH 014/189] Improve time zone selection --- classes/context/Context.class.php | 4 +-- modules/install/install.controller.php | 23 +++++++++++------ modules/install/install.view.php | 35 ++++++++++++++++++++++++-- modules/install/tpl/other_config.html | 2 +- 4 files changed, 51 insertions(+), 13 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index b11f9f593..7e68a6e18 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -289,11 +289,11 @@ class Context $this->lang_type = $this->db_info->lang_type; } - if(!$this->lang_type || !in_array($this->lang_type, $enabled_langs)) + if(!$this->lang_type || !isset($enabled_langs[$this->lang_type])) { $this->lang_type = 'ko'; } - + self::setLangType($this->lang_type); $this->lang = Rhymix\Framework\Lang::getInstance($this->lang_type); diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index 7ddfa5e92..6cecd1d9c 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -157,15 +157,22 @@ class installController extends install $config['locale']['enabled_lang'] = array($config['locale']['default_lang']); // Set the internal and default time zones. - $user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600); - switch ($user_timezone) + if (strpos($time_zone, '/') !== false) { - case 9: - $config['locale']['default_timezone'] = 'Asia/Seoul'; break; - case 0: - $config['locale']['default_timezone'] = 'Etc/UTC'; break; - default: - $config['locale']['default_timezone'] = 'Etc/GMT' . ($user_timezone > 0 ? '-' : '+') . abs($user_timezone); + $config['locale']['default_timezone'] = $time_zone; + } + else + { + $user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600); + switch ($user_timezone) + { + case 9: + $config['locale']['default_timezone'] = 'Asia/Seoul'; break; + case 0: + $config['locale']['default_timezone'] = 'Etc/UTC'; break; + default: + $config['locale']['default_timezone'] = 'Etc/GMT' . ($user_timezone > 0 ? '-' : '+') . abs($user_timezone); + } } $config['locale']['internal_timezone'] = intval(date('Z')); diff --git a/modules/install/install.view.php b/modules/install/install.view.php index aff654546..67c1ef2ff 100644 --- a/modules/install/install.view.php +++ b/modules/install/install.view.php @@ -145,11 +145,42 @@ class installView extends install return $this->dispInstallCheckEnv(); } - Context::set('use_rewrite', $_SESSION['use_rewrite']); + // Get list of time zones. + $timezones = DateTimeZone::listIdentifiers(); + natcasesort($timezones); + $timezones = array_combine($timezones, $timezones); + Context::set('timezones', $timezones); + + // Automatically select a time zone for the user. + Context::set('selected_timezone', $this->detectUserTimeZone()); + + // Always use SSL if installing via SSL. Context::set('use_ssl', RX_SSL ? 'always' : 'none'); - Context::set('time_zone', $GLOBALS['time_zone']); $this->setTemplateFile('other_config'); } + + /** + * Detect best time zone for the user. + */ + function detectUserTimeZone() + { + switch (Context::getLangType()) + { + case 'ko': return 'Asia/Seoul'; + case 'en': return 'Europe/London'; + case 'ja': return 'Asia/Tokyo'; + case 'zh-CN': return 'Asia/Shanghai'; + case 'zh-TW': return 'Asia/Taipei'; + case 'de': return 'Europe/Berlin'; + case 'es': return 'Europe/Madrid'; + case 'fr': return 'Europe/Paris'; + case 'mn': return 'Asia/Ulaanbaatar'; + case 'ru': return 'Europe/Moscow'; + case 'tr': return 'Europe/Istanbul'; + case 'vi': return 'Asia/Ho_Chi_Minh'; + default: return 'UTC'; + } + } } /* End of file install.view.php */ /* Location: ./modules/install/install.view.php */ diff --git a/modules/install/tpl/other_config.html b/modules/install/tpl/other_config.html index 012d1e52d..fbe4c6138 100644 --- a/modules/install/tpl/other_config.html +++ b/modules/install/tpl/other_config.html @@ -42,7 +42,7 @@
    From d5ba13d7e11cb326684b8da70a368437b5df6de0 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 4 Feb 2016 09:11:56 +0900 Subject: [PATCH 015/189] Improve internal timezone handling --- classes/context/Context.class.php | 9 ++- common/framework/config.php | 8 +-- common/framework/datetime.php | 101 ++++++++++++++++++++++++++++++ modules/install/install.view.php | 5 +- 4 files changed, 112 insertions(+), 11 deletions(-) create mode 100644 common/framework/datetime.php diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 7e68a6e18..422a92361 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -10,7 +10,7 @@ class Context { /** - * Allow rewrite + * Allow rewritel * @var bool TRUE: using rewrite mod, FALSE: otherwise */ public $allow_rewrite = FALSE; @@ -532,7 +532,6 @@ class Context $db_info->time_zone = sprintf('%s%02d%02d', $db_info->time_zone >= 0 ? '+' : '-', abs($db_info->time_zone) / 3600, (abs($db_info->time_zone) % 3600 / 60)); $GLOBALS['_time_zone'] = $db_info->time_zone; $GLOBALS['_time_zone_offset'] = $config['locale']['internal_timezone']; - $GLOBALS['_qmail_compatibility'] = 'N'; $db_info->delay_session = $config['session']['delay'] ? 'Y' : 'N'; $db_info->use_db_session = $config['session']['use_db'] ? 'Y' : 'N'; $db_info->minify_scripts = $config['view']['minify_scripts'] ? 'Y' : 'N'; @@ -547,7 +546,13 @@ class Context $db_info->use_prepared_statements = $config['use_prepared_statements'] ? 'Y' : 'N'; $db_info->use_rewrite = $config['use_rewrite'] ? 'Y' : 'N'; $db_info->use_sso = $config['use_sso'] ? 'Y' : 'N'; + + // Save old format to Context instance. self::$_instance->db_info = $db_info; + + // Set the internal timezone. + $internal_timezone = Rhymix\Framework\DateTime::getTimezoneNameByOffset($config['locale']['internal_timezone']); + date_default_timezone_set($internal_timezone); } /** diff --git a/common/framework/config.php b/common/framework/config.php index 414545d10..1bc41473f 100644 --- a/common/framework/config.php +++ b/common/framework/config.php @@ -257,15 +257,13 @@ class Config $config['locale']['enabled_lang'] = array_values($lang_selected); // Convert timezone configuration. - $old_timezone = intval(get_time_zone_offset($db_info->time_zone ?: '+0900') / 3600); + $old_timezone = get_time_zone_offset($db_info->time_zone ?: '+0900'); switch ($old_timezone) { - case 9: + case 32400: $config['locale']['default_timezone'] = 'Asia/Seoul'; break; - case 0: - $config['locale']['default_timezone'] = 'Etc/UTC'; break; default: - $config['locale']['default_timezone'] = 'Etc/GMT' . ($old_timezone > 0 ? '-' : '+') . abs($old_timezone); + $config['locale']['default_timezone'] = DateTime::getTimezoneNameByOffset($old_timezone); } $config['locale']['internal_timezone'] = intval(date('Z')); diff --git a/common/framework/datetime.php b/common/framework/datetime.php new file mode 100644 index 000000000..9684c0dc6 --- /dev/null +++ b/common/framework/datetime.php @@ -0,0 +1,101 @@ +getOffset(); + $offset = ($offset >= 0 ? '+' : '-') . sprintf('%02d', floor(abs($offset) / 3600)) . ':' . sprintf('%02d', (abs($offset) % 3600) / 60); + unset($datetime); + $result[$tzid] = "$name ($offset)"; + } + asort($result); + $result['Etc/UTC'] = 'GMT/UTC (+00:00)'; + return $result; + } + + /** + * Get the absolute (UTC) offset of a timezone. + * + * @param string $timezone Timezone identifier, e.g. Asia/Seoul + * @param int $timestamp Unix timestamp (optional, default is now) + * @return int + */ + public static function getTimezoneOffset($timezone, $timestamp = null) + { + if (!isset(self::$_timezones[$timezone])) + { + self::$_timezones[$timezone] = new \DateTimeZone($timezone); + } + $datetime = new \DateTime(); + $datetime->setTimestamp($timestamp ?: time()); + $datetime->setTimezone(self::$_timezones[$timezone]); + return $datetime->getOffset(); + } + + /** + * Get the relative offset between a timezone and Rhymix's internal timezone. + * + * @param string $timezone Timezone identifier, e.g. Asia/Seoul + * @param int $timestamp Unix timestamp (optional, default is now) + * @return int + */ + public static function getTimezoneOffsetFromInternal($timezone, $timestamp = null) + { + return self::getTimezoneOffset($timezone, $timestamp) - Config::get('locale.internal_timezone'); + } + + /** + * Get a PHP time zone by UTC offset. + * + * @param int $offset + * @return bool + */ + public static function getTimezoneNameByOffset($offset) + { + switch ($offset) + { + case 0: return 'Etc/UTC'; + default: return 'Etc/GMT' . ($offset > 0 ? '-' : '+') . intval(abs($offset / 3600)); + } + } +} diff --git a/modules/install/install.view.php b/modules/install/install.view.php index 67c1ef2ff..f0848826d 100644 --- a/modules/install/install.view.php +++ b/modules/install/install.view.php @@ -146,10 +146,7 @@ class installView extends install } // Get list of time zones. - $timezones = DateTimeZone::listIdentifiers(); - natcasesort($timezones); - $timezones = array_combine($timezones, $timezones); - Context::set('timezones', $timezones); + Context::set('timezones', Rhymix\Framework\DateTime::getTimezoneList()); // Automatically select a time zone for the user. Context::set('selected_timezone', $this->detectUserTimeZone()); From c27da2ed244da3e551ccc4bccc05db9129eefdb0 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 4 Feb 2016 09:39:09 +0900 Subject: [PATCH 016/189] Port all time-related functions to new timezone handling system --- classes/context/Context.class.php | 1 - common/framework/config.php | 2 +- common/framework/datetime.php | 46 +++++++++++++++++++++-- common/legacy.php | 51 ++++++++++++-------------- modules/install/install.controller.php | 2 +- 5 files changed, 68 insertions(+), 34 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 422a92361..111b695b4 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -531,7 +531,6 @@ class Context $db_info->time_zone = $config['locale']['internal_timezone']; $db_info->time_zone = sprintf('%s%02d%02d', $db_info->time_zone >= 0 ? '+' : '-', abs($db_info->time_zone) / 3600, (abs($db_info->time_zone) % 3600 / 60)); $GLOBALS['_time_zone'] = $db_info->time_zone; - $GLOBALS['_time_zone_offset'] = $config['locale']['internal_timezone']; $db_info->delay_session = $config['session']['delay'] ? 'Y' : 'N'; $db_info->use_db_session = $config['session']['use_db'] ? 'Y' : 'N'; $db_info->minify_scripts = $config['view']['minify_scripts'] ? 'Y' : 'N'; diff --git a/common/framework/config.php b/common/framework/config.php index 1bc41473f..626cf7017 100644 --- a/common/framework/config.php +++ b/common/framework/config.php @@ -257,7 +257,7 @@ class Config $config['locale']['enabled_lang'] = array_values($lang_selected); // Convert timezone configuration. - $old_timezone = get_time_zone_offset($db_info->time_zone ?: '+0900'); + $old_timezone = DateTime::getTimezoneOffsetByLegacyFormat($db_info->time_zone ?: '+0900'); switch ($old_timezone) { case 32400: diff --git a/common/framework/datetime.php b/common/framework/datetime.php index 9684c0dc6..ac7001c64 100644 --- a/common/framework/datetime.php +++ b/common/framework/datetime.php @@ -13,19 +13,43 @@ class DateTime protected static $_timezones = array(); /** - * Get the timezone to display for the current user. + * Format a Unix timestamp for the current user's timezone. + * + * @param string $format Format used in PHP date() function + * @param int $timestamp Unix timestamp (optional, default is now) + * @return string + */ + public static function formatTimestampForCurrentUser($format, $timestamp = null) + { + $timezone = self::getTimezoneForCurrentUser(); + if (!isset(self::$_timezones[$timezone])) + { + self::$_timezones[$timezone] = new \DateTimeZone($timezone); + } + $datetime = new \DateTime(); + $datetime->setTimestamp($timestamp ?: time()); + $datetime->setTimezone(self::$_timezones[$timezone]); + return $datetime->format($format); + } + + /** + * Get the current user's timezone. * * @return string */ - public static function getCurrentUserTimezone() + public static function getTimezoneForCurrentUser() { - if (isset($_SESSION['timezone'])) + if (isset($_SESSION['timezone']) && $_SESSION['timezone']) { return $_SESSION['timezone']; } + elseif ($default = Config::get('locale.default_timezone')) + { + return $default; + } else { - return Config::get('locale.default_timezone'); + return @date_default_timezone_get(); } } @@ -84,6 +108,20 @@ class DateTime return self::getTimezoneOffset($timezone, $timestamp) - Config::get('locale.internal_timezone'); } + /** + * Get the absolute (UTC) offset of a timezone written in XE legacy format ('+0900'). + * + * @param string $timezone + * @return int + */ + public static function getTimezoneOffsetByLegacyFormat($timezone) + { + $multiplier = ($timezone[0] === '-') ? -60 : 60; + $timezone = preg_replace('/[^0-9]/', '', $timezone); + list($hours, $minutes) = str_split($timezone, 2); + return (((int)$hours * 60) + (int)$minutes) * $multiplier; + } + /** * Get a PHP time zone by UTC offset. * diff --git a/common/legacy.php b/common/legacy.php index 82ddabc8b..df21108cb 100644 --- a/common/legacy.php +++ b/common/legacy.php @@ -531,35 +531,32 @@ function cut_str($string, $cut_size = 0, $tail = '...') } /** - * Get integer offset of time zone + * Convert XE legacy time zone format into UTC offset. * - * @param string $time_zone Time zone in +0900 format + * @param string $time_zone Time zone in '+0900' format * @return int */ -function get_time_zone_offset($time_zone) +function get_time_zone_offset($timezone) { - $multiplier = ($time_zone[0] === '-') ? -60 : 60; - $time_zone = preg_replace('/[^0-9]/', '', $time_zone); - list($hours, $minutes) = str_split($time_zone, 2); - return (((int)$hours * 60) + (int)$minutes) * $multiplier; + return Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat($timezone); } /** - * Get a time gap between server's timezone and XE's timezone + * Get the offset between the current user's time zone and Rhymix's internal time zone. * * @return int */ -function zgap() +function zgap($timestamp = null) { - $time_zone_offset = $GLOBALS['_time_zone_offset']; - $server_offset = date('Z'); - return $time_zone_offset - $server_offset; + $current_user_timezone = Rhymix\Framework\DateTime::getTimezoneForCurrentUser(); + return Rhymix\Framework\DateTime::getTimezoneOffsetFromInternal($current_user_timezone, $timestamp); } /** - * YYYYMMDDHHIISS format changed to unix time value + * Convert YYYYMMDDHHIISS format to Unix timestamp. + * This function assumes the internal timezone. * - * @param string $str Time value in format of YYYYMMDDHHIISS + * @param string $str Time in YYYYMMDDHHIISS format * @return int */ function ztime($str) @@ -576,24 +573,24 @@ function ztime($str) $hour = (int)substr($str, 8, 2); $min = (int)substr($str, 10, 2); $sec = (int)substr($str, 12, 2); - $offset = zgap(); } else { - $hour = $min = $sec = $offset = 0; + $hour = $min = $sec = 0; } - return mktime($hour, $min, $sec, $month, $day, $year) + $offset; + return mktime($hour, $min, $sec, $month, $day, $year); } /** - * Change the time format YYYYMMDDHHIISS to the user defined format + * Convert YYYYMMDDHHIISS format to user-defined format. + * This function assumes the internal timezone. * - * @param string|int $str YYYYMMDDHHIISS format time values - * @param string $format Time format of php date() function - * @param bool $conversion Means whether to convert automatically according to the language + * @param string $str Time in YYYYMMDDHHIISS format + * @param string $format Time format for date() function + * @param bool $conversion If true, convert automatically for the current language. * @return string */ -function zdate($str, $format = 'Y-m-d H:i:s', $conversion = TRUE) +function zdate($str, $format = 'Y-m-d H:i:s', $conversion = true) { if(!$str) { @@ -637,18 +634,18 @@ function zdate($str, $format = 'Y-m-d H:i:s', $conversion = TRUE) } } - // get unixtime by using ztime() for date() function's argument. - $string = date($format, ztime($str)); + // get unixtime by using ztime() for date() function's argument. + $result = Rhymix\Framework\DateTime::formatTimestampForCurrentUser($format, ztime($str)); // change day and am/pm for each language if(preg_match('/[MFAa]/', $format)) { $unit_week = Context::getLang('unit_week'); $unit_meridiem = Context::getLang('unit_meridiem'); - $string = str_replace(array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'), $unit_week, $string); - $string = str_replace(array('am', 'pm', 'AM', 'PM'), $unit_meridiem, $string); + $string = str_replace(array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'), $unit_week, $result); + $string = str_replace(array('am', 'pm', 'AM', 'PM'), $unit_meridiem, $result); } - return $string; + return $result; } /** diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index 6cecd1d9c..2c039074c 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -163,7 +163,7 @@ class installController extends install } else { - $user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600); + $user_timezone = intval(Rhymix\Framework\DateTime::getTimezoneOffsetByLegacyFormat($time_zone ?: '+0900') / 3600); switch ($user_timezone) { case 9: From f7191123fd16e5d473493b68b70f90428a12cbb5 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 4 Feb 2016 09:50:39 +0900 Subject: [PATCH 017/189] Always use the internal timezone in ztime() function --- common/legacy.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/legacy.php b/common/legacy.php index df21108cb..7d86ffc1a 100644 --- a/common/legacy.php +++ b/common/legacy.php @@ -578,7 +578,8 @@ function ztime($str) { $hour = $min = $sec = 0; } - return mktime($hour, $min, $sec, $month, $day, $year); + $offset = Rhymix\Framework\Config::get('locale.internal_timezone') ?: date('Z'); + return gmmktime($hour, $min, $sec, $month, $day, $year) - $offset; } /** From 673cd48db09b02e34b8b973deaf2f89482d6c1d3 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 4 Feb 2016 14:43:18 +0900 Subject: [PATCH 018/189] Reorganize general configuration in admin module --- modules/admin/admin.admin.controller.php | 320 +++++++++++++----- modules/admin/admin.admin.view.php | 189 ++++++----- modules/admin/conf/module.xml | 16 +- modules/admin/lang/en.php | 11 +- modules/admin/lang/ja.php | 10 +- modules/admin/lang/ko.php | 9 +- modules/admin/tpl/config_advanced.html | 91 +++++ modules/admin/tpl/config_ftp.html | 2 +- modules/admin/tpl/config_general.html | 233 ++----------- modules/admin/tpl/config_header.html | 11 + modules/admin/tpl/config_security.html | 31 ++ modules/admin/tpl/config_sitelock.html | 47 +++ .../tpl/favicon_upload.html} | 0 modules/install/conf/module.xml | 3 - modules/install/install.admin.controller.php | 281 --------------- 15 files changed, 587 insertions(+), 667 deletions(-) create mode 100644 modules/admin/tpl/config_advanced.html create mode 100644 modules/admin/tpl/config_header.html create mode 100644 modules/admin/tpl/config_security.html create mode 100644 modules/admin/tpl/config_sitelock.html rename modules/{install/tpl/after_upload_config_image.html => admin/tpl/favicon_upload.html} (100%) diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index be79988b8..e529f0821 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -475,7 +475,6 @@ class adminAdminController extends admin */ function procAdminRemoveIcons() { - $site_info = Context::get('site_module_info'); $virtual_site = ''; if($site_info->site_srl) @@ -495,97 +494,264 @@ class adminAdminController extends admin } $this->setMessage('success_deleted'); } - - function procAdminUpdateSitelock() + + /** + * Update general configuration. + */ + function procAdminUpdateConfigGeneral() + { + $oModuleController = getController('module'); + $vars = Context::getRequestVars(); + + // Site title and HTML footer + $args = new stdClass; + $args->siteTitle = escape($vars->site_title); + $args->htmlFooter = escape($vars->html_footer); + $oModuleController->updateModuleConfig('module', $args); + + // Index module + $site_args = new stdClass(); + $site_args->site_srl = 0; + $site_args->index_module_srl = $vars->index_module_srl; + $site_args->default_language = $vars->default_lang; + $oModuleController->updateSite($site_args); + + // Thumbnail settings + $args = new stdClass; + $args->thumbnail_type = $vars->thumbnail_type === 'ratio' ? 'ratio' : 'crop'; + $oModuleController->insertModuleConfig('document', $args); + + // Default and enabled languages + $enabled_lang = $vars->enabled_lang; + if (!in_array($vars->default_lang, $enabled_lang)) + { + $enabled_lang[] = $vars->default_lang; + } + Rhymix\Framework\Config::set('locale.default_lang', $vars->default_lang); + Rhymix\Framework\Config::set('locale.enabled_lang', array_values($enabled_lang)); + + // Default time zone + Rhymix\Framework\Config::set('locale.default_timezone', $vars->default_timezone); + + // Mobile view + Rhymix\Framework\Config::set('use_mobile_view', $vars->use_mobile_view === 'Y'); + + // Favicon and mobicon + $this->_saveFavicon('favicon.ico', $vars->is_delete_favicon); + $this->_saveFavicon('mobicon.png', $vars->is_delete_mobicon); + + // Save + Rhymix\Framework\Config::save(); + + $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigGeneral')); + } + + /** + * Update security configuration. + */ + function procAdminUpdateSecurity() { $vars = Context::getRequestVars(); - $oInstallController = getController('install'); - - $db_info = Context::getDBInfo(); - - $db_info->use_sitelock = ($vars->use_sitelock) ? $vars->use_sitelock : 'N'; - $db_info->sitelock_title = $vars->sitelock_title; - $db_info->sitelock_message = $vars->sitelock_message; - - $whitelist = $vars->sitelock_whitelist; - $whitelist = preg_replace("/[\r|\n|\r\n]+/",",",$whitelist); - $whitelist = preg_replace("/\s+/","",$whitelist); - if(preg_match('/(<\?|<\?php|\?>)/xsm', $whitelist)) + + $embed_iframe = $vars->embedfilter_iframe; + $embed_iframe = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_iframe)), function($item) { + return $item !== ''; + }); + $embed_iframe = array_unique(array_map(function($item) { + return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; + }, $embed_iframe)); + natcasesort($embed_iframe); + + $embed_object = $vars->embedfilter_object; + $embed_object = array_filter(array_map('trim', preg_split('/[\r\n]/', $embed_object)), function($item) { + return $item !== ''; + }); + $embed_object = array_unique(array_map(function($item) { + return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; + }, $embed_object)); + natcasesort($embed_object); + + Rhymix\Framework\Config::set('embedfilter.iframe', array_values($embed_iframe)); + Rhymix\Framework\Config::set('embedfilter.object', array_values($embed_object)); + Rhymix\Framework\Config::save(); + + $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigSecurity')); + } + + /** + * Update advanced configuration. + */ + function procAdminUpdateAdvanced() + { + $vars = Context::getRequestVars(); + + // Default URL + $default_url = rtrim(trim($vars->default_url), '/') . '/'; + if (!filter_var($default_url, FILTER_VALIDATE_URL) || !preg_match('@^https?://@', $default_url)) { - $whitelist = ''; + return new Object(-1, 'msg_invalid_default_url'); } - $whitelist .= ',127.0.0.1,' . $_SERVER['REMOTE_ADDR']; - $whitelist = explode(',',trim($whitelist, ',')); - $whitelist = array_unique($whitelist); - - if(!IpFilter::validate($whitelist)) { + if (parse_url($default_url, PHP_URL_PATH) !== RX_BASEURL) + { + return new Object(-1, 'msg_invalid_default_url'); + } + Rhymix\Framework\Config::set('url.default', $vars->default_url); + + // SSL and ports + if ($vars->http_port == 80) $vars->http_port = null; + if ($vars->https_port == 443) $vars->https_port = null; + Rhymix\Framework\Config::set('url.http_port', $vars->http_port ?: null); + Rhymix\Framework\Config::set('url.https_port', $vars->https_port ?: null); + Rhymix\Framework\Config::set('url.ssl', $vars->use_ssl ?: 'none'); + + // Other settings + Rhymix\Framework\Config::set('use_mobile_view', $vars->use_mobile_view === 'Y'); + Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y'); + Rhymix\Framework\Config::set('use_sso', $vars->use_sso === 'Y'); + Rhymix\Framework\Config::set('session.delay', $vars->delay_session === 'Y'); + Rhymix\Framework\Config::set('session.use_db', $vars->use_db_session === 'Y'); + Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common'); + Rhymix\Framework\Config::set('view.gzip', $vars->use_gzip === 'Y'); + + // Admin IP access control + $allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->admin_allowed_ip)); + $allowed_ip = array_unique(array_filter($allowed_ip, function($item) { + return $item !== ''; + })); + if (!IpFilter::validate($whitelist)) { return new Object(-1, 'msg_invalid_ip'); } - - $db_info->sitelock_whitelist = $whitelist; - - $oInstallController = getController('install'); - if(!$oInstallController->makeConfigFile()) - { - return new Object(-1, 'msg_invalid_request'); - } - - if(!in_array(Context::getRequestMethod(), array('XMLRPC','JSON'))) - { - $returnUrl = Context::get('success_return_url'); - if(!$returnUrl) $returnUrl = getNotEncodedUrl('', 'act', 'dispAdminConfigGeneral'); - header('location:' . $returnUrl); - return; - } + Rhymix\Framework\Config::set('admin.allow', array_values($allowed_ip)); + Rhymix\Framework\Config::save(); + + $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigAdvanced')); } - - function procAdminUpdateEmbedWhitelist() + + /** + * Update sitelock configuration. + */ + function procAdminUpdateSitelock() { - $vars = Context::getRequestVars(); - - $db_info = Context::getDBInfo(); - - $white_object = $vars->embed_white_object; - $white_object = preg_replace("/[\r\n|\r|\n]+/", '|@|', $white_object); - $white_object = preg_replace("/[\s\'\"]+/", '', $white_object); - $white_object = explode('|@|', $white_object); - $white_object = array_unique(array_map(function($item) { - return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; - }, $white_object)); - natcasesort($white_object); - - $white_iframe = $vars->embed_white_iframe; - $white_iframe = preg_replace("/[\r\n|\r|\n]+/", '|@|', $white_iframe); - $white_iframe = preg_replace("/[\s\'\"]+/", '', $white_iframe); - $white_iframe = explode('|@|', $white_iframe); - $white_iframe = array_unique(array_map(function($item) { - return preg_match('@^https?://(.*)$@i', $item, $matches) ? $matches[1] : $item; - }, $white_iframe)); - natcasesort($white_iframe); - - $whitelist = array( - 'object' => $white_object, - 'iframe' => $white_iframe, - ); - - $db_info->embed_white_object = $white_object; - $db_info->embed_white_iframe = $white_iframe; - - $oInstallController = getController('install'); - if(!$oInstallController->makeConfigFile()) + $vars = Context::gets('sitelock_locked', 'sitelock_allowed_ip', 'sitelock_title', 'sitelock_message'); + + $allowed_ip = array_map('trim', preg_split('/[\r\n]/', $vars->sitelock_allowed_ip)); + $allowed_ip = array_unique(array_filter($allowed_ip, function($item) { + return $item !== ''; + })); + if (!in_array(RX_CLIENT_IP, $allowed_ip)) array_unshift($allowed_ip, RX_CLIENT_IP); + if (!in_array('127.0.0.1', $allowed_ip)) array_unshift($allowed_ip, '127.0.0.1'); + if (!IpFilter::validate($whitelist)) { + return new Object(-1, 'msg_invalid_ip'); + } + + Rhymix\Framework\Config::set('lock.locked', $vars->sitelock_locked === 'Y'); + Rhymix\Framework\Config::set('lock.title', trim($vars->sitelock_title)); + Rhymix\Framework\Config::set('lock.message', trim($vars->sitelock_message)); + Rhymix\Framework\Config::set('lock.allow', array_values($allowed_ip)); + Rhymix\Framework\Config::save(); + + $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'act', 'dispAdminConfigSitelock')); + } + + /** + * Upload favicon and mobicon. + */ + public function procAdminFaviconUpload() + { + if ($favicon = Context::get('favicon')) { - return new Object(-1, 'msg_invalid_request'); + $name = 'favicon'; + $tmpFileName = $this->_saveFaviconTemp($favicon, 'favicon.ico'); + } + elseif ($mobicon = Context::get('mobicon')) + { + $name = 'mobicon'; + $tmpFileName = $this->_saveFaviconTemp($mobicon, 'mobicon.png'); + } + else + { + $name = $tmpFileName = ''; + Context::set('msg', Context::getLang('msg_invalid_format')); + } + + Context::set('name', $name); + Context::set('tmpFileName', $tmpFileName . '?' . time()); + $this->setTemplatePath($this->module_path . 'tpl'); + $this->setTemplateFile("favicon_upload.html"); + } + + private function _saveFaviconTemp($icon, $iconname) + { + $site_info = Context::get('site_module_info'); + $virtual_site = ''; + if ($site_info->site_srl) + { + $virtual_site = $site_info->site_srl . '/'; } - if(!in_array(Context::getRequestMethod(), array('XMLRPC','JSON'))) + $original_filename = $icon['tmp_name']; + $type = $icon['type']; + $relative_filename = 'files/attach/xeicon/'.$virtual_site.'tmp/'.$iconname; + $target_filename = RX_BASEDIR . $relative_filename; + + list($width, $height, $type_no, $attrs) = @getimagesize($original_filename); + if ($iconname == 'favicon.ico') { - $returnUrl = Context::get('success_return_url'); - if(!$returnUrl) $returnUrl = getNotEncodedUrl('', 'act', 'dispAdminConfigGeneral'); - header('location:' . $returnUrl); + if(!preg_match('/^.*(x-icon|\.icon)$/i',$type)) { + Context::set('msg', '*.ico '.Context::getLang('msg_possible_only_file')); + return; + } + } + elseif ($iconname == 'mobicon.png') + { + if (!preg_match('/^.*(png).*$/',$type)) + { + Context::set('msg', '*.png '.Context::getLang('msg_possible_only_file')); + return; + } + if (!(($height == '57' && $width == '57') || ($height == '114' && $width == '114'))) + { + Context::set('msg', Context::getLang('msg_invalid_format').' (size : 57x57, 114x114)'); + return; + } + } + else + { + Context::set('msg', Context::getLang('msg_invalid_format')); return; } + + $fitHeight = $fitWidth = $height; + FileHandler::copyFile($original_filename, $target_filename); + return $relative_filename; + } + + private function _saveFavicon($iconname, $deleteIcon = false) + { + $site_info = Context::get('site_module_info'); + $virtual_site = ''; + if ($site_info->site_srl) + { + $virtual_site = $site_info->site_srl . '/'; + } + + $image_filepath = RX_BASEDIR . 'files/attach/xeicon/' . $virtual_site; + + if ($deleteIcon) + { + FileHandler::removeFile($image_filepath.$iconname); + return; + } + + $tmpicon_filepath = $image_filepath.'tmp/'.$iconname; + $icon_filepath = $image_filepath.$iconname; + if (file_exists($tmpicon_filepath)) + { + FileHandler::moveFile($tmpicon_filepath, $icon_filepath); + } + + FileHandler::removeFile($tmpicon_filepath); } - } /* End of file admin.admin.controller.php */ /* Location: ./modules/admin/admin.admin.controller.php */ diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 5a3815842..bedb2867b 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -61,30 +61,6 @@ class adminAdminView extends admin $this->makeGnbUrl(); // Retrieve the list of installed modules - - $db_info = Context::getDBInfo(); - - Context::set('time_zone_list', $GLOBALS['time_zone']); - Context::set('time_zone', $GLOBALS['_time_zone']); - Context::set('use_rewrite', $db_info->use_rewrite == 'Y' ? 'Y' : 'N'); - Context::set('use_sso', $db_info->use_sso == 'Y' ? 'Y' : 'N'); - Context::set('use_html5', $db_info->use_html5 == 'Y' ? 'Y' : 'N'); - Context::set('use_spaceremover', $db_info->use_spaceremover ? $db_info->use_spaceremover : 'Y'); //not use - Context::set('qmail_compatibility', $db_info->qmail_compatibility == 'Y' ? 'Y' : 'N'); - Context::set('minify_scripts', $db_info->minify_scripts ?: 'common'); - Context::set('delay_session', $db_info->delay_session == 'Y' ? 'Y' : 'N'); - Context::set('use_db_session', $db_info->use_db_session == 'N' ? 'N' : 'Y'); - Context::set('use_mobile_view', $db_info->use_mobile_view == 'Y' ? 'Y' : 'N'); - Context::set('use_ssl', $db_info->use_ssl ? $db_info->use_ssl : "none"); - if($db_info->http_port) - { - Context::set('http_port', $db_info->http_port); - } - if($db_info->https_port) - { - Context::set('https_port', $db_info->https_port); - } - $this->checkEasyinstall(); } @@ -403,77 +379,120 @@ class adminAdminView extends admin } /** - * Display Configuration(settings) page + * Display General Settings page * @return void */ function dispAdminConfigGeneral() { - Context::loadLang('modules/install/lang'); - - $db_info = Context::getDBInfo(); - - Context::set('selected_lang', $db_info->lang_type); - - if(strpos($db_info->default_url, 'xn--') !== FALSE) - { - $db_info->default_url = Context::decodeIdna($db_info->default_url); - } - Context::set('default_url', $db_info->default_url); - Context::set('langs', Context::loadLangSupported()); - - // site lock - Context::set('IP', $_SERVER['REMOTE_ADDR']); - if(!$db_info->sitelock_title) $db_info->sitelock_title = 'Maintenance in progress...'; - if(!in_array('127.0.0.1', $db_info->sitelock_whitelist)) $db_info->sitelock_whitelist[] = '127.0.0.1'; - if(!in_array($_SERVER['REMOTE_ADDR'], $db_info->sitelock_whitelist)) $db_info->sitelock_whitelist[] = $_SERVER['REMOTE_ADDR']; - $db_info->sitelock_whitelist = array_unique($db_info->sitelock_whitelist); - Context::set('remote_addr', $_SERVER['REMOTE_ADDR']); - Context::set('use_sitelock', $db_info->use_sitelock); - Context::set('sitelock_title', $db_info->sitelock_title); - Context::set('sitelock_message', htmlspecialchars($db_info->sitelock_message, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)); - - $whitelist = implode("\r\n", $db_info->sitelock_whitelist); - Context::set('sitelock_whitelist', $whitelist); - - - if($db_info->admin_ip_list) $admin_ip_list = implode("\r\n", $db_info->admin_ip_list); - else $admin_ip_list = ''; - Context::set('admin_ip_list', $admin_ip_list); - - Context::set('lang_selected', Context::loadLangSelected()); - + // Default and enabled languages + Context::set('supported_lang', Rhymix\Framework\Lang::getSupportedList()); + Context::set('default_lang', Rhymix\Framework\Config::get('locale.default_lang')); + Context::set('enabled_lang', Rhymix\Framework\Config::get('locale.enabled_lang')); + + // Site title and HTML footer + $oModuleModel = getModel('module'); + $config = $oModuleModel->getModuleConfig('module'); + Context::set('site_title', escape($config->siteTitle)); + Context::set('html_footer', escape($config->htmlFooter)); + + // Index module + $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); + $start_module = $oModuleModel->getSiteInfo(0, $columnList); + Context::set('start_module', $start_module); + + // Thumbnail settings + $oDocumentModel = getModel('document'); + $config = $oDocumentModel->getDocumentConfig(); + Context::set('thumbnail_type', $config->thumbnail_type ?: 'crop'); + + // Default time zone + Context::set('timezones', Rhymix\Framework\DateTime::getTimezoneList()); + Context::set('selected_timezone', Rhymix\Framework\Config::get('locale.default_timezone')); + + // Mobile view + Context::set('use_mobile_view', $db_info->use_mobile_view == 'Y' ? 'Y' : 'N'); + + // Favicon and mobicon $oAdminModel = getAdminModel('admin'); $favicon_url = $oAdminModel->getFaviconUrl(); $mobicon_url = $oAdminModel->getMobileIconUrl(); Context::set('favicon_url', $favicon_url.'?'.$_SERVER['REQUEST_TIME']); Context::set('mobicon_url', $mobicon_url.'?'.$_SERVER['REQUEST_TIME']); - - $oDocumentModel = getModel('document'); - $config = $oDocumentModel->getDocumentConfig(); - Context::set('thumbnail_type', $config->thumbnail_type); - - - $oModuleModel = getModel('module'); - $config = $oModuleModel->getModuleConfig('module'); - Context::set('siteTitle', $config->siteTitle); - Context::set('htmlFooter', htmlspecialchars($config->htmlFooter)); - - // embed filter - $oEmbedFilter = EmbedFilter::getInstance(); - context::set('embed_white_object', implode(PHP_EOL, $oEmbedFilter->whiteUrlList)); - context::set('embed_white_iframe', implode(PHP_EOL, $oEmbedFilter->whiteIframeUrlList)); - - $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); - $start_module = $oModuleModel->getSiteInfo(0, $columnList); - Context::set('start_module', $start_module); - - Context::set('pwd', $pwd); + $this->setTemplateFile('config_general'); - - $security = new Security(); - $security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.'); } - + + /** + * Display Security Settings page + * @return void + */ + function dispAdminConfigSecurity() + { + // Load embed filter. + $oEmbedFilter = EmbedFilter::getInstance(); + context::set('embedfilter_iframe', implode(PHP_EOL, $oEmbedFilter->whiteIframeUrlList)); + context::set('embedfilter_object', implode(PHP_EOL, $oEmbedFilter->whiteUrlList)); + + $this->setTemplateFile('config_security'); + } + + /** + * Display Advanced Settings page + * @return void + */ + function dispAdminConfigAdvanced() + { + // Default URL + $default_url = Rhymix\Framework\Config::get('url.default'); + if(strpos($default_url, 'xn--') !== FALSE) + { + $default_url = Context::decodeIdna($default_url); + } + Context::set('default_url', $default_url); + + // SSL and ports + Context::set('use_ssl', Rhymix\Framework\Config::get('url.ssl') ?: 'none'); + Context::set('http_port', Rhymix\Framework\Config::get('url.http_port')); + Context::set('https_port', Rhymix\Framework\Config::get('url.https_port')); + + // Other settings + Context::set('use_mobile_view', Rhymix\Framework\Config::get('use_mobile_view')); + Context::set('use_rewrite', Rhymix\Framework\Config::get('use_rewrite')); + Context::set('use_sso', Rhymix\Framework\Config::get('use_sso')); + Context::set('delay_session', Rhymix\Framework\Config::get('session.delay')); + Context::set('use_db_session', Rhymix\Framework\Config::get('session.use_db')); + Context::set('minify_scripts', Rhymix\Framework\Config::get('view.minify_scripts')); + Context::set('use_gzip', Rhymix\Framework\Config::get('view.gzip')); + + // Admin IP access control + $allowed_ip = Rhymix\Framework\Config::get('admin.allow'); + Context::set('admin_allowed_ip', implode(PHP_EOL, $allowed_ip)); + $denied_ip = Rhymix\Framework\Config::get('admin.deny'); + Context::set('admin_denied_ip', implode(PHP_EOL, $denied_ip)); + Context::set('remote_addr', RX_CLIENT_IP); + + $this->setTemplateFile('config_advanced'); + } + + /** + * Display Sitelock Settings page + * @return void + */ + function dispAdminConfigSitelock() + { + Context::set('sitelock_locked', Rhymix\Framework\Config::get('lock.locked')); + Context::set('sitelock_title', escape(Rhymix\Framework\Config::get('lock.title'))); + Context::set('sitelock_message', escape(Rhymix\Framework\Config::get('lock.message'))); + + $allowed_ip = Rhymix\Framework\Config::get('lock.allow'); + if (!in_array('127.0.0.1', $allowed_ip)) $allowed_ip[] = '127.0.0.1'; + if (!in_array(RX_CLIENT_IP, $allowed_ip)) $allowed_ip[] = RX_CLIENT_IP; + Context::set('sitelock_allowed_ip', implode(PHP_EOL, $allowed_ip)); + Context::set('remote_addr', RX_CLIENT_IP); + + $this->setTemplateFile('config_sitelock'); + } + /** * Display FTP Configuration(settings) page * @return void @@ -491,7 +510,7 @@ class adminAdminView extends admin //$security = new Security(); //$security->encodeHTML('ftp_info..'); } - + /** * Display Admin Menu Configuration(settings) page * @return void diff --git a/modules/admin/conf/module.xml b/modules/admin/conf/module.xml index 109c669f7..52007929a 100644 --- a/modules/admin/conf/module.xml +++ b/modules/admin/conf/module.xml @@ -5,6 +5,9 @@ + + + @@ -18,8 +21,11 @@ + + + - + @@ -27,10 +33,10 @@ - General - 일반 - 总览 - 一般 + General Settings + 일반 설정 + 总览设置 + 基本設定 General General General diff --git a/modules/admin/lang/en.php b/modules/admin/lang/en.php index 66281a9b1..bc2ab769b 100644 --- a/modules/admin/lang/en.php +++ b/modules/admin/lang/en.php @@ -1,8 +1,9 @@ admin = 'Admin'; -$lang->subtitle_primary = 'Primary'; -$lang->subtitle_advanced = 'Advanced'; -$lang->subtitle_etc = 'Others'; +$lang->subtitle_primary = 'General Settings'; +$lang->subtitle_security = 'Security Settings'; +$lang->subtitle_advanced = 'Advanced Settings'; +$lang->subtitle_etc = 'Other Settings'; $lang->current_state = 'Current state'; $lang->latest_documents = 'Latest Documents'; $lang->latest_comments = 'Latest Comments'; @@ -81,8 +82,10 @@ $lang->cmd_minify_all = 'All files'; $lang->cmd_minify_common = 'Common files only'; $lang->cmd_minify_none = 'None'; $lang->about_minify_scripts = 'Automatically minify all CSS and JS scripts in the Core and all modules.'; +$lang->use_gzip = 'gzip Compression'; $lang->delay_session = 'Delay session start'; $lang->about_delay_session = 'To improve performance when using a caching proxy server such as Varnish, do not issue sessions to visitors until they log in.
    Selecting this option may cause view counts and visitor counts to become inaccurate.'; +$lang->msg_invalid_default_url = 'The default URL is invalid.'; $lang->sftp = 'Use SFTP'; $lang->ftp_get_list = 'Get List'; $lang->ftp_remove_info = 'Remove FTP Info.'; @@ -198,6 +201,6 @@ $lang->sitelock_whitelist = 'IPs allowed to access'; $lang->sitelock_title = 'Sign Title'; $lang->sitelock_message = 'Sign Contents'; $lang->sitelock_message_help = 'You can use HTML tags.'; -$lang->sitelock_warning_whitelist = 'You should include the IP of the administrator here.
    If the access is blocked, you can unbrick this by changing `\'use_sitelock\' => \'Y\'` to `\'use_sitelock\' => \'N\'` in \'./files/config/db.config.php.\'
    The file of site lock design is at \'./common/tpl/sitelock.html.\''; +$lang->sitelock_warning_whitelist = 'You should include the IP of the administrator here.'; $lang->your_ip = 'Your IP'; $lang->sitelock_in_use = 'Site lock in use'; diff --git a/modules/admin/lang/ja.php b/modules/admin/lang/ja.php index 323690f0a..ed614ef45 100644 --- a/modules/admin/lang/ja.php +++ b/modules/admin/lang/ja.php @@ -1,8 +1,9 @@ admin = '管理者'; -$lang->subtitle_primary = '基本'; -$lang->subtitle_advanced = '上級'; -$lang->subtitle_etc = 'その他'; +$lang->subtitle_primary = '基本設定'; +$lang->subtitle_security = 'セキュリティ設定'; +$lang->subtitle_advanced = '上級設定'; +$lang->subtitle_etc = 'その他設定'; $lang->current_state = '現況'; $lang->latest_documents = '新着書き込み'; $lang->latest_comments = '新着コメント'; @@ -81,6 +82,7 @@ $lang->cmd_minify_all = '全てのファイルを圧縮'; $lang->cmd_minify_common = '共通のファイルを圧縮'; $lang->cmd_minify_none = '圧縮されません'; $lang->about_minify_scripts = 'コアとすべてのモジュールに含まれたCSS、JSファイルを自動的に圧縮(minify)して配信します。'; +$lang->use_gzip = 'gzip 圧縮'; $lang->delay_session = 'セッションの開始を遅延'; $lang->about_delay_session = 'Varnishなどのプロキシキャッシュサーバ使用時のパフォーマンスを向上させるために、ログインしていないユーザーには、認証セッションを付与しません。
    このオプションを選択した場合、訪問者数とヒット集計が正確でない場合があります。'; $lang->sftp = 'SFTP使用'; @@ -193,5 +195,5 @@ $lang->sitelock_whitelist = '接近許可IP'; $lang->sitelock_title = '案内文タイトル'; $lang->sitelock_message = '案内文内容'; $lang->sitelock_message_help = 'HTMLタグを使用できます。'; -$lang->sitelock_warning_whitelist = 'ここに管理者のIPを必ず記入てください。
    もし接近が遮断された場合、\'./files/config/db.config.php\' ファイルから `\'use_sitelock\' => \'Y\'`を `\'use_sitelock\' => \'N\'`へ変更すれば遮断が解除できます。
    サイトロックの設計ファイルの場所は、\'./commo/tpl/sitelock.html\' です。'; +$lang->sitelock_warning_whitelist = 'ここに管理者のIPを必ず記入てください。'; $lang->your_ip = '接続したIP'; diff --git a/modules/admin/lang/ko.php b/modules/admin/lang/ko.php index 9a64da350..f25bbd657 100644 --- a/modules/admin/lang/ko.php +++ b/modules/admin/lang/ko.php @@ -1,7 +1,8 @@ admin = '관리자'; -$lang->subtitle_primary = '기본'; -$lang->subtitle_advanced = '고급'; +$lang->subtitle_primary = '기본 설정'; +$lang->subtitle_security = '보안 설정'; +$lang->subtitle_advanced = '고급 설정'; $lang->subtitle_etc = '기타'; $lang->current_state = '현황'; $lang->latest_documents = '최근 글'; @@ -81,8 +82,10 @@ $lang->cmd_minify_all = '모든 파일을 압축'; $lang->cmd_minify_common = '공통 파일만 압축'; $lang->cmd_minify_none = '압축하지 않음'; $lang->about_minify_scripts = '코어와 모든 모듈에 포함된 CSS, JS 파일들을 자동으로 압축(minify)하여 전송합니다.'; +$lang->use_gzip = 'gzip 압축'; $lang->delay_session = '세션 시작 지연'; $lang->about_delay_session = 'Varnish 등의 프록시 캐싱 서버 사용시 성능 개선을 위해, 로그인하지 않은 사용자에게는 인증 세션을 부여하지 않습니다.
    이 옵션을 선택할 경우 방문자 수 및 조회수 집계가 정확하게 이루어지지 않을 수 있습니다.'; +$lang->msg_invalid_default_url = '기본 URL이 올바르지 않습니다.'; $lang->sftp = 'SFTP 사용'; $lang->ftp_get_list = '목록 가져오기'; $lang->ftp_remove_info = 'FTP 정보 삭제'; @@ -198,7 +201,7 @@ $lang->sitelock_whitelist = '접근 허용 IP'; $lang->sitelock_title = '안내문 제목'; $lang->sitelock_message = '안내문 내용'; $lang->sitelock_message_help = 'HTML 태그를 사용할 수 있습니다.'; -$lang->sitelock_warning_whitelist = '이곳에 관리자의 IP를 반드시 포함해야 합니다.
    만약 접근이 차단된 경우 \'./files/config/db.config.php\' 파일에서 `\'use_sitelock\' => \'Y\'`를 `\'use_sitelock\' => \'N\'`으로 변경하여 차단을 해제할 수 있습니다.
    사이트 잠금 디자인 파일의 위치는 \'./common/tpl/sitelock.html\' 입니다.'; +$lang->sitelock_warning_whitelist = '사이트 잠금 사용시 관리자의 IP가 반드시 이 목록에 포함되어야 합니다.'; $lang->your_ip = '접속하신 IP'; $lang->sitelock_in_use = '사이트 잠금을 사용중입니다.'; $lang->about_sitelock_in_use = '관리자 페이지에서 허용한 IP를 제외한 사용자는 접속할 수 없습니다.'; diff --git a/modules/admin/tpl/config_advanced.html b/modules/admin/tpl/config_advanced.html new file mode 100644 index 000000000..979294ccb --- /dev/null +++ b/modules/admin/tpl/config_advanced.html @@ -0,0 +1,91 @@ + +
    +

    {$XE_VALIDATOR_MESSAGE}

    +
    +
    +
    + + + +
    + +
    + +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + +
    +

    {$lang->about_delay_session}

    +
    +
    +
    + +
    + + +
    +
    +
    + +
    + + + +
    +

    {$lang->about_minify_scripts}

    +
    +
    +
    + +
    + + +
    +
    +
    + +
    + +

    {$lang->about_ipaddress_input}

    +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/modules/admin/tpl/config_ftp.html b/modules/admin/tpl/config_ftp.html index b997ae87f..39f7c7e31 100644 --- a/modules/admin/tpl/config_ftp.html +++ b/modules/admin/tpl/config_ftp.html @@ -41,7 +41,7 @@
    -

    {$lang->subtitle_advanced}

    @@ -199,12 +199,18 @@ -
    +
    +
    + +
    + +
    +
    diff --git a/modules/point/lang/ko.php b/modules/point/lang/ko.php index 38a780bba..a64c2163f 100644 --- a/modules/point/lang/ko.php +++ b/modules/point/lang/ko.php @@ -59,3 +59,6 @@ $lang->search_target_list['last_login'] = '최근 로그인 일시'; $lang->search_target_list['last_login_more'] = '최근 로그인 일시(이상)'; $lang->search_target_list['last_login_less'] = '최근 로그인 일시(이하)'; $lang->search_target_list['extra_vars'] = '사용자 정의'; +$lang->no_point_date = '댓글작성 포인트 기간'; +$lang->about_no_point_date = '설정한 날자보다 이전에 게시된 글에 대해서 댓글을 작성하여도 포인트를 지급하지 않습니다. (단위는 일단위)'; +$lang->day_ago = '일전'; diff --git a/modules/point/point.admin.controller.php b/modules/point/point.admin.controller.php index ecfce13f6..4727e7242 100644 --- a/modules/point/point.admin.controller.php +++ b/modules/point/point.admin.controller.php @@ -24,6 +24,7 @@ class pointAdminController extends point $config = $oModuleModel->getModuleConfig('point'); // Arrange variables $args = Context::getRequestVars(); + $oModuleController = getController('module'); //if module IO config is off if($args->able_module == 'Y') @@ -64,7 +65,10 @@ class pointAdminController extends point // Check if reading a document is not allowed if($args->disable_read_document == 'Y') $config->disable_read_document = 'Y'; else $config->disable_read_document = 'N'; - + + //check is reading a document is not regdate setting + $config->no_point_date = (int)$args->no_point_date; + $oMemberModel = getModel('member'); $group_list = $oMemberModel->getGroups(); @@ -114,11 +118,9 @@ class pointAdminController extends point $config->able_module = 'N'; // Delete Triggers - $oModuleController = getController('module'); $oModuleController->deleteModuleTriggers('point'); } // Save - $oModuleController = getController('module'); $oModuleController->insertModuleConfig('point', $config); $this->setMessage('success_updated'); diff --git a/modules/point/point.controller.php b/modules/point/point.controller.php index 42788561a..9fef9fe5f 100644 --- a/modules/point/point.controller.php +++ b/modules/point/point.controller.php @@ -234,10 +234,18 @@ class pointController extends point $document_srl = $obj->document_srl; $oDocumentModel = getModel('document'); $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl)) return new Object(); // Get the point module information $oModuleModel = getModel('module'); $config = $oModuleModel->getModuleConfig('point'); + if($config->no_point_date > 0) + { + if($oDocument->get('regdate') < date('YmdHis', strtotime('-'.$config->no_point_date.' day'))) + { + return new Object(); + } + } + if(!$oDocument->isExists() || abs($oDocument->get('member_srl'))==abs($member_srl)) return new Object(); + $module_config = $oModuleModel->getModulePartConfig('point', $module_srl); // Get the points of the member $oPointModel = getModel('point'); diff --git a/modules/point/tpl/config.html b/modules/point/tpl/config.html index 45f59a843..5d6720d87 100644 --- a/modules/point/tpl/config.html +++ b/modules/point/tpl/config.html @@ -91,6 +91,13 @@ {$lang->about_disable_read_document}
    +
    + +
    + {$lang->day_ago} +

    {$lang->about_no_point_date}

    +
    +
    From 93ec98844a3f2b65fba485d798d80b35b7c441a3 Mon Sep 17 00:00:00 2001 From: qw5414 Date: Tue, 9 Feb 2016 02:57:45 +0900 Subject: [PATCH 060/189] =?UTF-8?q?=EC=96=B8=EC=96=B4=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=9D=B4=20=EC=97=86=EB=8A=94=20=EB=AC=B8=EC=A0=9C=EC=A0=90=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/module/lang/en.php | 1 + modules/module/lang/es.php | 1 + modules/module/lang/fr.php | 1 + modules/module/lang/ja.php | 1 + modules/module/lang/ko.php | 1 + modules/module/lang/ru.php | 1 + modules/module/lang/tr.php | 1 + modules/module/lang/vi.php | 1 + modules/module/lang/zh-CN.php | 1 + modules/module/lang/zh-TW.php | 1 + 10 files changed, 10 insertions(+) diff --git a/modules/module/lang/en.php b/modules/module/lang/en.php index 1351e086e..2ce61da96 100644 --- a/modules/module/lang/en.php +++ b/modules/module/lang/en.php @@ -88,6 +88,7 @@ $lang->about_use_category = 'If checked, the category function will be enabled.' $lang->about_list_count = 'You can limit the number of article to show on one page. The default is 20.'; $lang->about_search_list_count = 'You may set the number of articles to be exposed when you use search or category function. (default is 20)'; $lang->about_page_count = 'You can set the number of page links to move pages in a bottom of the page. (default is 10)'; +$lang->about_mobile_page_count = 'You can set the number of page links to move pages in a bottom of the page. (default is 5)'; $lang->about_admin_id = 'You can grant a manager to have all permissions to the module.'; $lang->about_grant_deatil = 'Registered users mean users who signed-up to the virtual sites (e.g., cafeXE).'; $lang->about_module = 'Rhymix consists of modules except the basic library. [Module Manage] module will show all installed modules and help you to manage them.'; diff --git a/modules/module/lang/es.php b/modules/module/lang/es.php index 69a9504c3..3dcaae354 100644 --- a/modules/module/lang/es.php +++ b/modules/module/lang/es.php @@ -52,6 +52,7 @@ $lang->about_use_category = 'Si selecciona esta opción, la función de categor $lang->about_list_count = 'Usted puede definir el número límite de los documentos a mostrar en una página.(Predefinido es 20)'; $lang->about_search_list_count = 'Usted puede configurar el número de artículos que se exponen cuando se utiliza la función de búsqueda o categoría. (Por defecto es 20)'; $lang->about_page_count = 'Usted puede definir el número de página enlazada para mover páginas en un botón de la página.(Predefinido es 10)'; +$lang->about_mobile_page_count = 'Usted puede definir el número de página enlazada para mover páginas en un botón de la página.(Predefinido es 5)'; $lang->about_admin_id = 'Usted puede definir el administrador de atribuciones superiores al módulo.\\n Usted puede asignar múltiples IDs.'; $lang->about_grant_deatil = '가입한 사용자는 cafeXE등 분양형 가상 사이트에 가입을 한 로그인 사용자를 의미합니다'; $lang->about_module = 'Rhymix consiste de módulos excepto la librería básica. diff --git a/modules/module/lang/fr.php b/modules/module/lang/fr.php index 604b765be..13e8fab09 100644 --- a/modules/module/lang/fr.php +++ b/modules/module/lang/fr.php @@ -52,6 +52,7 @@ $lang->about_use_category = 'Cochez pour utiliser la fonction de catégorie, .'; $lang->about_list_count = 'Vous pouvez configurer combien d\'articles soient exposés dans une page.(20 par défaut)'; $lang->about_search_list_count = 'Vous pouvez configurer combien d\'articles soient exposés quand vous utilisez la fonction de recherche ou de catégorie. (20 par défaut)'; $lang->about_page_count = 'Vous pouvez configurer combien de liens pour les Pages à Bouger en bas de chaque page.(10 par défaut)'; +$lang->about_mobile_page_count = 'Vous pouvez configurer combien de liens pour les Pages à Bouger en bas de chaque page.(5 par défaut)'; $lang->about_admin_id = 'Vous pouvez désigner un directeur qui aura tous les permissions sur le module.\\nVous pouvez entrer plusieurs compte en utilisant.'; $lang->about_grant_deatil = '가입한 사용자는 cafeXE등 분양형 가상 사이트에 가입을 한 로그인 사용자를 의미합니다'; $lang->about_module = 'Rhymix se compose des modules sauf la bibliothèque fondamental. diff --git a/modules/module/lang/ja.php b/modules/module/lang/ja.php index d4098c7ae..4b0d74776 100644 --- a/modules/module/lang/ja.php +++ b/modules/module/lang/ja.php @@ -86,6 +86,7 @@ $lang->about_use_category = 'チェックを入れるとカテゴリ機能を使 $lang->about_list_count = '1ページ当たりに表示される書き込み数を指定できます(デフォルト20個)。'; $lang->about_search_list_count = '検索、カテゴリ選択などを行う場合に表示する書き込みの数を指定できます。(デフォルトは20件 )'; $lang->about_page_count = 'リスト下部、ページ移動可能なリンク数を指定できます(デフォルト10個)。'; +$lang->about_mobile_page_count = 'リスト下部、ページ移動可能なリンク数を指定できます(デフォルト5個)。'; $lang->about_admin_id = '該当モジュールに対して最高権限を持つ管理者を指定することができます。'; $lang->about_grant_deatil = '登録ユーザーとは、cafeXEなど分譲型バーチャル(Virtual)サイトに登録した、ログインユーザーを意味します。'; $lang->about_module = 'Rhymixは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。'; diff --git a/modules/module/lang/ko.php b/modules/module/lang/ko.php index 32068dddc..3223b1034 100644 --- a/modules/module/lang/ko.php +++ b/modules/module/lang/ko.php @@ -86,6 +86,7 @@ $lang->about_use_category = '선택하면 분류 기능을 사용할 수 있습 $lang->about_list_count = '한 페이지에 표시될 글 수를 지정할 수 있습니다. (기본 20개)'; $lang->about_search_list_count = '검색, 카테고리 선택 등을 할 경우 표시될 글 수를 지정할 수 있습니다. (기본 20개)'; $lang->about_page_count = '목록 하단, 페이지를 이동하는 링크 수를 지정할 수 있습니다. (기본 10개)'; +$lang->about_mobile_page_count = '목록 하단, 페이지를 이동하는 링크 수를 지정할 수 있습니다. (기본 5개)'; $lang->about_admin_id = '해당 모듈에 대해 최고 권한을 가지는 관리자를 지정할 수 있습니다.'; $lang->about_grant_deatil = '가입한 사용자는 cafeXE 등 분양형 가상 사이트에 가입을 한 로그인 사용자를 의미합니다.'; $lang->about_module = 'Rhymix는 기본 라이브러리를 제외한 나머지는 모두 모듈로 구성되어 있습니다. 모듈 관리 모듈은 설치된 모든 모듈을 보여주고 관리를 돕습니다.'; diff --git a/modules/module/lang/ru.php b/modules/module/lang/ru.php index 647bbc236..1860b73c0 100644 --- a/modules/module/lang/ru.php +++ b/modules/module/lang/ru.php @@ -59,6 +59,7 @@ $lang->about_use_category = 'Если выбрано, функция катег $lang->about_list_count = 'Вы можете установить лимит показа статей на страницу. (по умолчанию: 20)'; $lang->about_search_list_count = '검색 또는 카테고리 선택등을 할 경우 표시될 글의 수를 지정할 수 있습니다. 기본(20개)'; $lang->about_page_count = 'Вы можете установить число страниц внизу. (по умолчанию: 10)'; +$lang->about_mobile_page_count = 'Вы можете установить число страниц внизу. (по умолчанию: 5)'; $lang->about_admin_id = 'Вы можете разрешить менеджеру иметь полные права доступа к этому модулю.\\nВы можете ввести несколько ID, используя '; $lang->about_grant_deatil = '가입한 사용자는 cafeXE등 분양형 가상 사이트에 가입을 한 로그인 사용자를 의미합니다'; $lang->about_module = 'Rhymix состоит из модулей, за исключением базовой библиотеки. diff --git a/modules/module/lang/tr.php b/modules/module/lang/tr.php index a2baf28d9..7c96bc8e9 100644 --- a/modules/module/lang/tr.php +++ b/modules/module/lang/tr.php @@ -74,6 +74,7 @@ $lang->about_use_category = 'İşaretlediğiniz taktirde, kategori özelliği et $lang->about_list_count = 'Sayfada gösterilecek makalelerin sayı üstsınırını ayarlayabilirsiniz.(varsayılan : 20)'; $lang->about_search_list_count = 'Kategori veya arama özelliğini kullanırken gösterilecek makalelerin sayısını ayarlayabilirsiniz. (varsayılan : 20)'; $lang->about_page_count = 'Sayfanın alt kısmında sayfa geçiş linklerinin sayısını ayarlayabilirsiniz.(varsayılan : 10)'; +$lang->about_mobile_page_count = 'Sayfanın alt kısmında sayfa geçiş linklerinin sayısını ayarlayabilirsiniz.(varsayılan : 5)'; $lang->about_admin_id = 'Modüle tam yetkisi olan bir yönetici atayabilirsiniz.'; $lang->about_grant_deatil = 'Kayıtlı kullanıcı, sanal sitelere (örn., cafeXE) kayıt olmuş kullanıcı demektir .'; $lang->about_module = 'Rhymix, temel kitaplık dışında, modüllerden oluşmaktadır. diff --git a/modules/module/lang/vi.php b/modules/module/lang/vi.php index 9a93599fe..bfdb3213b 100644 --- a/modules/module/lang/vi.php +++ b/modules/module/lang/vi.php @@ -72,6 +72,7 @@ $lang->about_use_category = 'Nếu chon, chức năng thể loại sẽ hoạt $lang->about_list_count = 'Bạn có thể giới hạn bài viết hiển thị trên một trang.(Mặc định là 20)'; $lang->about_search_list_count = 'Bạn có thể đặt giới hạn số bài viết sẽ hiển thị khi tìm kiếm hay chọn thể loại. (Mặc định là 20)'; $lang->about_page_count = 'bạn có thể giới hạn số trang liên kết hiển thị phía dưới.(Mặc định là 10)'; +$lang->about_mobile_page_count = 'bạn có thể giới hạn số trang liên kết hiển thị phía dưới.(Mặc định là 5)'; $lang->about_admin_id = 'Bạn có thể đặt quyền hạn cho người sử dụng khi truy cập tới Module.'; $lang->about_grant_deatil = 'Khi thành viên dăng kí tại trang chủ, nghĩa là họ cũng là thành viên của những trang khác (Ví dụ: cafeXE,...).'; $lang->about_module = 'Khu vực Module trong Rhymix ngoại trừ Library là tại [Module Manage]. Tất cả những Module đang có sẽ hiển thị, giúp bạn quản lý một cách dễ dàng.'; diff --git a/modules/module/lang/zh-CN.php b/modules/module/lang/zh-CN.php index 2e37157c8..ae9180c10 100644 --- a/modules/module/lang/zh-CN.php +++ b/modules/module/lang/zh-CN.php @@ -73,6 +73,7 @@ $lang->about_use_category = '选择此项可以使用分类功能。'; $lang->about_list_count = '可以指定每页显示的主题数。(默认为20个)'; $lang->about_search_list_count = '可以指定搜索或选择分类时每页要显示的帖子数(默认为20个)。'; $lang->about_page_count = '可以指定显示在目录下方的页面数(默认为10个)。 '; +$lang->about_mobile_page_count = '可以指定显示在目录下方的页面数(默认为5个)。 '; $lang->about_admin_id = '可以对该模块指定拥有最高管理权限的管理员。'; $lang->about_grant_deatil = '子站会员是指注册到子站点已在线的用户.'; $lang->about_module = '除基本library以外Rhymix全部由模块组成。 模块管理中列出所有已安装的模块,因此易于管理。'; diff --git a/modules/module/lang/zh-TW.php b/modules/module/lang/zh-TW.php index da89d9d9a..cf707b710 100644 --- a/modules/module/lang/zh-TW.php +++ b/modules/module/lang/zh-TW.php @@ -78,6 +78,7 @@ $lang->about_use_category = '選擇此項可以使用分類功能。'; $lang->about_list_count = '可以指定每頁顯示的主題數。(預設為 20 個)'; $lang->about_search_list_count = '可以指定搜尋或選擇分類時,每頁要顯示的文章數(預設為 20 個)。'; $lang->about_page_count = '可以指定顯示在清單下方的頁面數(預設為 10 個)。 '; +$lang->about_mobile_page_count = '可以指定顯示在清單下方的頁面數(預設為 5 個)。 '; $lang->about_admin_id = '可以對該模組指定最高管理權限。'; $lang->about_grant_deatil = '已註冊的用戶是指在虛擬網站註冊的用戶'; $lang->about_module = '除基本函式庫以外 Rhymix 全部由模組組成。 模組管理中列出所有已安裝的模組,因此易於管理。'; From 07ebf981a6069afcac6a2fdcb1f592ff48b77a0b Mon Sep 17 00:00:00 2001 From: qw5414 Date: Tue, 9 Feb 2016 03:59:12 +0900 Subject: [PATCH 061/189] =?UTF-8?q?RhymiX=20=EC=84=A4=EC=B9=98=EC=8B=9C=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=EC=8B=9C=20=EC=BA=A1?= =?UTF-8?q?=EC=B0=A8=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/addon/addon.admin.controller.php | 3 ++- modules/addon/addon.class.php | 5 +++++ modules/addon/queries/insertAddon.xml | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/addon/addon.admin.controller.php b/modules/addon/addon.admin.controller.php index 1d0f54626..9ae4a32c9 100644 --- a/modules/addon/addon.admin.controller.php +++ b/modules/addon/addon.admin.controller.php @@ -227,7 +227,7 @@ class addonAdminController extends addonController * @param string $isUsed Whether to use * @return Object */ - function doInsert($addon, $site_srl = 0, $gtype = 'site', $isUsed = 'N') + function doInsert($addon, $site_srl = 0, $gtype = 'site', $isUsed = 'N', $extra_vars) { $args = new stdClass; $args->addon = $addon; @@ -236,6 +236,7 @@ class addonAdminController extends addonController { return executeQuery('addon.insertAddon', $args); } + $args->extra_vars = serialize($extra_vars); $args->site_srl = $site_srl; return executeQuery('addon.insertSiteAddon', $args); } diff --git a/modules/addon/addon.class.php b/modules/addon/addon.class.php index 99b73086c..bb605cd77 100644 --- a/modules/addon/addon.class.php +++ b/modules/addon/addon.class.php @@ -25,6 +25,11 @@ class addon extends ModuleObject $oAddonController->doInsert('resize_image', 0, 'site', 'Y'); $oAddonController->doInsert('openid_delegation_id'); $oAddonController->doInsert('point_level_icon'); + $args = new stdClass(); + $args->xe_validator_id = 'module/addon/tpl/setup_addon/1'; + $args->apply_signup = 'apply'; + $args->xe_run_method = 'run_selected'; + $oAddonController->doInsert('captcha_member', 0, 'site', 'Y', $args); $oAddonController->makeCacheFile(0); return new Object(); diff --git a/modules/addon/queries/insertAddon.xml b/modules/addon/queries/insertAddon.xml index 1b4cf2d99..c0684b2bc 100644 --- a/modules/addon/queries/insertAddon.xml +++ b/modules/addon/queries/insertAddon.xml @@ -6,5 +6,6 @@ + From f038091b37e5e097042eb46902a61005abc1ad35 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 9 Feb 2016 09:44:19 +0900 Subject: [PATCH 062/189] Fix #238 installer freezing in Chrome --- modules/install/lang/en.php | 1 + modules/install/lang/ko.php | 1 + modules/install/tpl/db_config.html | 2 +- modules/install/tpl/js/install.js | 17 +++++++++++++---- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/modules/install/lang/en.php b/modules/install/lang/en.php index e14213872..a90b02f5c 100644 --- a/modules/install/lang/en.php +++ b/modules/install/lang/en.php @@ -82,6 +82,7 @@ $lang->ssl_options['optional'] = 'Optional'; $lang->ssl_options['always'] = 'Always'; $lang->about_database_file = 'Sqlite saves data in a file. Location of the database file should be unreachable by web
    Data file should be inside the permission of 777.'; $lang->success_installed = 'Installation has been completed.'; +$lang->msg_db_checking = 'Checking...'; $lang->msg_installing = 'Installing...'; $lang->msg_cannot_proc = 'Installation environment is not proper to proceed.'; $lang->msg_already_installed = 'Rhymix is already installed.'; diff --git a/modules/install/lang/ko.php b/modules/install/lang/ko.php index b403afeda..c61d02dfd 100644 --- a/modules/install/lang/ko.php +++ b/modules/install/lang/ko.php @@ -83,6 +83,7 @@ $lang->ssl_options['always'] = '항상 사용'; $lang->about_database_file = 'Sqlite는 파일에 데이터를 저장합니다. 데이터베이스 파일의 위치를 웹에서 접근할 수 없는 곳으로 해야 합니다.
    데이터 파일은 777퍼미션 설정된 곳으로 지정해주세요.'; $lang->success_installed = '설치가 되었습니다.'; $lang->msg_cannot_proc = '설치 환경이 갖춰지지 않아 요청을 실행할 수가 없습니다.'; +$lang->msg_db_checking = '확인 중입니다...'; $lang->msg_installing = '설치 중입니다...'; $lang->msg_already_installed = '이미 설치가 되어 있습니다.'; $lang->msg_dbconnect_failed = 'DB접속 오류가 발생하였습니다. DB정보를 다시 확인해주세요.'; diff --git a/modules/install/tpl/db_config.html b/modules/install/tpl/db_config.html index 259230de2..901e0e332 100644 --- a/modules/install/tpl/db_config.html +++ b/modules/install/tpl/db_config.html @@ -59,7 +59,7 @@ « {$lang->cmd_back}
    - +
    diff --git a/modules/install/tpl/js/install.js b/modules/install/tpl/js/install.js index 7146adcb8..76943a8a7 100644 --- a/modules/install/tpl/js/install.js +++ b/modules/install/tpl/js/install.js @@ -37,11 +37,20 @@ jQuery(function($){ } }); } + if($("#task-db-select").size()) { + $("#task-db-select").parents("form").on("submit", function() { + setTimeout(function() { + $("#task-db-select").text($("#task-db-select").data("checking")); + $("#task-db-select").prop("disabled", true); + }, 100); + }); + } if($("#task-complete-install").size()) { - $("#task-complete-install").click(function() { - $("#task-complete-install").text($("#task-complete-install").data("installing")); - $("#task-complete-install").prop("disabled", true); - $(window).on("beforeunload", function() { return ""; }); + $("#task-complete-install").parents("form").on("submit", function() { + setTimeout(function() { + $("#task-complete-install").text($("#task-complete-install").data("installing")); + $("#task-complete-install").prop("disabled", true); + }, 100); }); } }); From 95f8bf9a438c49c7f764d722952e83fe7d4c7de5 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Tue, 9 Feb 2016 10:55:26 +0900 Subject: [PATCH 063/189] Also use system_message template for site lock --- classes/context/Context.class.php | 38 ++++++++++++++----- modules/message/lang/ko.php | 1 + .../message/skins/xedition/css/message.css | 1 + .../skins/xedition/system_message.html | 13 +++++-- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 0ec14a3fe..1ed458a9a 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -242,12 +242,6 @@ class Context // Load system configuration. $this->loadDBInfo(); - // If the site is locked, display the locked page. - if(config('lock.locked')) - { - self::enforceSiteLock(); - } - // If Rhymix is installed, get virtual site information. if(self::isInstalled()) { @@ -370,7 +364,7 @@ class Context } } } - + // set locations for javascript use $current_url = $request_uri = self::getRequestUri(); if ($_SERVER['REQUEST_METHOD'] == 'GET' && $this->get_vars) @@ -390,6 +384,12 @@ class Context } self::set('current_url', $current_url); self::set('request_uri', $request_uri); + + // If the site is locked, display the locked page. + if(config('lock.locked')) + { + self::enforceSiteLock(); + } } /** @@ -1429,6 +1429,18 @@ class Context */ private static function enforceSiteLock() { + // Allow if the current user is logged in as administrator, or trying to log in. + $logged_info = self::get('logged_info'); + if ($logged_info && $logged_info->is_admin === 'Y') + { + return; + } + elseif (self::get('act') === 'procMemberLogin') + { + return; + } + + // Allow if the current user is in the list of allowed IPs. $allowed_list = config('lock.allow'); foreach ($allowed_list as $allowed_ip) { @@ -1438,18 +1450,26 @@ class Context } } + // Set headers and constants for backward compatibility. + header('HTTP/1.1 503 Service Unavailable'); define('_XE_SITELOCK_', TRUE); define('_XE_SITELOCK_TITLE_', config('lock.title')); define('_XE_SITELOCK_MESSAGE_', config('lock.message')); - header('HTTP/1.1 503 Service Unavailable'); + // Load the sitelock template. if(FileHandler::exists(RX_BASEDIR . 'common/tpl/sitelock.user.html')) { include RX_BASEDIR . 'common/tpl/sitelock.user.html'; } else { - include RX_BASEDIR . 'common/tpl/sitelock.html'; + $oMessageObject = getView('message'); + $oMessageObject->setHttpStatusCode(503); + $oMessageObject->setError(-1); + $oMessageObject->setMessage(config('lock.title')); + $oMessageObject->dispMessage(); + $oModuleHandler = new ModuleHandler; + $oModuleHandler->displayContent($oMessageObject); } exit; } diff --git a/modules/message/lang/ko.php b/modules/message/lang/ko.php index f5ed11d29..3ad2d40b6 100644 --- a/modules/message/lang/ko.php +++ b/modules/message/lang/ko.php @@ -1,3 +1,4 @@ message = '오류 표시'; $lang->about_skin = '오류 메시지용 스킨을 지정할 수 있습니다.'; +$lang->msg_administrator_login = '관리자 로그인'; diff --git a/modules/message/skins/xedition/css/message.css b/modules/message/skins/xedition/css/message.css index 98af60058..df22fe434 100644 --- a/modules/message/skins/xedition/css/message.css +++ b/modules/message/skins/xedition/css/message.css @@ -18,6 +18,7 @@ #access .login-header { margin: 30px; padding: 0; } #access .login-header h1 { margin: 0; padding: 0; font-size: 16px; line-height: 20px; color:#f44336; font-weight:normal; } +#access .login-header .message { border: 0; border-radius: 0; padding: 0; margin: 20px 0 0 0; } #access .login-body { margin: 30px; padding: 0; } #access .login-body p { margin: 0; padding: 0; } diff --git a/modules/message/skins/xedition/system_message.html b/modules/message/skins/xedition/system_message.html index e9d8e181c..060154fef 100644 --- a/modules/message/skins/xedition/system_message.html +++ b/modules/message/skins/xedition/system_message.html @@ -5,6 +5,7 @@
    -

    +

    -
    - -
    diff --git a/modules/layout/tpl/layout_modify.html b/modules/layout/tpl/layout_modify.html index 71b925a05..279f8196a 100644 --- a/modules/layout/tpl/layout_modify.html +++ b/modules/layout/tpl/layout_modify.html @@ -1,5 +1,3 @@ {$content} - -
    diff --git a/modules/member/tpl/default_config.html b/modules/member/tpl/default_config.html index 595d52b6f..d04032437 100644 --- a/modules/member/tpl/default_config.html +++ b/modules/member/tpl/default_config.html @@ -80,5 +80,3 @@ - -
    diff --git a/modules/member/tpl/design_config.html b/modules/member/tpl/design_config.html index f1f37e83f..a656e75fb 100644 --- a/modules/member/tpl/design_config.html +++ b/modules/member/tpl/design_config.html @@ -50,5 +50,3 @@ - -
    diff --git a/modules/member/tpl/group_list.html b/modules/member/tpl/group_list.html index 410ca70c6..93e6305c7 100644 --- a/modules/member/tpl/group_list.html +++ b/modules/member/tpl/group_list.html @@ -103,5 +103,3 @@

    {$lang->add_group_image_mark}: {$lang->link_file_box}

    - -
    diff --git a/modules/member/tpl/insert_member.html b/modules/member/tpl/insert_member.html index 2d39c5305..0991f6adc 100644 --- a/modules/member/tpl/insert_member.html +++ b/modules/member/tpl/insert_member.html @@ -129,5 +129,3 @@ }); })(jQuery); - -
    diff --git a/modules/member/tpl/login_config.html b/modules/member/tpl/login_config.html index 7daba7170..4a7d811d4 100644 --- a/modules/member/tpl/login_config.html +++ b/modules/member/tpl/login_config.html @@ -62,5 +62,3 @@ jQuery(function($){ }).change(); }); - -
    diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index 59380a2ac..921a188b3 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -202,5 +202,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/member/tpl/signup_config.html b/modules/member/tpl/signup_config.html index d4da6731f..3694ba5b6 100644 --- a/modules/member/tpl/signup_config.html +++ b/modules/member/tpl/signup_config.html @@ -198,5 +198,3 @@ #userDefine{max-width:60%;margin-left:-30%} } - -
    diff --git a/modules/menu/tpl/sitemap.html b/modules/menu/tpl/sitemap.html index 1528c6204..f5fa8a25b 100644 --- a/modules/menu/tpl/sitemap.html +++ b/modules/menu/tpl/sitemap.html @@ -352,8 +352,6 @@ - - @@ -4122,6 +4120,3 @@ jQuery.extend({ }); //]]> - -
    -
    diff --git a/modules/module/tpl/adminFileBox.html b/modules/module/tpl/adminFileBox.html index ff209ea07..7173737a2 100644 --- a/modules/module/tpl/adminFileBox.html +++ b/modules/module/tpl/adminFileBox.html @@ -116,5 +116,3 @@ - -
    diff --git a/modules/module/tpl/category_list.html b/modules/module/tpl/category_list.html index 4a25830aa..91c15adf3 100644 --- a/modules/module/tpl/category_list.html +++ b/modules/module/tpl/category_list.html @@ -58,5 +58,3 @@ - -
    diff --git a/modules/module/tpl/category_update_form.html b/modules/module/tpl/category_update_form.html index deb204e85..a91f3ad73 100644 --- a/modules/module/tpl/category_update_form.html +++ b/modules/module/tpl/category_update_form.html @@ -20,4 +20,3 @@ -
    diff --git a/modules/module/tpl/module_list.html b/modules/module/tpl/module_list.html index fcd075303..bbb989d8d 100644 --- a/modules/module/tpl/module_list.html +++ b/modules/module/tpl/module_list.html @@ -59,6 +59,4 @@ jQuery(function($){ $('.dsTg>tbody>tr[data-type1]').prependTo('tbody'); $('.dsTg>tbody>tr[data-type2]').prependTo('tbody'); }); - - -
    + \ No newline at end of file diff --git a/modules/point/tpl/config.html b/modules/point/tpl/config.html index da251cb0e..b9a79cb68 100644 --- a/modules/point/tpl/config.html +++ b/modules/point/tpl/config.html @@ -190,6 +190,4 @@ jQuery(function($){ } }); }); - - -
    + \ No newline at end of file diff --git a/modules/point/tpl/member_list.html b/modules/point/tpl/member_list.html index 0228696fc..447944c6d 100644 --- a/modules/point/tpl/member_list.html +++ b/modules/point/tpl/member_list.html @@ -145,5 +145,3 @@ - -
    diff --git a/modules/point/tpl/module_config.html b/modules/point/tpl/module_config.html index 5f30be3f7..07ee02cba 100644 --- a/modules/point/tpl/module_config.html +++ b/modules/point/tpl/module_config.html @@ -37,5 +37,3 @@ - -
    diff --git a/modules/poll/tpl/poll_list.html b/modules/poll/tpl/poll_list.html index 91e8f4aae..b0aae9a12 100644 --- a/modules/poll/tpl/poll_list.html +++ b/modules/poll/tpl/poll_list.html @@ -124,5 +124,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/rss/tpl/rss_admin_index.html b/modules/rss/tpl/rss_admin_index.html index 4342492c6..9055e894e 100644 --- a/modules/rss/tpl/rss_admin_index.html +++ b/modules/rss/tpl/rss_admin_index.html @@ -122,5 +122,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/spamfilter/tpl/footer.html b/modules/spamfilter/tpl/footer.html index 30961915b..e69de29bb 100644 --- a/modules/spamfilter/tpl/footer.html +++ b/modules/spamfilter/tpl/footer.html @@ -1 +0,0 @@ -
    diff --git a/modules/trash/tpl/trash_list.html b/modules/trash/tpl/trash_list.html index 04b66db88..802f5b69e 100644 --- a/modules/trash/tpl/trash_list.html +++ b/modules/trash/tpl/trash_list.html @@ -165,5 +165,3 @@ jQuery(function($){ }); }); - -
    diff --git a/modules/trash/tpl/trash_view.html b/modules/trash/tpl/trash_view.html index 64c29d652..b1292c1a9 100644 --- a/modules/trash/tpl/trash_view.html +++ b/modules/trash/tpl/trash_view.html @@ -75,4 +75,3 @@ -
    diff --git a/modules/widget/tpl/downloaded_widget_list.html b/modules/widget/tpl/downloaded_widget_list.html index 920ed0f10..d33afbe22 100644 --- a/modules/widget/tpl/downloaded_widget_list.html +++ b/modules/widget/tpl/downloaded_widget_list.html @@ -39,5 +39,3 @@ - -
    diff --git a/modules/widget/tpl/widget_generate_code.html b/modules/widget/tpl/widget_generate_code.html index c9e400ec9..044278e22 100644 --- a/modules/widget/tpl/widget_generate_code.html +++ b/modules/widget/tpl/widget_generate_code.html @@ -17,5 +17,3 @@

    - -

    From e85e6a5266cc1641d97670654584466a9d7deb0b Mon Sep 17 00:00:00 2001 From: bnu Date: Thu, 18 Feb 2016 18:06:53 +0900 Subject: [PATCH 179/189] version 1.8.16 --- config/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.inc.php b/config/config.inc.php index 775cd5b26..7d9a78dcf 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -29,7 +29,7 @@ define('__ZBXE__', __XE__); /** * Display XE's full version. */ -define('__XE_VERSION__', '1.8.15'); +define('__XE_VERSION__', '1.8.16'); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); From 3f604c7f591a56f298bd2a514d741eccf104c9d4 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 18 Feb 2016 20:10:08 +0900 Subject: [PATCH 180/189] Fix unit tests --- tests/unit/classes/ValidatorTest.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/unit/classes/ValidatorTest.php b/tests/unit/classes/ValidatorTest.php index c947ccfbd..de4202704 100644 --- a/tests/unit/classes/ValidatorTest.php +++ b/tests/unit/classes/ValidatorTest.php @@ -4,8 +4,15 @@ class ValidatorTest extends \Codeception\TestCase\Test { public function _before() { + $ob_level = ob_get_level(); + $oContext = Context::getInstance(); $oContext->init(); + + while (ob_get_level() > $ob_level) + { + ob_end_clean(); + } } public function testRequired() From 397a1e163b7689363370fc8d0f8b9e7a0a9bef00 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 19 Feb 2016 14:14:19 +0900 Subject: [PATCH 181/189] Fix #293 Incompatible use of set_to_get_vars in Context::set() --- classes/context/Context.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 6cbf5476a..4d444d157 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -1884,7 +1884,7 @@ class Context self::$_user_vars->{$key} = $val; self::$_instance->{$key} = $val; - if($set_to_get_vars) + if($set_to_get_vars || isset(self::$_instance->get_vars->{$key})) { if($val === NULL || $val === '') { From 9703b1268d61eda53c7269e97a98a0964eb1b9ea Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 19 Feb 2016 15:36:08 +0900 Subject: [PATCH 182/189] Fix multidimensional array handling in Context::_filterRequestVar() --- classes/context/Context.class.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 4d444d157..ba3fa0393 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -1377,10 +1377,21 @@ class Context if($do_stripslashes && version_compare(PHP_VERSION, '5.4.0', '<') && get_magic_quotes_gpc()) { - $result[$k] = stripslashes($result[$k]); + if (is_array($result[$k])) + { + array_walk_recursive($result[$k], function(&$val) { $val = stripslashes($val); }); + } + else + { + $result[$k] = stripslashes($result[$k]); + } } - if(!is_array($result[$k])) + if(is_array($result[$k])) + { + array_walk_recursive($result[$k], function(&$val) { $val = trim($val); }); + } + else { $result[$k] = trim($result[$k]); } From 8ee10fe9b291f0fbde4590d0446cbedf357342e4 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 19 Feb 2016 15:44:26 +0900 Subject: [PATCH 183/189] Fix division by zero during page calculation in DocumentModel --- modules/document/document.model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/document/document.model.php b/modules/document/document.model.php index c353a33a4..2420eebb0 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -621,7 +621,7 @@ class documentModel extends document $this->_setSearchOption($opt, $args, $query_id, $use_division); - if($sort_check->isExtraVars) + if($sort_check->isExtraVars || !$opt->list_count) { return 1; } From ec685c16069002a34a15fd8696e63eac95b45cf6 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 19 Feb 2016 16:36:37 +0900 Subject: [PATCH 184/189] Fix non-ASCII characters being incorrectly escaped in array keys --- classes/context/Context.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index ba3fa0393..d3f6914ea 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -1182,7 +1182,7 @@ class Context { continue; } - $key = htmlentities($key); + $key = escape($key); $val = $this->_filterRequestVar($key, $val); if($requestMethod == 'GET' && isset($_GET[$key])) @@ -1358,7 +1358,7 @@ class Context $result = array(); foreach($val as $k => $v) { - $k = htmlentities($k); + $k = escape($k); if($key === 'page' || $key === 'cpage' || substr_compare($key, 'srl', -3) === 0) { $result[$k] = !preg_match('/^[0-9,]+$/', $v) ? (int) $v : $v; From 0b53a1c115eab4c438d9b673e4f3911572a428be Mon Sep 17 00:00:00 2001 From: bjrambo Date: Fri, 19 Feb 2016 18:00:42 +0900 Subject: [PATCH 185/189] =?UTF-8?q?=EB=B3=80=EC=88=98=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94=20=EC=95=88=EB=90=9C=EA=B2=83=20=EC=B4=88=EA=B8=B0?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/document/document.admin.controller.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 6e624491b..8e6de0410 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -92,6 +92,7 @@ class documentAdminController extends document $obj = $oDocument->getObjectVars(); // ISSUE https://github.com/xpressengine/xe-core/issues/32 + $args_doc_origin = new stdClass(); $args_doc_origin->document_srl = $document_srl; $output_ori = executeQuery('document.getDocument', $args_doc_origin, array('content')); $obj->content = $output_ori->data->content; From de682772d425d37d98c4b1c82cb2022231c0049f Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 19 Feb 2016 18:05:31 +0900 Subject: [PATCH 186/189] Fix #297 member extra info on signup form --- modules/member/member.admin.view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index ca4318ce1..21e3d6ba8 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -631,7 +631,7 @@ class memberAdminView extends member } $replace = array_merge($extentionReplace, $replace); - $inputTag = preg_replace_callback('@%(\w+)%@', function($n) { return $replace[$n[1]]; }, $template); + $inputTag = preg_replace_callback('@%(\w+)%@', function($n) use($replace) { return $replace[$n[1]]; }, $template); if($extendForm->description) $inputTag .= '

    '.$extendForm->description.'

    '; From 68ceadb90c55b041f697da0a610ec216d8fd334a Mon Sep 17 00:00:00 2001 From: bnu Date: Fri, 19 Feb 2016 18:35:20 +0900 Subject: [PATCH 187/189] =?UTF-8?q?#1861=20=ED=9A=8C=EC=9B=90=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98=20=ED=95=AD=EB=AA=A9=EC=9D=84=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=A0=20=EB=95=8C=20=ED=9A=8C=EC=9B=90=20=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=98=90=EB=8A=94=20=EC=A0=95=EB=B3=B4=EC=88=98?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=ED=95=A0=20=EC=88=98=20=EC=97=86=EB=8A=94?= =?UTF-8?q?=20=EB=AC=B8=EC=A0=9C=20=EA=B3=A0=EC=B9=A8=20-=20@kijin=20?= =?UTF-8?q?=EB=8B=98=EC=9D=B4=20=EB=AC=B8=EC=A0=9C=EB=A5=BC=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=ED=95=B4=EC=A3=BC=EC=85=A8=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/member/member.admin.view.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index b25579b82..2409e225e 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -615,7 +615,7 @@ class memberAdminView extends member } $replace = array_merge($extentionReplace, $replace); - $inputTag = preg_replace_callback('@%(\w+)%@', function($n) { return $replace[$n[1]]; }, $template); + $inputTag = preg_replace_callback('@%(\w+)%@', function($n) use($replace) { return $replace[$n[1]]; }, $template); if($extendForm->description) $inputTag .= '

    '.$extendForm->description.'

    '; From c234634029620b3c959d24330829796bbae63427 Mon Sep 17 00:00:00 2001 From: bnu Date: Fri, 19 Feb 2016 18:36:00 +0900 Subject: [PATCH 188/189] version 1.8.17 --- config/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.inc.php b/config/config.inc.php index 7d9a78dcf..88c2e510d 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -29,7 +29,7 @@ define('__ZBXE__', __XE__); /** * Display XE's full version. */ -define('__XE_VERSION__', '1.8.16'); +define('__XE_VERSION__', '1.8.17'); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); From 055fd49e4062ce46341ce800f32a4df5050bf7ec Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Sun, 21 Feb 2016 15:08:55 +0900 Subject: [PATCH 189/189] Fix undefined array in ExtraItem class --- classes/extravar/Extravar.class.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/classes/extravar/Extravar.class.php b/classes/extravar/Extravar.class.php index 224de5255..3960d4d94 100644 --- a/classes/extravar/Extravar.class.php +++ b/classes/extravar/Extravar.class.php @@ -224,6 +224,10 @@ class ExtraItem { $values = explode(',', $value); } + else + { + $values = array($value); + } $values = array_values($values); for($i = 0, $c = count($values); $i < $c; $i++)