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),
];
}