public function list()

in app/Http/Controllers/ContactsController.php [663:733]


    public function list(Request $request)
    {
        $accountId = auth()->user()->account_id;

        $user = $request->user();
        $sort = $request->input('sort') ?? $user->contacts_sort_order;

        if ($user->contacts_sort_order !== $sort) {
            app(UpdateViewPreference::class)->execute([
                'account_id' => $user->account_id,
                'user_id' => $user->id,
                'preference' => $sort,
            ]);
        }

        $tags = null;
        $url = '';
        $count = 1;

        $contacts = $user->account->contacts()->real();

        // filter out archived contacts if necessary
        if ($request->input('show_archived') != 'true') {
            $contacts = $contacts->active();
        } else {
            $contacts = $contacts->notActive();
        }

        // filter out deceased if necessary
        if ($request->input('show_dead') != 'true') {
            $contacts = $contacts->alive();
        }

        if ($request->input('no_tag')) {
            // get tag less contacts
            $contacts = $contacts->tags('NONE');
        } elseif ($request->input('tag1')) {
            // get contacts with selected tags
            $tags = collect();

            while ($request->input('tag'.$count)) {
                $tag = Tag::where([
                    'account_id' => $accountId,
                    'name_slug' => $request->input('tag'.$count),
                ])->get();

                if (! ($tags->contains($tag[0]))) {
                    $tags = $tags->concat($tag);
                }

                $url = $url.'tag'.$count.'='.$tag[0]->name_slug.'&';

                $count++;
            }
            if ($tags->count() > 0) {
                $contacts = $contacts->tags($tags);
            }
        }

        // get the number of contacts per page
        $perPage = $request->has('perPage') ? $request->input('perPage') : config('monica.number_of_contacts_pagination');

        // search contacts
        $contacts = $contacts->search($request->input('search') ?? '', $accountId, 'is_starred', 'desc', $sort)
            ->paginate($perPage);

        return [
            'totalRecords' => $contacts->total(),
            'contacts' => ContactResource::collection($contacts),
        ];
    }