PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.2
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.2
4.9.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
ApplyFiltersTrait.php 2 months ago ArrayableTrait.php 7 months ago BatchSizeCalculateTrait.php 7 months ago BearerTokenTrait.php 4 months ago BenchmarkTrait.php 2 years ago BooleanTransientTrait.php 5 years ago DatabaseSearchReplaceTrait.php 2 weeks ago DbRowsGeneratorTrait.php 3 years ago DebugLogTrait.php 1 year ago DeveloperTimerTrait.php 9 months ago EndOfLinePlaceholderTrait.php 1 year ago EventLoggerTrait.php 1 month ago FileScanToCacheTrait.php 10 months ago FormatTrait.php 11 months ago HttpRequestTrait.php 9 months ago HydrateTrait.php 1 year ago I18nTrait.php 1 year ago IpResolverTrait.php 10 months ago MaintenanceTrait.php 5 months ago MemoryExhaustTrait.php 2 years ago MySQLRowsGeneratorTrait.php 7 months ago NoticesTrait.php 1 day ago PropertyConstructor.php 5 years ago RenameTmpDirectoryTrait.php 5 months ago ResourceTrait.php 4 months ago RestRequestTrait.php 3 months ago RestoreFileExclusionTrait.php 1 year ago SerializeTrait.php 1 year ago SetTimeLimitTrait.php 1 month ago SlashTrait.php 1 year ago SqlCommentTrait.php 3 months ago TablePrefixValidator.php 3 months ago UrlTrait.php 1 year ago ValueGetterTrait.php 1 year ago WindowsOsTrait.php 1 year ago
DatabaseSearchReplaceTrait.php
108 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\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 // Literal option names that start with `wp_` but are not per-blog prefixed. Their names must
41 // survive clone/push unchanged, otherwise a later export collides on the option_name UNIQUE
42 // key (error 1062). Do NOT add `wp_user_roles` — that one IS per-blog and must be renamed.
43 'wp_force_deactivated_plugins',
44 'wp_page_for_privacy_policy',
45 ];
46
47 public function excludedStrings()
48 {
49 return $this->excludedStrings;
50 }
51
52 /**
53 * Prepend the following characters to string: %2F%2F, \/\/, //
54 * This is to make sure that only valid hostnames are replaced
55 * @param $string
56 * @return string[]
57 */
58 public function generateHostnamePatterns($string)
59 {
60 return [
61 '%2F%2F' . str_replace('/', '%2F', $string), // HTML entity for WP Backery Page Builder Plugin
62 '\/\/' . str_replace('/', '\/', $string), // Escaped \/ used by revslider and several visual editors
63 '//' . $string, // //example.com
64 ];
65 }
66
67 protected function getSourceHostname()
68 {
69 $urlsHelper = WPStaging::make(Urls::class);
70
71 if ($this->isSubDir()) {
72 return trailingslashit($urlsHelper->getHomeUrlWithoutScheme()) . $this->getSubDir();
73 }
74
75 return $urlsHelper->getHomeUrlWithoutScheme();
76 }
77
78 /**
79 * Check if WP is installed in subdir
80 * @return boolean
81 */
82 private function isSubDir()
83 {
84 // Compare names without scheme to bypass cases where siteurl and home have different schemes http / https
85 // This is happening much more often than you would expect
86 $siteurl = preg_replace('#^https?://#', '', rtrim(get_option('siteurl'), '/'));
87 $home = preg_replace('#^https?://#', '', rtrim(get_option('home'), '/'));
88
89 return $home !== $siteurl;
90 }
91
92 /**
93 * Get the install sub directory if WP is installed in sub directory
94 * @return string
95 */
96 private function getSubDir()
97 {
98 $home = get_option('home');
99 $siteurl = get_option('siteurl');
100
101 if (empty($home) || empty($siteurl)) {
102 return '';
103 }
104
105 return str_replace([$home, '/'], '', $siteurl);
106 }
107 }
108