02f26eee创建于 2025年4月23日历史提交
<?php


namespace Module\Blog\Api\Controller;


use Illuminate\Routing\Controller;
use ModStart\Core\Assets\AssetsUtil;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Exception\BizException;
use ModStart\Core\Input\InputPackage;
use ModStart\Core\Input\Response;
use ModStart\Core\Util\HtmlUtil;
use Module\Blog\Core\BlogMessageContentVerifyBiz;
use Module\Blog\Model\BlogMessage;
use Module\Blog\Type\BlogCommentStatus;
use Module\Blog\Type\BlogMessageStatus;
use Module\Member\Auth\MemberUser;
use Module\Member\Util\MemberUtil;
use Module\Vendor\Provider\Captcha\CaptchaProvider;
use Module\Vendor\Provider\ContentVerify\ContentVerifyJob;


/**
 * @Api 博客系统
 */
class MessageController extends Controller
{
    /**
     * @Api 留言-列表
     * @ApiBodyParam page int 页码
     */
    public function paginate()
    {
        $input = InputPackage::buildFromInput();
        $page = $input->getInteger('page', 1);
        $pageSize = 10;

        $option = [];
        $option['where']['status'] = BlogMessageStatus::VERIFY_SUCCESS;
        $option['order'] = ['id', 'desc'];
        $paginateData = ModelUtil::paginate(BlogMessage::class, $page, $pageSize, $option);

        $records = $paginateData['records'];
        if (modstart_module_enabled('Member')) {
            MemberUtil::mergeMemberUserBasics($records);
        }
        foreach ($records as $i => $record) {
            $avatar = 'asset/image/avatar.svg';
            if (!empty($record['_memberUser']['avatar'])) {
                $avatar = $record['_memberUser']['avatar'];
            }
            $records[$i]['_avatar'] = AssetsUtil::fixFull($avatar);
        }

        return Response::generateSuccessData([
            'records' => $records,
            'total' => $paginateData['total'],
            'page' => $page,
            'pageSize' => $pageSize,
        ]);
    }

    /**
     * @Api 留言-新增
     * @ApiBodyParam username string 用户
     * @ApiBodyParam content string 内容
     * @ApiBodyParam email string 邮箱
     * @ApiBodyParam url string 网址
     */
    public function add()
    {
        $input = InputPackage::buildFromInput();
        $data = [];
        $data['username'] = $input->getTrimString('username');
        $data['content'] = $input->getTrimString('content');
        $data['email'] = $input->getTrimString('email');
        $data['url'] = $input->getTrimString('url');
        $ret = CaptchaProvider::get(modstart_config('Blog_MessageCaptchaProvider', 'default'))->validate();
        if (Response::isError($ret)) {
            return $ret;
        }
        BizException::throwsIfEmpty('内容为空', $data['content']);
        $data['content'] = HtmlUtil::text2html($data['content']);
        if (modstart_module_enabled('Member')) {
            if (MemberUser::isLogin()) {
                $data['username'] = MemberUser::get('username');
            }
            $data['memberUserId'] = MemberUser::id();
        } else {
            $data['memberUserId'] = 0;
        }
        if (modstart_config('Blog_MessageVerifyEnable', false)) {
            $data['status'] = BlogCommentStatus::WAIT_VERIFY;
        } else {
            $data['status'] = BlogCommentStatus::VERIFY_SUCCESS;
        }
        $data = ModelUtil::insert('blog_message', $data);

        if ($data['status'] == BlogCommentStatus::WAIT_VERIFY) {
            ContentVerifyJob::create(BlogMessageContentVerifyBiz::NAME, [
                'id' => $data['id'],
            ], $data['content']);
        }
        return Response::generate(0, '提交成功,后台审核后将会显示', null, '[reload]');
    }
}