]> jfr.im git - irc/unrealircd/unrealircd-webpanel.git/blame - api/search.php
Search: Be clearer about matches in results (oops hehe)
[irc/unrealircd/unrealircd-webpanel.git] / api / search.php
CommitLineData
ac05c041
VP
1<?php
2
3require_once('common_api.php');
4
5if (!$rpc)
6 die();
7
8if (!$_GET || !isset($_GET['search']))
88487be3
VP
9{
10 echo json_encode(["error" => "No search query"]);
11 die;
12}
ac05c041
VP
13$search_term = $_GET['search'];
14$users = $rpc->user()->getAll();
15$chans = $rpc->channel()->getAll(2);
16$logs = $rpc->log()->getAll();
17$servers = $rpc->server()->getAll();
18$server_bans = $rpc->serverban()->getAll();
19$excepts = $rpc->serverbanexception()->getAll();
20$spamfilter = $rpc->spamfilter()->getAll();
21$name_bans = $rpc->nameban()->getAll();
22
23$search_results = [
24 "users" => [],
25 "channels" => [],
26 "channel_bans" => [],
27 "channel_invites" => [],
28 "channel_excepts" => [],
29 "logs" => [],
30 "server_bans" => [],
31 "excepts" => [],
32 "spamfilter" => [],
33 "name_bans" => []
34];
35
36function strcasestr($haystack, $needle) : bool
37{
38 if (strstr(strtolower($haystack), strtolower($needle)))
39 return true;
40 return false;
41}
42foreach ($users as $u)
43{
44 if (strcasestr($u->name,$search_term))
45 {
46 $o = (object)[];
47 $o->name = $u->name;
48 $o->data = $u->name;
49 $o->label = "nick";
50 $search_results['users'][] = $o;
51 }
52 if (strcasestr($u->details,$search_term))
53 {
54 $o = (object)[];
55 $o->name = $u->name;
56 $o->data = $u->details;
57 $o->label = "userhost";
58 $search_results['users'][] = $o;
59 }
60 if (strcasestr($u->user->realname,$search_term))
61 {
62 $o = (object)[];
63 $o->name = $u->name;
64 $o->data = $u->user->realname;
65 $o->label = "GECOS";
66 $search_results['users'][] = $o;
67 }
88487be3 68 if (@strcasestr($u->user->account,$search_term))
ac05c041
VP
69 {
70 $o = (object)[];
71 $o->name = $u->name;
58747947 72 $o->data = $u->account;
ac05c041
VP
73 $o->label = "account";
74 $search_results['users'][] = $o;
75 }
88487be3
VP
76 if (isset($u->geoip))
77 {
78 error_log("It's set");
79 if (@strcasestr($u->geoip->asn,$search_term))
80 {
81 $o = (object)[];
82 $o->name = $u->name;
58747947 83 $o->data = $u->geoip->asn;
88487be3
VP
84 $o->label = "ASN";
85 $search_results['users'][] = $o;
86 }
87 if (@strcasestr($u->geoip->asname,$search_term))
88 {
89 $o = (object)[];
90 $o->name = $u->name;
58747947 91 $o->data = $u->geoip->asname;
88487be3
VP
92 $o->label = "ASN Name";
93 $search_results['users'][] = $o;
94 }
95 if (@strcasestr($u->geoip->country_code,$search_term))
96 {
97 $o = (object)[];
98 $o->name = $u->name;
58747947 99 $o->data = $u->geoip->country_code;
88487be3
VP
100 $o->label = "Country Code";
101 $search_results['users'][] = $o;
102 }
103 }
104 else{
105 error_log(json_encode($u));
106 }
ac05c041
VP
107}
108foreach ($chans as $c)
109{
110 if (strcasestr($c->name,$search_term))
111 {
112 $c->label = "channel name";
113 $search_results['channels'][] = $c;
114 }
115 if (isset($c->topic) && strcasestr($c->topic,$search_term))
116 {
117 $c->label = "channel topic";
118 $search_results['channels'][] = $c;
119 }
120 if (isset($c->bans))
121 {
122 foreach ($c->bans as $i)
123 {
124 if (!strcasestr($i->name, $search_term))
125 continue;
126
127 $new = (object)[];
128 $new->name = $c->name;
129 $new->topic = $i->name;
130 $new->label = "ban (+b)";
131 $search_results['channels'][] = $new;
132 error_log("$new->label for $i->name");
133 }
134 }
135 if (isset($c->ban_exemptions))
136 {
137 foreach ($c->ban_exemptions as $i)
138 {
139 if (!strcasestr($i->name, $search_term))
140 continue;
141
142 $new = (object)[];
143 $new->name = $c->name;
144 $new->topic = $i->name;
145 $new->label = "exempt (+e)";
146 $search_results['channels'][] = $new;
147 error_log("$new->label for $i->name");
148 }
149 }
150 if (isset($c->invite_exceptions))
151 {
152 foreach ($c->invite_exceptions as $i)
153 {
154 if (!strcasestr($i->name, $search_term))
155 continue;
156
157 $new = (object)[];
158 $new->name = $c->name;
159 $new->topic = $i->name;
160 $new->label = "invite (+I)";
161 $search_results['channels'][] = $new;
162 }
163 }
164}
165foreach ($logs as $l)
166 if (strcasestr($l->msg,$search_term))
167 $search_results['logs'][] = $l;
168
169foreach ($servers as $s)
170 if (strcasestr($s->name, $search_term))
171 $search_results['servers'][] = $s;
172
173foreach ($server_bans as $ban)
174{
175
176 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
177 {
178 $o = (object)[];
179 $o->label = $ban->type_string;
180 $o->name = $ban->name;
181 $o->data = $ban->reason;
182 $search_results['server_bans'][] = $o;
183 }
184 elseif (strstr($ban->name,$search_term))
185 {
186 $o = (object)[];
187 $o->label = $ban->type_string;
188 $o->name = "<code>$ban->name</code>";
189 $o->data = $ban->reason;
190 $search_results['server_bans'][] = $o;
191 }
192
193 elseif (strcasestr($ban->reason,$search_term))
194 {
195 $o = (object)[];
196 $o->label = $ban->type_string." reason";
197 $o->name = "<code>$ban->name</code>";
198 $o->data = $ban->reason;
199 $search_results['server_bans'][] = $o;
200 }
201}
202
203foreach ($excepts as $ban)
204{
205 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
206 {
207 $o = (object)[];
208 $o->label = $ban->type_string;
209 $o->name = $ban->name;
210 $o->data = $ban->reason;
211 $search_results['excepts'][] = $o;
212 }
213 elseif (strstr($ban->name,$search_term))
214 {
215 $o = (object)[];
216 $o->label = $ban->type_string;
217 $o->name = "<code>$ban->name</code>";
218 $o->data = $ban->reason;
219 $search_results['excepts'][] = $o;
220 }
221 elseif (strcasestr($ban->reason,$search_term))
222 {
223 $o = (object)[];
224 $o->label = $ban->type_string." reason";
225 $o->name = $ban->name;
226 $o->data = $ban->reason;
227 $search_results['excepts'][] = $o;
228 }
229}
230
231
232foreach ($name_bans as $ban)
233{
234 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
235 {
236 $o = (object)[];
237 $o->label = $ban->type_string;
238 $o->name = $ban->name;
239 $o->data = $ban->reason;
240 $search_results['name_bans'][] = $o;
241 }
242 elseif (strstr($ban->name,$search_term))
243 {
244 $o = (object)[];
245 $o->label = $ban->type_string;
246 $o->name = "<code>$ban->name</code>";
247 $o->data = $ban->reason;
248 $search_results['name_bans'][] = $o;
249 }
250 elseif (strcasestr($ban->reason,$search_term))
251 {
252 $o = (object)[];
253 $o->label = $ban->type_string." reason";
254 $o->name = $ban->name;
255 $o->data = $ban->reason;
256 $search_results['name_bans'][] = $o;
257 }
258}
259
260foreach ($spamfilter as $ban)
261{
262 if (strstr($ban->type,$search_term) || strstr($ban->type_string,$search_term))
263 {
264 $o = (object)[];
265 $o->label = $ban->type_string;
266 $o->name = $ban->name;
267 $o->data = $ban->reason;
268 $search_results['spamfilter'][] = $o;
269 }
270 elseif (strstr($ban->name,$search_term))
271 {
272 $o = (object)[];
273 $o->label = $ban->type_string;
274 $o->name = "<code>$ban->name</code>";
275 $o->data = $ban->reason;
276 $search_results['spamfilter'][] = $o;
277 }
278 elseif (strcasestr($ban->reason,$search_term))
279 {
280 $o = (object)[];
281 $o->label = $ban->type_string." reason";
282 $o->name = $ban->name;
283 $o->data = $ban->reason;
284 $search_results['spamfilter'][] = $o;
285 }
286}
287
288
289
290echo json_encode($search_results);