Current Path : /var/www/html/wp-content/plugins/duplicator-pro/classes/package/ |
Current File : /var/www/html/wp-content/plugins/duplicator-pro/classes/package/class.pack.multisite.php |
<?php use Duplicator\Libs\Snap\SnapDB; class DUP_PRO_Multisite { /** @var int[] */ public $FilterSites = array(); /** @var ?string[] */ protected $tablesFilters = null; /** * Filter props on json encode * * @return string[] */ public function __sleep() { $props = array_keys(get_object_vars($this)); return array_diff($props, array('tablesFilters')); } /** * Wakeup * * @return void */ public function __wakeup() { if (is_string($this->FilterSites)) { $this->FilterSites = []; } } /** * Get dirs to filter * * @return string[] */ public function getDirsToFilter() { if (!empty($this->FilterSites)) { $path_arr = array(); $wp_content_dir = str_replace("\\", "/", WP_CONTENT_DIR); foreach ($this->FilterSites as $site_id) { if ($site_id == 1) { if (DUP_PRO_MU::getGeneration() == DUP_PRO_MU_Generations::ThreeFivePlus) { $uploads_dir = $wp_content_dir . '/uploads'; foreach (scandir($uploads_dir) as $node) { $fullpath = $uploads_dir . '/' . $node; if ($node == '.' || $node == '.htaccess' || $node == '..') { continue; } if (is_dir($fullpath)) { if ($node != 'sites') { $path_arr[] = $fullpath; } } } } else { $path_arr[] = $wp_content_dir . '/uploads'; } } else { if (file_exists($wp_content_dir . '/uploads/sites/' . $site_id)) { $path_arr[] = $wp_content_dir . '/uploads/sites/' . $site_id; } if (file_exists($wp_content_dir . '/blogs.dir/' . $site_id)) { $path_arr[] = $wp_content_dir . '/blogs.dir/' . $site_id; } } } return $path_arr; } else { return array(); } } /** * Get tables to filter * * @return string[] */ public function getTablesToFilter() { if (is_null($this->tablesFilters)) { global $wpdb; $this->tablesFilters = array(); if (!empty($this->FilterSites)) { $prefixes = array(); foreach ($this->FilterSites as $site_id) { $prefix = $wpdb->get_blog_prefix($site_id); if ($site_id == 1) { $default_tables = array( 'commentmeta', 'comments', 'links', //'options', include always options table 'postmeta', 'posts', 'terms', 'term_relationships', 'term_taxonomy', 'termmeta', ); foreach ($default_tables as $tb) { $this->tablesFilters[] = $prefix . $tb; } } else { $prefixes[] = $prefix; } } if (count($prefixes)) { foreach ($prefixes as &$value) { $value = SnapDB::quoteRegex($value); } $regex = '^(' . implode('|', $prefixes) . ').+'; $sql_query = "SHOW TABLES WHERE Tables_in_" . esc_sql(DB_NAME) . " REGEXP '" . esc_sql($regex) . "'"; DUP_PRO_Log::trace('TABLE QUERY PREFIX FILTER: ' . $sql_query); $sub_tables = $wpdb->get_col($sql_query); $this->tablesFilters = array_merge($this->tablesFilters, $sub_tables); } } DUP_PRO_Log::traceObject('TABLES TO FILTERS:', $this->tablesFilters); } return $this->tablesFilters; } }