Passed
Push — dev5 ( c2dc0b...cbc2fc )
by Ron
08:19
created

GetTechTips::searchTips()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 42
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 24
CRAP Score 4

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 24
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 42
ccs 24
cts 24
cp 1
crap 4
rs 9.536
1
<?php
2
3
namespace App\Domains\TechTips;
4
5
use Illuminate\Support\Arr;
6
use Illuminate\Support\Facades\Log;
7
8
use App\TechTips;
9
10
use App\Http\Resources\TechTipsCollection;
11
use App\Http\Requests\TechTipSearchRequest;
12
13
class GetTechTips
14
{
15 8
    public function searchTips(TechTipSearchRequest $request)
16
    {
17 8
        $searchFields = $request->search;
18
19
        //  See if there are any search paramaters entered
20 8
        if($searchFields['searchText'] == null && !Arr::has($searchFields, 'articleType') && !Arr::has($searchFields, 'systemType'))
21
        {
22
            //  No search paramaters, send all tech tips
23 2
            $tips = new TechTipsCollection(
24 2
                TechTips::orderBy('created_at', 'DESC')
25 2
                    ->with('SystemTypes')
26 2
                    ->paginate($request->pagination['perPage']
27
            ));
28
        }
29
        else
30
        {
31 6
            $article = Arr::has($searchFields, 'articleType');
32 6
            $system  = Arr::has($searchFields, 'systemType');
33
            //  Search paramaters, filter results
34 6
            $tips = new TechTipsCollection(
35 6
                TechTips::orderBy('created_at', 'DESC')
36
                    //  Search by id or a phrase in the title or description
37
                    ->where(function($query) use ($searchFields) {
38 6
                        $query->where('subject', 'like', '%'.$searchFields['searchText'].'%')
39 6
                            ->orWhere('tip_id', 'like', '%'.$searchFields['searchText'].'%')
40 6
                            ->orWhere('description', 'like', '%'.$searchFields['searchText'].'%');
41 6
                    })
42
                    ->when($article, function($query) use ($searchFields) {
43 2
                        $query->whereIn('tip_type_id', $searchFields['articleType']);
44 6
                    })
45
                    ->when($system, function($query) use ($searchFields) {
46
                        $query->whereHas('SystemTypes', function($query) use ($searchFields) {
47 2
                            $query->whereIn('system_types.sys_id', $searchFields['systemType']);
48 2
                        });
49 6
                    })
50 6
                    ->with('SystemTypes')
51 6
                    ->paginate($request->pagination['perPage'])
52
            );
53
        }
54
55 8
        Log::debug('Tech Tip search query performed.  Results - ', array($tips));
56 8
        return $tips;
57
    }
58
}
59