@@ -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 ;
0 commit comments