From 0961220fdd512081ec67d173a5ebfa0231719f41 Mon Sep 17 00:00:00 2001 From: hide_d Date: Mon, 13 Dec 2021 02:03:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B5=AD=EB=B0=A9,=20=EC=9E=84?= =?UTF-8?q?=EA=B4=80=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=97=90=EB=94=94?= =?UTF-8?q?=ED=84=B0=EC=97=90=20TipTap=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/c_dipcenter.php | 8 +- hwe/sammo/API/Nation/SetNotice.php | 58 ++++++++++++ hwe/sammo/API/Nation/SetScoutMsg.php | 58 ++++++++++++ hwe/ts/PartialDipcenter.vue | 98 +++++++++++++++++--- hwe/ts/components/TipTap.vue | 133 +++++++++++++++++++++++++++ package.json | 5 + 6 files changed, 342 insertions(+), 18 deletions(-) create mode 100644 hwe/sammo/API/Nation/SetNotice.php create mode 100644 hwe/sammo/API/Nation/SetScoutMsg.php create mode 100644 hwe/ts/components/TipTap.vue diff --git a/hwe/c_dipcenter.php b/hwe/c_dipcenter.php index 41fa6f56..19785b1d 100644 --- a/hwe/c_dipcenter.php +++ b/hwe/c_dipcenter.php @@ -7,8 +7,8 @@ include "func.php"; // $btn, $msg, $scoutmsg, $rate, $bill, $secretlimit $btn = Util::getPost('btn'); -$msg = Util::getPost('msg'); -$scoutmsg = Util::getPost('scoutMsg'); +//$msg = Util::getPost('msg'); +//$scoutmsg = Util::getPost('scoutMsg'); $rate = Util::getPost('rate', 'int'); $bill = Util::getPost('bill', 'int'); $secretlimit = Util::getPost('secretlimit', 'int'); @@ -34,14 +34,14 @@ if ($permission < 0) { $nationID = $me['nation']; $nationStor = KVStorage::getStorage($db, $nationID, 'nation_env'); -if ($btn == "국가방침 수정") { +/*if ($btn == "국가방침 수정") { $msg = mb_substr($msg, 0, 16384); //$msg = StringUtil:: $nationStor->notice = WebUtil::htmlPurify($msg); } elseif ($btn == "임관 권유문 수정") { $scoutmsg = mb_substr($scoutmsg, 0, 1000); $nationStor->scout_msg = WebUtil::htmlPurify($scoutmsg); -} elseif ($btn == "세율") { +} else*/if ($btn == "세율") { $rate = Util::valueFit($rate, 5, 30); $db->update('nation', [ 'rate' => $rate, diff --git a/hwe/sammo/API/Nation/SetNotice.php b/hwe/sammo/API/Nation/SetNotice.php new file mode 100644 index 00000000..6c30ac57 --- /dev/null +++ b/hwe/sammo/API/Nation/SetNotice.php @@ -0,0 +1,58 @@ +args); + $v->rule('required', [ + 'msg', + ])->rule('lengthMax', 'msg', 16384); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $msg = $this->args['msg']; + $userID = $session->userID; + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + + $permission = checkSecretPermission($me, false); + if($permission < 0){ + return "권한이 부족합니다."; + } + if ($me['officer_level'] < 5 && $permission != 4){ + return "권한이 부족합니다."; + } + + $nationID = $me['nation']; + + $nationStor = KVStorage::getStorage($db, $nationID, 'nation_env'); + $nationStor->notice = WebUtil::htmlPurify($msg); + + return [ + 'result' => true + ]; + } +} diff --git a/hwe/sammo/API/Nation/SetScoutMsg.php b/hwe/sammo/API/Nation/SetScoutMsg.php new file mode 100644 index 00000000..d48bed93 --- /dev/null +++ b/hwe/sammo/API/Nation/SetScoutMsg.php @@ -0,0 +1,58 @@ +args); + $v->rule('required', [ + 'msg', + ])->rule('lengthMax', 'msg', 1000); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $msg = $this->args['msg']; + $userID = $session->userID; + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + + $permission = checkSecretPermission($me, false); + if($permission < 0){ + return "권한이 부족합니다."; + } + if ($me['officer_level'] < 5 && $permission != 4){ + return "권한이 부족합니다."; + } + + $nationID = $me['nation']; + + $nationStor = KVStorage::getStorage($db, $nationID, 'nation_env'); + $nationStor->scout_msg = WebUtil::htmlPurify($msg); + + return [ + 'result' => true + ]; + } +} diff --git a/hwe/ts/PartialDipcenter.vue b/hwe/ts/PartialDipcenter.vue index 7982792d..ae94abdd 100644 --- a/hwe/ts/PartialDipcenter.vue +++ b/hwe/ts/PartialDipcenter.vue @@ -1,53 +1,123 @@ \ No newline at end of file diff --git a/hwe/ts/components/TipTap.vue b/hwe/ts/components/TipTap.vue new file mode 100644 index 00000000..7042cb50 --- /dev/null +++ b/hwe/ts/components/TipTap.vue @@ -0,0 +1,133 @@ + + + \ No newline at end of file diff --git a/package.json b/package.json index 2d370889..0ace3edf 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,14 @@ "license": "MIT", "type": "module", "dependencies": { + "@tiptap/extension-image": "^2.0.0-beta.24", + "@tiptap/extension-link": "^2.0.0-beta.33", + "@tiptap/starter-kit": "^2.0.0-beta.156", + "@tiptap/vue-3": "^2.0.0-beta.83", "@types/bootstrap": "^5.1.6", "@types/downloadjs": "^1.4.2", "@types/linkifyjs": "^2.1.4", + "@types/quill": "^2.0.9", "@types/select2": "^4.0.54", "@vueup/vue-quill": "^1.0.0-beta.7", "async-validator": "^4.0.7",