Skip to content

Commit 54743c2

Browse files
committed
Add packet search
1 parent 14e8d55 commit 54743c2

File tree

12 files changed

+143
-10
lines changed

12 files changed

+143
-10
lines changed

src/controllers/Packet/Search.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use \BNETDocs\Libraries\Common;
66
use \BNETDocs\Libraries\Controller;
77
use \BNETDocs\Libraries\Exceptions\UnspecifiedViewException;
8+
use \BNETDocs\Libraries\Packet;
89
use \BNETDocs\Libraries\Router;
910
use \BNETDocs\Libraries\UserSession;
1011
use \BNETDocs\Models\Packet\Search as PacketSearchModel;
@@ -20,8 +21,35 @@ public function run(Router &$router) {
2021
default:
2122
throw new UnspecifiedViewException();
2223
}
24+
2325
$model = new PacketSearchModel();
26+
27+
$data = $router->getRequestQueryArray();
28+
29+
$model->query = (isset($data["q"]) ? (string) $data["q"] : null);
30+
31+
if (!empty($model->query)) {
32+
$model->packets = Packet::getAllPacketsBySearch($model->query);
33+
}
34+
2435
$model->user_session = UserSession::load($router);
36+
37+
// Remove packets that are not published
38+
if ($model->packets) {
39+
$i = count($model->packets) - 1;
40+
while ($i >= 0) {
41+
if (!($model->packets[$i]->getOptionsBitmask()
42+
& Packet::OPTION_PUBLISHED)) {
43+
unset($model->packets[$i]);
44+
}
45+
--$i;
46+
}
47+
}
48+
49+
if ($model->packets) {
50+
$model->sum_packets = count($model->packets);
51+
}
52+
2553
ob_start();
2654
$view->render($model);
2755
$router->setResponseCode(200);

