PluginProbe
The WP Remote WordPress Plugin / 6.76
The WP Remote WordPress Plugin v6.76
6.76 6.72 6.69 6.65 6.62 6.48 6.47 4.87 4.97 5.05 5.09 5.16 5.22 5.24 5.25 5.38 5.41 5.42 5.45 5.47 5.53 5.56 5.65 5.68 5.72 All 54 releases
← All changes | callback/wings/db.php +102 -9 4.976.76 View file →
@@ -1,18 +1,19 @@
1 1 <?php
2 2
3 3 if (!defined('ABSPATH')) exit;
4 -if (!class_exists('BVDBCallback')) :
4 +if (!class_exists('WPRDBCallback')) :
5 5 require_once dirname( __FILE__ ) . '/../streams.php';
6 6
7 -class BVDBCallback extends BVCallbackBase {
7 +class WPRDBCallback extends WPRCallbackBase {
8 8 public $db;
9 9 public $stream;
10 10 public $account;
11 + public $siteinfo;
11 12
12 13 public static $bvTables = array("fw_requests", "lp_requests", "ip_store");
13 14
14 - const DB_WING_VERSION = 1.2;
15 + const DB_WING_VERSION = 1.5;
15 16
16 17 public function __construct($callback_handler) {
17 18 $this->db = $callback_handler->db;
18 19 $this->account = $callback_handler->account;
@@ -28,9 +29,9 @@
28 29 }
29 30
30 31 public function getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, $include_rows = false) {
31 32 $tinfo = array();
32 -
33 +
33 34 $rows_count = $this->db->rowsCount($table);
34 35 $result = array('count' => $rows_count);
35 36 if ($limit == 0) {
36 37 $limit = $rows_count;
@@ -67,8 +68,88 @@
67 68 $result['tinfo'] = $tinfo;
68 69 return $result;
69 70 }
70 71
72 + public function buildPrimaryKeyCursorFilter($pkeys, $last_ids) {
73 + if (empty($pkeys)) return null;
74 + foreach($pkeys as $pk) {
75 + if (!isset($last_ids[$pk]) || $last_ids[$pk] === '') return null;
76 + }
77 +
78 + $conditions = array();
79 + $order_by = array();
80 + foreach($pkeys as $index => $pk) {
81 + $key = "`".$pk."`";
82 + $order_by[] = $key;
83 + $parts = array();
84 + for ($eq_index = 0; $eq_index < $index; $eq_index++) {
85 + $eq_pk = $pkeys[$eq_index];
86 + $eq_key = "`".$eq_pk."`";
87 + $eq_last_id = esc_sql((string) $last_ids[$eq_pk]);
88 + $parts[] = $eq_key." = '".$eq_last_id."'";
89 + }
90 + $last_id = esc_sql((string) $last_ids[$pkeys[$index]]);
91 + $parts[] = $key." > '".$last_id."'";
92 + $condition = implode(" AND ", $parts);
93 + $conditions[] = ($index == 0) ? $condition : "(".$condition.")";
94 + }
95 + return " WHERE ".implode(" OR ", $conditions)." ORDER BY ".implode(",", $order_by);
96 + }
97 +
98 + public function getTableDataByCursor($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, $include_rows = false, $cursor_mode = false) {
99 + $tinfo = array();
100 +
101 + $rows_count = $this->db->rowsCount($table);
102 + $result = array('count' => $rows_count);
103 + if ($limit == 0) {
104 + $limit = $rows_count;
105 + }
106 + $srows = 1;
107 + $current_filter = $filter;
108 + $cursor_active = ($cursor_mode === true && !empty($pkeys));
109 + $query_offset = $offset;
110 + while (($limit > 0) && ($srows > 0)) {
111 + if ($bsize > $limit)
112 + $bsize = $limit;
113 + $rows = $this->db->getTableContent($table, '*', $current_filter, $bsize, $query_offset);
114 + $srows = sizeof($rows);
115 + $data = array();
116 + $data["table_name"] = $tname;
117 + $data["offset"] = $offset;
118 + $data["size"] = $srows;
119 + $serialized_rows = serialize($rows);
120 + $data['md5'] = md5($serialized_rows);
121 + $data['length'] = strlen($serialized_rows);
122 + array_push($tinfo, $data);
123 + if (!empty($pkeys) && $srows > 0) {
124 + $end_row = end($rows);
125 + $last_ids = $this->getLastID($pkeys, $end_row);
126 + $data['last_ids'] = $last_ids;
127 + $result['last_ids'] = $last_ids;
128 + if ($cursor_active) {
129 + $cursor_filter = $this->buildPrimaryKeyCursorFilter($pkeys, $last_ids);
130 + if ($cursor_filter !== null) {
131 + $current_filter = $cursor_filter;
132 + } else {
133 + $current_filter = $filter;
134 + $cursor_active = false;
135 + }
136 + }
137 + }
138 + if ($include_rows) {
139 + $data["rows"] = $rows;
140 + $str = serialize($data);
141 + $this->stream->writeStream($str);
142 + }
143 + $offset += $srows;
144 + $limit -= $srows;
145 + $query_offset = $cursor_active ? 0 : $offset;
146 + }
147 + $result['size'] = $offset;
148 + $result['tinfo'] = $tinfo;
149 + return $result;
150 + }
151 +
71 152 public function streamQueryResult($identifier, $query, $pkeys) {
72 153 $data = array();
73 154 $data["identifier"] = $identifier;
74 155 $data["query"] = $query;
@@ -105,9 +186,9 @@
105 186 }
106 187
107 188 $randomString = '';
108 189 for ($i = 0; $i < $bsize; $i++) {
109 - $randomString .= $characters[rand(0, $charactersLength - 1)];
190 + $randomString .= $characters[rand(0, $charactersLength - 1)]; // phpcs:ignore WordPress.WP.AlternativeFunctions.rand_rand
110 191 }
111 192
112 193 $this->stream->writeStream($randomString);
113 194 $totalSize -= $bsize;
@@ -137,8 +218,9 @@
137 218 $resp = array();
138 219 foreach($tables as $table) {
139 220 $tname = $table;
140 221 $resp[$tname] = array("description" => $this->db->describeTable($table));
222 + $resp[$tname]["primary_keys_index"] = $this->db->showTableIndex($table);
141 223 }
142 224 return $resp;
143 225 }
144 226
@@ -179,9 +261,9 @@
179 261
180 262 public function process($request) {
181 263 $db = $this->db;
182 264 $params = $request->params;
183 - $stream_init_info = BVStream::startStream($this->account, $request);
265 + $stream_init_info = WPRStream::startStream($this->account, $request);
184 266
185 267 if (array_key_exists('stream', $stream_init_info)) {
186 268 $this->stream = $stream_init_info['stream'];
187 269 switch ($request->method) {
@@ -197,8 +279,9 @@
197 279 break;
198 280 case "describetable":
199 281 $table = $params['table'];
200 282 $resp = array("table_description" => $db->describeTable($table));
283 + $resp["primary_keys_index"] = $db->showTableIndex($table);
201 284 break;
202 285 case "checktable":
203 286 $table = $params['table'];
204 287 $type = $params['type'];
@@ -293,9 +376,14 @@
293 376 $bsize = intval($params['bsize']);
294 377 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
295 378 $tname = $params['tname'];
296 379 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
297 - $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, false);
380 + $cursor_mode = (array_key_exists('cursor_mode', $params)) ? $params['cursor_mode'] : false;
381 + if ($cursor_mode === true) {
382 + $resp = $this->getTableDataByCursor($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, false, $cursor_mode);
383 + } else {
384 + $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, false);
385 + }
298 386 break;
299 387 case "getmulttables":
300 388 $result = array();
301 389 $tableParams = $params['table_params'];
@@ -318,9 +406,14 @@
318 406 $bsize = intval($params['bsize']);
319 407 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
320 408 $tname = $params['tname'];
321 409 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
322 - $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
410 + $cursor_mode = (array_key_exists('cursor_mode', $params)) ? $params['cursor_mode'] : false;
411 + if ($cursor_mode === true) {
412 + $resp = $this->getTableDataByCursor($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true, $cursor_mode);
413 + } else {
414 + $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
415 + }
323 416 break;
324 417 case "tblexists":
325 418 $resp = array("tblexists" => $db->isTablePresent($params['table']));
326 419 break;
@@ -382,5 +475,5 @@
382 475 }
383 476 return $resp;
384 477 }
385 478 }
386 -endif;
479 +endif;