From 05a88d12deae141eaf961d6f810f7910a2acff5b Mon Sep 17 00:00:00 2001 From: thisgun Date: Wed, 18 Mar 2020 12:30:09 +0900 Subject: [PATCH 01/15] =?UTF-8?q?5.4=20=EB=B2=84=EC=A0=84=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=ED=8C=90=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=8A=A4?= =?UTF-8?q?=ED=82=A8=20css=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mobile/skin/board/basic/style.css | 1 + mobile/skin/board/gallery/style.css | 1 + theme/basic/mobile/skin/board/basic/style.css | 1 + theme/basic/mobile/skin/board/gallery/style.css | 1 + 4 files changed, 4 insertions(+) diff --git a/mobile/skin/board/basic/style.css b/mobile/skin/board/basic/style.css index ac9fb3c70..17b5be269 100644 --- a/mobile/skin/board/basic/style.css +++ b/mobile/skin/board/basic/style.css @@ -85,6 +85,7 @@ .more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999} .more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent} .more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent} +.more_opt.is_list_btn{width:90px} .more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left} .more_opt li:last-child {border-bottom:0} .more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c} diff --git a/mobile/skin/board/gallery/style.css b/mobile/skin/board/gallery/style.css index 448b2f57d..3b4ed8f56 100644 --- a/mobile/skin/board/gallery/style.css +++ b/mobile/skin/board/gallery/style.css @@ -74,6 +74,7 @@ .more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999} .more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent} .more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent} +.more_opt.is_list_btn{width:90px} .more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left} .more_opt li:last-child {border-bottom:0} .more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c} diff --git a/theme/basic/mobile/skin/board/basic/style.css b/theme/basic/mobile/skin/board/basic/style.css index ac9fb3c70..17b5be269 100644 --- a/theme/basic/mobile/skin/board/basic/style.css +++ b/theme/basic/mobile/skin/board/basic/style.css @@ -85,6 +85,7 @@ .more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999} .more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent} .more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent} +.more_opt.is_list_btn{width:90px} .more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left} .more_opt li:last-child {border-bottom:0} .more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c} diff --git a/theme/basic/mobile/skin/board/gallery/style.css b/theme/basic/mobile/skin/board/gallery/style.css index 448b2f57d..3b4ed8f56 100644 --- a/theme/basic/mobile/skin/board/gallery/style.css +++ b/theme/basic/mobile/skin/board/gallery/style.css @@ -74,6 +74,7 @@ .more_opt {display:none;position:absolute;top:50px;right:7px;background:#fff;border:1px solid #b8bfc4;z-index:999} .more_opt:before {content:"";position:absolute;top:-8px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent} .more_opt:after {content:"";position:absolute;top:-6px;right:6px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent} +.more_opt.is_list_btn{width:90px} .more_opt li {display:block;border-bottom:1px solid #f1f1f1;padding:10px;margin:0;color:#6b757c;text-align:left} .more_opt li:last-child {border-bottom:0} .more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c} From dad97445f8cf09f38daf674007140998831af2bd Mon Sep 17 00:00:00 2001 From: minsupkr Date: Wed, 25 Mar 2020 20:54:16 +0900 Subject: [PATCH 02/15] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20>=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EC=84=A4=EC=A0=95=20>=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20:=20=EB=A9=94=EB=89=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/menu_form.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adm/menu_form.php b/adm/menu_form.php index c4a8b2dbf..25db9438b 100644 --- a/adm/menu_form.php +++ b/adm/menu_form.php @@ -161,9 +161,9 @@ function add_menu_list(name, link, code) list += ""; list += ""; - list += ""; + list += ""; - list += ""; + list += ""; list += ""; list += ""; From 81444b42b15fc9110c257543f45a7d40bef59f0a Mon Sep 17 00:00:00 2001 From: minsupkr Date: Wed, 25 Mar 2020 20:56:46 +0900 Subject: [PATCH 03/15] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20>=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=EC=84=A4=EC=A0=95=20>=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20:=20=EB=A9=94=EB=89=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=8B=9C=20=EC=B6=94=EA=B0=80=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=88=98?= =?UTF-8?q?=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/menu_form.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adm/menu_form.php b/adm/menu_form.php index 25db9438b..bb421af1c 100644 --- a/adm/menu_form.php +++ b/adm/menu_form.php @@ -159,9 +159,9 @@ function add_menu_list(name, link, code) list += ""; list += ""; list += ""; - list += ""; + list += ""; - list += ""; + list += "\n"; list += ""; list += ""; From 67126bcbe1277de48f188ba1d69c3b4ce0314cfa Mon Sep 17 00:00:00 2001 From: minsupkr Date: Tue, 31 Mar 2020 11:54:39 +0900 Subject: [PATCH 04/15] =?UTF-8?q?=EA=B2=8C=EC=8B=9C=ED=8C=90=20:=20?= =?UTF-8?q?=EA=B0=A4=EB=9F=AC=EB=A6=AC=EC=8A=A4=ED=82=A8=20gall=5Fimg=20he?= =?UTF-8?q?ight=20=EC=A7=80=EC=A0=95=20=EB=B2=84=EA=B7=B8=2010331?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skin/board/gallery/style.css | 2 +- theme/basic/skin/board/gallery/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skin/board/gallery/style.css b/skin/board/gallery/style.css index 67bbbdc73..c58c86801 100644 --- a/skin/board/gallery/style.css +++ b/skin/board/gallery/style.css @@ -124,7 +124,7 @@ box-shadow:inset 0 2px 5px rgb(33, 135, 202)} #bo_gall .gall_now .gall_text_href a {color:#ff3061} #bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none} -#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;max-height:200px;overflow:hidden} +#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;height:200px;max-height:200px;overflow:hidden} #bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block} #bo_gall .gall_img img {max-width:100%;height:auto !important} #bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777} diff --git a/theme/basic/skin/board/gallery/style.css b/theme/basic/skin/board/gallery/style.css index 67bbbdc73..c58c86801 100644 --- a/theme/basic/skin/board/gallery/style.css +++ b/theme/basic/skin/board/gallery/style.css @@ -124,7 +124,7 @@ box-shadow:inset 0 2px 5px rgb(33, 135, 202)} #bo_gall .gall_now .gall_text_href a {color:#ff3061} #bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none} -#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;max-height:200px;overflow:hidden} +#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;height:200px;max-height:200px;overflow:hidden} #bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block} #bo_gall .gall_img img {max-width:100%;height:auto !important} #bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777} From b069485c53bde345bbe57deff11060eddedd1679 Mon Sep 17 00:00:00 2001 From: minsupkr Date: Tue, 31 Mar 2020 11:59:30 +0900 Subject: [PATCH 05/15] =?UTF-8?q?=EC=B5=9C=EA=B7=BC=EA=B2=8C=EC=8B=9C?= =?UTF-8?q?=EB=AC=BC=20:=20=EB=B6=88=EB=B6=84=EB=AA=85=ED=95=9C=20selector?= =?UTF-8?q?=20=EC=88=98=EC=A0=95,=20galley=20>=20gallery=20=EB=B2=84?= =?UTF-8?q?=EA=B7=B8=2010335?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skin/latest/pic_block/latest.skin.php | 2 +- skin/latest/pic_block/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/skin/latest/pic_block/latest.skin.php b/skin/latest/pic_block/latest.skin.php index 791e2b48b..dcd824410 100644 --- a/skin/latest/pic_block/latest.skin.php +++ b/skin/latest/pic_block/latest.skin.php @@ -24,7 +24,7 @@ $list_count = (is_array($list) && $list) ? count($list) : 0; } $img_content = ''.$thumb['alt'].''; ?> -
  • +
  • - + () diff --git a/mobile/skin/board/gallery/view.skin.php b/mobile/skin/board/gallery/view.skin.php index 1141e1d12..edaba07a1 100644 --- a/mobile/skin/board/gallery/view.skin.php +++ b/mobile/skin/board/gallery/view.skin.php @@ -145,7 +145,7 @@ jQuery(function($){ if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) { ?>
  • - + () diff --git a/mobile/skin/qa/basic/view.skin.php b/mobile/skin/qa/basic/view.skin.php index 1bef55039..9f1bc742b 100644 --- a/mobile/skin/qa/basic/view.skin.php +++ b/mobile/skin/qa/basic/view.skin.php @@ -99,7 +99,7 @@ $(".btn_more_opt").on("click", function() { for ($i=0; $i<$view['download_count']; $i++) { ?>
  • - + 첨부 diff --git a/skin/board/basic/view.skin.php b/skin/board/basic/view.skin.php index 769bdc524..3b67931d0 100644 --- a/skin/board/basic/view.skin.php +++ b/skin/board/basic/view.skin.php @@ -161,7 +161,7 @@ add_stylesheet('', 0 ?>
  • - + ()
    diff --git a/skin/board/gallery/view.skin.php b/skin/board/gallery/view.skin.php index ea415a230..358c6d844 100644 --- a/skin/board/gallery/view.skin.php +++ b/skin/board/gallery/view.skin.php @@ -161,7 +161,7 @@ add_stylesheet('', 0 ?>
  • - + ()
    diff --git a/skin/qa/basic/view.skin.php b/skin/qa/basic/view.skin.php index 8c00c0105..a8db766a5 100644 --- a/skin/qa/basic/view.skin.php +++ b/skin/qa/basic/view.skin.php @@ -107,7 +107,7 @@ add_stylesheet('', 0); ?>
  • - +
  • diff --git a/theme/basic/mobile/skin/board/basic/view.skin.php b/theme/basic/mobile/skin/board/basic/view.skin.php index 78c0a067d..3cd9811ba 100644 --- a/theme/basic/mobile/skin/board/basic/view.skin.php +++ b/theme/basic/mobile/skin/board/basic/view.skin.php @@ -143,7 +143,7 @@ jQuery(function($){ if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) { ?>
  • - + () diff --git a/theme/basic/mobile/skin/board/gallery/view.skin.php b/theme/basic/mobile/skin/board/gallery/view.skin.php index 1141e1d12..edaba07a1 100644 --- a/theme/basic/mobile/skin/board/gallery/view.skin.php +++ b/theme/basic/mobile/skin/board/gallery/view.skin.php @@ -145,7 +145,7 @@ jQuery(function($){ if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) { ?>
  • - + () diff --git a/theme/basic/mobile/skin/qa/basic/view.skin.php b/theme/basic/mobile/skin/qa/basic/view.skin.php index 1bef55039..9f1bc742b 100644 --- a/theme/basic/mobile/skin/qa/basic/view.skin.php +++ b/theme/basic/mobile/skin/qa/basic/view.skin.php @@ -99,7 +99,7 @@ $(".btn_more_opt").on("click", function() { for ($i=0; $i<$view['download_count']; $i++) { ?>
  • - + 첨부 diff --git a/theme/basic/skin/board/basic/view.skin.php b/theme/basic/skin/board/basic/view.skin.php index 769bdc524..3b67931d0 100644 --- a/theme/basic/skin/board/basic/view.skin.php +++ b/theme/basic/skin/board/basic/view.skin.php @@ -161,7 +161,7 @@ add_stylesheet('', 0 ?>
  • - + ()
    diff --git a/theme/basic/skin/board/gallery/view.skin.php b/theme/basic/skin/board/gallery/view.skin.php index ea415a230..358c6d844 100644 --- a/theme/basic/skin/board/gallery/view.skin.php +++ b/theme/basic/skin/board/gallery/view.skin.php @@ -161,7 +161,7 @@ add_stylesheet('', 0 ?>
  • - + ()
    diff --git a/theme/basic/skin/qa/basic/view.skin.php b/theme/basic/skin/qa/basic/view.skin.php index 8c00c0105..a8db766a5 100644 --- a/theme/basic/skin/qa/basic/view.skin.php +++ b/theme/basic/skin/qa/basic/view.skin.php @@ -107,7 +107,7 @@ add_stylesheet('', 0); ?>
  • - +
  • From 68feb602ffdff77419d31bde212614f72fdaf099 Mon Sep 17 00:00:00 2001 From: thisgun Date: Tue, 7 Apr 2020 17:24:35 +0900 Subject: [PATCH 12/15] =?UTF-8?q?5.4=EB=B2=84=EC=A0=84=20=EA=B2=8C?= =?UTF-8?q?=EC=8B=9C=EB=AC=BC=20=EB=B3=B5=EC=82=AC=EC=9D=B4=EB=8F=99?= =?UTF-8?q?=EC=8B=9C=20hook=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bbs/move_update.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bbs/move_update.php b/bbs/move_update.php index b3c28f09c..044586264 100644 --- a/bbs/move_update.php +++ b/bbs/move_update.php @@ -192,6 +192,8 @@ while ($row = sql_fetch_array($result)) sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write + '$count_write' where bo_table = '$move_bo_table' "); sql_query(" update {$g5['board_table']} set bo_count_comment = bo_count_comment + '$count_comment' where bo_table = '$move_bo_table' "); + + run_event('bbs_move_copy', $row2, $move_bo_table, $insert_id, $next_wr_num, $sw); delete_cache_latest($move_bo_table); } From 50edf32875e6cd5b281f2acdd35c19374e1f280e Mon Sep 17 00:00:00 2001 From: thisgun Date: Mon, 13 Apr 2020 16:03:21 +0900 Subject: [PATCH 13/15] =?UTF-8?q?get=5Fgroup=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=A0=84=20=EB=B0=B0=EC=97=B4=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.php b/common.php index 9da7690df..3ac44afad 100644 --- a/common.php +++ b/common.php @@ -463,7 +463,7 @@ if ($bo_table) { } } -if ($gr_id && is_string($gr_id)) { +if ($gr_id && !is_array($gr_id)) { $group = get_group($gr_id); } From ecb62265990a7639c815796624e13d1946105d59 Mon Sep 17 00:00:00 2001 From: thisgun Date: Mon, 13 Apr 2020 16:04:35 +0900 Subject: [PATCH 14/15] =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=94=EB=93=9C=20JS?= =?UTF-8?q?ON=20=EB=B2=84=EC=A0=84=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=ED=82=A4=20=EC=9E=85=EB=A0=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adm/config_form.php | 49 ++++-- adm/config_form_update.php | 3 + adm/css/admin.css | 4 + adm/sms_admin/config.php | 50 ++++-- adm/sms_admin/config_update.php | 5 +- adm/sms_admin/css/sms5.css | 1 + adm/sms_admin/history_send.php | 4 +- adm/sms_admin/history_view.php | 6 +- adm/sms_admin/sms5.sql | 2 +- adm/sms_admin/sms_write.php | 15 +- adm/sms_admin/sms_write_send.php | 56 ++++--- extend/sms5.extend.php | 6 + lib/common.lib.php | 30 ++++ lib/icode.lms.lib.php | 214 ++++++++++++++++++------ lib/icode.sms.lib.php | 164 ++++++++++++++---- plugin/sms5/sms5.lib.php | 277 ++++++++++++++----------------- 16 files changed, 590 insertions(+), 296 deletions(-) diff --git a/adm/config_form.php b/adm/config_form.php index 5bc7bccea..8629cd087 100644 --- a/adm/config_form.php +++ b/adm/config_form.php @@ -271,6 +271,13 @@ if(!isset($member['mb_scrap_cnt'])) { ADD `mb_scrap_cnt` int(11) NOT NULL DEFAULT '0' AFTER `mb_memo_cnt`", true); } +// 아이코드 토큰키 추가 +if( ! isset($config['cf_icode_token_key']) ){ + $sql = "ALTER TABLE `{$g5['config_table']}` + ADD COLUMN `cf_icode_token_key` VARCHAR(100) NOT NULL DEFAULT '' AFTER `cf_icode_server_port`; "; + sql_query($sql, false); +} + if(!$config['cf_faq_skin']) $config['cf_faq_skin'] = "basic"; if(!$config['cf_mobile_faq_skin']) $config['cf_mobile_faq_skin'] = "basic"; @@ -1257,29 +1264,29 @@ include_once('_rewrite_config_form.php'); - LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 1500바이트까지 LMS로 전송됩니다.
    요금은 건당 SMS는 16원, LMS는 48원입니다."); ?> + LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 ".G5_ICODE_LMS_MAX_LENGTH."바이트까지 LMS로 전송됩니다.
    요금은 건당 SMS는 16원, LMS는 48원입니다."); ?> - - + + - - + + - - 요금제 + + 요금제
    (구버전) - - 아이코드 SMS 신청
    회원가입 - - 아이코드 회원가입 - - - - - 충전 잔액 + + + 충전 잔액
    (구버전) 원. 충전하기 + + + + SMS 전송유형을 LMS로 설정시 90바이트 이내는 SMS, 90 ~ 2000 바이트는 LMS 그 이상은 절삭 되어 LMS로 발송됩니다."); ?> + + 토큰키관리 메뉴에서 생성한 토큰키를 입력합니다."); ?> +
    + 서버아이피 : + + + + 아이코드 SMS 신청
    회원가입 + + 아이코드 회원가입 + + diff --git a/adm/config_form_update.php b/adm/config_form_update.php index 731b664c5..250fc9082 100644 --- a/adm/config_form_update.php +++ b/adm/config_form_update.php @@ -36,6 +36,8 @@ foreach( $check_keys as $key ){ } } +$_POST['cf_icode_server_port'] = isset($_POST['cf_icode_server_port']) ? preg_replace('/[^0-9]/', '', $_POST['cf_icode_server_port']) : '7295'; + $sql = " update {$g5['config_table']} set cf_title = '{$_POST['cf_title']}', cf_admin = '{$_POST['cf_admin']}', @@ -143,6 +145,7 @@ $sql = " update {$g5['config_table']} cf_sms_type = '{$_POST['cf_sms_type']}', cf_icode_id = '{$_POST['cf_icode_id']}', cf_icode_pw = '{$_POST['cf_icode_pw']}', + cf_icode_token_key = '{$_POST['cf_icode_token_key']}', cf_icode_server_ip = '{$_POST['cf_icode_server_ip']}', cf_icode_server_port = '{$_POST['cf_icode_server_port']}', cf_googl_shorturl_apikey = '{$_POST['cf_googl_shorturl_apikey']}', diff --git a/adm/css/admin.css b/adm/css/admin.css index ae55bacc2..1f16bacdd 100644 --- a/adm/css/admin.css +++ b/adm/css/admin.css @@ -528,6 +528,10 @@ td.td_grpset {width:160px;border-left:1px solid #e9ecee;text-align:center} .is_rewrite .info-success{color:#155724} .is_rewrite .info-warning{color:#856404} +.icode_old_version th{background-color:#FFFCED} +.icode_json_version th{background-color:#F6F1FF} +.cf_tr_hide {display:none} + /* 관리권한설정 */ #add_admin fieldset {margin-top:20px;overflow:auto;padding:2px 6px;line-height:1.4;resize:vertical} diff --git a/adm/sms_admin/config.php b/adm/sms_admin/config.php index 5eb96e1a9..a8e89543e 100644 --- a/adm/sms_admin/config.php +++ b/adm/sms_admin/config.php @@ -9,6 +9,14 @@ $g5['title'] = "SMS 기본설정"; if (!$config['cf_icode_server_ip']) $config['cf_icode_server_ip'] = '211.172.232.124'; if (!$config['cf_icode_server_port']) $config['cf_icode_server_port'] = '7295'; +// 아이코드 토큰키 추가 +if( ! isset($config['cf_icode_token_key']) ){ + $sql = "ALTER TABLE `{$g5['config_table']}` + ADD COLUMN `cf_icode_token_key` VARCHAR(100) NOT NULL DEFAULT '' AFTER `cf_icode_server_port`; "; + sql_query($sql, false); + $config['cf_icode_token_key'] = ''; +} + if ($config['cf_sms_use'] && $config['cf_icode_id'] && $config['cf_icode_pw']) { $userinfo = get_icode_userinfo($config['cf_icode_id'], $config['cf_icode_pw']); @@ -23,7 +31,7 @@ if (!$sms5['cf_skin']) include_once(G5_ADMIN_PATH.'/admin.head.php'); ?> - +

    SMS 기능을 사용하시려면 먼저 아이코드에 서비스 신청을 하셔야 합니다.
    @@ -47,22 +55,31 @@ if ($config['cf_sms_use'] == 'icode') { // 아이코드 사용 - + + + LMS로 선택하시면 90바이트 이하는 SMS로, 그 이상은 ".G5_ICODE_LMS_MAX_LENGTH."바이트까지 LMS로 전송됩니다.
    요금은 건당 SMS는 16원, LMS는 48원입니다."); ?> + + + + + - + - - + + - - 현재 비밀번호가 입력되어 있지 않습니다. + - - 요금제 + + 요금제
    (구버전) '; } else { - echo '가입해주세요.'; echo ''; } ?> - - 충전 잔액 + + 충전 잔액
    (구버전) 충전하기 + + + + SMS 전송유형을 LMS로 설정시 90바이트 이내는 SMS, 90 ~ 2000 바이트는 LMS 그 이상은 절삭 되어 LMS로 발송됩니다."); ?> + + 토큰키관리 메뉴에서 생성한 토큰키를 입력합니다."); ?> +
    + 서버아이피 : + + diff --git a/adm/sms_admin/config_update.php b/adm/sms_admin/config_update.php index 3d9b57e03..236d56e74 100644 --- a/adm/sms_admin/config_update.php +++ b/adm/sms_admin/config_update.php @@ -15,6 +15,7 @@ if(!check_vaild_callback($cf_phone)) alert('회신번호가 올바르지 않습니다.'); $userinfo = get_icode_userinfo($cf_icode_id, $cf_icode_pw); +$cf_icode_server_port = isset($cf_icode_server_port) ? preg_replace('/[^0-9]/', '', $cf_icode_server_port) : '7295'; if ($userinfo['code'] == '202') alert('아이코드 아이디와 패스워드가 맞지 않습니다.'); @@ -33,10 +34,12 @@ sql_query($sql); // 아이코드 설정 $sql = " update {$g5['config_table']} set cf_sms_use = '$cf_sms_use', + cf_sms_type = '$cf_sms_type', cf_icode_id = '$cf_icode_id', cf_icode_pw = '$cf_icode_pw', cf_icode_server_ip = '$cf_icode_server_ip', - cf_icode_server_port = '$cf_icode_server_port' "; + cf_icode_server_port = '$cf_icode_server_port', + cf_icode_token_key = '$cf_icode_token_key'"; sql_query($sql); goto_url("./config.php"); diff --git a/adm/sms_admin/css/sms5.css b/adm/sms_admin/css/sms5.css index b5c09d1c4..03187e7ea 100644 --- a/adm/sms_admin/css/sms5.css +++ b/adm/sms_admin/css/sms5.css @@ -22,6 +22,7 @@ .sms5_box {position:relative;padding:10px;border-radius:5px;background:#fbec99} .sms5_box .box_ico {position:absolute;top:20px;left:-7px;width:7px;height:13px;background:url('../img/box_ico.gif') no-repeat} .sms5_box .box_txt {border:0;background:transparent;word-break:break-all;resize:none;overflow:hidden} +.sms5_box textarea.box_txt.is_overview{overflow:visible;min-height:130px} .sms5_box .box_square {width:100px;height:90px} #write_wrap {z-index:9} diff --git a/adm/sms_admin/history_send.php b/adm/sms_admin/history_send.php index 109dfcc41..9b4f29600 100644 --- a/adm/sms_admin/history_send.php +++ b/adm/sms_admin/history_send.php @@ -224,8 +224,8 @@ if($config['cf_sms_type'] == 'LMS') { ?> &st=&sv=&wr_no=&wr_renum='; @@ -104,7 +104,7 @@ function all_send()

    - +
    diff --git a/adm/sms_admin/sms5.sql b/adm/sms_admin/sms5.sql index 652872219..96bb7b1a4 100644 --- a/adm/sms_admin/sms5.sql +++ b/adm/sms_admin/sms5.sql @@ -149,7 +149,7 @@ CREATE TABLE `{$g5['sms5_write_table']}` ( `wr_no` int(11) NOT NULL default '1', `wr_renum` int(11) NOT NULL default '0', `wr_reply` varchar(255) NOT NULL default '', - `wr_message` varchar(255) NOT NULL default '', + `wr_message` text NOT NULL, `wr_booking` datetime NOT NULL default '0000-00-00 00:00:00', `wr_total` int(11) NOT NULL default '0', `wr_re_total` int(11) NOT NULL default '0', diff --git a/adm/sms_admin/sms_write.php b/adm/sms_admin/sms_write.php index 4654a3a6d..77754a97c 100644 --- a/adm/sms_admin/sms_write.php +++ b/adm/sms_admin/sms_write.php @@ -266,8 +266,8 @@ function sms5_chk_send(f) w = document.body.clientWidth/2 - 200; h = document.body.clientHeight/2 - 100; - act = window.open('sms_ing.php', 'act', 'width=300, height=200, left=' + w + ', top=' + h); - act.focus(); + //act = window.open('sms_ing.php', 'act', 'width=300, height=200, left=' + w + ', top=' + h); + //act.focus(); f.send_list.value = list; return true; @@ -407,6 +407,7 @@ function byte_check(wr_message, sms_bytes) var conts = document.getElementById(wr_message); var bytes = document.getElementById(sms_bytes); var max_bytes = document.getElementById("sms_max_bytes"); + var lms_max_length = var i = 0; var cnt = 0; @@ -427,14 +428,14 @@ function byte_check(wr_message, sms_bytes) if(cnt > 90) - max_bytes.innerHTML = 1500; + max_bytes.innerHTML = lms_max_length; else max_bytes.innerHTML = 90; - if (cnt > 1500) + if (cnt > lms_max_length) { - exceed = cnt - 1500; - alert('메시지 내용은 1500바이트를 넘을수 없습니다.\n\n작성하신 메세지 내용은 '+ exceed +'byte가 초과되었습니다.\n\n초과된 부분은 자동으로 삭제됩니다.'); + exceed = cnt - lms_max_length; + alert('메시지 내용은 '+ lms_max_length +'바이트를 넘을수 없습니다.\n\n작성하신 메세지 내용은 '+ exceed +'byte가 초과되었습니다.\n\n초과된 부분은 자동으로 삭제됩니다.'); var tcnt = 0; var xcnt = 0; var tmp = conts.value; @@ -447,7 +448,7 @@ function byte_check(wr_message, sms_bytes) tcnt += 1; } - if (tcnt > 1500) { + if (tcnt > lms_max_length) { tmp = tmp.substring(0,i); break; } else { diff --git a/adm/sms_admin/sms_write_send.php b/adm/sms_admin/sms_write_send.php index c7ec11030..e88bdae46 100644 --- a/adm/sms_admin/sms_write_send.php +++ b/adm/sms_admin/sms_write_send.php @@ -6,8 +6,24 @@ auth_check($auth[$sub_menu], "w"); check_admin_token(); +$result = sql_query("describe `{$g5['sms5_write_table']}`"); +while ($row = sql_fetch_array($result)){ + if( $row['Field'] === 'wr_message' && $row['Type'] === 'varchar(255)' ){ + sql_query("ALTER TABLE `{$g5['sms5_write_table']}` MODIFY wr_message TEXT NOT NULL;", false); + break; + } +} + $g5['title'] = "문자전송중"; +if ($config['cf_sms_use'] != 'icode') { + alert('기본환경설정에서 icode sms 사용이 비활성화 되어 있습니다.'); +} + +if ( ! (($config['cf_icode_id'] && $config['cf_icode_pw']) || $config['cf_icode_token_key']) ) { + alert('아이코드 설정값이 존재하지 않습니다.'); +} + $wr_reply = preg_replace('#[^0-9\-]#', '', trim($wr_reply)); $wr_message = clean_xss_tags(trim($wr_message)); @@ -94,12 +110,12 @@ while ($row = array_shift($send_list)) $hp = get_hp($item[$i][1], 0); $name = $item[$i][0]; - if(!$hp) continue; + if(!$hp) continue 2; if ($wr_overlap && array_overlap($hps, $hp)) { $overlap++; array_push( $duplicate_data['hp'], $row['bk_hp'] ); - continue; + continue 2; } array_push($list, array('bk_hp' => $hp, 'bk_name' => $name)); @@ -111,12 +127,12 @@ while ($row = array_shift($send_list)) $row = sql_fetch("select * from {$g5['sms5_book_table']} where bk_no='$item[$i]'"); $row['bk_hp'] = get_hp($row['bk_hp'], 0); - if(!$row['bk_hp']) continue; + if(!$row['bk_hp']) continue 2; if ($wr_overlap && array_overlap($hps, $row['bk_hp'])) { $overlap++; array_push( $duplicate_data['hp'], $row['bk_hp'] ); - continue; + continue 2; } array_push($list, $row); array_push($hps, $row['bk_hp']); @@ -141,14 +157,11 @@ if ($wr_by && $wr_bm && $wr_bd && $wr_bh && $wr_bi) { $booking = ''; } -if ($config['cf_sms_use'] != 'icode') { - alert('기본환경설정에서 icode sms 사용이 비활성화 되어 있습니다.'); -} - include_once(G5_ADMIN_PATH.'/admin.head.php'); $reply = str_replace('-', '', trim($wr_reply)); -$wr_message = conv_unescape_nl($wr_message); +$db_wr_message = conv_unescape_nl($wr_message); +$wr_message = conv_unescape_nl(stripslashes($wr_message)); $SMS = new SMS5; @@ -186,7 +199,7 @@ if($config['cf_sms_type'] == 'LMS') { if($result) { $result = $SMS->Send(); - + if ($result) //SMS 서버에 접속했습니다. { foreach ($SMS->Result as $result) @@ -242,7 +255,7 @@ if($config['cf_sms_type'] == 'LMS') { } } - sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$wr_message', wr_success='$wr_success', wr_failure='$wr_failure', wr_memo='$str_serialize', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'"); + sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$db_wr_message', wr_success='$wr_success', wr_failure='$wr_failure', wr_memo='$str_serialize', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'"); } } else { $SMS->SMS_con($config['cf_icode_server_ip'], $config['cf_icode_id'], $config['cf_icode_pw'], $config['cf_icode_server_port']); @@ -260,7 +273,7 @@ if($config['cf_sms_type'] == 'LMS') { else $wr_no = 1; - sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$wr_message', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'"); + sql_query("insert into {$g5['sms5_write_table']} set wr_no='$wr_no', wr_renum=0, wr_reply='$wr_reply', wr_message='$db_wr_message', wr_booking='$wr_booking', wr_total='$wr_total', wr_datetime='".G5_TIME_YMDHIS."'"); $wr_success = 0; $wr_failure = 0; @@ -324,11 +337,16 @@ if($config['cf_sms_type'] == 'LMS') { function win_close_alert($msg) { - $html = ""; + $html = ""; echo $html; exit; @@ -336,8 +354,8 @@ function win_close_alert($msg) { ?> = $minimum_coin) + $is_sms_send = true; + } + } + } + + return $is_sms_send; +} + function is_use_email_certify(){ global $config; diff --git a/lib/icode.lms.lib.php b/lib/icode.lms.lib.php index f7bb6f361..0da41bdb0 100644 --- a/lib/icode.lms.lib.php +++ b/lib/icode.lms.lib.php @@ -4,12 +4,19 @@ if (!defined('_GNUBOARD_')) exit; // 요금제에 따른 port 구분 function get_icode_port_type($id, $pw) { + global $config; + + // 토큰키를 사용한다면 true 로 리턴 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] ){ + return 1; + } + $userinfo = get_icode_userinfo($id, $pw); if($userinfo['payment'] == 'A') { // 충전제 return 1; } else if($userinfo['payment'] == 'C') { // 정액제 - return 1; + return 2; } else { return false; } @@ -28,10 +35,21 @@ class LMS { var $socket_portcode; var $Data = array(); var $Result = array(); + var $icode_key; // SMS 서버 접속 function SMS_con($host, $id, $pw, $portcode) { - $this->socket_host = $host; + global $config; + + // 토큰키를 사용한다면 + if(isset($config['cf_icode_token_key']) && $config['cf_icode_token_key']){ + $this->icode_key = $config['cf_icode_token_key']; + $this->socket_host = ICODE_JSON_SOCKET_HOST; + $this->socket_port = ICODE_JSON_SOCKET_PORT; + } else { + $this->socket_host = $host; + } + $this->socket_portcode = $portcode; $this->icode_id = FillSpace($id, 10); $this->icode_pw = FillSpace($pw, 10); @@ -43,32 +61,63 @@ class LMS { } function Add($strDest, $strCallBack, $strCaller, $strSubject, $strURL, $strData, $strDate="", $nCount) { + global $config; // 문자 타입별 Port 설정. $sendType = strlen($strData) > 90 ? 1 : 0; // 0: SMS / 1: LMS - /* 개발 완료 후 아래 포트를 rand 함수를 이용하는 라인으로 변경 바랍니다.*/ + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ + + // 개행치환 + $strData = preg_replace("/\r\n/","\n",$strData); + $strData = preg_replace("/\r/","\n",$strData); - // 충전식 - if ($this->socket_portcode == 1) { - if($sendType && $sendType == 1) { - //$this->socket_port = 8200; // LMS - $this->socket_port=(int)rand(8200,8201); // LMS - } else { - //$this->socket_port = 6295; // SMS - $this->socket_port=(int)rand(6295,6297); // SMS - } - } - // 정액제 - else { - if($sendType && $sendType == 1) { - //$this->socket_port = 8300; // LMS - $this->socket_port=(int)rand(8300,8301); // LMS - } else { - //$this->socket_port = 6291; // SMS - $this->socket_port=(int)rand(6291,6293); // SMS - } - } + $checks = array('msg'=>$strData, 'subject'=>$strSubject); + $tmps = array(); + + foreach( $checks as $k=>$v ){ + + // 문자 내용이 euc-kr 인지 체크합니다. + $enc = mb_detect_encoding($v, array('EUC-KR', 'UTF-8')); + + // 문자 내용이 euc-kr 이면 json_encode 에서 깨지기 때문에 utf-8 로 변환합니다. + $tmps[$k] = ($enc === 'EUC-KR') ? iconv_utf8($v) : $v; + } + + $strData = $tmps['msg']; + $strSubject = $tmps['subject']; + + // 문자 타입별 Port 설정. + $sendType = strlen($strData)>90 ? 1 : 0; // 0: SMS / 1: LMS + if($sendType==0) $strSubject = ""; + + $is_use_json = true; + + } else { + /* 개발 완료 후 아래 포트를 rand 함수를 이용하는 라인으로 변경 바랍니다.*/ + + // 충전식 + if ($this->socket_portcode == 1) { + if($sendType && $sendType == 1) { + //$this->socket_port = 8200; // LMS + $this->socket_port=(int)rand(8200,8201); // LMS + } else { + //$this->socket_port = 6295; // SMS + $this->socket_port=(int)rand(6295,6297); // SMS + } + } + // 정액제 + else { + if($sendType && $sendType == 1) { + //$this->socket_port = 8300; // LMS + $this->socket_port=(int)rand(8300,8301); // LMS + } else { + //$this->socket_port = 6291; // SMS + $this->socket_port=(int)rand(6291,6293); // SMS + } + } + } $strCallBack = FillSpace($strCallBack, 11); // 회신번호 $strDate = FillSpace($strDate, 12); // 즉시(12byte 공백), 예약전송(YmdHi) @@ -88,9 +137,9 @@ class LMS { $strSubject = str_replace(">", "]", $strSubject); $strSubject = FillSpace($strSubject,30); - $strData = FillSpace(CutChar($strData,1500),1500); + $strData = $is_use_json ? CutCharUtf8($strData, G5_ICODE_JSON_MAX_LENGTH) : FillSpace(CutChar($strData, G5_ICODE_LMS_MAX_LENGTH), G5_ICODE_LMS_MAX_LENGTH); } else if (!$strURL) { - $strData = FillSpace(CutChar($strData,90),90); + $strData = $is_use_json ? CutCharUtf8($strData, G5_ICODE_JSON_MAX_LENGTH) : FillSpace(CutChar($strData,90),90); $strCaller = FillSpace($strCaller,10); } else { $strURL = FillSpace($strURL,50); @@ -102,39 +151,85 @@ class LMS { for ($i=0; $i<$nCount; $i++) { - $strDest[$i] = FillSpace($strDest[$i],11); - if ($sendType && $sendType == 1) { - $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strSubject.$strDate.$strData; - } else if (!$strURL) { - $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strCaller.$strDate.$strData; - } else { - $strData = FillSpace(CheckCallCenter($strURL, $strDest[$i], $strData),80); - $this->Data[$i] = '05173 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strURL.$strDate.$strData; - } + if($is_use_json) { + $strDest[$i] = $strDest[$i]; + $list = array( + "key" => $this->icode_key, + "tel" => $strDest[$i], + "cb" => $strCallBack, + "msg" => $strData, + "title" => $strSubject?$strSubject:"", + "date" => $strDate?$strDate:"" + ); + $packet = json_encode($list); + + if( !$packet ){ // json_encode가 잘못되었으면 보내지 않습니다. + continue; + } + $this->Data[$i] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet; + } else { + $strDest[$i] = FillSpace($strDest[$i],11); + if ($sendType && $sendType == 1) { + $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strSubject.$strDate.$strData; + } else if (!$strURL) { + $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strCaller.$strDate.$strData; + } else { + $strData = FillSpace(CheckCallCenter($strURL, $strDest[$i], $strData),80); + $this->Data[$i] = '05173 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strURL.$strDate.$strData; + } + } } return true; } function Send() { - $fsocket = fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2); - if (!$fsocket) return false; - set_time_limit(60); + global $config; - foreach($this->Data as $puts) { - fputs($fsocket, $puts); - while(!$gets) { $gets = fgets($fsocket,30); } - $dest = substr($puts,26,11); - if (substr($gets,0,19) == "0223 00".$dest) { - $this->Result[] = $dest.":".substr($gets,19,10); - } else { - $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; - } - $gets = ""; - } + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ + $fsocket = @fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2); + if (!$fsocket) return false; + set_time_limit(300); - fclose($fsocket); - $this->Data = ""; + foreach($this->Data as $puts) { + fputs($fsocket, $puts); + while(!$gets) { $gets = fgets($fsocket,32); } + $json = json_decode(substr($puts,6), true); + + $dest = $json["tel"]; + if (substr($gets,0,20) == "0225 00".FillSpace($dest,12)) { + $this->Result[] = $dest.":".substr($gets,20,11); + + } else { + $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; + if(substr($gets,6,2) >= "80") break; + } + $gets = ""; + } + + fclose($fsocket); + } else { + $fsocket = @fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2); + if (!$fsocket) return false; + set_time_limit(300); + + foreach($this->Data as $puts) { + fputs($fsocket, $puts); + while(!$gets) { $gets = fgets($fsocket,30); } + $dest = substr($puts,26,11); + if (substr($gets,0,19) == "0223 00".$dest) { + $this->Result[] = $dest.":".substr($gets,19,10); + } else { + $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; + } + $gets = ""; + } + + fclose($fsocket); + } + + $this->Data = array(); return true; } } @@ -168,6 +263,24 @@ function CutChar($word, $cut) { return $word; } +function CutCharUtf8($word, $cut) { + preg_match_all('/[\xE0-\xFF][\x80-\xFF]{2}|./', $word, $match); // target for BMP + + $m = $match[0]; + $slen = strlen($word); // length of source string + if ($slen <= $cut) return $word; + + $ret = array(); + $count = 0; + for ($i=0; $i < $cut; $i++) { + $count += (strlen($m[$i]) > 1)?2:1; + if ($count > $cut) break; + $ret[] = $m[$i]; + } + + return join('', $ret); +} + /** * 수신번호의 값이 정확한 값인지 확인합니다. * @@ -183,7 +296,6 @@ function CheckCommonTypeDest($strDest, $nCount) { } } - /** * 회신번호 유효성 여부조회 * * @param string callback 회신번호 diff --git a/lib/icode.sms.lib.php b/lib/icode.sms.lib.php index a3bee6613..6201f0081 100644 --- a/lib/icode.sms.lib.php +++ b/lib/icode.sms.lib.php @@ -44,8 +44,20 @@ class SMS { var $SMS_Port; var $Data = array(); var $Result = array(); + var $icode_key; + var $socket_port; + var $socket_host; function SMS_con($sms_server,$sms_id,$sms_pw,$port) { + global $config; + + // 토큰키를 사용한다면 + if(isset($config['cf_icode_token_key']) && $config['cf_icode_token_key']){ + $this->icode_key = $config['cf_icode_token_key']; + $this->socket_host = ICODE_JSON_SOCKET_HOST; + $this->socket_port = ICODE_JSON_SOCKET_PORT; + } + $this->ID=$sms_id; // 계약 후 지정 $this->PWD=$sms_pw; // 계약 후 지정 $this->SMS_Server=$sms_server; @@ -60,25 +72,82 @@ class SMS { } function Add($dest, $callBack, $Caller, $msg, $rsvTime="") { - global $g5; + global $g5, $config; - // 내용 검사 1 - $Error = CheckCommonType($dest, $rsvTime); - if ($Error) return $Error; - // 내용 검사 2 - //if ( eregi("[^0-9]",$callBack) ) return "회신 전화번호가 잘못되었습니다"; - if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다"; + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ - $msg=cut_char($msg,80); // 80자 제한 - // 보낼 내용을 배열에 집어넣기 - $dest = spacing($dest,11); - $callBack = spacing($callBack,11); - $Caller = spacing($Caller,10); - $rsvTime = spacing($rsvTime,12); - $msg = spacing($msg,80); + // 내용 검사 1 + $Error = CheckCommonType($dest, $rsvTime); + if ($Error) return $Error; + if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다"; - $this->Data[] = '01144 '.$this->ID.$this->PWD.$dest.$callBack.$Caller.$rsvTime.$msg; - return ""; + // 개행치환 + $msg = preg_replace("/\r\n/", "\n", $msg); + $msg = preg_replace("/\r/", "\n", $msg); + // 90byte 이내는 SMS, 90 ~ 2000 byte 는 LMS 그 이상은 절삭 되어 LMS로 발송 + // SMS 이기 때문에 90byte 이내로 합니다. + $msg=cut_char($msg, 90); + $msg = spacing($msg, 90); + + // 한글 깨진것이 있는지 체크합니다. + if( preg_match('/^([\x00-\x7e]|.{2})*/', $msg, $z) ){ + $msg = $z[0]; + } + + // 문자 내용이 euc-kr 인지 체크합니다. + $enc = mb_detect_encoding($msg, array('EUC-KR', 'UTF-8')); + + // 문자 내용이 euc-kr 이면 json_encode 에서 깨지기 때문에 utf-8 로 변환합니다. + if($enc === 'EUC-KR'){ + $msg = iconv_utf8($msg); + } + + // 보낼 내용을 배열에 집어넣기 + $dest = spacing($dest,11); + $callBack = spacing($callBack,11); + $Caller = spacing($Caller,10); + $rsvTime = $rsvTime ? spacing($rsvTime,12) : ''; + + $list = array( + "key" => $this->icode_key, + "tel" => $dest, + "cb" => $callBack, + "msg" => $msg, + "title" => "", //SMS 의 경우 타이틀을 지정할수 없습니다. + "date" => $rsvTime + ); + + $packet = json_encode($list); + + if( !$packet ){ // json_encode가 잘못되었으면 보내지 않습니다. + return "json_encode error"; + } + $this->Data[] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet; + + return ''; + + } else { + // 기존 OLD SMS + + // 내용 검사 1 + $Error = CheckCommonType($dest, $rsvTime); + if ($Error) return $Error; + // 내용 검사 2 + //if ( eregi("[^0-9]",$callBack) ) return "회신 전화번호가 잘못되었습니다"; + if ( preg_match("/[^0-9]/i",$callBack) ) return "회신 전화번호가 잘못되었습니다"; + + $msg=cut_char($msg,80); // 80자 제한 + // 보낼 내용을 배열에 집어넣기 + $dest = spacing($dest,11); + $callBack = spacing($callBack,11); + $Caller = spacing($Caller,10); + $rsvTime = spacing($rsvTime,12); + $msg = spacing($msg,80); + + $this->Data[] = '01144 '.$this->ID.$this->PWD.$dest.$callBack.$Caller.$rsvTime.$msg; + return ""; + } } function AddURL($dest, $callBack, $URL, $msg, $rsvTime="") { @@ -121,26 +190,53 @@ class SMS { return ""; } - function Send () { - $fp=@fsockopen(trim($this->SMS_Server),trim($this->SMS_Port), $errno, $errstr, 2); - if (!$fp) return false; - set_time_limit(60); + function Send() { + global $config; - ## php4.3.10일경우 - ## zend 최신버전으로 업해주세요.. - ## 또는 122번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요. + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ + $fsocket = @fsockopen(trim($this->socket_host),trim($this->socket_port), $errno, $errstr, 2); + if (!$fsocket) return false; + set_time_limit(300); - foreach($this->Data as $puts) { - $dest = substr($puts,26,11); - fputs($fp,$puts); - while(!$gets) { $gets=fgets($fp,30); } - if (substr($gets,0,19)=="0223 00".$dest) $this->Result[]=$dest.":".substr($gets,19,10); - else $this->Result[$dest]=$dest.":Error"; - $gets=""; - } - fclose($fp); - $this->Data=""; - return true; + foreach($this->Data as $puts) { + fputs($fsocket, $puts); + while(!$gets) { $gets = fgets($fsocket,32); } + $json = json_decode(substr($puts,6), true); + + $dest = $json["tel"]; + if (substr($gets,0,20) == "0225 00".spacing($dest,12)) { + $this->Result[] = $dest.":".substr($gets,20,11); + + } else { + $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; + if(substr($gets,6,2) >= "80") break; + } + $gets = ""; + } + fclose($fsocket); + + } else { + + $fp=@fsockopen(trim($this->SMS_Server),trim($this->SMS_Port)); + if (!$fp) return false; + set_time_limit(300); + + ## php4.3.10일경우 + ## zend 최신버전으로 업해주세요.. + ## 또는 122번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요. + + foreach($this->Data as $puts) { + $dest = substr($puts,26,11); + fputs($fp,$puts); + while(!$gets) { $gets=fgets($fp,30); } + if (substr($gets,0,19)=="0223 00".$dest) $this->Result[]=$dest.":".substr($gets,19,10); + else $this->Result[$dest]=$dest.":Error"; + $gets=""; + } + fclose($fp); + } + $this->Data=array(); } } ?> \ No newline at end of file diff --git a/plugin/sms5/sms5.lib.php b/plugin/sms5/sms5.lib.php index da8f530e1..2614223aa 100644 --- a/plugin/sms5/sms5.lib.php +++ b/plugin/sms5/sms5.lib.php @@ -155,96 +155,15 @@ if($config['cf_sms_type'] == 'LMS') { var $Result = array(); var $Log = array(); - // SMS 서버 접속 - function SMS_con($host, $id, $pw, $portcode) { - $this->socket_host = $host; - $this->socket_portcode = $portcode; - $this->icode_id = FillSpace($id, 10); - $this->icode_pw = FillSpace($pw, 10); - } - - function Init() { - $this->Data = array(); // 발송하기 위한 패킷내용이 배열로 들어간다. - $this->Result = array(); // 발송결과값이 배열로 들어간다. - } - function Add($strDest, $strCallBack, $strCaller, $strSubject, $strURL, $strData, $strDate="", $nCount) { // EUC-KR로 변환 $strCaller = iconv_euckr($strCaller); $strSubject = iconv_euckr($strSubject); $strData = iconv_euckr($strData); - // 문자 타입별 Port 설정. - $sendType = strlen($strData) > 90 ? 1 : 0; // 0: SMS / 1: LMS - - /* 개발 완료 후 아래 포트를 rand 함수를 이용하는 라인으로 변경 바랍니다.*/ - - // 충전식 - if ($this->socket_portcode == 1) { - if($sendType && $sendType == 1) { - //$this->socket_port = 8200; // LMS - $this->socket_port=(int)rand(8200,8201); // LMS - } else { - //$this->socket_port = 6295; // SMS - $this->socket_port=(int)rand(6295,6297); // SMS - } - } - // 정액제 - else { - if($sendType && $sendType == 1) { - //$this->socket_port = 8300; // LMS - $this->socket_port=(int)rand(8300,8301); // LMS - } else { - //$this->socket_port = 6291; // SMS - $this->socket_port=(int)rand(6291,6293); // SMS - } - } - - $strCallBack = FillSpace($strCallBack, 11); // 회신번호 - $strDate = FillSpace($strDate, 12); // 즉시(12byte 공백), 예약전송(YmdHi) - - if ($sendType && $sendType == 1) { - - /** LMS 제목 **/ - /* - 제목필드의 값이 없을 경우 단말기 기종및 설정에 따라 표기 방법이 다름 - 1.설정에서 제목필드보기 설정 Disable -> 제목필드값을 넣어도 미표기 - 2.설정에서 제목필드보기 설정 Enable -> 제목을 넣지 않을 경우 제목없음으로 자동표시 - - 제목의 첫글자에 "<",">", 개행문자가 있을경우 단말기종류 및 통신사에 따라 메세지 전송실패 -> 글자를 체크하거나 취환처리요망 - */ - $strSubject = str_replace("\r\n", " ", $strSubject); - $strSubject = str_replace("<", "[", $strSubject); - $strSubject = str_replace(">", "]", $strSubject); - - $strSubject = FillSpace($strSubject,30); - $strData = FillSpace(CutChar($strData,1500),1500); - } else if (!$strURL) { - $strData = FillSpace(CutChar($strData,90),90); - $strCaller = FillSpace($strCaller,10); - } else { - $strURL = FillSpace($strURL,50); - } - - $Error = CheckCommonTypeDest($strDest, $nCount); - $Error = is_vaild_callback($strCallBack); - $Error = CheckCommonTypeDate($strDate); - - for ($i=0; $i<$nCount; $i++) { - $strDest[$i] = FillSpace($strDest[$i],11); - if ($sendType && $sendType == 1) { - $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strSubject.$strDate.$strData; - } else if (!$strURL) { - $this->Data[$i] = '01144 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strCaller.$strDate.$strData; - } else { - $strData = FillSpace(CheckCallCenter($strURL, $strDest[$i], $strData),80); - $this->Data[$i] = '05173 '.$this->icode_id.$this->icode_pw.$strDest[$i].$strCallBack.$strURL.$strDate.$strData; - } - } - return true; + return parent::Add($strDest, $strCallBack, $strCaller, $strSubject, $strURL, $strData, $strDate, $nCount); } - function Send() { global $g5; @@ -265,27 +184,7 @@ if($config['cf_sms_type'] == 'LMS') { exit; } - $fsocket = fsockopen($this->socket_host,$this->socket_port, $errno, $errstr, 2); - if (!$fsocket) return false; - set_time_limit(60); - - foreach($this->Data as $puts) { - fputs($fsocket, $puts); - while(!$gets) { $gets = fgets($fsocket,30); } - $dest = substr($puts,26,11); - if (substr($gets,0,19) == "0223 00".$dest) { - $this->Result[] = $dest.":".substr($gets,19,10); - $this->Log[] = $puts; - } else { - $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; - $this->Log[] = $puts; - } - $gets = ""; - } - - fclose($fsocket); - $this->Data = array(); - return true; + return parent::Send(); } } } else { @@ -294,15 +193,6 @@ if($config['cf_sms_type'] == 'LMS') { class SMS5 extends SMS { var $Log = array(); - function SMS_con($sms_server,$sms_id,$sms_pw,$port) { - $this->ID=$sms_id; // 계약 후 지정 - $this->PWD=$sms_pw; // 계약 후 지정 - $this->SMS_Server=$sms_server; - $this->SMS_Port=$port; - $this->ID = spacing($this->ID,10); - $this->PWD = spacing($this->PWD,10); - } - /** * 발송번호의 값이 정확한 값인지 확인합니다. * @@ -380,7 +270,7 @@ if($config['cf_sms_type'] == 'LMS') { } } function Add2($strDest, $strCallBack, $strCaller, $strURL, $strMessage, $strDate="", $nCount) { - global $g5; + global $g5, $config; $Error = $this->CheckCommonTypeDest($strDest, $nCount); $Error = $this->CheckCommonTypeCallBack($strCallBack); @@ -390,32 +280,91 @@ if($config['cf_sms_type'] == 'LMS') { $strCaller = spacing($strCaller,10); $strDate = spacing($strDate,12); + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ - for ($i=0; $i<$nCount; $i++) { - $hp_number = spacing($strDest[$i]['bk_hp'],11); - $strData = $strMessage; - if( !empty($strDest[$i]['bk_name']) ){ - $strData = str_replace("{이름}", $strDest[$i]['bk_name'], $strData); + for ($i=0; $i<$nCount; $i++) { + $hp_number = spacing($strDest[$i]['bk_hp'],11); + $strData = $strMessage; + if( !empty($strDest[$i]['bk_name']) ){ + $strData = str_replace("{이름}", $strDest[$i]['bk_name'], $strData); + } + + $msg = $strData; + + // 개행치환 + $msg = preg_replace("/\r\n/", "\n", $msg); + $msg = preg_replace("/\r/", "\n", $msg); + // 90byte 이내는 SMS, 90 ~ 2000 byte 는 LMS 그 이상은 절삭 되어 LMS로 발송 + // SMS 이기 때문에 90byte 이내로 합니다. + $msg=cut_char($msg, 90); + $msg = spacing($msg, 90); + + // 한글 깨진것이 있는지 체크합니다. + if( preg_match('/^([\x00-\x7e]|.{2})*/', $msg, $z) ){ + $msg = $z[0]; + } + + // 문자 내용이 euc-kr 인지 체크합니다. + $enc = mb_detect_encoding($msg, array('EUC-KR', 'UTF-8')); + + // 문자 내용이 euc-kr 이면 json_encode 에서 깨지기 때문에 utf-8 로 변환합니다. + if($enc === 'EUC-KR'){ + $msg = iconv_utf8($msg); + } + + // 보낼 내용을 배열에 집어넣기 + $dest = $hp_number; + $callBack = $strCallBack; + $Caller = $strCaller; + $rsvTime = $strDate ? $strDate : ''; + + $list = array( + "key" => $this->icode_key, + "tel" => $dest, + "cb" => $callBack, + "msg" => $msg, + "title" => "", //SMS 의 경우 타이틀을 지정할수 없습니다. + "date" => $rsvTime + ); + + $packet = json_encode($list); + + if( !$packet ){ // json_encode가 잘못되었으면 보내지 않습니다. + return "json_encode error"; + } + $this->Data[$i] = '06'.str_pad(strlen($packet), 4, "0", STR_PAD_LEFT).$packet; } - // 아이코드에서는 문자에 utf-8 인코딩 형식을 아직 지원하지 않는다. - $strData = iconv('utf-8', "euc-kr", stripslashes($strData)); - if (!$strURL) { - $strData = spacing(cut_char($strData,80),80); + } else { - $this->Data[$i] = '01144 '.$this->ID.$this->PWD.$hp_number.$strCallBack.$strCaller.$strDate.$strData; - } else { - $strURL = spacing($strURL,50); - $strData = spacing($this->CheckCallCenter($strURL, $hp_number, $strData),80); + for ($i=0; $i<$nCount; $i++) { + $hp_number = spacing($strDest[$i]['bk_hp'],11); + $strData = $strMessage; + if( !empty($strDest[$i]['bk_name']) ){ + $strData = str_replace("{이름}", $strDest[$i]['bk_name'], $strData); + } + // 아이코드에서는 문자에 utf-8 인코딩 형식을 아직 지원하지 않는다. + $strData = iconv('utf-8', "euc-kr", stripslashes($strData)); - $this->Data[$i] = '05173 '.$this->ID.$this->PWD.$hp_number.$strCallBack.$strURL.$strDate.$strData; + if (!$strURL) { + $strData = spacing(cut_char($strData,80),80); + + $this->Data[$i] = '01144 '.$this->ID.$this->PWD.$hp_number.$strCallBack.$strCaller.$strDate.$strData; + } else { + $strURL = spacing($strURL,50); + $strData = spacing($this->CheckCallCenter($strURL, $hp_number, $strData),80); + + $this->Data[$i] = '05173 '.$this->ID.$this->PWD.$hp_number.$strCallBack.$strURL.$strDate.$strData; + } } } + return true; // 수정대기 } function Send() { - global $g5; + global $g5, $config; $count = 1; @@ -436,33 +385,61 @@ if($config['cf_sms_type'] == 'LMS') { exit; } - $fsocket=fsockopen($this->SMS_Server,$this->SMS_Port, $errno, $errstr, 2); - if (!$fsocket) return false; - set_time_limit(60); + // 토큰키를 사용한다면 + if( isset($config['cf_icode_token_key']) && $config['cf_icode_token_key'] === $this->icode_key ){ + $fsocket = fsockopen(trim($this->socket_host),trim($this->socket_port), $errno, $errstr, 2); + if (!$fsocket) return false; + set_time_limit(300); - ## php4.3.10일경우 - ## zend 최신버전으로 업해주세요.. - ## 또는 69번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요. + foreach($this->Data as $puts) { + fputs($fsocket, $puts); + while(!$gets) { $gets = fgets($fsocket,32); } + $json = json_decode(substr($puts,6), true); - foreach($this->Data as $puts) { - $dest = substr($puts,26,11); - fputs($fsocket, $puts); - while(!$gets) { - $gets = fgets($fsocket,30); + $dest = $json["tel"]; + if (substr($gets,0,20) == "0225 00".spacing($dest,12)) { + $this->Result[] = $dest.":".substr($gets,20,11); + + } else { + $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; + if(substr($gets,6,2) >= "80") break; + } + $gets = ""; + + // 1천건씩 전송 후 5초 쉼 + if ($count++%1000 == 0) sleep(5); } - if (substr($gets,0,19) == "0223 00".$dest) { - $this->Result[] = $dest.":".substr($gets,19,10); - $this->Log[] = $puts; - } else { - $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; - $this->Log[] = $puts; - } - $gets = ""; + fclose($fsocket); - // 1천건씩 전송 후 5초 쉼 - if ($count++%1000 == 0) sleep(5); + } else { + $fsocket = fsockopen($this->SMS_Server,$this->SMS_Port); + if (!$fsocket) return false; + set_time_limit(300); + + ## php4.3.10일경우 + ## zend 최신버전으로 업해주세요.. + ## 또는 69번째 줄을 $this->Data as $tmp => $puts 로 변경해 주세요. + + foreach($this->Data as $puts) { + $dest = substr($puts,26,11); + fputs($fsocket, $puts); + while(!$gets) { + $gets = fgets($fsocket,30); + } + if (substr($gets,0,19) == "0223 00".$dest) { + $this->Result[] = $dest.":".substr($gets,19,10); + $this->Log[] = $puts; + } else { + $this->Result[$dest] = $dest.":Error(".substr($gets,6,2).")"; + $this->Log[] = $puts; + } + $gets = ""; + + // 1천건씩 전송 후 5초 쉼 + if ($count++%1000 == 0) sleep(5); + } + fclose($fsocket); } - fclose($fsocket); $this->Data = array(); return true; } From 101d5995fa7c587d5d00cd3da97313011fb7724c Mon Sep 17 00:00:00 2001 From: thisgun Date: Mon, 13 Apr 2020 16:05:06 +0900 Subject: [PATCH 15/15] =?UTF-8?q?=EB=B2=84=EC=A0=84=205.4.2.4=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.php b/config.php index 8b2f4d3df..556a2cd5e 100644 --- a/config.php +++ b/config.php @@ -5,7 +5,7 @@ ********************/ define('G5_VERSION', '그누보드5'); -define('G5_GNUBOARD_VER', '5.4.2.3'); +define('G5_GNUBOARD_VER', '5.4.2.4'); // 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음 define('_GNUBOARD_', true);