PluginProbe
The WP Remote WordPress Plugin / 5.41
The WP Remote WordPress Plugin v5.41
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 5.73 All 53 releases
wpremote / callback / wings / db.php

db.php in The WP Remote WordPress Plugin 5.41, at callback/wings/db.php

389 lines 11.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 if (!defined('ABSPATH')) exit;
4 if (!class_exists('BVDBCallback')) :
5 require_once dirname( __FILE__ ) . '/../streams.php';
6
7 class BVDBCallback extends BVCallbackBase {
8 public $db;
9 public $stream;
10 public $account;
11 public $siteinfo;
12
13 public static $bvTables = array("fw_requests", "lp_requests", "ip_store");
14
15 const DB_WING_VERSION = 1.3;
16
17 public function __construct($callback_handler) {
18 $this->db = $callback_handler->db;
19 $this->account = $callback_handler->account;
20 $this->siteinfo = $callback_handler->siteinfo;
21 }
22
23 public function getLastID($pkeys, $end_row) {
24 $last_ids = array();
25 foreach($pkeys as $pk) {
26 $last_ids[$pk] = $end_row[$pk];
27 }
28 return $last_ids;
29 }
30
31 public function getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, $include_rows = false) {
32 $tinfo = array();
33
34 $rows_count = $this->db->rowsCount($table);
35 $result = array('count' => $rows_count);
36 if ($limit == 0) {
37 $limit = $rows_count;
38 }
39 $srows = 1;
40 while (($limit > 0) && ($srows > 0)) {
41 if ($bsize > $limit)
42 $bsize = $limit;
43 $rows = $this->db->getTableContent($table, '*', $filter, $bsize, $offset);
44 $srows = sizeof($rows);
45 $data = array();
46 $data["table_name"] = $tname;
47 $data["offset"] = $offset;
48 $data["size"] = $srows;
49 $serialized_rows = serialize($rows);
50 $data['md5'] = md5($serialized_rows);
51 $data['length'] = strlen($serialized_rows);
52 array_push($tinfo, $data);
53 if (!empty($pkeys) && $srows > 0) {
54 $end_row = end($rows);
55 $last_ids = $this->getLastID($pkeys, $end_row);
56 $data['last_ids'] = $last_ids;
57 $result['last_ids'] = $last_ids;
58 }
59 if ($include_rows) {
60 $data["rows"] = $rows;
61 $str = serialize($data);
62 $this->stream->writeStream($str);
63 }
64 $offset += $srows;
65 $limit -= $srows;
66 }
67 $result['size'] = $offset;
68 $result['tinfo'] = $tinfo;
69 return $result;
70 }
71
72 public function streamQueryResult($identifier, $query, $pkeys) {
73 $data = array();
74 $data["identifier"] = $identifier;
75 $data["query"] = $query;
76
77 $data["query_start_time"] = time();
78 $rows = $this->db->getResult($query);
79 $srows = sizeof($rows);
80 $data["size"] = $srows;
81 $data["query_end_time"] = time();
82 if (!empty($pkeys) && $srows > 0) {
83 $end_row = end($rows);
84 $last_ids = $this->getLastID($pkeys, $end_row);
85 $data['last_ids'] = $last_ids;
86 }
87 $result = array_merge($data);
88 $data["rows"] = $rows;
89 $serialized_rows = serialize($data);
90 $this->stream->writeStream($serialized_rows);
91 $result['length'] = strlen($serialized_rows);
92 return $result;
93 }
94
95 function getRandomData($totalSize, $bsize) {
96 if ($bsize == 0) {
97 $bsize = $totalSize;
98 }
99
100 $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
101 $charactersLength = strlen($characters);
102
103 while ($totalSize > 0) {
104 if ($bsize > $totalSize) {
105 $bsize = $totalSize;
106 }
107
108 $randomString = '';
109 for ($i = 0; $i < $bsize; $i++) {
110 $randomString .= $characters[rand(0, $charactersLength - 1)];
111 }
112
113 $this->stream->writeStream($randomString);
114 $totalSize -= $bsize;
115 }
116 return array("status" => "true");
117 }
118
119 public function getCreateTableQueries($tables) {
120 $resp = array();
121 foreach($tables as $table) {
122 $tname = $table;
123 $resp[$tname] = array("create" => $this->db->showTableCreate($table));
124 }
125 return $resp;
126 }
127
128 public function checkTables($tables, $type) {
129 $resp = array();
130 foreach($tables as $table) {
131 $tname = $table;
132 $resp[$tname] = array("status" => $this->db->checkTable($table, $type));
133 }
134 return $resp;
135 }
136
137 public function describeTables($tables) {
138 $resp = array();
139 foreach($tables as $table) {
140 $tname = $table;
141 $resp[$tname] = array("description" => $this->db->describeTable($table));
142 $resp[$tname]["primary_keys_index"] = $this->db->showTableIndex($table);
143 }
144 return $resp;
145 }
146
147 public function checkTablesExist($tables) {
148 $resp = array();
149 foreach($tables as $table) {
150 $tname = $table;
151 $resp[$tname] = array("tblexists" => $this->db->isTablePresent($table));
152 }
153 return $resp;
154 }
155
156 public function getTablesRowCount($tables) {
157 $resp = array();
158 foreach($tables as $table) {
159 $tname = $table;
160 $resp[$tname] = array("count" => $this->db->rowsCount($table));
161 }
162 return $resp;
163 }
164
165 public function getTablesKeys($tables) {
166 $resp = array();
167 foreach($tables as $table) {
168 $tname = $table;
169 $resp[$tname] = array("keys" => $this->db->tableKeys($table));
170 }
171 return $resp;
172 }
173
174 public function multiGetResult($queries) {
175 $resp = array();
176 foreach($queries as $query) {
177 array_push($resp, $this->db->getResult($query));
178 }
179 return $resp;
180 }
181
182 public function process($request) {
183 $db = $this->db;
184 $params = $request->params;
185 $stream_init_info = BVStream::startStream($this->account, $request);
186
187 if (array_key_exists('stream', $stream_init_info)) {
188 $this->stream = $stream_init_info['stream'];
189 switch ($request->method) {
190 case "gettbls":
191 $resp = array("tables" => $db->showTables());
192 break;
193 case "tblstatus":
194 $resp = array("statuses" => $db->showTableStatus());
195 break;
196 case "tablekeys":
197 $table = $params['table'];
198 $resp = array("table_keys" => $db->tableKeys($table));
199 break;
200 case "describetable":
201 $table = $params['table'];
202 $resp = array("table_description" => $db->describeTable($table));
203 $resp["primary_keys_index"] = $db->showTableIndex($table);
204 break;
205 case "checktable":
206 $table = $params['table'];
207 $type = $params['type'];
208 $resp = array("status" => $db->checkTable($table, $type));
209 break;
210 case "repairtable":
211 $table = $params['table'];
212 $resp = array("status" => $db->repairTable($table));
213 break;
214 case "gettcrt":
215 $table = $params['table'];
216 $resp = array("create" => $db->showTableCreate($table));
217 break;
218 case "tblskys":
219 $tables = $params['tables'];
220 $resp = $this->getTablesKeys($tables);
221 break;
222 case "getmlticrt":
223 $tables = $params['tables'];
224 $resp = $this->getCreateTableQueries($tables);
225 break;
226 case "desctbls":
227 $tables = $params['tables'];
228 $resp = $this->describeTables($tables);
229 break;
230 case "mltirwscount":
231 $tables = $params['tables'];
232 $resp = $this->getTablesRowCount($tables);
233 break;
234 case "chktabls":
235 $tables = $params['tables'];
236 $type = $params['type'];
237 $resp = $this->checkTables($tables, $type);
238 break;
239 case "chktablsxist":
240 $tables = $params['tables'];
241 $resp = $this->checkTablesExist($tables);
242 break;
243 case "getrowscount":
244 $table = $params['table'];
245 $resp = array("count" => $db->rowsCount($table));
246 break;
247 case "gettablecontent":
248 $result = array();
249 $table = $params['table'];
250 $fields = $params['fields'];
251 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
252 $limit = intval($params['limit']);
253 $offset = intval($params['offset']);
254 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
255 $result['timestamp'] = time();
256 $result['tablename'] = $table;
257 $rows = $db->getTableContent($table, $fields, $filter, $limit, $offset);
258 $srows = sizeof($rows);
259 if (!empty($pkeys) && $srows > 0) {
260 $end_row = end($rows);
261 $result['last_ids'] = $this->getLastID($pkeys, $end_row);
262 }
263 $result["rows"] = $rows;
264 $resp = $result;
265 break;
266 case "multitablecontent":
267 $tableParams = $params['table_params'];
268 $resp = array();
269 foreach($tableParams as $tableParam) {
270 $result = array();
271 $identifier = $tableParam['identifier'];
272 $table = $tableParam['table'];
273 $tname = $tableParam['tname'];
274 $fields = $tableParam['fields'];
275 $filter = (array_key_exists('filter', $tableParam)) ? $tableParam['filter'] : "";
276 $limit = $tableParam['limit'];
277 $offset = $tableParam['offset'];
278 $pkeys = (array_key_exists('pkeys', $tableParam)) ? $tableParam['pkeys'] : array();
279 $result['timestamp'] = time();
280 $result['table_name'] = $tname;
281 $rows = $db->getTableContent($table, $fields, $filter, $limit, $offset);
282 $srows = sizeof($rows);
283 if (!empty($pkeys) && $srows > 0) {
284 $end_row = end($rows);
285 $result['last_ids'] = $this->getLastID($pkeys, $end_row);
286 }
287 $result["rows"] = $rows;
288 $result["size"] = $srows;
289 $resp[$identifier] = $result;
290 }
291 break;
292 case "tableinfo":
293 $table = $params['table'];
294 $offset = intval($params['offset']);
295 $limit = intval($params['limit']);
296 $bsize = intval($params['bsize']);
297 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
298 $tname = $params['tname'];
299 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
300 $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, false);
301 break;
302 case "getmulttables":
303 $result = array();
304 $tableParams = $params['table_params'];
305 $resp = array();
306 foreach($tableParams as $tableParam) {
307 $table = $tableParam['table'];
308 $tname = $tableParam['tname'];
309 $filter = (array_key_exists('filter', $tableParam)) ? $tableParam['filter'] : "";
310 $limit = intval($tableParam['limit']);
311 $offset = intval($tableParam['offset']);
312 $bsize = intval($tableParam['bsize']);
313 $pkeys = (array_key_exists('pkeys', $tableParam)) ? $tableParam['pkeys'] : array();
314 $resp[$tname] = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
315 }
316 break;
317 case "uploadrows":
318 $table = $params['table'];
319 $offset = intval($params['offset']);
320 $limit = intval($params['limit']);
321 $bsize = intval($params['bsize']);
322 $filter = (array_key_exists('filter', $params)) ? $params['filter'] : "";
323 $tname = $params['tname'];
324 $pkeys = (array_key_exists('pkeys', $params)) ? $params['pkeys'] : array();
325 $resp = $this->getTableData($table, $tname, $offset, $limit, $bsize, $filter, $pkeys, true);
326 break;
327 case "tblexists":
328 $resp = array("tblexists" => $db->isTablePresent($params['table']));
329 break;
330 case "crttbl":
331 $usedbdelta = array_key_exists('usedbdelta', $params);
332 $resp = array("crttbl" => $db->createTable($params['query'], $params['table'], $usedbdelta));
333 break;
334 case "drptbl":
335 $resp = array("drptbl" => $db->dropBVTable($params['table']));
336 break;
337 case "trttbl":
338 $resp = array("trttbl" => $db->truncateBVTable($params['table']));
339 break;
340 case "altrtbl":
341 $resp = array("altrtbl" => $db->alterBVTable($params['query'], $params['query']));
342 break;
343 case "mltigtrslt":
344 $resp = array("mltigtrslt" => $this->multiGetResult($params['queries']));
345 break;
346 case "mltiqrsstrm":
347 $queries = $params['queries'];
348 $result = array();
349 foreach ($queries as $qparams) {
350 $identifier = $qparams['identifier'];
351 $query = $qparams['query'];
352 $pkeys = (array_key_exists('pkeys', $qparams)) ? $qparams['pkeys'] : array();
353 array_push($result, $this->streamQueryResult($identifier, $query, $pkeys));
354 }
355 $resp = array('mltqrsstrm' => $result);
356 break;
357 case "getrndmdata":
358 $resp = array("getrndmdata" => $this->getRandomData($params['size'], $params['batch_size']));
359 break;
360 case "tbls":
361 $resp = array();
362
363 if (array_key_exists('truncate', $params))
364 $resp['truncate'] = $db->truncateTables($params['truncate']);
365
366 if (array_key_exists('drop', $params))
367 $resp['drop'] = $db->dropTables($params['drop']);
368
369 if (array_key_exists('create', $params))
370 $resp['create'] = $db->createTables($params['create']);
371
372 if (array_key_exists('alter', $params))
373 $resp['alter'] = $db->alterTables($params['alter']);
374
375 break;
376 default:
377 $resp = false;
378 }
379 $end_stream_info = $this->stream->endStream();
380 if (!empty($end_stream_info) && is_array($resp)) {
381 $resp = array_merge($resp, $end_stream_info);
382 }
383 } else {
384 $resp = $stream_init_info;
385 }
386 return $resp;
387 }
388 }
389 endif;