PluginProbe
WP Synchro – The Ultimate WordPress Migration Tool / trunk
WP Synchro – The Ultimate WordPress Migration Tool vtrunk
1.16.1 1.16.0 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.1.0 1.10.0 1.11.0 1.11.1 1.11.2 1.11.3 1.11.4 1.11.5 1.12.0 1.13.0 1.14.0 1.15.0 1.2.0 1.3.0 1.3.1 1.3.2 All 45 releases
wpsynchro / src / API / ClientSyncDatabase.php

ClientSyncDatabase.php in WP Synchro – The Ultimate WordPress Migration Tool trunk, at src/API/ClientSyncDatabase.php

124 lines 4.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPSynchro\API;
4
5 use WPSynchro\Database\DatabaseHelperFunctions;
6 use WPSynchro\Transport\ReturnResult;
7 use WPSynchro\Transport\Transfer;
8 use WPSynchro\Transport\TransferAccessKey;
9
10 /**
11 * Class for handling service to execute SQL from remote
12 * Call should already be verified by permissions callback
13 */
14 class ClientSyncDatabase extends WPSynchroService
15 {
16 public function service()
17 {
18 $transfer = new Transfer();
19 $transfer->setEncryptionKey(TransferAccessKey::getAccessKey());
20 $transfer->populateFromString($this->getRequestBody());
21 $body = $transfer->getDataObject();
22
23 global $wpdb;
24 $result = new \stdClass();
25 $result->errors = [];
26 $result->warnings = [];
27 $result->debugs = [];
28 $result->data = null;
29 $result->has_more_rows_in_table = true;
30
31 // Extract parameters
32 if (isset($body->type)) {
33 $type = $body->type;
34 } else {
35 $result->errors[] = __("Error from database sync service - Check the log file for further information.", "wpsynchro");
36 $result->debugs[] = "Error body from service: " . json_encode($body);
37 $returnresult = new ReturnResult();
38 $returnresult->init();
39 $returnresult->setHTTPStatus(400);
40 $returnresult->setDataObject($result);
41 return $returnresult->echoDataFromServiceAndExit();
42 }
43
44 $table = $body->table ?? '';
45 $last_primary_key = $body->last_primary_key ?? '';
46 $primary_key_column = $body->primary_key_column ?? '';
47 $completed_rows = $body->completed_rows ?? 0;
48 $max_response_size = $body->max_response_size ?? 1000000;
49 $default_rows_per_request = $body->default_rows_per_request ?? 10000;
50 $column_names = $body->column_names ?? [];
51 $time_limit = $body->time_limit ?? -1;
52
53 $sql_inserts = $body->sql_inserts ?? [];
54
55
56 if ($type == "pull") {
57 $database_helper_functions = new DatabaseHelperFunctions();
58 $data_result_from_db = $database_helper_functions->getDataFromDB($table, $column_names, $primary_key_column, $last_primary_key, $completed_rows, $max_response_size, $default_rows_per_request, $time_limit);
59 $result->data = $data_result_from_db->data;
60 $result->has_more_rows_in_table = $data_result_from_db->has_more_rows_in_table;
61 $result->errors = array_merge($result->errors, $data_result_from_db->errors);
62 } elseif ($type == "push") {
63 $wpdb->query("SET FOREIGN_KEY_CHECKS=0;");
64 // If multiple sql inserts
65 if (is_array($sql_inserts)) {
66 foreach ($sql_inserts as $sql_insert) {
67 $result->data = $wpdb->query($sql_insert);
68 if (strlen($wpdb->last_error) > 0) {
69 $result->errors[] = $wpdb->last_error;
70 $wpdb->last_error = '';
71 }
72 // If it fails, break out and handle it
73 if ($result->data === false) {
74 break;
75 }
76 }
77 } else {
78 $result->data = $wpdb->query($sql_inserts);
79 if (strlen($wpdb->last_error) > 0) {
80 $result->errors[] = $wpdb->last_error;
81 $wpdb->last_error = '';
82 }
83 }
84 } elseif ($type == "finalize") {
85 $wpdb->query("SET FOREIGN_KEY_CHECKS=0;");
86 foreach ($sql_inserts as $sql_insert) {
87 $result->data = $wpdb->query($sql_insert);
88 if (strlen($wpdb->last_error) > 0) {
89 $result->errors[] = $wpdb->last_error;
90 $wpdb->last_error = '';
91 }
92 }
93 }
94
95 if ($result->data === false) {
96 $database_helper_functions = new DatabaseHelperFunctions();
97 $logs = $database_helper_functions->getLastDBQueryErrors();
98 foreach ($logs['user_errors'] as $user_error) {
99 $result->errors[] = $user_error;
100 }
101 foreach ($logs['log_errors'] as $log_error) {
102 $result->debugs[] = $log_error;
103 }
104 }
105
106 // Prefix errors, warnings, debugs with site url
107 $site_url = 'Database error on ' . parse_url(get_site_url(), PHP_URL_HOST) . ': ';
108 foreach ($result->errors as &$error) {
109 $error = $site_url . $error;
110 }
111 foreach ($result->warnings as &$warning) {
112 $warning = $site_url . $warning;
113 }
114 foreach ($result->debugs as &$debug) {
115 $debug = $site_url . $debug;
116 }
117
118 $returnresult = new ReturnResult();
119 $returnresult->init();
120 $returnresult->setDataObject($result);
121 return $returnresult->echoDataFromServiceAndExit();
122 }
123 }
124