PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 3.8.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v3.8.2
4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Framework / Traits / DatabaseSearchReplaceTrait.php
wp-staging / Framework / Traits Last commit date
ArrayableTrait.php 2 years ago BenchmarkTrait.php 2 years ago BooleanTransientTrait.php 5 years ago DatabaseSearchReplaceTrait.php 2 years ago DbRowsGeneratorTrait.php 3 years ago DeveloperTimerTrait.php 4 years ago EndOfLinePlaceholderTrait.php 2 years ago EventLoggerTrait.php 1 year ago FileScanToCacheTrait.php 2 years ago HydrateTrait.php 2 years ago MaintenanceTrait.php 5 years ago MemoryExhaustTrait.php 2 years ago MySQLRowsGeneratorTrait.php 2 years ago NoticesTrait.php 2 years ago PropertyConstructor.php 5 years ago ResourceTrait.php 2 years ago ValueGetterTrait.php 1 year ago
DatabaseSearchReplaceTrait.php
103 lines
1 <?php
2
3 namespace WPStaging\Framework\Traits;
4
5 use WPStaging\Backup\Task\Tasks\JobBackup\FinishBackupTask;
6 use WPStaging\Core\WPStaging;
7 use WPStaging\Framework\Utils\Urls;
8 use WPStaging\Framework\Staging\Sites;
9
10 /**
11 * Trait DatabaseSearchReplaceTrait
12 *
13 * This trait puts together some common functionality for database search and replace
14 * used both by Cloning and Backups. This is not ideal, and should be refactored in the future
15 * for a more robust and proper architecture.
16 *
17 * @package WPStaging\Framework\Traits
18 */
19 trait DatabaseSearchReplaceTrait
20 {
21 private $excludedStrings = [
22 'Admin_custome_login_Slidshow',
23 'Admin_custome_login_Social',
24 'Admin_custome_login_logo',
25 'Admin_custome_login_text',
26 'Admin_custome_login_login',
27 'Admin_custome_login_top',
28 'Admin_custome_login_dashboard',
29 'Admin_custome_login_Version',
30 'upload_path',
31 'wpstg_existing_clones_beta',
32 'wpstg_existing_clones',
33 Sites::STAGING_SITES_OPTION,
34 FinishBackupTask::OPTION_LAST_BACKUP,
35 'wpstg_settings',
36 'wpstg_license_status',
37 'wpstg_tmp_data',
38 'siteurl',
39 'home'
40 ];
41
42 public function excludedStrings()
43 {
44 return $this->excludedStrings;
45 }
46
47 /**
48 * Prepend the following characters to string: %2F%2F, \/\/, //
49 * This is to make sure that only valid hostnames are replaced
50 * @param $string
51 * @return string[]
52 */
53 public function generateHostnamePatterns($string)
54 {
55 return [
56 '%2F%2F' . str_replace('/', '%2F', $string), // HTML entity for WP Backery Page Builder Plugin
57 '\/\/' . str_replace('/', '\/', $string), // Escaped \/ used by revslider and several visual editors
58 '//' . $string // //example.com
59 ];
60 }
61
62 private function getSourceHostname()
63 {
64 $urlsHelper = WPStaging::getInstance()->getContainer()->get(Urls::class);
65
66 if ($this->isSubDir()) {
67 return trailingslashit($urlsHelper->getHomeUrlWithoutScheme()) . $this->getSubDir();
68 }
69
70 return $urlsHelper->getHomeUrlWithoutScheme();
71 }
72
73 /**
74 * Check if WP is installed in subdir
75 * @return boolean
76 */
77 private function isSubDir()
78 {
79 // Compare names without scheme to bypass cases where siteurl and home have different schemes http / https
80 // This is happening much more often than you would expect
81 $siteurl = preg_replace('#^https?://#', '', rtrim(get_option('siteurl'), '/'));
82 $home = preg_replace('#^https?://#', '', rtrim(get_option('home'), '/'));
83
84 return $home !== $siteurl;
85 }
86
87 /**
88 * Get the install sub directory if WP is installed in sub directory
89 * @return string
90 */
91 private function getSubDir()
92 {
93 $home = get_option('home');
94 $siteurl = get_option('siteurl');
95
96 if (empty($home) || empty($siteurl)) {
97 return '';
98 }
99
100 return str_replace([$home, '/'], '', $siteurl);
101 }
102 }
103