PluginProbe
ManageWP Worker / 4.9.37
ManageWP Worker v4.9.37
4.9.38 4.9.37 4.9.36 4.9.35 4.9.34 3.8.7 3.8.8 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.18 3.9.19 3.9.2 3.9.20 3.9.21 3.9.22 3.9.23 3.9.24 All 73 releases
worker / src / MWP / Action / IncrementalBackup / GetViewSchema.php

GetViewSchema.php in ManageWP Worker 4.9.37, at src/MWP/Action/IncrementalBackup/GetViewSchema.php

79 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 * This file is part of the ManageWP Worker plugin.
4 *
5 * (c) ManageWP LLC <[email protected]>
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file that was distributed with this source code.
9 */
10
11 class MWP_Action_IncrementalBackup_GetViewSchema
12 {
13 const ERROR_VIEW_NOT_FOUND = 1;
14
15 public function execute(array $params = array())
16 {
17 $views = $params['views'];
18
19 $result = array();
20
21 foreach ($views as $view) {
22 if (!$this->viewExists($view)) {
23 $result[] = array(
24 'name' => $view,
25 'error' => self::ERROR_VIEW_NOT_FOUND,
26 );
27 continue;
28 }
29
30 $createTableSql = $this->getCreateViewSql($view);
31
32 $result[] = array(
33 'name' => $view,
34 'createViewSql' => $createTableSql,
35 );
36 }
37
38 return $result;
39 }
40
41 private function viewExists($table)
42 {
43 $exists = (int) mwp_context()->getDb()->get_var(
44 sprintf('SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = "%s" AND table_name = "%s"',
45 mwp_context()->escapeParameter(mwp_context()->getDbName()),
46 mwp_context()->escapeParameter($table))
47 );
48
49 return $exists >= 1;
50 }
51
52 private function getCreateViewSql($table)
53 {
54 $createTableResults = mwp_context()->getDb()->get_results(
55 sprintf('SHOW CREATE VIEW `%s`', $this->escapeTableName($table)),
56 ARRAY_A
57 );
58
59 return isset($createTableResults[0]['Create View']) ? $createTableResults[0]['Create View'] : null;
60 }
61
62 /**
63 * Escape backticks (`) in table names.
64 * A table can contain a backtick character (`) and it has to be escaped with another backtick.
65 * This is only relevant
66 *
67 * e.g. asd`asd should be converted into asd``asd.
68 * The resulting SQL query should look like: SELECT * FROM `asd``asd`;
69 *
70 * @param string $table
71 *
72 * @return string
73 */
74 private function escapeTableName($table)
75 {
76 return str_replace('`', '``', $table);
77 }
78 }
79