feat: 새 설문조사 모듈 UI
This commit is contained in:
@@ -7,6 +7,7 @@ use sammo\DB;
|
||||
use sammo\DTO\VoteComment;
|
||||
use sammo\General;
|
||||
use sammo\Session;
|
||||
use sammo\TimeUtil;
|
||||
use sammo\Validator;
|
||||
|
||||
class AddComment extends \sammo\BaseAPI
|
||||
@@ -23,7 +24,7 @@ class AddComment extends \sammo\BaseAPI
|
||||
'voteID',
|
||||
'text',
|
||||
])->rule('lengthMin', 'text', 1)
|
||||
->rule('int', 'multipleOptions');
|
||||
->rule('int', 'voteID');
|
||||
|
||||
if (!$v->validate()) {
|
||||
return $v->errorStr();
|
||||
@@ -34,21 +35,24 @@ class AddComment extends \sammo\BaseAPI
|
||||
function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag)
|
||||
{
|
||||
$voteID = $this->args['voteID'];
|
||||
$text = $this->args['text'];
|
||||
$text = mb_substr($this->args['text'], 0, 200);
|
||||
|
||||
$generalID = $session->generalID;
|
||||
$general = General::createGeneralObjFromDB($generalID, [], 0);
|
||||
$generalName = $general->getName();
|
||||
$nationID = $general->getNationID();
|
||||
$nationName = $general->getStaticNation()['name'];
|
||||
$date = TimeUtil::now();
|
||||
|
||||
|
||||
$comment = new VoteComment(
|
||||
voteID: $voteID,
|
||||
generalID: $generalID,
|
||||
nationID: $nationID,
|
||||
nationName: $nationName,
|
||||
generalName: $generalName,
|
||||
vote_id: $voteID,
|
||||
general_id: $generalID,
|
||||
nation_id: $nationID,
|
||||
nation_name: $nationName,
|
||||
general_name: $generalName,
|
||||
text: $text,
|
||||
date: $date
|
||||
);
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
@@ -44,17 +44,31 @@ class GetVoteDetail extends \sammo\BaseAPI
|
||||
|
||||
|
||||
$votes = array_map(fn ($arr) => [Json::decode($arr[0]), $arr[1]], $db->queryAllLists(
|
||||
'SELECT selection, count(*) AS cnt FROM vote_result WHERE voteID = %i GROUP BY selection',
|
||||
'SELECT selection, count(*) AS cnt FROM vote WHERE vote_id = %i GROUP BY selection',
|
||||
$voteID
|
||||
));
|
||||
|
||||
$comments = VoteComment::arrayOf($db->query('SELECT * FROM vote_comment WHERE voteID = %i ORDER BY `id` ASC', $voteID));
|
||||
$comments = VoteComment::arrayOf($db->query('SELECT * FROM vote_comment WHERE vote_id = %i ORDER BY `id` ASC', $voteID));
|
||||
|
||||
$myVote = null;
|
||||
if($session->isGameLoggedIn()){
|
||||
$generalID = $session->generalID;
|
||||
$rawMyVote = $db->queryFirstField('SELECT selection FROM vote WHERE vote_id = %i AND general_id = %i', $voteID, $generalID);
|
||||
if($rawMyVote){
|
||||
$myVote = Json::decode($rawMyVote);
|
||||
}
|
||||
}
|
||||
|
||||
$userCnt = $db->queryFirstField('SELECT count(*) FROM general WHERE npc < 2');
|
||||
|
||||
|
||||
return [
|
||||
'result' => true,
|
||||
'voteInfo' => $voteInfo,
|
||||
'votes' => $votes,
|
||||
'comments' => $comments
|
||||
'comments' => $comments,
|
||||
'myVote' => $myVote,
|
||||
'userCnt' => $userCnt,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ use sammo\DB;
|
||||
use sammo\DTO\VoteInfo;
|
||||
use sammo\KVStorage;
|
||||
use sammo\Session;
|
||||
use sammo\TimeUtil;
|
||||
use sammo\Util;
|
||||
use sammo\Validator;
|
||||
|
||||
@@ -47,7 +48,7 @@ class NewVote extends \sammo\BaseAPI
|
||||
return;
|
||||
}
|
||||
|
||||
$lastVoteInfo->endDate = new \DateTimeImmutable();;
|
||||
$lastVoteInfo->endDate = TimeUtil::now();
|
||||
$voteStor->setValue("vote_{$voteID}", $lastVoteInfo->toArray());
|
||||
}
|
||||
|
||||
@@ -68,12 +69,29 @@ class NewVote extends \sammo\BaseAPI
|
||||
$multipleOptions = 0;
|
||||
}
|
||||
|
||||
|
||||
$now = new \DateTimeImmutable();
|
||||
$now = TimeUtil::now();
|
||||
/** @var ?string */
|
||||
$endDate = $this->args['endDate'] ?? null;
|
||||
/** @var string[] */
|
||||
$options = $this->args['options'] ?? [];
|
||||
|
||||
if(!$options){
|
||||
return '항목이 없습니다.';
|
||||
}
|
||||
|
||||
if($endDate !== null){
|
||||
try{
|
||||
$oNow = new \DateTimeImmutable($now);
|
||||
$oEndDate = new \DateTimeImmutable($endDate);
|
||||
if($oEndDate < $oNow){
|
||||
return '종료일이 이미 지났습니다.';
|
||||
}
|
||||
}
|
||||
catch(\Throwable $e){
|
||||
return '종료일이 잘못되었습니다.'.$e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
$db = DB::db();
|
||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||
|
||||
@@ -99,6 +117,8 @@ class NewVote extends \sammo\BaseAPI
|
||||
);
|
||||
|
||||
$voteStor->setValue("vote_{$voteID}", $voteInfo->toArray());
|
||||
$gameStor->setValue('lastVote', $voteID);
|
||||
|
||||
$db->update('general', [
|
||||
'newvote' => 1
|
||||
], true);
|
||||
|
||||
Reference in New Issue
Block a user