private function contacts()

in app/Http/Controllers/ContactsController.php [67:147]


    private function contacts(Request $request, bool $active)
    {
        $user = $request->user();
        $sort = $request->input('sort') ?? $user->contacts_sort_order;
        $showDeceased = $request->input('show_dead');

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

        $contacts = $user->account->contacts()->real();
        if ($active) {
            $archived = (clone $contacts)->notActive();
            $contacts = (clone $contacts)->active();
            $nbArchived = $archived->count();
        } else {
            $contacts = $contacts->notActive();
            $nbArchived = $contacts->count();
        }

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

        if ($request->input('tag1')) {

            // get contacts with selected tags
            $tags = collect();

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

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

                    $url .= 'tag'.$count.'='.$tag[0]->name_slug.'&';
                }
                $count++;
            }
            if ($tags->count() === 0) {
                return redirect()->route('people.index');
            } else {
                $contacts = $contacts->tags($tags);
            }
        } elseif ($request->input('no_tag')) {
            $contacts = $contacts->tags('NONE');
        }

        $contactsCount = (clone $contacts)->alive()->count();
        $deceasedCount = (clone $contacts)->dead()->count();

        if ($showDeceased === 'true') {
            $contactsCount += $deceasedCount;
        }

        $accountHasLimitations = AccountHelper::hasLimitations(auth()->user()->account);

        return view('people.index')
            ->withAccountHasLimitations($accountHasLimitations)
            ->with('hidingDeceased', $showDeceased != 'true')
            ->with('deceasedCount', $deceasedCount)
            ->withActive($active)
            ->withContactsCount($contactsCount)
            ->withHasArchived($nbArchived > 0)
            ->withArchivedContacts($nbArchived)
            ->withTags($tags)
            ->withTagsCount(Tag::contactsCount())
            ->withUrl($url)
            ->withTagCount($count)
            ->withTagLess($request->input('no_tag') ?? false);
    }