Passed
Push — dev6 ( 705373...a5af58 )
by Ron
18:33
created

SearchTipsController   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
eloc 22
c 1
b 0
f 0
dl 0
loc 51
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B __invoke() 0 46 9
1
<?php
2
3
namespace App\Http\Controllers\TechTips;
4
5
use App\Models\TechTip;
6
use App\Http\Controllers\Controller;
7
use App\Http\Requests\TechTips\SearchTipsRequest;
8
9
use Illuminate\Http\Request;
10
11
class SearchTipsController extends Controller
12
{
13
    /**
14
     *  Perform a search query on the existing Tech Tips
15
     */
16
    public function __invoke(SearchTipsRequest $request)
17
    {
18
        $dirty       = false;
19
        $searchText  = isset($request->search_text)     ? explode(' ', $request->search_text) : null;
20
        $searchEquip = isset($request->search_equip_id) ? $request->search_equip_id           : null;
21
        $searchType  = isset($request->search_type)     ? $request->search_type               : null;
22
23
        //  Determine if any search queries have been entered
24
        if($searchText || $searchEquip || $searchType)
25
        {
26
            $dirty = true;
27
        }
28
29
        //  If no search queries, send all Tech Tips (limited by pagination)
30
        if(!$dirty)
31
        {
32
            return TechTip::with('EquipmentType')->orderBy('sticky', 'DESC')->paginate($request->pagination_perPage);
33
        }
34
35
        //  Perform the search query
36
        return TechTip::with('EquipmentType')
37
            ->orderBy('sticky', 'DESC')
38
            //  Search text fields
39
            ->when($searchText, function ($q) use($searchText)
40
                {
41
                    foreach($searchText as $text)
42
                    {
43
                        $q->orWhere('subject', 'like', '%'.$text.'%')
44
                            ->orWhere('tip_id', 'like', '%'.$text.'%')
45
                            ->orWhere('details', 'like', '%'.$text.'%');
46
                    }
47
                })
48
            //  Search Article Type field
49
            ->when($searchType, function($q) use($searchType)
50
                {
51
                    $q->whereIn('tip_type_id', $searchType);
52
                })
53
            //  Search Equipment Type field
54
            ->when($searchEquip, function($q) use($searchEquip)
55
                {
56
                    $q->whereHas('EquipmentType', function($q2) use ($searchEquip)
57
                    {
58
                        $q2->whereIn('equipment_types.equip_id', $searchEquip);
59
                    });
60
                })
61
            ->paginate($request->pagination_perPage);
62
    }
63
}
64