Welcome Guest, Not a member yet? Register   Sign In
Like or dislike feature allows both but want to limit one vote per user
#1

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:
PHP Code:
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);
    
Reply
#2

Add a database field for ( voted intenger 1 = voted 0 = not voted. )
Then you can check this field to see if they voted or not.
What did you Try? What did you Get? What did you Expect?

Joined CodeIgniter Community 2009.  ( Skype: insitfx )
Reply
#3

(06-13-2022, 11:58 PM)InsiteFX Wrote: Add a database field for ( voted intenger 1 = voted 0 = not voted. )
Then you can check this field to see if they voted or not.

Yes I didi as @InsiteFX it is working fine Of course I recommend from @InsiteFX
Codeigniter First, Codeigniter Then You!!
yekrinaDigitals

Reply




Theme © iAndrew 2016 - Forum software by © MyBB