Issues (435)

app/Http/Controllers/SearchController.php (2 issues)

1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Models\Category;
6
use App\Models\UsenetGroup;
7
use Blacklight\Releases;
8
use Illuminate\Http\Request;
9
10
class SearchController extends BasePageController
11
{
12
    /**
13
     * @throws \Exception
14
     */
15
    public function search(Request $request)
16
    {
17
        $releases = new Releases;
18
19
        $results = [];
20
21
        $searchType = 'basic';
22
        if ($request->has('search_type') && $request->input('search_type') === 'adv') {
23
            $searchType = 'advanced';
24
        }
25
26
        $ordering = $releases->getBrowseOrdering();
27
        $orderBy = ($request->has('ob') && \in_array($request->input('ob'), $ordering, false) ? $request->input('ob') : '');
28
        $page = $request->has('page') && is_numeric($request->input('page')) ? $request->input('page') : 1;
29
        $offset = ($page - 1) * config('nntmux.items_per_page');
30
31
        $subject = '';
32
        $search = '';
33
        $id = '';
34
        $category = [0];
35
        $lastvisit = $this->userdata->lastlogin;
36
37
        if ($searchType === 'basic' && $request->missing('searchadvr') && ($request->has('id') || $request->has('subject') || $request->has('search'))) {
38
            $searchString = [];
39
            switch (true) {
40
                case $request->filled('subject'):
41
                    $searchString['searchname'] = (string) $request->input('subject') ?? [];
42
                    $subject = $searchString['searchname'];
43
                    break;
44
                case $request->filled('id'):
45
                    $searchString['searchname'] = (string) $request->input('id') ?? [];
46
                    $id = $searchString['searchname'];
47
                    break;
48
                case $request->filled('search'):
49
                    $searchString['searchname'] = (string) $request->input('search') ?? [];
50
                    $search = $searchString['searchname'];
51
                    break;
52
                default:
53
                    $searchString['searchname'] = '';
54
            }
55
56
            $categoryID[] = -1;
0 ignored issues
show
Comprehensibility Best Practice introduced by
$categoryID was never initialized. Although not strictly required by PHP, it is generally a good practice to add $categoryID = array(); before regardless.
Loading history...
57
            if ($request->has('t')) {
58
                $categoryID = explode(',', $request->input('t'));
59
            }
60
61
            $orderByUrls = [];
62
            foreach ($releases->getBrowseOrdering() as $orderType) {
63
                $orderByUrls['orderby'.$orderType] = url('/search?search='.htmlentities($searchString['searchname'], ENT_QUOTES | ENT_HTML5).'&t='.implode(',', $categoryID).'&ob='.$orderType);
64
            }
65
66
            $rslt = $releases->search(
67
                $searchString,
68
                -1,
69
                -1,
70
                -1,
71
                -1,
72
                -1,
73
                $offset,
74
                config('nntmux.items_per_page'),
75
                $orderBy,
76
                -1,
77
                $this->userdata->categoryexclusions ?? [],
0 ignored issues
show
The property categoryexclusions does not seem to exist on App\Models\User.
Loading history...
78
                'basic',
79
                $categoryID);
80
81
            $results = $this->paginate($rslt ?? [], $rslt[0]->_totalrows ?? 0, config('nntmux.items_per_page'), $page, $request->url(), $request->query());
82
            $category = $categoryID;
83
        } else {
84
            $orderByUrls = [];
85
        }
86
87
        $searchVars = [
88
            'searchadvr' => '',
89
            'searchadvsubject' => '',
90
            'searchadvposter' => '',
91
            'searchadvfilename' => '',
92
            'searchadvdaysnew' => '',
93
            'searchadvdaysold' => '',
94
            'searchadvgroups' => '',
95
            'searchadvcat' => '',
96
            'searchadvsizefrom' => '',
97
            'searchadvsizeto' => '',
98
            'searchadvhasnfo' => '',
99
            'searchadvhascomments' => '',
100
        ];
101
102
        foreach ($searchVars as $searchVarKey => $searchVar) {
103
            $searchVars[$searchVarKey] = ($request->has($searchVarKey) ? (string) $request->input($searchVarKey) : '');
104
        }
105
106
        $searchVars['selectedgroup'] = $searchVars['searchadvgroups'];
107
        $searchVars['selectedcat'] = $searchVars['searchadvcat'];
108
        $searchVars['selectedsizefrom'] = $searchVars['searchadvsizefrom'];
109
        $searchVars['selectedsizeto'] = $searchVars['searchadvsizeto'];
110
111
        if ($searchType !== 'basic' && $request->missing('id') && $request->missing('subject') && $request->anyFilled(['searchadvr', 'searchadvsubject', 'searchadvfilename', 'searchadvposter'])) {
112
            $orderByString = '';
113
            foreach ($searchVars as $searchVarKey => $searchVar) {
114
                $orderByString .= "&$searchVarKey=".htmlentities($searchVar, ENT_QUOTES | ENT_HTML5);
115
            }
116
            $orderByString = ltrim($orderByString, '&');
117
118
            $orderByUrls = [];
119
            foreach ($ordering as $orderType) {
120
                $orderByUrls['orderby'.$orderType] = url('/search?'.$orderByString.'&search_type=adv&ob='.$orderType);
121
            }
122
123
            $searchArr = [
124
                'searchname' => $searchVars['searchadvr'] === '' ? -1 : $searchVars['searchadvr'],
125
                'name' => $searchVars['searchadvsubject'] === '' ? -1 : $searchVars['searchadvsubject'],
126
                'fromname' => $searchVars['searchadvposter'] === '' ? -1 : $searchVars['searchadvposter'],
127
                'filename' => $searchVars['searchadvfilename'] === '' ? -1 : $searchVars['searchadvfilename'],
128
            ];
129
130
            $rslt = $releases->search(
131
                $searchArr,
132
                $searchVars['searchadvgroups'],
133
                $searchVars['searchadvsizefrom'],
134
                $searchVars['searchadvsizeto'],
135
                ($searchVars['searchadvdaysnew'] === '' ? -1 : $searchVars['searchadvdaysnew']),
136
                ($searchVars['searchadvdaysold'] === '' ? -1 : $searchVars['searchadvdaysold']),
137
                $offset,
138
                config('nntmux.items_per_page'),
139
                $orderBy,
140
                -1,
141
                $this->userdata->categoryexclusions ?? [],
142
                'advanced',
143
                [$searchVars['searchadvcat'] === '' ? -1 : $searchVars['searchadvcat']]
144
            );
145
146
            $results = $this->paginate($rslt ?? [], $rslt[0]->_totalrows ?? 0, config('nntmux.items_per_page'), $page, $request->url(), $request->query());
147
        }
148
149
        $this->viewData = array_merge($this->viewData, $searchVars, $orderByUrls, [
150
            'subject' => $subject,
151
            'search' => $search,
152
            'id' => $id,
153
            'category' => $category,
154
            'covgroup' => '',
155
            'lastvisit' => $lastvisit,
156
            'sizelist' => [
157
                -1 => '--Select--', 1 => '100MB', 2 => '250MB', 3 => '500MB', 4 => '1GB', 5 => '2GB',
158
                6 => '3GB', 7 => '4GB', 8 => '8GB', 9 => '16GB', 10 => '32GB', 11 => '64GB',
159
            ],
160
            'results' => $results,
161
            'sadvanced' => $searchType !== 'basic',
162
            'grouplist' => UsenetGroup::getGroupsForSelect(),
163
            'catlist' => Category::getForSelect(),
164
            'meta_title' => 'Search Nzbs',
165
            'meta_keywords' => 'search,nzb,description,details',
166
            'meta_description' => 'Search for Nzbs',
167
        ]);
168
169
        return view('search.index', $this->viewData);
170
    }
171
}
172