CodeIgniter4:喜欢或不喜欢的功能允许两者都可以限制每个用户的一票

发布于 2025-02-07 04:55:48 字数 5325 浏览 2 评论 0原文

我正在尝试在我的图像上传站点中实现类似或不喜欢的(Undislike)功能。我正在使用Ajax来实现这一目标,到目前为止,我已经能够将用户限制在每个上传页面的一个视图中,但是我无法将用户限制为“喜欢或不喜欢”的一票。他们目前可以做。

问题在于我的Model ActionModel.php中:

public function insertAction(array $request)
    {
        $image = new \App\Entities\Image();

        $request = $this->updateModified($request);

        switch($request['action']) {

            case 'dislike':

                $data = [
                    'action'    => 0,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserLiked($request['viewkey']);

                if ($image->userLiked === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set($data)
                        ->where(['action' => 1, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
                        ->replace();
                }

                unset($image->setUserLiked);

                break;

            case 'undislike':

                $this->builder()
                    ->where('action', 0)
                    ->delete();

                break;

            case 'like':

               $data = [
                    'action'    => 1,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserDisliked($request['viewkey']);

                if ($image->userDisliked === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set($data)
                        ->where(['action' => 0, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
                        ->replace();
                }

                unset($image->userDisliked);

                break;

            case 'unlike':

                $this->builder()
                    ->where('action', 1)
                    ->delete();

                break;

            case 'view':

               $data = [
                    'action'    => 2,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserViewed($request['viewkey']);

                if ($image->userViewed == FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set(['modified_at' => $data['modified_at']])
                        ->where(['action' => 2, 'username' => session()->get('username'),  'viewkey' => $data['viewkey']])
                        ->update();
                }

                unset($image->userViewed);

                break;

            case 'favorite':

               $data = [
                    'action'    => 3,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserFavorited($request['viewkey']);

                if ($image->userFavorited === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                }

                unset($image->userFavorited);

                break;

            case 'unfavorite':

                $this->builder()
                    ->where('action', 3)
                    ->delete();

                break;
            
            default:

                break;
        }

        return $this->getActions($request['viewkey']);
    }

    public function getActions(string $viewkey)
    {
        $data = [];

        $image = $this->imageModel->fillImageEntity($viewkey);
        $image->setDislikeCount($viewkey);
        $image->setLikeCount($viewkey);
        $image->setViewCount($viewkey);
        $image->setFavoriteCount($viewkey);

        $data = [
            'csrfName'  => csrf_token(),
            'csrfHash'  => csrf_hash(),
            'dislikes'  => $image->dislikeCount,
            'likes'     => $image->likeCount,
            'views'     => $image->viewCount,
            'favorites' => $image->favoriteCount,
        ];

        unset($image->dislikeCount);
        unset($image->likeCount);
        unset($image->viewCount);
        unset($image->favoriteCount);

        return json_encode($data);
    }

I am trying to implement a like (unlike) or dislike (undislike) feature to my image upload site. I am using AJAX to accomplish this and so far I have been able to limit users to one view of each upload page but I cannot restrict users to one vote of like OR dislike. They can do both currently.

The problem is in my model ActionModel.php:

public function insertAction(array $request)
    {
        $image = new \App\Entities\Image();

        $request = $this->updateModified($request);

        switch($request['action']) {

            case 'dislike':

                $data = [
                    'action'    => 0,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserLiked($request['viewkey']);

                if ($image->userLiked === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set($data)
                        ->where(['action' => 1, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
                        ->replace();
                }

                unset($image->setUserLiked);

                break;

            case 'undislike':

                $this->builder()
                    ->where('action', 0)
                    ->delete();

                break;

            case 'like':

               $data = [
                    'action'    => 1,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserDisliked($request['viewkey']);

                if ($image->userDisliked === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set($data)
                        ->where(['action' => 0, 'username' => $data['username'], 'viewkey' => $data['viewkey']])
                        ->replace();
                }

                unset($image->userDisliked);

                break;

            case 'unlike':

                $this->builder()
                    ->where('action', 1)
                    ->delete();

                break;

            case 'view':

               $data = [
                    'action'    => 2,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserViewed($request['viewkey']);

                if ($image->userViewed == FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                
                } else {

                    $this->builder()
                        ->set(['modified_at' => $data['modified_at']])
                        ->where(['action' => 2, 'username' => session()->get('username'),  'viewkey' => $data['viewkey']])
                        ->update();
                }

                unset($image->userViewed);

                break;

            case 'favorite':

               $data = [
                    'action'    => 3,
                    'username'  => session()->get('username'),
                    'viewkey'   => $request['viewkey'],
                    'modified_at'  => $request['modified_at'],
                ];

                $image->setUserFavorited($request['viewkey']);

                if ($image->userFavorited === FALSE) {
                    
                    $this->builder()
                        ->insert($data);
                }

                unset($image->userFavorited);

                break;

            case 'unfavorite':

                $this->builder()
                    ->where('action', 3)
                    ->delete();

                break;
            
            default:

                break;
        }

        return $this->getActions($request['viewkey']);
    }

    public function getActions(string $viewkey)
    {
        $data = [];

        $image = $this->imageModel->fillImageEntity($viewkey);
        $image->setDislikeCount($viewkey);
        $image->setLikeCount($viewkey);
        $image->setViewCount($viewkey);
        $image->setFavoriteCount($viewkey);

        $data = [
            'csrfName'  => csrf_token(),
            'csrfHash'  => csrf_hash(),
            'dislikes'  => $image->dislikeCount,
            'likes'     => $image->likeCount,
            'views'     => $image->viewCount,
            'favorites' => $image->favoriteCount,
        ];

        unset($image->dislikeCount);
        unset($image->likeCount);
        unset($image->viewCount);
        unset($image->favoriteCount);

        return json_encode($data);
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文