src/libraries/Document.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function __construct($data) {
6060
public static function getAllDocuments() {
6161
$cache_key = "bnetdocs-documents";
6262
$cache_val = Common::$cache->get($cache_key);
63-
if ($cache_val !== false) {
63+
if ($cache_val !== false && !empty($cache_val)) {
6464
$ids = explode(",", $cache_val);
6565
$objects = [];
6666
foreach ($ids as $id) {

src/libraries/NewsCategory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function __construct($data) {
4545
public static function getAll() {
4646
$cache_key = "bnetdocs-newscategories";
4747
$cache_val = Common::$cache->get($cache_key);
48-
if ($cache_val !== false) {
48+
if ($cache_val !== false && !empty($cache_val)) {
4949
$ids = explode(",", $cache_val);
5050
$objects = [];
5151
foreach ($ids as $id) {

src/libraries/NewsPost.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public static function delete($id) {
122122
public static function getAllNews($reverse) {
123123
$cache_key = "bnetdocs-newsposts";
124124
$cache_val = Common::$cache->get($cache_key);
125-
if ($cache_val !== false) {
125+
if ($cache_val !== false && !empty($cache_val)) {
126126
$ids = explode(",", $cache_val);
127127
$objects = [];
128128
foreach ($ids as $id) {

src/libraries/Packet.php

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public function __construct($data) {
8282
public static function getAllPackets() {
8383
$cache_key = "bnetdocs-packets";
8484
$cache_val = Common::$cache->get($cache_key);
85-
if ($cache_val !== false) {
85+
if ($cache_val !== false && !empty($cache_val)) {
8686
$ids = explode(",", $cache_val);
8787
$objects = [];
8888
foreach ($ids as $id) {
@@ -133,6 +133,65 @@ public static function getAllPackets() {
133133
return null;
134134
}
135135

136+
public static function getAllPacketsBySearch($query) {
137+
$cache_key = "bnetdocs-packetsearch-" . hash("md5", $query);
138+
$cache_val = Common::$cache->get($cache_key);
139+
if ($cache_val !== false && !empty($cache_val)) {
140+
$ids = explode(",", $cache_val);
141+
$objects = [];
142+
foreach ($ids as $id) {
143+
$objects[] = new self($id);
144+
}
145+
return $objects;
146+
}
147+
if (!isset(Common::$database)) {
148+
Common::$database = DatabaseDriver::getDatabaseObject();
149+
}
150+
try {
151+
$stmt = Common::$database->prepare("
152+
SELECT
153+
`created_datetime`,
154+
`edited_count`,
155+
`edited_datetime`,
156+
`id`,
157+
`options_bitmask`,
158+
`packet_application_layer_id`,
159+
`packet_direction_id`,
160+
`packet_format`,
161+
`packet_id`,
162+
`packet_name`,
163+
`packet_remarks`,
164+
`packet_transport_layer_id`,
165+
`user_id`
166+
FROM `packets`
167+
WHERE
168+
MATCH (`packet_remarks`, `packet_format`, `packet_name`)
169+
AGAINST (:query IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)
170+
;
171+
");
172+
$stmt->bindParam(":query", $query, PDO::PARAM_STR);
173+
if (!$stmt->execute()) {
174+
throw new QueryException("Cannot search packets");
175+
}
176+
$ids = [];
177+
$objects = [];
178+
while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {
179+
$ids[] = (int) $row->id;
180+
$objects[] = new self($row);
181+
Common::$cache->set(
182+
"bnetdocs-packet-" . $row->id, serialize($row), 300
183+
);
184+
}
185+
$stmt->closeCursor();
186+
Common::$cache->set($cache_key, implode(",", $ids), 300);
187+
return $objects;
188+
} catch (PDOException $e) {
189+
var_dump($e);die();
190+
throw new QueryException("Cannot search packets", $e);
191+
}
192+
return null;
193+
}
194+
136195
public function getCreatedDateTime() {
137196
if (is_null($this->created_datetime)) {
138197
return $this->created_datetime;

src/libraries/PacketApplicationLayer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function __construct($data) {
3838
public static function getAllPacketApplicationLayers() {
3939
$cache_key = "bnetdocs-packetapplicationlayers";
4040
$cache_val = Common::$cache->get($cache_key);
41-
if ($cache_val !== false) {
41+
if ($cache_val !== false && !empty($cache_val)) {
4242
$ids = explode(",", $cache_val);
4343
$objects = [];
4444
foreach ($ids as $id) {

src/libraries/PacketTransportLayer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function __construct($data) {
3838
public static function getAllPacketTransportLayers() {
3939
$cache_key = "bnetdocs-packettransportlayers";
4040
$cache_val = Common::$cache->get($cache_key);
41-
if ($cache_val !== false) {
41+
if ($cache_val !== false && !empty($cache_val)) {
4242
$ids = explode(",", $cache_val);
4343
$objects = [];
4444
foreach ($ids as $id) {

src/libraries/Product.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public function __construct($data) {
4747
public static function getAllProducts() {
4848
$cache_key = "bnetdocs-products";
4949
$cache_val = Common::$cache->get($cache_key);
50-
if ($cache_val !== false) {
50+
if ($cache_val !== false && !empty($cache_val)) {
5151
$ids = explode(",", $cache_val);
5252
$objects = [];
5353
foreach ($ids as $id) {

src/libraries/Server.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public function getAddress() {
6666
public static function getAllServers() {
6767
$cache_key = "bnetdocs-servers";
6868
$cache_val = Common::$cache->get($cache_key);
69-
if ($cache_val !== false) {
69+
if ($cache_val !== false && !empty($cache_val)) {
7070
$ids = explode(",", $cache_val);
7171
$objects = [];
7272
foreach ($ids as $id) {

src/libraries/ServerType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public function __construct($data) {
3535
public static function getAllServerTypes() {
3636
$cache_key = "bnetdocs-servertypes";
3737
$cache_val = Common::$cache->get($cache_key);
38-
if ($cache_val !== false) {
38+
if ($cache_val !== false && !empty($cache_val)) {
3939
$ids = explode(",", $cache_val);
4040
$objects = [];
4141
foreach ($ids as $id) {

0 commit comments

Comments
 (0)