Test Failed
Push — master ( e3c39f...fe570d )
by Mihail
07:20
created

Apps/Controller/Api/Profile/ActionMessageList.php (2 issues)

1
<?php
2
3
namespace Apps\Controller\Api\Profile;
4
5
use Apps\ActiveRecord\Blacklist;
6
use Apps\ActiveRecord\Message;
7
use Ffcms\Core\App;
8
use Ffcms\Core\Exception\ForbiddenException;
9
use Ffcms\Core\Exception\NativeException;
10
use Ffcms\Core\Exception\NotFoundException;
11
use Ffcms\Core\Helper\Date;
12
use Ffcms\Core\Helper\Type\Any;
13
use Ffcms\Core\Helper\Type\Arr;
14
use Ffcms\Core\Network\Request;
15
use Ffcms\Core\Network\Response;
16
17
/**
18
 * Class ActionMessageList
19
 * @package Apps\Controller\Api\Profile
20
 * @property Request $request
21
 * @property Response $response
22
 * @method void setJsonHeader
23
 */
24
trait ActionMessageList
25
{
26
    /**
27
     * List messages with correspondent
28
     * @param $corId
29
     * @return string
30
     * @throws ForbiddenException
31
     * @throws NotFoundException
32
     * @throws NativeException
33
     */
34
    public function messageList($corId): ?string
35
    {
36
        if (!App::$User->isAuth()) {
37
            throw new ForbiddenException('Auth required');
38
        }
39
40
        if (!Any::isInt($corId) || $corId < 1) {
41
            throw new NotFoundException('Corresponded id is wrong');
42
        }
43
44
        // get special types for this action
45
        $queryType = $this->request->get('type');
46
        $queryId = (int)$this->request->get('id');
47
        // get current user object
48
        $user = App::$User->identity();
49
50
        if (Arr::in($queryType, ['before', 'after']) && (!Any::isInt($queryId) || $queryId < 1)) {
51
            throw new NativeException('Bad input data');
52
        }
53
54
        $messages = null;
55
        // sounds like a Hindi code, but we need more closures to organize where conditions
56
        // after raw: select * from `ffcms_messages` where `id` > ? and ((`target_id` = ? and `sender_id` = ?) or (`target_id` = ? and `sender_id` = ?)) order by `created_at` desc
0 ignored issues
show
Unused Code Comprehensibility introduced by Mihail
37% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
57
        // before raw: select * from `ffcms_messages` where (`target_id` = ? and `sender_id` = ?) or (`target_id` = ? and `sender_id` = ?) order by `created_at` desc
58
        // default raw: select * from `ffcms_messages` where `id` < ? and ((`target_id` = ? and `sender_id` = ?) or (`target_id` = ? and `sender_id` = ?)) order by `created_at` desc
0 ignored issues
show
Unused Code Comprehensibility introduced by Mihail
38% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
59
        switch ($queryType) {
60
            case 'after':
61
                $messages = Message::where('id', '>', $queryId)
62
                    ->where(function ($query) use ($corId, $user) {
63
                        $query->where(function ($q) use ($corId, $user) {
64
                            $q->where('target_id', '=', $user->getId())
65
                                ->where('sender_id', '=', $corId);
66
                        })->orWhere(function ($q) use ($corId, $user) {
67
                            $q->where('target_id', '=', $corId)
68
                                ->where('sender_id', '=', $user->getId());
69
                        });
70
                    });
71
                break;
72
            case 'before':
73
                $messages = Message::where('id', '<', $queryId)
74
                    ->where(function ($query) use ($corId, $user) {
75
                        $query->where(function ($q) use ($corId, $user) {
76
                            $q->where('target_id', '=', $user->getId())
77
                                ->where('sender_id', '=', $corId);
78
                        })->orWhere(function ($q) use ($corId, $user) {
79
                            $q->where('target_id', '=', $corId)
80
                                ->where('sender_id', '=', $user->getId());
81
                        });
82
                    });
83
                break;
84
            default:
85
                $messages = Message::where(function ($query) use ($corId, $user) {
86
                    $query->where('target_id', '=', $user->getId())
87
                        ->where('sender_id', '=', $corId);
88
                })->orWhere(function ($query) use ($corId, $user) {
89
                    $query->where('target_id', '=', $corId)
90
                        ->where('sender_id', '=', $user->getId());
91
                });
92
                break;
93
        }
94
95
        // set response header
96
        $this->setJsonHeader();
97
98
        $messages->orderBy('created_at', 'DESC')
99
            ->take(self::MSG_TEXT_LIST);
100
101
        // check if messages exist
102
        if ($messages->count() < 1) {
103
            return json_encode(['status' => 0, 'text' => 'No messages']);
104
        }
105
106
        // build response
107
        $response = [];
108
        $messages->get()->each(function ($msg) use (&$response, $user){
109
            /** @var Message $msg */
110
            $response[] = [
111
                'id' => $msg->id,
112
                'my' => $msg->sender_id === $user->id,
113
                'message' => $msg->message,
114
                'date' => Date::convertToDatetime($msg->created_at, Date::FORMAT_TO_SECONDS),
115
                'readed' => $msg->readed
116
            ];
117
118
            // update status to readed
119
            if (!(bool)$msg->readed && $msg->sender_id !== $user->id) {
120
                $msg->readed = true;
121
                $msg->save();
122
            }
123
        });
124
125
        return json_encode([
126
            'status' => 1,
127
            'data' => array_reverse($response),
128
            'blocked' => !Blacklist::check($user->id, $corId)
129
        ]);
130
    }
131
}
132